feat(richtext-lexical): add jsx and html converters for tab nodes (#10565)

This commit is contained in:
Alessio Gravili
2025-01-14 00:55:51 -07:00
committed by GitHub
parent 5d6c29f3df
commit 2e09da8a8c
10 changed files with 39 additions and 7 deletions

View File

@@ -0,0 +1,9 @@
import type { SerializedTabNode } from '../../../../../../nodeTypes.js'
import type { JSXConverters } from '../types.js'
export const TabJSXConverter: JSXConverters<SerializedTabNode> = {
tab: ({ node }) => {
// Tab
return node.text
},
}

View File

@@ -8,6 +8,7 @@ import { LinebreakJSXConverter } from './converters/linebreak.js'
import { LinkJSXConverter } from './converters/link.js'
import { ListJSXConverter } from './converters/list.js'
import { ParagraphJSXConverter } from './converters/paragraph.js'
import { TabJSXConverter } from './converters/tab.js'
import { TableJSXConverter } from './converters/table.js'
import { TextJSXConverter } from './converters/text.js'
import { UploadJSXConverter } from './converters/upload.js'
@@ -23,4 +24,5 @@ export const defaultJSXConverters: JSXConverters<DefaultNodeTypes> = {
...ListJSXConverter,
...LinkJSXConverter({}),
...UploadJSXConverter,
...TabJSXConverter,
}

View File

@@ -5,8 +5,10 @@ export { LinebreakJSXConverter } from './components/RichText/converter/converter
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 { UploadJSXConverter } from './components/RichText/converter/converters/upload.js'
export { defaultJSXConverters } from './components/RichText/converter/defaultConverters.js'

View File

@@ -1,8 +1,7 @@
import type { SerializedParagraphNode } from 'lexical'
import type { SerializedLineBreakNode } from '../../../../../nodeTypes.js'
import type { HTMLConverter } from '../types.js'
export const LinebreakHTMLConverter: HTMLConverter<SerializedParagraphNode> = {
export const LinebreakHTMLConverter: HTMLConverter<SerializedLineBreakNode> = {
converter() {
return `<br>`
},

View File

@@ -1,5 +1,4 @@
import type { SerializedParagraphNode } from 'lexical'
import type { SerializedParagraphNode } from '../../../../../nodeTypes.js'
import type { HTMLConverter } from '../types.js'
import { convertLexicalNodesToHTML } from '../index.js'

View File

@@ -0,0 +1,9 @@
import type { SerializedTabNode } from '../../../../../nodeTypes.js'
import type { HTMLConverter } from '../types.js'
export const TabHTMLConverter: HTMLConverter<SerializedTabNode> = {
converter({ node }) {
return node.text
},
nodeTypes: ['tab'],
}

View File

@@ -1,7 +1,6 @@
import type { SerializedTextNode } from 'lexical'
import escapeHTML from 'escape-html'
import type { SerializedTextNode } from '../../../../../nodeTypes.js'
import type { HTMLConverter } from '../types.js'
import { NodeFormat } from '../../../../../lexical/utils/nodeFormat.js'

View File

@@ -2,10 +2,12 @@ import type { HTMLConverter } from './types.js'
import { LinebreakHTMLConverter } from './converters/linebreak.js'
import { ParagraphHTMLConverter } from './converters/paragraph.js'
import { TabHTMLConverter } from './converters/tab.js'
import { TextHTMLConverter } from './converters/text.js'
export const defaultHTMLConverters: HTMLConverter<any>[] = [
ParagraphHTMLConverter,
TextHTMLConverter,
LinebreakHTMLConverter,
TabHTMLConverter,
]

View File

@@ -869,6 +869,8 @@ export {
export { LinebreakHTMLConverter } from './features/converters/html/converter/converters/linebreak.js'
export { ParagraphHTMLConverter } from './features/converters/html/converter/converters/paragraph.js'
export { TabHTMLConverter } from './features/converters/html/converter/converters/tab.js'
export { TextHTMLConverter } from './features/converters/html/converter/converters/text.js'
export { defaultHTMLConverters } from './features/converters/html/converter/defaultConverters.js'
export {

View File

@@ -1,5 +1,6 @@
import type {
SerializedLineBreakNode as _SerializedLineBreakNode,
SerializedTabNode as _SerializedTabNode,
SerializedTextNode as _SerializedTextNode,
SerializedEditorState,
SerializedElementNode,
@@ -55,6 +56,14 @@ export type SerializedTextNode = Spread<
_SerializedTextNode
>
export type SerializedTabNode = Spread<
{
children?: never // required so that our typed editor state doesn't automatically add children
type: 'tab'
},
_SerializedTabNode
>
export type SerializedLineBreakNode = Spread<
{
children?: never // required so that our typed editor state doesn't automatically add children