@shopify/polaris
Version:
Shopify’s admin product component library
58 lines (53 loc) • 2.03 kB
JavaScript
import { breakpointsAliases } from '@shopify/polaris-tokens';
import { isObject } from './is-object.js';
function classNames(...classes) {
return classes.filter(Boolean).join(' ');
}
function variationName(name, value) {
return `${name}${value.charAt(0).toUpperCase()}${value.slice(1)}`;
}
function sanitizeCustomProperties(styles) {
const nonNullValues = Object.entries(styles).filter(([_, value]) => value != null);
return nonNullValues.length ? Object.fromEntries(nonNullValues) : undefined;
}
/**
* Given params like so:
* (
* 'button',
* 'padding',
* 'spacing',
* {
* sm: "4",
* lg: "6"
* }
* )
* Converts it to an object like so:
* {
* '--pc-button-padding-sm': 'var(--p-spacing-4)',
* '--pc-button-padding-lg': 'var(--p-spacing-6)'
* }
*
*/
function getResponsiveProps(componentName, componentProp, tokenSubgroup, responsiveProp) {
if (!responsiveProp) return {};
let result;
if (!isObject(responsiveProp)) {
result = {
[breakpointsAliases[0]]: `var(--p-${tokenSubgroup}-${responsiveProp})`
};
} else {
result = Object.fromEntries(Object.entries(responsiveProp).map(([breakpointAlias, aliasOrScale]) => [breakpointAlias, `var(--p-${tokenSubgroup}-${aliasOrScale})`]));
}
// Prefix each responsive key with the correct token name
return Object.fromEntries(Object.entries(result).map(([breakpointAlias, value]) => [`--pc-${componentName}-${componentProp}-${breakpointAlias}`, value]));
}
function getResponsiveValue(componentName, componentProp, responsiveProp) {
if (!responsiveProp) return {};
if (!isObject(responsiveProp)) {
return {
[`--pc-${componentName}-${componentProp}-${breakpointsAliases[0]}`]: responsiveProp
};
}
return Object.fromEntries(Object.entries(responsiveProp).map(([breakpointAlias, responsiveValue]) => [`--pc-${componentName}-${componentProp}-${breakpointAlias}`, responsiveValue]));
}
export { classNames, getResponsiveProps, getResponsiveValue, sanitizeCustomProperties, variationName };