import type { StyleValue } from 'vue';
import { COMPONENT_COLOR_TYPE } from '../enum/constants';
import { NestedKeys, PathValue } from '.';
import { ObjectAnyType } from '.';
export type OptionObjectValueType = ObjectAnyType;
export type OptionNonObjectValueType = string | number | boolean;
export type OptionValueType = OptionObjectValueType | OptionNonObjectValueType;
export type ConfigOptionType<Option extends OptionValueType> = Option extends OptionObjectValueType ? {
    valueKey: NestedKeys<Option>;
    labelKey?: NestedKeys<Option>;
    iconKey?: NestedKeys<Option>;
    colorKey?: NestedKeys<Option>;
    onClickFuncKey?: NestedKeys<Option>;
    onClickSkipKey?: NestedKeys<Option>;
    iconColorHex?: NestedKeys<Option>;
    searchKey?: NestedKeys<Option> | Array<NestedKeys<Option>>;
    disabledKey?: NestedKeys<Option>;
    classKey?: NestedKeys<Option>;
    styleKey?: NestedKeys<Option>;
    optionIconStyleKey?: NestedKeys<Option>;
} : never;
export type ExtractValueType<Option extends OptionValueType, Config extends ConfigOptionType<Option>> = Option extends OptionObjectValueType ? Config extends {
    valueKey: infer Key;
} ? Key extends NestedKeys<Option> ? PathValue<Option, Key> : Option : Option : Option;
export type OptionMappedType<Option extends OptionValueType, Config extends ConfigOptionType<Option>> = {
    originalItem: Option;
    value: ExtractValueType<Option, Config>;
    label: string;
    disabled: boolean;
    icon: string;
    color: COMPONENT_COLOR_TYPE;
    iconStyle: StyleValue;
    key: string;
};
