/// <reference types="rodux" />
/// <reference types="@rbxts/types" />
/// <reference types="@rbxts/compiler-types" />
import Rodux, { Action } from "@rbxts/rodux";
import { ConsoleMessage, ZirconContext, ZirconLogLevel } from "../../../../Client/Types";
export declare const enum ConsoleActionName {
    SetConsoleVisible = "SetConsoleVisible",
    SetConfiguration = "SetConsoleConfiguration",
    AddOutput = "AddOutput",
    AddHistory = "AddHistory",
    SetFilter = "SetFilter",
    UpdateFilter = "UpdateFilter",
    RemoveFilter = "RemoveFilter",
    SetClientExecutionEnabled = "SetClientExecutionEnabled"
}
export interface ActionSetConsoleVisible extends Action<ConsoleActionName.SetConsoleVisible> {
    visible: boolean;
}
export interface ActionSetConsoleConfiguration extends Action<ConsoleActionName.SetConfiguration> {
    executionEnabled: boolean;
    hotkeyEnabled: boolean;
    autoFocusTextBox: boolean;
    showTagsInOutput: boolean;
    logDetailsPaneEnabled: boolean;
    bindKeys: Enum.KeyCode[];
}
export interface ActionAddOutput extends Action<ConsoleActionName.AddOutput> {
    message: ConsoleMessage;
}
export interface ActionSetClientExecutionEnabled extends Action<ConsoleActionName.SetClientExecutionEnabled> {
    enabled: boolean;
}
export interface ActionAddHistory extends Action<ConsoleActionName.AddHistory> {
    message: string;
}
export interface ActionSetFilter extends Action<ConsoleActionName.SetFilter> {
    filter: ConsoleFilter;
}
export interface ActionRemoveFilter extends Action<ConsoleActionName.RemoveFilter> {
    filter: keyof ConsoleFilter;
}
export interface ActionUpdateFilter extends Action<ConsoleActionName.UpdateFilter>, Partial<ConsoleFilter> {
}
export declare type ConsoleActions = ActionSetConsoleVisible | ActionSetConsoleConfiguration | ActionAddOutput | ActionAddHistory | ActionSetFilter | ActionUpdateFilter | ActionRemoveFilter | ActionSetClientExecutionEnabled;
export interface ConsoleFilter {
    Context?: ZirconContext;
    Level?: ZirconLogLevel;
    Levels: Set<ZirconLogLevel>;
    SearchQuery?: string;
    Tail?: boolean;
}
export interface ConsoleReducer {
    visible: boolean;
    executionEnabled: boolean;
    hotkeyEnabled: boolean;
    autoFocusTextBox: boolean;
    logDetailsPaneEnabled: boolean;
    showTagsInOutput: boolean;
    output: ConsoleMessage[];
    history: string[];
    filter: ConsoleFilter;
    canExecuteLocalScripts: boolean;
    bindingKeys: Enum.KeyCode[];
}
export declare const DEFAULT_FILTER: Set<ZirconLogLevel>;
declare const consoleReducer: Rodux.Reducer<ConsoleReducer, ConsoleActions>;
export default consoleReducer;
