1+ import type { Mark } from "@tiptap/core" ;
12import Bold from "@tiptap/extension-bold" ;
23import Code from "@tiptap/extension-code" ;
34import Italic from "@tiptap/extension-italic" ;
@@ -7,17 +8,22 @@ import { COLORS_DEFAULT } from "../editor/defaultColors.js";
78import {
89 BlockNoDefaults ,
910 BlockSchema ,
11+ BlockSpec ,
12+ createStyleSpec ,
13+ createStyleSpecFromTipTapMark ,
14+ getInlineContentSchemaFromSpecs ,
15+ getStyleSchemaFromSpecs ,
1016 InlineContentSchema ,
1117 InlineContentSpecs ,
1218 PartialBlockNoDefaults ,
1319 StyleSchema ,
1420 StyleSpecs ,
15- createStyleSpec ,
16- createStyleSpecFromTipTapMark ,
17- getInlineContentSchemaFromSpecs ,
18- getStyleSchemaFromSpecs ,
1921} from "../schema/index.js" ;
2022import {
23+ AudioBlockConfig ,
24+ BulletListItemBlockConfig ,
25+ CheckListItemBlockConfig ,
26+ CodeBlockConfig ,
2127 createAudioBlockSpec ,
2228 createBulletListItemBlockSpec ,
2329 createCheckListItemBlockSpec ,
@@ -32,24 +38,90 @@ import {
3238 createToggleListItemBlockSpec ,
3339 createVideoBlockSpec ,
3440 defaultProps ,
41+ DividerBlockConfig ,
42+ FileBlockConfig ,
43+ HeadingBlockConfig ,
44+ ImageBlockConfig ,
45+ NumberedListItemBlockConfig ,
46+ ParagraphBlockConfig ,
47+ QuoteBlockConfig ,
48+ ToggleListItemBlockConfig ,
49+ VideoBlockConfig ,
3550} from "./index.js" ;
36- import { createTableBlockSpec } from "./Table/block.js" ;
51+ import { createTableBlockSpec , TableBlockConfig } from "./Table/block.js" ;
3752
3853export const defaultBlockSpecs = {
39- audio : createAudioBlockSpec ( ) ,
40- bulletListItem : createBulletListItemBlockSpec ( ) ,
41- checkListItem : createCheckListItemBlockSpec ( ) ,
42- codeBlock : createCodeBlockSpec ( ) ,
43- divider : createDividerBlockSpec ( ) ,
44- file : createFileBlockSpec ( ) ,
45- heading : createHeadingBlockSpec ( ) ,
46- image : createImageBlockSpec ( ) ,
47- numberedListItem : createNumberedListItemBlockSpec ( ) ,
48- paragraph : createParagraphBlockSpec ( ) ,
49- quote : createQuoteBlockSpec ( ) ,
50- table : createTableBlockSpec ( ) ,
51- toggleListItem : createToggleListItemBlockSpec ( ) ,
52- video : createVideoBlockSpec ( ) ,
54+ // To speed up TS compilation, we re-use the type assertions to avoid TS needing to compare types all the time
55+ audio : createAudioBlockSpec ( ) as BlockSpec <
56+ AudioBlockConfig [ "type" ] ,
57+ AudioBlockConfig [ "propSchema" ] ,
58+ AudioBlockConfig [ "content" ]
59+ > ,
60+ bulletListItem : createBulletListItemBlockSpec ( ) as BlockSpec <
61+ BulletListItemBlockConfig [ "type" ] ,
62+ BulletListItemBlockConfig [ "propSchema" ] ,
63+ BulletListItemBlockConfig [ "content" ]
64+ > ,
65+ checkListItem : createCheckListItemBlockSpec ( ) as BlockSpec <
66+ CheckListItemBlockConfig [ "type" ] ,
67+ CheckListItemBlockConfig [ "propSchema" ] ,
68+ CheckListItemBlockConfig [ "content" ]
69+ > ,
70+ codeBlock : createCodeBlockSpec ( ) as BlockSpec <
71+ CodeBlockConfig [ "type" ] ,
72+ CodeBlockConfig [ "propSchema" ] ,
73+ CodeBlockConfig [ "content" ]
74+ > ,
75+ divider : createDividerBlockSpec ( ) as BlockSpec <
76+ DividerBlockConfig [ "type" ] ,
77+ DividerBlockConfig [ "propSchema" ] ,
78+ DividerBlockConfig [ "content" ]
79+ > ,
80+ file : createFileBlockSpec ( ) as BlockSpec <
81+ FileBlockConfig [ "type" ] ,
82+ FileBlockConfig [ "propSchema" ] ,
83+ FileBlockConfig [ "content" ]
84+ > ,
85+ heading : createHeadingBlockSpec ( ) as BlockSpec <
86+ HeadingBlockConfig [ "type" ] ,
87+ HeadingBlockConfig [ "propSchema" ] ,
88+ HeadingBlockConfig [ "content" ]
89+ > ,
90+ image : createImageBlockSpec ( ) as BlockSpec <
91+ ImageBlockConfig [ "type" ] ,
92+ ImageBlockConfig [ "propSchema" ] ,
93+ ImageBlockConfig [ "content" ]
94+ > ,
95+ numberedListItem : createNumberedListItemBlockSpec ( ) as BlockSpec <
96+ NumberedListItemBlockConfig [ "type" ] ,
97+ NumberedListItemBlockConfig [ "propSchema" ] ,
98+ NumberedListItemBlockConfig [ "content" ]
99+ > ,
100+ paragraph : createParagraphBlockSpec ( ) as BlockSpec <
101+ ParagraphBlockConfig [ "type" ] ,
102+ ParagraphBlockConfig [ "propSchema" ] ,
103+ ParagraphBlockConfig [ "content" ]
104+ > ,
105+ quote : createQuoteBlockSpec ( ) as BlockSpec <
106+ QuoteBlockConfig [ "type" ] ,
107+ QuoteBlockConfig [ "propSchema" ] ,
108+ QuoteBlockConfig [ "content" ]
109+ > ,
110+ table : createTableBlockSpec ( ) as BlockSpec <
111+ TableBlockConfig [ "type" ] ,
112+ TableBlockConfig [ "propSchema" ] ,
113+ TableBlockConfig [ "content" ]
114+ > ,
115+ toggleListItem : createToggleListItemBlockSpec ( ) as BlockSpec <
116+ ToggleListItemBlockConfig [ "type" ] ,
117+ ToggleListItemBlockConfig [ "propSchema" ] ,
118+ ToggleListItemBlockConfig [ "content" ]
119+ > ,
120+ video : createVideoBlockSpec ( ) as BlockSpec <
121+ VideoBlockConfig [ "type" ] ,
122+ VideoBlockConfig [ "propSchema" ] ,
123+ VideoBlockConfig [ "content" ]
124+ > ,
53125} as const ;
54126
55127// underscore is used that in case a user overrides DefaultBlockSchema,
@@ -137,11 +209,26 @@ const BackgroundColor = createStyleSpec(
137209) ;
138210
139211export const defaultStyleSpecs = {
140- bold : createStyleSpecFromTipTapMark ( Bold , "boolean" ) ,
141- italic : createStyleSpecFromTipTapMark ( Italic , "boolean" ) ,
142- underline : createStyleSpecFromTipTapMark ( Underline , "boolean" ) ,
143- strike : createStyleSpecFromTipTapMark ( Strike , "boolean" ) ,
144- code : createStyleSpecFromTipTapMark ( Code , "boolean" ) ,
212+ bold : createStyleSpecFromTipTapMark (
213+ Bold as Mark & { name : "bold" } ,
214+ "boolean" ,
215+ ) ,
216+ italic : createStyleSpecFromTipTapMark (
217+ Italic as Mark & { name : "italic" } ,
218+ "boolean" ,
219+ ) ,
220+ underline : createStyleSpecFromTipTapMark (
221+ Underline as Mark & { name : "underline" } ,
222+ "boolean" ,
223+ ) ,
224+ strike : createStyleSpecFromTipTapMark (
225+ Strike as Mark & { name : "strike" } ,
226+ "boolean" ,
227+ ) ,
228+ code : createStyleSpecFromTipTapMark (
229+ Code as Mark & { name : "code" } ,
230+ "boolean" ,
231+ ) ,
145232 textColor : TextColor ,
146233 backgroundColor : BackgroundColor ,
147234} satisfies StyleSpecs ;
0 commit comments