Skip to content

Preserve alpha when setting color channels - #403

Open
jakezwang wants to merge 1 commit into
gka:mainfrom
jakezwang:fix-set-preserve-alpha
Open

jakezwang wants to merge 1 commit into
gka:mainfrom
jakezwang:fix-set-preserve-alpha

Conversation

@jakezwang

Copy link
Copy Markdown

Changing a color channel can discard opacity: chroma('red').alpha(0.4).set('rgb.r', 128).alpha() returns 1. RGB, HSV, HSI, and CMYK conversions omit alpha, so constructing the result makes it opaque.

Preserve the original alpha after converting the edited channels, as darken() and saturate() already do. Tests cover transparent, translucent, and opaque colors, both mutation modes, relative changes, and HSL/Lab controls. Includes a patch changeset.

Related to the opacity-loss report in #244; this does not add the separate rgba.a feature requested there.

Validation: all 2,569 tests pass on Node 20, 24, and 26; lint and all four distribution builds pass.

@jakezwang
jakezwang requested a review from gka as a code owner September 19, 2026 07:19
@changeset-bot

changeset-bot Bot commented Sep 19, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: aa6e9ea

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

This PR includes changesets to release 1 package
Name Type
chroma-js 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

This branch has not been deployed

No deployments
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.

1 participant