Pārlūkot izejas kodu

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 mēneši atpakaļ
vecāks
revīzija
53cb32f5d9
55 mainītis faili ar 476 papildinājumiem un 313 dzēšanām
  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
 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.
 
 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.
 
+## 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
 
 Released: 2024-05-08
@@ -287,6 +309,21 @@ Released: 2024-03-28
 - @uppy/vue: [v4.x] remove manual types (Antoine du Hamel / #4803)
 - 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
 
 Released: 2024-05-07

+ 61 - 20
README.md

@@ -41,8 +41,8 @@ import Tus from '@uppy/tus'
 const uppy = new Uppy()
   .use(Dashboard, { trigger: '#select-files' })
   .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/' })
   .on('complete', (result) => {
     console.log('Upload result:', result)
@@ -79,7 +79,7 @@ npm install @uppy/core @uppy/dashboard @uppy/tus
 ```
 
 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
 supports it.
 
@@ -94,7 +94,7 @@ object.
 ```html
 <!-- 1. Add CSS to `<head>` -->
 <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"
 />
 
@@ -105,7 +105,7 @@ object.
     Uppy,
     Dashboard,
     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()
   uppy.use(Dashboard, { target: '#files-drag-drop' })
@@ -203,7 +203,48 @@ server-side component, is needed for a plugin to work.
 
 ## 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
 
@@ -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/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/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/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>
@@ -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/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/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/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/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/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/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/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-->
 </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.
 	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 });
 	}, [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
 JavaScript.
 
-```html
+```svelte
 <script>
 	import { Dashboard } from '@uppy/svelte';
 	import Uppy from '@uppy/core';
@@ -64,7 +64,7 @@ JavaScript.
 	const uppy = new Uppy().use(Webcam);
 </script>
 
-<main><Dashboard uppy={uppy} plugins={["Webcam"]} /></main>
+<main><Dashboard uppy={uppy} /></main>
 ```
 
 [svelte]: https://svelte.dev

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

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

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

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

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

@@ -135,7 +135,8 @@ default: `same-origin`).
 #### `target`
 
 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]:
 	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}}"
         const uppy = new Uppy()
         uppy.use(Dashboard, { inline: true, target: 'body' })
-        uppy.use(Audio, { target: Uppy.Dashboard })
+        uppy.use(Audio)
       `}
     </UppyCdnExample>
   </TabItem>
@@ -67,9 +67,7 @@ import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/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
@@ -87,8 +85,9 @@ Configures the title / name shown in the UI, for instance, on Dashboard tabs
 
 #### `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`
 

+ 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/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
@@ -150,7 +149,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 
 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`
 

+ 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/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
@@ -149,7 +148,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 
 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`
 

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

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 new Uppy()
 	.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
@@ -148,7 +145,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 
 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`
 

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

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 new Uppy()
 	.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
@@ -152,7 +149,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 
 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`
 

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

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 new Uppy()
 	.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
@@ -142,7 +139,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 
 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`
 

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

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 new Uppy()
 	.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
@@ -142,7 +139,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 
 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`
 

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

@@ -78,10 +78,7 @@ import '@uppy/dashboard/dist/style.min.css';
 
 new Uppy()
 	.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
@@ -127,7 +124,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 
 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`
 

+ 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/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
@@ -110,7 +109,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 
 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`
 

+ 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/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
@@ -121,7 +120,8 @@ Title / name shown in the UI, such as Dashboard tabs (`string`, default:
 #### `target`
 
 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`
 

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

@@ -62,7 +62,7 @@ yarn add @uppy/screen-capture
         import { Uppy, Dashboard, ScreenCapture } from "{{UPPY_JS_URL}}"
         const uppy = new Uppy()
         uppy.use(Dashboard, { inline: true, target: 'body' })
-        uppy.use(ScreenCapture, { target: Uppy.Dashboard })
+        uppy.use(ScreenCapture)
       `}
     </UppyCdnExample>
   </TabItem>
@@ -79,9 +79,7 @@ import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/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
@@ -99,8 +97,9 @@ Configures the title / name shown in the UI, for instance, on Dashboard tabs
 
 #### `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`
 

+ 5 - 6
docs/sources/webcam.mdx

@@ -51,7 +51,7 @@ yarn add @uppy/webcam
         import { Uppy, Dashboard, Webcam } from "{{UPPY_JS_URL}}"
         const uppy = new Uppy()
         uppy.use(Dashboard, { inline: true, target: 'body' })
-        uppy.use(Webcam, { target: Uppy.Dashboard })
+        uppy.use(Webcam)
       `}
     </UppyCdnExample>
   </TabItem>
@@ -77,9 +77,7 @@ import '@uppy/core/dist/style.min.css';
 import '@uppy/dashboard/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
@@ -92,8 +90,9 @@ A unique identifier for this plugin (`string`, default: `'Webcam'`).
 
 #### `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`
 

+ 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}}"
         const uppy = new Uppy()
         uppy.use(Dashboard, { target: '#uppy', inline: true })
-        uppy.use(ImageEditor, { target: Uppy.Dashboard })
+        uppy.use(ImageEditor)
       `}
     </UppyCdnExample>
   </TabItem>
