CodeMirror = (doc = "", config = {}) => {
const extensions = config.extensions ?? [];
const updateViewOf = codemirror.EditorView.updateListener.of((update) => {
console.log(update);
container.dispatchEvent(new Event("input", { bubbles: true }));
});
const view = new codemirror.EditorView({
doc,
extensions: [updateViewOf, ...extensions]
});
const el = view.dom;
const container = htl.html`<div><span onInput=${(evt) =>
evt.stopPropagation()}>${el}`;
Object.defineProperty(container, "value", {
enumerable: true,
get: () => view.state.doc.toString(),
set: (newContent = "") => {
const change = calcChange(
view.state.doc.toString(),
newContent,
view.state.selection
);
view.dispatch(change);
}
});
return container;
}