Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
3acc882
chore(deps): pin libheif-js 1.23.2 in the lockfile so CI tests what c…
AminDhouib Sep 9, 2026
9b75f47
Merge pull request #385 from DevinoSolutions/master
AminDhouib Sep 9, 2026
9ab3718
Merge pull request #389 from DevinoSolutions/chore/libheif-1-23-2-loc…
AminDhouib Sep 9, 2026
20993c3
ci: pin the remaining GitHub Actions to commit SHAs
AminDhouib Sep 11, 2026
1c874c1
ci(publish): state the trusted-publisher precondition durably
AminDhouib Sep 11, 2026
27e0b03
docs(claude): sweep the scope to @useupup and describe the dev->maste…
AminDhouib Sep 11, 2026
3f82736
Merge pull request #395 from DevinoSolutions/chore/post-release-hygiene
AminDhouib Sep 11, 2026
e4393b5
fix(core): hide default capture sources that can never satisfy allowe…
AminDhouib Sep 11, 2026
3d0ceeb
fix(core): flag the file when stripExifData skips an animated image
AminDhouib Sep 11, 2026
db9ea90
fix(core): carry the host error message into the panel's coded failur…
AminDhouib Sep 11, 2026
99e2e3e
Merge pull request #396 from DevinoSolutions/fix/issue-340-source-filter
AminDhouib Sep 11, 2026
1a29a27
Merge pull request #397 from DevinoSolutions/fix/issue-367-items-2-4
AminDhouib Sep 11, 2026
32ae800
fix(ui): drop redundant progress wrapper and shrink branding logo assets
AminDhouib Sep 11, 2026
05f1be4
chore: correct action pin comments and stale doc statements
AminDhouib Sep 11, 2026
ecef937
Merge pull request #398 from DevinoSolutions/fix/ui-batch-352-229
AminDhouib Sep 11, 2026
c7b681d
Merge pull request #399 from DevinoSolutions/chore/doc-comment-fixes
AminDhouib Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .changeset/hide-impossible-capture-sources.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
'@useupup/core': patch
---

