diff --git a/packages/core/src/mergeClasses.test.ts b/packages/core/src/mergeClasses.test.ts index 845aa8c40b..c381c65979 100644 --- a/packages/core/src/mergeClasses.test.ts +++ b/packages/core/src/mergeClasses.test.ts @@ -227,6 +227,16 @@ describe('mergeClasses', () => { expect(mergeClasses(classNameA, classNameC)).toMatchInlineSnapshot(`fe3e8s9`); expect(mergeClasses(classNameA, classNameB, classNameC)).toMatchInlineSnapshot(`ftu9nv0`); }); + + it('handles resets for shorthands', () => { + const computeClassesA = makeStyles({ root: { transitionDuration: '1s' } }); + const computeClassesB = makeStyles({ root: { color: 'red', transition: RESET } }); + + const classNameA = computeClassesA(options).root; + const classNameB = computeClassesB(options).root; + + expect(mergeClasses(classNameA, classNameB)).toMatchInlineSnapshot(`fe3e8s9`); + }); }); }); diff --git a/packages/core/src/runtime/resolveStyleRules.test.ts b/packages/core/src/runtime/resolveStyleRules.test.ts index e46f831a87..33413036e3 100644 --- a/packages/core/src/runtime/resolveStyleRules.test.ts +++ b/packages/core/src/runtime/resolveStyleRules.test.ts @@ -905,6 +905,10 @@ describe('resolveStyleRules', () => { { sj55zd: 'fe3e8s9', uwmqm3: 0 }, { d: ['.fe3e8s9{color:red;}'] }, ]); + expect(resolveStyleRules({ color: 'red', transition: RESET })).toEqual([ + { B3o57yi: 0, Bi2q7bf: 0, Bkqvd7p: 0, Bmy1vo4: 0, Bn62ygk: 0, Cwk7ip: 0, sj55zd: 'fe3e8s9' }, + { d: ['.fe3e8s9{color:red;}'] }, + ]); }); }); diff --git a/packages/core/src/runtime/resolveStyleRules.ts b/packages/core/src/runtime/resolveStyleRules.ts index 9c00fc9dd1..a900494c99 100644 --- a/packages/core/src/runtime/resolveStyleRules.ts +++ b/packages/core/src/runtime/resolveStyleRules.ts @@ -113,18 +113,17 @@ export function resolveStyleRules( continue; } - if (isResetValue(value)) { + if (typeof value === 'string' || typeof value === 'number') { + const isReset = isResetValue(value); + const selector = trimSelector(selectors.join('')); + const shorthand = getShorthandDefinition(property); // uniq key based on a hash of property & selector, used for merging later const key = hashPropertyKey(selector, property, atRules); - pushToClassesMap(cssClassesMap, key, 0, undefined); - continue; - } - - if (typeof value === 'string' || typeof value === 'number') { - const selector = trimSelector(selectors.join('')); - const shorthand = getShorthandDefinition(property); + if (isReset) { + pushToClassesMap(cssClassesMap, key, 0, undefined); + } if (shorthand) { const shorthandProperties = shorthand[1]; @@ -133,8 +132,12 @@ export function resolveStyleRules( resolveStyleRules(shorthandResetStyles, classNameHashSalt, selectors, atRules, cssClassesMap, cssRulesByBucket); } - // uniq key based on a hash of property & selector, used for merging later - const key = hashPropertyKey(selector, property, atRules); + // Heads up! + // We don't need to generate CSS rules for reset values as they are not used in the output + if (isReset) { + continue; + } + const className = hashClassName( { value: value.toString(),