mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-18 07:23:51 +01:00
Add .oxfmtignore to skip generated bindings and wasm-pack output. Add npm format script, update DEVELOPMENT.md for Vite+ toolchain, and format all non-generated files with oxfmt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
import { yaml } from "@codemirror/lang-yaml";
|
|
import { syntaxHighlighting } from "@codemirror/language";
|
|
import { MergeView } from "@codemirror/merge";
|
|
import { EditorView } from "@codemirror/view";
|
|
import classNames from "classnames";
|
|
import { useEffect, useRef } from "react";
|
|
import "./DiffViewer.css";
|
|
import { readonlyExtensions, syntaxHighlightStyle } from "./extensions";
|
|
|
|
interface Props {
|
|
/** Original/previous version (left side) */
|
|
original: string;
|
|
/** Modified/current version (right side) */
|
|
modified: string;
|
|
className?: string;
|
|
}
|
|
|
|
export function DiffViewer({ original, modified, className }: Props) {
|
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
const viewRef = useRef<MergeView | null>(null);
|
|
|
|
useEffect(() => {
|
|
if (!containerRef.current) return;
|
|
|
|
// Clean up previous instance
|
|
viewRef.current?.destroy();
|
|
|
|
const sharedExtensions = [
|
|
yaml(),
|
|
syntaxHighlighting(syntaxHighlightStyle),
|
|
...readonlyExtensions,
|
|
EditorView.lineWrapping,
|
|
];
|
|
|
|
viewRef.current = new MergeView({
|
|
a: {
|
|
doc: original,
|
|
extensions: sharedExtensions,
|
|
},
|
|
b: {
|
|
doc: modified,
|
|
extensions: sharedExtensions,
|
|
},
|
|
parent: containerRef.current,
|
|
collapseUnchanged: { margin: 2, minSize: 3 },
|
|
highlightChanges: false,
|
|
gutter: true,
|
|
orientation: "a-b",
|
|
revertControls: undefined,
|
|
});
|
|
|
|
return () => {
|
|
viewRef.current?.destroy();
|
|
viewRef.current = null;
|
|
};
|
|
}, [original, modified]);
|
|
|
|
return (
|
|
<div
|
|
ref={containerRef}
|
|
className={classNames("cm-wrapper cm-multiline h-full w-full", className)}
|
|
/>
|
|
);
|
|
}
|