This commit is contained in:
Prakash 2025-08-20 16:17:08 +05:30
commit 6a33652458
270 changed files with 9117 additions and 1751 deletions

View file

@ -1,5 +0,0 @@
---
"@uppy/vue": patch
---
Fix uppy prop in UppyContextProvider

View file

@ -1,5 +0,0 @@
---
"@uppy/webcam": minor
---
Add image preview with accept/discard buttons

View file

@ -7,5 +7,27 @@
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
"onlyUpdatePeerDependentsWhenOutOfRange": true
},
"ignore": [
"example-angular",
"example-aws-companion",
"example-aws-nodejs",
"example-aws-php",
"example-cdn",
"example-companion",
"example-companion-custom-provider",
"example-companion-digitalocean-spaces",
"example-react",
"example-react-native-expo",
"example-redux",
"example-sveltekit",
"example-transloadit",
"example-vue",
"example-xhr-bundle",
"example-xhr-node",
"example-xhr-php",
"example-xhr-python"
]
}

View file

@ -1,5 +0,0 @@
---
"@uppy/core": patch
---
Resolve stale state in `checkAndUpdateFileState`

View file

@ -1,5 +0,0 @@
---
"@uppy/companion": minor
---
Add provider name to metadata for observability

View file

@ -1,5 +0,0 @@
---
"@uppy/companion": patch
---
Make StreamableBlob spec compliant for Node.js 24+

View file

@ -0,0 +1,5 @@
---
"@uppy/provider-views": patch
---
VirtualList now virtualises rows in the file list, as was intented. This means better performance when scrolling thousands for files.

View file

@ -0,0 +1,5 @@
---
"@uppy/core": patch
---
Fix retry after setting missed metaFields requiring you to click "retry" and then "upload" again. Now "retry" immediately restarts the upload.

View file

@ -1,5 +0,0 @@
---
"@uppy/locales": minor
---
Update Swedish translations

View file

@ -0,0 +1,5 @@
---
"@uppy/thumbnail-generator": patch
---
Make tiny/small thumbnails look better by not scaling them to cover the entire grid item

View file

@ -1,50 +0,0 @@
---
"@uppy/audio": minor
"@uppy/aws-s3": minor
"@uppy/aws-s3-multipart": minor
"@uppy/box": minor
"@uppy/companion-client": minor
"@uppy/components": minor
"@uppy/compressor": minor
"@uppy/core": minor
"@uppy/dashboard": minor
"@uppy/drag-drop": minor
"@uppy/drop-target": minor
"@uppy/dropbox": minor
"@uppy/facebook": minor
"@uppy/file-input": minor
"@uppy/form": minor
"@uppy/golden-retriever": minor
"@uppy/google-drive": minor
"@uppy/google-drive-picker": minor
"@uppy/google-photos-picker": minor
"@uppy/image-editor": minor
"@uppy/informer": minor
"@uppy/instagram": minor
"@uppy/locales": minor
"@uppy/onedrive": minor
"@uppy/progress-bar": minor
"@uppy/provider-views": minor
"@uppy/react": minor
"@uppy/redux-dev-tools": minor
"@uppy/remote-sources": minor
"@uppy/screen-capture": minor
"@uppy/status-bar": minor
"@uppy/store-default": minor
"@uppy/store-redux": minor
"@uppy/svelte": minor
"@uppy/thumbnail-generator": minor
"@uppy/transloadit": minor
"@uppy/tus": minor
"@uppy/unsplash": minor
"@uppy/url": minor
"@uppy/utils": minor
"@uppy/vue": minor
"@uppy/webcam": minor
"@uppy/webdav": minor
"@uppy/xhr-upload": minor
"@uppy/zoom": minor
"uppy": minor
---
Use TypeScript compiler instead of Babel

View file

