mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-06-16 21:03:58 +08:00
64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { useMemo, type Ref } from 'react';
|
|
import CodeMirror, { type ReactCodeMirrorRef } from '@uiw/react-codemirror';
|
|
import { yaml } from '@codemirror/lang-yaml';
|
|
import { search, searchKeymap, highlightSelectionMatches } from '@codemirror/search';
|
|
import { keymap } from '@codemirror/view';
|
|
|
|
type ConfigSourceEditorProps = {
|
|
value: string;
|
|
onChange: (value: string) => void;
|
|
editorRef?: Ref<ReactCodeMirrorRef>;
|
|
theme: 'light' | 'dark';
|
|
editable: boolean;
|
|
placeholder: string;
|
|
};
|
|
|
|
export default function ConfigSourceEditor({
|
|
value,
|
|
onChange,
|
|
editorRef,
|
|
theme,
|
|
editable,
|
|
placeholder,
|
|
}: ConfigSourceEditorProps) {
|
|
const extensions = useMemo(
|
|
() => [yaml(), search(), highlightSelectionMatches(), keymap.of(searchKeymap)],
|
|
[]
|
|
);
|
|
|
|
return (
|
|
<CodeMirror
|
|
ref={editorRef}
|
|
value={value}
|
|
onChange={onChange}
|
|
extensions={extensions}
|
|
theme={theme}
|
|
editable={editable}
|
|
placeholder={placeholder}
|
|
height="100%"
|
|
style={{ height: '100%' }}
|
|
basicSetup={{
|
|
lineNumbers: true,
|
|
highlightActiveLineGutter: true,
|
|
highlightActiveLine: true,
|
|
foldGutter: true,
|
|
dropCursor: true,
|
|
allowMultipleSelections: true,
|
|
indentOnInput: true,
|
|
bracketMatching: true,
|
|
closeBrackets: true,
|
|
autocompletion: false,
|
|
rectangularSelection: true,
|
|
crosshairCursor: false,
|
|
highlightSelectionMatches: true,
|
|
closeBracketsKeymap: true,
|
|
searchKeymap: true,
|
|
foldKeymap: true,
|
|
completionKeymap: false,
|
|
lintKeymap: true,
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
|