[system] recomposeColor() mutates the hsl color object passed to it
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 88/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- react, typescript
- Ambito
- frontend
Direzione di ricerca
Inizia con il ramo hsl in packages/mui-system/src/colorManipulator/colorManipulator.ts, poi trova i test di colorManipulator per recomposeColor. Verifica che chiamate ripetute con lo stesso oggetto hsl restituiscano la stessa stringa CSS e lascino invariati i suoi valori; il lavoro è completato quando il test di regressione passa.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Steps to reproduce
This is a pure function, so a snippet is enough. It runs in Node with @mui/material 9.5.0. The same code fails on master (0ca6dc6).
import { recomposeColor } from '@mui/material/styles';
const color = { type: 'hsl', values: [100, 50, 25] };
console.log(recomposeColor(color)); // 'hsl(100, 50%, 25%)'
console.log(recomposeColor(color)); // 'hsl(100, 50%%, 25%%)'
console.log(color.values); // [100, '50%%', '25%%']
Current behavior
For hsl and hsla colors, recomposeColor() writes the percent strings back into color.values. The second call with the same object returns hsl(100, 50%%, 25%%), which is not valid CSS. The object passed in is changed.
The cause is the hsl branch in packages/mui-system/src/colorManipulator/colorManipulator.ts:
} else if (type.includes('hsl')) {
values[1] = `${values[1]}%`;
values[2] = `${values[2]}%`;
}
The rgb and color() branches build a new array, so they do not have this problem.
Expected behavior
recomposeColor() returns hsl(100, 50%, 25%) each time and does not change the object passed to it, as it does for rgb and color() objects.
Context
decomposeColor() returns a color object as is, and the manipulators accept one, so the same object can reach recomposeColor() more than once.
I'm happy to send a PR with a test. The fix is to map the values in the hsl branch instead of assigning to them.
Your environment
@mui/materialand@mui/system9.5.0, andmasterat 0ca6dc6- Node.js 24
- Not browser specific: the unit test fails in both jsdom and Chromium.
AI-assisted: found and reproduced with an AI coding agent; the example above was run locally.
Search keywords: recomposeColor hsl mutate values percent
- Lingua principale
- JavaScript
- Stelle
- 99.3k
- Fork
- 32.5k
- Merge medio
- 2g 1h
- PR unite (30g)
- 199
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di mui/material-ui
-
docs status: waiting for maintainer
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
mui/material-ui#49746 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
ai: triaged external dependency scope: icons type: expected behavior
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
mui/material-ui#49521 · 4 commenti · 3 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
[a11y][Chip] Clickable always assigned to componentForse già presa @silviuaavram l’ha presa 21 giorni fa. Apertaaccessibility ai: triaged status: waiting for author type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
mui/material-ui#49511 · 5 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[SwipeableDrawer] Taps on drawer items are lost when the finger drifts more than 3px on iOSForse già presa @silviuaavram l’ha presa 13 giorni fa. Apertabrowser: Safari component: SwipeableDrawer mobile status: waiting for maintainer
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
mui/material-ui#49449 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[docs] Name the out-of-scope layout and utility components in the conformance reportForse già presa @michelengelen l’ha presa 17 giorni fa. Apertaaccessibility
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
mui/material-ui#49415 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di mui/material-ui
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
simstudioai/sim#9831 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 2 giorni
-
Edit: Monumental TV [PY]Apertachannels:edit check:passed
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100