declare module "windows.applicationmodel.datatransfer" {
  export class Color {
    constructor();
  }

  export enum DataPackageOperation {
    none,
    copy,
    move,
    link,
  }

  export class StandardDataFormats {
    static bitmap: String;
    static html: String;
    static rtf: String;
    static storageItems: String;
    static text: String;
    static uri: String;
    static applicationLink: String;
    static webLink: String;
    constructor();

  }

  export class DataPackagePropertySetView {
    applicationListingUri: Object;
    applicationName: String;
    description: String;
    fileTypes: Object;
    thumbnail: Object;
    title: String;
    contentSourceApplicationLink: Object;
    contentSourceWebLink: Object;
    logoBackgroundColor: Object;
    packageFamilyName: String;
    square30x30Logo: Object;
    enterpriseId: String;
    constructor();

    lookup(key: String): Object;

    hasKey(key: String): Boolean;

    split(first: Object, second: Object): void;

    first(): Object;

  }

  export class DataPackagePropertySet {
    thumbnail: Object;
    title: String;
    description: String;
    applicationName: String;
    applicationListingUri: Object;
    fileTypes: Object;
    square30x30Logo: Object;
    packageFamilyName: String;
    logoBackgroundColor: Object;
    contentSourceWebLink: Object;
    contentSourceApplicationLink: Object;
    enterpriseId: String;
    constructor();

    lookup(key: String): Object;

    hasKey(key: String): Boolean;

    getView(): Object;

    insert(key: String, value: Object): Boolean;

    remove(key: String): void;

    clear(): void;

    first(): Object;

  }

  export class DataProviderDeferral {
    constructor();

    complete(): void;

  }

  export class DataProviderRequest {
    deadline: Date;
    formatId: String;
    constructor();

    getDeferral(): DataProviderDeferral;

    setData(value: Object): void;

  }

  export class OperationCompletedEventArgs {
    operation: DataPackageOperation;
    acceptedFormatId: String;
    constructor();

  }

  export class DataPackageView {
    availableFormats: Object;
    properties: DataPackagePropertySetView;
    requestedOperation: DataPackageOperation;
    constructor();

    getDataAsync(formatId: String, callback: (error: Error, result: Object) => void): void ;

    getTextAsync(callback: (error: Error, result: String) => void): void ;
    getTextAsync(formatId: String, callback: (error: Error, result: String) => void): void ;

    getUriAsync(callback: (error: Error, result: Object) => void): void ;

    getHtmlFormatAsync(callback: (error: Error, result: String) => void): void ;

    getResourceMapAsync(callback: (error: Error, result: Object) => void): void ;

    getRtfAsync(callback: (error: Error, result: String) => void): void ;

    getBitmapAsync(callback: (error: Error, result: Object) => void): void ;

    getStorageItemsAsync(callback: (error: Error, result: Object) => void): void ;

    getApplicationLinkAsync(callback: (error: Error, result: Object) => void): void ;

    getWebLinkAsync(callback: (error: Error, result: Object) => void): void ;

    requestAccessAsync(callback: (error: Error, result: Number) => void): void ;
    requestAccessAsync(enterpriseId: String, callback: (error: Error, result: Number) => void): void ;

    reportOperationCompleted(value: DataPackageOperation): void;

    contains(formatId: String): Boolean;

    unlockAndAssumeEnterpriseIdentity(): Number;

    setAcceptedFormatId(formatId: String): void;

  }

  export class DataPackage {
    requestedOperation: DataPackageOperation;
    properties: DataPackagePropertySet;
    resourceMap: Object;
    constructor();

    getView(): DataPackageView;

    setData(formatId: String, value: Object): void;

    setDataProvider(formatId: String, delayRenderer: Object): void;

    setText(value: String): void;

    setUri(value: Object): void;

    setHtmlFormat(value: String): void;

    setRtf(value: String): void;

    setBitmap(value: Object): void;

    setStorageItems(value: Object): void;
    setStorageItems(value: Object, readOnly: Boolean): void;

    setApplicationLink(value: Object): void;

    setWebLink(value: Object): void;

    addListener(type: "Destroyed", listener: (ev: Event) => void): void ;
    removeListener(type: "Destroyed", listener: (ev: Event) => void): void ;
    on(type: "Destroyed", listener: (ev: Event) => void): void ;
    off(type: "Destroyed", listener: (ev: Event) => void): void ;
    
    addListener(type: "OperationCompleted", listener: (ev: Event) => void): void ;
    removeListener(type: "OperationCompleted", listener: (ev: Event) => void): void ;
    on(type: "OperationCompleted", listener: (ev: Event) => void): void ;
    off(type: "OperationCompleted", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class HtmlFormatHelper {
    constructor();

    static getStaticFragment(htmlFormat: String): String;


    static createHtmlFormat(htmlFragment: String): String;


  }

  export class Clipboard {
    constructor();

    static getContent(): DataPackageView;


    static setContent(content: DataPackage): void;


    static flush(): void;


    static clear(): void;


    addListener(type: "ContentChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "ContentChanged", listener: (ev: Event) => void): void ;
    on(type: "ContentChanged", listener: (ev: Event) => void): void ;
    off(type: "ContentChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class DataRequestDeferral {
    constructor();

    complete(): void;

  }

  export class DataRequest {
    data: DataPackage;
    deadline: Date;
    constructor();

    failWithDisplayText(value: String): void;

    getDeferral(): DataRequestDeferral;

  }

  export class DataRequestedEventArgs {
    request: DataRequest;
    constructor();

  }

  export class TargetApplicationChosenEventArgs {
    applicationName: String;
    constructor();

  }

  export class DataTransferManager {
    constructor();

    static isSupported(): Boolean;


    static showShareUI(): void;


    static getForCurrentView(): DataTransferManager;


    addListener(type: "DataRequested", listener: (ev: Event) => void): void ;
    removeListener(type: "DataRequested", listener: (ev: Event) => void): void ;
    on(type: "DataRequested", listener: (ev: Event) => void): void ;
    off(type: "DataRequested", listener: (ev: Event) => void): void ;
    
    addListener(type: "TargetApplicationChosen", listener: (ev: Event) => void): void ;
    removeListener(type: "TargetApplicationChosen", listener: (ev: Event) => void): void ;
    on(type: "TargetApplicationChosen", listener: (ev: Event) => void): void ;
    off(type: "TargetApplicationChosen", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class SharedStorageAccessManager {
    constructor();

    static redeemTokenForFileAsync(token: String, callback: (error: Error, result: Object) => void): void ;


    static addFile(file: Object): String;


    static removeFile(token: String): void;


  }

}



