/**
 *   Enum with all presence levels possible
 * @public
 * @enum {string}
 * @readonly
 */
declare enum PresenceLevel {
    /** Offline/Invisible The presence of the contact is not connected */
    Offline = "offline",
    /** Offline/Invisible The presence of the contact is not connected */
    Invisible = "invisible",
    /** The presence of the contact is connected */
    Online = "online",
    /** The presence of the contact is connected on mobile */
    OnlineMobile = "online-mobile",
    /** The presence of the contact is connected but away from a long time */
    Away = "away",
    /** The presence of the contact is in "Do not disturb" state */
    Dnd = "dnd",
    /** The presence of the contact is in "Busy" state */
    Busy = "busy",
    /** The presence of the contact appear offline but to stay still connected. */
    Xa = "xa",
    /** The presence of the contact is not known */
    Unknown = "Unknown",
    /** internal */
    Chat = "chat",
    /** The presence of the contact is an empty string */
    EmptyString = ""
}
/**
 *   Enum with all presence Show possible
 * @public
 * @enum {string}
 * @readonly
 */
declare enum PresenceShow {
    /** The presence of the contact is connected */
    Online = "online",
    /** The presence of the contact is disconnected */
    Offline = "offline",
    /** The contact is in "Do not disturb" state */
    Dnd = "dnd",
    /** For current contact only - to appear offline but to stay still connected */
    Xa = "xa",
    /** The contact is away */
    Away = "away",
    /** The Show is Chat */
    Chat = "chat",
    /** The Show is empty string */
    EmptyString = ""
}
/**
 *   Enum with all presence Status possible
 * @public
 * @enum {string}
 * @readonly
 */
declare enum PresenceStatus {
    /** The presence of the contact is connected */
    Online = "online",
    /** The presence of the contact is disconnected */
    ModeAuto = "mode=auto",
    /** The contact is connected but away from a long time */
    Away = "away",
    /** The contact is on phone */
    Phone = "phone",
    /** The contact is in an appointment - used only in Presence Calendar context */
    Appointment = "appointment",
    /** The contact is on presentation */
    Presentation = "presentation",
    /** The contact is on mobile phone */
    Mobile = "mobile",
    /** The is Teams presence */
    Calendar = "calendar",
    /** The is Teams presence */
    Teams = "teams",
    /** The status is empty string. */
    EmptyString = ""
}
declare enum PresenceDetails {
    Inactive = "inactive",
    Audio = "audio",
    Video = "video",
    Sharing = "sharing",
    Presentation = "presentation",
    Busy = "busy",
    OutOfOffice = "out_of_office",
    Free = "free",
    EmptyString = ""
}
/**
 *   Enum with the phone presence (linked to PBX)
 * @public
 * @enum {string}
 * @readonly
 */
declare enum PresencePhone {
    /** The PBX service is available - the phone is not currently used */
    EVT_CONNECTION_CLEARED = "EVT_CONNECTION_CLEARED",
    /** The PBX service is available - there is a incoming or outgoing call in ringing state */
    EVT_SERVICE_INITIATED = "EVT_SERVICE_INITIATED",
    /** The PBX service is available - there is a current call */
    EVT_ESTABLISHED = "EVT_ESTABLISHED",
    /** The PBX service is not available / operational so we don't know the presence phone */
    NOT_AVAILABLE = "NOT_AVAILABLE"
}
/**
 * @public
 * @class
 * @name PresenceInfo
 * @description
 *   Define the base of each presence - Presence Level and Presence Details
 */
declare class PresenceInfo {
    get presenceShow(): string;
    set presenceShow(value: string);
    private _presenceLevel;
    private _presenceDetails;
    private _presenceShow;
    private _presenceStatus;
    constructor(presenceLevel?: PresenceLevel, presenceDetails?: PresenceDetails);
    get presenceLevel(): PresenceLevel | string;
    set presenceLevel(value: PresenceLevel | string);
    get presenceDetails(): PresenceDetails;
    set presenceDetails(value: PresenceDetails);
    get presenceStatus(): string;
    set presenceStatus(value: string);
    toJsonForServer(): {
        show: string;
        status: string;
    };
}
declare class PresenceCalendar extends PresenceInfo {
    private _until;
    constructor(presenceLevel?: PresenceLevel, presenceStatus?: string, presenceDetails?: PresenceDetails, until?: Date);
    get until(): Date;
    set until(value: Date);
}
/**
 * @public
 * @class
 * @name PresenceRainbow
 * @description
 *   Represent a contact's presence
 */
declare class PresenceRainbow extends PresenceInfo {
    private _resource;
    private _date;
    constructor(presenceLevel?: PresenceLevel, presenceStatus?: string, presenceDetails?: PresenceDetails, resource?: string, date?: Date);
    get resource(): string;
    set resource(value: string);
    get date(): Date;
    set date(value: Date);
}
export { PresenceCalendar, PresenceInfo, PresenceLevel, PresenceShow, PresenceStatus, PresenceDetails, PresencePhone, PresenceRainbow };
