UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

83 lines 14.1 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ /** * Sync from @ant-design/colors(https://github.com/ant-design/ant-design-colors) */ import { TinyColor } from '@ctrl/tinycolor'; import { generate } from 'ng-zorro-antd/core/color'; import { warn } from 'ng-zorro-antd/core/logger'; import { canUseDom, updateCSS } from 'ng-zorro-antd/core/util'; const dynamicStyleMark = `-ant-${Date.now()}-${Math.random()}`; export function getStyle(globalPrefixCls, theme) { const variables = {}; const formatColor = (color, updater) => { let clone = color.clone(); clone = updater?.(clone) || clone; return clone.toRgbString(); }; const fillColor = (colorVal, type) => { const baseColor = new TinyColor(colorVal); const colorPalettes = generate(baseColor.toRgbString()); variables[`${type}-color`] = formatColor(baseColor); variables[`${type}-color-disabled`] = colorPalettes[1]; variables[`${type}-color-hover`] = colorPalettes[4]; variables[`${type}-color-active`] = colorPalettes[7]; variables[`${type}-color-outline`] = baseColor.clone().setAlpha(0.2).toRgbString(); variables[`${type}-color-deprecated-bg`] = colorPalettes[1]; variables[`${type}-color-deprecated-border`] = colorPalettes[3]; }; // ================ Primary Color ================ if (theme.primaryColor) { fillColor(theme.primaryColor, 'primary'); const primaryColor = new TinyColor(theme.primaryColor); const primaryColors = generate(primaryColor.toRgbString()); // Legacy - We should use semantic naming standard primaryColors.forEach((color, index) => { variables[`primary-${index + 1}`] = color; }); // Deprecated variables['primary-color-deprecated-l-35'] = formatColor(primaryColor, c => c.lighten(35)); variables['primary-color-deprecated-l-20'] = formatColor(primaryColor, c => c.lighten(20)); variables['primary-color-deprecated-t-20'] = formatColor(primaryColor, c => c.tint(20)); variables['primary-color-deprecated-t-50'] = formatColor(primaryColor, c => c.tint(50)); variables['primary-color-deprecated-f-12'] = formatColor(primaryColor, c => c.setAlpha(c.getAlpha() * 0.12)); const primaryActiveColor = new TinyColor(primaryColors[0]); variables['primary-color-active-deprecated-f-30'] = formatColor(primaryActiveColor, c => c.setAlpha(c.getAlpha() * 0.3)); variables['primary-color-active-deprecated-d-02'] = formatColor(primaryActiveColor, c => c.darken(2)); } // ================ Success Color ================ if (theme.successColor) { fillColor(theme.successColor, 'success'); } // ================ Warning Color ================ if (theme.warningColor) { fillColor(theme.warningColor, 'warning'); } // ================= Error Color ================= if (theme.errorColor) { fillColor(theme.errorColor, 'error'); } // ================= Info Color ================== if (theme.infoColor) { fillColor(theme.infoColor, 'info'); } // Convert to css variables const cssList = Object.keys(variables).map(key => `--${globalPrefixCls}-${key}: ${variables[key]};`); return ` :root { ${cssList.join('\n')} } `.trim(); } export function registerTheme(globalPrefixCls, theme, cspNonce) { const style = getStyle(globalPrefixCls, theme); if (canUseDom()) { updateCSS(style, `${dynamicStyleMark}-dynamic-theme`, { cspNonce }); } else { warn(`NzConfigService: SSR do not support dynamic theme with css variables.`); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLXZhcmlhYmxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29yZS9jb25maWcvY3NzLXZhcmlhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSDs7R0FFRztBQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJL0QsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUUvRCxNQUFNLFVBQVUsUUFBUSxDQUFDLGVBQXVCLEVBQUUsS0FBWTtJQUM1RCxNQUFNLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0lBRTdDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBZ0IsRUFBRSxPQUEwRCxFQUFVLEVBQUU7UUFDM0csSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDbEMsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBUSxFQUFFO1FBQ3pELE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUV4RCxTQUFTLENBQUMsR0FBRyxJQUFJ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QUM7SUFDdEUsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLENBQUMsdUVBQXVFLENBQUMsQ0FBQztJQUNoRixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbi8qKlxuICogU3luYyBmcm9tIEBhbnQtZGVzaWduL2NvbG9ycyhodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9hbnQtZGVzaWduLWNvbG9ycylcbiAqL1xuaW1wb3J0IHsgVGlueUNvbG9yIH0gZnJvbSAnQGN0cmwvdGlueWNvbG9yJztcblxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvY29sb3InO1xuaW1wb3J0IHsgd2FybiB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9sb2dnZXInO1xuaW1wb3J0IHsgY2FuVXNlRG9tLCB1cGRhdGVDU1MgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdXRpbCc7XG5cbmltcG9ydCB7IFRoZW1lIH0gZnJvbSAnLi9jb25maWcnO1xuXG5jb25zdCBkeW5hbWljU3R5bGVNYXJrID0gYC1hbnQtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlKGdsb2JhbFByZWZpeENsczogc3RyaW5nLCB0aGVtZTogVGhlbWUpOiBzdHJpbmcge1xuICBjb25zdCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBjb25zdCBmb3JtYXRDb2xvciA9IChjb2xvcjogVGlueUNvbG9yLCB1cGRhdGVyPzogKGNsb25lQ29sb3I6IFRpbnlDb2xvcikgPT4gVGlueUNvbG9yIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBsZXQgY2xvbmUgPSBjb2xvci5jbG9uZSgpO1xuICAgIGNsb25lID0gdXBkYXRlcj8uKGNsb25lKSB8fCBjbG9uZTtcbiAgICByZXR1cm4gY2xvbmUudG9SZ2JTdHJpbmcoKTtcbiAgfTtcblxuICBjb25zdCBmaWxsQ29sb3IgPSAoY29sb3JWYWw6IHN0cmluZywgdHlwZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZUNvbG9yID0gbmV3IFRpbnlDb2xvcihjb2xvclZhbCk7XG4gICAgY29uc3QgY29sb3JQYWxldHRlcyA9IGdlbmVyYXRlKGJhc2VDb2xvci50b1JnYlN0cmluZygpKTtcblxuICAgIHZhcmlhYmxlc1tgJHt0eXBlfS1jb2xvcmBdID0gZm9ybWF0Q29sb3IoYmFzZUNvbG9yKTtcbiAgICB2YXJpYWJsZXNbYCR7dHlwZX0tY29sb3ItZGlzYWJsZWRgXSA9IGNvbG9yUGFsZXR0ZXNbMV07XG4gICAgdmFyaWFibGVzW2Ake3R5cGV9LWNvbG9yLWhvdmVyYF0gPSBjb2xvclBhbGV0dGVzWzRdO1xuICAgIHZhcmlhYmxlc1tgJHt0eXBlfS1jb2xvci1hY3RpdmVgXSA9IGNvbG9yUGFsZXR0ZXNbN107XG4gICAgdmFyaWFibGVzW2Ake3R5cGV9LWNvbG9yLW91dGxpbmVgXSA9IGJhc2VDb2xvci5jbG9uZSgpLnNldEFscGhhKDAuMikudG9SZ2JTdHJpbmcoKTtcbiAgICB2YXJpYWJsZXNbYCR7dHlwZX0tY29sb3ItZGVwcmVjYXRlZC1iZ2BdID0gY29sb3JQYWxldHRlc1sxXTtcbiAgICB2YXJpYWJsZXNbYCR7dHlwZX0tY29sb3ItZGVwcmVjYXRlZC1ib3JkZXJgXSA9IGNvbG9yUGFsZXR0ZXNbM107XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PSBQcmltYXJ5IENvbG9yID09PT09PT09PT09PT09PT1cbiAgaWYgKHRoZW1lLnByaW1hcnlDb2xvcikge1xuICAgIGZpbGxDb2xvcih0aGVtZS5wcmltYXJ5Q29sb3IsICdwcmltYXJ5Jyk7XG5cbiAgICBjb25zdCBwcmltYXJ5Q29sb3IgPSBuZXcgVGlueUNvbG9yKHRoZW1lLnByaW1hcnlDb2xvcik7XG4gICAgY29uc3QgcHJpbWFyeUNvbG9ycyA9IGdlbmVyYXRlKHByaW1hcnlDb2xvci50b1JnYlN0cmluZygpKTtcblxuICAgIC8vIExlZ2FjeSAtIFdlIHNob3VsZCB1c2Ugc2VtYW50aWMgbmFtaW5nIHN0YW5kYXJkXG4gICAgcHJpbWFyeUNvbG9ycy5mb3JFYWNoKChjb2xvciwgaW5kZXgpID0+IHtcbiAgICAgIHZhcmlhYmxlc1tgcHJpbWFyeS0ke2luZGV4ICsgMX1gXSA9IGNvbG9yO1xuICAgIH0pO1xuICAgIC8vIERlcHJlY2F0ZWRcbiAgICB2YXJpYWJsZXNbJ3ByaW1hcnktY29sb3ItZGVwcmVjYXRlZC1sLTM1J10gPSBmb3JtYXRDb2xvcihwcmltYXJ5Q29sb3IsIGMgPT4gYy5saWdodGVuKDM1KSk7XG4gICAgdmFyaWFibGVzWydwcmltYXJ5LWNvbG9yLWRlcHJlY2F0ZWQtbC0yMCddID0gZm9ybWF0Q29sb3IocHJpbWFyeUNvbG9yLCBjID0+IGMubGlnaHRlbigyMCkpO1xuICAgIHZhcmlhYmxlc1sncHJpbWFyeS1jb2xvci1kZXByZWNhdGVkLXQtMjAnXSA9IGZvcm1hdENvbG9yKHByaW1hcnlDb2xvciwgYyA9PiBjLnRpbnQoMjApKTtcbiAgICB2YXJpYWJsZXNbJ3ByaW1hcnktY29sb3ItZGVwcmVjYXRlZC10LTUwJ10gPSBmb3JtYXRDb2xvcihwcmltYXJ5Q29sb3IsIGMgPT4gYy50aW50KDUwKSk7XG4gICAgdmFyaWFibGVzWydwcmltYXJ5LWNvbG9yLWRlcHJlY2F0ZWQtZi0xMiddID0gZm9ybWF0Q29sb3IocHJpbWFyeUNvbG9yLCBjID0+IGMuc2V0QWxwaGEoYy5nZXRBbHBoYSgpICogMC4xMikpO1xuXG4gICAgY29uc3QgcHJpbWFyeUFjdGl2ZUNvbG9yID0gbmV3IFRpbnlDb2xvcihwcmltYXJ5Q29sb3JzWzBdKTtcbiAgICB2YXJpYWJsZXNbJ3ByaW1hcnktY29sb3ItYWN0aXZlLWRlcHJlY2F0ZWQtZi0zMCddID0gZm9ybWF0Q29sb3IocHJpbWFyeUFjdGl2ZUNvbG9yLCBjID0+XG4gICAgICBjLnNldEFscGhhKGMuZ2V0QWxwaGEoKSAqIDAuMylcbiAgICApO1xuICAgIHZhcmlhYmxlc1sncHJpbWFyeS1jb2xvci1hY3RpdmUtZGVwcmVjYXRlZC1kLTAyJ10gPSBmb3JtYXRDb2xvcihwcmltYXJ5QWN0aXZlQ29sb3IsIGMgPT4gYy5kYXJrZW4oMikpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PSBTdWNjZXNzIENvbG9yID09PT09PT09PT09PT09PT1cbiAgaWYgKHRoZW1lLnN1Y2Nlc3NDb2xvcikge1xuICAgIGZpbGxDb2xvcih0aGVtZS5zdWNjZXNzQ29sb3IsICdzdWNjZXNzJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09IFdhcm5pbmcgQ29sb3IgPT09PT09PT09PT09PT09PVxuICBpZiAodGhlbWUud2FybmluZ0NvbG9yKSB7XG4gICAgZmlsbENvbG9yKHRoZW1lLndhcm5pbmdDb2xvciwgJ3dhcm5pbmcnKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09IEVycm9yIENvbG9yID09PT09PT09PT09PT09PT09XG4gIGlmICh0aGVtZS5lcnJvckNvbG9yKSB7XG4gICAgZmlsbENvbG9yKHRoZW1lLmVycm9yQ29sb3IsICdlcnJvcicpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT0gSW5mbyBDb2xvciA9PT09PT09PT09PT09PT09PT1cbiAgaWYgKHRoZW1lLmluZm9Db2xvcikge1xuICAgIGZpbGxDb2xvcih0aGVtZS5pbmZvQ29sb3IsICdpbmZvJyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRvIGNzcyB2YXJpYWJsZXNcbiAgY29uc3QgY3NzTGlzdCA9IE9iamVjdC5rZXlzKHZhcmlhYmxlcykubWFwKGtleSA9PiBgLS0ke2dsb2JhbFByZWZpeENsc30tJHtrZXl9OiAke3ZhcmlhYmxlc1trZXldfTtgKTtcblxuICByZXR1cm4gYFxuICA6cm9vdCB7XG4gICAgJHtjc3NMaXN0LmpvaW4oJ1xcbicpfVxuICB9XG4gIGAudHJpbSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUaGVtZShnbG9iYWxQcmVmaXhDbHM6IHN0cmluZywgdGhlbWU6IFRoZW1lLCBjc3BOb25jZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBjb25zdCBzdHlsZSA9IGdldFN0eWxlKGdsb2JhbFByZWZpeENscywgdGhlbWUpO1xuXG4gIGlmIChjYW5Vc2VEb20oKSkge1xuICAgIHVwZGF0ZUNTUyhzdHlsZSwgYCR7ZHluYW1pY1N0eWxlTWFya30tZHluYW1pYy10aGVtZWAsIHsgY3NwTm9uY2UgfSk7XG4gIH0gZWxzZSB7XG4gICAgd2FybihgTnpDb25maWdTZXJ2aWNlOiBTU1IgZG8gbm90IHN1cHBvcnQgZHluYW1pYyB0aGVtZSB3aXRoIGNzcyB2YXJpYWJsZXMuYCk7XG4gIH1cbn1cbiJdfQ==