auto-pair.ts 801 B

1234567891011121314151617181920212223242526272829
  1. import { keymap } from '@codemirror/view'
  2. import { Compartment, Prec, TransactionSpec } from '@codemirror/state'
  3. import { closeBrackets, closeBracketsKeymap } from './close-brackets'
  4. const autoPairConf = new Compartment()
  5. export const autoPair = ({
  6. autoPairDelimiters,
  7. }: {
  8. autoPairDelimiters: boolean
  9. }) => autoPairConf.of(createAutoPair(autoPairDelimiters))
  10. export const setAutoPair = (autoPairDelimiters: boolean): TransactionSpec => {
  11. return {
  12. effects: autoPairConf.reconfigure(createAutoPair(autoPairDelimiters)),
  13. }
  14. }
  15. const createAutoPair = (enabled: boolean) => {
  16. if (!enabled) {
  17. return []
  18. }
  19. return [
  20. closeBrackets(),
  21. // NOTE: using Prec.highest as this needs to run before the default Backspace handler
  22. Prec.highest(keymap.of(closeBracketsKeymap)),
  23. ]
  24. }