import { MentionFeed, MentionFeedObjectItem, EditorConfig, ClassicEditor } from 'ckeditor5';
export { MentionFeedObjectItem } from 'ckeditor5';
import * as i0 from '@angular/core';
import { EventEmitter } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';

type SdMiniEditorOutputFormat = 'html' | 'markdown';
interface SdMiniEditorMentionConfig {
    /** Feed data cho mention - có thể là array hoặc function trả về Promise
     * CKEditor MentionFeed đã hỗ trợ: marker, minChars, dropdownLimit, itemRenderer
     */
    feeds?: MentionFeed[];
    /** Custom render function cho giá trị mention khi chèn vào editor
     * Trả về object với text và các attributes tùy chỉnh
     */
    valueRender?: (item: MentionFeedObjectItem) => {
        text: string;
        attributes?: Record<string, string>;
    };
}
type SdMiniEditorMentionItem<T = any> = MentionFeedObjectItem & {
    data?: T;
};
interface SdMiniEditorOption {
    /** Output format: 'html' hoặc 'markdown' (mặc định: 'html') */
    outputFormat?: SdMiniEditorOutputFormat;
    /** Placeholder text */
    placeholder?: string;
    /** Chiều cao editor (mặc định: auto) */
    height?: string;
    /** Chiều cao tối đa của editor (ví dụ: '300px') */
    maxHeight?: string;
    /** Bật/tắt mention plugin */
    enableMention?: boolean;
    /** Cấu hình mention */
    mentionConfig?: SdMiniEditorMentionConfig;
    /** Callback khi nội dung thay đổi */
    onChange?: (content: string) => void;
    /** Callback khi blur */
    onBlur?: (event: FocusEvent) => void;
    /** Callback khi focus */
    onFocus?: (event: FocusEvent) => void;
    /** Callback khi mention được chọn */
    onMentionSelect?: (item: SdMiniEditorMentionItem) => void;
}
type SdMiniEditorConfig = EditorConfig & {
    getOption?: () => SdMiniEditorOption;
};

/**
 * Component sd-mini-editor - Editor đơn giản cho comment input
 * Sử dụng CKEditor với chế độ đơn giản (bold, italic, link)
 * Hỗ trợ mention và output format (html/markdown)
 *
 * @example
 * ```html
 * <sd-mini-editor
 *   [option]="editorOption"
 *   [(ngModel)]="content"
 *   (contentChange)="onContentChange($event)"
 * >
 * </sd-mini-editor>
 * ```
 */
declare class SdMiniEditor implements ControlValueAccessor {
    #private;
    /** Cấu hình option cho editor */
    option: SdMiniEditorOption;
    get maxEditorHeight(): string | undefined;
    /** NgModel binding - nội dung HTML/Markdown */
    value: string;
    valueChange: EventEmitter<string>;
    /** Event emitter khi content thay đổi */
    contentChange: EventEmitter<string>;
    /** Event emitter khi blur */
    blur: EventEmitter<FocusEvent>;
    /** Event emitter khi focus */
    focus: EventEmitter<FocusEvent>;
    /** Disabled state */
    disabled: boolean;
    Editor: typeof ClassicEditor;
    get editorConfig(): SdMiniEditorConfig;
    constructor();
    ngOnDestroy(): void;
    /**
     * Xử lý khi editor ready
     */
    onReady(editor: ClassicEditor): void;
    /**
     * Set nội dung cho editor
     */
    setContent(content: string): void;
    /**
     * Get nội dung từ editor
     */
    getContent(): string;
    /**
     * Get nội dung HTML gốc (không convert)
     */
    getHtmlContent(): string;
    /**
     * Focus vào editor
     */
    focusEditor(): void;
    /**
     * Insert mention vào vị trí con trỏ hiện tại
     */
    insertMention(item: {
        id: string;
        name: string;
        marker?: string;
    }): void;
    /**
     * Get danh sách mentions trong nội dung
     */
    getMentions(): Array<{
        id: string;
        name: string;
        marker: string;
    }>;
    /**
     * ControlValueAccessor: Write value
     */
    writeValue(value: string): void;
    /**
     * ControlValueAccessor: Register change callback
     */
    registerOnChange(fn: (value: string) => void): void;
    /**
     * ControlValueAccessor: Register touched callback
     */
    registerOnTouched(fn: () => void): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SdMiniEditor, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SdMiniEditor, "sd-mini-editor", never, { "option": { "alias": "option"; "required": true; }; "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "valueChange": "valueChange"; "contentChange": "contentChange"; "blur": "blur"; "focus": "focus"; }, never, never, true, never>;
}

export { SdMiniEditor };
export type { SdMiniEditorConfig, SdMiniEditorMentionConfig, SdMiniEditorMentionItem, SdMiniEditorOption, SdMiniEditorOutputFormat };
