import { LexicalEditor, LexicalNode } from 'lexical'; import { PointType } from 'lexical/LexicalSelection'; export interface TranslationBlock { key: string; text: string; } export interface TranslationBlockWithSelection extends TranslationBlock { nodes: LexicalNode[]; point: PointType; } export interface NonTextNodeMatch { key: string; index: number; length: number; } export interface TranslatePayload { sourceLanguage?: string; targetLanguage: string; texts: { [key: string]: string; }; } export type TranslateAPI = (payload: TranslatePayload, onData: ({ data, progress, error }: { data: TranslationBlock; progress?: number; error?: string; }) => void) => Promise; export interface TranslationOptions { sourceLanguage?: string; targetLanguage: string; translateAPI?: TranslateAPI; onProgress?: (progress: number) => void; signal?: AbortSignal; autoReplace?: boolean; } export interface TranslateSelectionOperations { preview: () => string; replace: (editor?: LexicalEditor) => void; insertBelow: () => void; } export interface TranslationError { key: string; text: string; error: string; } export interface TranslationResult extends TranslateSelectionOperations { translations: TranslationBlock[]; errors?: TranslationError[]; }