Theme interoperability with styled-components and emotion
@mnajdova is already working on this.
Since Jun 28, 2021.
- Dominant language
- JavaScript
- Stars
- 99.1k
- Forks
- 32.5k
- Avg merge
- 2d 17h
- Merged PRs (30d)
- 106
Description
Here is the type:
export interface CSSProperties extends BaseCSSProperties {
// Allow pseudo selectors and media queries
// `unknown` is used since TS does not allow assigning an interface without
// an index signature to one with an index signature. This is to allow type safe
// module augmentation.
// Technically we want any key not typed in `BaseCSSProperties` to be of type
// `CSSProperties` but this doesn't work. The index signature needs to cover
// BaseCSSProperties as well. Usually you would use `BaseCSSProperties[keyof BaseCSSProperties]`
// but this would not allow assigning React.CSSProperties to CSSProperties
[k: string]: unknown | CSSProperties;
}
- The issue is present in the latest release.
- I have searched the issues of this repository and believe that this is not a duplicate.
Current Behavior 😯
When I try to spread something like theme.typography.h5 into an object that Emotion.js will consume, I get a type error.
Expected Behavior 🤔
Yes, I can pick off individual values fine, but I'd rather be able to use whole objects and spread them in.
Steps to Reproduce 🕹
Try to spread useTheme().typography.h5 into the css prop from Emotion.js.
https://codesandbox.io/s/funny-kepler-6u22j
Context 🔦
I use Material-UI for components and theming. I use Emotion for adding additional styles to Material-UI components and other components.
Sometimes, I want to use an entire useTheme().typography[key] set of styles to override something. For instance, I want a Typography component to have an h2 variant (have h2 in the dom, for semantic reasons), but I want it to have h5 styles for visual reasons.
Your Environment 🌎
| Tech | Version |
|---|---|
| Material-UI | v4.9.8 |
| React | 16.13.1 |
| TypeScript | 3.8.3 |
| Emotion.js | 10.0.28 |
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.