import { ItemType, StatePath } from "repond";
import { UnsetEmojiKeysType } from "./declarations";
import { ChainId, EmojiKeys, EventBlock, EventBlockOptions, EventGroupName, EventName, EventParams, EventTypeDefinition, RunMode, RunModeExtraOptions, TypeOrUndefinedIfAllOptional, ValueBlock, ValueBlockOptions, ValueEmojiKeys, ValueGroupName, ValueName, ValueParams, ValueTypeDefinition } from "./types";
type OptionalIfUndefinableSpreadType<T extends any> = T extends undefined ? [T?, EventBlockOptions?] : [T, EventBlockOptions?];
type ExcludedOriginalKeys = {
    [K in keyof EmojiKeys]: EmojiKeys[K];
}[keyof EmojiKeys];
type AcceptableKeys = Exclude<EventGroupName, ExcludedOriginalKeys> | keyof EmojiKeys;
type ResolveGroupType<T_Key extends AcceptableKeys> = EmojiKeys extends UnsetEmojiKeysType ? T_Key : T_Key extends keyof EmojiKeys ? EmojiKeys[T_Key] : T_Key;
export declare function todo<T_Key extends AcceptableKeys, T_Group extends ResolveGroupType<T_Key>, T_Name extends EventName<T_Group>, T_GenericParamA>(groupOrEmoji: T_Key, name: T_Name, ...args: OptionalIfUndefinableSpreadType<TypeOrUndefinedIfAllOptional<EventParams<T_Group, T_Name, T_GenericParamA>>>): EventBlock;
export declare function runEvent<T_Key extends AcceptableKeys, T_Group extends ResolveGroupType<T_Key>, T_Name extends EventName<T_Group>, T_GenericParamA>(groupOrEmoji: T_Key, name: T_Name, ...args: OptionalIfUndefinableSpreadType<TypeOrUndefinedIfAllOptional<EventParams<T_Group, T_Name, T_GenericParamA>>>): ChainId;
export declare function runPriorityEvent<T_Group extends EventGroupName, T_Name extends EventName<T_Group>, T_GenericParamA>(group: T_Group, name: T_Name, params: EventParams<T_Group, T_Name, T_GenericParamA>, options: EventBlockOptions): ChainId;
export declare function runEvents<T_Events extends EventBlock[]>(eventsToRun: T_Events, options?: EventBlockOptions): ChainId;
export declare function addSubEvents<T_Events extends EventBlock[]>(liveId: string, eventsToRun: T_Events, options?: EventBlockOptions): void;
export declare function runPriorityEvents<T_Events extends EventBlock[]>(eventsToRun: T_Events, options?: EventBlockOptions): ChainId;
export declare function eventDo(runMode: RunMode, liveId: string, runOptions?: RunModeExtraOptions): void;
export declare function chainDo(runMode: RunMode, chainId: ChainId, runOptions?: RunModeExtraOptions): void;
export declare function chainWithEventDo(runMode: RunMode, liveId: string, runOptions?: RunModeExtraOptions): void;
export declare function allGroupEventsDo(groupName: string, runMode: RunMode, runOptions?: RunModeExtraOptions): void;
export declare function doForAllBeforeEvent(runMode: RunMode, liveId: string, runOptions?: RunModeExtraOptions): void;
export declare function skipToEvent(liveId: string, runOptions?: RunModeExtraOptions): void;
export declare function cancelUpToEvent(liveId: string, runOptions?: RunModeExtraOptions): void;
export declare function allEventsDo(runMode: RunMode, runOptions?: RunModeExtraOptions): void;
export declare function cancelFastChain(chainId: ChainId): void;
export type MakeEventType = <T_Params extends Record<any, any>>(eventTypeDefition: EventTypeDefinition<T_Params>) => EventTypeDefinition<T_Params>;
export declare function makeEventTypes<K_EventName extends string, T_EventsMap extends Record<K_EventName, EventTypeDefinition<any>>>(eventsToAdd: (arg0: {
    event: MakeEventType;
}) => T_EventsMap): T_EventsMap;
export declare function initEventTypeGroups<T extends Record<string, ReturnType<typeof makeEventTypes>>, T_TimePathItemType extends ItemType>(groups: T, options?: {
    defaultElapsedTimePath?: StatePath<T_TimePathItemType>;
    defaultChainId?: string;
    emojiKeys?: Record<string, string>;
}): T;
export type MakeValueType = <T_Params extends Record<any, any>>(valueTypeDefition: ValueTypeDefinition<T_Params>) => ValueTypeDefinition<T_Params>;
export declare function makeValueTypes<K_ValueName extends string, T_ValuesMap extends Record<K_ValueName, ValueTypeDefinition<any>>>(valuesToAdd: (arg0: {
    value: MakeValueType;
}) => T_ValuesMap): T_ValuesMap;
export declare function initValueTypeGroups<T extends Record<string, ReturnType<typeof makeValueTypes>>>(groups: T, options?: {
    emojiKeys?: Record<string, string>;
}): T;
type OptionalIfUndefinableSpreadType_Value<T extends any> = T extends undefined ? [T?, ValueBlockOptions?] : [T, ValueBlockOptions?];
type ExcludedOriginalValueKeys = {
    [K in keyof EmojiKeys]: EmojiKeys[K];
}[keyof EmojiKeys];
type AcceptableValueKeys = Exclude<ValueGroupName, ExcludedOriginalValueKeys> | keyof ValueEmojiKeys;
type ResolveValueType<T_Key extends AcceptableValueKeys> = ValueEmojiKeys extends UnsetEmojiKeysType ? T_Key : T_Key extends keyof ValueEmojiKeys ? ValueEmojiKeys[T_Key] : T_Key;
export declare function makeValue<T_Key extends AcceptableValueKeys, T_Group extends ResolveValueType<T_Key>, T_Name extends ValueName<T_Group>, T_GenericParamA>(groupOrEmoji: T_Key, name: T_Name, ...args: OptionalIfUndefinableSpreadType_Value<TypeOrUndefinedIfAllOptional<ValueParams<T_Group, T_Name, T_GenericParamA>>>): ValueBlock;
export {};
