Skip to content

fix(file-utils): match file extensions case-insensitively in getFileMimeType - #3505

Merged
segunadebayo merged 2 commits into
chakra-ui:mainfrom
rjsgud49:fix/file-mime-type-case
Oct 21, 2026
Merged

segunadebayo merged 2 commits into
chakra-ui:mainfrom
rjsgud49:fix/file-mime-type-case

Conversation

@rjsgud49

Copy link
Copy Markdown
Contributor

No linked issue; found while reading the source.

📝 Description

getFileMimeType looks up the file extension in mimeTypesMap as is, but the map keys are lowercase. Files with an uppercase extension get no mime type.

⛳️ Current behavior (updates)

getFileMimeType("photo.png") // "image/png"
getFileMimeType("IMG_0001.HEIC") // null
getFileMimeType("PHOTO.JPG") // null

isValidFileType uses getFileMimeType when file.type is empty (e.g. HEIC photos on Windows/Chrome, or files from some drag-and-drop sources). So with accept="image/*", IMG_0001.HEIC is rejected while img_0001.heic is accepted. Extension accepts like .png already ignore case, so only mime accepts are affected.

🚀 New behavior

  • The extension is lowercased before the lookup, so IMG_0001.HEIC resolves to image/heic and passes accept="image/*".
  • Added a patch changeset for @zag-js/file-utils.

💣 Is this a breaking change (Yes/No):

No

📝 Additional Information

  • New get-file-mime-type.test.ts and one new case in is-valid-file-type.test.ts. Both fail on main and pass with the fix.
  • vitest run packages/utilities packages/machines/file-upload: 808 passed, 1 skipped. tsc --noEmit and eslint src tests pass for the package, and tsup builds it.

@changeset-bot

changeset-bot Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 19005b6

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 85 packages
Name Type
@zag-js/file-utils Patch
@zag-js/file-upload Patch
@zag-js/anatomy-icons Patch
@zag-js/anatomy Patch
@zag-js/core Patch
@zag-js/docs Patch
@zag-js/preact Patch
@zag-js/react Patch
@zag-js/solid Patch
@zag-js/svelte Patch
@zag-js/vanilla Patch
@zag-js/vue Patch
@zag-js/accordion Patch
@zag-js/angle-slider Patch
@zag-js/async-list Patch
@zag-js/avatar Patch
@zag-js/carousel Patch
@zag-js/cascade-select Patch
@zag-js/checkbox Patch
@zag-js/clipboard Patch
@zag-js/collapsible Patch
@zag-js/color-picker Patch
@zag-js/combobox Patch
@zag-js/date-input Patch
@zag-js/date-picker Patch
@zag-js/dialog Patch
@zag-js/drawer Patch
@zag-js/editable Patch
@zag-js/floating-panel Patch
@zag-js/hover-card Patch
@zag-js/image-cropper Patch
@zag-js/listbox Patch
@zag-js/marquee Patch
@zag-js/menu Patch
@zag-js/navigation-menu Patch
@zag-js/number-input Patch
@zag-js/pagination Patch
@zag-js/password-input Patch
@zag-js/pin-input Patch
@zag-js/popover Patch
@zag-js/presence Patch
@zag-js/progress Patch
@zag-js/qr-code Patch
@zag-js/radio-group Patch
@zag-js/rating-group Patch
@zag-js/scroll-area Patch
@zag-js/select Patch
@zag-js/signature-pad Patch
@zag-js/slider Patch
@zag-js/splitter Patch
@zag-js/steps Patch
@zag-js/switch Patch
@zag-js/tabs Patch
@zag-js/tags-input Patch
@zag-js/timer Patch
@zag-js/toast Patch
@zag-js/toc Patch
@zag-js/toggle-group Patch
@zag-js/toggle Patch
@zag-js/tooltip Patch
@zag-js/tour Patch
@zag-js/tree-view Patch
@zag-js/store Patch
@zag-js/types Patch
@zag-js/aria-hidden Patch
@zag-js/auto-resize Patch
@zag-js/collection Patch
@zag-js/color-utils Patch
@zag-js/utils Patch
@zag-js/date-utils Patch
@zag-js/dismissable Patch
@zag-js/dom-query Patch
@zag-js/focus-trap Patch
@zag-js/focus-visible Patch
@zag-js/highlight-word Patch
@zag-js/hotkeys Patch
@zag-js/i18n-utils Patch
@zag-js/interact-outside Patch
@zag-js/json-tree-utils Patch
@zag-js/live-region Patch
@zag-js/popper Patch
@zag-js/rect-utils Patch
@zag-js/remove-scroll Patch
@zag-js/scroll-snap Patch
@zag-js/stringify-state Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercel Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
zag-nextjs Ready Ready Preview Oct 21, 2026 3:22pm UTC
zag-solid Building Building Preview Oct 21, 2026 3:22pm UTC
zag-svelte Ready Ready Preview Oct 21, 2026 3:22pm UTC
zag-vue Ready Ready Preview Oct 21, 2026 3:22pm UTC
1 Skipped Deployment
Project Deployment Actions Updated
zag-website Ignored Ignored Preview Oct 21, 2026 3:22pm UTC

Request Review

This branch was successfully deployed

4 active (1 outdated) deployments
Preview – zag-vue — 19005b62 Deployed Oct 21, 2026 by vercel[bot]
Preview – zag-svelte — 19005b62 Deployed Oct 21, 2026 by vercel[bot]
Preview – zag-nextjs — 19005b62 Deployed Oct 21, 2026 by vercel[bot]
Preview – zag-solid — 2ecdfa9c Deployed Oct 20, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants