Skip to content

Commit 8887345

Browse files
committed
fix: make media queries obey order of breakpoints
1 parent 84b7a2a commit 8887345

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

src/index.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,21 @@ describe("mq()", () => {
7575
"color: green;@media only screen and (min-width: 0em){color:var(--color-blue);}"
7676
);
7777
});
78+
79+
it("should apply styles in order of keys in breakpoitns", () => {
80+
const breakpoint = mq(styles, breakpoints);
81+
expect(
82+
breakpoint({
83+
tablet: {
84+
color: "var(--color-red)",
85+
},
86+
phone: {
87+
color: "var(--color-blue)",
88+
},
89+
default: `color: green;`,
90+
})
91+
).toBe(
92+
`color: green;@media ${breakpoints.phone}{color:var(--color-blue);}@media ${breakpoints.tablet}{color:var(--color-red);}`
93+
);
94+
});
7895
});

src/index.ts

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ function mq<
1818
Themes extends DashThemes = DashThemes,
1919
QueryNames extends string | number = string | number
2020
>(styles: Styles<Tokens, Themes>, mediaQueries: MediaQueries<QueryNames>) {
21+
const mediaQueryNames = Object.keys(
22+
mediaQueries
23+
) as unknown as (keyof MediaQueries<QueryNames>)[];
24+
mediaQueryNames.unshift("default" as any);
25+
const namesLen = mediaQueryNames.length;
26+
let i = 0;
2127
/**
2228
* A utility for adding media queries and breakpoints to Dash styles
2329
*
@@ -38,18 +44,20 @@ function mq<
3844
} else {
3945
let css = "";
4046

41-
for (const key in queryName) {
42-
let value =
43-
queryName[key as keyof MediaQueryObject<QueryNames, Tokens, Themes>];
44-
value =
45-
!value || typeof value === "string"
46-
? value || ""
47-
: styles.one(value).css();
47+
for (i = 0; i < namesLen; i++) {
48+
const key = mediaQueryNames[i];
49+
if (key in queryName) {
50+
let value = queryName[key];
51+
value =
52+
!value || typeof value === "string"
53+
? value || ""
54+
: styles.one(value).css();
4855

49-
css +=
50-
key === "default"
51-
? value
52-
: `@media ${mediaQueries[key as QueryNames]}{${value}}`;
56+
css +=
57+
key === "default"
58+
? value
59+
: `@media ${mediaQueries[key as QueryNames]}{${value}}`;
60+
}
5361
}
5462

5563
return css;

0 commit comments

Comments
 (0)