ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
83 lines • 14.1 kB
JavaScript
/**
* 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==