elastic / eui

Elastic UI Framework 🙌
https://eui.elastic.co/
Other
50 stars 839 forks source link

[Meta][CSS-in-JS] Switching to `emotion` #3912

Open cchaos opened 4 years ago

cchaos commented 4 years ago

This is a meta ticket to discuss the rollout plan of the CSS in JS solution (Emotion). It is for documenting the expected upgrade process both within EUI and by consuming applications, and being transparent about our timeline.

(Tentative) Timeline & tasks

Spring 2021:

Get the contexts built out and (partially) used in the EUI components and docs, as well as thoroughly tested in downstream applications like Kibana and Cloud. Figure out all the dependencies, hooks and possible state management that go with it.

Summer 2021:

Fall 2021:

Start shifting component styles from SASS to JS. This part will probably take a full year and probably means phasing out the old 'legacy' theme, making Amsterdam default.

### 2022-2024
- [ ] #5685

Beyond component conversions:

Needs discussion

cchaos commented 4 years ago

Requests

cchaos commented 3 years ago

Upgrade process

Questions

EUI

See https://github.com/elastic/eui/issues/5685

Charts theme

Can we create a EuiThemeCharts similar to EuiThemeDefault that can be used primarily as a React hook to pass the theme down to an elastic-charts implementation? And it know the light/dark color mode automatically.

Consuming apps

lightwave commented 3 years ago

Will EUI theme be compatible with the theme specification used in theme-ui and styled system?

cchaos commented 3 years ago

👋 Hi @lightwave, we aren't explicitly building our themes to be compatible, but from the looks at that documentation, it's just a way to store your own theme tokens to then provide it to the UI library of your choice. Our tokens will be specifically designed to how we use them in our components. We're continuing to build out the docs but you can start taking a look at what our JSON theming object looks like here: https://elastic.github.io/eui/#/theming/global-values

lightwave commented 3 years ago

👋 Hi @lightwave, we aren't explicitly building our themes to be compatible, but from the looks at that documentation, it's just a way to store your own theme tokens to then provide it to the UI library of your choice. Our tokens will be specifically designed to how we use them in our components. We're continuing to build out the docs but you can start taking a look at what our JSON theming object looks like here: https://elastic.github.io/eui/#/theming/global-values

You're correct that theme-ui uses its own token, but there are name conflict since both eui and theme-ui uses the underlying emotion theme provider. theme-ui expects the breakpoints attribute to be an array while eui expects the breakpoints in the theme object to be an object. After eui inject its theme object into emotion, it broke the processing in theme-ui where it expects it to be an array.

cchaos commented 3 years ago

@lightwave I've converted your questions to a discussion to keep this Meta issue centered around tasks. https://github.com/elastic/eui/discussions/5351

jlalmes commented 2 years ago

Keen to help out with the implementation and rollout for this. Our use case:

It seems that we're blocked by this PR https://github.com/elastic/eui/pull/4575 which will outline the game plan for moving forward & converting all other components from sass to emotion. What is the current status of this - and how can we help move this PR closer to alpha/beta/production?

cchaos commented 2 years ago

👋 Hey @jlalmes, that's exciting and we'd absolutely love the help during the conversion. You are correct about #4575 being the next step in the process. We like to put a lot of thinking up front in the endeavors so it's less likely that we look back and wish we had done it differently 😄 . We've tentatively given ourselves the typically slow month of December to figure that part out and have a final plan hopefully by the beginning of 2022. We totally understand your pain points and we hope this will solve most of them. Mostly we've been having to juggle prioritizing this work in tandem with other consumer priorities.