@@ -9,7 +9,7 @@ import {ActionStorage, WysiwygEditor, WysiwygEditorOptions} from '../core';
99import { ReactRenderStorage , RenderStorage } from '../extensions' ;
1010import { i18n } from '../i18n/bundle' ;
1111import { logger } from '../logger' ;
12- import { createCodemirror } from '../markup/codemirror' ;
12+ import { type CreateCodemirrorParams , createCodemirror } from '../markup/codemirror' ;
1313import type { YfmLangOptions } from '../markup/codemirror/yfm' ;
1414import { CodeEditor , Editor as MarkupEditor } from '../markup/editor' ;
1515import { Emitter , Receiver , SafeEventEmitter } from '../utils/event-emitter' ;
@@ -108,6 +108,17 @@ type ChangeEditorModeOptions = {
108108 reason : 'error-boundary' | 'settings' | 'manually' ;
109109} ;
110110
111+ export type MarkupConfig = {
112+ /** Additional extensions for codemirror instance. */
113+ extensions ?: CreateCodemirrorParams [ 'extensions' ] ;
114+ /**
115+ * Additional language data for markdown language in codemirror.
116+ * Can be used to configure additional autocompletions and others.
117+ * See more https://codemirror.net/docs/ref/#state.EditorState.languageDataAt
118+ */
119+ languageData ?: YfmLangOptions [ 'languageData' ] ;
120+ } ;
121+
111122export type EditorOptions = Pick <
112123 WysiwygEditorOptions ,
113124 'allowHTML' | 'linkify' | 'linkifyTlds' | 'extensions'
@@ -137,8 +148,9 @@ export type EditorOptions = Pick<
137148 splitMode ?: SplitMode ;
138149 renderPreview ?: RenderPreview ;
139150 preset : EditorPreset ;
151+ /** @deprecated Put extra extensions via MarkdownEditorMarkupConfig */
140152 extraMarkupExtensions ?: CodemirrorExtension [ ] ;
141- yfmLangOptions ?: YfmLangOptions ;
153+ markupConfig ?: MarkupConfig ;
142154} ;
143155
144156/** @internal */
@@ -151,8 +163,7 @@ export class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorI
151163 #renderPreview?: RenderPreview ;
152164 #wysiwygEditor?: WysiwygEditor ;
153165 #markupEditor?: MarkupEditor ;
154- #extraMarkupExtensions?: CodemirrorExtension [ ] ;
155- #yfmLangOptions?: YfmLangOptions ;
166+ #markupConfig: MarkupConfig ;
156167
157168 readonly #preset: EditorPreset ;
158169 #allowHTML?: boolean ;
@@ -275,8 +286,8 @@ export class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorI
275286 reactRenderer : this . #renderStorage,
276287 uploadHandler : this . fileUploadHandler ,
277288 needImgDimms : this . needToSetDimensionsForUploadedImages ,
278- extraMarkupExtensions : this . #extraMarkupExtensions ,
279- yfmLangOptions : this . #yfmLangOptions ,
289+ extensions : this . #markupConfig . extensions ,
290+ yfmLangOptions : { languageData : this . #markupConfig . languageData } ,
280291 receiver : this ,
281292 } ) ,
282293 ) ;
@@ -311,8 +322,8 @@ export class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorI
311322 this . #linkifyTlds = opts . linkifyTlds ;
312323 this . #allowHTML = opts . allowHTML ;
313324 this . #extensions = opts . extensions ;
314- this . #extraMarkupExtensions = opts . extraMarkupExtensions ;
315- this . #yfmLangOptions = opts . yfmLangOptions ;
325+ this . #markupConfig = { ... opts . markupConfig } ;
326+ this . #markupConfig . extensions ?? = opts . extraMarkupExtensions ;
316327
317328 this . #renderStorage = opts . renderStorage ;
318329 this . #fileUploadHandler = opts . fileUploadHandler ;
0 commit comments