Add Markdown visual editor support

GitOrigin-RevId: 4ec2ffb276c729a58f82ccb26ed571f4187a4178
This commit is contained in:
Domagoj Kriskovic
2026-06-04 08:06:04 +00:00
committed by Copybot
parent e38f4e18e4
commit 5cf1b43ce7
10 changed files with 45 additions and 9 deletions
@@ -9,6 +9,7 @@ import {
import { visualHighlightStyle, visualTheme } from './visual-theme'
import { atomicDecorations } from './atomic-decorations'
import { markDecorations } from './mark-decorations'
import importOverleafModules from '../../../../../macros/import-overleaf-module.macro'
import { EditorView, ViewPlugin } from '@codemirror/view'
import { visualKeymap } from './visual-keymap'
import { mousedown, mouseDownEffect } from './selection'
@@ -27,6 +28,15 @@ type Options = {
previewByPath: (path: string) => PreviewPath | null
}
// Language-specific visual editor extensions provided by modules (e.g. the
// markdown visual editor). They live in the visual bundle so they are only
// active in visual mode and react to switching editor modes.
const visualEditorExtensions: Array<(options: Options) => Extension> =
importOverleafModules('sourceEditorVisualExtensions').map(
(item: { import: { extension: (options: Options) => Extension } }) =>
item.import.extension
)
const visualConf = new Compartment()
export const toggleVisualEffect = StateEffect.define<boolean>()
@@ -171,6 +181,7 @@ const extension = (options: Options) => [
mousedown,
listItemMarker,
atomicDecorations(options),
visualEditorExtensions.map(extension => extension(options)),
markDecorations, // NOTE: must be after atomicDecorations, so that mark decorations wrap inline widgets
visualKeymap,
commandTooltip,