@ -7,7 +7,7 @@ instructions.
After you have successfully forked the repository, clone it locally.
```sh
git clone https://github.com/transloadit/uppy.git
git clone https://github.com/[your-username]/uppy.git
cd uppy
```
@ -24,24 +24,37 @@ corepack enable
## Development
First of all, install Uppy dependencies:
Install dependencies:
```bash
yarn install
```
### Basic
To run a basic development version of Uppy, run:
Build all packages:
```bash
yarn dev
yarn build
```
and go to http://localhost:5174 (or whatever link the yarn command outputted).
As you edit Uppy code, the browser will live reload the changes.
### Development Commands
### Companion
- `yarn dev` - Start development server at http://localhost:5174
- `yarn dev:with-companion` - Start dev server with Companion for cloud integrations
- `yarn start:companion` - Start only Companion server at http://localhost:3020
- `yarn build:watch` - Build packages in watch mode
- `yarn test` - Run tests for all packages
- `yarn test:watch` - Run tests in watch mode
- `yarn typecheck` - Run TypeScript type checking
- `yarn check` - Run Biome linting and formatting
### Headless components
When adding a new component to `@uppy/components`, you have to run `yarn migrate:components` from root
to migrate the Preact components to React, Svelte, and Vue.
This is not needed for changing existing components.
## Companion
If youd like to work on features that the basic development version of Uppy
doesnt support, such as Uppy integrations with Instagram/Google Drive/Facebook
@ -62,12 +75,6 @@ This would get the Companion instance running on `http://localhost:3020`. It
uses [nodemon](https://github.com/remy/nodemon) so it will automatically restart
when files are changed.
### Live example
An example server is running at <https://companion.uppy.io>, which is deployed
with
[Kubernetes](https://github.com/transloadit/uppy/blob/main/packages/%40uppy/companion/KUBERNETES.md)
### How the Authentication and Token mechanism works
This section describes how Authentication works between Companion and Providers.
@ -101,438 +108,6 @@ Authenticates and Uploads from Dropbox through Companion:
- Companion reports progress to Uppy, as if it were a local upload.
- Completed!
### Requiring files
- If we are `require()`ing a file from the same subpackage, we can freely use
relative imports as long as the required file is under the `src` directory
(for example to import `@uppy/dashboard/src/utils/hi.js` from
`@uppy/dashboard/src/index.js`, use `require('./utils/hi.js')`).
- But if we want to `require()` some file from another subpackage - we should
use global @uppy requires, and they should always be in the form of
`@uppy/:packageName/(lib instead of src)/(same path).js`
## Tests
### Unit tests
Unit tests are using Vitest and can be run with:
```bash
yarn test:unit
```
### End-to-End tests
We use [Cypress](https://www.cypress.io/) for our e2e test suite. Be sure to
checkout
“[Writing your first test](https://docs.cypress.io/guides/getting-started/writing-your-first-test#Add-a-test-file)”
and the
“[Introduction to Cypress](https://docs.cypress.io/guides/core-concepts/introduction-to-cypress#Cypress-Can-Be-Simple-Sometimes)”.
You should also be aware of the
“[Best Practices](https://docs.cypress.io/guides/references/best-practices)”.
To get started make sure you have your `.env` set up. Copy the contents of
`.env.example` to a file named `.env` and add the values relevant for the
test(s) you are trying to run.
To start the testing suite run:
```
yarn e2e
```
This will run Cypress in watch-mode, and it will pick up and rebuild any changes
to JS files. If you need to change other files (like CSS for example), you need
to run the respective `yarn build:*` scripts.
Alternatively the following command is the same as the above, except it doesnt
run `build` first:
```
yarn e2e:skip-build
```
To generate the boilerplate for a new test run:
```
yarn e2e:generate
```
## Releases
Releases are managed by GitHub Actions, heres an overview of the process to
release a new Uppy version:
- Run `yarn release` on your local machine.
- Follow the instructions and select what packages to release. **Warning:**
skipping packages results in those changes being “lost”, meaning they wont be
picked up in the changelog automatically next release. Always try to release
all.
- Before committing, check if the generated files look good.
- When asked to edit the next CHANGELOG, only include changes related to the
package(s) you selected for release.
- Push to the Transloadit repository using the command given by the tool. Do not
open a PR yourself, the GitHub Actions will create one and assign you to it.
- Wait for all the GitHub Actions checks to pass. If one fails, try to figure
out why. Do not go ahead without consulting the rest of the team.
- Review the PR thoroughly, and if everything looks good to you, approve the PR.
Do not merge it manually!
- After the PR is automatically merged, the demos on transloadit.com should also
be updated. Check that some things work locally:
- the demos in the demo section work (try one that uses an import robot, and
one that you need to upload to)
- the demos on the homepage work and can import from Google Drive, Instagram,
Dropbox, etc.
If you dont have access to the transloadit.com source code ping @arturi or
@goto-bus-stop and well pick it up. :sparkles:
### Fixing a broken release
If the `Release` job fails, it will merge the release PR and deletes the branch
and theres no way of going back with that PR. Instead you have to reverse the
release commit and run the Release candidate job again to create a new release
PR:
1. Checkout `main` locally and reverse the automatically release commit
2. Do whatever changes need to be done on `main`
3. Commit and push `main`
4. Now checkout the `release` branch and rebase it onto `main`, then push it
5. A new release PR will now be created and you can start over
6. Delete tags for the original release commit (`COMMIT_ID`):
```bash
git tag --points-at COMMIT_ID | tee /dev/tty | xargs -n 1 git tag -d
```
7. Push the deleted tags:
```bash
git tag --points-at COMMIT_ID | xargs -n 1 -I {} echo ":refs/tags/{}" | xargs git push origin
```
### Releasing hotfix patch
#### Companion hotfix
First checkout the tag of the version you want to patch:
```bash
git checkout @uppy/companion@x.y.z
```
Now create a branch for your hotfix:
```bash
git checkout -b x.y.z-hotfix
```
Run yarn to make sure all packages are consistent:
```bash
corepack yarn
```
Now navigate to the Companion workspace:
```bash
cd packages/@uppy/companion
```
**Now cherry pick your desired commits**.
Next edit `CHANGELOG.md` and then commit it:
```bash
git add CHANGELOG.md
git commit -m 'Update changelog'
```
Now lets create the version & tag:
```bash
mkdir -p .git && npm version --workspaces-update=false --tag-version-prefix='@uppy/companion@' patch
```
**Important:** Build Companion lib folder
```bash
yarn run build
```
Run a “dry-run” first:
```bash
corepack yarn pack
```
If the earlier command succeeded, lets publish!
```bash
corepack yarn npm publish --access public --tag=none
```
Now we can push our branch and tags.
```bash
git push && git push --tags
```
#### Hotfix other packages
For other Uppy packages, the process should be like Companion, but hasnt been
documented yet. Make sure to remember to run `yarn` as well as building the
package first, then you can release it. If you do release any other packages,
please update this doc.
## CSS guidelines
The CSS standards followed in this project closely resemble those from
[Mediums CSS Guidelines](https://gist.github.com/fat/a47b882eb5f84293c4ed). If
something is not mentioned here, follow their guidelines.
### Naming conventions
This project uses naming conventions adopted from the SUIT CSS framework.
[Read about them here](https://github.com/suitcss/suit/blob/master/doc/naming-conventions.md).
To quickly summarize:
#### Utilities
Syntax: `u-[sm-|md-|lg-]<utilityName>`
```css
.u-utilityName
.u-floatLeft
.u-lg-col6
```
#### Components
Syntax: `[<namespace>-]<ComponentName>[-descendentName][--modifierName]`
```css
.twt-Button /* Namespaced component */
.MyComponent /* Components pascal cased */
.Button--default /* Modified button style */
.Button--large
.Tweet
.Tweet-header /* Descendents */
.Tweet-bodyText
.Accordion.is-collapsed /* State of component */
.Accordion.is-expanded
```
### SASS
This project uses SASS, with some limitations on nesting. One-level-deep nesting
is allowed, but nesting may not extend a selector by using the `&` operator. For
example:
```sass
/* BAD */
.Button {
&--disabled {
...
}
}
/* GOOD */
.Button {
...
}
.Button--disabled {
...
}
```
### Mobile-first responsive approach
Style to the mobile breakpoint with your selectors, then use `min-width` media
queries to add any styles to the tablet or desktop breakpoints.
### Selector, rule ordering
- All selectors are sorted alphabetically and by type.
- HTML elements go above classes and IDs in a file.
- Rules are sorted alphabetically.
```scss
/* BAD */
.wrapper {
width: 940px;
margin: auto;
}
h1 {
color: red;
}
.article {
width: 100%;
padding: 32px;
}
/* GOOD */
h1 {
color: red;
}
.article {
padding: 32px;
width: 100%;
}
.wrapper {
margin: auto;
width: 940px;
}
```
## Adding a new integration
Before opening a pull request for the new integration, open an issue to discuss
said integration with the Uppy team. After discussing the integration, you can
get started on it. First off, you need to construct the basic components for
your integration. The following components are the current standard:
- `Dashboard`: Inline Dashboard (`inline: true`)
- `DashboardModal`: Dashboard as a modal
- `DragDrop`
- `ProgressBar`
- `StatusBar`
All these components should function as references to the normal component.
Depending on how the framework youre using handles references to the DOM, your
approach to creating these may be different. For example, in React, you can
assign a property of the component to the reference of a component
([see here](https://github.com/transloadit/uppy/blob/425f9ecfbc8bc48ce6b734e4fc14fa60d25daa97/packages/%40uppy/react/src/Dashboard.js#L47-L54)).
This may differ in your framework, but from what weve found, the concepts are
generally pretty similar.
If youre familiar with React, Vue or soon Svelte, it might be useful to read
through the code of those integrations, as they lay out a pretty good structure.
After the basic components have been built, here are a few more important tasks
to get done:
- Add TypeScript support in some capacity (if possible)
- Write documentation
- Add an example
- Configuring the build system
### Common issues
Before going into these tasks, here are a few common gotchas that you should be
aware of.
#### Dependencies
Your `package.json` should resemble something like this:
```json
{
"name": "@uppy/framework",
"dependencies": {
"@uppy/dashboard": "workspace:^",
"@uppy/drag-drop": "workspace:^",
"@uppy/progress-bar": "workspace:^",
"@uppy/utils": "workspace:^",
"prop-types": "^15.6.1"
},
"peerDependencies": {
"@uppy/core": "workspace:^"
},
"publishConfig": {
"access": "public"
}
}
```
The most important part about this is that `@uppy/core` is a peer dependency. If
your framework complains about `@uppy/core` not being resolved, you can also add
it as a dev dependency
### Adding TypeScript Support
This section wont be too in-depth, because TypeScript depends on your
framework. As general advice, prefer using `d.ts` files and vanilla JavaScript
over TypeScript files. This is circumstantial, but it makes handling the build
system a lot easier when TypeScript doesnt have to transpiled. The version of
typescript in the monorepo is `4.1`.
### Writing docs
Generally, documentation for integrations can be broken down into a few pieces
that apply to every component, and then documentation for each component. The
structure should look something like this:
- Installation
- Initializing Uppy (may vary depending on how the framework handles reactivity)
- Usage
- _For each component_
- Loading CSS
- Props
It may be easier to copy the documentation of earlier integrations and change
the parts that need to be changed rather than writing this from scratch.
Preferably, keep the documentation to one page. For the front-matter, write
something like:
```markdown
title: Framework Name type: docs module: "@uppy/framework" order: 0 category:
"Other Integrations"
```
This data is used to generate Uppys website.
Any change of the documentation that involves a security best practice must
substantiated with an external reference. See
[#3565](https://github.com/transloadit/uppy/issues/3565).
### Adding an example
You can likely use whatever code generation tool for your framework (ex.
`create-react-app`) to create this example. Make sure you add the same version
of `@uppy/core` to this as your peer dependency required, or you may run into
strange issues. Try to include all the components are some of their
functionality.
[The React example](https://github.com/transloadit/uppy/blob/main/examples/react-example/App.tsx)
is a great... well example of how to do this well.
### Integrating the build system
The biggest part of this is understanding Uppys build system. The high level
description is that `babel` goes through almost all the packages and transpiles
all the Javascript files in the `src` directory to more compatible JavaScript in
the `lib` folder. If youre using vanilla JavaScript for your integration (like
React and Vue do), then you can use this build system and use the files
generated as your entry points.
If youre using some kind of more abstract file format (like Svelte), then you
probably want do to a few things: add the directory name to
[this `IGNORE` regex](https://github.com/transloadit/uppy/blob/425f9ecfbc8bc48ce6b734e4fc14fa60d25daa97/bin/build-lib.js#L15);
add all your build dependencies to the root `package.json` (try to keep this
small); add a new `build:framework` script to the root `package.json`. This
script usually looks something like this:
```json
{
"scripts": {
"build:framework": "cd framework && yarn run build"
}
}
```
Then, add this script to the `build:js` script. Try running the `build:js`
script and make sure it does not error. It may also be of use to make sure that
global dependencies arent being used (ex. not having rollup locally and relying
on a global install), as these dependencies wont be present on the machines
handling building.
## I18n and locales
For more information about how to contribute to translations, see

View file

@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run:

View file

@ -37,7 +37,7 @@ jobs:
node-version: [lts/*]
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run:
@ -74,7 +74,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run:
@ -103,7 +103,7 @@ jobs:
SKIP_YARN_COREPACK_CHECK: true
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Install Node.js
uses: actions/setup-node@v4

View file

@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Set SHA commit in version
run:
(cd packages/@uppy/companion && node -e 'const
@ -46,7 +46,7 @@ jobs:
COMPOSE_DOCKER_CLI_BUILD: 0
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Docker meta
id: docker_meta
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
@ -58,7 +58,7 @@ jobs:
- uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- uses: docker/setup-buildx-action@v3
- name: Log in to DockerHub
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_PASSWORD}}
@ -77,7 +77,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Alter dockerfile
run: |
sed -i 's/^EXPOSE 3020$/EXPOSE $PORT/g' Dockerfile

View file

@ -36,7 +36,7 @@ jobs:
diff: ${{ steps.diff.outputs.OUTPUT_DIFF }}
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 2
ref: ${{ github.event.pull_request && format('refs/pull/{0}/merge', github.event.pull_request.number) || github.sha }}

View file

@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run:

View file

@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run:

View file

@ -11,9 +11,14 @@ jobs:
release:
name: Release
runs-on: ubuntu-latest
outputs:
companionWasReleased: ${{ steps.checkIfCompanionWasReleased.outputs.version }}
published: ${{ steps.changesets.outputs.published }}
steps:
- name: Checkout Repo
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 2
- name: Setup Node.js
uses: actions/setup-node@v4
@ -30,6 +35,13 @@ jobs:
- name: Build
run: corepack yarn build
- name: '@uppy/angular prepublish'
run: corepack yarn workspace @uppy/angular prepublishOnly
- run: |
echo '' >> .yarnrc.yml
echo 'npmAuthToken: "${NPM_TOKEN}"' >> .yarnrc.yml
- name: Create Release Pull Request or Publish
id: changesets
uses: changesets/action@v1
@ -41,3 +53,67 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Remove npmAuthToken from yarnrc
run: |
sed -i '/npmAuthToken:/d' .yarnrc.yml
- name: Check if Companion was released
id: checkIfCompanionWasReleased
if: steps.changesets.outputs.published == 'true'
run: |
git diff --exit-code --quiet HEAD^ -- packages/@uppy/companion/package.json || echo "version=$(jq -r .version < packages/@uppy/companion/package.json)" >> $GITHUB_OUTPUT
- name: Upload `uppy` to CDN
if: steps.changesets.outputs.published == 'true'
run: node packages/uppy/upload-to-cdn.js uppy
env:
EDGLY_KEY: ${{secrets.EDGLY_KEY}}
EDGLY_SECRET: ${{secrets.EDGLY_SECRET}}
- name: Upload `@uppy/locales` to CDN if it was released
if: steps.changesets.outputs.published == 'true'
run: node packages/uppy/upload-to-cdn.js @uppy/locales
env:
EDGLY_KEY: ${{secrets.EDGLY_KEY}}
EDGLY_SECRET: ${{secrets.EDGLY_SECRET}}
# See also companion-deploy.yml
docker:
name: DockerHub
needs: release
if: ${{ needs.release.outputs.published == 'true' && needs.release.outputs.companionWasReleased }}
runs-on: ubuntu-latest
env:
DOCKER_BUILDKIT: 0
COMPOSE_DOCKER_CLI_BUILD: 0
steps:
- name: Checkout sources
uses: actions/checkout@v5
- name: Docker meta
id: docker_meta
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
with:
images: transloadit/companion
tags: |
type=edge
type=semver,pattern={{version}},value=${{ needs.release.outputs.companionWasReleased }}
# set latest tag for default branch
type=raw,value=latest,enable=true
- uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- uses: docker/setup-buildx-action@v3
- name: Log in to DockerHub
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_PASSWORD}}
- name: Build and push
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
push: true
context: .
platforms: linux/amd64,linux/arm64
file: Dockerfile
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}

1
.npmrc Normal file
View file

@ -0,0 +1 @@
//registry.npmjs.org/:_authToken=${NPM_TOKEN}

View file

@ -0,0 +1,52 @@
diff --git a/dist/changesets-cli.cjs.js b/dist/changesets-cli.cjs.js
index 82ed39a6b2a38fe0aaabb71c2ec745c502dbe06a..c779498212942c5ee822501a5630c3755e335db8 100644
--- a/dist/changesets-cli.cjs.js
+++ b/dist/changesets-cli.cjs.js
@@ -634,9 +634,8 @@ async function getPublishTool(cwd) {
const pm = await packageManagerDetector.detect({
cwd
});
- if (!pm || pm.name !== "pnpm") return {
- name: "npm"
- };
+ if (!pm) return { name: "npm" };
+ if (pm.name === "yarn") return { name: "yarn" };
try {
let result = await spawn__default["default"]("pnpm", ["--version"], {
cwd
@@ -771,6 +770,9 @@ async function internalPublish(packageJson, opts, twoFactorState) {
} = publishTool.name === "pnpm" ? await spawn__default["default"]("pnpm", ["publish", "--json", ...publishFlags], {
env: Object.assign({}, process.env, envOverride),
cwd: opts.cwd
+ }) : publishTool.name === "yarn" ? await spawn__default["default"]("yarn", ["npm", "publish", ...publishFlags], {
+ env: Object.assign({}, process.env, envOverride),
+ cwd: opts.cwd,
}) : await spawn__default["default"](publishTool.name, ["publish", opts.publishDir, "--json", ...publishFlags], {
env: Object.assign({}, process.env, envOverride)
});
diff --git a/dist/changesets-cli.esm.js b/dist/changesets-cli.esm.js
index 1e945455b39b9c6424b26960b3d26a095ad980e4..3a7339db5d9d1ffac16c0ef5a7d56a9d506483a4 100644
--- a/dist/changesets-cli.esm.js
+++ b/dist/changesets-cli.esm.js
@@ -596,9 +596,8 @@ async function getPublishTool(cwd) {
const pm = await detect({
cwd
});
- if (!pm || pm.name !== "pnpm") return {
- name: "npm"
- };
+ if (!pm) return { name: "npm" };
+ if (pm.name === "yarn") return { name: "yarn" };
try {
let result = await spawn$1("pnpm", ["--version"], {
cwd
@@ -733,6 +732,9 @@ async function internalPublish(packageJson, opts, twoFactorState) {
} = publishTool.name === "pnpm" ? await spawn$1("pnpm", ["publish", "--json", ...publishFlags], {
env: Object.assign({}, process.env, envOverride),
cwd: opts.cwd
+ }) : publishTool.name === "yarn" ? await spawn$1("yarn", ["npm", "publish", ...publishFlags], {
+ env: Object.assign({}, process.env, envOverride),
+ cwd: opts.cwd,
}) : await spawn$1(publishTool.name, ["publish", opts.publishDir, "--json", ...publishFlags], {
env: Object.assign({}, process.env, envOverride)
});

View file

@ -1,12 +0,0 @@
diff --git a/package.json b/package.json
index d4133284745349488cf0e623b983c78fd7cc7fb7..52433fa0ecea99ebbfe5b94a8023f73350896f7d 100644
--- a/package.json
+++ b/package.json
@@ -6,6 +6,7 @@
"repository": "sindresorhus/p-queue",
"funding": "https://github.com/sponsors/sindresorhus",
"type": "module",
+ "main": "./dist/index.js",
"exports": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"

View file

@ -1,19 +0,0 @@
diff --git a/src/index.d.ts b/src/index.d.ts
index 74aacc0526ff554e9248c3f6fb44c353b5465efc..1b236d215a9db4cbc1c83f4d8bce24add202483e 100644
--- a/src/index.d.ts
+++ b/src/index.d.ts
@@ -1,14 +1,3 @@
-interface DOMRectReadOnly {
- readonly x: number;
- readonly y: number;
- readonly width: number;
- readonly height: number;
- readonly top: number;
- readonly right: number;
- readonly bottom: number;
- readonly left: number;
-}
-
declare global {
interface ResizeObserverCallback {
(entries: ResizeObserverEntry[], observer: ResizeObserver): void

View file

@ -1,13 +0,0 @@
diff --git a/src/utils.js b/src/utils.js
index 1f636c6617a71a68318dc587a1c9e6081020f9aa..b28e840ed08f26a4eadd242a6f541fbaefea0eda 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -112,7 +112,7 @@ const getArguments = cliArgs => {
}
function normalizeCommand (command) {
- return UTILS.isPackageScriptName(command) ? `npm run ${command}` : command
+ return UTILS.isPackageScriptName(command) ? `corepack yarn ${command}` : command
}
/**

View file

@ -1,12 +0,0 @@
diff --git a/package.json b/package.json
index f0ab3711ee4f490cbf961ebe6283ce2a28b6824b..644235a3ef52c974e946403a3fcdd137d01fad0c 100644
--- a/package.json
+++ b/package.json
@@ -25,6 +25,7 @@
"require": "./dist/index.js",
"import": "./wrapper.mjs"
},
+ "jest": "./dist/index.js",
"default": "./dist/esm-browser/index.js"
},
"./package.json": "./package.json"

View file

@ -8,3 +8,6 @@ compressionLevel: mixed
initScope: uppy
nodeLinker: node-modules
npmPublishAccess: public

View file

@ -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.18.0/uppy.min.js"></script>`)
(`<script src="https://releases.transloadit.com/uppy/v4.18.2/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

View file

@ -30,7 +30,7 @@ Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
a versatile API to handle any file in your app.
<table>
<tr><th>Tests</th><td><img src="https://github.com/transloadit/uppy/workflows/CI/badge.svg" alt="CI status for Uppy tests"></td><td><img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests"></td><td><img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests"></td></tr>
<tr><th>Tests</th><td><img src="https://github.com/transloadit/uppy/workflows/CI/badge.svg" alt="CI status for Uppy tests"></td><td><img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests"></td></tr>
<tr><th>Deploys</th><td><img src="https://github.com/transloadit/uppy/workflows/Release/badge.svg" alt="CI status for CDN deployment"></td><td><img src="https://github.com/transloadit/uppy/workflows/Companion%20Edge%20Deploy/badge.svg" alt="CI status for Companion deployment"></td><td><img src="https://github.com/transloadit/uppy.io/workflows/Deploy%20to%20GitHub%20Pages/badge.svg" alt="CI status for website deployment"></td></tr>
</table>
@ -61,6 +61,22 @@ const uppy = new Uppy()
**[read the docs](https://uppy.io/docs)** for more details on how to use Uppy
and its plugins.
## Integrations
Uppy has first-class support for plain JS/HTML,
[React](https://uppy.io/docs/react/), [Svelte](https://uppy.io/docs/svelte/),
[Vue](https://uppy.io/docs/vue/), and [Angular](https://uppy.io/docs/angular/).
For the supported frameworks (except Angular) Uppy offers three ways to build user interfaces:
1. **Pre-composed, plug-and-play components.** Mainly `<Dashboard />`.
The downside is that you cant customize the UI.
2. **Headless components.** Smaller components, easier to override the styles
or compose them together with your own components.
3. **Hooks.** Attach our logic to your own components, no restrictions, create a
tailor-made UI.
## Features
- Lightweight, modular plugin-based architecture, light on dependencies :zap:
@ -87,7 +103,7 @@ npm install @uppy/core @uppy/dashboard @uppy/tus
```
Add CSS
[uppy.min.css](https://releases.transloadit.com/uppy/v4.18.0/uppy.min.css),
[uppy.min.css](https://releases.transloadit.com/uppy/v4.18.2/uppy.min.css),
either to your HTML pages `<head>` or include in JS, if your bundler of choice
supports it.
@ -101,7 +117,7 @@ CDN. In that case `Uppy` will attach itself to the global `window.Uppy` object.
```html
<!-- 1. Add CSS to `<head>` -->
<link
href="https://releases.transloadit.com/uppy/v4.18.0/uppy.min.css"
href="https://releases.transloadit.com/uppy/v4.18.2/uppy.min.css"
rel="stylesheet"
/>
@ -112,7 +128,7 @@ CDN. In that case `Uppy` will attach itself to the global `window.Uppy` object.
Uppy,
Dashboard,
Tus,
} from 'https://releases.transloadit.com/uppy/v4.18.0/uppy.min.mjs'
} from 'https://releases.transloadit.com/uppy/v4.18.2/uppy.min.mjs'
const uppy = new Uppy()
uppy.use(Dashboard, { target: '#files-drag-drop' })
@ -138,14 +154,7 @@ CDN. In that case `Uppy` will attach itself to the global `window.Uppy` object.
- [`Dashboard`](https://uppy.io/docs/dashboard/) — universal UI with previews,
progress bars, metadata editor and all the cool stuff. Required for most UI
plugins like Webcam and Instagram
- [`Progress Bar`](https://uppy.io/docs/progress-bar/) — minimal progress bar
that fills itself when upload progresses
- [`Status Bar`](https://uppy.io/docs/status-bar/) — more detailed progress,
pause/resume/cancel buttons, percentage, speed, uploaded/total sizes (included
by default with `Dashboard`)
- [`Informer`](https://uppy.io/docs/informer/) — send notifications like “smile”
before taking a selfie or “upload failed” when all is lost (also included by
default with `Dashboard`)
- Headless components ([react](https://uppy.io/docs/react/), [svelte](https://uppy.io/docs/svelte/), [vue](https://uppy.io/docs/vue/))
### Sources
@ -177,8 +186,6 @@ server-side component, is needed for a plugin to work.
backend out there (like Apache, Nginx)
- [`AWS S3`](https://uppy.io/docs/aws-s3/) — plain upload to AWS S3 or
compatible services
- [`AWS S3 Multipart`](https://uppy.io/docs/aws-s3-multipart/) — S3-style
“Multipart” upload to AWS or compatible services
### File Processing
@ -194,6 +201,8 @@ server-side component, is needed for a plugin to work.
image previews (included by default with `Dashboard`)
- [`Form`](https://uppy.io/docs/form/) — collects metadata from `<form>` right
before an Uppy upload, then optionally appends results back to the form
- [`Redux`](https://uppy.io/docs/guides/custom-stores#reduxstore) — for your
emerging [time traveling](https://github.com/gaearon/redux-devtools) needs
## React

View file

@ -10,6 +10,7 @@
"includes": [
"packages/**",
"examples/**",
"scripts/**",
"bin/**",
"e2e/**",
"private/**",
@ -26,14 +27,26 @@
},
"linter": {
"enabled": true,
"includes": ["!**/*.vue", "!**/*.svelte"],
"includes": [
"packages/**",
"examples/**",
"scripts/**",
"private/**",
"!packages/**/{dist,lib}/**",
"!node_modules",
"!.svelte-kit",
"!packages/@uppy/components/src/input.css",
"!**/*.vue",
"!**/*.svelte"
],
"rules": {
"recommended": true,
"suspicious": {
"noExplicitAny": "off"
},
"correctness": {
"noUnusedImports": "off",
"useExhaustiveDependencies": "error",
"useHookAtTopLevel": "error",
"noUnusedFunctionParameters": "off",
"noUnusedVariables": {
"level": "error",
@ -47,6 +60,10 @@
},
"a11y": {
"noSvgWithoutTitle": "off"
},
"nursery": {
"noNestedComponentDefinitions": "error",
"noReactPropAssign": "error"
}
}
},

View file

@ -19,8 +19,11 @@
"@angular/router": "^18.0.0",
"@uppy/angular": "workspace:*",
"@uppy/core": "workspace:*",
"@uppy/dashboard": "workspace:*",
"@uppy/google-drive": "workspace:*",
"@uppy/progress-bar": "workspace:*",
"@uppy/tus": "workspace:*",
"@uppy/utils": "workspace:*",
"@uppy/webcam": "workspace:*",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",

View file

@ -18,7 +18,7 @@
"express": "^4.19.2",
"express-session": "^1.17.3",
"npm-run-all": "^4.1.5",
"vite": "^5.4.17"
"vite": "^7.0.6"
},
"private": true,
"engines": {

View file

@ -3,7 +3,6 @@
import { getAllowedHosts, Provider, tokenStorage } from '@uppy/companion-client'
import { UIPlugin } from '@uppy/core'
import { ProviderViews } from '@uppy/provider-views'
import { h } from 'preact'
const defaultOptions = {}

View file

@ -22,7 +22,7 @@
"express": "^4.19.2",
"express-session": "^1.15.6",
"npm-run-all": "^4.1.2",
"vite": "^5.4.17"
"vite": "^7.0.6"
},
"scripts": {
"start": "npm-run-all --parallel start:server start:client",

View file

@ -12,7 +12,7 @@
"devDependencies": {
"dotenv": "^16.0.1",
"express": "^4.19.2",
"vite": "^5.4.17"
"vite": "^7.0.6"
},
"private": true,
"scripts": {

View file

@ -46,6 +46,7 @@ const companionOptions = {
},
// you can also add options for additional providers here
},
corsOrigins: ['*'], // Note: this is not safe for production
server: {
host: 'localhost:3020',
protocol: 'http',

View file

@ -9,7 +9,7 @@
"serve": "vite preview"
},
"dependencies": {
"@tailwindcss/vite": "^4.0.9",
"@tailwindcss/vite": "^4.1.11",
"@uppy/core": "workspace:*",
"@uppy/react": "workspace:*",
"@uppy/remote-sources": "workspace:*",
@ -27,7 +27,7 @@
"@vitest/browser": "^3.2.4",
"playwright": "^1.53.2",
"typescript": "^5.7.3",
"vite": "^7.0.3",
"vite": "^7.0.6",
"vitest": "^3.2.4",
"vitest-browser-react": "^1.0.0"
}

View file

@ -1,5 +1,3 @@
import React from 'react'
type ButtonProps = {
type: 'button'
onClick: () => void

View file

@ -1,5 +1,5 @@
import { useScreenCapture } from '@uppy/react'
import React, { useEffect } from 'react'
import { useEffect } from 'react'
import MediaCapture from './MediaCapture.tsx'
export interface ScreenCaptureProps {

View file

@ -1,5 +1,5 @@
import { useWebcam } from '@uppy/react'
import React, { useEffect } from 'react'
import { useEffect } from 'react'
import MediaCapture from './MediaCapture.tsx'
export interface WebcamProps {

View file

@ -4,7 +4,7 @@
"type": "module",
"devDependencies": {
"npm-run-all": "^4.1.5",
"vite": "^5.4.17"
"vite": "^7.0.6"
},
"dependencies": {
"@uppy/core": "workspace:*",

View file

@ -36,6 +36,7 @@ function Footer() {
}
function FormFields(fields) {
// biome-ignore lint/nursery/noNestedComponentDefinitions: not a react component
function Field([name, value]) {
if (name === 'transloadit') return ''
let isValueJSON = false
@ -75,6 +76,7 @@ function FormFields(fields) {
}
function UploadsList(uploads) {
// biome-ignore lint/nursery/noNestedComponentDefinitions: not a react component
function Upload(upload) {
return `<li>${e(upload.name)}</li>`
}
@ -87,10 +89,12 @@ function UploadsList(uploads) {
}
function ResultsList(results) {
// biome-ignore lint/nursery/noNestedComponentDefinitions: not a react component
function Result(result) {
return `<li>${e(result.name)} <a href="${result.ssl_url}" target="_blank">View</a></li>`
}
// biome-ignore lint/nursery/noNestedComponentDefinitions: not a react component
function ResultsSection(stepName) {
return `
<h2>${e(stepName)}</h2>

View file

@ -20,11 +20,11 @@
"vue": "^3.5.14"
},
"devDependencies": {
"@tailwindcss/vite": "^4.0.0",
"@vitejs/plugin-vue": "^5.0.0",
"@tailwindcss/vite": "^4.1.11",
"@vitejs/plugin-vue": "^6.0.1",
"@vitest/browser": "^3.2.4",
"tailwindcss": "^4.0.0",
"vite": "^6.2.0",
"vite": "^7.0.6",
"vitest": "^3.2.4",
"vitest-browser-vue": "^1.0.0"
}

View file

@ -11,7 +11,7 @@
},
"devDependencies": {
"npm-run-all": "^4.1.5",
"vite": "^5.4.17"
"vite": "^7.0.6"
},
"private": true,
"scripts": {

View file

@ -11,7 +11,7 @@
},
"devDependencies": {
"npm-run-all": "^4.1.3",
"vite": "^5.4.17"
"vite": "^7.0.6"
},
"private": true,
"scripts": {

View file

@ -10,7 +10,7 @@
},
"devDependencies": {
"npm-run-all": "^4.1.3",
"vite": "^5.4.17"
"vite": "^7.0.6"
},
"private": true,
"scripts": {

View file

@ -10,7 +10,7 @@
},
"devDependencies": {
"npm-run-all": "^4.1.3",
"vite": "^5.4.17"
"vite": "^7.0.6"
},
"private": true,
"scripts": {

View file

@ -12,8 +12,8 @@
"private/*"
],
"scripts": {
"build": "turbo run build build:css --filter='./packages/@uppy/*' --filter='./packages/uppy'",
"build:clean": "cp .gitignore .gitignore.bak && printf '!node_modules\n!**/node_modules/**/*\n' >> .gitignore; git clean -Xfd packages e2e .parcel-cache coverage .turbo; mv .gitignore.bak .gitignore",
"build": "turbo run --no-daemon build build:css --filter='./packages/@uppy/*' --filter='./packages/uppy'",
"build:clean": "git clean -Xfd packages e2e .parcel-cache coverage .turbo .turbo -e '!node_modules' -e '!**/node_modules/**/*'",
"build:watch": "yarn build && turbo watch build build:css --filter='./packages/@uppy/*' --filter='./packages/uppy'",
"migrate:components": "yarn workspace @uppy/components migrate",
"check": "yarn exec biome check --write",
@ -24,20 +24,19 @@
"test": "turbo run test --filter='./packages/@uppy/*' --filter='./packages/uppy' --filter='./examples/{react,vue,sveltekit}'",
"test:watch": "turbo watch test --filter='./packages/@uppy/*' --filter='./packages/uppy'",
"typecheck": "turbo run typecheck --filter='./packages/@uppy/*' --filter='./packages/uppy'",
"version": "changeset version && corepack yarn install --mode=update-lockfile",
"version": "changeset version && corepack yarn install --mode=update-lockfile && node scripts/update-readme-versions.mjs",
"release": "changeset publish"
},
"devDependencies": {
"@biomejs/biome": "2.0.5",
"@changesets/changelog-github": "^0.5.1",
"@changesets/cli": "^2.29.5",
"@changesets/cli": "patch:@changesets/cli@npm%3A2.29.5#~/.yarn/patches/@changesets-cli-npm-2.29.5-68d8030bf3.patch",
"npm-run-all": "^4.1.5",
"turbo": "^2.5.4",
"typescript": "^5.8.3"
},
"packageManager": "yarn@4.4.1+sha224.fd21d9eb5fba020083811af1d4953acc21eeb9f6ff97efd1b3f9d4de",
"engines": {
"node": "^16.15.0 || >=18.0.0",
"yarn": "3.6.1"
"node": ">=20.19.0"
}
}

View file

@ -39,3 +39,9 @@ testem.log
# System files
.DS_Store
Thumbs.db
# Generated files from prepublishOnly
projects/uppy/angular/.npmignore
projects/uppy/angular/fesm2022/
projects/uppy/angular/index.d.ts
projects/uppy/angular/public-api.d.ts

View file

@ -30,6 +30,9 @@
"@types/jasmine": "~5.1.0",
"@typescript-eslint/eslint-plugin": "^7.2.0",
"@typescript-eslint/parser": "^7.2.0",
"@typescript-eslint/types": "^7.2.0",
"@typescript-eslint/utils": "^7.2.0",
"eslint": "^8.57.0",
"jasmine-core": "~5.1.0",
"karma": "~6.4.0",
"karma-chrome-launcher": "~3.2.0",
@ -37,6 +40,6 @@
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"ng-packagr": "^19.0.0",
"typescript": "^5.6"
"typescript": "~5.5.4"
}
}

View file

@ -0,0 +1,30 @@
# @uppy/angular
## 0.9.2
### Patch Changes
- 8f8ee09: Nothing changed, just a release to fix the broken previous release.
## 0.9.1
### Patch Changes
- 7eec173: Remove "files" array from package.json
## 0.9.0
### Minor Changes
- 8b8ab01: Declare components as standalone & support 20.x
### Patch Changes
- 1b1a9e3: Define "files" in package.json
- Updated dependencies [1b1a9e3]
- @uppy/progress-bar@4.3.2
- @uppy/status-bar@4.2.2
- @uppy/dashboard@4.4.2
- @uppy/drag-drop@4.2.2
- @uppy/utils@6.2.2
- @uppy/core@4.5.2

View file

@ -1,7 +1,7 @@
{
"name": "@uppy/angular",
"description": "Angular component wrappers around Uppy's official UI plugins.",
"version": "0.8.0",
"version": "0.9.2",
"license": "MIT",
"homepage": "https://uppy.io",
"keywords": [
@ -25,8 +25,8 @@
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "^17.0.0 || ^18.0.0 || ^19.0.0",
"@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0",
"@angular/common": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
"@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
"@uppy/core": "workspace:^",
"@uppy/dashboard": "workspace:^",
"@uppy/utils": "workspace:^"

View file

@ -2,6 +2,8 @@ import { ChangeDetectionStrategy, Component } from "@angular/core";
import { Uppy } from "@uppy/core";
import type * as Dashboard from "@uppy/dashboard";
import type { Body, Meta } from "@uppy/utils";
import { DashboardModalComponent } from "./dashboard-modal.component";
@Component({
selector: "uppy-dashboard-demo",
@ -10,8 +12,10 @@ import type { Body, Meta } from "@uppy/utils";
[props]="props"
></uppy-dashboard-modal>`,
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
imports: [DashboardModalComponent],
})
export class DashboardModalDemoComponent<M extends Meta, B extends Body> {
uppy: Uppy<M, B> = new Uppy({ debug: true, autoProceed: true });
props?: Dashboard.DashboardOptions<M, B>;
props: Dashboard.DashboardOptions<M, B> = {};
}

View file

@ -18,6 +18,7 @@ import { UppyAngularWrapper } from "../../utils/wrapper";
selector: "uppy-dashboard-modal",
template: "",
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
})
export class DashboardModalComponent<M extends Meta, B extends Body>
extends UppyAngularWrapper<M, B, DashboardOptions<M, B>, Dashboard<M, B>>

View file

@ -2,13 +2,16 @@ import { ChangeDetectionStrategy, Component } from "@angular/core";
import { Uppy } from "@uppy/core";
import type * as Dashboard from "@uppy/dashboard";
import type { Body, Meta } from "@uppy/utils";
import { DashboardComponent } from "./dashboard.component";
@Component({
selector: "uppy-dashboard-demo",
template: `<uppy-dashboard [uppy]="uppy" [props]="props"></uppy-dashboard>`,
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
imports: [DashboardComponent],
})
export class DashboardDemoComponent<M extends Meta, B extends Body> {
uppy: Uppy<M, B> = new Uppy({ debug: true, autoProceed: true });
props?: Dashboard.DashboardOptions<M, B>;
props: Dashboard.DashboardOptions<M, B> = {};
}

View file

@ -18,6 +18,7 @@ import { UppyAngularWrapper } from "../../utils/wrapper";
selector: "uppy-dashboard",
template: "",
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
})
export class DashboardComponent<M extends Meta, B extends Body>
extends UppyAngularWrapper<M, B, DashboardOptions<M, B>>

View file

@ -1,5 +1,27 @@
# @uppy/audio
## 2.2.2
### Patch Changes
- 1b1a9e3: Define "files" in package.json
- Updated dependencies [1b1a9e3]
- @uppy/utils@6.2.2
- @uppy/core@4.5.2
## 2.2.0
### Minor Changes
- 0c24c5a: Use TypeScript compiler instead of Babel
### Patch Changes
- Updated dependencies [0c24c5a]
- Updated dependencies [0c24c5a]
- @uppy/core@4.5.0
- @uppy/utils@6.2.0
## 2.1.3
Released: 2025-05-18

View file

@ -1,7 +1,7 @@
{
"name": "@uppy/audio",
"description": "Uppy plugin that records audio using the devices microphone.",
"version": "2.1.3",
"version": "2.2.2",
"license": "MIT",
"main": "lib/index.js",
"style": "dist/style.min.css",
@ -27,6 +27,12 @@
"type": "git",
"url": "git+https://github.com/transloadit/uppy.git"
},
"files": [
"src",
"lib",
"dist",
"CHANGELOG.md"
],
"exports": {
".": "./lib/index.js",
"./css/style.css": "./dist/style.css",

View file

@ -9,7 +9,6 @@ import type {
import { UIPlugin } from '@uppy/core'
import type { LocaleStrings } from '@uppy/utils'
import { getFileTypeExtension } from '@uppy/utils'
import { h } from 'preact'
import packageJson from '../package.json' with { type: 'json' }
import locale from './locale.js'
import PermissionsScreen from './PermissionsScreen.js'

View file

@ -1,5 +1,3 @@
import { h } from 'preact'
export interface AudioSourceSelectProps {
currentDeviceId: string | MediaStreamTrack | null | undefined
audioSources: MediaDeviceInfo[]

View file

@ -1,5 +1,4 @@
import type { I18n } from '@uppy/utils'
import { h } from 'preact'
interface DiscardButtonProps {
onDiscard: () => void

View file

@ -1,5 +1,5 @@
import type { I18n } from '@uppy/utils'
import { h } from 'preact'
import type { h } from 'preact'
interface PermissionsScreenProps {
icon: () => h.JSX.Element | null

View file

@ -1,5 +1,4 @@
import type { I18n } from '@uppy/utils'
import { h } from 'preact'
interface RecordButtonProps {
recording: boolean

View file

@ -1,4 +1,3 @@
import { h } from 'preact'
import formatSeconds from './formatSeconds.js'
interface RecordingLengthProps {

View file

@ -1,5 +1,4 @@
import type { I18n } from '@uppy/utils'
import { h } from 'preact'
import { useEffect, useRef } from 'preact/hooks'
import AudioSourceSelect, {
type AudioSourceSelectProps,

View file

@ -1,5 +1,4 @@
import type { I18n } from '@uppy/utils'
import { h } from 'preact'
interface SubmitButtonProps {
onSubmit: () => void

View file

@ -1,5 +1,29 @@
# @uppy/aws-s3
## 4.3.2
### Patch Changes
- 1b1a9e3: Define "files" in package.json
- Updated dependencies [1b1a9e3]
- @uppy/companion-client@4.5.2
- @uppy/utils@6.2.2
- @uppy/core@4.5.2
## 4.3.0
### Minor Changes
- 0c24c5a: Use TypeScript compiler instead of Babel
### Patch Changes
- Updated dependencies [0c24c5a]
- Updated dependencies [0c24c5a]
- @uppy/core@4.5.0
- @uppy/companion-client@4.5.0
- @uppy/utils@6.2.0
## 4.2.3
Released: 2025-01-22

View file

@ -1,7 +1,7 @@
{
"name": "@uppy/aws-s3",
"description": "Upload to Amazon S3 with Uppy",
"version": "4.2.3",
"version": "4.3.2",
"license": "MIT",
"main": "lib/index.js",
"type": "module",
@ -28,6 +28,12 @@
"type": "git",
"url": "git+https://github.com/transloadit/uppy.git"
},
"files": [
"src",
"lib",
"dist",
"CHANGELOG.md"
],
"exports": {
".": "./lib/index.js",
"./package.json": "./package.json"

View file

@ -1,5 +1,32 @@
# @uppy/box
## 3.3.2
### Patch Changes
- 1b1a9e3: Define "files" in package.json
- Updated dependencies [1b1a9e3]
- Updated dependencies [c66fd85]
- @uppy/companion-client@4.5.2
- @uppy/provider-views@4.5.2
- @uppy/utils@6.2.2
- @uppy/core@4.5.2
## 3.3.0
### Minor Changes
- 0c24c5a: Use TypeScript compiler instead of Babel
### Patch Changes
- Updated dependencies [0c24c5a]
- Updated dependencies [0c24c5a]
- @uppy/core@4.5.0
- @uppy/companion-client@4.5.0
- @uppy/provider-views@4.5.0
- @uppy/utils@6.2.0
## 3.2.3
Released: 2025-05-18

View file

@ -1,7 +1,7 @@
{
"name": "@uppy/box",
"description": "Import files from Box, into Uppy.",
"version": "3.2.3",
"version": "3.3.2",
"license": "MIT",
"main": "lib/index.js",
"type": "module",
@ -24,6 +24,12 @@
"type": "git",
"url": "git+https://github.com/transloadit/uppy.git"
},
"files": [
"src",
"lib",
"dist",
"CHANGELOG.md"
],
"exports": {
".": "./lib/index.js",
"./package.json": "./package.json"

View file

@ -1,5 +1,27 @@
# @uppy/companion-client
## 4.5.2
### Patch Changes
- 1b1a9e3: Define "files" in package.json
- Updated dependencies [1b1a9e3]
- @uppy/utils@6.2.2
- @uppy/core@4.5.2
## 4.5.0
### Minor Changes
- 0c24c5a: Use TypeScript compiler instead of Babel
### Patch Changes
- Updated dependencies [0c24c5a]
- Updated dependencies [0c24c5a]
- @uppy/core@4.5.0
- @uppy/utils@6.2.0
## 4.4.2
Released: 2025-05-18
@ -92,7 +114,7 @@ Included in: Uppy v3.22.2
Released: 2024-02-19
Included in: Uppy v3.22.0
- @uppy/aws-s3-multipart,@uppy/aws-s3,@uppy/companion-client,@uppy/tus,@uppy/xhr-upload: update `uppyfile` objects before emitting events (antoine du hamel / #4928)
- @uppy/aws-s3-multipart,@uppy/aws-s3,@uppy/companion-client,@uppy/tus,@uppy/xhr-upload: update `uppyfile` objects before emitting events (antoine du hamel / #4928)
- @uppy/companion-client: fix tests and linter (antoine du hamel / #4890)
- @uppy/companion-client: migrate to ts (merlijn vos / #4864)
- @uppy/companion-client: fix `typeerror` (antoine du hamel)

View file

@ -1,7 +1,7 @@
{
"name": "@uppy/companion-client",
"description": "Client library for communication with Companion. Intended for use in Uppy plugins.",
"version": "4.4.2",
"version": "4.5.2",
"license": "MIT",
"main": "lib/index.js",
"type": "module",
@ -26,6 +26,12 @@
"type": "git",
"url": "git+https://github.com/transloadit/uppy.git"
},
"files": [
"src",
"lib",
"dist",
"CHANGELOG.md"
],
"exports": {
".": "./lib/index.js",
"./package.json": "./package.json"

View file

@ -1,12 +1,22 @@
# @uppy/companion
## 5.9.0
### Minor Changes
- 0c24c5a: Add provider name to metadata for observability
### Patch Changes
- 0c24c5a: Make StreamableBlob spec compliant for Node.js 24+
## 5.8.0
Released: 2025-06-02
Included in: Uppy v4.17.0
- @uppy/companion: add max filename length env var (Freeman / #5763)
- @uppy/companion: fix cookie maxAge to milliseconds (zolotarov@brights.io / #5746)
- @uppy/companion: fix cookie maxAge to milliseconds (zolotarov@brights.io / #5746)
- @uppy/companion: improve Zoom folder structure (Merlijn Vos / #5739)
## 5.7.0
@ -30,7 +40,7 @@ Released: 2025-02-25
Included in: Uppy v4.13.3
- @uppy/companion: log when tus uploaded size differs (Mikael Finstad / #5647)
- @uppy/companion: remove redundant HEAD request for file size (Mikael Finstad / #5648)
- @uppy/companion: remove redundant HEAD request for file size (Mikael Finstad / #5648)
## 5.5.1
@ -80,7 +90,7 @@ Included in: Uppy v4.7.0
Released: 2024-10-31
Included in: Uppy v4.6.0
- docs,@uppy/companion: disallow corsOrigins "*" (Mikael Finstad / #5496)
- docs,@uppy/companion: disallow corsOrigins "\*" (Mikael Finstad / #5496)
## 5.1.2
@ -237,7 +247,7 @@ Released: 2024-06-18
Included in: Uppy v3.27.0
- @uppy/google-photos: add plugin (Mikael Finstad / #5061)
- @uppy/companion: Bump ws from 8.8.1 to 8.17.1 (#5256)
- @uppy/companion: Bump ws from 8.8.1 to 8.17.1 (#5256)
## 4.13.3
@ -284,9 +294,9 @@ Released: 2023-12-12
Included in: Uppy v3.21.0
- @uppy/companion: fix double tus uploads (Mikael Finstad / #4816)
- @uppy/companion: fix accelerated endpoints for presigned POST (Mikael Finstad / #4817)
- @uppy/companion: fix accelerated endpoints for presigned POST (Mikael Finstad / #4817)
- @uppy/companion: fix `authProvider` property inconsistency (Mikael Finstad / #4672)
- @uppy/companion: send certain onedrive errors to the user (Mikael Finstad / #4671)
- @uppy/companion: send certain onedrive errors to the user (Mikael Finstad / #4671)
- @uppy/companion: Provider user sessions (Mikael Finstad / #4619)
## 4.11.0
@ -384,7 +394,7 @@ Included in: Uppy v3.11.0
Released: 2023-06-19
Included in: Uppy v3.10.0
- @uppy/companion: switch from aws-sdk v2 to @aws-sdk/* (v3) (Scott Bessler / #4285)
- @uppy/companion: switch from aws-sdk v2 to @aws-sdk/\* (v3) (Scott Bessler / #4285)
- @uppy/companion,@uppy/core,@uppy/dashboard,@uppy/golden-retriever,@uppy/status-bar,@uppy/utils: Migrate all lodash' per-method-packages usage to lodash. (LinusMain / #4274)
- @uppy/companion: revert randomness from file names (Mikael Finstad / #4509)
- @uppy/companion: Custom provider fixes (Mikael Finstad / #4498)

View file

@ -1,6 +1,6 @@
{
"name": "@uppy/companion",
"version": "5.8.0",
"version": "5.9.1",
"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",
@ -88,7 +88,7 @@
"@types/lodash": "4.14.191",
"@types/morgan": "1.7.37",
"@types/ms": "0.7.31",
"@types/node": "^20.0.0",
"@types/node": "^20.19.0",
"@types/react": "^18.0.0",
"@types/request": "2.48.8",
"@types/webpack": "^5.28.0",

View file

@ -42,12 +42,15 @@ const styleText =
/**
* message log
*
* @typedef {import('node:util').styleText} styleText
* @typedef {Parameters<styleText>[0]} Colors
*
* @param {object} params
* @param {string | Error} params.arg the message or error to log
* @param {string} params.tag a unique tag to easily search for this message
* @param {string} params.level error | info | debug
* @param {string} [params.traceId] a unique id to easily trace logs tied to a request
* @param {string[]} [params.color] Format(s) that can be passed to `util.styleText`.
* @param {Colors} [params.color] Format(s) that can be passed to `util.styleText`.
*/
const log = ({ arg, tag = '', level, traceId = '', color = [] }) => {
const time = new Date().toISOString()

View file

@ -1,5 +1,36 @@
# @uppy/components
## 0.3.2
### Patch Changes
- 1b1a9e3: Define "files" in package.json
- Updated dependencies [1b1a9e3]
- @uppy/remote-sources@2.4.2
- @uppy/screen-capture@4.4.2
- @uppy/image-editor@3.4.2
- @uppy/webcam@4.3.2
- @uppy/audio@2.2.2
- @uppy/core@4.5.2
## 0.3.0
### Minor Changes
- 0c24c5a: Use TypeScript compiler instead of Babel
### Patch Changes
- Updated dependencies [0c24c5a]
- Updated dependencies [0c24c5a]
- Updated dependencies [0c24c5a]
- @uppy/webcam@4.3.0
- @uppy/core@4.5.0
- @uppy/audio@2.2.0
- @uppy/image-editor@3.4.0
- @uppy/remote-sources@2.4.0
- @uppy/screen-capture@4.4.0
## 0.2.0
Released: 2025-06-30

View file

@ -1,7 +1,7 @@
{
"name": "@uppy/components",
"description": "Headless Uppy components, made in Preact",
"version": "0.2.0",
"version": "0.3.2",
"license": "MIT",
"main": "lib/index.js",
"type": "module",
@ -23,6 +23,12 @@
"type": "git",
"url": "git+https://github.com/transloadit/uppy.git"
},
"files": [
"src",
"lib",
"dist",
"CHANGELOG.md"
],
"scripts": {
"build": "tsc --build tsconfig.build.json",
"build:css": "tailwindcss -m -i ./src/input.css -o ./dist/styles.css",

View file

@ -1,5 +1,4 @@
import { clsx } from 'clsx'
import { h } from 'preact'
import { useMemo } from 'preact/hooks'
import { createDropzone } from './hooks/dropzone.js'
import type { NonNullableUppyContext, UppyContext } from './types.js'
@ -29,7 +28,6 @@ export default function Dropzone(props: DropzoneProps) {
className="uppy-reset"
data-uppy-element="dropzone"
role="presentation"
tabIndex={0}
>
<input
{...getInputProps()}
@ -39,6 +37,8 @@ export default function Dropzone(props: DropzoneProps) {
/>
<div
{...getRootProps()}
// biome-ignore lint/a11y/noNoninteractiveTabindex: it is also a button. getRootProps returns keyboard event handlers
tabIndex={0}
style={{
width: width || '100%',
height: height || '100%',

View file

@ -1,6 +1,6 @@
import type { Body, Meta, UppyEventMap, UppyFile } from '@uppy/core'
import { clsx } from 'clsx'
import { Fragment, h } from 'preact'
import { Fragment } from 'preact'
import { useEffect, useState } from 'preact/hooks'
import prettyBytes from 'pretty-bytes'
import { Thumbnail } from './index.js'

View file

@ -1,6 +1,6 @@
import type { Body, Meta, UppyEventMap, UppyFile } from '@uppy/core'
import { clsx } from 'clsx'
import { Fragment, h } from 'preact'
import { Fragment } from 'preact'
import { useEffect, useState } from 'preact/hooks'
import prettyBytes from 'pretty-bytes'
import { Thumbnail, type UppyContext } from './index.js'

View file

@ -1,4 +1,3 @@
import { h } from 'preact'
import type { UppyContext } from './types.js'
export type ProviderIconProps = {

View file

@ -1,5 +1,4 @@
import type { Body, Meta, UppyFile } from '@uppy/core'
import { h } from 'preact'
import { useEffect, useMemo } from 'preact/hooks'
import type { UppyContext } from './types.js'

View file

@ -1,5 +1,4 @@
import { clsx } from 'clsx'
import { h } from 'preact'
import type { UppyContext } from './types.js'
export type UploadButtonProps = {

View file

@ -76,6 +76,18 @@ export function createDropzone<
input?.click()
}
const handleKeyPress = (event: KeyboardEvent) => {
// taken from https://github.com/react-dropzone/react-dropzone/blob/d6911c991e077151e302b599b92269432ab0472b/src/index.js#L830C1-L836C1
if (
event.key === ' ' ||
event.key === 'Enter' ||
event.keyCode === 32 ||
event.keyCode === 13
) {
handleClick()
}
}
const handleFileInputChange = (event: ChangeEventType) => {
const input = event.target as HTMLInputElement
const files = Array.from(input.files ?? [])
@ -103,6 +115,7 @@ export function createDropzone<
onDragLeave: handleDragLeave,
onDrop: handleDrop,
onClick: handleClick,
onKeyPress: handleKeyPress,
}),
getInputProps: () => ({
id: fileInputId,

View file

@ -1,5 +1,27 @@
# @uppy/compressor
## 2.3.2
### Patch Changes
- 1b1a9e3: Define "files" in package.json
- Updated dependencies [1b1a9e3]
- @uppy/utils@6.2.2
- @uppy/core@4.5.2
## 2.3.0
### Minor Changes
- 0c24c5a: Use TypeScript compiler instead of Babel
### Patch Changes
- Updated dependencies [0c24c5a]
- Updated dependencies [0c24c5a]
- @uppy/core@4.5.0
- @uppy/utils@6.2.0
## 2.2.0
Released: 2025-01-06

View file

@ -1,7 +1,7 @@
{
"name": "@uppy/compressor",
"description": "Uppy plugin that compresses images before upload, saving up to 60% in size",
"version": "2.2.1",
"version": "2.3.2",
"license": "MIT",
"main": "lib/index.js",
"keywords": [
@ -21,6 +21,12 @@
"type": "git",
"url": "git+https://github.com/transloadit/uppy.git"
},
"files": [
"src",
"lib",
"dist",
"CHANGELOG.md"
],
"exports": {
".": "./lib/index.js",
"./package.json": "./package.json"

View file

@ -1,5 +1,27 @@
# @uppy/core
## 4.5.2
### Patch Changes
- 1b1a9e3: Define "files" in package.json
- Updated dependencies [1b1a9e3]
- @uppy/store-default@4.3.2
- @uppy/utils@6.2.2
## 4.5.0
### Minor Changes
- 0c24c5a: Use TypeScript compiler instead of Babel
### Patch Changes
- 0c24c5a: Resolve stale state in `checkAndUpdateFileState`
- Updated dependencies [0c24c5a]
- @uppy/store-default@4.3.0
- @uppy/utils@6.2.0
## 4.4.6
Released: 2025-06-02

View file

@ -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.4.7",
"version": "4.5.2",
"license": "MIT",
"main": "lib/index.js",
"style": "dist/style.min.css",
@ -28,6 +28,12 @@
"type": "git",
"url": "git+https://github.com/transloadit/uppy.git"
},
"files": [
"src",
"lib",
"dist",
"CHANGELOG.md"
],
"exports": {
".": "./lib/index.js",
"./css/style.min.css": "./dist/style.min.css",

View file

@ -1472,6 +1472,163 @@ describe('src/Core', () => {
await core.retryAll()
expect(onUpload).not.toHaveBeenCalled()
})
describe('with required metadata', () => {
it('should not retry files that have missing required metadata', async () => {
const onUpload = vi.fn()
const onRetryAll = vi.fn()
const core = new Core({
restrictions: {
requiredMetaFields: ['caption'],
},
})
core.on('upload', onUpload)
core.on('retry-all', onRetryAll)
const fileId = core.addFile({
source: 'vi',
name: 'foo.jpg',
type: 'image/jpeg',
data: testImage,
})
// Simulate an upload attempt which triggers metadata validation
try {
await core.upload()
} catch (error) {
expect(error).toBeInstanceOf(RestrictionError)
expect(error.message).toContain('Missing required meta fields')
}
// File should now have missing metadata error after upload attempt
const file = core.getFile(fileId)
expect(file.missingRequiredMetaFields).toEqual(['caption'])
expect(file.error).toContain('Missing required meta fields in foo.jpg')
// Should not retry files with outstanding metadata issues
await core.retryAll()
expect(onRetryAll.mock.calls[0][0]).toEqual([])
expect(onUpload).toHaveBeenCalledTimes(0)
})
it('should retry files after metadata is corrected', async () => {
const onUpload = vi.fn()
const onRetryAll = vi.fn()
const core = new Core({
restrictions: {
requiredMetaFields: ['caption'],
},
})
core.on('upload', onUpload)
core.on('retry-all', onRetryAll)
const fileId = core.addFile({
source: 'vi',
name: 'foo.jpg',
type: 'image/jpeg',
data: testImage,
})
try {
await core.upload()
} catch (error) {
expect(error).toBeInstanceOf(RestrictionError)
expect(error.message).toContain('Missing required meta fields')
}
// Verify file has missing metadata error after upload attempt
const file = core.getFile(fileId)
expect(file.missingRequiredMetaFields).toEqual(['caption'])
expect(file.error).toContain('Missing required meta fields in foo.jpg')
// Fix the metadata
core.setFileMeta(fileId, { caption: 'Test caption' })
// Trigger the dashboard:file-edit-complete event to update validation state
// @ts-ignore
core.emit('dashboard:file-edit-complete', core.getFile(fileId))
const updatedFile = core.getFile(fileId)
expect(updatedFile.missingRequiredMetaFields).toEqual([])
// Now retry should work
await core.retryAll()
expect(onRetryAll.mock.calls[0][0]).toContainEqual(
expect.objectContaining({ id: fileId }),
)
expect(onUpload).toHaveBeenCalledTimes(1) // Called once during retry (initial upload failed at validation)
})
it('should handle multiple files with mixed metadata states', async () => {
const onUpload = vi.fn()
const onRetryAll = vi.fn()
const core = new Core({
restrictions: {
requiredMetaFields: ['caption'],
},
})
core.on('upload', onUpload)
core.on('retry-all', onRetryAll)
// Add files with missing metadata
const fileId1 = core.addFile({
source: 'vi',
name: 'file1.jpg',
type: 'image/jpeg',
data: testImage,
})
const _fileId2 = core.addFile({
source: 'vi',
name: 'file2.jpg',
type: 'image/jpeg',
data: testImage,
})
const fileId3 = core.addFile({
source: 'vi',
name: 'file3.jpg',
type: 'image/jpeg',
data: testImage,
})
try {
await core.upload()
} catch (error) {
expect(error).toBeInstanceOf(RestrictionError)
expect(error.message).toContain('Missing required meta fields')
}
// Give one file a different error (not metadata-related)
core.setFileState(fileId3, {
error: 'Network error',
missingRequiredMetaFields: [],
})
// Fix metadata for first file only
core.setFileMeta(fileId1, { caption: 'Fixed caption' })
// @ts-ignore
core.emit('dashboard:file-edit-complete', core.getFile(fileId1))
// Add an error to file1 so it can be retried
core.setFileState(fileId1, {
error: 'Upload failed',
})
// Retry should only include file1 and file3 (file2 still has missing metadata)
await core.retryAll()
const retriedFiles = onRetryAll.mock.calls[0][0]
expect(retriedFiles).toContainEqual(
expect.objectContaining({ id: fileId1 }),
)
expect(retriedFiles).toContainEqual(
expect.objectContaining({ id: fileId3 }),
)
expect(onUpload).toHaveBeenCalledTimes(1)
})
})
})
describe('restoring a file', () => {

View file

@ -914,13 +914,18 @@ export class Uppy<
this.#restricter.getMissingRequiredMetaFields(file)
if (missingFields.length > 0) {
this.setFileState(file.id, { missingRequiredMetaFields: missingFields })
this.setFileState(file.id, {
missingRequiredMetaFields: missingFields,
error: error.message,
})
this.log(error.message)
this.emit('restriction-failed', file, error)
return false
}
if (missingFields.length === 0 && file.missingRequiredMetaFields) {
this.setFileState(file.id, { missingRequiredMetaFields: [] })
this.setFileState(file.id, {
missingRequiredMetaFields: [],
})
}
return true
}
@ -1374,8 +1379,14 @@ export class Uppy<
#getFilesToRetry() {
const { files } = this.getState()
return Object.keys(files).filter((file) => {
return files[file].error
return Object.keys(files).filter((fileId) => {
const file = files[fileId]
// Only retry files that have errors AND don't have missing required metadata
return (
file.error &&
(!file.missingRequiredMetaFields ||
file.missingRequiredMetaFields.length === 0)
)
})
}

View file

@ -1,5 +1,44 @@
# @uppy/dashboard
## 4.4.3
### Patch Changes
- c15c6fd: Make each entry in `strings` in locale type optional
- Updated dependencies [c15c6fd]
- @uppy/status-bar@4.2.3
## 4.4.2
### Patch Changes
- 1b1a9e3: Define "files" in package.json
- Updated dependencies [1b1a9e3]
- Updated dependencies [c66fd85]
- @uppy/thumbnail-generator@4.2.2
- @uppy/provider-views@4.5.2
- @uppy/status-bar@4.2.2
- @uppy/informer@4.3.2
- @uppy/utils@6.2.2
- @uppy/core@4.5.2
## 4.4.0
### Minor Changes
- 0c24c5a: Use TypeScript compiler instead of Babel
### Patch Changes
- Updated dependencies [0c24c5a]
- Updated dependencies [0c24c5a]
- @uppy/core@4.5.0
- @uppy/informer@4.3.0
- @uppy/provider-views@4.5.0
- @uppy/status-bar@4.2.0
- @uppy/thumbnail-generator@4.2.0
- @uppy/utils@6.2.0
## 4.3.4
Released: 2025-05-18
@ -47,8 +86,8 @@ Included in: Uppy v4.6.0
Released: 2024-10-15
Included in: Uppy v4.5.0
- @uppy/dashboard: Dashboard - convert some files to typescript (Evgenia Karunus / #5367)
- @uppy/dashboard,@uppy/drag-drop,@uppy/file-input: `.handleInputChange()` - use `.currentTarget`; clear the input using `''` (Evgenia Karunus / #5381)
- @uppy/dashboard: Dashboard - convert some files to typescript (Evgenia Karunus / #5367)
- @uppy/dashboard,@uppy/drag-drop,@uppy/file-input: `.handleInputChange()` - use `.currentTarget`; clear the input using `''` (Evgenia Karunus / #5381)
## 4.1.0
@ -215,7 +254,7 @@ Included in: Uppy v3.16.0
Released: 2023-09-05
Included in: Uppy v3.15.0
- @uppy/dashboard: when showAddFilesPanel is true, aria-hidden should be the opposite (Artur Paikin / #4643)
- @uppy/dashboard: when showAddFilesPanel is true, aria-hidden should be the opposite (Artur Paikin / #4643)
## 3.4.1

View file

@ -1,7 +1,7 @@
{
"name": "@uppy/dashboard",
"description": "Universal UI plugin for Uppy.",
"version": "4.3.4",
"version": "4.4.3",
"license": "MIT",
"main": "lib/index.js",
"style": "dist/style.min.css",
@ -31,6 +31,12 @@
"type": "git",
"url": "git+https://github.com/transloadit/uppy.git"
},
"files": [
"src",
"lib",
"dist",
"CHANGELOG.md"
],
"exports": {
".": "./lib/index.js",
"./css/style.css": "./dist/style.css",

View file

@ -16,7 +16,6 @@ import type { LocaleStrings } from '@uppy/utils'
import { findAllDOMElements, getDroppedFiles, toArray } from '@uppy/utils'
import { nanoid } from 'nanoid/non-secure'
import type { ComponentChild, VNode } from 'preact'
import { h } from 'preact'
import type { TargetedEvent } from 'preact/compat'
import packageJson from '../package.json' with { type: 'json' }
import DashboardUI from './components/Dashboard.js'

View file

@ -1,5 +1,5 @@
import type { I18n, Translator } from '@uppy/utils'
import { Component, type ComponentChild, Fragment, h } from 'preact'
import { Component, type ComponentChild, Fragment } from 'preact'
import type { TargetedEvent } from 'preact/compat'
import type { DashboardState, TargetWithRender } from '../Dashboard.js'

View file

@ -1,5 +1,4 @@
import classNames from 'classnames'
import { h } from 'preact'
import AddFiles from './AddFiles.js'
type $TSFixMe = any

View file

@ -10,7 +10,6 @@ import type {
import type { I18n, Translator } from '@uppy/utils'
import { isDragDropSupported } from '@uppy/utils'
import classNames from 'classnames'
import { h } from 'preact'
import type { TargetedEvent } from 'preact/compat'
import type { DashboardState, TargetWithRender } from '../Dashboard.js'
import AddFiles from './AddFiles.js'

View file

@ -1,5 +1,4 @@
import classNames from 'classnames'
import { h } from 'preact'
type $TSFixMe = any

View file

@ -1,6 +1,5 @@
import classNames from 'classnames'
import { nanoid } from 'nanoid/non-secure'
import { h } from 'preact'
import { useCallback, useEffect, useState } from 'preact/hooks'
import getFileTypeIcon from '../../utils/getFileTypeIcon.js'
import ignoreEvent from '../../utils/ignoreEvent.js'

View file

@ -1,7 +1,6 @@
import type Uppy from '@uppy/core'
import type { Body, Meta, UppyFile } from '@uppy/core'
import type { I18n } from '@uppy/utils'
import { h } from 'preact'
import type { DashboardState } from '../../../Dashboard.js'
import copyToClipboard from '../../../utils/copyToClipboard.js'

View file

@ -2,7 +2,6 @@ import prettierBytes from '@transloadit/prettier-bytes'
import type { UppyFile } from '@uppy/core'
import type { I18n } from '@uppy/utils'
import { truncateString } from '@uppy/utils'
import { h } from 'preact'
import type { DashboardState } from '../../../Dashboard.js'
import MetaErrorMessage from '../MetaErrorMessage.js'

View file

@ -1,4 +1,3 @@
import { h } from 'preact'
import getFileTypeIcon from '../../../utils/getFileTypeIcon.js'
import FilePreview from '../../FilePreview.js'
import MetaErrorMessage from '../MetaErrorMessage.js'

Some files were not shown because too many files have changed in this diff Show more