/// <reference path="../test/test-suites/extension.d.ts" />
/// <reference path="../test/test-suites/plugin.d.ts" />
/// <reference path="../packages/plugin-antd/src/toFilter.d.ts" />
/// <reference path="../packages/plugin-antd/src/toMenu.d.ts" />
/// <reference path="../packages/plugin-antd/src/toSelect.d.ts" />
/// <reference path="../packages/plugin-antd/src/toValueMap.d.ts" />
/// <reference path="../packages/plugin-react/src/isMatch/typing.d.ts" />
/// <reference types="@enum-plus/extension" />
import type { EnumExtension } from "./extension";
import type { EnumInitOptions } from './enum';
import type { EnumItemInterface, EnumItemOptions } from './enum-item';
import type { EnumItemFields, InheritableEnumItems, MapResult, ToListConfig, ToMapConfig } from './enum-items';
import { EnumItemsArray } from './enum-items';
import type { EnumInit, EnumKey, EnumValue, FindEnumKeyByValue, ListItem, PrimitiveOf, ValueTypeFromSingleInit } from './types';
import { ENUM_OPTIONS, IS_ENUM } from './utils';
/**
 * - **EN:** Enum collection extension base class, used to extend the Enums
 * - **CN:** 枚举集合扩展基类，用于扩展枚举
 */
export declare class EnumExtensionClass<T extends EnumInit<K, V>, K extends EnumKey<T> = EnumKey<T>, V extends EnumValue = ValueTypeFromSingleInit<T[K], K>> implements EnumExtension<T, K, V> {
}
/**
 * - **EN:** Enum collection
 * - **CN:** 枚举项集合
 */
export declare class EnumCollectionClass<const T extends EnumInit<K, V>, K extends EnumKey<T> = EnumKey<T>, V extends EnumValue = ValueTypeFromSingleInit<T[K], K>, const LP = any> extends EnumExtensionClass<T, K, V> implements InheritableEnumItems<T, K, V, LP> {
    private readonly __options__;
    private readonly _ds;
    constructor(init?: T, options?: EnumInitOptions<T, K, V, LP>);
    /**
     * - **EN:** A boolean value indicates that this is an enum collection instance.
     * - **CN:** 布尔值，表示这是一个枚举集合实例
     */
    get [IS_ENUM](): true;
    /**
     * - **EN:** Get the options to initialize the enum.
     * - **CN:** 获取初始化枚举时的选项
     */
    get [ENUM_OPTIONS](): EnumItemOptions<T[K], K, V, LP> | undefined;
    [Symbol.hasInstance]<T>(instance: T): instance is Extract<T, K | V>;
    /**
     * The enum collection name, supports localization. Note that it usually returns a string, but if
     * a custom `localize` function is set, the return value may vary depending on the implementation
     * of the method.
     *
     * - **CN:** 枚举集合显示名称，支持本地化。注意，通常情况下返回的是字符串，但如果设置了自定义的 `localize` 函数，则返回值可能有所不同，取决于方法的实现
     *
     * @returns {string | undefined} The localized name of the enum collection, or undefined if not
     *   set.
     */
    get name(): string | undefined;
    label<KV extends V | K | NonNullable<PrimitiveOf<V>> | NonNullable<PrimitiveOf<K>> | undefined>(keyOrValue: KV): (undefined extends KV ? KV & undefined : never) | (KV extends undefined ? undefined : NonNullable<KV> extends K ? T[K & KV & {}] extends {
        label: unknown;
    } ? T[K & KV & {}]["label"] extends undefined ? K & KV & {} : string : K & KV & {} : NonNullable<KV> extends V ? import("./types").FindLabelByValue<T, V & KV & {}, T[FindEnumKeyByValue<T, V & KV & {}>]> : PrimitiveOf<K> extends KV ? string | undefined : PrimitiveOf<V> extends KV ? string | undefined : undefined);
    key<IV extends V | NonNullable<PrimitiveOf<V>> | undefined>(value?: IV): (undefined extends IV ? IV & undefined : never) | (IV extends undefined ? undefined : NonNullable<IV> extends V ? FindEnumKeyByValue<T, V & IV & {}> : PrimitiveOf<V> extends NonNullable<IV> ? K | undefined : undefined);
    item<KV extends K | V | NonNullable<PrimitiveOf<V>> | NonNullable<PrimitiveOf<K>> | undefined>(keyOrValue: KV): (undefined extends KV ? KV & undefined : never) | (KV extends undefined ? undefined : NonNullable<KV> extends K ? EnumItemInterface<T[K & KV & {}], K & KV & {}, import("./types").FindValueByKey<T, K & KV & {}>> : NonNullable<KV> extends V ? EnumItemInterface<T[FindEnumKeyByValue<T, V & KV & {}>], FindEnumKeyByValue<T, V & KV & {}>, V & KV & {}> : PrimitiveOf<K> extends KV ? EnumItemInterface<T[K], K, V> | undefined : PrimitiveOf<V> extends KV ? EnumItemInterface<T[K], K, V> | undefined : undefined);
    raw(): T;
    raw<IK extends V | K | Exclude<EnumValue, string> | NonNullable<string>>(keyOrValue: IK): IK extends K ? T[IK] : IK extends V ? T[FindEnumKeyByValue<T, IK>] : T[K] | undefined;
    has<KV>(keyOrValue?: KV): keyOrValue is Extract<KV, K | V> extends never ? typeof keyOrValue : Extract<KV, K | V>;
    findBy(...rest: Parameters<EnumItemsArray<T, K, V, LP>['findBy']>): any;
    toList(): ListItem<V, 'value', 'label'>[];
    toList<FOV extends string | ((item: EnumItemInterface<T[K], K, V, LP>) => string), FOL extends string | ((item: EnumItemInterface<T[K], K, V, LP>) => string)>(config: ToListConfig<T, FOV, FOL, K, V, never, LP>): ListItem<V, FOV extends (item: EnumItemInterface<T[K], K, V, LP>) => infer R ? R : FOV, FOL extends (item: EnumItemInterface<T[K], K, V, LP>) => infer R ? R : FOL>[];
    toMap(): MapResult<T, 'value', 'label', K, V, LP>;
    toMap<KS extends EnumItemFields | (<R extends string | symbol>(item: EnumItemInterface<T[K], K, V, LP>) => R), VS extends EnumItemFields | (<R>(item: EnumItemInterface<T[K], K, V, LP>) => R)>(config: ToMapConfig<T, KS, VS, K, V, LP>): MapResult<T, KS, VS, K, V, LP>;
    get valueType(): V;
    get keyType(): K;
    get rawType(): T[K];
}
