auto-pair.ts 800 B

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