diff --git a/packages/uniwind/src/bundler/css-processor/functions.ts b/packages/uniwind/src/bundler/css-processor/functions.ts index 400229cc..dca1fd1d 100644 --- a/packages/uniwind/src/bundler/css-processor/functions.ts +++ b/packages/uniwind/src/bundler/css-processor/functions.ts @@ -111,7 +111,7 @@ export class Functions { return '""' } - if (['skewX', 'skewY'].includes(fn.name)) { + if (['rotateX', 'rotateY', 'rotateZ', 'skewX', 'skewY'].includes(fn.name)) { return `"${fn.name}(${this.Processor.CSS.processValue(fn.arguments).replace(/"/g, '')})"` } diff --git a/packages/uniwind/src/core/native/parsers/transforms.ts b/packages/uniwind/src/core/native/parsers/transforms.ts index 733fff7f..7e269c6b 100644 --- a/packages/uniwind/src/core/native/parsers/transforms.ts +++ b/packages/uniwind/src/core/native/parsers/transforms.ts @@ -36,7 +36,8 @@ export const parseTransformsMutation = (styles: Record) => { if (transformTokens.length > 0) { // Transforms inside transform - transform: rotate(45deg); for (const token of transformTokens) { - if (!token.startsWith(transform)) { + // Match the function name exactly, `rotate` must not take `rotateX(45deg)` + if (!token.startsWith(`${transform}(`)) { continue } diff --git a/packages/uniwind/tests/native/styles-parsing/transforms.test.tsx b/packages/uniwind/tests/native/styles-parsing/transforms.test.tsx index c486c7ff..3bdb9d7a 100644 --- a/packages/uniwind/tests/native/styles-parsing/transforms.test.tsx +++ b/packages/uniwind/tests/native/styles-parsing/transforms.test.tsx @@ -39,6 +39,24 @@ describe('Transforms', () => { expect(getStylesFromId('-rotate-90').transform).toEqual([{ rotateZ: '-90deg' }]) }) + test('Rotate 3D', () => { + const { getStylesFromId } = renderUniwind( + + + + + + + , + ) + + expect(getStylesFromId('rotate-x-45').transform).toEqual([{ rotateX: '45deg' }]) + expect(getStylesFromId('rotate-y-180').transform).toEqual([{ rotateY: '180deg' }]) + expect(getStylesFromId('-rotate-y-45').transform).toEqual([{ rotateY: '-45deg' }]) + expect(getStylesFromId('rotate-z-30').transform).toEqual([{ rotateZ: '30deg' }]) + expect(getStylesFromId('rotate-x-12-rotate-y-12').transform).toEqual([{ rotateX: '12deg' }, { rotateY: '12deg' }]) + }) + test('Translate', () => { const { getStylesFromId } = renderUniwind(