The default source set no longer shows capture sources whose output can never
satisfy `allowedFileTypes` (#340).

`allowedFileTypes: 'application/pdf'` used to leave the camera, microphone and
screen chips in place, and every recording they produced was rejected the moment
it was added. `normalizeUploaderOptions` now drops a default capture source when
no entry in the resolved accept list could match anything that source can emit —
camera emits `image/jpeg` (with `image/png` as the `toDataURL` fallback),
microphone `audio/webm` / `audio/ogg` / `audio/mp4`, screen `video/webm` /
`video/mp4`, all read off the code that builds the `File`.

The match fails open: a wildcard, an unrecognized extension, or anything that is
neither a MIME type nor an extension keeps every source. `local` and `url` are
never filtered, cloud drives are untouched, and an explicitly passed `sources`
array is always honored verbatim. A dropped source logs one dev-only
`console.warn` naming the source and the accept list.
28 changes: 28 additions & 0 deletions .changeset/host-error-message-and-exif-skip-signal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
'@useupup/core': patch
'@useupup/react': patch
'@useupup/vue': patch
'@useupup/svelte': patch
'@useupup/angular': patch
'@useupup/vanilla': patch
---

The default panel now shows your error message next to the machine code, and a
skipped EXIF strip leaves a marker on the file (#367 items 2 and 4).

A failure carrying a code used to render as `uploadFailedWithCode`, which
interpolated the code and nothing else — so an endpoint that returned a useful
sentence watched it disappear between `onError` and the panel. The key now has a
second `{message}` slot carrying the error's own message, added to all nine
locale bundles so translators control placement (override the key to reorder the
slots, drop the code, or show only your own wording). All six framework panels
pass both values, and the message is rendered as text, never as markup.

`stripExifData` skips animated GIF/WebP/APNG because canvas has no animated
encoder, which means an animated WebP or APNG reaches storage with the EXIF you
asked to remove. The `exif` step now records that on the file:
`metadata.metadataStripSkipped === true` with
`metadata.metadataStripSkippedReason === 'animated-image'`. A file whose EXIF
really was stripped carries `exifStripped: true` and no marker, and
`imageCompression` skipping an animated image does not set it — nothing was asked
to be removed. No new event, no new option.
27 changes: 27 additions & 0 deletions .changeset/progress-at-zero-and-smaller-logos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
'@useupup/react': patch
'@useupup/vue': patch
'@useupup/svelte': patch
'@useupup/angular': patch
'@useupup/vanilla': patch
'@useupup/preact': patch
---

The compact file row shows its progress bar as soon as a run starts (#352), and
the branding logo assets are ~92% smaller (#229).

`ProgressBar` already renders whenever the run is active or progress is
non-zero, but every framework's compact `FileRow` wrapped it in a second
`!!progress` gate. That outer gate won whenever it was falsy, so the row stayed
blank between "upload started" and "first byte acknowledged" while the grid
tile, the single-file hero and the list footer all showed their bars. The
redundant wrapper is removed in all five row templates; the self-gate inside
`ProgressBar` is now the only one. No change at idle — with no progress and no
active run the bar is still absent, so the parity fixtures do not move.

The four base64 PNG logo assets in `src/assets/logos.ts` are re-exported at
122x26, twice the fixed 61x13 CSS-pixel box every framework renders them in.
They were shipping at up to 1905x580 — roughly 30x the rendered area. Each
package's copy of that file drops from 167 KB to 13 KB, about 109 KB gzipped off
every UI bundle, with the rendered appearance unchanged. The assets stay PNG:
there is no vector source for them in the repo.
16 changes: 8 additions & 8 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -153,7 +153,7 @@ jobs:
# nothing, which means the capture layer itself broke.
- name: Upload visual product-state screenshots
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: e2e-visual-screenshots
path: apps/e2e-test/screenshots/
Expand All @@ -162,7 +162,7 @@ jobs:

- name: Upload Playwright traces and reports
if: failure()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: e2e-playwright-artifacts
path: |
Expand All @@ -189,7 +189,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -245,7 +245,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -276,7 +276,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -312,7 +312,7 @@ jobs:

- name: Upload Playwright report
if: failure()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: docs-e2e-playwright-artifacts
path: |
Expand All @@ -337,7 +337,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand All @@ -47,7 +47,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -77,7 +77,7 @@ jobs:
run: pnpm run vocab:check

- name: Archive code coverage results
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: code-coverage-report
path: coverage/
Expand All @@ -92,7 +92,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -122,7 +122,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand All @@ -145,7 +145,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -178,7 +178,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand All @@ -201,7 +201,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand All @@ -223,7 +223,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand All @@ -246,7 +246,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand All @@ -269,7 +269,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -110,7 +110,7 @@ jobs:
# future snapvisor.io baseline feed.
- name: Upload visual product-state screenshots
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: nightly-visual-screenshots
path: apps/e2e-test/screenshots/
Expand All @@ -119,7 +119,7 @@ jobs:

- name: Upload Playwright traces and reports
if: failure()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: nightly-playwright-artifacts
path: |
Expand All @@ -135,7 +135,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand All @@ -157,7 +157,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -193,7 +193,7 @@ jobs:

- name: Setup pnpm
if: steps.creds.outputs.present == 'true'
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
if: steps.creds.outputs.present == 'true'
Expand Down Expand Up @@ -254,7 +254,7 @@ jobs:

- name: Setup pnpm
if: steps.creds.outputs.present == 'true'
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
if: steps.creds.outputs.present == 'true'
Expand Down Expand Up @@ -367,7 +367,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand All @@ -391,7 +391,7 @@ jobs:

- name: Upload Lighthouse reports
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: nightly-lighthouse-reports
path: apps/landing/.lighthouseci-reports/
Expand Down Expand Up @@ -424,7 +424,7 @@ jobs:

- name: Setup pnpm
if: steps.creds.outputs.present == 'true'
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v4.4.0
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
if: steps.creds.outputs.present == 'true'
Expand Down Expand Up @@ -470,7 +470,7 @@ jobs:

- name: Upload Playwright report
if: failure() && steps.creds.outputs.present == 'true'
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: landing-feedback-playwright-artifacts
path: |
Expand Down
Loading
Loading