* core: add an addFiles() method that only updates state once
Previously, adding 1300-ish files took around 260ms, and looked like
this in Firefox's performance tab:

All of the downward peaks are `setState()` calls and GC.
Now it takes around 60ms, and looks like this:

Here, most of the time is spent generating file IDs and guessing file
types. Those would be areas to look at next.
* dashboard: prevent frequent state update if nothing changed
After the last commit, `addFiles()` still spends a lot of time in
`emit()` and `hideAllPanels()`. The reason is that `addFiles()` still
emits all the hundreds of file-added events, and the Dashboard responds
to each with `hideAllPanels()`, which does a state update. But this all
happens synchronously, and the state almost certainly did not change
since the last `file-added` event that fired a millisecond ago.
This adds a check to avoid the state update if it is not necessary.

Adding 1300 files takes about 40ms now.
With this change, the `addFiles()` call is no longer the slowest
part—now preact rendering all the items is!
* utils: optimize generateFileID and getFileNameAndExtension
Replaces some clever things with more mundane and faster things!
Now, generateFileID is a bunch of string concatenations.
Now, getFileNameAndExtension uses `lastIndexOf()` instead of a regex.

Adding 1300 files takes about 25ms.
* dashboard: use preact-virtual-list
* thumbnail-generator: add `lazy` option
* dashboard: request thumbnails once file item renders the first time
* dashboard: fork preact-virtual-list
* core: add removeFiles() to remove files in bulk
* Implement removeFile() in terms of removeFiles()
* thumbnail-generator: only queue files that can be previewed
* rename size constants to accommodate WIDTH/HEIGHT
* Use new uppy.addFiles in DragDrop and FileInput
* utils: fix getFileNameAndExtension() type
* Rip out the lazy thumbnail generation
* Rip out virtualization.
* Remove virtualization leftovers
* tell future people that this is intentionally verbose
* Update package-lock.json
* henlo i am spell
* Make `addFiles()` respect maxNumberOfFiles
* core: show an informer error if some files fail in bulk add
* locales: fix quotes to make build:locale-pack happy
Co-authored-by: Artur Paikin <artur@arturpaikin.com>
* fix#2011
The isXml() method will return false if the Content-Type header is not set in the S3 response
* aws-s3: fix lint
Co-authored-by: Renée Kooi <renee@kooi.me>
Update `prepareUploadPart` contract to accept an optional `headers` property in the returned value.
If `headers` are present, they will be sent along the S3 presigned URL
Fixes#1984
Updating `dropEffect` on `ondrop` doesn't matter, since the effect will
already have been executed at that point. It should be updated in
ondragenter/ondragover instead.
fixes#1978
* Move stats to plugin list, add table with versions of all plugins
* Update Hexo to 4.0, and other deps too
* update hexo-filter-github-emojis dependecy, run lerna bootstrap
* re-create package-lock.json
* crap, it adds body/html to any document now, and this is a partial :(
* companion: temporary fix for ts compile error
* fix netlify maybe
* node 12 is lts
* revert attempted netlify command fix
* update package-lock.json
* [feature] - Add new ‘showRecordingLength’ prop for the Webcam plugin. When this is true, it counts the duration of a recording and displays it to the user. Add a test for generating the correct duration of the recording.
* Update packages/@uppy/webcam/src/style.scss
Co-Authored-By: Artur Paikin <artur@arturpaikin.com>
* Added i18n for the recording length counter and update Readme. Fix Webcam styles where some styles were not in alphabetical order.
* Update packages/@uppy/webcam/src/style.scss
Co-Authored-By: Artur Paikin <artur@arturpaikin.com>
Added i18n for the recording length counter and update Readme. Fix Webcam styles where some styles were not in alphabetical order.
* begin testing aws-s3 uploader
* test getUplaodParameters
* getUploadParameters configured campanionUrl
* warn user when configured without campanionUrl
* warn if missconfigured
Co-Authored-By: Renée Kooi <renee@kooi.me>
* remove warning in constructor