import { EditorView, defaultTheme } from 'mikoeditor';
const container = document.getElementById('editor');
const editor = new EditorView(container, 'Hello, World!', defaultTheme);
editor.setLanguage('typescript');The main editor engine that handles text operations and state management.
new Editor(initialContent?: string)insertText(text: string): void- Insert text at cursor positionbackspace(): void- Delete character before cursordelete(): void- Delete character after cursornewLine(): void- Insert new line
moveCursorUp(): voidmoveCursorDown(): voidmoveCursorLeft(): voidmoveCursorRight(): voidmoveCursorToLineStart(): voidmoveCursorToLineEnd(): void
undo(): boolean- Returns true if undo was performedredo(): boolean- Returns true if redo was performed
selectAll(): voidcopy(): string | null- Returns copied text or nullcut(): string | null- Returns cut text or nullpaste(text: string): void
getContent(): stringsetContent(content: string): void
addListener(listener: EditorListener): voidremoveListener(listener: EditorListener): voidregisterKeyBinding(key: string, modifiers: KeyModifiers, command: EditorCommand): void
The visual interface component that renders the editor.
new EditorView(container: HTMLElement, initialContent?: string, theme?: Theme)setLanguage(language: string): voidgetLanguage(): stringsetTheme(theme: Theme): voidsetFontSize(size: number): void
focus(): voidisFocused(): booleanresize(): voidscrollTo(top: number, left: number): voidscrollToCursor(): void
getEditor(): Editor- Get the underlying editor instance
destroy(): void- Clean up resources
Low-level document management.
new Document(content?: string)getContent(): stringgetLine(lineIndex: number): stringgetLineCount(): numbergetTextInRange(range: Range): string
insertText(position: Position, text: string): voiddeleteText(range: Range): stringreplaceText(range: Range, newText: string): void
undo(): booleanredo(): boolean
isModified(): booleanmarkAsSaved(): void
Cursor and selection management.
new Cursor(initialPosition?: Position)getPosition(): PositionsetPosition(position: Position): voidmove(deltaLine: number, deltaColumn: number): void
startSelection(): voidextendSelection(newPosition: Position): voidclearSelection(): voidhasSelection(): booleangetSelection(): Range | null
selectAll(lastLineIndex: number, lastLineLength: number): voidselectLine(lineLength: number): voidselectWord(line: string): void
addListener(listener: CursorListener): voidremoveListener(listener: CursorListener): void
Syntax highlighting for various programming languages.
new SyntaxHighlighter()tokenize(text: string, languageName: string): Token[]
registerLanguage(language: LanguageDefinition): voidgetLanguages(): string[]isLanguageSupported(languageName: string): boolean
interface Position {
line: number;
column: number;
}interface Range {
start: Position;
end: Position;
}interface Theme {
background: string;
text: string;
keyword: string;
string: string;
comment: string;
number: string;
operator: string;
function: string;
type: string;
identifier: string;
punctuation: string;
lineNumber: string;
selection: string;
cursor: string;
}interface KeyModifiers {
ctrl: boolean;
shift: boolean;
alt: boolean;
}interface EditorCommand {
execute(editor: Editor): void;
}interface EditorListener {
onEditorChange(editor: Editor): void;
}interface LanguageDefinition {
name: string;
keywords: Set<string>;
operators: string[];
commentStart?: string;
commentEnd?: string;
lineComment?: string;
stringDelimiters: string[];
caseSensitive: boolean;
wordBoundary: RegExp;
}interface Token {
type: TokenType;
value: string;
start: number;
end: number;
}enum TokenType {
TEXT = 'text',
KEYWORD = 'keyword',
STRING = 'string',
COMMENT = 'comment',
NUMBER = 'number',
OPERATOR = 'operator',
IDENTIFIER = 'identifier',
FUNCTION = 'function',
TYPE = 'type',
WHITESPACE = 'whitespace',
PUNCTUATION = 'punctuation'
}const defaultTheme: Theme = {
background: '#1e1e1e',
text: '#d4d4d4',
keyword: '#569cd6',
string: '#ce9178',
comment: '#6a9955',
number: '#b5cea8',
operator: '#d4d4d4',
function: '#dcdcaa',
type: '#4ec9b0',
identifier: '#9cdcfe',
punctuation: '#d4d4d4',
lineNumber: '#858585',
selection: '#264f78',
cursor: '#ffffff'
};const lightTheme: Theme = {
background: '#ffffff',
text: '#000000',
keyword: '#0000ff',
string: '#a31515',
comment: '#008000',
number: '#098658',
operator: '#000000',
function: '#795e26',
type: '#267f99',
identifier: '#001080',
punctuation: '#000000',
lineNumber: '#237893',
selection: '#add6ff',
cursor: '#000000'
};javascript- JavaScripttypescript- TypeScriptpython- Pythonjson- JSON
const highlighter = new SyntaxHighlighter();
highlighter.registerLanguage({
name: 'rust',
keywords: new Set(['fn', 'let', 'mut', 'const', 'if', 'else', 'match']),
operators: ['=', '+', '-', '*', '/', '!', '&', '|', '^'],
lineComment: '//',
commentStart: '/*',
commentEnd: '*/',
stringDelimiters: ['"'],
caseSensitive: true,
wordBoundary: /[a-zA-Z_]/
});const editor = new EditorView(container);
// Listen to changes
editor.getEditor().addListener({
onEditorChange: (editor) => {
console.log('Content changed:', editor.getContent().length, 'characters');
}
});
// Custom key binding
editor.getEditor().registerKeyBinding('s', { ctrl: true, shift: false, alt: false }, {
execute: (editor) => {
console.log('Save triggered');
// Implement save functionality
}
});