From e6b7ba7da7d6d3603dc97e0482d9aaf9fbf2ba2c Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Wed, 10 Apr 2024 08:50:12 -0500 Subject: [PATCH 01/35] starting over --- packages/pigment-css-react/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pigment-css-react/README.md b/packages/pigment-css-react/README.md index a949e580fa803a..f6c3f29a438a0a 100644 --- a/packages/pigment-css-react/README.md +++ b/packages/pigment-css-react/README.md @@ -812,7 +812,7 @@ const Flex = styled('div')((props) => ({ > 💡 Keep in mind that the `variants` key is for fixed values of props, for example, a component's colors, sizes, and states. -2. **Programatically generated styles** +2. **Programmatically generated styles** For Emotion and styled-components, the styles are different on each render and instance because the styles are generated at runtime: From 028eff7bd014c8198112145c9bb093ee61757a5e Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Wed, 10 Apr 2024 08:54:10 -0500 Subject: [PATCH 02/35] reverting --- packages/pigment-css-react/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pigment-css-react/README.md b/packages/pigment-css-react/README.md index f6c3f29a438a0a..a949e580fa803a 100644 --- a/packages/pigment-css-react/README.md +++ b/packages/pigment-css-react/README.md @@ -812,7 +812,7 @@ const Flex = styled('div')((props) => ({ > 💡 Keep in mind that the `variants` key is for fixed values of props, for example, a component's colors, sizes, and states. -2. **Programmatically generated styles** +2. **Programatically generated styles** For Emotion and styled-components, the styles are different on each render and instance because the styles are generated at runtime: From 5909f0cc62c672c4cb78fd742892e0e9d74a9518 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Fri, 10 May 2024 14:23:37 -0500 Subject: [PATCH 03/35] initializing --- docs/pages/blog/introducing-pigment-css.js | 7 +++++++ docs/pages/blog/introducing-pigment-css.md | 8 ++++++++ 2 files changed, 15 insertions(+) create mode 100644 docs/pages/blog/introducing-pigment-css.js create mode 100644 docs/pages/blog/introducing-pigment-css.md diff --git a/docs/pages/blog/introducing-pigment-css.js b/docs/pages/blog/introducing-pigment-css.js new file mode 100644 index 00000000000000..2c643a7f0c6647 --- /dev/null +++ b/docs/pages/blog/introducing-pigment-css.js @@ -0,0 +1,7 @@ +import * as React from 'react'; +import TopLayoutBlog from 'docs/src/modules/components/TopLayoutBlog'; +import { docs } from './introducing-pigment-css.md?muiMarkdown'; + +export default function Page() { + return ; +} diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md new file mode 100644 index 00000000000000..9d0188aaecad52 --- /dev/null +++ b/docs/pages/blog/introducing-pigment-css.md @@ -0,0 +1,8 @@ +--- +title: 'Introducing Pigment CSS' +description: 'TK' +date: 2024-05-14T00:00:00.000Z +authors: ['samuelsycamore'] +tags: ['Pigment CSS'] +card: false +--- From a52212824ebcbe7ff0d918784d369e027d53e4a4 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Fri, 10 May 2024 14:33:02 -0500 Subject: [PATCH 04/35] outline --- docs/pages/blog/introducing-pigment-css.md | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 9d0188aaecad52..85ebed3e5f896e 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -6,3 +6,35 @@ authors: ['samuelsycamore'] tags: ['Pigment CSS'] card: false --- + +Introduction - start by stating the problem as clearly as possible: last gen’s CSS-in-JS solutions are incompatible with the new paradigm of React Server Components and the Next.js App Router. That’s why we created Pigment CSS. + +## What are React Server Components? + +Briefly explain what RSCs are and why old CSS-in-JS solutions don’t work with them. + +## Why Pigment CSS? + +Explain the shortcomings of Emotion/styled-components + +## How Pigment CSS works + +Show how Pigment CSS solves the problem outlined above. Explain how it works in 2-3 paragraphs with a few code snippets. Can derive this text from the doc on this topic. + +## Benefits of using Pigment CSS + +### Better performance + +Benchmarks - compare Pigment to Emotion and others + +### Familiar developer experience + +Use code snippets to show how similar it is to Emotion in terms of DX + +### Future-proof solution + +Elaborate on the idea that Material UI is keeping up with the latest and greatest React features, AND that Pigment is not exclusively for use with Material UI. + +## Get started with Pigment CSS + +Conclude by telling users where to go and what to do to get started. Link to Next.js and Vite starters. Invite users to star the repo and open issues. \ No newline at end of file From cc8681f8d096134c055e79164de4fd455203ca07 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Fri, 10 May 2024 14:45:48 -0500 Subject: [PATCH 05/35] dedupe and prettier --- docs/pages/blog/introducing-pigment-css.md | 4 +- pnpm-lock.yaml | 84 +++++++++++++--------- 2 files changed, 51 insertions(+), 37 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 85ebed3e5f896e..5e0bb88cab964f 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -33,8 +33,8 @@ Use code snippets to show how similar it is to Emotion in terms of DX ### Future-proof solution -Elaborate on the idea that Material UI is keeping up with the latest and greatest React features, AND that Pigment is not exclusively for use with Material UI. +Elaborate on the idea that Material UI is keeping up with the latest and greatest React features, AND that Pigment is not exclusively for use with Material UI. ## Get started with Pigment CSS -Conclude by telling users where to go and what to do to get started. Link to Next.js and Vite starters. Invite users to star the repo and open issues. \ No newline at end of file +Conclude by telling users where to go and what to do to get started. Link to Next.js and Vite starters. Invite users to star the repo and open issues. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee122eea0ba2d1..04fe2d466954e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -394,7 +394,7 @@ importers: version: link:../local-ui-lib next: specifier: latest - version: 14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0)(react@18.2.0) + version: 14.2.3(@babel/core@7.24.4)(@playwright/test@1.42.1)(babel-plugin-macros@3.1.0)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -5952,8 +5952,8 @@ packages: /@next/env@13.5.1: resolution: {integrity: sha512-CIMWiOTyflFn/GFx33iYXkgLSQsMQZV4jB91qaj/TfxGaGOXxn8C1j72TaUSPIyN7ziS/AYG46kGmnvuk1oOpg==} - /@next/env@14.1.4: - resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} + /@next/env@14.2.3: + resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==} dev: false /@next/eslint-plugin-next@14.1.4: @@ -5970,8 +5970,8 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-arm64@14.1.4: - resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} + /@next/swc-darwin-arm64@14.2.3: + resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -5987,8 +5987,8 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-x64@14.1.4: - resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} + /@next/swc-darwin-x64@14.2.3: + resolution: {integrity: sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -6004,8 +6004,8 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-gnu@14.1.4: - resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} + /@next/swc-linux-arm64-gnu@14.2.3: + resolution: {integrity: sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -6021,8 +6021,8 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-musl@14.1.4: - resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} + /@next/swc-linux-arm64-musl@14.2.3: + resolution: {integrity: sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -6038,8 +6038,8 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-gnu@14.1.4: - resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} + /@next/swc-linux-x64-gnu@14.2.3: + resolution: {integrity: sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -6055,8 +6055,8 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-musl@14.1.4: - resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} + /@next/swc-linux-x64-musl@14.2.3: + resolution: {integrity: sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -6072,8 +6072,8 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-arm64-msvc@14.1.4: - resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} + /@next/swc-win32-arm64-msvc@14.2.3: + resolution: {integrity: sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -6089,8 +6089,8 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-ia32-msvc@14.1.4: - resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} + /@next/swc-win32-ia32-msvc@14.2.3: + resolution: {integrity: sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -6106,8 +6106,8 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-x64-msvc@14.1.4: - resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} + /@next/swc-win32-x64-msvc@14.2.3: + resolution: {integrity: sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -6706,7 +6706,6 @@ packages: hasBin: true dependencies: playwright: 1.42.1 - dev: true /@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} @@ -7647,11 +7646,22 @@ packages: '@styled-system/css': 5.1.5 dev: false + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + dev: false + /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: tslib: 2.6.2 + /@swc/helpers@0.5.5: + resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + dependencies: + '@swc/counter': 0.1.3 + tslib: 2.6.2 + dev: false + /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -16722,23 +16732,27 @@ packages: - '@babel/core' - babel-plugin-macros - /next@14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} + /next@14.2.3(@babel/core@7.24.4)(@playwright/test@1.42.1)(babel-plugin-macros@3.1.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 react: ^18.2.0 react-dom: ^18.2.0 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': optional: true + '@playwright/test': + optional: true sass: optional: true dependencies: - '@next/env': 14.1.4 - '@swc/helpers': 0.5.2 + '@next/env': 14.2.3 + '@playwright/test': 1.42.1 + '@swc/helpers': 0.5.5 busboy: 1.6.0 caniuse-lite: 1.0.30001599 graceful-fs: 4.2.11 @@ -16747,15 +16761,15 @@ packages: react-dom: 18.2.0(react@18.2.0) styled-jsx: 5.1.1(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.1.4 - '@next/swc-darwin-x64': 14.1.4 - '@next/swc-linux-arm64-gnu': 14.1.4 - '@next/swc-linux-arm64-musl': 14.1.4 - '@next/swc-linux-x64-gnu': 14.1.4 - '@next/swc-linux-x64-musl': 14.1.4 - '@next/swc-win32-arm64-msvc': 14.1.4 - '@next/swc-win32-ia32-msvc': 14.1.4 - '@next/swc-win32-x64-msvc': 14.1.4 + '@next/swc-darwin-arm64': 14.2.3 + '@next/swc-darwin-x64': 14.2.3 + '@next/swc-linux-arm64-gnu': 14.2.3 + '@next/swc-linux-arm64-musl': 14.2.3 + '@next/swc-linux-x64-gnu': 14.2.3 + '@next/swc-linux-x64-musl': 14.2.3 + '@next/swc-win32-arm64-msvc': 14.2.3 + '@next/swc-win32-ia32-msvc': 14.2.3 + '@next/swc-win32-x64-msvc': 14.2.3 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros From accf09b014a119358aa524b56c773eef53507265 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Fri, 10 May 2024 14:50:22 -0500 Subject: [PATCH 06/35] rever pnpm lockfile --- pnpm-lock.yaml | 84 +++++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 49 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04fe2d466954e9..ee122eea0ba2d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -394,7 +394,7 @@ importers: version: link:../local-ui-lib next: specifier: latest - version: 14.2.3(@babel/core@7.24.4)(@playwright/test@1.42.1)(babel-plugin-macros@3.1.0)(react-dom@18.2.0)(react@18.2.0) + version: 14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -5952,8 +5952,8 @@ packages: /@next/env@13.5.1: resolution: {integrity: sha512-CIMWiOTyflFn/GFx33iYXkgLSQsMQZV4jB91qaj/TfxGaGOXxn8C1j72TaUSPIyN7ziS/AYG46kGmnvuk1oOpg==} - /@next/env@14.2.3: - resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==} + /@next/env@14.1.4: + resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} dev: false /@next/eslint-plugin-next@14.1.4: @@ -5970,8 +5970,8 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-arm64@14.2.3: - resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==} + /@next/swc-darwin-arm64@14.1.4: + resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -5987,8 +5987,8 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-x64@14.2.3: - resolution: {integrity: sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==} + /@next/swc-darwin-x64@14.1.4: + resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -6004,8 +6004,8 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-gnu@14.2.3: - resolution: {integrity: sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==} + /@next/swc-linux-arm64-gnu@14.1.4: + resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -6021,8 +6021,8 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-musl@14.2.3: - resolution: {integrity: sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==} + /@next/swc-linux-arm64-musl@14.1.4: + resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -6038,8 +6038,8 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-gnu@14.2.3: - resolution: {integrity: sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==} + /@next/swc-linux-x64-gnu@14.1.4: + resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -6055,8 +6055,8 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-musl@14.2.3: - resolution: {integrity: sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==} + /@next/swc-linux-x64-musl@14.1.4: + resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -6072,8 +6072,8 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-arm64-msvc@14.2.3: - resolution: {integrity: sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==} + /@next/swc-win32-arm64-msvc@14.1.4: + resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -6089,8 +6089,8 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-ia32-msvc@14.2.3: - resolution: {integrity: sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==} + /@next/swc-win32-ia32-msvc@14.1.4: + resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -6106,8 +6106,8 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-x64-msvc@14.2.3: - resolution: {integrity: sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==} + /@next/swc-win32-x64-msvc@14.1.4: + resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -6706,6 +6706,7 @@ packages: hasBin: true dependencies: playwright: 1.42.1 + dev: true /@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} @@ -7646,22 +7647,11 @@ packages: '@styled-system/css': 5.1.5 dev: false - /@swc/counter@0.1.3: - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - dev: false - /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: tslib: 2.6.2 - /@swc/helpers@0.5.5: - resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - dependencies: - '@swc/counter': 0.1.3 - tslib: 2.6.2 - dev: false - /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -16732,27 +16722,23 @@ packages: - '@babel/core' - babel-plugin-macros - /next@14.2.3(@babel/core@7.24.4)(@playwright/test@1.42.1)(babel-plugin-macros@3.1.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==} + /next@14.1.4(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 react: ^18.2.0 react-dom: ^18.2.0 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': optional: true - '@playwright/test': - optional: true sass: optional: true dependencies: - '@next/env': 14.2.3 - '@playwright/test': 1.42.1 - '@swc/helpers': 0.5.5 + '@next/env': 14.1.4 + '@swc/helpers': 0.5.2 busboy: 1.6.0 caniuse-lite: 1.0.30001599 graceful-fs: 4.2.11 @@ -16761,15 +16747,15 @@ packages: react-dom: 18.2.0(react@18.2.0) styled-jsx: 5.1.1(@babel/core@7.24.4)(babel-plugin-macros@3.1.0)(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.3 - '@next/swc-darwin-x64': 14.2.3 - '@next/swc-linux-arm64-gnu': 14.2.3 - '@next/swc-linux-arm64-musl': 14.2.3 - '@next/swc-linux-x64-gnu': 14.2.3 - '@next/swc-linux-x64-musl': 14.2.3 - '@next/swc-win32-arm64-msvc': 14.2.3 - '@next/swc-win32-ia32-msvc': 14.2.3 - '@next/swc-win32-x64-msvc': 14.2.3 + '@next/swc-darwin-arm64': 14.1.4 + '@next/swc-darwin-x64': 14.1.4 + '@next/swc-linux-arm64-gnu': 14.1.4 + '@next/swc-linux-arm64-musl': 14.1.4 + '@next/swc-linux-x64-gnu': 14.1.4 + '@next/swc-linux-x64-musl': 14.1.4 + '@next/swc-win32-arm64-msvc': 14.1.4 + '@next/swc-win32-ia32-msvc': 14.1.4 + '@next/swc-win32-x64-msvc': 14.1.4 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros From 702d8ae89e5542087d82897960d5362cb3a9e959 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Fri, 10 May 2024 15:41:36 -0500 Subject: [PATCH 07/35] title --- docs/pages/blog/introducing-pigment-css.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 5e0bb88cab964f..dea192be1fe15c 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -1,5 +1,5 @@ --- -title: 'Introducing Pigment CSS' +title: 'Introducing Pigment CSS: the next generaton of CSS-in-JS' description: 'TK' date: 2024-05-14T00:00:00.000Z authors: ['samuelsycamore'] From e41dc621edbacc834c60398368969972820298f5 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Fri, 10 May 2024 15:55:55 -0500 Subject: [PATCH 08/35] straight quotes --- docs/pages/blog/introducing-pigment-css.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index dea192be1fe15c..1228c22e2628d0 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -7,11 +7,11 @@ tags: ['Pigment CSS'] card: false --- -Introduction - start by stating the problem as clearly as possible: last gen’s CSS-in-JS solutions are incompatible with the new paradigm of React Server Components and the Next.js App Router. That’s why we created Pigment CSS. +Introduction - start by stating the problem as clearly as possible: last gen's CSS-in-JS solutions are incompatible with the new paradigm of React Server Components and the Next.js App Router. That's why we created Pigment CSS. ## What are React Server Components? -Briefly explain what RSCs are and why old CSS-in-JS solutions don’t work with them. +Briefly explain what RSCs are and why old CSS-in-JS solutions don't work with them. ## Why Pigment CSS? From c25dfdb31710edacf011aebca4c711590160eb9f Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 08:24:43 -0500 Subject: [PATCH 09/35] intro first pass, nbsps --- docs/pages/blog/introducing-pigment-css.md | 28 +++++++++++++++------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 1228c22e2628d0..d4673e26e328e6 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -1,27 +1,37 @@ --- -title: 'Introducing Pigment CSS: the next generaton of CSS-in-JS' +title: 'Introducing Pigment CSS: the next generaton of CSS-in-JS' description: 'TK' date: 2024-05-14T00:00:00.000Z authors: ['samuelsycamore'] -tags: ['Pigment CSS'] +tags: ['Pigment CSS'] card: false --- -Introduction - start by stating the problem as clearly as possible: last gen's CSS-in-JS solutions are incompatible with the new paradigm of React Server Components and the Next.js App Router. That's why we created Pigment CSS. +In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to the way they operate to support the latest patterns and reap the potential gains in performance. + +And thanks to recent advancements in CSS (like CSS variables and `color-mix()`), "traditional" CSS-in-JS solutions that process styles at runtime are no longer required for unlocking features like color transformations and theme variables which are necessary for maintaining a sophisticated design system. + +For a library as widely used as Material UI, the biggest challenge to keeping up with the times is to do so while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build components. + +That's where Pigment CSS comes in. + +Pigment CSS is MUI's new in-house styling solution: a zero-runtime CSS-in-JS package that generates colocated styles to their own CSS files at build time. +With Pigment CSS you get the latest and greatest advancements in CSS along with RSC compatibility, _plus_ significant performance improvements when compared with Emotion in Material UI v5. +And though it's specially tailored to meet the needs of Material UI users, it's important to note that Pigment CSS can be used with _any_ React component library you prefer. ## What are React Server Components? Briefly explain what RSCs are and why old CSS-in-JS solutions don't work with them. -## Why Pigment CSS? +## Why Pigment CSS? Explain the shortcomings of Emotion/styled-components -## How Pigment CSS works +## How Pigment CSS works -Show how Pigment CSS solves the problem outlined above. Explain how it works in 2-3 paragraphs with a few code snippets. Can derive this text from the doc on this topic. +Show how Pigment CSS solves the problem outlined above. Explain how it works in 2-3 paragraphs with a few code snippets. Can derive this text from the doc on this topic. -## Benefits of using Pigment CSS +## Benefits of using Pigment CSS ### Better performance @@ -33,8 +43,8 @@ Use code snippets to show how similar it is to Emotion in terms of DX ### Future-proof solution -Elaborate on the idea that Material UI is keeping up with the latest and greatest React features, AND that Pigment is not exclusively for use with Material UI. +Elaborate on the idea that Material UI is keeping up with the latest and greatest React features, AND that Pigment is not exclusively for use with Material UI. -## Get started with Pigment CSS +## Get started with Pigment CSS Conclude by telling users where to go and what to do to get started. Link to Next.js and Vite starters. Invite users to star the repo and open issues. From db5806bce27f186777bc23f16e056156a0a640b8 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 11:12:32 -0500 Subject: [PATCH 10/35] why pigment --- docs/pages/blog/introducing-pigment-css.md | 33 ++++++++++++++++------ 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index d4673e26e328e6..6a4c1d22c8a6ef 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -8,24 +8,41 @@ card: false --- In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to the way they operate to support the latest patterns and reap the potential gains in performance. +Trouble is, the "traditional" CSS-in-JS solutions we rely on, like Emotion and styled-components—collectively favored by nearly half of the React ecosystem—aren't able to come along with us. -And thanks to recent advancements in CSS (like CSS variables and `color-mix()`), "traditional" CSS-in-JS solutions that process styles at runtime are no longer required for unlocking features like color transformations and theme variables which are necessary for maintaining a sophisticated design system. - -For a library as widely used as Material UI, the biggest challenge to keeping up with the times is to do so while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build components. +For a library as widely used as Material UI, the biggest challenge to keeping up with the times is to do so while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build UI components. That's where Pigment CSS comes in. Pigment CSS is MUI's new in-house styling solution: a zero-runtime CSS-in-JS package that generates colocated styles to their own CSS files at build time. With Pigment CSS you get the latest and greatest advancements in CSS along with RSC compatibility, _plus_ significant performance improvements when compared with Emotion in Material UI v5. -And though it's specially tailored to meet the needs of Material UI users, it's important to note that Pigment CSS can be used with _any_ React component library you prefer. +And though it's specially tailored to meet the needs of Material UI users, Pigment CSS can be used with _any_ React component library you prefer. -## What are React Server Components? +## Why Pigment CSS? -Briefly explain what RSCs are and why old CSS-in-JS solutions don't work with them. +### Traditional CSS-in-JS is not enough -## Why Pigment CSS? +Emotion made a lot of sense for Material UI v5 in late 2021, but so much has changed in the React ecosystem since then. +In early 2023 React introduced Server Components, and Next.js offered the first implementation of the new spec with the App Router shortly thereafter. + +RSCs unlock a whole new realm of possibilities for React; for us as UI developers, it means we can create components that are fully rendered at build time so we don't have to pass that burden on to the client at runtime. +But working with RSCs requires us to let go of familiar APIs like `useContext`, which in turn becomes a major blocker for using the last generation's style engines like Emotion that rely heavily on this hook for theming. + +### Other options don't meet our needs + +For those of us who are perfectly happy with the patterns we know and love in CSS-in-JS, it feels frustrating to consider abandoning all that muscle memory just to reinvent the wheel yet again. +We like the DX of colocated styles, and we'd rather not bloat the DOM with atomic class names—so Tailwind CSS, StyleX, Panda CSS, and other solutions that have cropped up in recent months just don't match up with our preferences. + +### Material UI is a unique use case + +Material UI is downloaded millions of times per month and is one of the most rigorously battle-tested UI libraries on the internet, with a GitHub history spanning all the way back to 2014. +It's had to make some massive changes along the way to keep up with the times; most recently, migrating from JSS to Emotion from v4 to v5. +While those breaking changes did bring many benefits overall, they unfortunately came with a notoriously painful migration experience. + +We learned our lesson! +We can't do that to our users again. -Explain the shortcomings of Emotion/styled-components +So when it came time to seek out a new way to generate styles, we knew we needed to keep the composition and syntax as similar as possible to Emotion and styled-components, to minimize friction when migrating. ## How Pigment CSS works From f4eb4f77ac6a52ac197bc27349612ed9914144e2 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 11:35:48 -0500 Subject: [PATCH 11/35] how pigment works --- docs/pages/blog/introducing-pigment-css.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 6a4c1d22c8a6ef..b0b16134241628 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -28,6 +28,10 @@ In early 2023 React introduced Server Components, and Next.js offered the first RSCs unlock a whole new realm of possibilities for React; for us as UI developers, it means we can create components that are fully rendered at build time so we don't have to pass that burden on to the client at runtime. But working with RSCs requires us to let go of familiar APIs like `useContext`, which in turn becomes a major blocker for using the last generation's style engines like Emotion that rely heavily on this hook for theming. +:::info +To learn more about RSCs, we highly recommend reading [Making Sense of React Server Components](https://www.joshwcomeau.com/react/server-components/) by Josh Comeau. +::: + ### Other options don't meet our needs For those of us who are perfectly happy with the patterns we know and love in CSS-in-JS, it feels frustrating to consider abandoning all that muscle memory just to reinvent the wheel yet again. @@ -46,7 +50,18 @@ So when it came time to seek out a new way to generate styles, we knew we needed ## How Pigment CSS works -Show how Pigment CSS solves the problem outlined above. Explain how it works in 2-3 paragraphs with a few code snippets. Can derive this text from the doc on this topic. +Pigment CSS is a zero-runtime CSS-in-JS library. +This means it does not have access to the end user's browser runtime which would be necessary to generate and insert authored CSS at runtime. +Instead, it does all its processing at build time to pre-generate the CSS which then becomes part of the output bundle. + +Pigment CSS is built on top of the [WyW-in-JS](https://wyw-in-js.dev/) library that also powers [Linaria](https://linaria.dev/). +It features a [processor](https://wyw-in-js.dev/how-to/custom-tagged-template#creating-a-processor) which makes it possible to create custom logic that's triggered by the presence of different imports from the library. +The processor looks through the source code for `styled()`, `css()`, and other function calls and extracts the arguments to be evaluated. +These values are then handed back to Pigment CSS for additional parsing and evaluation. + +:::info +Check out [How Pigment CSS works](https://github.com/mui/pigment-css/blob/master/HOW_PIGMENT_CSS_WORKS.md) for complete details. +::: ## Benefits of using Pigment CSS From 4c017191a96494913b712bea8492918ecd8cf8f6 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 13:02:36 -0500 Subject: [PATCH 12/35] tailwind nbsp --- docs/pages/blog/introducing-pigment-css.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index b0b16134241628..81be5fef63c419 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -35,7 +35,7 @@ To learn more about RSCs, we highly recommend reading [Making Sense of React Ser ### Other options don't meet our needs For those of us who are perfectly happy with the patterns we know and love in CSS-in-JS, it feels frustrating to consider abandoning all that muscle memory just to reinvent the wheel yet again. -We like the DX of colocated styles, and we'd rather not bloat the DOM with atomic class names—so Tailwind CSS, StyleX, Panda CSS, and other solutions that have cropped up in recent months just don't match up with our preferences. +We like the DX of colocated styles, and we'd rather not bloat the DOM with atomic class names—so Tailwind CSS, StyleX, Panda CSS, and other solutions that have cropped up in recent months just don't match up with our preferences. ### Material UI is a unique use case From 215673e562f931f8a0dfd337c95ad7fe60e9a1b1 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 13:20:47 -0500 Subject: [PATCH 13/35] benefits --- docs/pages/blog/introducing-pigment-css.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 81be5fef63c419..889bd51f061398 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -32,11 +32,6 @@ But working with RSCs requires us to let go of familiar APIs like `useContext`, To learn more about RSCs, we highly recommend reading [Making Sense of React Server Components](https://www.joshwcomeau.com/react/server-components/) by Josh Comeau. ::: -### Other options don't meet our needs - -For those of us who are perfectly happy with the patterns we know and love in CSS-in-JS, it feels frustrating to consider abandoning all that muscle memory just to reinvent the wheel yet again. -We like the DX of colocated styles, and we'd rather not bloat the DOM with atomic class names—so Tailwind CSS, StyleX, Panda CSS, and other solutions that have cropped up in recent months just don't match up with our preferences. - ### Material UI is a unique use case Material UI is downloaded millions of times per month and is one of the most rigorously battle-tested UI libraries on the internet, with a GitHub history spanning all the way back to 2014. @@ -48,10 +43,14 @@ We can't do that to our users again. So when it came time to seek out a new way to generate styles, we knew we needed to keep the composition and syntax as similar as possible to Emotion and styled-components, to minimize friction when migrating. +### Other options don't meet our needs + +For those of us who are perfectly happy with the patterns we know and love in CSS-in-JS, it feels frustrating to consider abandoning all that muscle memory just to reinvent the wheel yet again. +We like the DX of colocated styles, and we'd rather not bloat the DOM with atomic class names—so Tailwind CSS, StyleX, Panda CSS, and other solutions that have cropped up in recent months just don't match up with our preferences. + ## How Pigment CSS works -Pigment CSS is a zero-runtime CSS-in-JS library. -This means it does not have access to the end user's browser runtime which would be necessary to generate and insert authored CSS at runtime. +Pigment CSS is a zero-runtime CSS-in-JS library: This means it doesn't have access to the end user's browser runtime, which would be necessary to generate and insert authored CSS at runtime. Instead, it does all its processing at build time to pre-generate the CSS which then becomes part of the output bundle. Pigment CSS is built on top of the [WyW-in-JS](https://wyw-in-js.dev/) library that also powers [Linaria](https://linaria.dev/). @@ -65,6 +64,11 @@ Check out [How Pigment CSS works](https://github.com/mui/pigment-css/blob/maste ## Benefits of using Pigment CSS +For Material UI users, the benefits of adopting Pigment CSS\* are clear: your users get better performance, and you get RSC and App Router compatibility without having to significantly change how you author component styles. + +_\*These benefits extend to other component libraries beyond Material UI as well, but that's our focus for the sections that follow._ +_We intend for Pigment CSS to be a viable solution for the React ecosystem as a whole, but you can understand why we're prioritizing Material UI during early development._ + ### Better performance Benchmarks - compare Pigment to Emotion and others From f661b38f104456aa9989adde6ab9e27cae32b49a Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 13:21:55 -0500 Subject: [PATCH 14/35] for material ui --- docs/pages/blog/introducing-pigment-css.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 889bd51f061398..b2a01d32df4a84 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -1,5 +1,5 @@ --- -title: 'Introducing Pigment CSS: the next generaton of CSS-in-JS' +title: 'Introducing Pigment CSS: the next generaton of CSS-in-JS for Material UI' description: 'TK' date: 2024-05-14T00:00:00.000Z authors: ['samuelsycamore'] From 7c4699b1b9a2217cad74b79d23a1f0336705d3bf Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 13:22:43 -0500 Subject: [PATCH 15/35] typo --- docs/pages/blog/introducing-pigment-css.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index b2a01d32df4a84..b052e02fb81505 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -1,5 +1,5 @@ --- -title: 'Introducing Pigment CSS: the next generaton of CSS-in-JS for Material UI' +title: 'Introducing Pigment CSS: the next generation of CSS-in-JS for Material UI' description: 'TK' date: 2024-05-14T00:00:00.000Z authors: ['samuelsycamore'] From 7396c5092acf9c35769d9e133fdea46d4a5b581c Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 14:18:22 -0500 Subject: [PATCH 16/35] state of css --- docs/pages/blog/introducing-pigment-css.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index b052e02fb81505..8a6f2582c7f441 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -8,7 +8,9 @@ card: false --- In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to the way they operate to support the latest patterns and reap the potential gains in performance. -Trouble is, the "traditional" CSS-in-JS solutions we rely on, like Emotion and styled-components—collectively favored by nearly half of the React ecosystem—aren't able to come along with us. + +Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us. +And with nearly 50% of respondents indicating they use styled-components in [State of CSS 2023](https://2023.stateofcss.com/en-US/css-in-js/), we're looking at a whole lot of developers who have no clear path forward from here. For a library as widely used as Material UI, the biggest challenge to keeping up with the times is to do so while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build UI components. From 3712171a2581a61cbcf314c6d8c8d39d2f085e6c Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 14:25:01 -0500 Subject: [PATCH 17/35] briefly clarify whys in intro --- docs/pages/blog/introducing-pigment-css.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 8a6f2582c7f441..ed6a8635aed03e 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -7,9 +7,9 @@ tags: ['Pigment CSS'] card: false --- -In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to the way they operate to support the latest patterns and reap the potential gains in performance. +In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes for better performance by moving more of the work of rendering the UI from run time to build time. -Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us. +Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us because so much of what they do happens at run time. And with nearly 50% of respondents indicating they use styled-components in [State of CSS 2023](https://2023.stateofcss.com/en-US/css-in-js/), we're looking at a whole lot of developers who have no clear path forward from here. For a library as widely used as Material UI, the biggest challenge to keeping up with the times is to do so while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build UI components. From 89042b8dfcab1a869f4d1b42508d408a8415d0fb Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 14:26:02 -0500 Subject: [PATCH 18/35] rephrasing a little --- docs/pages/blog/introducing-pigment-css.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index ed6a8635aed03e..5725ed5dd60f20 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -7,7 +7,7 @@ tags: ['Pigment CSS'] card: false --- -In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes for better performance by moving more of the work of rendering the UI from run time to build time. +In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to reap the potential performance gains by moving more of the work of rendering the UI from run time to build time. Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us because so much of what they do happens at run time. And with nearly 50% of respondents indicating they use styled-components in [State of CSS 2023](https://2023.stateofcss.com/en-US/css-in-js/), we're looking at a whole lot of developers who have no clear path forward from here. From 0325259265bbc4d524a6ab0371a4a0bce6889549 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 14:57:30 -0500 Subject: [PATCH 19/35] perf, future --- docs/pages/blog/introducing-pigment-css.md | 25 +++++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 5725ed5dd60f20..16f9bc3418f89e 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -10,9 +10,9 @@ card: false In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to reap the potential performance gains by moving more of the work of rendering the UI from run time to build time. Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us because so much of what they do happens at run time. -And with nearly 50% of respondents indicating they use styled-components in [State of CSS 2023](https://2023.stateofcss.com/en-US/css-in-js/), we're looking at a whole lot of developers who have no clear path forward from here. +And with nearly 50% of respondents indicating they use styled-components in [State of CSS 2023](https://2023.stateofcss.com/en-US/css-in-js/), we're looking at a whole lot of React developers who have no clear path forward from here. -For a library as widely used as Material UI, the biggest challenge to keeping up with the times is to do so while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build UI components. +For a library as widely used as Material UI, the biggest challenge is to stay up-to-date while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build UI components. That's where Pigment CSS comes in. @@ -27,7 +27,7 @@ And though it's specially tailored to meet the needs of Material UI users, Pigm Emotion made a lot of sense for Material UI v5 in late 2021, but so much has changed in the React ecosystem since then. In early 2023 React introduced Server Components, and Next.js offered the first implementation of the new spec with the App Router shortly thereafter. -RSCs unlock a whole new realm of possibilities for React; for us as UI developers, it means we can create components that are fully rendered at build time so we don't have to pass that burden on to the client at runtime. +RSCs unlock a whole new realm of possibilities for React; for us as UI developers, it means we can create components that are fully rendered at build time so we don't have to pass that burden on to the client at run time. But working with RSCs requires us to let go of familiar APIs like `useContext`, which in turn becomes a major blocker for using the last generation's style engines like Emotion that rely heavily on this hook for theming. :::info @@ -43,7 +43,7 @@ While those breaking changes did bring many benefits overall, they unfortunately We learned our lesson! We can't do that to our users again. -So when it came time to seek out a new way to generate styles, we knew we needed to keep the composition and syntax as similar as possible to Emotion and styled-components, to minimize friction when migrating. +So when it came time to seek out a new way to generate styles, we knew we needed to keep the syntax and authoring experience as similar as possible to Emotion and styled-components, to minimize friction when migrating. ### Other options don't meet our needs @@ -52,7 +52,7 @@ We like the DX of colocated styles, and we'd rather not bloat the DOM with atomi ## How Pigment CSS works -Pigment CSS is a zero-runtime CSS-in-JS library: This means it doesn't have access to the end user's browser runtime, which would be necessary to generate and insert authored CSS at runtime. +Pigment CSS is a zero-runtime CSS-in-JS library: This means it doesn't have access to the end user's browser runtime, which would be necessary to generate and insert authored CSS at run time. Instead, it does all its processing at build time to pre-generate the CSS which then becomes part of the output bundle. Pigment CSS is built on top of the [WyW-in-JS](https://wyw-in-js.dev/) library that also powers [Linaria](https://linaria.dev/). @@ -66,14 +66,19 @@ Check out [How Pigment CSS works](https://github.com/mui/pigment-css/blob/maste ## Benefits of using Pigment CSS -For Material UI users, the benefits of adopting Pigment CSS\* are clear: your users get better performance, and you get RSC and App Router compatibility without having to significantly change how you author component styles. +For Material UI users, the benefits of adopting Pigment CSS\* are clear: your end users get better performance, and you get RSC and App Router compatibility without having to significantly change how you author component styles. _\*These benefits extend to other component libraries beyond Material UI as well, but that's our focus for the sections that follow._ _We intend for Pigment CSS to be a viable solution for the React ecosystem as a whole, but you can understand why we're prioritizing Material UI during early development._ ### Better performance -Benchmarks - compare Pigment to Emotion and others +When comparing the same Material UI app built with Next.js and either Emotion or Pigment CSS, the latter led to: + +- 20% reduction in first load JS (104 kB vs. 131 kB) +- 9% decrease in First Contentful Paint (455 ms vs. 503 ms) +- 15% reduction in Time To First Byte +- 7.5% reduction in page HTML (14.7 kB vs. 15.9 kB) ### Familiar developer experience @@ -81,7 +86,11 @@ Use code snippets to show how similar it is to Emotion in terms of DX ### Future-proof solution -Elaborate on the idea that Material UI is keeping up with the latest and greatest React features, AND that Pigment is not exclusively for use with Material UI. +Though we're still quite early in the era of RSCs, it seems inevitable that the ecosystem as a whole will converge on this new paradigm for React. +Next.js gave us our first glimpse with the App Router; RedwoodJS [recently released their own implementation](https://redwoodjs.com/blog/rsc-now-in-redwoodjs), and many other frameworks and meta-frameworks are currently working out POCs and RFCs to catch up. +Regardless of how quickly RSCs catch on among developers, it's clear that library maintainers need to support [the two Reacts](https://overreacted.io/the-two-reacts/) (client-side and server-side) to stay relevant in the future. + +Pigment CSS, then, is yet another bet from MUI on the longevity and sustainability of the React ecosystem—and a promise that we'll continue to innovate in this space for years to come. ## Get started with Pigment CSS From a6a356d2b473f2ff65fb3d17771f0890426b1863 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 15:46:21 -0500 Subject: [PATCH 20/35] first draft complete --- docs/pages/blog/introducing-pigment-css.md | 39 ++++++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 16f9bc3418f89e..daeabdf435df8e 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -1,16 +1,16 @@ --- title: 'Introducing Pigment CSS: the next generation of CSS-in-JS for Material UI' -description: 'TK' +description: 'Pigment CSS offers significant performance gains along with RSC and App Router support.' date: 2024-05-14T00:00:00.000Z authors: ['samuelsycamore'] tags: ['Pigment CSS'] card: false --- -In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to reap the potential performance gains by moving more of the work of rendering the UI from run time to build time. +In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to reap the potential performance gains by moving more of the work of rendering UIs from run time to build time. Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us because so much of what they do happens at run time. -And with nearly 50% of respondents indicating they use styled-components in [State of CSS 2023](https://2023.stateofcss.com/en-US/css-in-js/), we're looking at a whole lot of React developers who have no clear path forward from here. +And with nearly 50% of respondents in the [State of CSS 2023 survey](https://2023.stateofcss.com/en-US/css-in-js/) indicating they use styled-components, we're looking at a whole lot of React developers with no clear path forward from here. For a library as widely used as Material UI, the biggest challenge is to stay up-to-date while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build UI components. @@ -37,7 +37,7 @@ To learn more about RSCs, we highly recommend reading [Making Sense of React Ser ### Material UI is a unique use case Material UI is downloaded millions of times per month and is one of the most rigorously battle-tested UI libraries on the internet, with a GitHub history spanning all the way back to 2014. -It's had to make some massive changes along the way to keep up with the times; most recently, migrating from JSS to Emotion from v4 to v5. +It's had to make some massive changes along the way to keep up with the times; most recently, moving from JSS to Emotion from v4 to v5. While those breaking changes did bring many benefits overall, they unfortunately came with a notoriously painful migration experience. We learned our lesson! @@ -47,7 +47,7 @@ So when it came time to seek out a new way to generate styles, we knew we needed ### Other options don't meet our needs -For those of us who are perfectly happy with the patterns we know and love in CSS-in-JS, it feels frustrating to consider abandoning all that muscle memory just to reinvent the wheel yet again. +For those of us who are perfectly happy with the patterns we know and love from CSS-in-JS, it feels frustrating to consider abandoning all that muscle memory just to reinvent the wheel yet again. We like the DX of colocated styles, and we'd rather not bloat the DOM with atomic class names—so Tailwind CSS, StyleX, Panda CSS, and other solutions that have cropped up in recent months just don't match up with our preferences. ## How Pigment CSS works @@ -82,16 +82,33 @@ When comparing the same Material UI app built with Next.js and either Emotion o ### Familiar developer experience -Use code snippets to show how similar it is to Emotion in terms of DX +For developers migrating from Emotion or styled-components, you're probably already familiar with the most common patterns employed by Pigment CSS. +`styled()` and `css()` are the two main functions used to define styles, and they mostly work the same as you'd expect them to (with some notable differences due to the nature of build-time CSS-in-JS—see [Coming from Emotion or styled-components](https://github.com/mui/pigment-css/tree/master?tab=readme-ov-file#coming-from-emotion-or-styled-components) for details). + +We've also ported over the `sx` prop from MUI System, so you can still define styles directly in a given component, but now it's much more performant than before. +And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes—not just Material UI components—so you don't need to wrap a simple `
` or `` with a Box component to apply theme styles to it. ### Future-proof solution -Though we're still quite early in the era of RSCs, it seems inevitable that the ecosystem as a whole will converge on this new paradigm for React. -Next.js gave us our first glimpse with the App Router; RedwoodJS [recently released their own implementation](https://redwoodjs.com/blog/rsc-now-in-redwoodjs), and many other frameworks and meta-frameworks are currently working out POCs and RFCs to catch up. -Regardless of how quickly RSCs catch on among developers, it's clear that library maintainers need to support [the two Reacts](https://overreacted.io/the-two-reacts/) (client-side and server-side) to stay relevant in the future. +Though we're still quite early in RSC era, it seems inevitable that the ecosystem as a whole will converge on this new paradigm for React over time. +Next.js gave us our first glimpse with the App Router; RedwoodJS [recently released their own implementation](https://redwoodjs.com/blog/rsc-now-in-redwoodjs); and many other frameworks and meta-frameworks are currently working out POCs and RFCs to catch up. +Regardless of how quickly Server Components catch on among developers, it's clear that library maintainers now must support [the two Reacts](https://overreacted.io/the-two-reacts/) (client-side and server-side) to stay relevant into the future. Pigment CSS, then, is yet another bet from MUI on the longevity and sustainability of the React ecosystem—and a promise that we'll continue to innovate in this space for years to come. -## Get started with Pigment CSS +And perhaps most importantly: because Pigment CSS is maintained by the same folks behind Material UI, we'll have a lot more control over how the tool evolves over time to continue to meet our users' needs. +In a perfect world, this would be the last time you'd ever have to migrate your Material UI app to a new style engine. +We'll do our best to make that a reality. 🤞 + +## What's next + +Pigment CSS is currently in the early alpha stage of development—the plan is to have a stable version ready to release alongside Material UI v6 later this year. +When that happens, you'll have the choice to opt in to Pigment CSS incrementally after migrating to v6, giving you all the time you need to migrate on your own terms. + +That said, Pigment CSS is available now for experimentation, and we'd love for you to give it a try and let us know what you think—your feedback at this stage could have a major impact on the final product. + +## Get started with Pigment CSS -Conclude by telling users where to go and what to do to get started. Link to Next.js and Vite starters. Invite users to star the repo and open issues. +Head to the [Pigment CSS repo](https://github.com/mui/pigment-css/) to learn how to set it up and start tinkering. +Please feel free to [open a new issue](https://github.com/mui/pigment-css/issues) if you encounter any bugs or frustrations along the way. +And while you're there, why not ⭐️ star the repo ⭐️ to let us know you're excited and help spread the word to others? 😁 From e86ebf914a9cfac87be351ffaf27c22d14b070eb Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 16:06:54 -0500 Subject: [PATCH 21/35] run-time, build-time --- docs/pages/blog/introducing-pigment-css.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index daeabdf435df8e..3537b2be6e0dbf 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -7,16 +7,16 @@ tags: ['Pigment CSS'] card: false --- -In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to reap the potential performance gains by moving more of the work of rendering UIs from run time to build time. +In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to reap the potential performance gains by moving more of the work of rendering UIs from run-time to build-time. -Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us because so much of what they do happens at run time. +Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us because so much of what they do happens at run-time. And with nearly 50% of respondents in the [State of CSS 2023 survey](https://2023.stateofcss.com/en-US/css-in-js/) indicating they use styled-components, we're looking at a whole lot of React developers with no clear path forward from here. For a library as widely used as Material UI, the biggest challenge is to stay up-to-date while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build UI components. That's where Pigment CSS comes in. -Pigment CSS is MUI's new in-house styling solution: a zero-runtime CSS-in-JS package that generates colocated styles to their own CSS files at build time. +Pigment CSS is MUI's new in-house styling solution: a zero-runtime CSS-in-JS package that generates colocated styles to their own CSS files at build-time. With Pigment CSS you get the latest and greatest advancements in CSS along with RSC compatibility, _plus_ significant performance improvements when compared with Emotion in Material UI v5. And though it's specially tailored to meet the needs of Material UI users, Pigment CSS can be used with _any_ React component library you prefer. @@ -27,7 +27,7 @@ And though it's specially tailored to meet the needs of Material UI users, Pigm Emotion made a lot of sense for Material UI v5 in late 2021, but so much has changed in the React ecosystem since then. In early 2023 React introduced Server Components, and Next.js offered the first implementation of the new spec with the App Router shortly thereafter. -RSCs unlock a whole new realm of possibilities for React; for us as UI developers, it means we can create components that are fully rendered at build time so we don't have to pass that burden on to the client at run time. +RSCs unlock a whole new realm of possibilities for React; for us as UI developers, it means we can create components that are fully rendered at build-time so we don't have to pass that burden on to the client at run-time. But working with RSCs requires us to let go of familiar APIs like `useContext`, which in turn becomes a major blocker for using the last generation's style engines like Emotion that rely heavily on this hook for theming. :::info @@ -52,8 +52,8 @@ We like the DX of colocated styles, and we'd rather not bloat the DOM with atomi ## How Pigment CSS works -Pigment CSS is a zero-runtime CSS-in-JS library: This means it doesn't have access to the end user's browser runtime, which would be necessary to generate and insert authored CSS at run time. -Instead, it does all its processing at build time to pre-generate the CSS which then becomes part of the output bundle. +Pigment CSS is a zero-runtime CSS-in-JS library: This means it doesn't have access to the end user's browser runtime, which would be necessary to generate and insert authored CSS at run-time. +Instead, it does all its processing at build-time to pre-generate the CSS which then becomes part of the output bundle. Pigment CSS is built on top of the [WyW-in-JS](https://wyw-in-js.dev/) library that also powers [Linaria](https://linaria.dev/). It features a [processor](https://wyw-in-js.dev/how-to/custom-tagged-template#creating-a-processor) which makes it possible to create custom logic that's triggered by the presence of different imports from the library. @@ -90,9 +90,9 @@ And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes ### Future-proof solution -Though we're still quite early in RSC era, it seems inevitable that the ecosystem as a whole will converge on this new paradigm for React over time. +Though we're still quite early in the RSC era, it seems inevitable that the React ecosystem as a whole will converge on this new paradigm over time. Next.js gave us our first glimpse with the App Router; RedwoodJS [recently released their own implementation](https://redwoodjs.com/blog/rsc-now-in-redwoodjs); and many other frameworks and meta-frameworks are currently working out POCs and RFCs to catch up. -Regardless of how quickly Server Components catch on among developers, it's clear that library maintainers now must support [the two Reacts](https://overreacted.io/the-two-reacts/) (client-side and server-side) to stay relevant into the future. +Regardless of how quickly Server Components catch on among developers, it's clear that library maintainers must now support [the two Reacts](https://overreacted.io/the-two-reacts/) (client-side and server-side) to stay relevant into the future. Pigment CSS, then, is yet another bet from MUI on the longevity and sustainability of the React ecosystem—and a promise that we'll continue to innovate in this space for years to come. From 48a33f36a6853c10e0a6d06bf6e0019470cc9621 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 16:07:36 -0500 Subject: [PATCH 22/35] nbsps --- docs/pages/blog/introducing-pigment-css.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 3537b2be6e0dbf..799cb47e2a3fd5 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -1,5 +1,5 @@ --- -title: 'Introducing Pigment CSS: the next generation of CSS-in-JS for Material UI' +title: 'Introducing Pigment CSS: the next generation of CSS-in-JS for Material UI' description: 'Pigment CSS offers significant performance gains along with RSC and App Router support.' date: 2024-05-14T00:00:00.000Z authors: ['samuelsycamore'] @@ -86,7 +86,7 @@ For developers migrating from Emotion or styled-components, you're probably alre `styled()` and `css()` are the two main functions used to define styles, and they mostly work the same as you'd expect them to (with some notable differences due to the nature of build-time CSS-in-JS—see [Coming from Emotion or styled-components](https://github.com/mui/pigment-css/tree/master?tab=readme-ov-file#coming-from-emotion-or-styled-components) for details). We've also ported over the `sx` prop from MUI System, so you can still define styles directly in a given component, but now it's much more performant than before. -And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes—not just Material UI components—so you don't need to wrap a simple `
` or `` with a Box component to apply theme styles to it. +And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes—not just Material UI components—so you don't need to wrap a simple `
` or `` with a Box component to apply theme styles to it. ### Future-proof solution @@ -97,7 +97,7 @@ Regardless of how quickly Server Components catch on among developers, it's clea Pigment CSS, then, is yet another bet from MUI on the longevity and sustainability of the React ecosystem—and a promise that we'll continue to innovate in this space for years to come. And perhaps most importantly: because Pigment CSS is maintained by the same folks behind Material UI, we'll have a lot more control over how the tool evolves over time to continue to meet our users' needs. -In a perfect world, this would be the last time you'd ever have to migrate your Material UI app to a new style engine. +In a perfect world, this would be the last time you'd ever have to migrate your Material UI app to a new style engine. We'll do our best to make that a reality. 🤞 ## What's next @@ -107,8 +107,8 @@ When that happens, you'll have the choice to opt in to Pigment CSS incrementall That said, Pigment CSS is available now for experimentation, and we'd love for you to give it a try and let us know what you think—your feedback at this stage could have a major impact on the final product. -## Get started with Pigment CSS +## Get started with Pigment CSS -Head to the [Pigment CSS repo](https://github.com/mui/pigment-css/) to learn how to set it up and start tinkering. +Head to the [Pigment CSS repo](https://github.com/mui/pigment-css/) to learn how to set it up and start tinkering. Please feel free to [open a new issue](https://github.com/mui/pigment-css/issues) if you encounter any bugs or frustrations along the way. And while you're there, why not ⭐️ star the repo ⭐️ to let us know you're excited and help spread the word to others? 😁 From b8696f072344b7724919ff08ffde587ce2b9f904 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Mon, 13 May 2024 16:26:45 -0500 Subject: [PATCH 23/35] more vale fixes --- docs/pages/blog/introducing-pigment-css.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 799cb47e2a3fd5..89a3e28945542b 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -75,7 +75,7 @@ _We intend for Pigment CSS to be a viable solution for the React ecosystem as a When comparing the same Material UI app built with Next.js and either Emotion or Pigment CSS, the latter led to: -- 20% reduction in first load JS (104 kB vs. 131 kB) +- 20% reduction in first load JavaScript (104 kB vs. 131 kB) - 9% decrease in First Contentful Paint (455 ms vs. 503 ms) - 15% reduction in Time To First Byte - 7.5% reduction in page HTML (14.7 kB vs. 15.9 kB) @@ -85,7 +85,7 @@ When comparing the same Material UI app built with Next.js and either Emotion o For developers migrating from Emotion or styled-components, you're probably already familiar with the most common patterns employed by Pigment CSS. `styled()` and `css()` are the two main functions used to define styles, and they mostly work the same as you'd expect them to (with some notable differences due to the nature of build-time CSS-in-JS—see [Coming from Emotion or styled-components](https://github.com/mui/pigment-css/tree/master?tab=readme-ov-file#coming-from-emotion-or-styled-components) for details). -We've also ported over the `sx` prop from MUI System, so you can still define styles directly in a given component, but now it's much more performant than before. +We've also ported over the `sx` prop from MUI System, so you can still define styles directly in a given component, but now it's much more performant than before. And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes—not just Material UI components—so you don't need to wrap a simple `
` or `` with a Box component to apply theme styles to it. ### Future-proof solution From c865606ffd2a12d7d632645e738687ceb5ad2a80 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Tue, 14 May 2024 08:17:14 -0500 Subject: [PATCH 24/35] Apply suggestions from code review Co-authored-by: Brijesh Bittu Co-authored-by: Marija Najdova Co-authored-by: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Signed-off-by: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> --- docs/pages/blog/introducing-pigment-css.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 89a3e28945542b..86a8e6a327c3c0 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -7,17 +7,17 @@ tags: ['Pigment CSS'] card: false --- -In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to reap the potential performance gains by moving more of the work of rendering UIs from run-time to build-time. +In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to reap the potential performance gains by moving more of the work of rendering UIs from client to server. -Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us because so much of what they do happens at run-time. -And with nearly 50% of respondents in the [State of CSS 2023 survey](https://2023.stateofcss.com/en-US/css-in-js/) indicating they use styled-components, we're looking at a whole lot of React developers with no clear path forward from here. +Trouble is, the "traditional" CSS-in-JS solutions we rely on aren't able to come along with us because so much of what they do happens on the client. +And with nearly 70% of respondents in the [State of CSS 2023 survey](https://2023.stateofcss.com/en-US/css-in-js/) indicating they use styled-components and Emotion, we're looking at a whole lot of React developers with no clear path forward from here. For a library as widely used as Material UI, the biggest challenge is to stay up-to-date while introducing as few breaking changes as humanly possible, to maintain a consistent and reliable developer experience without asking users to completely change the way they build UI components. That's where Pigment CSS comes in. Pigment CSS is MUI's new in-house styling solution: a zero-runtime CSS-in-JS package that generates colocated styles to their own CSS files at build-time. -With Pigment CSS you get the latest and greatest advancements in CSS along with RSC compatibility, _plus_ significant performance improvements when compared with Emotion in Material UI v5. +With Pigment CSS you get the latest and greatest advancements in CSS along with RSC compatibility, _plus_ significant performance improvements when compared with Emotion, the styling engine used in Material UI v5. And though it's specially tailored to meet the needs of Material UI users, Pigment CSS can be used with _any_ React component library you prefer. ## Why Pigment CSS? @@ -27,7 +27,7 @@ And though it's specially tailored to meet the needs of Material UI users, Pigm Emotion made a lot of sense for Material UI v5 in late 2021, but so much has changed in the React ecosystem since then. In early 2023 React introduced Server Components, and Next.js offered the first implementation of the new spec with the App Router shortly thereafter. -RSCs unlock a whole new realm of possibilities for React; for us as UI developers, it means we can create components that are fully rendered at build-time so we don't have to pass that burden on to the client at run-time. +RSCs unlock a whole new realm of possibilities for React; for us as UI developers, it means we can create components that are fully renderable at build-time so we don't have to pass that burden on to the client at run-time. But working with RSCs requires us to let go of familiar APIs like `useContext`, which in turn becomes a major blocker for using the last generation's style engines like Emotion that rely heavily on this hook for theming. :::info @@ -43,7 +43,7 @@ While those breaking changes did bring many benefits overall, they unfortunately We learned our lesson! We can't do that to our users again. -So when it came time to seek out a new way to generate styles, we knew we needed to keep the syntax and authoring experience as similar as possible to Emotion and styled-components, to minimize friction when migrating. +So when it came time to seek out a new way to generate styles, we knew we needed to keep the syntax and authoring experience as similar as possible to Emotion and styled-components, and provide codemods for most of the breaking changes, in order to minimize friction when migrating. ### Other options don't meet our needs @@ -85,7 +85,7 @@ When comparing the same Material UI app built with Next.js and either Emotion o For developers migrating from Emotion or styled-components, you're probably already familiar with the most common patterns employed by Pigment CSS. `styled()` and `css()` are the two main functions used to define styles, and they mostly work the same as you'd expect them to (with some notable differences due to the nature of build-time CSS-in-JS—see [Coming from Emotion or styled-components](https://github.com/mui/pigment-css/tree/master?tab=readme-ov-file#coming-from-emotion-or-styled-components) for details). -We've also ported over the `sx` prop from MUI System, so you can still define styles directly in a given component, but now it's much more performant than before. +We've also ported over [the `sx` prop](/system/getting-started/the-sx-prop/) from MUI System, so you can still define styles directly in a given component, but now it's much more performant than before. And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes—not just Material UI components—so you don't need to wrap a simple `
` or `` with a Box component to apply theme styles to it. ### Future-proof solution @@ -102,7 +102,7 @@ We'll do our best to make that a reality. 🤞 ## What's next -Pigment CSS is currently in the early alpha stage of development—the plan is to have a stable version ready to release alongside Material UI v6 later this year. +Pigment CSS is currently in the early alpha stage of development—the plan is to have a fully featured version ready to release alongside Material UI v6 later this year. When that happens, you'll have the choice to opt in to Pigment CSS incrementally after migrating to v6, giving you all the time you need to migrate on your own terms. That said, Pigment CSS is available now for experimentation, and we'd love for you to give it a try and let us know what you think—your feedback at this stage could have a major impact on the final product. From 1271247c10481603ac674ebff18e188007fc1954 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Tue, 14 May 2024 09:43:32 -0500 Subject: [PATCH 25/35] title --- docs/pages/blog/introducing-pigment-css.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 86a8e6a327c3c0..464847e8c34dfc 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -1,5 +1,5 @@ --- -title: 'Introducing Pigment CSS: the next generation of CSS-in-JS for Material UI' +title: 'Introducing Pigment CSS: the next generation of CSS-in-JS' description: 'Pigment CSS offers significant performance gains along with RSC and App Router support.' date: 2024-05-14T00:00:00.000Z authors: ['samuelsycamore'] From d14d96d5c0f7fe7b7da07cb46437360442635ff1 Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Tue, 14 May 2024 09:58:55 -0500 Subject: [PATCH 26/35] review feedback --- docs/pages/blog/introducing-pigment-css.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 464847e8c34dfc..85be8a961944c5 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -18,14 +18,14 @@ That's where Pigment CSS comes in. Pigment CSS is MUI's new in-house styling solution: a zero-runtime CSS-in-JS package that generates colocated styles to their own CSS files at build-time. With Pigment CSS you get the latest and greatest advancements in CSS along with RSC compatibility, _plus_ significant performance improvements when compared with Emotion, the styling engine used in Material UI v5. -And though it's specially tailored to meet the needs of Material UI users, Pigment CSS can be used with _any_ React component library you prefer. +And though we're prioritizing the needs of Material UI users in early development, Pigment CSS can be used with _any_ React component library you prefer. ## Why Pigment CSS? ### Traditional CSS-in-JS is not enough Emotion made a lot of sense for Material UI v5 in late 2021, but so much has changed in the React ecosystem since then. -In early 2023 React introduced Server Components, and Next.js offered the first implementation of the new spec with the App Router shortly thereafter. +After Next.js offered the first implementation of the React Server Components spec with [the App Router](https://nextjs.org/blog/next-13) towards the end of 2022, it became clear that there was a monumental shift on the horizon. RSCs unlock a whole new realm of possibilities for React; for us as UI developers, it means we can create components that are fully renderable at build-time so we don't have to pass that burden on to the client at run-time. But working with RSCs requires us to let go of familiar APIs like `useContext`, which in turn becomes a major blocker for using the last generation's style engines like Emotion that rely heavily on this hook for theming. @@ -43,7 +43,7 @@ While those breaking changes did bring many benefits overall, they unfortunately We learned our lesson! We can't do that to our users again. -So when it came time to seek out a new way to generate styles, we knew we needed to keep the syntax and authoring experience as similar as possible to Emotion and styled-components, and provide codemods for most of the breaking changes, in order to minimize friction when migrating. +So when it came time to seek out a new way to generate styles, we knew we needed to keep the syntax and authoring experience as similar as possible to Emotion and styled-components—and provide codemods for most of the breaking changes—in order to minimize friction when migrating. ### Other options don't meet our needs @@ -66,10 +66,7 @@ Check out [How Pigment CSS works](https://github.com/mui/pigment-css/blob/maste ## Benefits of using Pigment CSS -For Material UI users, the benefits of adopting Pigment CSS\* are clear: your end users get better performance, and you get RSC and App Router compatibility without having to significantly change how you author component styles. - -_\*These benefits extend to other component libraries beyond Material UI as well, but that's our focus for the sections that follow._ -_We intend for Pigment CSS to be a viable solution for the React ecosystem as a whole, but you can understand why we're prioritizing Material UI during early development._ +For users of Emotion and styled-components, the benefits of adopting Pigment CSS are clear: your end users get better performance, and you get RSC and App Router compatibility without having to significantly change how you author component styles. ### Better performance @@ -77,7 +74,7 @@ When comparing the same Material UI app built with Next.js and either Emotion o - 20% reduction in first load JavaScript (104 kB vs. 131 kB) - 9% decrease in First Contentful Paint (455 ms vs. 503 ms) -- 15% reduction in Time To First Byte +- 15% reduction in Time To First Byte (381.5 ms vs 447.5 ms) - 7.5% reduction in page HTML (14.7 kB vs. 15.9 kB) ### Familiar developer experience @@ -91,7 +88,7 @@ And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes ### Future-proof solution Though we're still quite early in the RSC era, it seems inevitable that the React ecosystem as a whole will converge on this new paradigm over time. -Next.js gave us our first glimpse with the App Router; RedwoodJS [recently released their own implementation](https://redwoodjs.com/blog/rsc-now-in-redwoodjs); and many other frameworks and meta-frameworks are currently working out POCs and RFCs to catch up. +Next.js gave us our first glimpse with the App Router; RedwoodJS [recently released their own implementation](https://redwoodjs.com/blog/rsc-now-in-redwoodjs); and many other frameworks and meta-frameworks (like Remix) are currently working out [POCs and RFCs](https://github.com/remix-run/remix/discussions/8048) to catch up. Regardless of how quickly Server Components catch on among developers, it's clear that library maintainers must now support [the two Reacts](https://overreacted.io/the-two-reacts/) (client-side and server-side) to stay relevant into the future. Pigment CSS, then, is yet another bet from MUI on the longevity and sustainability of the React ecosystem—and a promise that we'll continue to innovate in this space for years to come. @@ -103,7 +100,7 @@ We'll do our best to make that a reality. 🤞 ## What's next Pigment CSS is currently in the early alpha stage of development—the plan is to have a fully featured version ready to release alongside Material UI v6 later this year. -When that happens, you'll have the choice to opt in to Pigment CSS incrementally after migrating to v6, giving you all the time you need to migrate on your own terms. +When that happens, you'll have the choice to opt in to Pigment CSS incrementally after upgrading to v6, giving you all the time you need to migrate on your own terms. That said, Pigment CSS is available now for experimentation, and we'd love for you to give it a try and let us know what you think—your feedback at this stage could have a major impact on the final product. From 55ab13e45ee31fed7d86c733b4e96e151f3d865c Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Tue, 14 May 2024 10:03:02 -0500 Subject: [PATCH 27/35] perf test app callout --- docs/pages/blog/introducing-pigment-css.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 85be8a961944c5..8d926300950a7a 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -77,6 +77,11 @@ When comparing the same Material UI app built with Next.js and either Emotion o - 15% reduction in Time To First Byte (381.5 ms vs 447.5 ms) - 7.5% reduction in page HTML (14.7 kB vs. 15.9 kB) +:::info +Curious about where those performance numbers came from? +[Check out this app](https://pigment-css-demo.vercel.app/perf) that compares Pigment CSS, Emotion, and styled-components across a variety of tests. +::: + ### Familiar developer experience For developers migrating from Emotion or styled-components, you're probably already familiar with the most common patterns employed by Pigment CSS. From 56cf3c9645a9c7fd12813b4483a6c850059520df Mon Sep 17 00:00:00 2001 From: Sam Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Tue, 14 May 2024 10:10:53 -0500 Subject: [PATCH 28/35] nbsp --- docs/pages/blog/introducing-pigment-css.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 8d926300950a7a..3e291af22ce4a6 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -79,7 +79,7 @@ When comparing the same Material UI app built with Next.js and either Emotion o :::info Curious about where those performance numbers came from? -[Check out this app](https://pigment-css-demo.vercel.app/perf) that compares Pigment CSS, Emotion, and styled-components across a variety of tests. +[Check out this app](https://pigment-css-demo.vercel.app/perf) that compares Pigment CSS, Emotion, and styled-components across a variety of tests. ::: ### Familiar developer experience From 00c43f7f8edf3d23d1f87e99af1710f739c07f7e Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Tue, 14 May 2024 23:22:34 -0700 Subject: [PATCH 29/35] add Pigment as a tag --- docs/lib/sourcing.ts | 1 + docs/pages/blog/introducing-pigment-css.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/lib/sourcing.ts b/docs/lib/sourcing.ts index 7ade883964584f..62eda396a074a4 100644 --- a/docs/lib/sourcing.ts +++ b/docs/lib/sourcing.ts @@ -40,6 +40,7 @@ const ALLOWED_TAGS = [ // Product tags 'Material UI', 'Base UI', + 'Pigment CSS', 'Joy UI', 'MUI X', 'MUI System', diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 3e291af22ce4a6..eff8f0032006ed 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -3,7 +3,7 @@ title: 'Introducing Pigment CSS: the next generation of CSS-in-JS' description: 'Pigment CSS offers significant performance gains along with RSC and App Router support.' date: 2024-05-14T00:00:00.000Z authors: ['samuelsycamore'] -tags: ['Pigment CSS'] +tags: ['Pigment CSS'] card: false --- From 41674b81a760039e54368c237314be7f0ee31fc9 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Tue, 14 May 2024 23:23:00 -0700 Subject: [PATCH 30/35] change publication date --- docs/pages/blog/introducing-pigment-css.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index eff8f0032006ed..9dc9fb16551931 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -1,7 +1,7 @@ --- title: 'Introducing Pigment CSS: the next generation of CSS-in-JS' description: 'Pigment CSS offers significant performance gains along with RSC and App Router support.' -date: 2024-05-14T00:00:00.000Z +date: 2024-05-15T00:00:00.000Z authors: ['samuelsycamore'] tags: ['Pigment CSS'] card: false From fb0abde73556996c15306034d364ec552df8d293 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Tue, 14 May 2024 23:32:26 -0700 Subject: [PATCH 31/35] add custom OG image --- docs/pages/blog/introducing-pigment-css.md | 4 +++- .../blog/introducing-pigment-css/card.png | Bin 0 -> 184363 bytes 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 docs/public/static/blog/introducing-pigment-css/card.png diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 9dc9fb16551931..0ae5bcec333fdc 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -4,7 +4,7 @@ description: 'Pigment CSS offers significant performance gains along with RSC a date: 2024-05-15T00:00:00.000Z authors: ['samuelsycamore'] tags: ['Pigment CSS'] -card: false +manualCard: true --- In the era of React Server Components and the Next.js App Router, component libraries like Material UI must make some paradigm-shifting changes to reap the potential performance gains by moving more of the work of rendering UIs from client to server. @@ -16,6 +16,8 @@ For a library as widely used as Material UI, the biggest challenge is to stay u That's where Pigment CSS comes in. +Introducing Pigment CSS: the next generation of CSS-in-JS + Pigment CSS is MUI's new in-house styling solution: a zero-runtime CSS-in-JS package that generates colocated styles to their own CSS files at build-time. With Pigment CSS you get the latest and greatest advancements in CSS along with RSC compatibility, _plus_ significant performance improvements when compared with Emotion, the styling engine used in Material UI v5. And though we're prioritizing the needs of Material UI users in early development, Pigment CSS can be used with _any_ React component library you prefer. diff --git a/docs/public/static/blog/introducing-pigment-css/card.png b/docs/public/static/blog/introducing-pigment-css/card.png new file mode 100644 index 0000000000000000000000000000000000000000..59bcae1a0dab0108581d27dcad06bca944b7f46b GIT binary patch literal 184363 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

|@=(JRS#1^h*tQ`HNXi9K;Zu^_TQN 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 Date: Wed, 15 May 2024 07:17:48 -0700 Subject: [PATCH 32/35] add code blocks --- docs/pages/blog/introducing-pigment-css.md | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index 0ae5bcec333fdc..ac75fae3e7eb6b 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -89,9 +89,49 @@ Curious about where those performance numbers came from? For developers migrating from Emotion or styled-components, you're probably already familiar with the most common patterns employed by Pigment CSS. `styled()` and `css()` are the two main functions used to define styles, and they mostly work the same as you'd expect them to (with some notable differences due to the nature of build-time CSS-in-JS—see [Coming from Emotion or styled-components](https://github.com/mui/pigment-css/tree/master?tab=readme-ov-file#coming-from-emotion-or-styled-components) for details). +```jsx +import { styled, css } from '@pigment-css/react'; + +const Title = styled('h1') ({ + fontSize: '2rem'; +}); + +const Container = styled.div` + border: 1px solid red; + + &:hover { + border-color: blue; + } + + ${Title} { + margin-bottom: 2.5rem; + } +`; + +export default function Modal() { + return ( + + Hello +

World

+ + ); +} +``` + We've also ported over [the `sx` prop](/system/getting-started/the-sx-prop/) from MUI System, so you can still define styles directly in a given component, but now it's much more performant than before. And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes—not just Material UI components—so you don't need to wrap a simple `
` or `` with a Box component to apply theme styles to it. +```jsx +
+

+ Introducing Pigment CSS: the next generation of CSS-in-JS +

+

+ Pigment CSS offers significant performance gains along with RSC +

+
+``` + ### Future-proof solution Though we're still quite early in the RSC era, it seems inevitable that the React ecosystem as a whole will converge on this new paradigm over time. From 11c2151a53c568c050bcfc9097937c0addbaa246 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Wed, 15 May 2024 11:34:29 -0700 Subject: [PATCH 33/35] shorthand notation --- docs/pages/blog/introducing-pigment-css.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index ac75fae3e7eb6b..a357dc322102b6 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -122,8 +122,8 @@ We've also ported over [the `sx` prop](/system/getting-started/the-sx-prop/) fro And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes—not just Material UI components—so you don't need to wrap a simple `
` or `` with a Box component to apply theme styles to it. ```jsx -
-

+
+

Introducing Pigment CSS: the next generation of CSS-in-JS

From 4ba9aafb53e029da6685abfae646d3871e41c61c Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Wed, 15 May 2024 11:37:00 -0700 Subject: [PATCH 34/35] theme-aware sx prop --- docs/pages/blog/introducing-pigment-css.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index a357dc322102b6..cebae57502b27b 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -119,14 +119,14 @@ export default function Modal() { ``` We've also ported over [the `sx` prop](/system/getting-started/the-sx-prop/) from MUI System, so you can still define styles directly in a given component, but now it's much more performant than before. -And in Pigment CSS we've extended support for `sx` to include _all_ DOM nodes—not just Material UI components—so you don't need to wrap a simple `

` or `` with a Box component to apply theme styles to it. +And in Pigment CSS, we've extended support for `sx` to include _all_ DOM nodes—not just Material UI components—so you don't need to wrap a simple `
` or `` with a Box component to apply theme styles to it. ```jsx -
-

+
+

Introducing Pigment CSS: the next generation of CSS-in-JS

-

+

Pigment CSS offers significant performance gains along with RSC

From 9a9e884d95db8a8b117bef69e9dcb3cd4a29cbb2 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Wed, 15 May 2024 11:57:17 -0700 Subject: [PATCH 35/35] use a table instead of bullet list --- docs/pages/blog/introducing-pigment-css.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/pages/blog/introducing-pigment-css.md b/docs/pages/blog/introducing-pigment-css.md index cebae57502b27b..793c6b1db49129 100644 --- a/docs/pages/blog/introducing-pigment-css.md +++ b/docs/pages/blog/introducing-pigment-css.md @@ -72,12 +72,14 @@ For users of Emotion and styled-components, the benefits of adopting Pigment CS ### Better performance -When comparing the same Material UI app built with Next.js and either Emotion or Pigment CSS, the latter led to: - -- 20% reduction in first load JavaScript (104 kB vs. 131 kB) -- 9% decrease in First Contentful Paint (455 ms vs. 503 ms) -- 15% reduction in Time To First Byte (381.5 ms vs 447.5 ms) -- 7.5% reduction in page HTML (14.7 kB vs. 15.9 kB) +When comparing the same Material UI app built with Next.js and either Emotion or Pigment CSS, we've observed the following results: + +| Metrics | Emotion | Pigment CSS | Reduction | +| :--------------------- | ------: | ----------: | --------: | +| First load JavaScript | 131kB | 104kB | 20% | +| First Contentful Paint | 503ms | 455ms | 9% | +| Time To First Byte | 447.5ms | 381.5ms | 15% | +| Total Page HTML | 15.9kB | 14.7kB | 7.5% | :::info Curious about where those performance numbers came from?