{
  "props": {
    "multiple": {
      "type": "Boolean",
      "desc": "Allow multiple file uploads",
      "category": "behavior"
    },

    "accept": {
      "type": "String",
      "desc": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element",
      "examples": [
        ".jpg, .pdf, image/*", "image/jpeg, .pdf"
      ],
      "category": "behavior"
    },

    "max-file-size": {
      "type": "Number",
      "desc": "Maximum size of individual file in bytes",
      "examples": [ 1024, 1048576 ],
      "category": "behavior"
    },

    "max-total-size": {
      "type": "Number",
      "desc": "Maximum size of all files combined in bytes",
      "examples": [ 1024, 1048576 ],
      "category": "behavior"
    },

    "filter": {
      "type": "Function",
      "desc": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline",
      "params": {
        "files": {
          "type": [ "FileList", "Array" ],
          "desc": "Candidate files to be added to queue",
          "__exemption": [ "examples" ]
        }
      },
      "returns": {
        "type": "Array",
        "desc": "Filtered files to be added to queue",
        "__exemption": [ "examples" ]
      },
      "examples": [ ":filter=\"files => files.filter(file => file.size === 1024)\"" ],
      "category": "behavior"
    }
  },

  "methods": {
    "pickFiles": {
      "desc": "Trigger file pick; Must be called as a direct consequence of user interaction (eg. in a click handler), due to browsers security policy",
      "params": {
        "evt": {
          "type": "Object",
          "desc": "JS event object",
          "__exemption": [ "examples" ]
        }
      }
    },

    "addFiles": {
      "desc": "Add files programmatically",
      "params": {
        "files": {
          "type": [ "FileList", "Array" ],
          "desc": "Array of files (instances of File)",
          "required": true,
          "__exemption": [ "examples" ]
        }
      }
    }
  }
}
