import { EventEmitter } from 'eventemitter3';
import type { HIDDevice, HIDDeviceInfo } from '../hid-device.js';
import type { DeviceModelId, Dimension, KeyIndex } from '../id.js';
import type { FillImageOptions, FillPanelDimensionsOptions, FillPanelOptions, StreamDeck, StreamDeckEvents, StreamDeckTcpChildDeviceInfo } from '../types.js';
import type { ButtonsLcdDisplayService } from '../services/buttonsLcdDisplay/interface.js';
import type { StreamDeckButtonControlDefinition, StreamDeckControlDefinition } from '../controlDefinition.js';
import type { LcdSegmentDisplayService } from '../services/lcdSegmentDisplay/interface.js';
import type { PropertiesService } from '../services/properties/interface.js';
import type { CallbackHook } from '../services/callback-hook.js';
import type { StreamDeckInputService } from '../services/input/interface.js';
import type { EncoderLedService } from '../services/encoderLed/interface.js';
import { type PreparedBuffer } from '../preparedBuffer.js';
export type EncodeJPEGHelper = (buffer: Uint8Array, width: number, height: number) => Promise<Uint8Array>;
export interface OpenStreamDeckOptions {
    encodeJPEG?: EncodeJPEGHelper;
}
export type StreamDeckProperties = Readonly<{
    MODEL: DeviceModelId;
    PRODUCT_NAME: string;
    KEY_DATA_OFFSET: number;
    SUPPORTS_RGB_KEY_FILL: boolean;
    CONTROLS: Readonly<StreamDeckControlDefinition[]>;
    /**
     * TODO - rework this
     * @deprecated
     */
    KEY_SPACING_HORIZONTAL: number;
    /**
     * TODO - rework this
     * @deprecated
     */
    KEY_SPACING_VERTICAL: number;
    FULLSCREEN_PANELS: number;
    HAS_NFC_READER: boolean;
    /** Whether this device supports child devices */
    SUPPORTS_CHILD_DEVICES: boolean;
}>;
export interface StreamDeckServicesDefinition {
    deviceProperties: StreamDeckProperties;
    events: CallbackHook<StreamDeckEvents>;
    properties: PropertiesService;
    buttonsLcd: ButtonsLcdDisplayService;
    inputService: StreamDeckInputService;
    lcdSegmentDisplay: LcdSegmentDisplayService | null;
    encoderLed: EncoderLedService | null;
}
export declare class StreamDeckBase extends EventEmitter<StreamDeckEvents> implements StreamDeck {
    #private;
    get CONTROLS(): Readonly<StreamDeckControlDefinition[]>;
    get MODEL(): DeviceModelId;
    get PRODUCT_NAME(): string;
    get HAS_NFC_READER(): boolean;
    protected readonly device: HIDDevice;
    protected readonly deviceProperties: Readonly<StreamDeckProperties>;
    constructor(device: HIDDevice, _options: Readonly<Required<OpenStreamDeckOptions>>, services: StreamDeckServicesDefinition);
    protected checkValidKeyIndex(keyIndex: KeyIndex, feedbackType: StreamDeckButtonControlDefinition['feedbackType'] | null): void;
    calculateFillPanelDimensions(options?: FillPanelDimensionsOptions): Dimension | null;
    close(): Promise<void>;
    getHidDeviceInfo(): Promise<HIDDeviceInfo>;
    setBrightness(percentage: number): Promise<void>;
    resetToLogo(): Promise<void>;
    getFirmwareVersion(): Promise<string>;
    getAllFirmwareVersions(): Promise<Record<string, string>>;
    getSerialNumber(): Promise<string>;
    sendPreparedBuffer(buffer: PreparedBuffer): Promise<void>;
    fillKeyColor(keyIndex: KeyIndex, r: number, g: number, b: number): Promise<void>;
    fillKeyBuffer(keyIndex: KeyIndex, imageBuffer: Uint8Array, options?: FillImageOptions): Promise<void>;
    prepareFillKeyBuffer(keyIndex: KeyIndex, imageBuffer: Uint8Array | Uint8ClampedArray, options?: FillImageOptions, jsonSafe?: boolean): Promise<PreparedBuffer>;
    fillPanelBuffer(imageBuffer: Uint8Array, options?: FillPanelOptions): Promise<void>;
    prepareFillPanelBuffer(imageBuffer: Uint8Array | Uint8ClampedArray, options?: FillPanelOptions, jsonSafe?: boolean): Promise<PreparedBuffer>;
    clearKey(keyIndex: KeyIndex): Promise<void>;
    clearPanel(): Promise<void>;
    fillLcd(...args: Parameters<StreamDeck['fillLcd']>): ReturnType<StreamDeck['fillLcd']>;
    fillLcdRegion(...args: Parameters<StreamDeck['fillLcdRegion']>): ReturnType<StreamDeck['fillLcdRegion']>;
    prepareFillLcdRegion(...args: Parameters<StreamDeck['prepareFillLcdRegion']>): ReturnType<StreamDeck['prepareFillLcdRegion']>;
    clearLcdSegment(...args: Parameters<StreamDeck['clearLcdSegment']>): ReturnType<StreamDeck['clearLcdSegment']>;
    setEncoderColor(...args: Parameters<StreamDeck['setEncoderColor']>): ReturnType<StreamDeck['setEncoderColor']>;
    setEncoderRingSingleColor(...args: Parameters<StreamDeck['setEncoderRingSingleColor']>): ReturnType<StreamDeck['setEncoderRingSingleColor']>;
    setEncoderRingColors(...args: Parameters<StreamDeck['setEncoderRingColors']>): ReturnType<StreamDeck['setEncoderRingColors']>;
    getChildDeviceInfo(): Promise<StreamDeckTcpChildDeviceInfo | null>;
}
//# sourceMappingURL=base.d.ts.map