Files
DeviceManager/src/lib/chord-editor/changes-panel.svelte.ts
2026-01-29 14:16:37 +01:00

45 lines
1.1 KiB
TypeScript

import { EditorView, showPanel, type Panel } from "@codemirror/view";
import { parsedChordsField } from "./parsed-chords-plugin";
import { mount, unmount } from "svelte";
import ChangesPanel from "./ChangesPanel.svelte";
function changesPanelFunc(view: EditorView): Panel {
let dom = document.createElement("div");
dom.style.display = "contents";
let viewState = $state.raw(view);
let parsed = $state.raw(view.state.field(parsedChordsField));
let component: {};
return {
dom,
mount() {
component = mount(ChangesPanel, {
target: dom,
props: {
get parsed() {
return parsed;
},
get view() {
return viewState;
},
},
});
},
update: (update) => {
if (
update.startState.field(parsedChordsField) !==
update.state.field(parsedChordsField)
) {
console.log("update changes panel");
parsed = update.state.field(parsedChordsField);
}
},
destroy() {
unmount(component);
},
};
}
export function changesPanel() {
return showPanel.of(changesPanelFunc);
}