@fluent-windows/core
Version:
React components that inspired by Microsoft's Fluent Design System.
68 lines (63 loc) • 2.6 kB
JavaScript
import { deepMerge } from '../utils';
export const defaultFontFamily = ['Segoe UI', '-apple-system', 'sans-serif', 'Roboto', 'Helvetica', 'Arial'].join(',');
export const defaultFontSize = 14;
export const defaultHtmlFontSize = 16;
export const defaultFontWeightLight = 300;
export const defaultFontWeightRegular = 400;
export const defaultFontWeightMedium = 500;
export const defaultFontWeightBold = 700;
const coef = defaultFontSize / 14;
const pxToRem = size => `${size / defaultHtmlFontSize * coef}rem`;
const buildVariant = (fontWeight, size, lineHeight, fontFamily = defaultFontFamily) => ({
fontFamily,
fontWeight: fontWeight,
fontSize: pxToRem(size),
lineHeight: lineHeight
});
export const defaultVariants = {
h1: buildVariant(defaultFontWeightLight, 96, 1),
h2: buildVariant(defaultFontWeightLight, 60, 1),
h3: buildVariant(defaultFontWeightRegular, 48, 1.04),
h4: buildVariant(defaultFontWeightRegular, 34, 1.17),
h5: buildVariant(defaultFontWeightRegular, 24, 1.33),
h6: buildVariant(defaultFontWeightMedium, 20, 1.6),
subtitle1: buildVariant(defaultFontWeightRegular, 16, 1.75),
subtitle2: buildVariant(defaultFontWeightMedium, 14, 1.57),
body1: buildVariant(defaultFontWeightRegular, 16, 1.5),
body2: buildVariant(defaultFontWeightRegular, 14, 1.43)
};
function createTypography(typographies) {
const {
fontFamily = defaultFontFamily,
fontSize = defaultFontSize,
htmlFontSize = defaultHtmlFontSize,
fontWeightLight = defaultFontWeightLight,
fontWeightRegular = defaultFontWeightRegular,
fontWeightMedium = defaultFontWeightMedium,
fontWeightBold = defaultFontWeightBold
} = typographies;
const variants = {
h1: buildVariant(fontWeightLight, 96, 1, fontFamily),
h2: buildVariant(fontWeightLight, 60, 1, fontFamily),
h3: buildVariant(fontWeightRegular, 48, 1.04, fontFamily),
h4: buildVariant(fontWeightRegular, 34, 1.17, fontFamily),
h5: buildVariant(fontWeightRegular, 24, 1.33, fontFamily),
h6: buildVariant(fontWeightMedium, 20, 1.6, fontFamily),
subtitle1: buildVariant(fontWeightRegular, 16, 1.75, fontFamily),
subtitle2: buildVariant(fontWeightMedium, 14, 1.57, fontFamily),
body1: buildVariant(fontWeightRegular, 16, 1.5, fontFamily),
body2: buildVariant(fontWeightRegular, 14, 1.43, fontFamily)
};
const defaultTypographies = {
fontFamily,
fontSize,
htmlFontSize,
fontWeightLight,
fontWeightRegular,
fontWeightMedium,
fontWeightBold,
variants
};
return deepMerge(defaultTypographies, typographies);
}
export default createTypography;