Skip to content

Commit 2e09da8

Browse files
authored
feat(richtext-lexical): add jsx and html converters for tab nodes (#10565)
1 parent 5d6c29f commit 2e09da8

File tree

10 files changed

+39
-7
lines changed

10 files changed

+39
-7
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { SerializedTabNode } from '../../../../../../nodeTypes.js'
2+
import type { JSXConverters } from '../types.js'
3+
4+
export const TabJSXConverter: JSXConverters<SerializedTabNode> = {
5+
tab: ({ node }) => {
6+
// Tab
7+
return node.text
8+
},
9+
}

packages/richtext-lexical/src/exports/react/components/RichText/converter/defaultConverters.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { LinebreakJSXConverter } from './converters/linebreak.js'
88
import { LinkJSXConverter } from './converters/link.js'
99
import { ListJSXConverter } from './converters/list.js'
1010
import { ParagraphJSXConverter } from './converters/paragraph.js'
11+
import { TabJSXConverter } from './converters/tab.js'
1112
import { TableJSXConverter } from './converters/table.js'
1213
import { TextJSXConverter } from './converters/text.js'
1314
import { UploadJSXConverter } from './converters/upload.js'
@@ -23,4 +24,5 @@ export const defaultJSXConverters: JSXConverters<DefaultNodeTypes> = {
2324
...ListJSXConverter,
2425
...LinkJSXConverter({}),
2526
...UploadJSXConverter,
27+
...TabJSXConverter,
2628
}

packages/richtext-lexical/src/exports/react/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ export { LinebreakJSXConverter } from './components/RichText/converter/converter
55
export { LinkJSXConverter } from './components/RichText/converter/converters/link.js'
66
export { ListJSXConverter } from './components/RichText/converter/converters/list.js'
77
export { ParagraphJSXConverter } from './components/RichText/converter/converters/paragraph.js'
8+
export { TabJSXConverter } from './components/RichText/converter/converters/tab.js'
89
export { TableJSXConverter } from './components/RichText/converter/converters/table.js'
910
export { TextJSXConverter } from './components/RichText/converter/converters/text.js'
11+
1012
export { UploadJSXConverter } from './components/RichText/converter/converters/upload.js'
1113

1214
export { defaultJSXConverters } from './components/RichText/converter/defaultConverters.js'

packages/richtext-lexical/src/features/converters/html/converter/converters/linebreak.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import type { SerializedParagraphNode } from 'lexical'
2-
1+
import type { SerializedLineBreakNode } from '../../../../../nodeTypes.js'
32
import type { HTMLConverter } from '../types.js'
43

5-
export const LinebreakHTMLConverter: HTMLConverter<SerializedParagraphNode> = {
4+
export const LinebreakHTMLConverter: HTMLConverter<SerializedLineBreakNode> = {
65
converter() {
76
return `<br>`
87
},

packages/richtext-lexical/src/features/converters/html/converter/converters/paragraph.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import type { SerializedParagraphNode } from 'lexical'
2-
1+
import type { SerializedParagraphNode } from '../../../../../nodeTypes.js'
32
import type { HTMLConverter } from '../types.js'
43

54
import { convertLexicalNodesToHTML } from '../index.js'
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { SerializedTabNode } from '../../../../../nodeTypes.js'
2+
import type { HTMLConverter } from '../types.js'
3+
4+
export const TabHTMLConverter: HTMLConverter<SerializedTabNode> = {
5+
converter({ node }) {
6+
return node.text
7+
},
8+
nodeTypes: ['tab'],
9+
}

packages/richtext-lexical/src/features/converters/html/converter/converters/text.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import type { SerializedTextNode } from 'lexical'
2-
31
import escapeHTML from 'escape-html'
42

3+
import type { SerializedTextNode } from '../../../../../nodeTypes.js'
54
import type { HTMLConverter } from '../types.js'
65

76
import { NodeFormat } from '../../../../../lexical/utils/nodeFormat.js'

packages/richtext-lexical/src/features/converters/html/converter/defaultConverters.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ import type { HTMLConverter } from './types.js'
22

33
import { LinebreakHTMLConverter } from './converters/linebreak.js'
44
import { ParagraphHTMLConverter } from './converters/paragraph.js'
5+
import { TabHTMLConverter } from './converters/tab.js'
56
import { TextHTMLConverter } from './converters/text.js'
67

78
export const defaultHTMLConverters: HTMLConverter<any>[] = [
89
ParagraphHTMLConverter,
910
TextHTMLConverter,
1011
LinebreakHTMLConverter,
12+
TabHTMLConverter,
1113
]

packages/richtext-lexical/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -869,6 +869,8 @@ export {
869869
export { LinebreakHTMLConverter } from './features/converters/html/converter/converters/linebreak.js'
870870
export { ParagraphHTMLConverter } from './features/converters/html/converter/converters/paragraph.js'
871871

872+
export { TabHTMLConverter } from './features/converters/html/converter/converters/tab.js'
873+
872874
export { TextHTMLConverter } from './features/converters/html/converter/converters/text.js'
873875
export { defaultHTMLConverters } from './features/converters/html/converter/defaultConverters.js'
874876
export {

packages/richtext-lexical/src/nodeTypes.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type {
22
SerializedLineBreakNode as _SerializedLineBreakNode,
3+
SerializedTabNode as _SerializedTabNode,
34
SerializedTextNode as _SerializedTextNode,
45
SerializedEditorState,
56
SerializedElementNode,
@@ -55,6 +56,14 @@ export type SerializedTextNode = Spread<
5556
_SerializedTextNode
5657
>
5758

59+
export type SerializedTabNode = Spread<
60+
{
61+
children?: never // required so that our typed editor state doesn't automatically add children
62+
type: 'tab'
63+
},
64+
_SerializedTabNode
65+
>
66+
5867
export type SerializedLineBreakNode = Spread<
5968
{
6069
children?: never // required so that our typed editor state doesn't automatically add children

0 commit comments

Comments
 (0)