use-default-extensions.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { indentWithTab, defaultKeymap, deleteCharBackward } from '@codemirror/commands';
  2. import {
  3. markdown, markdownLanguage,
  4. } from '@codemirror/lang-markdown';
  5. import { syntaxHighlighting, HighlightStyle, defaultHighlightStyle } from '@codemirror/language';
  6. import { languages } from '@codemirror/language-data';
  7. import {
  8. Prec, type Extension,
  9. } from '@codemirror/state';
  10. import type { KeyBinding } from '@codemirror/view';
  11. import { keymap, EditorView } from '@codemirror/view';
  12. import { tags } from '@lezer/highlight';
  13. import type { UseCodeMirrorEditor } from '../services';
  14. import { emojiAutocompletionSettings } from '../services-internal';
  15. // set new markdownKeymap instead of default one
  16. // https://github.com/codemirror/lang-markdown/blob/main/src/index.ts#L17
  17. const markdownKeymap: KeyBinding[] = [
  18. { key: 'Backspace', run: deleteCharBackward },
  19. ];
  20. const markdownHighlighting = HighlightStyle.define([
  21. { tag: tags.heading1, class: 'cm-header-1 cm-header' },
  22. { tag: tags.heading2, class: 'cm-header-2 cm-header' },
  23. { tag: tags.heading3, class: 'cm-header-3 cm-header' },
  24. { tag: tags.heading4, class: 'cm-header-4 cm-header' },
  25. { tag: tags.heading5, class: 'cm-header-5 cm-header' },
  26. { tag: tags.heading6, class: 'cm-header-6 cm-header' },
  27. ]);
  28. const defaultExtensions: Extension[] = [
  29. EditorView.lineWrapping,
  30. markdown({ base: markdownLanguage, codeLanguages: languages, addKeymap: false }),
  31. keymap.of(markdownKeymap),
  32. keymap.of([indentWithTab]),
  33. Prec.lowest(keymap.of(defaultKeymap)),
  34. syntaxHighlighting(markdownHighlighting),
  35. Prec.lowest(syntaxHighlighting(defaultHighlightStyle)),
  36. emojiAutocompletionSettings,
  37. ];
  38. export const useDefaultExtensions = (
  39. codeMirrorEditor?: UseCodeMirrorEditor,
  40. ): void => {
  41. codeMirrorEditor?.appendExtensions([defaultExtensions]);
  42. };