@@ -28,11 +28,18 @@ async function generateCssMediaCondition() {
2828 throw error ;
2929 }
3030 } ) ;
31- const cssStyles = generateMediaConditionStyles (
31+ const breakpointMediaQueries = generateMediaConditionStyles (
3232 ( token , direction , mediaCondition ) =>
3333 `@custom-media --p-${ token } -${ direction } ${ mediaCondition } ;` ,
3434 ) ;
35- await fs . promises . writeFile ( cssOutputPath , cssStyles ) ;
35+ const interactionMediaQueries = generateInteractionStyles (
36+ ( interaction , mediaCondition ) =>
37+ `@custom-media --p-interaction-${ interaction } ${ mediaCondition } ;` ,
38+ ) ;
39+ await fs . promises . writeFile (
40+ cssOutputPath ,
41+ [ breakpointMediaQueries , interactionMediaQueries ] . join ( '\n\n' ) ,
42+ ) ;
3643}
3744
3845// Remove this function once we no longer need to support SCSS
@@ -42,11 +49,18 @@ async function generateScssMediaCondition() {
4249 throw error ;
4350 }
4451 } ) ;
45- const scssStyles = generateMediaConditionStyles (
52+ const breakpointMediaQueries = generateMediaConditionStyles (
4653 ( token , direction , mediaCondition ) =>
4754 `$p-${ token } -${ direction } : '${ mediaCondition } ';` ,
4855 ) ;
49- await fs . promises . writeFile ( scssOutputPath , scssStyles ) ;
56+ const interactionMediaQueries = generateInteractionStyles (
57+ ( interaction , mediaCondition ) =>
58+ `$p-interaction-${ interaction } : '${ mediaCondition } ';` ,
59+ ) ;
60+ await fs . promises . writeFile (
61+ scssOutputPath ,
62+ [ breakpointMediaQueries , interactionMediaQueries ] . join ( '\n\n' ) ,
63+ ) ;
5064}
5165
5266function generateMediaConditionStyles (
@@ -66,3 +80,20 @@ function generateMediaConditionStyles(
6680 )
6781 . join ( '\n\n' ) ;
6882}
83+
84+ const interactionMediaQueries = {
85+ touch : '(hover: none) and (pointer: coarse)' ,
86+ stylus : '(hover: none) and (pointer: fine)' ,
87+ pointer : '(hover) and (pointer: coarse)' ,
88+ mouse : '(hover) and (pointer: fine)' ,
89+ } ;
90+
91+ function generateInteractionStyles (
92+ styleGenerator : ( interaction : string , mediaCondition : string ) => string ,
93+ ) : string {
94+ return Object . entries ( interactionMediaQueries )
95+ . map ( ( [ interaction , mediaCondition ] ) =>
96+ styleGenerator ( interaction , mediaCondition ) ,
97+ )
98+ . join ( '\n' ) ;
99+ }
0 commit comments