cssVariables.js 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.getStyle = getStyle;
  7. exports.registerTheme = registerTheme;
  8. var _tinycolor = require("@ctrl/tinycolor");
  9. var _colors = require("@ant-design/colors");
  10. var _dynamicCSS = require("../vc-util/Dom/dynamicCSS");
  11. var _canUseDom = _interopRequireDefault(require("../_util/canUseDom"));
  12. var _warning = _interopRequireDefault(require("../_util/warning"));
  13. /* eslint-disable import/prefer-default-export, prefer-destructuring */
  14. const dynamicStyleMark = `-ant-${Date.now()}-${Math.random()}`;
  15. function getStyle(globalPrefixCls, theme) {
  16. const variables = {};
  17. const formatColor = (color, updater) => {
  18. let clone = color.clone();
  19. clone = (updater === null || updater === void 0 ? void 0 : updater(clone)) || clone;
  20. return clone.toRgbString();
  21. };
  22. const fillColor = (colorVal, type) => {
  23. const baseColor = new _tinycolor.TinyColor(colorVal);
  24. const colorPalettes = (0, _colors.generate)(baseColor.toRgbString());
  25. variables[`${type}-color`] = formatColor(baseColor);
  26. variables[`${type}-color-disabled`] = colorPalettes[1];
  27. variables[`${type}-color-hover`] = colorPalettes[4];
  28. variables[`${type}-color-active`] = colorPalettes[6];
  29. variables[`${type}-color-outline`] = baseColor.clone().setAlpha(0.2).toRgbString();
  30. variables[`${type}-color-deprecated-bg`] = colorPalettes[0];
  31. variables[`${type}-color-deprecated-border`] = colorPalettes[2];
  32. };
  33. // ================ Primary Color ================
  34. if (theme.primaryColor) {
  35. fillColor(theme.primaryColor, 'primary');
  36. const primaryColor = new _tinycolor.TinyColor(theme.primaryColor);
  37. const primaryColors = (0, _colors.generate)(primaryColor.toRgbString());
  38. // Legacy - We should use semantic naming standard
  39. primaryColors.forEach((color, index) => {
  40. variables[`primary-${index + 1}`] = color;
  41. });
  42. // Deprecated
  43. variables['primary-color-deprecated-l-35'] = formatColor(primaryColor, c => c.lighten(35));
  44. variables['primary-color-deprecated-l-20'] = formatColor(primaryColor, c => c.lighten(20));
  45. variables['primary-color-deprecated-t-20'] = formatColor(primaryColor, c => c.tint(20));
  46. variables['primary-color-deprecated-t-50'] = formatColor(primaryColor, c => c.tint(50));
  47. variables['primary-color-deprecated-f-12'] = formatColor(primaryColor, c => c.setAlpha(c.getAlpha() * 0.12));
  48. const primaryActiveColor = new _tinycolor.TinyColor(primaryColors[0]);
  49. variables['primary-color-active-deprecated-f-30'] = formatColor(primaryActiveColor, c => c.setAlpha(c.getAlpha() * 0.3));
  50. variables['primary-color-active-deprecated-d-02'] = formatColor(primaryActiveColor, c => c.darken(2));
  51. }
  52. // ================ Success Color ================
  53. if (theme.successColor) {
  54. fillColor(theme.successColor, 'success');
  55. }
  56. // ================ Warning Color ================
  57. if (theme.warningColor) {
  58. fillColor(theme.warningColor, 'warning');
  59. }
  60. // ================= Error Color =================
  61. if (theme.errorColor) {
  62. fillColor(theme.errorColor, 'error');
  63. }
  64. // ================= Info Color ==================
  65. if (theme.infoColor) {
  66. fillColor(theme.infoColor, 'info');
  67. }
  68. // Convert to css variables
  69. const cssList = Object.keys(variables).map(key => `--${globalPrefixCls}-${key}: ${variables[key]};`);
  70. return `
  71. :root {
  72. ${cssList.join('\n')}
  73. }
  74. `.trim();
  75. }
  76. function registerTheme(globalPrefixCls, theme) {
  77. const style = getStyle(globalPrefixCls, theme);
  78. if ((0, _canUseDom.default)()) {
  79. (0, _dynamicCSS.updateCSS)(style, `${dynamicStyleMark}-dynamic-theme`);
  80. } else {
  81. (0, _warning.default)(false, 'ConfigProvider', 'SSR do not support dynamic theme with css variables.');
  82. }
  83. }