import { Duration, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type SupervisionResult, type ValueID, type WithAddress } from "@zwave-js/core";
import { Bytes } from "@zwave-js/shared";
import { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation } from "../lib/API.js";
import { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions } from "../lib/CommandClass.js";
import { ColorComponent, ColorSwitchCommand, type ColorTable, LevelChangeDirection } from "../lib/_Types.js";
import type { CCEncodingContext, CCParsingContext } from "../lib/traits.js";
import { ColorSwitchCCValues } from "./_CCValues.generated.js";
export { ColorSwitchCCValues };
export declare class ColorSwitchCCAPI extends CCAPI {
    supportsCommand(cmd: ColorSwitchCommand): MaybeNotKnown<boolean>;
    getSupported(): Promise<MaybeNotKnown<readonly ColorComponent[]>>;
    get(component: ColorComponent): Promise<Pick<ColorSwitchCCReport, "currentValue" | "duration" | "targetValue"> | undefined>;
    set(options: ColorSwitchCCSetOptions): Promise<SupervisionResult | undefined>;
    /** Updates the current color for a given node by merging in the given changes */
    private updateCurrentColor;
    startLevelChange(options: ColorSwitchCCStartLevelChangeOptions): Promise<SupervisionResult | undefined>;
    stopLevelChange(colorComponent: ColorComponent): Promise<SupervisionResult | undefined>;
    protected get [SET_VALUE](): SetValueImplementation;
    isSetValueOptimistic(_valueId: ValueID): boolean;
    protected get [POLL_VALUE](): PollValueImplementation;
}
export declare class ColorSwitchCC extends CommandClass {
    ccCommand: ColorSwitchCommand;
    interview(ctx: InterviewContext): Promise<void>;
    refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void>;
    translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined;
}
export interface ColorSwitchCCSupportedReportOptions {
    supportedColorComponents: readonly ColorComponent[];
}
export declare class ColorSwitchCCSupportedReport extends ColorSwitchCC {
    constructor(options: WithAddress<ColorSwitchCCSupportedReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ColorSwitchCCSupportedReport;
    readonly supportedColorComponents: readonly ColorComponent[];
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export declare class ColorSwitchCCSupportedGet extends ColorSwitchCC {
}
export interface ColorSwitchCCReportOptions {
    colorComponent: ColorComponent;
    currentValue: number;
    targetValue?: number;
    duration?: Duration | string;
}
export declare class ColorSwitchCCReport extends ColorSwitchCC {
    constructor(options: WithAddress<ColorSwitchCCReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ColorSwitchCCReport;
    persistValues(ctx: PersistValuesContext): boolean;
    readonly colorComponent: ColorComponent;
    readonly currentValue: number;
    readonly targetValue: number | undefined;
    readonly duration: Duration | undefined;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export interface ColorSwitchCCGetOptions {
    colorComponent: ColorComponent;
}
export declare class ColorSwitchCCGet extends ColorSwitchCC {
    constructor(options: WithAddress<ColorSwitchCCGetOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ColorSwitchCCGet;
    private _colorComponent;
    get colorComponent(): ColorComponent;
    set colorComponent(value: ColorComponent);
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export type ColorSwitchCCSetOptions = (ColorTable | {
    hexColor: string;
}) & {
    duration?: Duration | string;
};
export declare class ColorSwitchCCSet extends ColorSwitchCC {
    constructor(options: WithAddress<ColorSwitchCCSetOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ColorSwitchCCSet;
    colorTable: ColorTable;
    duration: Duration | undefined;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export type ColorSwitchCCStartLevelChangeOptions = {
    colorComponent: ColorComponent;
    direction: keyof typeof LevelChangeDirection;
} & ({
    ignoreStartLevel: true;
    startLevel?: number;
} | {
    ignoreStartLevel: false;
    startLevel: number;
}) & {
    duration?: Duration | string;
};
export declare class ColorSwitchCCStartLevelChange extends ColorSwitchCC {
    constructor(options: WithAddress<ColorSwitchCCStartLevelChangeOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ColorSwitchCCStartLevelChange;
    duration: Duration | undefined;
    startLevel: number;
    ignoreStartLevel: boolean;
    direction: keyof typeof LevelChangeDirection;
    colorComponent: ColorComponent;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export interface ColorSwitchCCStopLevelChangeOptions {
    colorComponent: ColorComponent;
}
export declare class ColorSwitchCCStopLevelChange extends ColorSwitchCC {
    constructor(options: WithAddress<ColorSwitchCCStopLevelChangeOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ColorSwitchCCStopLevelChange;
    readonly colorComponent: ColorComponent;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
//# sourceMappingURL=ColorSwitchCC.d.ts.map