themeConfig.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { generate } from '@ant-design/colors';
  2. export const primaryColor = '#0084f4';
  3. export const themeMode = 'light';
  4. export type ThemeMode = 'dark' | 'light';
  5. type Fn = (...arg: any) => any;
  6. export interface GenerateColorsParams {
  7. mixLighten: Fn;
  8. mixDarken: Fn;
  9. tinycolor: any;
  10. color?: string;
  11. }
  12. export function generateAntColors(color: string, mode: ThemeMode) {
  13. return generate(color, {
  14. theme: mode == 'dark' ? 'dark' : 'default',
  15. });
  16. }
  17. export function getThemeColors(color?: string, theme?: ThemeMode) {
  18. const tc = color || primaryColor;
  19. const tm = theme || themeMode;
  20. const colors = generateAntColors(tc, tm);
  21. const primary = colors[5];
  22. const modeColors = generateAntColors(primary, tm === 'dark' ? 'light' : 'dark');
  23. return [...colors, ...modeColors];
  24. }
  25. export function generateColors({
  26. color = primaryColor,
  27. mixLighten,
  28. mixDarken,
  29. tinycolor,
  30. }: GenerateColorsParams) {
  31. const lightens = new Array(19).fill(0).map((t, i) => {
  32. return mixLighten(color, i / 5);
  33. });
  34. const darkens = new Array(19).fill(0).map((t, i) => {
  35. return mixDarken(color, i / 5);
  36. });
  37. const alphaColors = new Array(19).fill(0).map((t, i) => {
  38. return tinycolor(color)
  39. .setAlpha(i / 20)
  40. .toRgbString();
  41. });
  42. const tinycolorLightens = new Array(19)
  43. .fill(0)
  44. .map((t, i) => {
  45. return tinycolor(color)
  46. .lighten(i * 5)
  47. .toHexString();
  48. })
  49. .filter((item) => item !== '#ffffff');
  50. const tinycolorDarkens = new Array(19)
  51. .fill(0)
  52. .map((t, i) => {
  53. return tinycolor(color)
  54. .darken(i * 5)
  55. .toHexString();
  56. })
  57. .filter((item) => item !== '#000000');
  58. return [...lightens, ...darkens, ...alphaColors, ...tinycolorDarkens, ...tinycolorLightens];
  59. }
  60. /**
  61. * less global variable
  62. */
  63. export function generateModifyVars() {
  64. const palettes = generateAntColors(primaryColor, themeMode);
  65. const primary = palettes[5];
  66. const primaryColorObj: Record<string, string> = {};
  67. for (let index = 0; index < 10; index++) {
  68. primaryColorObj[`primary-${index}`] = palettes[index];
  69. }
  70. return {
  71. 'primary-color': primary,
  72. ...primaryColorObj,
  73. 'info-color': primary,
  74. 'alert-info-bg-color': palettes[0],
  75. 'alert-info-border-color': palettes[2],
  76. 'processing-color': primary,
  77. 'success-color': '#55D187', // Success color
  78. 'error-color': '#ED6F6F', // False color
  79. 'warning-color': '#EFBD47', // Warning color
  80. 'disabled-color': 'rgba(0, 0, 0, 0.25)', // Failure color
  81. 'heading-color': 'rgba(0, 0, 0, 0.85)', // Title color
  82. 'text-color': 'rgba(0, 0, 0, 0.85)', // Main text color
  83. 'text-color-secondary ': 'rgba(0, 0, 0, 0.45)', // Subtext color
  84. 'font-size-base': '14px', // Main font size
  85. 'box-shadow-base': '0 2px 8px rgba(0, 0, 0, 0.15)', // Floating shadow
  86. 'border-color-base': '#d9d9d9', // Border color,
  87. 'border-radius-base': '2px', // Component/float fillet
  88. 'link-color': primary, // Link color
  89. };
  90. }