Skip to content

Commit 1684a8e

Browse files
teunverhaertteunverhaert
and
teunverhaert
authored
fix: fix sizeRem not transforming negative values (#1432)
Co-authored-by: teunverhaert <[email protected]>
1 parent 7b7d402 commit 1684a8e

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

.changeset/cool-bears-glow.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'style-dictionary': patch
3+
---
4+
5+
Fix sizeRem to allow negative values

__tests__/common/transforms.test.js

+50
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,16 @@ describe('common', () => {
790790
);
791791
expect(value).to.equal('10px');
792792
});
793+
it('should work for negative values', () => {
794+
const value = transforms[sizePx].transform(
795+
{
796+
value: '-10',
797+
},
798+
{},
799+
{},
800+
);
801+
expect(value).to.equal('-10px');
802+
});
793803
it('should throw an error if prop value is Nan', () => {
794804
expect(() => transforms[sizeDp].transform({ value: 'a' }, {}, {})).to.throw();
795805
});
@@ -957,6 +967,46 @@ describe('common', () => {
957967
);
958968
expect(value).to.equal('1rem');
959969
});
970+
it('should work for negative values with unit', () => {
971+
const value = transforms[sizeRem].transform(
972+
{
973+
value: '-1rem',
974+
},
975+
{},
976+
{},
977+
);
978+
expect(value).to.equal('-1rem');
979+
});
980+
it('should work for negative values', () => {
981+
const value = transforms[sizeRem].transform(
982+
{
983+
value: '-1',
984+
},
985+
{},
986+
{},
987+
);
988+
expect(value).to.equal('-1rem');
989+
});
990+
it('should work for positive values', () => {
991+
const value = transforms[sizeRem].transform(
992+
{
993+
value: '+1',
994+
},
995+
{},
996+
{},
997+
);
998+
expect(value).to.equal('1rem');
999+
});
1000+
it('should work for floating values', () => {
1001+
const value = transforms[sizeRem].transform(
1002+
{
1003+
value: '.5',
1004+
},
1005+
{},
1006+
{},
1007+
);
1008+
expect(value).to.equal('0.5rem');
1009+
});
9601010
['0', 0].forEach((value) => {
9611011
it('zero value is returned without a unit and remains same type', () => {
9621012
expect(

lib/common/transforms.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,7 @@ export default {
829829
transform: function (token, _, options) {
830830
const nonParsed = options.usesDtcg ? token.$value : token.value;
831831
// if the dimension already has a unit (non-digit / . period character)
832-
if (`${nonParsed}`.match(/[^0-9.]/g)) {
832+
if (`${nonParsed}`.match(/^[^0-9.-]+$/)) {
833833
return nonParsed;
834834
}
835835
const parsedVal = parseFloat(nonParsed);

0 commit comments

Comments
 (0)