import Quill, { Module } from 'quill';
import { Emoji, EmojiMartData } from '@emoji-mart/data';

interface CustomEmojiData {
    id: string;
    name: string;
    emojis: Emoji[];
}

interface EmojiI18n {
    search: string;
    search_no_results_1: string;
    search_no_results_2: string;
    pick: string;
    add_custom: string;
    categories: {
        activity: string;
        custom: string;
        flags: string;
        foods: string;
        frequent: string;
        nature: string;
        objects: string;
        people: string;
        places: string;
        search: string;
        symbols: string;
    };
    skins: {
        choose: string;
        1: string;
        2: string;
        3: string;
        4: string;
        5: string;
        6: string;
    };
}

interface EmojiOptions {
    data: EmojiMartData;
    i18n: EmojiI18n;
    categories: EmojiCategory[];
    custom: CustomEmojiData[];
    autoFocus: boolean;
    categoryIcons: Record<EmojiCategory, {
        src?: string;
        svg?: string;
    }>;
    dynamicWidth: boolean;
    emojiButtonColors: (RGB | RGBA | HEX)[];
    emojiButtonRadius: `${number}${LengthUnit}`;
    emojiButtonSize: number;
    emojiSize: number;
    emojiVersion: `${number}` | `${number}.${number}`;
    exceptEmojis: string[];
    icons: 'auto' | 'outline' | 'solid';
    maxFrequentRows: number;
    navPosition: 'top' | 'bottom' | 'none';
    noCountryFlags: boolean;
    noResultsEmoji: string;
    perLine: number;
    previewEmoji: 'point_up' | 'point_down';
    previewPosition: 'top' | 'bottom' | 'none';
    searchPosition: 'sticky' | 'static' | 'none';
    set: 'native' | 'apple' | 'facebook' | 'google' | 'twitter';
    skin: 1 | 2 | 3 | 4 | 5 | 6;
    skinTonePosition: 'preview' | 'search' | 'none';
    theme: 'auto' | 'light' | 'dark';
}
type EmojiCategory = 'frequent' | 'people' | 'nature' | 'foods' | 'activity' | 'places' | 'objects' | 'symbols' | 'flags';
type RGB = `rgb(${number}, ${number}, ${number})`;
type RGBA = `rgba(${number}, ${number}, ${number}, ${number})`;
type HEX = `#${string}`;
type LengthUnit = 'cm' | 'mm' | 'in' | 'px' | 'pt' | 'pc' | 'em' | 'ex' | 'ch' | 'rem' | 'vw' | 'vh' | 'vmin' | 'vmax' | '%' | 'lh' | 'rlh' | 'cqw' | 'cqh' | 'cqi' | 'cqb' | 'cqmax' | 'cqmin';

declare class EmojiModule extends Module<Partial<EmojiOptions>> {
    private readonly toolbar?;
    private readonly button?;
    private picker?;
    constructor(quill: Quill, options: Partial<EmojiOptions>);
    openDialog(): void;
    private selectEmoji;
    private onClickOutside;
    closeDialog(): void;
}

export { EmojiModule };
