Skip to content

Commit 3d980c6

Browse files
committed
feat: add media query toString support for nested and and or queries
1 parent 3e0fbb3 commit 3d980c6

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

packages/style-value-parser/src/at-queries-from-tokens/media-query.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,9 @@ export class MediaQuery {
281281
this.queries = queries;
282282
}
283283
toString(): string {
284-
return `@media ${this.#toString(this.queries)}`;
284+
return `@media ${this.#toString(this.queries, true)}`;
285285
}
286-
#toString(queries: MediaQueryRule): string {
286+
#toString(queries: MediaQueryRule, isTopLevel: boolean = false): string {
287287
switch (queries.type) {
288288
case 'media-keyword':
289289
return queries.not ? `not ${queries.key}` : queries.key;
@@ -299,11 +299,15 @@ export class MediaQuery {
299299
return `(${queries.key}: ${valueStr})`;
300300
}
301301
case 'not':
302-
return `(not ${this.#toString(queries.rule)})`;
302+
return queries.rule && (queries.rule.type == 'and' || queries.rule.type == 'or')
303+
? `(not (${this.#toString(queries.rule)}))`
304+
: `(not ${this.#toString(queries.rule)})`;
303305
case 'and':
304306
return queries.rules.map((rule) => this.#toString(rule)).join(' and ');
305307
case 'or':
306-
return queries.rules.map((rule) => this.#toString(rule)).join(' or ');
308+
return isTopLevel
309+
? queries.rules.map((rule) => this.#toString(rule)).join(', ')
310+
: queries.rules.map((rule) => this.#toString(rule)).join(' or ');
307311
default:
308312
return '';
309313
}
@@ -378,6 +382,5 @@ export class MediaQuery {
378382
),
379383
);
380384

381-
// return recursiveParser.or(leadingNotParser);
382385
}
383386
}

0 commit comments

Comments
 (0)