/**
 * On screen keyboard description consisting of specific layouts for tablet, phone,
 * and desktop. Despite its name, this format is used for both touch layouts and
 * hardware-style layouts.
 */
export interface TouchLayoutFile {
    tablet?: TouchLayoutPlatform;
    phone?: TouchLayoutPlatform;
    desktop?: TouchLayoutPlatform;
}
export type TouchLayoutFont = string;
export type TouchLayoutFontSize = string;
export type TouchLayoutDefaultHint = "none" | "dot" | "longpress" | "multitap" | "flick" | "flick-n" | "flick-ne" | "flick-e" | "flick-se" | "flick-s" | "flick-sw" | "flick-w" | "flick-nw";
/** touch layout specification for a specific platform like phone or tablet */
export interface TouchLayoutPlatform {
    font?: TouchLayoutFont;
    fontsize?: TouchLayoutFontSize;
    layer: TouchLayoutLayer[];
    displayUnderlying?: boolean;
    defaultHint: TouchLayoutDefaultHint;
}
export type TouchLayoutLayerId = string;
/** a layer with rows of keys on a touch layout */
export interface TouchLayoutLayer {
    id: TouchLayoutLayerId;
    row: TouchLayoutRow[];
}
export type TouchLayoutRowId = number;
/** a row of keys on a touch layout */
export interface TouchLayoutRow {
    id: TouchLayoutRowId;
    key: TouchLayoutKey[];
}
type Key_Type = 'T' | 'K' | 'U' | 't' | 'k' | 'u';
type Key_Id = string;
export type TouchLayoutKeyId = `${Key_Type}_${Key_Id}`;
/**
 * Denotes private-use identifiers that should be considered 'reserved'.
 */
export declare const PRIVATE_USE_IDS: readonly ["T_*_MT_SHIFT_TO_SHIFT", "T_*_MT_SHIFT_TO_CAPS", "T_*_MT_SHIFT_TO_DEFAULT"];
/** defines a key on a touch layout */
export interface TouchLayoutKey {
    /** key id: used to find key in VKDictionary, or a standard key from the K_ enumeration */
    id?: TouchLayoutKeyId;
    /** text to display on key cap */
    text?: string;
    /**
      * the modifier combination (not layer) that should be used in key events,
      * for this key, overriding the layer that the key is a part of.
      */
    layer?: TouchLayoutLayerId;
    /** the next layer to switch to after this key is pressed */
    nextlayer?: TouchLayoutLayerId;
    /** font */
    font?: TouchLayoutFont;
    /** fontsize */
    fontsize?: TouchLayoutFontSize;
    /** the type of key */
    sp?: TouchLayoutKeySp;
    /** padding */
    pad?: TouchLayoutKeyPad;
    /** width of the key */
    width?: TouchLayoutKeyWidth;
    /** longpress keys, also known as subkeys */
    sk?: TouchLayoutSubKey[];
    /** flicks */
    flick?: TouchLayoutFlick;
    /** multitaps */
    multitap?: TouchLayoutSubKey[];
    /** hint e.g. for longpress */
    hint?: string;
}
/** key type like regular key, framekeys, deadkeys, blank, etc. */
export declare const enum TouchLayoutKeySp {
    normal = 0,
    /** A 'frame' key, such as Shift or Enter, which is styled accordingly; uses
     *  the 'KeymanwebOsk' font on KeymanWeb */
    special = 1,
    /** A 'frame' key, such as Shift or Enter, which is styled accordingly and is
     *  highlighted to indicate it is active, such as the shift key on a shift
     *  layer; uses the 'KeymanwebOsk' font on KeymanWeb */
    specialActive = 2,
    /** **KeymanWeb runtime private use:** a variant of `special` with the
     *  keyboard font rather than 'KeymanwebOsk' font */
    customSpecial = 3,
    /** **KeymanWeb runtime private use:** a  variant of `specialActive` with the
     *  keyboard font rather than 'KeymanwebOsk' font. */
    customSpecialActive = 4,
    /** A styling signal to indicate that the key may have 'deadkey' type
     *  behaviour. */
    deadkey = 8,
    /** A key which is rendered as a blank keycap, blocks any interaction */
    blank = 9,
    /** Renders the key only as a gap or spacer, blocks any interaction */
    spacer = 10
}
/** padding for a key */
export type TouchLayoutKeyPad = number;
/** width of a key */
export type TouchLayoutKeyWidth = number;
/** defines a subkey */
export interface TouchLayoutSubKey {
    /** key id: used to find key in VKDictionary, or a standard key from the K_ enumeration */
    id: TouchLayoutKeyId;
    /** text to display on key cap */
    text?: string;
    /**
      * the modifier combination (not layer) that should be used in key events,
      * for this key, overriding the layer that the key is a part of.
      */
    layer?: TouchLayoutLayerId;
    /** the next layer to switch to after this key is pressed */
    nextlayer?: TouchLayoutLayerId;
    /** font */
    font?: TouchLayoutFont;
    /** fontsize */
    fontsize?: TouchLayoutFontSize;
    /** the type of key */
    sp?: TouchLayoutKeySp;
    /** padding */
    pad?: TouchLayoutKeyPad;
    /** width of the key */
    width?: TouchLayoutKeyWidth;
    /** use this subkey if no other selected */
    default?: boolean;
}
/** defines all possible flicks for a key */
export interface TouchLayoutFlick {
    /** flick up (north) */
    n?: TouchLayoutSubKey;
    /** flick down (south) */
    s?: TouchLayoutSubKey;
    /** flick right (east) */
    e?: TouchLayoutSubKey;
    /** flick left (west) */
    w?: TouchLayoutSubKey;
    /** flick up-right (north-east) */
    ne?: TouchLayoutSubKey;
    /** flick up-left (north-west) */
    nw?: TouchLayoutSubKey;
    /** flick down-right (south-east) */
    se?: TouchLayoutSubKey;
    /** flick down-left (south-west) */
    sw?: TouchLayoutSubKey;
}
export {};
//# sourceMappingURL=keyman-touch-layout-file.d.ts.map