Skip to content

Commit 6ca51eb

Browse files
authored
Polaris tokens - add interaction based media queries for touch/non-to… (#12331)
<!-- ☝️How to write a good PR title: - Prefix it with [ComponentName] (if applicable), for example: [Button] - Start with a verb, for example: Add, Delete, Improve, Fix… - Give as much context as necessary and as little as possible - Open it as a draft if it’s a work in progress --> ### WHY are these changes introduced? This PR adds interaction based media queries to `polaris-tokens` which will allow us to target touch based devices. Inspired by [open-props](https://github.com/argyleink/open-props/blob/main/src/props.media.css#L25C31-L25C58) and also symetrical with our [hooks api](https://github.com/Shopify/polaris/blob/main/polaris-react/src/utilities/use-media-query.ts#L9). <!-- Context about the problem that’s being addressed. --> ### WHAT is this pull request doing? We have added code to our css/scss code generation to append interaction media queries Added to media-queries.css ``` @Custom-Media --p-interaction-touch (hover: none) and (pointer: coarse); @Custom-Media --p-interaction-stylus (hover: none) and (pointer: fine); @Custom-Media --p-interaction-pointer (hover) and (pointer: coarse); @Custom-Media --p-interaction-mouse (hover) and (pointer: fine); ``` Added to media-queries.scss ``` $p-interaction-touch: '(hover: none) and (pointer: coarse)'; $p-interaction-stylus: '(hover: none) and (pointer: fine)'; $p-interaction-pointer: '(hover) and (pointer: coarse)'; $p-interaction-mouse: '(hover) and (pointer: fine)'; ``` <!-- Summary of the changes committed. Before / after screenshots are appreciated for UI changes. Make sure to include alt text that describes the screenshot. Include a video if your changes include interactive content. If you include an animated gif showing your change, wrapping it in a details tag is recommended. Gifs usually autoplay, which can cause accessibility issues for people reviewing your PR: <details> <summary>Summary of your gif(s)</summary> <img src="..." alt="Description of what the gif shows"> </details> --> ### How to 🎩 🖥 [Local development instructions](https://github.com/Shopify/polaris/blob/main/README.md#install-dependencies-and-build-workspaces) 🗒 [General tophatting guidelines](https://github.com/Shopify/polaris/blob/main/documentation/Tophatting.md) 📄 [Changelog guidelines](https://github.com/Shopify/polaris/blob/main/.github/CONTRIBUTING.md#changelog) ### 🎩 checklist - [x] Tested a [snapshot](https://github.com/Shopify/polaris/blob/main/documentation/Releasing.md#-snapshot-releases) - [x] Tested on [mobile](https://github.com/Shopify/polaris/blob/main/documentation/Tophatting.md#cross-browser-testing) - [x] Tested on [multiple browsers](https://help.shopify.com/en/manual/shopify-admin/supported-browsers) - [x] Tested for [accessibility](https://github.com/Shopify/polaris/blob/main/documentation/Accessibility%20testing.md) - [x] Updated the component's `README.md` with documentation changes - [x] [Tophatted documentation](https://github.com/Shopify/polaris/blob/main/documentation/Tophatting%20documentation.md) changes in the style guide
1 parent ab50010 commit 6ca51eb

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@shopify/polaris-tokens': minor
3+
---
4+
5+
Added new media queries that target touch/non-touch devices

polaris-tokens/scripts/toMediaConditions.ts

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

5266
function 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

Comments
 (0)