Browse Source

Release: uppy@4.0.0-beta.7 (#5162)


| Package                |      Version | Package                |      Version |
| ---------------------- | ------------ | ---------------------- | ------------ |
| @uppy/companion        | 5.0.0-beta.6 | @uppy/status-bar       | 4.0.0-beta.7 |
| @uppy/companion-client | 4.0.0-beta.6 | @uppy/unsplash         | 4.0.0-beta.6 |
| @uppy/compressor       | 2.0.0-beta.7 | @uppy/url              | 4.0.0-beta.6 |
| @uppy/core             | 4.0.0-beta.7 | @uppy/utils            | 6.0.0-beta.6 |
| @uppy/dashboard        | 4.0.0-beta.7 | @uppy/webcam           | 4.0.0-beta.6 |
| @uppy/dropbox          | 4.0.0-beta.6 | @uppy/xhr-upload       | 4.0.0-beta.4 |
| @uppy/image-editor     | 3.0.0-beta.4 | uppy                   | 4.0.0-beta.7 |
| @uppy/screen-capture   | 4.0.0-beta.5 |                        |              |

- @uppy/companion: switch from `node-redis` to `ioredis` (Dominik Schmidt / #4623)
- meta: Fix headings in xhr.mdx (Merlijn Vos)
- @uppy/xhr-upload: introduce hooks similar to tus (Merlijn Vos / #5094)
- @uppy/core: close->destroy, clearUploadedFiles->clear (Merlijn Vos / #5154)
- @uppy/companion-client,@uppy/dropbox,@uppy/screen-capture,@uppy/unsplash,@uppy/url,@uppy/webcam: Use `title` consistently from locales (Merlijn Vos / #5134)




| Package            | Version | Package            | Version |
| ------------------ | ------- | ------------------ | ------- |
| @uppy/core         |  3.11.3 | uppy               |  3.25.3 |
| @uppy/image-editor |   2.4.6 |                    |         |

- @uppy/image-editor: fix tooltips (Avneet Singh Malhotra / #5156)
- meta: Remove redundant `plugins` prop from examples (Merlijn Vos / #5145)
- @uppy/image-editor: Remove `target` option from examples and document consistently (Merlijn Vos / #5146)
- @uppy/core: make getObjectOfFilesPerState more efficient (Merlijn Vos / #5155)
github-actions[bot] 11 months ago
parent
commit
53cb32f5d9
55 changed files with 476 additions and 313 deletions
  1. 1 1
      BUNDLE-README.md
  2. 37 0
      CHANGELOG.md
  3. 61 20
      README.md
  4. 2 2
      docs/framework-integrations/react.mdx
  5. 2 2
      docs/framework-integrations/svelte.mdx
  6. 1 1
      docs/framework-integrations/vue.mdx
  7. 2 4
      docs/guides/migration-guides.md
  8. 2 1
      docs/presets/remote-sources.mdx
  9. 5 6
      docs/sources/audio.mdx
  10. 5 5
      docs/sources/companion-plugins/box.mdx
  11. 5 5
      docs/sources/companion-plugins/dropbox.mdx
  12. 3 5
      docs/sources/companion-plugins/facebook.mdx
  13. 3 5
      docs/sources/companion-plugins/google-drive.mdx
  14. 3 5
      docs/sources/companion-plugins/instagram.mdx
  15. 3 5
      docs/sources/companion-plugins/onedrive.mdx
  16. 3 5
      docs/sources/companion-plugins/unsplash.mdx
  17. 5 5
      docs/sources/companion-plugins/url.mdx
  18. 5 5
      docs/sources/companion-plugins/zoom.mdx
  19. 5 6
      docs/sources/screen-capture.mdx
  20. 5 6
      docs/sources/webcam.mdx
  21. 2 2
      docs/user-interfaces/elements/image-editor.mdx
  22. 3 2
      docs/user-interfaces/elements/status-bar.mdx
  23. 2 2
      examples/aws-nodejs/public/drag.html
  24. 2 2
      examples/aws-nodejs/public/index.html
  25. 2 2
      examples/cdn-example/index.html
  26. 2 2
      examples/uppy-with-companion/client/index.html
  27. 7 0
      packages/@uppy/companion-client/CHANGELOG.md
  28. 1 1
      packages/@uppy/companion-client/package.json
  29. 7 0
      packages/@uppy/companion/CHANGELOG.md
  30. 1 1
      packages/@uppy/companion/package.json
  31. 2 2
      packages/@uppy/compressor/package.json
  32. 14 0
      packages/@uppy/core/CHANGELOG.md
  33. 2 2
      packages/@uppy/core/package.json
  34. 46 23
      packages/@uppy/core/src/Uppy.ts
  35. 2 2
      packages/@uppy/dashboard/package.json
  36. 7 0
      packages/@uppy/dropbox/CHANGELOG.md
  37. 1 1
      packages/@uppy/dropbox/package.json
  38. 8 0
      packages/@uppy/image-editor/CHANGELOG.md
  39. 1 4
      packages/@uppy/image-editor/README.md
  40. 1 1
      packages/@uppy/image-editor/package.json
  41. 153 153
      packages/@uppy/image-editor/src/Editor.tsx
  42. 7 0
      packages/@uppy/screen-capture/CHANGELOG.md
  43. 1 1
      packages/@uppy/screen-capture/package.json
  44. 2 2
      packages/@uppy/status-bar/package.json
  45. 7 0
      packages/@uppy/unsplash/CHANGELOG.md
  46. 1 1
      packages/@uppy/unsplash/package.json
  47. 7 0
      packages/@uppy/url/CHANGELOG.md
  48. 1 1
      packages/@uppy/url/package.json
  49. 1 1
      packages/@uppy/utils/package.json
  50. 7 0
      packages/@uppy/webcam/CHANGELOG.md
  51. 1 1
      packages/@uppy/webcam/package.json
  52. 7 0
      packages/@uppy/xhr-upload/CHANGELOG.md
  53. 1 1
      packages/@uppy/xhr-upload/package.json
  54. 1 1
      packages/uppy/package.json
  55. 8 8
      yarn.lock

+ 1 - 1
BUNDLE-README.md

@@ -2,7 +2,7 @@
 
 
 Hi, thanks for trying out the bundled version of the Uppy File Uploader. You can
 Hi, thanks for trying out the bundled version of the Uppy File Uploader. You can
 use this from a CDN
 use this from a CDN
-(`<script src="https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.js"></script>`)
+(`<script src="https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.js"></script>`)
 or bundle it with your webapp.
 or bundle it with your webapp.
 
 
 Note that the recommended way to use Uppy is to install it with yarn/npm and use
 Note that the recommended way to use Uppy is to install it with yarn/npm and use

+ 37 - 0
CHANGELOG.md

@@ -12,6 +12,28 @@ Please add your entries in this format:
 
 
 In the current stage we aim to release a new version at least every month.
 In the current stage we aim to release a new version at least every month.
 
 
+## 4.0.0-beta.7
+
+Released: 2024-05-14
+
+| Package                |      Version | Package                |      Version |
+| ---------------------- | ------------ | ---------------------- | ------------ |
+| @uppy/companion        | 5.0.0-beta.6 | @uppy/status-bar       | 4.0.0-beta.7 |
+| @uppy/companion-client | 4.0.0-beta.6 | @uppy/unsplash         | 4.0.0-beta.6 |
+| @uppy/compressor       | 2.0.0-beta.7 | @uppy/url              | 4.0.0-beta.6 |
+| @uppy/core             | 4.0.0-beta.7 | @uppy/utils            | 6.0.0-beta.6 |
+| @uppy/dashboard        | 4.0.0-beta.7 | @uppy/webcam           | 4.0.0-beta.6 |
+| @uppy/dropbox          | 4.0.0-beta.6 | @uppy/xhr-upload       | 4.0.0-beta.4 |
+| @uppy/image-editor     | 3.0.0-beta.4 | uppy                   | 4.0.0-beta.7 |
+| @uppy/screen-capture   | 4.0.0-beta.5 |                        |              |
+
+- @uppy/companion: switch from `node-redis` to `ioredis` (Dominik Schmidt / #4623)
+- meta: Fix headings in xhr.mdx (Merlijn Vos)
+- @uppy/xhr-upload: introduce hooks similar to tus (Merlijn Vos / #5094)
+- @uppy/core: close->destroy, clearUploadedFiles->clear (Merlijn Vos / #5154)
+- @uppy/companion-client,@uppy/dropbox,@uppy/screen-capture,@uppy/unsplash,@uppy/url,@uppy/webcam: Use `title` consistently from locales (Merlijn Vos / #5134)
+
+
 ## 4.0.0-beta.6
 ## 4.0.0-beta.6
 
 
 Released: 2024-05-08
 Released: 2024-05-08
@@ -287,6 +309,21 @@ Released: 2024-03-28
 - @uppy/vue: [v4.x] remove manual types (Antoine du Hamel / #4803)
 - @uppy/vue: [v4.x] remove manual types (Antoine du Hamel / #4803)
 - meta: prepare release workflow for beta versions (Antoine du Hamel)
 - meta: prepare release workflow for beta versions (Antoine du Hamel)
 
 
+## 3.25.3
+
+Released: 2024-05-14
+
+| Package            | Version | Package            | Version |
+| ------------------ | ------- | ------------------ | ------- |
+| @uppy/core         |  3.11.3 | uppy               |  3.25.3 |
+| @uppy/image-editor |   2.4.6 |                    |         |
+
+- @uppy/image-editor: fix tooltips (Avneet Singh Malhotra / #5156)
+- meta: Remove redundant `plugins` prop from examples (Merlijn Vos / #5145)
+- @uppy/image-editor: Remove `target` option from examples and document consistently (Merlijn Vos / #5146)
+- @uppy/core: make getObjectOfFilesPerState more efficient (Merlijn Vos / #5155)
+
+
 ## 3.25.2
 ## 3.25.2
 
 
 Released: 2024-05-07
 Released: 2024-05-07

+ 61 - 20
README.md

@@ -41,8 +41,8 @@ import Tus from '@uppy/tus'
 const uppy = new Uppy()
 const uppy = new Uppy()
   .use(Dashboard, { trigger: '#select-files' })
   .use(Dashboard, { trigger: '#select-files' })
   .use(RemoteSources, { companionUrl: 'https://companion.uppy.io' })
   .use(RemoteSources, { companionUrl: 'https://companion.uppy.io' })
-  .use(Webcam, { target: Dashboard })
-  .use(ImageEditor, { target: Dashboard })
+  .use(Webcam)
+  .use(ImageEditor)
   .use(Tus, { endpoint: 'https://tusd.tusdemo.net/files/' })
   .use(Tus, { endpoint: 'https://tusd.tusdemo.net/files/' })
   .on('complete', (result) => {
   .on('complete', (result) => {
     console.log('Upload result:', result)
     console.log('Upload result:', result)
@@ -79,7 +79,7 @@ npm install @uppy/core @uppy/dashboard @uppy/tus
 ```
 ```
 
 
 Add CSS
 Add CSS
-[uppy.min.css](https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.css),
+[uppy.min.css](https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.css),
 either to your HTML page’s `<head>` or include in JS, if your bundler of choice
 either to your HTML page’s `<head>` or include in JS, if your bundler of choice
 supports it.
 supports it.
 
 
@@ -94,7 +94,7 @@ object.
 ```html
 ```html
 <!-- 1. Add CSS to `<head>` -->
 <!-- 1. Add CSS to `<head>` -->
 <link
 <link
-  href="https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.css"
+  href="https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.css"
   rel="stylesheet"
   rel="stylesheet"
 />
 />
 
 
@@ -105,7 +105,7 @@ object.
     Uppy,
     Uppy,
     Dashboard,
     Dashboard,
     Tus,
     Tus,
-  } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.mjs'
+  } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.mjs'
 
 
   const uppy = new Uppy()
   const uppy = new Uppy()
   uppy.use(Dashboard, { target: '#files-drag-drop' })
   uppy.use(Dashboard, { target: '#files-drag-drop' })
@@ -203,7 +203,48 @@ server-side component, is needed for a plugin to work.
 
 
 ## Browser Support
 ## Browser Support
 
 
-We aim to support recent versions of Chrome, Firefox, and Safari.
+<<<<<<< HEAD We aim to support recent versions of Chrome, Firefox, and Safari.
+\======= We aim to support recent versions of Chrome, Firefox, Safari and Edge.
+
+We still provide a bundle which should work on IE11, but we are not running
+tests on it.
+
+### Polyfills
+
+Here’s a list of polyfills you’ll need to include to make Uppy work in older
+browsers, such as IE11:
+
+- [abortcontroller-polyfill](https://github.com/mo/abortcontroller-polyfill)
+- [core-js](https://github.com/zloirock/core-js)
+- [md-gum-polyfill](https://github.com/mozdevs/mediaDevices-getUserMedia-polyfill)
+- [resize-observer-polyfill](https://github.com/que-etc/resize-observer-polyfill)
+- [whatwg-fetch](https://github.com/github/fetch)
+
+If you’re using a bundler, you need to import them before Uppy:
+
+```js
+import 'core-js'
+import 'whatwg-fetch'
+import 'abortcontroller-polyfill/dist/polyfill-patch-fetch'
+// Order matters: AbortController needs fetch which needs Promise (provided by core-js).
+
+import 'md-gum-polyfill'
+import ResizeObserver from 'resize-observer-polyfill'
+
+window.ResizeObserver ??= ResizeObserver
+
+export { default } from '@uppy/core'
+export * from '@uppy/core'
+```
+
+If you’re using Uppy from CDN, those polyfills are already included in the
+legacy bundle, so no need to include anything additionally:
+
+```html
+<script src="https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.legacy.min.js"></script>
+```
+
+> > > > > > > 86e2e6750192055bfba24abf62e227976be5e085
 
 
 ## FAQ
 ## FAQ
 
 
@@ -320,7 +361,7 @@ Use Uppy in your project?
 <tr><td><a href=https://github.com/samuelcolburn><img width="117" alt="samuelcolburn" src="https://avatars.githubusercontent.com/u/9741902?v=4&s=117"></a></td><td><a href=https://github.com/fortunto2><img width="117" alt="fortunto2" src="https://avatars.githubusercontent.com/u/1236751?v=4&s=117"></a></td><td><a href=https://github.com/GNURub><img width="117" alt="GNURub" src="https://avatars.githubusercontent.com/u/1318648?v=4&s=117"></a></td><td><a href=https://github.com/rart><img width="117" alt="rart" src="https://avatars.githubusercontent.com/u/3928341?v=4&s=117"></a></td><td><a href=https://github.com/rossng><img width="117" alt="rossng" src="https://avatars.githubusercontent.com/u/565371?v=4&s=117"></a></td><td><a href=https://github.com/mkopinsky><img width="117" alt="mkopinsky" src="https://avatars.githubusercontent.com/u/591435?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/samuelcolburn><img width="117" alt="samuelcolburn" src="https://avatars.githubusercontent.com/u/9741902?v=4&s=117"></a></td><td><a href=https://github.com/fortunto2><img width="117" alt="fortunto2" src="https://avatars.githubusercontent.com/u/1236751?v=4&s=117"></a></td><td><a href=https://github.com/GNURub><img width="117" alt="GNURub" src="https://avatars.githubusercontent.com/u/1318648?v=4&s=117"></a></td><td><a href=https://github.com/rart><img width="117" alt="rart" src="https://avatars.githubusercontent.com/u/3928341?v=4&s=117"></a></td><td><a href=https://github.com/rossng><img width="117" alt="rossng" src="https://avatars.githubusercontent.com/u/565371?v=4&s=117"></a></td><td><a href=https://github.com/mkopinsky><img width="117" alt="mkopinsky" src="https://avatars.githubusercontent.com/u/591435?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/mhulet><img width="117" alt="mhulet" src="https://avatars.githubusercontent.com/u/293355?v=4&s=117"></a></td><td><a href=https://github.com/hrsh><img width="117" alt="hrsh" src="https://avatars.githubusercontent.com/u/1929359?v=4&s=117"></a></td><td><a href=https://github.com/mauricioribeiro><img width="117" alt="mauricioribeiro" src="https://avatars.githubusercontent.com/u/2589856?v=4&s=117"></a></td><td><a href=https://github.com/matthewhartstonge><img width="117" alt="matthewhartstonge" src="https://avatars.githubusercontent.com/u/6119549?v=4&s=117"></a></td><td><a href=https://github.com/mjesuele><img width="117" alt="mjesuele" src="https://avatars.githubusercontent.com/u/871117?v=4&s=117"></a></td><td><a href=https://github.com/mattfik><img width="117" alt="mattfik" src="https://avatars.githubusercontent.com/u/1638028?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/mhulet><img width="117" alt="mhulet" src="https://avatars.githubusercontent.com/u/293355?v=4&s=117"></a></td><td><a href=https://github.com/hrsh><img width="117" alt="hrsh" src="https://avatars.githubusercontent.com/u/1929359?v=4&s=117"></a></td><td><a href=https://github.com/mauricioribeiro><img width="117" alt="mauricioribeiro" src="https://avatars.githubusercontent.com/u/2589856?v=4&s=117"></a></td><td><a href=https://github.com/matthewhartstonge><img width="117" alt="matthewhartstonge" src="https://avatars.githubusercontent.com/u/6119549?v=4&s=117"></a></td><td><a href=https://github.com/mjesuele><img width="117" alt="mjesuele" src="https://avatars.githubusercontent.com/u/871117?v=4&s=117"></a></td><td><a href=https://github.com/mattfik><img width="117" alt="mattfik" src="https://avatars.githubusercontent.com/u/1638028?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/mateuscruz><img width="117" alt="mateuscruz" src="https://avatars.githubusercontent.com/u/8962842?v=4&s=117"></a></td><td><a href=https://github.com/masumulu28><img width="117" alt="masumulu28" src="https://avatars.githubusercontent.com/u/49063256?v=4&s=117"></a></td><td><a href=https://github.com/masaok><img width="117" alt="masaok" src="https://avatars.githubusercontent.com/u/1320083?v=4&s=117"></a></td><td><a href=https://github.com/martin-brennan><img width="117" alt="martin-brennan" src="https://avatars.githubusercontent.com/u/920448?v=4&s=117"></a></td><td><a href=https://github.com/marcusforsberg><img width="117" alt="marcusforsberg" src="https://avatars.githubusercontent.com/u/1009069?v=4&s=117"></a></td><td><a href=https://github.com/marcosthejew><img width="117" alt="marcosthejew" src="https://avatars.githubusercontent.com/u/1500967?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/mateuscruz><img width="117" alt="mateuscruz" src="https://avatars.githubusercontent.com/u/8962842?v=4&s=117"></a></td><td><a href=https://github.com/masumulu28><img width="117" alt="masumulu28" src="https://avatars.githubusercontent.com/u/49063256?v=4&s=117"></a></td><td><a href=https://github.com/masaok><img width="117" alt="masaok" src="https://avatars.githubusercontent.com/u/1320083?v=4&s=117"></a></td><td><a href=https://github.com/martin-brennan><img width="117" alt="martin-brennan" src="https://avatars.githubusercontent.com/u/920448?v=4&s=117"></a></td><td><a href=https://github.com/marcusforsberg><img width="117" alt="marcusforsberg" src="https://avatars.githubusercontent.com/u/1009069?v=4&s=117"></a></td><td><a href=https://github.com/marcosthejew><img width="117" alt="marcosthejew" src="https://avatars.githubusercontent.com/u/1500967?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/mperrando><img width="117" alt="mperrando" src="https://avatars.githubusercontent.com/u/525572?v=4&s=117"></a></td><td><a href=https://github.com/onhate><img width="117" alt="onhate" src="https://avatars.githubusercontent.com/u/980905?v=4&s=117"></a></td><td><a href=https://github.com/marc-mabe><img width="117" alt="marc-mabe" src="https://avatars.githubusercontent.com/u/302689?v=4&s=117"></a></td><td><a href=https://github.com/sercraig><img width="117" alt="sercraig" src="https://avatars.githubusercontent.com/u/24261518?v=4&s=117"></a></td><td><a href=https://github.com/cryptic022><img width="117" alt="cryptic022" src="https://avatars.githubusercontent.com/u/18145703?v=4&s=117"></a></td><td><a href=https://github.com/Ozodbek1405><img width="117" alt="Ozodbek1405" src="https://avatars.githubusercontent.com/u/86141593?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/mperrando><img width="117" alt="mperrando" src="https://avatars.githubusercontent.com/u/525572?v=4&s=117"></a></td><td><a href=https://github.com/onhate><img width="117" alt="onhate" src="https://avatars.githubusercontent.com/u/980905?v=4&s=117"></a></td><td><a href=https://github.com/marc-mabe><img width="117" alt="marc-mabe" src="https://avatars.githubusercontent.com/u/302689?v=4&s=117"></a></td><td><a href=https://github.com/Lucklj521><img width="117" alt="Lucklj521" src="https://avatars.githubusercontent.com/u/93632042?v=4&s=117"></a></td><td><a href=https://github.com/cryptic022><img width="117" alt="cryptic022" src="https://avatars.githubusercontent.com/u/18145703?v=4&s=117"></a></td><td><a href=https://github.com/Ozodbek1405><img width="117" alt="Ozodbek1405" src="https://avatars.githubusercontent.com/u/86141593?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/leftdevel><img width="117" alt="leftdevel" src="https://avatars.githubusercontent.com/u/843337?v=4&s=117"></a></td><td><a href=https://github.com/nil1511><img width="117" alt="nil1511" src="https://avatars.githubusercontent.com/u/2058170?v=4&s=117"></a></td><td><a href=https://github.com/coreprocess><img width="117" alt="coreprocess" src="https://avatars.githubusercontent.com/u/1226918?v=4&s=117"></a></td><td><a href=https://github.com/nicojones><img width="117" alt="nicojones" src="https://avatars.githubusercontent.com/u/6078915?v=4&s=117"></a></td><td><a href=https://github.com/trungcva10a6tn><img width="117" alt="trungcva10a6tn" src="https://avatars.githubusercontent.com/u/18293783?v=4&s=117"></a></td><td><a href=https://github.com/naveed-ahmad><img width="117" alt="naveed-ahmad" src="https://avatars.githubusercontent.com/u/701567?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/leftdevel><img width="117" alt="leftdevel" src="https://avatars.githubusercontent.com/u/843337?v=4&s=117"></a></td><td><a href=https://github.com/nil1511><img width="117" alt="nil1511" src="https://avatars.githubusercontent.com/u/2058170?v=4&s=117"></a></td><td><a href=https://github.com/coreprocess><img width="117" alt="coreprocess" src="https://avatars.githubusercontent.com/u/1226918?v=4&s=117"></a></td><td><a href=https://github.com/nicojones><img width="117" alt="nicojones" src="https://avatars.githubusercontent.com/u/6078915?v=4&s=117"></a></td><td><a href=https://github.com/trungcva10a6tn><img width="117" alt="trungcva10a6tn" src="https://avatars.githubusercontent.com/u/18293783?v=4&s=117"></a></td><td><a href=https://github.com/naveed-ahmad><img width="117" alt="naveed-ahmad" src="https://avatars.githubusercontent.com/u/701567?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/pleasespammelater><img width="117" alt="pleasespammelater" src="https://avatars.githubusercontent.com/u/11870394?v=4&s=117"></a></td><td><a href=https://github.com/marton-laszlo-attila><img width="117" alt="marton-laszlo-attila" src="https://avatars.githubusercontent.com/u/73295321?v=4&s=117"></a></td><td><a href=https://github.com/navruzm><img width="117" alt="navruzm" src="https://avatars.githubusercontent.com/u/168341?v=4&s=117"></a></td><td><a href=https://github.com/mogzol><img width="117" alt="mogzol" src="https://avatars.githubusercontent.com/u/11789801?v=4&s=117"></a></td><td><a href=https://github.com/shahimclt><img width="117" alt="shahimclt" src="https://avatars.githubusercontent.com/u/8318002?v=4&s=117"></a></td><td><a href=https://github.com/mnafees><img width="117" alt="mnafees" src="https://avatars.githubusercontent.com/u/1763885?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/pleasespammelater><img width="117" alt="pleasespammelater" src="https://avatars.githubusercontent.com/u/11870394?v=4&s=117"></a></td><td><a href=https://github.com/marton-laszlo-attila><img width="117" alt="marton-laszlo-attila" src="https://avatars.githubusercontent.com/u/73295321?v=4&s=117"></a></td><td><a href=https://github.com/navruzm><img width="117" alt="navruzm" src="https://avatars.githubusercontent.com/u/168341?v=4&s=117"></a></td><td><a href=https://github.com/mogzol><img width="117" alt="mogzol" src="https://avatars.githubusercontent.com/u/11789801?v=4&s=117"></a></td><td><a href=https://github.com/shahimclt><img width="117" alt="shahimclt" src="https://avatars.githubusercontent.com/u/8318002?v=4&s=117"></a></td><td><a href=https://github.com/mnafees><img width="117" alt="mnafees" src="https://avatars.githubusercontent.com/u/1763885?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/boudra><img width="117" alt="boudra" src="https://avatars.githubusercontent.com/u/711886?v=4&s=117"></a></td><td><a href=https://github.com/achmiral><img width="117" alt="achmiral" src="https://avatars.githubusercontent.com/u/10906059?v=4&s=117"></a></td><td><a href=https://github.com/ken-kuro><img width="117" alt="ken-kuro" src="https://avatars.githubusercontent.com/u/47441476?v=4&s=117"></a></td><td><a href=https://github.com/neuronet77><img width="117" alt="neuronet77" src="https://avatars.githubusercontent.com/u/4220037?v=4&s=117"></a></td><td><a href=https://github.com/mosi-kha><img width="117" alt="mosi-kha" src="https://avatars.githubusercontent.com/u/35611016?v=4&s=117"></a></td><td><a href=https://github.com/maddy-jo><img width="117" alt="maddy-jo" src="https://avatars.githubusercontent.com/u/3241493?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/boudra><img width="117" alt="boudra" src="https://avatars.githubusercontent.com/u/711886?v=4&s=117"></a></td><td><a href=https://github.com/achmiral><img width="117" alt="achmiral" src="https://avatars.githubusercontent.com/u/10906059?v=4&s=117"></a></td><td><a href=https://github.com/ken-kuro><img width="117" alt="ken-kuro" src="https://avatars.githubusercontent.com/u/47441476?v=4&s=117"></a></td><td><a href=https://github.com/neuronet77><img width="117" alt="neuronet77" src="https://avatars.githubusercontent.com/u/4220037?v=4&s=117"></a></td><td><a href=https://github.com/mosi-kha><img width="117" alt="mosi-kha" src="https://avatars.githubusercontent.com/u/35611016?v=4&s=117"></a></td><td><a href=https://github.com/maddy-jo><img width="117" alt="maddy-jo" src="https://avatars.githubusercontent.com/u/3241493?v=4&s=117"></a></td></tr>
@@ -338,27 +379,27 @@ Use Uppy in your project?
 <tr><td><a href=https://github.com/yafkari><img width="117" alt="yafkari" src="https://avatars.githubusercontent.com/u/41365655?v=4&s=117"></a></td><td><a href=https://github.com/YehudaKremer><img width="117" alt="YehudaKremer" src="https://avatars.githubusercontent.com/u/946652?v=4&s=117"></a></td><td><a href=https://github.com/ardeois><img width="117" alt="ardeois" src="https://avatars.githubusercontent.com/u/1867939?v=4&s=117"></a></td><td><a href=https://github.com/CommanderRoot><img width="117" alt="CommanderRoot" src="https://avatars.githubusercontent.com/u/4395417?v=4&s=117"></a></td><td><a href=https://github.com/czj><img width="117" alt="czj" src="https://avatars.githubusercontent.com/u/14306?v=4&s=117"></a></td><td><a href=https://github.com/cbush06><img width="117" alt="cbush06" src="https://avatars.githubusercontent.com/u/15720146?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/yafkari><img width="117" alt="yafkari" src="https://avatars.githubusercontent.com/u/41365655?v=4&s=117"></a></td><td><a href=https://github.com/YehudaKremer><img width="117" alt="YehudaKremer" src="https://avatars.githubusercontent.com/u/946652?v=4&s=117"></a></td><td><a href=https://github.com/ardeois><img width="117" alt="ardeois" src="https://avatars.githubusercontent.com/u/1867939?v=4&s=117"></a></td><td><a href=https://github.com/CommanderRoot><img width="117" alt="CommanderRoot" src="https://avatars.githubusercontent.com/u/4395417?v=4&s=117"></a></td><td><a href=https://github.com/czj><img width="117" alt="czj" src="https://avatars.githubusercontent.com/u/14306?v=4&s=117"></a></td><td><a href=https://github.com/cbush06><img width="117" alt="cbush06" src="https://avatars.githubusercontent.com/u/15720146?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/Aarbel><img width="117" alt="Aarbel" src="https://avatars.githubusercontent.com/u/25119847?v=4&s=117"></a></td><td><a href=https://github.com/cfra><img width="117" alt="cfra" src="https://avatars.githubusercontent.com/u/1347051?v=4&s=117"></a></td><td><a href=https://github.com/csprance><img width="117" alt="csprance" src="https://avatars.githubusercontent.com/u/7902617?v=4&s=117"></a></td><td><a href=https://github.com/prattcmp><img width="117" alt="prattcmp" src="https://avatars.githubusercontent.com/u/1497950?v=4&s=117"></a></td><td><a href=https://github.com/subvertallchris><img width="117" alt="subvertallchris" src="https://avatars.githubusercontent.com/u/4097271?v=4&s=117"></a></td><td><a href=https://github.com/charlybillaud><img width="117" alt="charlybillaud" src="https://avatars.githubusercontent.com/u/31970410?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/Aarbel><img width="117" alt="Aarbel" src="https://avatars.githubusercontent.com/u/25119847?v=4&s=117"></a></td><td><a href=https://github.com/cfra><img width="117" alt="cfra" src="https://avatars.githubusercontent.com/u/1347051?v=4&s=117"></a></td><td><a href=https://github.com/csprance><img width="117" alt="csprance" src="https://avatars.githubusercontent.com/u/7902617?v=4&s=117"></a></td><td><a href=https://github.com/prattcmp><img width="117" alt="prattcmp" src="https://avatars.githubusercontent.com/u/1497950?v=4&s=117"></a></td><td><a href=https://github.com/subvertallchris><img width="117" alt="subvertallchris" src="https://avatars.githubusercontent.com/u/4097271?v=4&s=117"></a></td><td><a href=https://github.com/charlybillaud><img width="117" alt="charlybillaud" src="https://avatars.githubusercontent.com/u/31970410?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/Cretezy><img width="117" alt="Cretezy" src="https://avatars.githubusercontent.com/u/2672503?v=4&s=117"></a></td><td><a href=https://github.com/chao><img width="117" alt="chao" src="https://avatars.githubusercontent.com/u/55872?v=4&s=117"></a></td><td><a href=https://github.com/cellvinchung><img width="117" alt="cellvinchung" src="https://avatars.githubusercontent.com/u/5347394?v=4&s=117"></a></td><td><a href=https://github.com/cartfisk><img width="117" alt="cartfisk" src="https://avatars.githubusercontent.com/u/8764375?v=4&s=117"></a></td><td><a href=https://github.com/cyu><img width="117" alt="cyu" src="https://avatars.githubusercontent.com/u/2431?v=4&s=117"></a></td><td><a href=https://github.com/bryanjswift><img width="117" alt="bryanjswift" src="https://avatars.githubusercontent.com/u/9911?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/Cretezy><img width="117" alt="Cretezy" src="https://avatars.githubusercontent.com/u/2672503?v=4&s=117"></a></td><td><a href=https://github.com/chao><img width="117" alt="chao" src="https://avatars.githubusercontent.com/u/55872?v=4&s=117"></a></td><td><a href=https://github.com/cellvinchung><img width="117" alt="cellvinchung" src="https://avatars.githubusercontent.com/u/5347394?v=4&s=117"></a></td><td><a href=https://github.com/cartfisk><img width="117" alt="cartfisk" src="https://avatars.githubusercontent.com/u/8764375?v=4&s=117"></a></td><td><a href=https://github.com/cyu><img width="117" alt="cyu" src="https://avatars.githubusercontent.com/u/2431?v=4&s=117"></a></td><td><a href=https://github.com/bryanjswift><img width="117" alt="bryanjswift" src="https://avatars.githubusercontent.com/u/9911?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/functino><img width="117" alt="functino" src="https://avatars.githubusercontent.com/u/415498?v=4&s=117"></a></td><td><a href=https://github.com/eliOcs><img width="117" alt="eliOcs" src="https://avatars.githubusercontent.com/u/1283954?v=4&s=117"></a></td><td><a href=https://github.com/yoldar><img width="117" alt="yoldar" src="https://avatars.githubusercontent.com/u/1597578?v=4&s=117"></a></td><td><a href=https://github.com/efbautista><img width="117" alt="efbautista" src="https://avatars.githubusercontent.com/u/35430671?v=4&s=117"></a></td><td><a href=https://github.com/emuell><img width="117" alt="emuell" src="https://avatars.githubusercontent.com/u/11521600?v=4&s=117"></a></td><td><a href=https://github.com/EdgarSantiago93><img width="117" alt="EdgarSantiago93" src="https://avatars.githubusercontent.com/u/14806877?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/bedgerotto><img width="117" alt="bedgerotto" src="https://avatars.githubusercontent.com/u/4459657?v=4&s=117"></a></td><td><a href=https://github.com/functino><img width="117" alt="functino" src="https://avatars.githubusercontent.com/u/415498?v=4&s=117"></a></td><td><a href=https://github.com/yoldar><img width="117" alt="yoldar" src="https://avatars.githubusercontent.com/u/1597578?v=4&s=117"></a></td><td><a href=https://github.com/efbautista><img width="117" alt="efbautista" src="https://avatars.githubusercontent.com/u/35430671?v=4&s=117"></a></td><td><a href=https://github.com/emuell><img width="117" alt="emuell" src="https://avatars.githubusercontent.com/u/11521600?v=4&s=117"></a></td><td><a href=https://github.com/EdgarSantiago93><img width="117" alt="EdgarSantiago93" src="https://avatars.githubusercontent.com/u/14806877?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/sweetro><img width="117" alt="sweetro" src="https://avatars.githubusercontent.com/u/6228717?v=4&s=117"></a></td><td><a href=https://github.com/jeetiss><img width="117" alt="jeetiss" src="https://avatars.githubusercontent.com/u/6726016?v=4&s=117"></a></td><td><a href=https://github.com/DennisKofflard><img width="117" alt="DennisKofflard" src="https://avatars.githubusercontent.com/u/8669129?v=4&s=117"></a></td><td><a href=https://github.com/hoangsvit><img width="117" alt="hoangsvit" src="https://avatars.githubusercontent.com/u/11882322?v=4&s=117"></a></td><td><a href=https://github.com/davilima6><img width="117" alt="davilima6" src="https://avatars.githubusercontent.com/u/422130?v=4&s=117"></a></td><td><a href=https://github.com/akizor><img width="117" alt="akizor" src="https://avatars.githubusercontent.com/u/1052439?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/sweetro><img width="117" alt="sweetro" src="https://avatars.githubusercontent.com/u/6228717?v=4&s=117"></a></td><td><a href=https://github.com/jeetiss><img width="117" alt="jeetiss" src="https://avatars.githubusercontent.com/u/6726016?v=4&s=117"></a></td><td><a href=https://github.com/DennisKofflard><img width="117" alt="DennisKofflard" src="https://avatars.githubusercontent.com/u/8669129?v=4&s=117"></a></td><td><a href=https://github.com/hoangsvit><img width="117" alt="hoangsvit" src="https://avatars.githubusercontent.com/u/11882322?v=4&s=117"></a></td><td><a href=https://github.com/davilima6><img width="117" alt="davilima6" src="https://avatars.githubusercontent.com/u/422130?v=4&s=117"></a></td><td><a href=https://github.com/akizor><img width="117" alt="akizor" src="https://avatars.githubusercontent.com/u/1052439?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/KaminskiDaniell><img width="117" alt="KaminskiDaniell" src="https://avatars.githubusercontent.com/u/27357868?v=4&s=117"></a></td><td><a href=https://github.com/Cantabar><img width="117" alt="Cantabar" src="https://avatars.githubusercontent.com/u/6812207?v=4&s=117"></a></td><td><a href=https://github.com/mrboomer><img width="117" alt="mrboomer" src="https://avatars.githubusercontent.com/u/5942912?v=4&s=117"></a></td><td><a href=https://github.com/danilat><img width="117" alt="danilat" src="https://avatars.githubusercontent.com/u/22763?v=4&s=117"></a></td><td><a href=https://github.com/danschalow><img width="117" alt="danschalow" src="https://avatars.githubusercontent.com/u/3527437?v=4&s=117"></a></td><td><a href=https://github.com/danmichaelo><img width="117" alt="danmichaelo" src="https://avatars.githubusercontent.com/u/434495?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/KaminskiDaniell><img width="117" alt="KaminskiDaniell" src="https://avatars.githubusercontent.com/u/27357868?v=4&s=117"></a></td><td><a href=https://github.com/Cantabar><img width="117" alt="Cantabar" src="https://avatars.githubusercontent.com/u/6812207?v=4&s=117"></a></td><td><a href=https://github.com/mrboomer><img width="117" alt="mrboomer" src="https://avatars.githubusercontent.com/u/5942912?v=4&s=117"></a></td><td><a href=https://github.com/danilat><img width="117" alt="danilat" src="https://avatars.githubusercontent.com/u/22763?v=4&s=117"></a></td><td><a href=https://github.com/danschalow><img width="117" alt="danschalow" src="https://avatars.githubusercontent.com/u/3527437?v=4&s=117"></a></td><td><a href=https://github.com/danmichaelo><img width="117" alt="danmichaelo" src="https://avatars.githubusercontent.com/u/434495?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/Cruaier><img width="117" alt="Cruaier" src="https://avatars.githubusercontent.com/u/5204940?v=4&s=117"></a></td><td><a href=https://github.com/amitport><img width="117" alt="amitport" src="https://avatars.githubusercontent.com/u/1131991?v=4&s=117"></a></td><td><a href=https://github.com/tekacs><img width="117" alt="tekacs" src="https://avatars.githubusercontent.com/u/63247?v=4&s=117"></a></td><td><a href=https://github.com/Dogfalo><img width="117" alt="Dogfalo" src="https://avatars.githubusercontent.com/u/2775751?v=4&s=117"></a></td><td><a href=https://github.com/alirezahi><img width="117" alt="alirezahi" src="https://avatars.githubusercontent.com/u/16666064?v=4&s=117"></a></td><td><a href=https://github.com/aalepis><img width="117" alt="aalepis" src="https://avatars.githubusercontent.com/u/35684834?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/alexnj><img width="117" alt="alexnj" src="https://avatars.githubusercontent.com/u/683500?v=4&s=117"></a></td><td><a href=https://github.com/asmt3><img width="117" alt="asmt3" src="https://avatars.githubusercontent.com/u/1777709?v=4&s=117"></a></td><td><a href=https://github.com/ahmadissa><img width="117" alt="ahmadissa" src="https://avatars.githubusercontent.com/u/9936573?v=4&s=117"></a></td><td><a href=https://github.com/adritasharma><img width="117" alt="adritasharma" src="https://avatars.githubusercontent.com/u/29271635?v=4&s=117"></a></td><td><a href=https://github.com/Adrrei><img width="117" alt="Adrrei" src="https://avatars.githubusercontent.com/u/22191685?v=4&s=117"></a></td><td><a href=https://github.com/adityapatadia><img width="117" alt="adityapatadia" src="https://avatars.githubusercontent.com/u/1086617?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/adamvigneault><img width="117" alt="adamvigneault" src="https://avatars.githubusercontent.com/u/18236120?v=4&s=117"></a></td><td><a href=https://github.com/ajh-sr><img width="117" alt="ajh-sr" src="https://avatars.githubusercontent.com/u/71472057?v=4&s=117"></a></td><td><a href=https://github.com/adamdottv><img width="117" alt="adamdottv" src="https://avatars.githubusercontent.com/u/2363879?v=4&s=117"></a></td><td><a href=https://github.com/abannach><img width="117" alt="abannach" src="https://avatars.githubusercontent.com/u/43150303?v=4&s=117"></a></td><td><a href=https://github.com/superhawk610><img width="117" alt="superhawk610" src="https://avatars.githubusercontent.com/u/18172185?v=4&s=117"></a></td><td><a href=https://github.com/ajschmidt8><img width="117" alt="ajschmidt8" src="https://avatars.githubusercontent.com/u/7400326?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/bedgerotto><img width="117" alt="bedgerotto" src="https://avatars.githubusercontent.com/u/4459657?v=4&s=117"></a></td><td><a href=https://github.com/wbaaron><img width="117" alt="wbaaron" src="https://avatars.githubusercontent.com/u/1048988?v=4&s=117"></a></td><td><a href=https://github.com/Quorafind><img width="117" alt="Quorafind" src="https://avatars.githubusercontent.com/u/13215013?v=4&s=117"></a></td><td><a href=https://github.com/bducharme><img width="117" alt="bducharme" src="https://avatars.githubusercontent.com/u/4173569?v=4&s=117"></a></td><td><a href=https://github.com/azizk><img width="117" alt="azizk" src="https://avatars.githubusercontent.com/u/37282?v=4&s=117"></a></td><td><a href=https://github.com/azeemba><img width="117" alt="azeemba" src="https://avatars.githubusercontent.com/u/2160795?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/ayhankesicioglu><img width="117" alt="ayhankesicioglu" src="https://avatars.githubusercontent.com/u/36304312?v=4&s=117"></a></td><td><a href=https://github.com/atsawin><img width="117" alt="atsawin" src="https://avatars.githubusercontent.com/u/666663?v=4&s=117"></a></td><td><a href=https://github.com/ash-jc-allen><img width="117" alt="ash-jc-allen" src="https://avatars.githubusercontent.com/u/39652331?v=4&s=117"></a></td><td><a href=https://github.com/apuyou><img width="117" alt="apuyou" src="https://avatars.githubusercontent.com/u/520053?v=4&s=117"></a></td><td><a href=https://github.com/arthurdenner><img width="117" alt="arthurdenner" src="https://avatars.githubusercontent.com/u/13774309?v=4&s=117"></a></td><td><a href=https://github.com/Abourass><img width="117" alt="Abourass" src="https://avatars.githubusercontent.com/u/39917231?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/tyndria><img width="117" alt="tyndria" src="https://avatars.githubusercontent.com/u/17138916?v=4&s=117"></a></td><td><a href=https://github.com/anthony0030><img width="117" alt="anthony0030" src="https://avatars.githubusercontent.com/u/13033263?v=4&s=117"></a></td><td><a href=https://github.com/andychongyz><img width="117" alt="andychongyz" src="https://avatars.githubusercontent.com/u/12697240?v=4&s=117"></a></td><td><a href=https://github.com/andrii-bodnar><img width="117" alt="andrii-bodnar" src="https://avatars.githubusercontent.com/u/29282228?v=4&s=117"></a></td><td><a href=https://github.com/superandrew213><img width="117" alt="superandrew213" src="https://avatars.githubusercontent.com/u/13059204?v=4&s=117"></a></td><td><a href=https://github.com/radarhere><img width="117" alt="radarhere" src="https://avatars.githubusercontent.com/u/3112309?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/kergekacsa><img width="117" alt="kergekacsa" src="https://avatars.githubusercontent.com/u/16637320?v=4&s=117"></a></td><td><a href=https://github.com/firesharkstudios><img width="117" alt="firesharkstudios" src="https://avatars.githubusercontent.com/u/17069637?v=4&s=117"></a></td><td><a href=https://github.com/kaspermeinema><img width="117" alt="kaspermeinema" src="https://avatars.githubusercontent.com/u/73821331?v=4&s=117"></a></td><td><a href=https://github.com/tykarol><img width="117" alt="tykarol" src="https://avatars.githubusercontent.com/u/9386320?v=4&s=117"></a></td><td><a href=https://github.com/jvelten><img width="117" alt="jvelten" src="https://avatars.githubusercontent.com/u/48118068?v=4&s=117"></a></td><td><a href=https://github.com/mellow-fellow><img width="117" alt="mellow-fellow" src="https://avatars.githubusercontent.com/u/19280122?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/Cruaier><img width="117" alt="Cruaier" src="https://avatars.githubusercontent.com/u/5204940?v=4&s=117"></a></td><td><a href=https://github.com/sercraig><img width="117" alt="sercraig" src="https://avatars.githubusercontent.com/u/24261518?v=4&s=117"></a></td><td><a href=https://github.com/amitport><img width="117" alt="amitport" src="https://avatars.githubusercontent.com/u/1131991?v=4&s=117"></a></td><td><a href=https://github.com/tekacs><img width="117" alt="tekacs" src="https://avatars.githubusercontent.com/u/63247?v=4&s=117"></a></td><td><a href=https://github.com/Dogfalo><img width="117" alt="Dogfalo" src="https://avatars.githubusercontent.com/u/2775751?v=4&s=117"></a></td><td><a href=https://github.com/alirezahi><img width="117" alt="alirezahi" src="https://avatars.githubusercontent.com/u/16666064?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/aalepis><img width="117" alt="aalepis" src="https://avatars.githubusercontent.com/u/35684834?v=4&s=117"></a></td><td><a href=https://github.com/alexnj><img width="117" alt="alexnj" src="https://avatars.githubusercontent.com/u/683500?v=4&s=117"></a></td><td><a href=https://github.com/asmt3><img width="117" alt="asmt3" src="https://avatars.githubusercontent.com/u/1777709?v=4&s=117"></a></td><td><a href=https://github.com/ahmadissa><img width="117" alt="ahmadissa" src="https://avatars.githubusercontent.com/u/9936573?v=4&s=117"></a></td><td><a href=https://github.com/adritasharma><img width="117" alt="adritasharma" src="https://avatars.githubusercontent.com/u/29271635?v=4&s=117"></a></td><td><a href=https://github.com/Adrrei><img width="117" alt="Adrrei" src="https://avatars.githubusercontent.com/u/22191685?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/adityapatadia><img width="117" alt="adityapatadia" src="https://avatars.githubusercontent.com/u/1086617?v=4&s=117"></a></td><td><a href=https://github.com/adamvigneault><img width="117" alt="adamvigneault" src="https://avatars.githubusercontent.com/u/18236120?v=4&s=117"></a></td><td><a href=https://github.com/ajh-sr><img width="117" alt="ajh-sr" src="https://avatars.githubusercontent.com/u/71472057?v=4&s=117"></a></td><td><a href=https://github.com/adamdottv><img width="117" alt="adamdottv" src="https://avatars.githubusercontent.com/u/2363879?v=4&s=117"></a></td><td><a href=https://github.com/abannach><img width="117" alt="abannach" src="https://avatars.githubusercontent.com/u/43150303?v=4&s=117"></a></td><td><a href=https://github.com/superhawk610><img width="117" alt="superhawk610" src="https://avatars.githubusercontent.com/u/18172185?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/ajschmidt8><img width="117" alt="ajschmidt8" src="https://avatars.githubusercontent.com/u/7400326?v=4&s=117"></a></td><td><a href=https://github.com/wbaaron><img width="117" alt="wbaaron" src="https://avatars.githubusercontent.com/u/1048988?v=4&s=117"></a></td><td><a href=https://github.com/Quorafind><img width="117" alt="Quorafind" src="https://avatars.githubusercontent.com/u/13215013?v=4&s=117"></a></td><td><a href=https://github.com/bducharme><img width="117" alt="bducharme" src="https://avatars.githubusercontent.com/u/4173569?v=4&s=117"></a></td><td><a href=https://github.com/azizk><img width="117" alt="azizk" src="https://avatars.githubusercontent.com/u/37282?v=4&s=117"></a></td><td><a href=https://github.com/azeemba><img width="117" alt="azeemba" src="https://avatars.githubusercontent.com/u/2160795?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/ayhankesicioglu><img width="117" alt="ayhankesicioglu" src="https://avatars.githubusercontent.com/u/36304312?v=4&s=117"></a></td><td><a href=https://github.com/avneetmalhotra><img width="117" alt="avneetmalhotra" src="https://avatars.githubusercontent.com/u/10562207?v=4&s=117"></a></td><td><a href=https://github.com/atsawin><img width="117" alt="atsawin" src="https://avatars.githubusercontent.com/u/666663?v=4&s=117"></a></td><td><a href=https://github.com/ash-jc-allen><img width="117" alt="ash-jc-allen" src="https://avatars.githubusercontent.com/u/39652331?v=4&s=117"></a></td><td><a href=https://github.com/apuyou><img width="117" alt="apuyou" src="https://avatars.githubusercontent.com/u/520053?v=4&s=117"></a></td><td><a href=https://github.com/arthurdenner><img width="117" alt="arthurdenner" src="https://avatars.githubusercontent.com/u/13774309?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/Abourass><img width="117" alt="Abourass" src="https://avatars.githubusercontent.com/u/39917231?v=4&s=117"></a></td><td><a href=https://github.com/tyndria><img width="117" alt="tyndria" src="https://avatars.githubusercontent.com/u/17138916?v=4&s=117"></a></td><td><a href=https://github.com/anthony0030><img width="117" alt="anthony0030" src="https://avatars.githubusercontent.com/u/13033263?v=4&s=117"></a></td><td><a href=https://github.com/andychongyz><img width="117" alt="andychongyz" src="https://avatars.githubusercontent.com/u/12697240?v=4&s=117"></a></td><td><a href=https://github.com/andrii-bodnar><img width="117" alt="andrii-bodnar" src="https://avatars.githubusercontent.com/u/29282228?v=4&s=117"></a></td><td><a href=https://github.com/superandrew213><img width="117" alt="superandrew213" src="https://avatars.githubusercontent.com/u/13059204?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/radarhere><img width="117" alt="radarhere" src="https://avatars.githubusercontent.com/u/3112309?v=4&s=117"></a></td><td><a href=https://github.com/firesharkstudios><img width="117" alt="firesharkstudios" src="https://avatars.githubusercontent.com/u/17069637?v=4&s=117"></a></td><td><a href=https://github.com/kaspermeinema><img width="117" alt="kaspermeinema" src="https://avatars.githubusercontent.com/u/73821331?v=4&s=117"></a></td><td><a href=https://github.com/tykarol><img width="117" alt="tykarol" src="https://avatars.githubusercontent.com/u/9386320?v=4&s=117"></a></td><td><a href=https://github.com/jvelten><img width="117" alt="jvelten" src="https://avatars.githubusercontent.com/u/48118068?v=4&s=117"></a></td><td><a href=https://github.com/mellow-fellow><img width="117" alt="mellow-fellow" src="https://avatars.githubusercontent.com/u/19280122?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/jmontoyaa><img width="117" alt="jmontoyaa" src="https://avatars.githubusercontent.com/u/158935?v=4&s=117"></a></td><td><a href=https://github.com/jcalonso><img width="117" alt="jcalonso" src="https://avatars.githubusercontent.com/u/664474?v=4&s=117"></a></td><td><a href=https://github.com/jbelej><img width="117" alt="jbelej" src="https://avatars.githubusercontent.com/u/2229202?v=4&s=117"></a></td><td><a href=https://github.com/jszobody><img width="117" alt="jszobody" src="https://avatars.githubusercontent.com/u/203749?v=4&s=117"></a></td><td><a href=https://github.com/jorgeepc><img width="117" alt="jorgeepc" src="https://avatars.githubusercontent.com/u/3879892?v=4&s=117"></a></td><td><a href=https://github.com/jondewoo><img width="117" alt="jondewoo" src="https://avatars.githubusercontent.com/u/1108358?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/jmontoyaa><img width="117" alt="jmontoyaa" src="https://avatars.githubusercontent.com/u/158935?v=4&s=117"></a></td><td><a href=https://github.com/jcalonso><img width="117" alt="jcalonso" src="https://avatars.githubusercontent.com/u/664474?v=4&s=117"></a></td><td><a href=https://github.com/jbelej><img width="117" alt="jbelej" src="https://avatars.githubusercontent.com/u/2229202?v=4&s=117"></a></td><td><a href=https://github.com/jszobody><img width="117" alt="jszobody" src="https://avatars.githubusercontent.com/u/203749?v=4&s=117"></a></td><td><a href=https://github.com/jorgeepc><img width="117" alt="jorgeepc" src="https://avatars.githubusercontent.com/u/3879892?v=4&s=117"></a></td><td><a href=https://github.com/jondewoo><img width="117" alt="jondewoo" src="https://avatars.githubusercontent.com/u/1108358?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/jonathanarbely><img width="117" alt="jonathanarbely" src="https://avatars.githubusercontent.com/u/18177203?v=4&s=117"></a></td><td><a href=https://github.com/jsanchez034><img width="117" alt="jsanchez034" src="https://avatars.githubusercontent.com/u/761087?v=4&s=117"></a></td><td><a href=https://github.com/Jokcy><img width="117" alt="Jokcy" src="https://avatars.githubusercontent.com/u/2088642?v=4&s=117"></a></td><td><a href=https://github.com/chromacoma><img width="117" alt="chromacoma" src="https://avatars.githubusercontent.com/u/1535623?v=4&s=117"></a></td><td><a href=https://github.com/profsmallpine><img width="117" alt="profsmallpine" src="https://avatars.githubusercontent.com/u/7328006?v=4&s=117"></a></td><td><a href=https://github.com/IanVS><img width="117" alt="IanVS" src="https://avatars.githubusercontent.com/u/4616705?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/Lucklj521><img width="117" alt="Lucklj521" src="https://avatars.githubusercontent.com/u/93632042?v=4&s=117"></a></td><td><a href=https://github.com/lucax88x><img width="117" alt="lucax88x" src="https://avatars.githubusercontent.com/u/6294464?v=4&s=117"></a></td><td><a href=https://github.com/lucaperret><img width="117" alt="lucaperret" src="https://avatars.githubusercontent.com/u/1887122?v=4&s=117"></a></td><td><a href=https://github.com/ombr><img width="117" alt="ombr" src="https://avatars.githubusercontent.com/u/857339?v=4&s=117"></a></td><td><a href=https://github.com/louim><img width="117" alt="louim" src="https://avatars.githubusercontent.com/u/923718?v=4&s=117"></a></td><td><a href=https://github.com/dolphinigle><img width="117" alt="dolphinigle" src="https://avatars.githubusercontent.com/u/7020472?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/jonathanarbely><img width="117" alt="jonathanarbely" src="https://avatars.githubusercontent.com/u/18177203?v=4&s=117"></a></td><td><a href=https://github.com/jsanchez034><img width="117" alt="jsanchez034" src="https://avatars.githubusercontent.com/u/761087?v=4&s=117"></a></td><td><a href=https://github.com/Jokcy><img width="117" alt="Jokcy" src="https://avatars.githubusercontent.com/u/2088642?v=4&s=117"></a></td><td><a href=https://github.com/chromacoma><img width="117" alt="chromacoma" src="https://avatars.githubusercontent.com/u/1535623?v=4&s=117"></a></td><td><a href=https://github.com/profsmallpine><img width="117" alt="profsmallpine" src="https://avatars.githubusercontent.com/u/7328006?v=4&s=117"></a></td><td><a href=https://github.com/theJoeBiz><img width="117" alt="theJoeBiz" src="https://avatars.githubusercontent.com/u/189589?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/huydod><img width="117" alt="huydod" src="https://avatars.githubusercontent.com/u/37580530?v=4&s=117"></a></td><td><a href=https://github.com/lucax88x><img width="117" alt="lucax88x" src="https://avatars.githubusercontent.com/u/6294464?v=4&s=117"></a></td><td><a href=https://github.com/lucaperret><img width="117" alt="lucaperret" src="https://avatars.githubusercontent.com/u/1887122?v=4&s=117"></a></td><td><a href=https://github.com/ombr><img width="117" alt="ombr" src="https://avatars.githubusercontent.com/u/857339?v=4&s=117"></a></td><td><a href=https://github.com/louim><img width="117" alt="louim" src="https://avatars.githubusercontent.com/u/923718?v=4&s=117"></a></td><td><a href=https://github.com/dolphinigle><img width="117" alt="dolphinigle" src="https://avatars.githubusercontent.com/u/7020472?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/leomelzer><img width="117" alt="leomelzer" src="https://avatars.githubusercontent.com/u/23313?v=4&s=117"></a></td><td><a href=https://github.com/leods92><img width="117" alt="leods92" src="https://avatars.githubusercontent.com/u/879395?v=4&s=117"></a></td><td><a href=https://github.com/galli-leo><img width="117" alt="galli-leo" src="https://avatars.githubusercontent.com/u/5339762?v=4&s=117"></a></td><td><a href=https://github.com/dviry><img width="117" alt="dviry" src="https://avatars.githubusercontent.com/u/1230260?v=4&s=117"></a></td><td><a href=https://github.com/larowlan><img width="117" alt="larowlan" src="https://avatars.githubusercontent.com/u/555254?v=4&s=117"></a></td><td><a href=https://github.com/leaanthony><img width="117" alt="leaanthony" src="https://avatars.githubusercontent.com/u/1943904?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/leomelzer><img width="117" alt="leomelzer" src="https://avatars.githubusercontent.com/u/23313?v=4&s=117"></a></td><td><a href=https://github.com/leods92><img width="117" alt="leods92" src="https://avatars.githubusercontent.com/u/879395?v=4&s=117"></a></td><td><a href=https://github.com/galli-leo><img width="117" alt="galli-leo" src="https://avatars.githubusercontent.com/u/5339762?v=4&s=117"></a></td><td><a href=https://github.com/dviry><img width="117" alt="dviry" src="https://avatars.githubusercontent.com/u/1230260?v=4&s=117"></a></td><td><a href=https://github.com/larowlan><img width="117" alt="larowlan" src="https://avatars.githubusercontent.com/u/555254?v=4&s=117"></a></td><td><a href=https://github.com/leaanthony><img width="117" alt="leaanthony" src="https://avatars.githubusercontent.com/u/1943904?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/hoangbits><img width="117" alt="hoangbits" src="https://avatars.githubusercontent.com/u/7990827?v=4&s=117"></a></td><td><a href=https://github.com/labohkip81><img width="117" alt="labohkip81" src="https://avatars.githubusercontent.com/u/36964869?v=4&s=117"></a></td><td><a href=https://github.com/kyleparisi><img width="117" alt="kyleparisi" src="https://avatars.githubusercontent.com/u/1286753?v=4&s=117"></a></td><td><a href=https://github.com/elkebab><img width="117" alt="elkebab" src="https://avatars.githubusercontent.com/u/6313468?v=4&s=117"></a></td><td><a href=https://github.com/kidonng><img width="117" alt="kidonng" src="https://avatars.githubusercontent.com/u/44045911?v=4&s=117"></a></td><td><a href=https://github.com/kevin-west-10x><img width="117" alt="kevin-west-10x" src="https://avatars.githubusercontent.com/u/65194914?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/hoangbits><img width="117" alt="hoangbits" src="https://avatars.githubusercontent.com/u/7990827?v=4&s=117"></a></td><td><a href=https://github.com/labohkip81><img width="117" alt="labohkip81" src="https://avatars.githubusercontent.com/u/36964869?v=4&s=117"></a></td><td><a href=https://github.com/kyleparisi><img width="117" alt="kyleparisi" src="https://avatars.githubusercontent.com/u/1286753?v=4&s=117"></a></td><td><a href=https://github.com/elkebab><img width="117" alt="elkebab" src="https://avatars.githubusercontent.com/u/6313468?v=4&s=117"></a></td><td><a href=https://github.com/kidonng><img width="117" alt="kidonng" src="https://avatars.githubusercontent.com/u/44045911?v=4&s=117"></a></td><td><a href=https://github.com/kevin-west-10x><img width="117" alt="kevin-west-10x" src="https://avatars.githubusercontent.com/u/65194914?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/huydod><img width="117" alt="huydod" src="https://avatars.githubusercontent.com/u/37580530?v=4&s=117"></a></td><td><a href=https://github.com/HussainAlkhalifah><img width="117" alt="HussainAlkhalifah" src="https://avatars.githubusercontent.com/u/43642162?v=4&s=117"></a></td><td><a href=https://github.com/HughbertD><img width="117" alt="HughbertD" src="https://avatars.githubusercontent.com/u/1580021?v=4&s=117"></a></td><td><a href=https://github.com/hiromi2424><img width="117" alt="hiromi2424" src="https://avatars.githubusercontent.com/u/191297?v=4&s=117"></a></td><td><a href=https://github.com/giacomocerquone><img width="117" alt="giacomocerquone" src="https://avatars.githubusercontent.com/u/9303791?v=4&s=117"></a></td><td><a href=https://github.com/roenschg><img width="117" alt="roenschg" src="https://avatars.githubusercontent.com/u/9590236?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/kergekacsa><img width="117" alt="kergekacsa" src="https://avatars.githubusercontent.com/u/16637320?v=4&s=117"></a></td><td><a href=https://github.com/HussainAlkhalifah><img width="117" alt="HussainAlkhalifah" src="https://avatars.githubusercontent.com/u/43642162?v=4&s=117"></a></td><td><a href=https://github.com/HughbertD><img width="117" alt="HughbertD" src="https://avatars.githubusercontent.com/u/1580021?v=4&s=117"></a></td><td><a href=https://github.com/hiromi2424><img width="117" alt="hiromi2424" src="https://avatars.githubusercontent.com/u/191297?v=4&s=117"></a></td><td><a href=https://github.com/giacomocerquone><img width="117" alt="giacomocerquone" src="https://avatars.githubusercontent.com/u/9303791?v=4&s=117"></a></td><td><a href=https://github.com/roenschg><img width="117" alt="roenschg" src="https://avatars.githubusercontent.com/u/9590236?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/gjungb><img width="117" alt="gjungb" src="https://avatars.githubusercontent.com/u/3391068?v=4&s=117"></a></td><td><a href=https://github.com/geoffappleford><img width="117" alt="geoffappleford" src="https://avatars.githubusercontent.com/u/731678?v=4&s=117"></a></td><td><a href=https://github.com/gabiganam><img width="117" alt="gabiganam" src="https://avatars.githubusercontent.com/u/28859646?v=4&s=117"></a></td><td><a href=https://github.com/fuadscodes><img width="117" alt="fuadscodes" src="https://avatars.githubusercontent.com/u/60370584?v=4&s=117"></a></td><td><a href=https://github.com/dtrucs><img width="117" alt="dtrucs" src="https://avatars.githubusercontent.com/u/1926041?v=4&s=117"></a></td><td><a href=https://github.com/ferdiusa><img width="117" alt="ferdiusa" src="https://avatars.githubusercontent.com/u/1997982?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/gjungb><img width="117" alt="gjungb" src="https://avatars.githubusercontent.com/u/3391068?v=4&s=117"></a></td><td><a href=https://github.com/geoffappleford><img width="117" alt="geoffappleford" src="https://avatars.githubusercontent.com/u/731678?v=4&s=117"></a></td><td><a href=https://github.com/gabiganam><img width="117" alt="gabiganam" src="https://avatars.githubusercontent.com/u/28859646?v=4&s=117"></a></td><td><a href=https://github.com/fuadscodes><img width="117" alt="fuadscodes" src="https://avatars.githubusercontent.com/u/60370584?v=4&s=117"></a></td><td><a href=https://github.com/dtrucs><img width="117" alt="dtrucs" src="https://avatars.githubusercontent.com/u/1926041?v=4&s=117"></a></td><td><a href=https://github.com/ferdiusa><img width="117" alt="ferdiusa" src="https://avatars.githubusercontent.com/u/1997982?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/fgallinari><img width="117" alt="fgallinari" src="https://avatars.githubusercontent.com/u/6473638?v=4&s=117"></a></td><td><a href=https://github.com/Gkleinereva><img width="117" alt="Gkleinereva" src="https://avatars.githubusercontent.com/u/23621633?v=4&s=117"></a></td><td><a href=https://github.com/epexa><img width="117" alt="epexa" src="https://avatars.githubusercontent.com/u/2198826?v=4&s=117"></a></td><td><a href=https://github.com/EnricoSottile><img width="117" alt="EnricoSottile" src="https://avatars.githubusercontent.com/u/10349653?v=4&s=117"></a></td><td><a href=https://github.com/elliotdickison><img width="117" alt="elliotdickison" src="https://avatars.githubusercontent.com/u/2523678?v=4&s=117"></a></td><td><a href=https://github.com/theJoeBiz><img width="117" alt="theJoeBiz" src="https://avatars.githubusercontent.com/u/189589?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/fgallinari><img width="117" alt="fgallinari" src="https://avatars.githubusercontent.com/u/6473638?v=4&s=117"></a></td><td><a href=https://github.com/Gkleinereva><img width="117" alt="Gkleinereva" src="https://avatars.githubusercontent.com/u/23621633?v=4&s=117"></a></td><td><a href=https://github.com/epexa><img width="117" alt="epexa" src="https://avatars.githubusercontent.com/u/2198826?v=4&s=117"></a></td><td><a href=https://github.com/EnricoSottile><img width="117" alt="EnricoSottile" src="https://avatars.githubusercontent.com/u/10349653?v=4&s=117"></a></td><td><a href=https://github.com/elliotdickison><img width="117" alt="elliotdickison" src="https://avatars.githubusercontent.com/u/2523678?v=4&s=117"></a></td><td><a href=https://github.com/eliOcs><img width="117" alt="eliOcs" src="https://avatars.githubusercontent.com/u/1283954?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/Jmales><img width="117" alt="Jmales" src="https://avatars.githubusercontent.com/u/22914881?v=4&s=117"></a></td><td><a href=https://github.com/jessica-coursera><img width="117" alt="jessica-coursera" src="https://avatars.githubusercontent.com/u/35155465?v=4&s=117"></a></td><td><a href=https://github.com/vith><img width="117" alt="vith" src="https://avatars.githubusercontent.com/u/3265539?v=4&s=117"></a></td><td><a href=https://github.com/janwilts><img width="117" alt="janwilts" src="https://avatars.githubusercontent.com/u/16721581?v=4&s=117"></a></td><td><a href=https://github.com/janklimo><img width="117" alt="janklimo" src="https://avatars.githubusercontent.com/u/7811733?v=4&s=117"></a></td><td><a href=https://github.com/jamestiotio><img width="117" alt="jamestiotio" src="https://avatars.githubusercontent.com/u/18364745?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/Jmales><img width="117" alt="Jmales" src="https://avatars.githubusercontent.com/u/22914881?v=4&s=117"></a></td><td><a href=https://github.com/jessica-coursera><img width="117" alt="jessica-coursera" src="https://avatars.githubusercontent.com/u/35155465?v=4&s=117"></a></td><td><a href=https://github.com/vith><img width="117" alt="vith" src="https://avatars.githubusercontent.com/u/3265539?v=4&s=117"></a></td><td><a href=https://github.com/janwilts><img width="117" alt="janwilts" src="https://avatars.githubusercontent.com/u/16721581?v=4&s=117"></a></td><td><a href=https://github.com/janklimo><img width="117" alt="janklimo" src="https://avatars.githubusercontent.com/u/7811733?v=4&s=117"></a></td><td><a href=https://github.com/jamestiotio><img width="117" alt="jamestiotio" src="https://avatars.githubusercontent.com/u/18364745?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/jcjmcclean><img width="117" alt="jcjmcclean" src="https://avatars.githubusercontent.com/u/1822574?v=4&s=117"></a></td><td><a href=https://github.com/Jbithell><img width="117" alt="Jbithell" src="https://avatars.githubusercontent.com/u/8408967?v=4&s=117"></a></td><td><a href=https://github.com/JakubHaladej><img width="117" alt="JakubHaladej" src="https://avatars.githubusercontent.com/u/77832677?v=4&s=117"></a></td><td><a href=https://github.com/jakemcallister><img width="117" alt="jakemcallister" src="https://avatars.githubusercontent.com/u/1185699?v=4&s=117"></a></td><td><a href=https://github.com/gaejabong><img width="117" alt="gaejabong" src="https://avatars.githubusercontent.com/u/978944?v=4&s=117"></a></td><td><a href=https://github.com/JacobMGEvans><img width="117" alt="JacobMGEvans" src="https://avatars.githubusercontent.com/u/27247160?v=4&s=117"></a></td></tr>
 <tr><td><a href=https://github.com/jcjmcclean><img width="117" alt="jcjmcclean" src="https://avatars.githubusercontent.com/u/1822574?v=4&s=117"></a></td><td><a href=https://github.com/Jbithell><img width="117" alt="Jbithell" src="https://avatars.githubusercontent.com/u/8408967?v=4&s=117"></a></td><td><a href=https://github.com/JakubHaladej><img width="117" alt="JakubHaladej" src="https://avatars.githubusercontent.com/u/77832677?v=4&s=117"></a></td><td><a href=https://github.com/jakemcallister><img width="117" alt="jakemcallister" src="https://avatars.githubusercontent.com/u/1185699?v=4&s=117"></a></td><td><a href=https://github.com/gaejabong><img width="117" alt="gaejabong" src="https://avatars.githubusercontent.com/u/978944?v=4&s=117"></a></td><td><a href=https://github.com/JacobMGEvans><img width="117" alt="JacobMGEvans" src="https://avatars.githubusercontent.com/u/27247160?v=4&s=117"></a></td></tr>
-<tr><td><a href=https://github.com/mazoruss><img width="117" alt="mazoruss" src="https://avatars.githubusercontent.com/u/17625190?v=4&s=117"></a></td><td><a href=https://github.com/GreenJimmy><img width="117" alt="GreenJimmy" src="https://avatars.githubusercontent.com/u/39386?v=4&s=117"></a></td><td><a href=https://github.com/intenzive><img width="117" alt="intenzive" src="https://avatars.githubusercontent.com/u/11055931?v=4&s=117"></a></td><td><a href=https://github.com/NaxYo><img width="117" alt="NaxYo" src="https://avatars.githubusercontent.com/u/1963876?v=4&s=117"></a></td><td><a href=https://github.com/ishendyweb><img width="117" alt="ishendyweb" src="https://avatars.githubusercontent.com/u/10582418?v=4&s=117"></a></td></tr>
+<tr><td><a href=https://github.com/mazoruss><img width="117" alt="mazoruss" src="https://avatars.githubusercontent.com/u/17625190?v=4&s=117"></a></td><td><a href=https://github.com/GreenJimmy><img width="117" alt="GreenJimmy" src="https://avatars.githubusercontent.com/u/39386?v=4&s=117"></a></td><td><a href=https://github.com/intenzive><img width="117" alt="intenzive" src="https://avatars.githubusercontent.com/u/11055931?v=4&s=117"></a></td><td><a href=https://github.com/NaxYo><img width="117" alt="NaxYo" src="https://avatars.githubusercontent.com/u/1963876?v=4&s=117"></a></td><td><a href=https://github.com/ishendyweb><img width="117" alt="ishendyweb" src="https://avatars.githubusercontent.com/u/10582418?v=4&s=117"></a></td><td><a href=https://github.com/IanVS><img width="117" alt="IanVS" src="https://avatars.githubusercontent.com/u/4616705?v=4&s=117"></a></td></tr>
 <!--/contributors-->
 <!--/contributors-->
 </table>
 </table>
 
 

+ 2 - 2
docs/framework-integrations/react.mdx

@@ -117,7 +117,7 @@ function Component() {
 	// IMPORTANT: passing an initializer function to prevent Uppy from being reinstantiated on every render.
 	// IMPORTANT: passing an initializer function to prevent Uppy from being reinstantiated on every render.
 	const [uppy] = useState(() => new Uppy().use(Webcam));
 	const [uppy] = useState(() => new Uppy().use(Webcam));
 
 
-	return <Dashboard uppy={uppy} plugins={['Webcam']} />;
+	return <Dashboard uppy={uppy} />;
 }
 }
 ```
 ```
 
 
@@ -175,7 +175,7 @@ function Component(props) {
 		uppy.getPlugin('Webcam').setOptions({ modes: props.webcamModes });
 		uppy.getPlugin('Webcam').setOptions({ modes: props.webcamModes });
 	}, [props.webcamModes]);
 	}, [props.webcamModes]);
 
 
-	return <Dashboard uppy={uppy} plugins={['Webcam']} />;
+	return <Dashboard uppy={uppy} />;
 }
 }
 ```
 ```
 
 

+ 2 - 2
docs/framework-integrations/svelte.mdx

@@ -50,7 +50,7 @@ instance can be passed into components as an `uppy` prop. Due to the way Svelte
 handles reactivity, you can initialize Uppy the same way you would with vanilla
 handles reactivity, you can initialize Uppy the same way you would with vanilla
 JavaScript.
 JavaScript.
 
 
-```html
+```svelte
 <script>
 <script>
 	import { Dashboard } from '@uppy/svelte';
 	import { Dashboard } from '@uppy/svelte';
 	import Uppy from '@uppy/core';
 	import Uppy from '@uppy/core';
@@ -64,7 +64,7 @@ JavaScript.
 	const uppy = new Uppy().use(Webcam);
 	const uppy = new Uppy().use(Webcam);
 </script>
 </script>
 
 
-<main><Dashboard uppy={uppy} plugins={["Webcam"]} /></main>
+<main><Dashboard uppy={uppy} /></main>
 ```
 ```
 
 
 [svelte]: https://svelte.dev
 [svelte]: https://svelte.dev

+ 1 - 1
docs/framework-integrations/vue.mdx

@@ -66,7 +66,7 @@ JavaScript.
 </script>
 </script>
 
 
 <template>
 <template>
-	<Dashboard :uppy="uppy" :plugins="['Webcam']" />
+	<Dashboard :uppy="uppy" />
 </template>
 </template>
 ```
 ```
 
 

+ 2 - 4
docs/guides/migration-guides.md

@@ -60,16 +60,14 @@ new Uppy()
 		companionAllowedHosts: COMPANION_ALLOWED_HOSTS,
 		companionAllowedHosts: COMPANION_ALLOWED_HOSTS,
 	})
 	})
 	.use(Webcam, {
 	.use(Webcam, {
-		target: Dashboard,
 		showVideoSourceDropdown: true,
 		showVideoSourceDropdown: true,
 		showRecordingLength: true,
 		showRecordingLength: true,
 	})
 	})
 	.use(Audio, {
 	.use(Audio, {
-		target: Dashboard,
 		showRecordingLength: true,
 		showRecordingLength: true,
 	})
 	})
-	.use(ScreenCapture, { target: Dashboard })
-	.use(ImageEditor, { target: Dashboard })
+	.use(ScreenCapture)
+	.use(ImageEditor)
 	.use(Transloadit, {
 	.use(Transloadit, {
 		service: 'https://api2.transloadit.com',
 		service: 'https://api2.transloadit.com',
 		async getAssemblyOptions(file) {
 		async getAssemblyOptions(file) {

+ 2 - 1
docs/presets/remote-sources.mdx

@@ -135,7 +135,8 @@ default: `same-origin`).
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string`, `Element`, `Function`, or `UIPlugin`, default: `Dashboard`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 [`request.credentials` value]:
 [`request.credentials` value]:
 	https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials
 	https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials

+ 5 - 6
docs/sources/audio.mdx

@@ -50,7 +50,7 @@ yarn add @uppy/audio
         import { Uppy, Dashboard, Audio } from "{{UPPY_JS_URL}}"
         import { Uppy, Dashboard, Audio } from "{{UPPY_JS_URL}}"
         const uppy = new Uppy()
         const uppy = new Uppy()
         uppy.use(Dashboard, { inline: true, target: 'body' })
         uppy.use(Dashboard, { inline: true, target: 'body' })
-        uppy.use(Audio, { target: Uppy.Dashboard })
+        uppy.use(Audio)
       `}
       `}
     </UppyCdnExample>
     </UppyCdnExample>
   </TabItem>
   </TabItem>
@@ -67,9 +67,7 @@ import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/audio/dist/style.min.css';
 import '@uppy/audio/dist/style.min.css';
 
 
-new Uppy()
-	.use(Dashboard, { inline: true, target: 'body' })
-	.use(Audio, { target: Dashboard });
+new Uppy().use(Dashboard, { inline: true, target: 'body' }).use(Audio);
 ```
 ```
 
 
 ### API
 ### API
@@ -87,8 +85,9 @@ Configures the title / name shown in the UI, for instance, on Dashboard tabs
 
 
 #### `target`
 #### `target`
 
 
-DOM element, CSS selector, or plugin to place the audio into (`string` or
-`Element`, default: `null`).
+DOM element, CSS selector, or plugin to place the drag and drop area into
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `showAudioSourceDropdown`
 #### `showAudioSourceDropdown`
 
 

+ 5 - 5
docs/sources/companion-plugins/box.mdx

@@ -76,10 +76,9 @@ import Box from '@uppy/box';
 import '@uppy/core/dist/style.min.css';
 import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 
 
-new Uppy().use(Dashboard, { inline: true, target: '#dashboard' }).use(Box, {
-	target: Dashboard,
-	companionUrl: 'https://your-companion.com',
-});
+new Uppy()
+	.use(Dashboard, { inline: true, target: '#dashboard' })
+	.use(Box, { companionUrl: 'https://your-companion.com' });
 ```
 ```
 
 
 ### Use in Companion
 ### Use in Companion
@@ -150,7 +149,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string` or `Element`, default: `null`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `companionUrl`
 #### `companionUrl`
 
 

+ 5 - 5
docs/sources/companion-plugins/dropbox.mdx

@@ -76,10 +76,9 @@ import Dropbox from '@uppy/dropbox';
 import '@uppy/core/dist/style.min.css';
 import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 
 
-new Uppy().use(Dashboard, { inline: true, target: '#dashboard' }).use(Dropbox, {
-	target: Dashboard,
-	companionUrl: 'https://your-companion.com',
-});
+new Uppy()
+	.use(Dashboard, { inline: true, target: '#dashboard' })
+	.use(Dropbox, { companionUrl: 'https://your-companion.com' });
 ```
 ```
 
 
 ### Use in Companion
 ### Use in Companion
@@ -149,7 +148,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string` or `Element`, default: `null`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `companionUrl`
 #### `companionUrl`
 
 

+ 3 - 5
docs/sources/companion-plugins/facebook.mdx

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 
 new Uppy()
 new Uppy()
 	.use(Dashboard, { inline: true, target: '#dashboard' })
 	.use(Dashboard, { inline: true, target: '#dashboard' })
-	.use(Facebook, {
-		target: Dashboard,
-		companionUrl: 'https://your-companion.com',
-	});
+	.use(Facebook, { companionUrl: 'https://your-companion.com' });
 ```
 ```
 
 
 ### Use in Companion
 ### Use in Companion
@@ -148,7 +145,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string` or `Element`, default: `null`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `companionUrl`
 #### `companionUrl`
 
 

+ 3 - 5
docs/sources/companion-plugins/google-drive.mdx

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 
 new Uppy()
 new Uppy()
 	.use(Dashboard, { inline: true, target: '#dashboard' })
 	.use(Dashboard, { inline: true, target: '#dashboard' })
-	.use(GoogleDrive, {
-		target: Dashboard,
-		companionUrl: 'https://your-companion.com',
-	});
+	.use(GoogleDrive, { companionUrl: 'https://your-companion.com' });
 ```
 ```
 
 
 ### Use in Companion
 ### Use in Companion
@@ -152,7 +149,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string` or `Element`, default: `null`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `companionUrl`
 #### `companionUrl`
 
 

+ 3 - 5
docs/sources/companion-plugins/instagram.mdx

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 
 new Uppy()
 new Uppy()
 	.use(Dashboard, { inline: true, target: '#dashboard' })
 	.use(Dashboard, { inline: true, target: '#dashboard' })
-	.use(Instagram, {
-		target: Dashboard,
-		companionUrl: 'https://your-companion.com',
-	});
+	.use(Instagram, { companionUrl: 'https://your-companion.com' });
 ```
 ```
 
 
 ### Use in Companion
 ### Use in Companion
@@ -142,7 +139,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string` or `Element`, default: `null`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `companionUrl`
 #### `companionUrl`
 
 

+ 3 - 5
docs/sources/companion-plugins/onedrive.mdx

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 
 new Uppy()
 new Uppy()
 	.use(Dashboard, { inline: true, target: '#dashboard' })
 	.use(Dashboard, { inline: true, target: '#dashboard' })
-	.use(OneDrive, {
-		target: Dashboard,
-		companionUrl: 'https://your-companion.com',
-	});
+	.use(OneDrive, { companionUrl: 'https://your-companion.com' });
 ```
 ```
 
 
 ### Use in Companion
 ### Use in Companion
@@ -142,7 +139,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string` or `Element`, default: `null`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `companionUrl`
 #### `companionUrl`
 
 

+ 3 - 5
docs/sources/companion-plugins/unsplash.mdx

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 
 new Uppy()
 new Uppy()
 	.use(Dashboard, { inline: true, target: '#dashboard' })
 	.use(Dashboard, { inline: true, target: '#dashboard' })
-	.use(Unsplash, {
-		target: Dashboard,
-		companionUrl: 'https://your-companion.com',
-	});
+	.use(Unsplash, { companionUrl: 'https://your-companion.com' });
 ```
 ```
 
 
 ### Use in Companion
 ### Use in Companion
@@ -127,7 +124,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string` or `Element`, default: `null`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `companionUrl`
 #### `companionUrl`
 
 

+ 5 - 5
docs/sources/companion-plugins/url.mdx

@@ -83,10 +83,9 @@ import Url from '@uppy/url';
 import '@uppy/core/dist/style.min.css';
 import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 
 
-new Uppy().use(Dashboard, { inline: true, target: '#dashboard' }).use(Url, {
-	target: Dashboard,
-	companionUrl: 'https://your-companion.com',
-});
+new Uppy()
+	.use(Dashboard, { inline: true, target: '#dashboard' })
+	.use(Url, { companionUrl: 'https://your-companion.com' });
 ```
 ```
 
 
 ### Use in Companion
 ### Use in Companion
@@ -110,7 +109,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string` or `Element`, default: `null`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `companionUrl`
 #### `companionUrl`
 
 

+ 5 - 5
docs/sources/companion-plugins/zoom.mdx

@@ -76,10 +76,9 @@ import Zoom from '@uppy/zoom';
 import '@uppy/core/dist/style.min.css';
 import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 
 
-new Uppy().use(Dashboard, { inline: true, target: '#dashboard' }).use(Zoom, {
-	target: Dashboard,
-	companionUrl: 'https://your-companion.com',
-});
+new Uppy()
+	.use(Dashboard, { inline: true, target: '#dashboard' })
+	.use(Zoom, { companionUrl: 'https://your-companion.com' });
 ```
 ```
 
 
 ### Use in Companion
 ### Use in Companion
@@ -121,7 +120,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 #### `target`
 
 
 DOM element, CSS selector, or plugin to place the drag and drop area into
 DOM element, CSS selector, or plugin to place the drag and drop area into
-(`string` or `Element`, default: `null`).
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `companionUrl`
 #### `companionUrl`
 
 

+ 5 - 6
docs/sources/screen-capture.mdx

@@ -62,7 +62,7 @@ yarn add @uppy/screen-capture
         import { Uppy, Dashboard, ScreenCapture } from "{{UPPY_JS_URL}}"
         import { Uppy, Dashboard, ScreenCapture } from "{{UPPY_JS_URL}}"
         const uppy = new Uppy()
         const uppy = new Uppy()
         uppy.use(Dashboard, { inline: true, target: 'body' })
         uppy.use(Dashboard, { inline: true, target: 'body' })
-        uppy.use(ScreenCapture, { target: Uppy.Dashboard })
+        uppy.use(ScreenCapture)
       `}
       `}
     </UppyCdnExample>
     </UppyCdnExample>
   </TabItem>
   </TabItem>
@@ -79,9 +79,7 @@ import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/screen-capture/dist/style.min.css';
 import '@uppy/screen-capture/dist/style.min.css';
 
 
-new Uppy()
-	.use(Dashboard, { inline: true, target: 'body' })
-	.use(ScreenCapture, { target: Dashboard });
+new Uppy().use(Dashboard, { inline: true, target: 'body' }).use(ScreenCapture);
 ```
 ```
 
 
 ### API
 ### API
@@ -99,8 +97,9 @@ Configures the title / name shown in the UI, for instance, on Dashboard tabs
 
 
 #### `target`
 #### `target`
 
 
-DOM element, CSS selector, or plugin to place the screen capture into (`string`
-or `Element`, default: `null`).
+DOM element, CSS selector, or plugin to place the drag and drop area into
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `displayMediaConstraints`
 #### `displayMediaConstraints`
 
 

+ 5 - 6
docs/sources/webcam.mdx

@@ -51,7 +51,7 @@ yarn add @uppy/webcam
         import { Uppy, Dashboard, Webcam } from "{{UPPY_JS_URL}}"
         import { Uppy, Dashboard, Webcam } from "{{UPPY_JS_URL}}"
         const uppy = new Uppy()
         const uppy = new Uppy()
         uppy.use(Dashboard, { inline: true, target: 'body' })
         uppy.use(Dashboard, { inline: true, target: 'body' })
-        uppy.use(Webcam, { target: Uppy.Dashboard })
+        uppy.use(Webcam)
       `}
       `}
     </UppyCdnExample>
     </UppyCdnExample>
   </TabItem>
   </TabItem>
@@ -77,9 +77,7 @@ import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/dashboard/dist/style.min.css';
 import '@uppy/webcam/dist/style.min.css';
 import '@uppy/webcam/dist/style.min.css';
 
 
-new Uppy()
-	.use(Dashboard, { inline: true, target: 'body' })
-	.use(Webcam, { target: Dashboard });
+new Uppy().use(Dashboard, { inline: true, target: 'body' }).use(Webcam);
 ```
 ```
 
 
 ## API
 ## API
@@ -92,8 +90,9 @@ A unique identifier for this plugin (`string`, default: `'Webcam'`).
 
 
 #### `target`
 #### `target`
 
 
-DOM element, CSS selector, or plugin to place the webcam into (`string` or
-`Element`, default: `null`).
+DOM element, CSS selector, or plugin to place the drag and drop area into
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `countdown`
 #### `countdown`
 
 

+ 2 - 2
docs/user-interfaces/elements/image-editor.mdx

@@ -48,7 +48,7 @@ yarn add @uppy/core @uppy/dashboard @uppy/image-editor
         import { Uppy, Dashboard, ImageEditor } from "{{UPPY_JS_URL}}"
         import { Uppy, Dashboard, ImageEditor } from "{{UPPY_JS_URL}}"
         const uppy = new Uppy()
         const uppy = new Uppy()
         uppy.use(Dashboard, { target: '#uppy', inline: true })
         uppy.use(Dashboard, { target: '#uppy', inline: true })
-        uppy.use(ImageEditor, { target: Uppy.Dashboard })
+        uppy.use(ImageEditor)
       `}
       `}
     </UppyCdnExample>
     </UppyCdnExample>
   </TabItem>
   </TabItem>
@@ -67,7 +67,7 @@ import '@uppy/image-editor/dist/style.min.css';
 
 
 new Uppy()
 new Uppy()
 	.use(Dashboard, { inline: true, target: '#dashboard' })
 	.use(Dashboard, { inline: true, target: '#dashboard' })
-	.use(ImageEditor, { target: Dashboard });
+	.use(ImageEditor);
 ```
 ```
 
 
 ## API
 ## API

+ 3 - 2
docs/user-interfaces/elements/status-bar.mdx

@@ -82,8 +82,9 @@ Use this if you need to add several StatusBar instances.
 
 
 #### `target`
 #### `target`
 
 
-DOM element, CSS selector, or plugin to mount the Status Bar into (`Element`,
-`string`, `UIPlugin`, default: `'body'`).
+DOM element, CSS selector, or plugin to place the drag and drop area into
+(`string`, `Element`, `Function`, or `UIPlugin`, default:
+[`Dashboard`](/docs/dashboard)).
 
 
 #### `hideAfterFinish`
 #### `hideAfterFinish`
 
 

+ 2 - 2
examples/aws-nodejs/public/drag.html

@@ -4,7 +4,7 @@
     <meta charset="utf-8" />
     <meta charset="utf-8" />
     <title>Uppy</title>
     <title>Uppy</title>
     <link
     <link
-      href="https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.css"
+      href="https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.css"
       rel="stylesheet"
       rel="stylesheet"
     />
     />
   </head>
   </head>
@@ -22,7 +22,7 @@
           DragDrop,
           DragDrop,
           ProgressBar,
           ProgressBar,
           AwsS3,
           AwsS3,
-        } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.mjs'
+        } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.mjs'
 
 
         // Function for displaying uploaded files
         // Function for displaying uploaded files
         const onUploadSuccess = (elForUploadedFiles) => (file, response) => {
         const onUploadSuccess = (elForUploadedFiles) => (file, response) => {

+ 2 - 2
examples/aws-nodejs/public/index.html

@@ -4,7 +4,7 @@
     <meta charset="utf-8" />
     <meta charset="utf-8" />
     <title>Uppy – AWS upload example</title>
     <title>Uppy – AWS upload example</title>
     <link
     <link
-      href="https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.css"
+      href="https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.css"
       rel="stylesheet"
       rel="stylesheet"
     />
     />
   </head>
   </head>
@@ -16,7 +16,7 @@
         Uppy,
         Uppy,
         Dashboard,
         Dashboard,
         AwsS3,
         AwsS3,
-      } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.mjs'
+      } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.mjs'
       /**
       /**
        * This generator transforms a deep object into URL-encodable pairs
        * This generator transforms a deep object into URL-encodable pairs
        * to work with `URLSearchParams` on the client and `body-parser` on the server.
        * to work with `URLSearchParams` on the client and `body-parser` on the server.

+ 2 - 2
examples/cdn-example/index.html

@@ -5,7 +5,7 @@
     <meta charset="UTF-8" />
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
     <link
     <link
-      href="https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.css"
+      href="https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.css"
       rel="stylesheet"
       rel="stylesheet"
     />
     />
   </head>
   </head>
@@ -19,7 +19,7 @@
         Dashboard,
         Dashboard,
         Webcam,
         Webcam,
         Tus,
         Tus,
-      } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.mjs'
+      } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.mjs'
 
 
       const uppy = new Uppy({ debug: true, autoProceed: false })
       const uppy = new Uppy({ debug: true, autoProceed: false })
         .use(Dashboard, { trigger: '#uppyModalOpener' })
         .use(Dashboard, { trigger: '#uppyModalOpener' })

+ 2 - 2
examples/uppy-with-companion/client/index.html

@@ -5,7 +5,7 @@
     <meta charset="UTF-8" />
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
     <link
     <link
-      href="https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.css"
+      href="https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.css"
       rel="stylesheet"
       rel="stylesheet"
     />
     />
   </head>
   </head>
@@ -19,7 +19,7 @@
         Instagram,
         Instagram,
         GoogleDrive,
         GoogleDrive,
         Tus,
         Tus,
-      } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.6/uppy.min.mjs'
+      } from 'https://releases.transloadit.com/uppy/v4.0.0-beta.7/uppy.min.mjs'
 
 
       const uppy = new Uppy({ debug: true, autoProceed: false })
       const uppy = new Uppy({ debug: true, autoProceed: false })
         .use(Dashboard, { trigger: '#uppyModalOpener' })
         .use(Dashboard, { trigger: '#uppyModalOpener' })

+ 7 - 0
packages/@uppy/companion-client/CHANGELOG.md

@@ -1,5 +1,12 @@
 # @uppy/companion-client
 # @uppy/companion-client
 
 
+## 4.0.0-beta.6
+
+Released: 2024-05-14
+Included in: Uppy v4.0.0-beta.7
+
+- @uppy/companion-client,@uppy/dropbox,@uppy/screen-capture,@uppy/unsplash,@uppy/url,@uppy/webcam: Use `title` consistently from locales (Merlijn Vos / #5134)
+
 ## 4.0.0-beta.1
 ## 4.0.0-beta.1
 
 
 Released: 2024-03-28
 Released: 2024-03-28

+ 1 - 1
packages/@uppy/companion-client/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/companion-client",
   "name": "@uppy/companion-client",
   "description": "Client library for communication with Companion. Intended for use in Uppy plugins.",
   "description": "Client library for communication with Companion. Intended for use in Uppy plugins.",
-  "version": "4.0.0-beta.5",
+  "version": "4.0.0-beta.6",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "type": "module",
   "type": "module",

+ 7 - 0
packages/@uppy/companion/CHANGELOG.md

@@ -1,5 +1,12 @@
 # @uppy/companion
 # @uppy/companion
 
 
+## 5.0.0-beta.6
+
+Released: 2024-05-14
+Included in: Uppy v4.0.0-beta.7
+
+- @uppy/companion: switch from `node-redis` to `ioredis` (Dominik Schmidt / #4623)
+
 ## 5.0.0-beta.5
 ## 5.0.0-beta.5
 
 
 Released: 2024-05-03
 Released: 2024-05-03

+ 1 - 1
packages/@uppy/companion/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@uppy/companion",
   "name": "@uppy/companion",
-  "version": "5.0.0-beta.5",
+  "version": "5.0.0-beta.6",
   "description": "OAuth helper and remote fetcher for Uppy's (https://uppy.io) extensible file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Dropbox and Google Drive, S3 and more :dog:",
   "description": "OAuth helper and remote fetcher for Uppy's (https://uppy.io) extensible file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Dropbox and Google Drive, S3 and more :dog:",
   "main": "lib/companion.js",
   "main": "lib/companion.js",
   "types": "lib/companion.d.ts",
   "types": "lib/companion.d.ts",

+ 2 - 2
packages/@uppy/compressor/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/compressor",
   "name": "@uppy/compressor",
   "description": "Uppy plugin that compresses images before upload, saving up to 60% in size",
   "description": "Uppy plugin that compresses images before upload, saving up to 60% in size",
-  "version": "2.0.0-beta.6",
+  "version": "2.0.0-beta.7",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
   "style": "dist/style.min.css",
@@ -22,7 +22,7 @@
     "url": "git+https://github.com/transloadit/uppy.git"
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@transloadit/prettier-bytes": "^0.3.0",
+    "@transloadit/prettier-bytes": "^0.3.4",
     "@uppy/utils": "workspace:^",
     "@uppy/utils": "workspace:^",
     "compressorjs": "^1.2.1",
     "compressorjs": "^1.2.1",
     "preact": "^10.5.13",
     "preact": "^10.5.13",

+ 14 - 0
packages/@uppy/core/CHANGELOG.md

@@ -1,5 +1,12 @@
 # @uppy/core
 # @uppy/core
 
 
+## 4.0.0-beta.7
+
+Released: 2024-05-14
+Included in: Uppy v4.0.0-beta.7
+
+- @uppy/core: close->destroy, clearUploadedFiles->clear (Merlijn Vos / #5154)
+
 ## 4.0.0-beta.5
 ## 4.0.0-beta.5
 
 
 Released: 2024-05-03
 Released: 2024-05-03
@@ -42,6 +49,13 @@ Included in: Uppy v4.0.0-beta.1
 - @uppy/core: various type fixes (Antoine du Hamel / #4995)
 - @uppy/core: various type fixes (Antoine du Hamel / #4995)
 - @uppy/core,@uppy/provider-views: Fix breadcrumbs (Evgenia Karunus / #4986)
 - @uppy/core,@uppy/provider-views: Fix breadcrumbs (Evgenia Karunus / #4986)
 
 
+## 3.11.3
+
+Released: 2024-05-14
+Included in: Uppy v3.25.3
+
+- @uppy/core: make getObjectOfFilesPerState more efficient (Merlijn Vos / #5155)
+
 ## 3.11.2
 ## 3.11.2
 
 
 Released: 2024-05-07
 Released: 2024-05-07

+ 2 - 2
packages/@uppy/core/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/core",
   "name": "@uppy/core",
   "description": "Core module for the extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:",
   "description": "Core module for the extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:",
-  "version": "4.0.0-beta.6",
+  "version": "4.0.0-beta.7",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
   "style": "dist/style.min.css",
@@ -23,7 +23,7 @@
     "url": "git+https://github.com/transloadit/uppy.git"
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@transloadit/prettier-bytes": "^0.3.0",
+    "@transloadit/prettier-bytes": "^0.3.4",
     "@uppy/store-default": "workspace:^",
     "@uppy/store-default": "workspace:^",
     "@uppy/utils": "workspace:^",
     "@uppy/utils": "workspace:^",
     "lodash": "^4.17.21",
     "lodash": "^4.17.21",

+ 46 - 23
packages/@uppy/core/src/Uppy.ts

@@ -677,7 +677,6 @@ export class Uppy<M extends Meta, B extends Body> {
     return ids.map((id) => this.getFile(id))
     return ids.map((id) => this.getFile(id))
   }
   }
 
 
-  // TODO: remove or refactor this method. It's very inefficient
   getObjectOfFilesPerState(): {
   getObjectOfFilesPerState(): {
     newFiles: UppyFile<M, B>[]
     newFiles: UppyFile<M, B>[]
     startedFiles: UppyFile<M, B>[]
     startedFiles: UppyFile<M, B>[]
@@ -697,28 +696,52 @@ export class Uppy<M extends Meta, B extends Body> {
   } {
   } {
     const { files: filesObject, totalProgress, error } = this.getState()
     const { files: filesObject, totalProgress, error } = this.getState()
     const files = Object.values(filesObject)
     const files = Object.values(filesObject)
-    const inProgressFiles = files.filter(
-      ({ progress }) => !progress.uploadComplete && progress.uploadStarted,
-    )
-    const newFiles = files.filter((file) => !file.progress.uploadStarted)
-    const startedFiles = files.filter(
-      (file) =>
-        file.progress.uploadStarted ||
-        file.progress.preprocess ||
-        file.progress.postprocess,
-    )
-    const uploadStartedFiles = files.filter(
-      (file) => file.progress.uploadStarted,
-    )
-    const pausedFiles = files.filter((file) => file.isPaused)
-    const completeFiles = files.filter((file) => file.progress.uploadComplete)
-    const erroredFiles = files.filter((file) => file.error)
-    const inProgressNotPausedFiles = inProgressFiles.filter(
-      (file) => !file.isPaused,
-    )
-    const processingFiles = files.filter(
-      (file) => file.progress.preprocess || file.progress.postprocess,
-    )
+
+    const inProgressFiles: UppyFile<M, B>[] = []
+    const newFiles: UppyFile<M, B>[] = []
+    const startedFiles: UppyFile<M, B>[] = []
+    const uploadStartedFiles: UppyFile<M, B>[] = []
+    const pausedFiles: UppyFile<M, B>[] = []
+    const completeFiles: UppyFile<M, B>[] = []
+    const erroredFiles: UppyFile<M, B>[] = []
+    const inProgressNotPausedFiles: UppyFile<M, B>[] = []
+    const processingFiles: UppyFile<M, B>[] = []
+
+    for (const file of files) {
+      const { progress } = file
+
+      if (!progress.uploadComplete && progress.uploadStarted) {
+        inProgressFiles.push(file)
+        if (!file.isPaused) {
+          inProgressNotPausedFiles.push(file)
+        }
+      }
+      if (!progress.uploadStarted) {
+        newFiles.push(file)
+      }
+      if (
+        progress.uploadStarted ||
+        progress.preprocess ||
+        progress.postprocess
+      ) {
+        startedFiles.push(file)
+      }
+      if (progress.uploadStarted) {
+        uploadStartedFiles.push(file)
+      }
+      if (file.isPaused) {
+        pausedFiles.push(file)
+      }
+      if (progress.uploadComplete) {
+        completeFiles.push(file)
+      }
+      if (file.error) {
+        erroredFiles.push(file)
+      }
+      if (progress.preprocess || progress.postprocess) {
+        processingFiles.push(file)
+      }
+    }
 
 
     return {
     return {
       newFiles,
       newFiles,

+ 2 - 2
packages/@uppy/dashboard/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/dashboard",
   "name": "@uppy/dashboard",
   "description": "Universal UI plugin for Uppy.",
   "description": "Universal UI plugin for Uppy.",
-  "version": "4.0.0-beta.6",
+  "version": "4.0.0-beta.7",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
   "style": "dist/style.min.css",
@@ -22,7 +22,7 @@
     "url": "git+https://github.com/transloadit/uppy.git"
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@transloadit/prettier-bytes": "^0.3.0",
+    "@transloadit/prettier-bytes": "^0.3.4",
     "@uppy/informer": "workspace:^",
     "@uppy/informer": "workspace:^",
     "@uppy/provider-views": "workspace:^",
     "@uppy/provider-views": "workspace:^",
     "@uppy/status-bar": "workspace:^",
     "@uppy/status-bar": "workspace:^",

+ 7 - 0
packages/@uppy/dropbox/CHANGELOG.md

@@ -1,5 +1,12 @@
 # @uppy/dropbox
 # @uppy/dropbox
 
 
+## 4.0.0-beta.6
+
+Released: 2024-05-14
+Included in: Uppy v4.0.0-beta.7
+
+- @uppy/companion-client,@uppy/dropbox,@uppy/screen-capture,@uppy/unsplash,@uppy/url,@uppy/webcam: Use `title` consistently from locales (Merlijn Vos / #5134)
+
 ## 4.0.0-beta.1
 ## 4.0.0-beta.1
 
 
 Released: 2024-03-28
 Released: 2024-03-28

+ 1 - 1
packages/@uppy/dropbox/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/dropbox",
   "name": "@uppy/dropbox",
   "description": "Import files from Dropbox, into Uppy.",
   "description": "Import files from Dropbox, into Uppy.",
-  "version": "4.0.0-beta.5",
+  "version": "4.0.0-beta.6",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "type": "module",
   "type": "module",

+ 8 - 0
packages/@uppy/image-editor/CHANGELOG.md

@@ -7,6 +7,14 @@ Included in: Uppy v4.0.0-beta.4
 
 
 - @uppy/image-editor: fix label definitions (Antoine du Hamel / #5111)
 - @uppy/image-editor: fix label definitions (Antoine du Hamel / #5111)
 
 
+## 2.4.6
+
+Released: 2024-05-14
+Included in: Uppy v3.25.3
+
+- @uppy/image-editor: fix tooltips (Avneet Singh Malhotra / #5156)
+- @uppy/image-editor: Remove `target` option from examples and document consistently (Merlijn Vos / #5146)
+
 ## 2.4.5
 ## 2.4.5
 
 
 Released: 2024-04-29
 Released: 2024-04-29

+ 1 - 4
packages/@uppy/image-editor/README.md

@@ -27,10 +27,7 @@ import ImageEditor from '@uppy/image-editor'
 
 
 const uppy = new Uppy()
 const uppy = new Uppy()
 uppy.use(Dashboard)
 uppy.use(Dashboard)
-uppy.use(ImageEditor, {
-  target: Dashboard,
-  quality: 0.7,
-})
+uppy.use(ImageEditor, { quality: 0.7 })
 ```
 ```
 
 
 ## Installation
 ## Installation

+ 1 - 1
packages/@uppy/image-editor/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/image-editor",
   "name": "@uppy/image-editor",
   "description": "Image editor and cropping UI",
   "description": "Image editor and cropping UI",
-  "version": "3.0.0-beta.3",
+  "version": "3.0.0-beta.4",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
   "style": "dist/style.min.css",

+ 153 - 153
packages/@uppy/image-editor/src/Editor.tsx

@@ -170,31 +170,31 @@ export default class Editor<M extends Meta, B extends Body> extends Component<
     const { i18n, opts } = this.props
     const { i18n, opts } = this.props
 
 
     return (
     return (
-      <label role="tooltip" data-microtip-position="top">
-        <button
-          type="button"
-          className="uppy-u-reset uppy-c-btn"
-          aria-label={i18n('revert')}
-          onClick={() => {
-            this.cropper.reset()
-            this.cropper.setAspectRatio(
-              opts.cropperOptions.initialAspectRatio as number,
-            )
-            this.setState({ angle90Deg: 0, angleGranular: 0 })
-          }}
+      <button
+        role="button tooltip"
+        data-microtip-position="top"
+        type="button"
+        className="uppy-u-reset uppy-c-btn"
+        aria-label={i18n('revert')}
+        onClick={() => {
+          this.cropper.reset()
+          this.cropper.setAspectRatio(
+            opts.cropperOptions.initialAspectRatio as number,
+          )
+          this.setState({ angle90Deg: 0, angleGranular: 0 })
+        }}
+      >
+        <svg
+          aria-hidden="true"
+          className="uppy-c-icon"
+          width="24"
+          height="24"
+          viewBox="0 0 24 24"
         >
         >
-          <svg
-            aria-hidden="true"
-            className="uppy-c-icon"
-            width="24"
-            height="24"
-            viewBox="0 0 24 24"
-          >
-            <path d="M0 0h24v24H0z" fill="none" />
-            <path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z" />
-          </svg>
-        </button>
-      </label>
+          <path d="M0 0h24v24H0z" fill="none" />
+          <path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z" />
+        </svg>
+      </button>
     )
     )
   }
   }
 
 
@@ -202,25 +202,25 @@ export default class Editor<M extends Meta, B extends Body> extends Component<
     const { i18n } = this.props
     const { i18n } = this.props
 
 
     return (
     return (
-      <label role="tooltip" data-microtip-position="top">
-        <button
-          type="button"
-          className="uppy-u-reset uppy-c-btn"
-          aria-label={i18n('rotate')}
-          onClick={this.onRotate90Deg}
+      <button
+        role="button tooltip"
+        data-microtip-position="top"
+        type="button"
+        className="uppy-u-reset uppy-c-btn"
+        aria-label={i18n('rotate')}
+        onClick={this.onRotate90Deg}
+      >
+        <svg
+          aria-hidden="true"
+          className="uppy-c-icon"
+          width="24"
+          height="24"
+          viewBox="0 0 24 24"
         >
         >
-          <svg
-            aria-hidden="true"
-            className="uppy-c-icon"
-            width="24"
-            height="24"
-            viewBox="0 0 24 24"
-          >
-            <path d="M0 0h24v24H0V0zm0 0h24v24H0V0z" fill="none" />
-            <path d="M14 10a2 2 0 012 2v7a2 2 0 01-2 2H6a2 2 0 01-2-2v-7a2 2 0 012-2h8zm0 1.75H6a.25.25 0 00-.243.193L5.75 12v7a.25.25 0 00.193.243L6 19.25h8a.25.25 0 00.243-.193L14.25 19v-7a.25.25 0 00-.193-.243L14 11.75zM12 .76V4c2.3 0 4.61.88 6.36 2.64a8.95 8.95 0 012.634 6.025L21 13a1 1 0 01-1.993.117L19 13h-.003a6.979 6.979 0 00-2.047-4.95 6.97 6.97 0 00-4.652-2.044L12 6v3.24L7.76 5 12 .76z" />
-          </svg>
-        </button>
-      </label>
+          <path d="M0 0h24v24H0V0zm0 0h24v24H0V0z" fill="none" />
+          <path d="M14 10a2 2 0 012 2v7a2 2 0 01-2 2H6a2 2 0 01-2-2v-7a2 2 0 012-2h8zm0 1.75H6a.25.25 0 00-.243.193L5.75 12v7a.25.25 0 00.193.243L6 19.25h8a.25.25 0 00.243-.193L14.25 19v-7a.25.25 0 00-.193-.243L14 11.75zM12 .76V4c2.3 0 4.61.88 6.36 2.64a8.95 8.95 0 012.634 6.025L21 13a1 1 0 01-1.993.117L19 13h-.003a6.979 6.979 0 00-2.047-4.95 6.97 6.97 0 00-4.652-2.044L12 6v3.24L7.76 5 12 .76z" />
+        </svg>
+      </button>
     )
     )
   }
   }
 
 
@@ -228,27 +228,27 @@ export default class Editor<M extends Meta, B extends Body> extends Component<
     const { i18n } = this.props
     const { i18n } = this.props
 
 
     return (
     return (
-      <label role="tooltip" data-microtip-position="top">
-        <button
-          type="button"
-          className="uppy-u-reset uppy-c-btn"
-          aria-label={i18n('flipHorizontal')}
-          onClick={() =>
-            this.cropper.scaleX(-this.cropper.getData().scaleX || -1)
-          }
+      <button
+        role="button tooltip"
+        data-microtip-position="top"
+        type="button"
+        className="uppy-u-reset uppy-c-btn"
+        aria-label={i18n('flipHorizontal')}
+        onClick={() =>
+          this.cropper.scaleX(-this.cropper.getData().scaleX || -1)
+        }
+      >
+        <svg
+          aria-hidden="true"
+          className="uppy-c-icon"
+          width="24"
+          height="24"
+          viewBox="0 0 24 24"
         >
         >
-          <svg
-            aria-hidden="true"
-            className="uppy-c-icon"
-            width="24"
-            height="24"
-            viewBox="0 0 24 24"
-          >
-            <path d="M0 0h24v24H0z" fill="none" />
-            <path d="M15 21h2v-2h-2v2zm4-12h2V7h-2v2zM3 5v14c0 1.1.9 2 2 2h4v-2H5V5h4V3H5c-1.1 0-2 .9-2 2zm16-2v2h2c0-1.1-.9-2-2-2zm-8 20h2V1h-2v22zm8-6h2v-2h-2v2zM15 5h2V3h-2v2zm4 8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2z" />
-          </svg>
-        </button>
-      </label>
+          <path d="M0 0h24v24H0z" fill="none" />
+          <path d="M15 21h2v-2h-2v2zm4-12h2V7h-2v2zM3 5v14c0 1.1.9 2 2 2h4v-2H5V5h4V3H5c-1.1 0-2 .9-2 2zm16-2v2h2c0-1.1-.9-2-2-2zm-8 20h2V1h-2v22zm8-6h2v-2h-2v2zM15 5h2V3h-2v2zm4 8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2z" />
+        </svg>
+      </button>
     )
     )
   }
   }
 
 
@@ -256,26 +256,26 @@ export default class Editor<M extends Meta, B extends Body> extends Component<
     const { i18n } = this.props
     const { i18n } = this.props
 
 
     return (
     return (
-      <label role="tooltip" data-microtip-position="top">
-        <button
-          type="button"
-          className="uppy-u-reset uppy-c-btn"
-          aria-label={i18n('zoomIn')}
-          onClick={() => this.cropper.zoom(0.1)}
+      <button
+        role="button tooltip"
+        data-microtip-position="top"
+        type="button"
+        className="uppy-u-reset uppy-c-btn"
+        aria-label={i18n('zoomIn')}
+        onClick={() => this.cropper.zoom(0.1)}
+      >
+        <svg
+          aria-hidden="true"
+          className="uppy-c-icon"
+          height="24"
+          viewBox="0 0 24 24"
+          width="24"
         >
         >
-          <svg
-            aria-hidden="true"
-            className="uppy-c-icon"
-            height="24"
-            viewBox="0 0 24 24"
-            width="24"
-          >
-            <path d="M0 0h24v24H0V0z" fill="none" />
-            <path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" />
-            <path d="M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z" />
-          </svg>
-        </button>
-      </label>
+          <path d="M0 0h24v24H0V0z" fill="none" />
+          <path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" />
+          <path d="M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z" />
+        </svg>
+      </button>
     )
     )
   }
   }
 
 
@@ -283,25 +283,25 @@ export default class Editor<M extends Meta, B extends Body> extends Component<
     const { i18n } = this.props
     const { i18n } = this.props
 
 
     return (
     return (
-      <label role="tooltip" data-microtip-position="top">
-        <button
-          type="button"
-          className="uppy-u-reset uppy-c-btn"
-          aria-label={i18n('zoomOut')}
-          onClick={() => this.cropper.zoom(-0.1)}
+      <button
+        role="button tooltip"
+        data-microtip-position="top"
+        type="button"
+        className="uppy-u-reset uppy-c-btn"
+        aria-label={i18n('zoomOut')}
+        onClick={() => this.cropper.zoom(-0.1)}
+      >
+        <svg
+          aria-hidden="true"
+          className="uppy-c-icon"
+          width="24"
+          height="24"
+          viewBox="0 0 24 24"
         >
         >
-          <svg
-            aria-hidden="true"
-            className="uppy-c-icon"
-            width="24"
-            height="24"
-            viewBox="0 0 24 24"
-          >
-            <path d="M0 0h24v24H0V0z" fill="none" />
-            <path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z" />
-          </svg>
-        </button>
-      </label>
+          <path d="M0 0h24v24H0V0z" fill="none" />
+          <path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z" />
+        </svg>
+      </button>
     )
     )
   }
   }
 
 
@@ -309,25 +309,25 @@ export default class Editor<M extends Meta, B extends Body> extends Component<
     const { i18n } = this.props
     const { i18n } = this.props
 
 
     return (
     return (
-      <label role="tooltip" data-microtip-position="top">
-        <button
-          type="button"
-          className="uppy-u-reset uppy-c-btn"
-          aria-label={i18n('aspectRatioSquare')}
-          onClick={() => this.cropper.setAspectRatio(1)}
+      <button
+        role="button tooltip"
+        data-microtip-position="top"
+        type="button"
+        className="uppy-u-reset uppy-c-btn"
+        aria-label={i18n('aspectRatioSquare')}
+        onClick={() => this.cropper.setAspectRatio(1)}
+      >
+        <svg
+          aria-hidden="true"
+          className="uppy-c-icon"
+          width="24"
+          height="24"
+          viewBox="0 0 24 24"
         >
         >
-          <svg
-            aria-hidden="true"
-            className="uppy-c-icon"
-            width="24"
-            height="24"
-            viewBox="0 0 24 24"
-          >
-            <path d="M0 0h24v24H0z" fill="none" />
-            <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" />
-          </svg>
-        </button>
-      </label>
+          <path d="M0 0h24v24H0z" fill="none" />
+          <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" />
+        </svg>
+      </button>
     )
     )
   }
   }
 
 
@@ -335,25 +335,25 @@ export default class Editor<M extends Meta, B extends Body> extends Component<
     const { i18n } = this.props
     const { i18n } = this.props
 
 
     return (
     return (
-      <label role="tooltip" data-microtip-position="top">
-        <button
-          type="button"
-          className="uppy-u-reset uppy-c-btn"
-          aria-label={i18n('aspectRatioLandscape')}
-          onClick={() => this.cropper.setAspectRatio(16 / 9)}
+      <button
+        role="button tooltip"
+        data-microtip-position="top"
+        type="button"
+        className="uppy-u-reset uppy-c-btn"
+        aria-label={i18n('aspectRatioLandscape')}
+        onClick={() => this.cropper.setAspectRatio(16 / 9)}
+      >
+        <svg
+          aria-hidden="true"
+          className="uppy-c-icon"
+          width="24"
+          height="24"
+          viewBox="0 0 24 24"
         >
         >
-          <svg
-            aria-hidden="true"
-            className="uppy-c-icon"
-            width="24"
-            height="24"
-            viewBox="0 0 24 24"
-          >
-            <path d="M 19,4.9999992 V 17.000001 H 4.9999998 V 6.9999992 H 19 m 0,-2 H 4.9999998 c -1.0999999,0 -1.9999999,0.9000001 -1.9999999,2 V 17.000001 c 0,1.1 0.9,2 1.9999999,2 H 19 c 1.1,0 2,-0.9 2,-2 V 6.9999992 c 0,-1.0999999 -0.9,-2 -2,-2 z" />
-            <path fill="none" d="M0 0h24v24H0z" />
-          </svg>
-        </button>
-      </label>
+          <path d="M 19,4.9999992 V 17.000001 H 4.9999998 V 6.9999992 H 19 m 0,-2 H 4.9999998 c -1.0999999,0 -1.9999999,0.9000001 -1.9999999,2 V 17.000001 c 0,1.1 0.9,2 1.9999999,2 H 19 c 1.1,0 2,-0.9 2,-2 V 6.9999992 c 0,-1.0999999 -0.9,-2 -2,-2 z" />
+          <path fill="none" d="M0 0h24v24H0z" />
+        </svg>
+      </button>
     )
     )
   }
   }
 
 
@@ -361,25 +361,25 @@ export default class Editor<M extends Meta, B extends Body> extends Component<
     const { i18n } = this.props
     const { i18n } = this.props
 
 
     return (
     return (
-      <label role="tooltip" data-microtip-position="top">
-        <button
-          type="button"
-          aria-label={i18n('aspectRatioPortrait')}
-          className="uppy-u-reset uppy-c-btn"
-          onClick={() => this.cropper.setAspectRatio(9 / 16)}
+      <button
+        role="button tooltip"
+        data-microtip-position="top"
+        type="button"
+        aria-label={i18n('aspectRatioPortrait')}
+        className="uppy-u-reset uppy-c-btn"
+        onClick={() => this.cropper.setAspectRatio(9 / 16)}
+      >
+        <svg
+          aria-hidden="true"
+          className="uppy-c-icon"
+          width="24"
+          height="24"
+          viewBox="0 0 24 24"
         >
         >
-          <svg
-            aria-hidden="true"
-            className="uppy-c-icon"
-            width="24"
-            height="24"
-            viewBox="0 0 24 24"
-          >
-            <path d="M 19.000001,19 H 6.999999 V 5 h 10.000002 v 14 m 2,0 V 5 c 0,-1.0999999 -0.9,-1.9999999 -2,-1.9999999 H 6.999999 c -1.1,0 -2,0.9 -2,1.9999999 v 14 c 0,1.1 0.9,2 2,2 h 10.000002 c 1.1,0 2,-0.9 2,-2 z" />
-            <path d="M0 0h24v24H0z" fill="none" />
-          </svg>
-        </button>
-      </label>
+          <path d="M 19.000001,19 H 6.999999 V 5 h 10.000002 v 14 m 2,0 V 5 c 0,-1.0999999 -0.9,-1.9999999 -2,-1.9999999 H 6.999999 c -1.1,0 -2,0.9 -2,1.9999999 v 14 c 0,1.1 0.9,2 2,2 h 10.000002 c 1.1,0 2,-0.9 2,-2 z" />
+          <path d="M0 0h24v24H0z" fill="none" />
+        </svg>
+      </button>
     )
     )
   }
   }
 
 

+ 7 - 0
packages/@uppy/screen-capture/CHANGELOG.md

@@ -1,5 +1,12 @@
 # @uppy/screen-capture
 # @uppy/screen-capture
 
 
+## 4.0.0-beta.5
+
+Released: 2024-05-14
+Included in: Uppy v4.0.0-beta.7
+
+- @uppy/companion-client,@uppy/dropbox,@uppy/screen-capture,@uppy/unsplash,@uppy/url,@uppy/webcam: Use `title` consistently from locales (Merlijn Vos / #5134)
+
 ## 4.0.0-beta.1
 ## 4.0.0-beta.1
 
 
 Released: 2024-03-28
 Released: 2024-03-28

+ 1 - 1
packages/@uppy/screen-capture/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/screen-capture",
   "name": "@uppy/screen-capture",
   "description": "Uppy plugin that captures video from display or application.",
   "description": "Uppy plugin that captures video from display or application.",
-  "version": "4.0.0-beta.4",
+  "version": "4.0.0-beta.5",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
   "style": "dist/style.min.css",

+ 2 - 2
packages/@uppy/status-bar/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/status-bar",
   "name": "@uppy/status-bar",
   "description": "A progress bar for Uppy, with many bells and whistles.",
   "description": "A progress bar for Uppy, with many bells and whistles.",
-  "version": "4.0.0-beta.6",
+  "version": "4.0.0-beta.7",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
   "style": "dist/style.min.css",
@@ -26,7 +26,7 @@
     "url": "git+https://github.com/transloadit/uppy.git"
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@transloadit/prettier-bytes": "^0.3.0",
+    "@transloadit/prettier-bytes": "^0.3.4",
     "@uppy/utils": "workspace:^",
     "@uppy/utils": "workspace:^",
     "classnames": "^2.2.6",
     "classnames": "^2.2.6",
     "preact": "^10.5.13"
     "preact": "^10.5.13"

+ 7 - 0
packages/@uppy/unsplash/CHANGELOG.md

@@ -1,5 +1,12 @@
 # @uppy/unsplash
 # @uppy/unsplash
 
 
+## 4.0.0-beta.6
+
+Released: 2024-05-14
+Included in: Uppy v4.0.0-beta.7
+
+- @uppy/companion-client,@uppy/dropbox,@uppy/screen-capture,@uppy/unsplash,@uppy/url,@uppy/webcam: Use `title` consistently from locales (Merlijn Vos / #5134)
+
 ## 4.0.0-beta.1
 ## 4.0.0-beta.1
 
 
 Released: 2024-03-28
 Released: 2024-03-28

+ 1 - 1
packages/@uppy/unsplash/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/unsplash",
   "name": "@uppy/unsplash",
   "description": "Import files from Unsplash, the free stock photography resource, into Uppy",
   "description": "Import files from Unsplash, the free stock photography resource, into Uppy",
-  "version": "4.0.0-beta.5",
+  "version": "4.0.0-beta.6",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "type": "module",
   "type": "module",

+ 7 - 0
packages/@uppy/url/CHANGELOG.md

@@ -1,5 +1,12 @@
 # @uppy/url
 # @uppy/url
 
 
+## 4.0.0-beta.6
+
+Released: 2024-05-14
+Included in: Uppy v4.0.0-beta.7
+
+- @uppy/companion-client,@uppy/dropbox,@uppy/screen-capture,@uppy/unsplash,@uppy/url,@uppy/webcam: Use `title` consistently from locales (Merlijn Vos / #5134)
+
 ## 4.0.0-beta.1
 ## 4.0.0-beta.1
 
 
 Released: 2024-03-28
 Released: 2024-03-28

+ 1 - 1
packages/@uppy/url/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/url",
   "name": "@uppy/url",
   "description": "The Url plugin lets users import files from the Internet. Paste any URL and it’ll be added!",
   "description": "The Url plugin lets users import files from the Internet. Paste any URL and it’ll be added!",
-  "version": "4.0.0-beta.5",
+  "version": "4.0.0-beta.6",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
   "style": "dist/style.min.css",

+ 1 - 1
packages/@uppy/utils/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/utils",
   "name": "@uppy/utils",
   "description": "Shared utility functions for Uppy Core and plugins maintained by the Uppy team.",
   "description": "Shared utility functions for Uppy Core and plugins maintained by the Uppy team.",
-  "version": "6.0.0-beta.5",
+  "version": "6.0.0-beta.6",
   "license": "MIT",
   "license": "MIT",
   "type": "module",
   "type": "module",
   "keywords": [
   "keywords": [

+ 7 - 0
packages/@uppy/webcam/CHANGELOG.md

@@ -1,5 +1,12 @@
 # @uppy/webcam
 # @uppy/webcam
 
 
+## 4.0.0-beta.6
+
+Released: 2024-05-14
+Included in: Uppy v4.0.0-beta.7
+
+- @uppy/companion-client,@uppy/dropbox,@uppy/screen-capture,@uppy/unsplash,@uppy/url,@uppy/webcam: Use `title` consistently from locales (Merlijn Vos / #5134)
+
 ## 4.0.0-beta.1
 ## 4.0.0-beta.1
 
 
 Released: 2024-03-28
 Released: 2024-03-28

+ 1 - 1
packages/@uppy/webcam/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/webcam",
   "name": "@uppy/webcam",
   "description": "Uppy plugin that takes photos or records videos using the device's camera.",
   "description": "Uppy plugin that takes photos or records videos using the device's camera.",
-  "version": "4.0.0-beta.5",
+  "version": "4.0.0-beta.6",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
   "style": "dist/style.min.css",

+ 7 - 0
packages/@uppy/xhr-upload/CHANGELOG.md

@@ -1,5 +1,12 @@
 # @uppy/xhr-upload
 # @uppy/xhr-upload
 
 
+## 4.0.0-beta.4
+
+Released: 2024-05-14
+Included in: Uppy v4.0.0-beta.7
+
+- @uppy/xhr-upload: introduce hooks similar to tus (Merlijn Vos / #5094)
+
 ## 4.0.0-beta.3
 ## 4.0.0-beta.3
 
 
 Released: 2024-05-03
 Released: 2024-05-03

+ 1 - 1
packages/@uppy/xhr-upload/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@uppy/xhr-upload",
   "name": "@uppy/xhr-upload",
   "description": "Plain and simple classic HTML multipart form uploads with Uppy, as well as uploads using the HTTP PUT method.",
   "description": "Plain and simple classic HTML multipart form uploads with Uppy, as well as uploads using the HTTP PUT method.",
-  "version": "4.0.0-beta.3",
+  "version": "4.0.0-beta.4",
   "license": "MIT",
   "license": "MIT",
   "main": "lib/index.js",
   "main": "lib/index.js",
   "type": "module",
   "type": "module",

+ 1 - 1
packages/uppy/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "uppy",
   "name": "uppy",
   "description": "Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:",
   "description": "Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:",
-  "version": "4.0.0-beta.6",
+  "version": "4.0.0-beta.7",
   "license": "MIT",
   "license": "MIT",
   "main": "index.mjs",
   "main": "index.mjs",
   "module": "index.mjs",
   "module": "index.mjs",

+ 8 - 8
yarn.lock

@@ -8369,10 +8369,10 @@ __metadata:
   languageName: node
   languageName: node
   linkType: hard
   linkType: hard
 
 
-"@transloadit/prettier-bytes@npm:^0.3.0":
-  version: 0.3.2
-  resolution: "@transloadit/prettier-bytes@npm:0.3.2"
-  checksum: 10/63019adce868a821ef87e5676a058a3616aa51933de44e9775ac7d369ef46032a54163e8927837fd9bb64a4b9f410c3d31147f40c756e601d96c18c461aa1030
+"@transloadit/prettier-bytes@npm:^0.3.4":
+  version: 0.3.4
+  resolution: "@transloadit/prettier-bytes@npm:0.3.4"
+  checksum: 10/abd6b7a12f57d5db3e744cbfa793e1fbb2aa15943b55901882eed8f32fd95cb72a2805db4e8251862192d8ebaa889a696657f46c9cd41347538d377dea731d58
   languageName: node
   languageName: node
   linkType: hard
   linkType: hard
 
 
@@ -10110,7 +10110,7 @@ __metadata:
   version: 0.0.0-use.local
   version: 0.0.0-use.local
   resolution: "@uppy/compressor@workspace:packages/@uppy/compressor"
   resolution: "@uppy/compressor@workspace:packages/@uppy/compressor"
   dependencies:
   dependencies:
-    "@transloadit/prettier-bytes": "npm:^0.3.0"
+    "@transloadit/prettier-bytes": "npm:^0.3.4"
     "@uppy/utils": "workspace:^"
     "@uppy/utils": "workspace:^"
     compressorjs: "npm:^1.2.1"
     compressorjs: "npm:^1.2.1"
     preact: "npm:^10.5.13"
     preact: "npm:^10.5.13"
@@ -10125,7 +10125,7 @@ __metadata:
   version: 0.0.0-use.local
   version: 0.0.0-use.local
   resolution: "@uppy/core@workspace:packages/@uppy/core"
   resolution: "@uppy/core@workspace:packages/@uppy/core"
   dependencies:
   dependencies:
-    "@transloadit/prettier-bytes": "npm:^0.3.0"
+    "@transloadit/prettier-bytes": "npm:^0.3.4"
     "@uppy/store-default": "workspace:^"
     "@uppy/store-default": "workspace:^"
     "@uppy/utils": "workspace:^"
     "@uppy/utils": "workspace:^"
     lodash: "npm:^4.17.21"
     lodash: "npm:^4.17.21"
@@ -10141,7 +10141,7 @@ __metadata:
   version: 0.0.0-use.local
   version: 0.0.0-use.local
   resolution: "@uppy/dashboard@workspace:packages/@uppy/dashboard"
   resolution: "@uppy/dashboard@workspace:packages/@uppy/dashboard"
   dependencies:
   dependencies:
-    "@transloadit/prettier-bytes": "npm:^0.3.0"
+    "@transloadit/prettier-bytes": "npm:^0.3.4"
     "@uppy/google-drive": "workspace:^"
     "@uppy/google-drive": "workspace:^"
     "@uppy/informer": "workspace:^"
     "@uppy/informer": "workspace:^"
     "@uppy/provider-views": "workspace:^"
     "@uppy/provider-views": "workspace:^"
@@ -10433,7 +10433,7 @@ __metadata:
   version: 0.0.0-use.local
   version: 0.0.0-use.local
   resolution: "@uppy/status-bar@workspace:packages/@uppy/status-bar"
   resolution: "@uppy/status-bar@workspace:packages/@uppy/status-bar"
   dependencies:
   dependencies:
-    "@transloadit/prettier-bytes": "npm:^0.3.0"
+    "@transloadit/prettier-bytes": "npm:^0.3.4"
     "@uppy/utils": "workspace:^"
     "@uppy/utils": "workspace:^"
     classnames: "npm:^2.2.6"
     classnames: "npm:^2.2.6"
     preact: "npm:^10.5.13"
     preact: "npm:^10.5.13"