import { EmojiItemRegex, SetEmojiItemRegex } from './base.js';

type SlicePosition = 'start' | 'end';
type SliceValue = number | 'full';
/**
 * Slice of sequence
 */
interface SimilarRegexItemSlice {
    index: number;
    slice: SliceValue;
}
/**
 * Similar sequence
 */
interface SimilarRegexItemSequence {
    type: SlicePosition;
    slices: SimilarRegexItemSlice[];
}
/**
 * Result if findSimilarRegexItemSequences()
 */
interface SimilarRegexItemSequenceResult {
    score: number;
    sequences: SimilarRegexItemSequence[];
}
/**
 * Find similar item sequences
 *
 * Returns sequence(s) with highest score. Only one of results should be
 * applied to items. If there are multiple sequences, clone items list,
 * attempt to apply each sequence, run further optimisations on each fork
 * and see which one returns better result.
 *
 * Returns undefined if no common sequences found
 */
declare function findSimilarRegexItemSequences(items: EmojiItemRegex[]): SimilarRegexItemSequenceResult | undefined;
/**
 * Merge similar sequences
 *
 * Accepts callback to run optimisation on created subset
 */
declare function mergeSimilarRegexItemSequences(items: EmojiItemRegex[], merge: SimilarRegexItemSequence, optimise?: (set: SetEmojiItemRegex) => EmojiItemRegex): EmojiItemRegex[];
/**
 * Merge similar items
 */
declare function mergeSimilarItemsInSet(set: SetEmojiItemRegex): EmojiItemRegex;

export { findSimilarRegexItemSequences, mergeSimilarItemsInSet, mergeSimilarRegexItemSequences };
