Open Conviley opened 1 year ago
It may sound crazy but it is already possible, it's a bit hacky buuut anyway, stitches config is mutable and you can change it before starting the app
consuming your components
import type { ConfigType } from '@stitches/react/types/config'
import { config } from './stitches'
export function setMedia<Media extends {} = {}>(
media: ConfigType.Media<Media>
): void {
config.media = {
...config.media,
...media,
}
}
export function setStyleUtils<Utils extends {} = {}>(
utils: ConfigType.Utils<Utils>
): void {
config.utils = {
...config.utils,
...utils,
}
}
In your app
import { setMedia } from 'your-stitches-package'
setMedia({
bp1: "(min-width: 500px)",
bp2: "(min-width: 1000px)",
})
const Component = styled('div', {
variants: {
foo: {
true: {
color: 'red'
}
}
}
})
function App() {
return (
<Component foo={{
'@bp1': true,
'@bp2': false,
}} />
)
}
Yeah I know, TS wont offer these new medias in the autocomplete, but at least it wont fail when typecheking 😅 For sure it's just a workaround, hopefully we will get something from the lib itself
Feature Description
I'm working on a component library that provides a base configuration including e.g.
theme
andmedia
. ViacreateTheme
i'm able to allow consumers of the library to create their own theme, but i have found no way to allow them to do the same for the breakpoints defined inmedia
.Suggested Solution
media
values withcreateTheme
createMedia
that would work the same way ascreateTheme
but allow setting of values of themedia
breakpointsAdditional context
I'm okay with the fact that the shape of the theme and media needs to be the same as the one defined in the base configuration. This is probably even a good thing as it provides a predictable way for the components to rely on the theme should they need to.