@@ -67,7 +67,7 @@ import '@uppy/image-editor/dist/style.min.css';
 
 new Uppy()
 	.use(Dashboard, { inline: true, target: '#dashboard' })
-	.use(ImageEditor, { target: Dashboard });
+	.use(ImageEditor);
 ```
 
 ## 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`
 
-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`
 

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

@@ -4,7 +4,7 @@
     <meta charset="utf-8" />
     <title>Uppy</title>
     <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"
     />
   </head>
@@ -22,7 +22,7 @@
           DragDrop,
           ProgressBar,
           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
         const onUploadSuccess = (elForUploadedFiles) => (file, response) => {

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

@@ -4,7 +4,7 @@
     <meta charset="utf-8" />
     <title>Uppy – AWS upload example</title>
     <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"
     />
   </head>
@@ -16,7 +16,7 @@
         Uppy,
         Dashboard,
         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
        * 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 name="viewport" content="width=device-width, initial-scale=1" />
     <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"
     />
   </head>
@@ -19,7 +19,7 @@
         Dashboard,
         Webcam,
         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 })
         .use(Dashboard, { trigger: '#uppyModalOpener' })

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

@@ -5,7 +5,7 @@
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
     <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"
     />
   </head>
@@ -19,7 +19,7 @@
         Instagram,
         GoogleDrive,
         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 })
         .use(Dashboard, { trigger: '#uppyModalOpener' })

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

@@ -1,5 +1,12 @@
 # @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
 
 Released: 2024-03-28

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/companion-client",
   "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",
   "main": "lib/index.js",
   "type": "module",

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

@@ -1,5 +1,12 @@
 # @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
 
 Released: 2024-05-03

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

@@ -1,6 +1,6 @@
 {
   "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:",
   "main": "lib/companion.js",
   "types": "lib/companion.d.ts",

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/compressor",
   "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",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -22,7 +22,7 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@transloadit/prettier-bytes": "^0.3.0",
+    "@transloadit/prettier-bytes": "^0.3.4",
     "@uppy/utils": "workspace:^",
     "compressorjs": "^1.2.1",
     "preact": "^10.5.13",

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

@@ -1,5 +1,12 @@
 # @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
 
 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,@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
 
 Released: 2024-05-07

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

@@ -1,7 +1,7 @@
 {
   "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:",
-  "version": "4.0.0-beta.6",
+  "version": "4.0.0-beta.7",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -23,7 +23,7 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@transloadit/prettier-bytes": "^0.3.0",
+    "@transloadit/prettier-bytes": "^0.3.4",
     "@uppy/store-default": "workspace:^",
     "@uppy/utils": "workspace:^",
     "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))
   }
 
-  // TODO: remove or refactor this method. It's very inefficient
   getObjectOfFilesPerState(): {
     newFiles: 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 = 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 {
       newFiles,

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

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

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

@@ -1,5 +1,12 @@
 # @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
 
 Released: 2024-03-28

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/dropbox",
   "description": "Import files from Dropbox, into Uppy.",
-  "version": "4.0.0-beta.5",
+  "version": "4.0.0-beta.6",
   "license": "MIT",
   "main": "lib/index.js",
   "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)
 
+## 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
 
 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()
 uppy.use(Dashboard)
-uppy.use(ImageEditor, {
-  target: Dashboard,
-  quality: 0.7,
-})
+uppy.use(ImageEditor, { quality: 0.7 })
 ```
 
 ## Installation

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/image-editor",
   "description": "Image editor and cropping UI",
-  "version": "3.0.0-beta.3",
+  "version": "3.0.0-beta.4",
   "license": "MIT",
   "main": "lib/index.js",
   "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
 
     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
 
     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
 
     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
 
     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
 
     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
 
     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
 
     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
 
     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
 
+## 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
 
 Released: 2024-03-28

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

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

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/status-bar",
   "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",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -26,7 +26,7 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@transloadit/prettier-bytes": "^0.3.0",
+    "@transloadit/prettier-bytes": "^0.3.4",
     "@uppy/utils": "workspace:^",
     "classnames": "^2.2.6",
     "preact": "^10.5.13"

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

@@ -1,5 +1,12 @@
 # @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
 
 Released: 2024-03-28

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/unsplash",
   "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",
   "main": "lib/index.js",
   "type": "module",

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

@@ -1,5 +1,12 @@
 # @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
 
 Released: 2024-03-28

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/url",
   "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",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/utils",
   "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",
   "type": "module",
   "keywords": [

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

@@ -1,5 +1,12 @@
 # @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
 
 Released: 2024-03-28

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/webcam",
   "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",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

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

@@ -1,5 +1,12 @@
 # @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
 
 Released: 2024-05-03

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

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/xhr-upload",
   "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",
   "main": "lib/index.js",
   "type": "module",

+ 1 - 1
packages/uppy/package.json

@@ -1,7 +1,7 @@
 {
   "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:",
-  "version": "4.0.0-beta.6",
+  "version": "4.0.0-beta.7",
   "license": "MIT",
   "main": "index.mjs",
   "module": "index.mjs",

+ 8 - 8
yarn.lock

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