stitchesjs / stitches

[Not Actively Maintained] CSS-in-JS with near-zero runtime, SSR, multi-variant support, and a best-in-class developer experience.
https://stitches.dev
MIT License
7.72k stars 251 forks source link

When a responsive variant matches the @initial variant, the initial one is not applied. #1146

Open elisehein opened 1 year ago

elisehein commented 1 year ago

Bug report

Describe the bug

When using responsive variants with the @initial breakpoint along with another breakpoint that happens to match the value in @initial, the initial value is ignored.

To Reproduce

Given the styled component:

const StyledComponent = styled("div", {
  variants: {
    color: {
      red: { color: "red" },
      blue: { color: "blue" },
      yellow: { color: "yellow" }
    }
  }
});

and given the media property in createStitches:

media: {
  small: "(min-width: 100px)",
  medium: "(min-width: 200px)",
  large: "(min-width: 500px)"
}

setting the color variant responsively like this:

<StyledComponent color={{ "@initial": "red", "@small": "blue", "@medium": "red" }} />

I would expect the component to have color: red at screens <100px, color: blue at screens between 100px and 200px, and color: red again at screens > 200px.

Instead, no color is applied at screens < 100px. Styling at other breakpoints is applied correctly.

When changing @medium to "yellow" (something other than @initial), all styling is applied correctly.

Codesandbox – observe no color applied on <40em screen width.

System information

ivanbanov commented 1 year ago

probably the same root cause of the other issues: https://github.com/stitchesjs/stitches/issues/885 https://github.com/stitchesjs/stitches/issues/913 https://github.com/stitchesjs/stitches/issues/976 https://github.com/stitchesjs/stitches/issues/1060