_processFiles(selectedFiles) {
    // file size and type validators are required only when file is selected and not in case of prefill
    // TODO: is this needed every time?
    const newFiles = this.__computeNewAddedFiles(Array.from(selectedFiles));
    if (!this.multiple && newFiles.length > 0) {
      this._selectedFilesMetaData = [];
      this.uploadResponse = [];
    }

    /**
     * @type {InputFile}
     */
    let fileObj;
    for (const selectedFile of newFiles.values()) {
      // @ts-ignore
      fileObj = new FileHandle(selectedFile, this._acceptCriteria);
      if (fileObj.failedProp?.length) {
        this._handleErroredFiles(fileObj);
        this.uploadResponse = [
          ...this.uploadResponse,
          {
            name: fileObj.systemFile.name,
            status: 'FAIL',
            // @ts-expect-error
            errorMessage: fileObj.validationFeedback[0].message,
          },
        ];
      } else {
        this.uploadResponse = [
          ...this.uploadResponse,
          {
            name: fileObj.systemFile.name,
            status: 'SUCCESS',
          },
        ];
      }
      this._selectedFilesMetaData = [...this._selectedFilesMetaData, fileObj];
      this._handleErrors();
    }

    // only send error-free files to file-list-changed event
    const _successFiles = this._selectedFilesMetaData
      .filter(
        ({ systemFile, status }) =>
          newFiles.includes(/** @type {InputFile} */ (systemFile)) && status === 'SUCCESS',
      )
      .map(({ systemFile }) => /** @type {InputFile} */ (systemFile));

    if (_successFiles.length > 0) {
      this._dispatchFileListChangeEvent(_successFiles);
    }
  }
Runs on drag or change event

@param {InputFile[]} selectedFiles
@protected