UNPKG

office-ui-fabric-react

Version:

Reusable React components for building experiences for Microsoft 365.

70 lines (58 loc) 2.56 kB
/** Generates SASS files which list out theme slots and their defaults as SASS variables, used with the legacy version of loadTheme. */ const { getTheme } = require('@uifabric/styling'); const fs = require('fs'); const path = require('path'); const defaultTheme = getTheme(true); const warningMessage = '/** THIS FILE IS AUTOGENERATED do not modify it manually. See generateDefaultThemeSassFiles.js. New slots should be added to the appropriate interfaces and defaults files. */'; // Font slots const fonts = defaultTheme.fonts; const lines = [warningMessage]; let fontSizeTokenName, fontWeightTokenName; for (const fontName in fonts) { const font = fonts[fontName]; for (const propName in font) { const titleCasePropName = propName.charAt(0).toUpperCase() + propName.slice(1); const slotName = fontName + titleCasePropName; const name = '$ms-font-' + slotName; lines.push(`${name}: "[theme:${slotName}, default: ${font[propName]}]";`); if (titleCasePropName === 'FontSize') { fontSizeTokenName = name; } else if (titleCasePropName === 'FontWeight') { fontWeightTokenName = name; } } lines.push(`@mixin ${fontName}FontBasic {`); lines.push(` font-size: ${fontSizeTokenName};`); lines.push(` font-weight: ${fontWeightTokenName};`); lines.push(`}`); } const srcRoot = './src/common'; const fontsOutputFilename = '_themeVariables.scss'; fs.writeFileSync(path.join(srcRoot, fontsOutputFilename), lines.join('\n')); // Fabric palette slots const palette = defaultTheme.palette; const colorLines = [warningMessage]; for (const color in palette) { const name = 'ms-color-' + color; colorLines.push(`$${name}: "[theme:${color}, default: ${palette[color]}]";`); } const paletteOutputFilename = '_themeOverrides.scss'; fs.writeFileSync(path.join(srcRoot, paletteOutputFilename), colorLines.join('\n')); // Semantic color slots const semanticColors = defaultTheme.semanticColors; const semanticLines = [warningMessage]; const deprecatedTag = ' /* @deprecated */'; for (const color in semanticColors) { const name = color + 'Color'; if (semanticColors[color].indexOf(deprecatedTag) >= 0) { semanticLines.push( `$${name}: '[theme:${color}, default: ${semanticColors[color].replace(deprecatedTag, '')}]'; ${deprecatedTag}`, ); } else { semanticLines.push(`$${name}: '[theme:${color}, default: ${semanticColors[color]}]'; `); } } const semanticOutputFilename = '_semanticSlots.scss'; fs.writeFileSync(path.join(srcRoot, semanticOutputFilename), semanticLines.join('\n'));