vizhub-core / codemirror-interact

Home Page:https://replit.com/@util/codemirror-interact

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CodeMirror Interact

Run on Replit badge NPM version badge

A CodeMirror extension that lets you interact with different values (clicking, dragging, etc).

interact.mp4

demo

Usage

import { EditorState } from '@codemirror/state';
import { EditorView } from '@codemirror/view';
import interact from '@replit/codemirror-interact';

// hold Alt and drag / click values
new EditorView({
  state: EditorState.create({
    doc: 'const num = 123',
    extensions: [
      interact({
        rules: [
          // a rule for a number dragger
          {
            // the regexp matching the value
            regexp: /-?\b\d+\.?\d*\b/g,
            // set cursor to "ew-resize" on hover
            cursor: "ew-resize",
            // change number value based on mouse X movement on drag
            onDrag: (text, setText, e) => {
              const newVal = Number(text) + e.movementX;
              if (isNaN(newVal)) return;
              setText(newVal.toString());
            },
          }
        ],
      }),
    ],
  }),
  parent: document.querySelector('#editor'),
});

About

https://replit.com/@util/codemirror-interact


Languages

Language:TypeScript 95.0%Language:HTML 2.3%Language:JavaScript 1.7%Language:Nix 0.9%