@shopify/polaris
Version:
Shopify’s admin product component library
66 lines (45 loc) • 2.05 kB
JavaScript
const fs = require('node:fs');
const path = require('path');
const {tokens} = require('@shopify/polaris-tokens');
const polarisReactDir = path.join(__dirname, '..');
const stylesDir = path.join(polarisReactDir, 'src/styles');
const file = fs.createWriteStream(path.join(stylesDir, '_media-queries.scss'));
const breakpointEntries = Object.entries(tokens.breakpoints).map(
([token, {value: breakpoint}]) => [`$p-${token}`, breakpoint],
);
file.write(`/* stylelint-disable unit-disallowed-list */\n`);
file.write(`/* stylelint-disable length-zero-no-unit */\n\n`);
file.write(`/* This file is auto generated by gen-media-queries.js */\n\n`);
file.write(`/* Breakpoints - Aliases */\n`);
breakpointEntries.forEach(([bpAlias, breakpoint]) => {
file.write(`${bpAlias}: ${toEm(breakpoint)};\n`);
});
file.write(`\n/* Breakpoints - Media conditions */\n`);
breakpointEntries.forEach(([bpAlias, breakpoint], index) => {
const isLastBreakpoint = index === breakpointEntries.length - 1;
const nextBreakpoint = isLastBreakpoint
? null
: breakpointEntries[index + 1][1];
const upMediaCondition = getUpMediaCondition(breakpoint);
const downMediaCondition = getDownMediaCondition(breakpoint);
const onlyMediaCondition = isLastBreakpoint
? upMediaCondition
: `${upMediaCondition} and ${getDownMediaCondition(nextBreakpoint)}`;
// Scss variable/media condition for the current breakpoint and up
file.write(`${bpAlias}-up: '${upMediaCondition}';\n`);
// Scss variable/media condition for current breakpoint and down
file.write(`${bpAlias}-down: '${downMediaCondition}';\n`);
// Scss variable/media condition for only the current breakpoint
file.write(`${bpAlias}-only: '${onlyMediaCondition}';\n`);
if (!isLastBreakpoint) file.write('\n');
});
file.end();
function getUpMediaCondition(breakpoint) {
return `(min-width: ${toEm(breakpoint)})`;
}
function getDownMediaCondition(breakpoint) {
return `(max-width: ${toEm(breakpoint)})`;
}
function toEm(value) {
return `${parseInt(value, 10)}em`;
}