use-design-tokens.ts 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. import { reactive, watch } from 'vue';
  2. import { preferences } from '@vben/preferences';
  3. import { updateCSSVariables } from '@vben/utils';
  4. /**
  5. * 用于适配各个框架的设计系统
  6. */
  7. export function useAntdDesignTokens() {
  8. const rootStyles = getComputedStyle(document.documentElement);
  9. const tokens = reactive({
  10. borderRadius: '' as any,
  11. colorBgBase: '',
  12. colorBgContainer: '',
  13. colorBgElevated: '',
  14. colorBgLayout: '',
  15. colorBgMask: '',
  16. colorBorder: '',
  17. colorError: '',
  18. colorInfo: '',
  19. colorPrimary: '',
  20. colorSuccess: '',
  21. colorTextBase: '',
  22. colorWarning: '',
  23. });
  24. const getCssVariableValue = (variable: string, isColor: boolean = true) => {
  25. const value = rootStyles.getPropertyValue(variable);
  26. return isColor ? `hsl(${value})` : value;
  27. };
  28. watch(
  29. () => preferences.theme,
  30. () => {
  31. tokens.colorPrimary = getCssVariableValue('--primary');
  32. tokens.colorError = getCssVariableValue('--destructive');
  33. tokens.colorWarning = getCssVariableValue('--warning');
  34. tokens.colorSuccess = getCssVariableValue('--success');
  35. tokens.colorTextBase = getCssVariableValue('--foreground');
  36. getCssVariableValue('--primary-foreground');
  37. tokens.colorBorder = getCssVariableValue('--border');
  38. tokens.colorBgElevated = getCssVariableValue('--popover');
  39. tokens.colorBgContainer = getCssVariableValue('--card');
  40. tokens.colorBgBase = getCssVariableValue('--background');
  41. tokens.borderRadius = getCssVariableValue('--radius', false);
  42. tokens.colorBgLayout = getCssVariableValue('--background-deep');
  43. tokens.colorBgMask = getCssVariableValue('--overlay');
  44. },
  45. { immediate: true },
  46. );
  47. return {
  48. tokens,
  49. };
  50. }
  51. export function useNaiveDesignTokens() {
  52. const rootStyles = getComputedStyle(document.documentElement);
  53. const commonTokens = reactive({
  54. baseColor: '',
  55. bodyColor: '',
  56. borderColor: '',
  57. borderRadius: '',
  58. cardColor: '',
  59. dividerColor: '',
  60. errorColor: '',
  61. errorColorHover: '',
  62. errorColorPressed: '',
  63. errorColorSuppl: '',
  64. invertedColor: '',
  65. modalColor: '',
  66. popoverColor: '',
  67. primaryColor: '',
  68. primaryColorHover: '',
  69. primaryColorPressed: '',
  70. primaryColorSuppl: '',
  71. successColor: '',
  72. successColorHover: '',
  73. successColorPressed: '',
  74. successColorSuppl: '',
  75. tableColor: '',
  76. textColorBase: '',
  77. warningColor: '',
  78. warningColorHover: '',
  79. warningColorPressed: '',
  80. warningColorSuppl: '',
  81. });
  82. const getCssVariableValue = (variable: string, isColor: boolean = true) => {
  83. const value = rootStyles.getPropertyValue(variable);
  84. return isColor ? `hsl(${value})` : value;
  85. };
  86. watch(
  87. () => preferences.theme,
  88. () => {
  89. commonTokens.primaryColor = getCssVariableValue('--primary');
  90. commonTokens.primaryColorHover = getCssVariableValue('--primary-600');
  91. commonTokens.primaryColorPressed = getCssVariableValue('--primary-700');
  92. commonTokens.primaryColorSuppl = getCssVariableValue('--primary-800');
  93. commonTokens.errorColor = getCssVariableValue('--destructive');
  94. commonTokens.errorColorHover = getCssVariableValue('--destructive-600');
  95. commonTokens.errorColorPressed = getCssVariableValue('--destructive-700');
  96. commonTokens.errorColorSuppl = getCssVariableValue('--destructive-800');
  97. commonTokens.warningColor = getCssVariableValue('--warning');
  98. commonTokens.warningColorHover = getCssVariableValue('--warning-600');
  99. commonTokens.warningColorPressed = getCssVariableValue('--warning-700');
  100. commonTokens.warningColorSuppl = getCssVariableValue('--warning-800');
  101. commonTokens.successColor = getCssVariableValue('--success');
  102. commonTokens.successColorHover = getCssVariableValue('--success-600');
  103. commonTokens.successColorPressed = getCssVariableValue('--success-700');
  104. commonTokens.successColorSuppl = getCssVariableValue('--success-800');
  105. commonTokens.textColorBase = getCssVariableValue('--foreground');
  106. commonTokens.baseColor = getCssVariableValue('--primary-foreground');
  107. commonTokens.dividerColor = commonTokens.borderColor =
  108. getCssVariableValue('--border');
  109. commonTokens.modalColor = commonTokens.popoverColor =
  110. getCssVariableValue('--popover');
  111. commonTokens.tableColor = commonTokens.cardColor =
  112. getCssVariableValue('--card');
  113. commonTokens.bodyColor = getCssVariableValue('--background');
  114. commonTokens.invertedColor = getCssVariableValue('--background-deep');
  115. commonTokens.borderRadius = getCssVariableValue('--radius', false);
  116. // antDesignTokens.colorBgMask = getCssVariableValue('--overlay');
  117. },
  118. { immediate: true },
  119. );
  120. return {
  121. commonTokens,
  122. };
  123. }
  124. export function useElementPlusDesignTokens() {
  125. const rootStyles = getComputedStyle(document.documentElement);
  126. const getCssVariableValue = (variable: string, isColor: boolean = true) => {
  127. const value = rootStyles.getPropertyValue(variable);
  128. return isColor ? `hsl(${value})` : value;
  129. };
  130. watch(
  131. () => preferences.theme,
  132. () => {
  133. const background = getCssVariableValue('--background');
  134. const border = getCssVariableValue('--border');
  135. const variables: Record<string, string> = {
  136. '--el-bg-color': background,
  137. '--el-bg-color-overlay': getCssVariableValue('--popover'),
  138. '--el-bg-color-page': getCssVariableValue('--background-deep'),
  139. '--el-border-color': border,
  140. '--el-border-color-dark': border,
  141. '--el-border-color-light': border,
  142. '--el-border-color-lighter': border,
  143. '--el-border-radius-base': getCssVariableValue('--radius', false),
  144. '--el-color-danger': getCssVariableValue('--destructive'),
  145. '--el-color-danger-light-3': getCssVariableValue('--destructive-600'),
  146. '--el-color-danger-light-5': getCssVariableValue('--destructive-700'),
  147. '--el-color-danger-light-7': getCssVariableValue('--destructive-800'),
  148. '--el-color-error-light-8': border,
  149. '--el-color-error-light-9': background,
  150. '--el-color-primary': getCssVariableValue('--primary'),
  151. '--el-color-primary-light-3': getCssVariableValue('--primary-600'),
  152. '--el-color-primary-light-5': getCssVariableValue('--primary-700'),
  153. '--el-color-primary-light-7': getCssVariableValue('--primary-800'),
  154. '--el-color-success': getCssVariableValue('--success'),
  155. '--el-color-success-light-3': getCssVariableValue('--success-600'),
  156. '--el-color-success-light-5': getCssVariableValue('--success-700'),
  157. '--el-color-success-light-7': getCssVariableValue('--success-800'),
  158. '--el-color-success-light-8': border,
  159. '--el-color-success-light-9': background,
  160. '--el-color-warning': getCssVariableValue('--warning'),
  161. '--el-color-warning-light-3': getCssVariableValue('--warning-600'),
  162. '--el-color-warning-light-5': getCssVariableValue('--warning-700'),
  163. '--el-color-warning-light-7': getCssVariableValue('--warning-800'),
  164. '--el-color-warning-light-8': border,
  165. '--el-color-warning-light-9': background,
  166. '--el-fill-color-blank': background,
  167. '--el-text-color-primary': getCssVariableValue('--foreground'),
  168. '--el-text-color-regular': getCssVariableValue('--foreground'),
  169. };
  170. updateCSSVariables(variables, `__vben_design_styles__`);
  171. },
  172. { immediate: true },
  173. );
  174. }