import { KojiToken } from '../utils/KojiTokenizer'; /** * エディタの現在状態を表すオブジェクト */ export interface EditorObject { /** エディタの現在のテキスト内容(プレーンテキスト) */ text: string; /** トークン化された結果 */ tokens: KojiToken[]; /** 現在のカーソル位置またはテキスト選択範囲 */ selection: { /** 選択開始位置(文字のオフセット) */ start: number; /** 選択終了位置(文字のオフセット) */ end: number; /** カーソルの方向(forward: 右から左、backward: 左から右) */ direction?: 'forward' | 'backward' | 'none'; }; /** エディタがフォーカスされているかどうか */ isFocused: boolean; /** エディタが無効化されているかどうか */ isDisabled: boolean; /** エディタの書字方向 */ writingMode: 'vertical' | 'horizontal'; /** パースエラーの一覧 */ errors: KojiParseError[]; } /** * Kojiテキストのパースエラー情報 */ export interface KojiParseError { /** エラーメッセージ */ message: string; /** エラー発生位置の開始オフセット */ start: number; /** エラー発生位置の終了オフセット */ end: number; /** エラーの重要度 */ severity?: 'error' | 'warning' | 'info'; /** エラーコード(オプション) */ code?: string; /** 関連するトークン(オプション) */ token?: KojiToken; } /** * KojiEditorコンポーネントのref経由で公開されるAPIハンドル */ export interface KojiEditorRef { /** 現在のエディタ状態を取得 */ getEditorObject(): EditorObject; /** テキストを設定 */ setText(text: string): void; /** 選択範囲を設定 */ setSelection(start: number, end: number): void; /** エディタにフォーカス */ focus(): void; /** エディタからフォーカスを外す */ blur(): void; /** 現在のテキストを取得 */ getText(): string; /** 現在のトークンを取得 */ getTokens(): KojiToken[]; /** 現在の選択範囲を取得 */ getSelection(): { start: number; end: number; direction?: 'forward' | 'backward' | 'none'; }; /** カーソル位置にテキストを挿入 */ insertText(text: string): void; /** テキストの一部を置換 */ replaceText(start: number, end: number, text: string): void; } /** * KojiEditorコンポーネントのProps */ export interface KojiEditorProps { /** エディタのカスタムスタイル */ style?: React.CSSProperties; /** 初期表示テキスト(制御されていないコンポーネントの場合) */ srcInput?: string; /** エディタを無効化する */ disabled?: boolean; /** 外部から提供されるエラー情報 */ errors?: KojiParseError[]; /** 書字方向(縦書き/横書き) */ writingMode?: 'vertical' | 'horizontal'; /** 外部からハイライトする範囲の指定 */ highlights?: { /** ハイライト開始位置 */ start: number; /** ハイライト終了位置 */ end: number; /** カスタムCSSクラス名 */ className?: string; }[]; /** 外部からカーソル位置を制御する */ selection?: { start: number; end: number; }; /** テキスト入力時のコールバック */ onInput?: (editor: EditorObject) => void; /** フォーカス時のコールバック */ onFocused?: (editor: EditorObject) => void; /** ブラー時のコールバック */ onBlurred?: (editor: EditorObject) => void; /** 選択範囲変更時のコールバック */ onSelectionChange?: (editor: EditorObject) => void; } //# sourceMappingURL=editor.d.ts.map