123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- import { reactive, watch } from 'vue';
- import { preferences, usePreferences } from '@vben/preferences';
- import { convertToRgb, updateCSSVariables } from '@vben/utils';
- /**
- * 用于适配各个框架的设计系统
- */
- export function useAntdDesignTokens() {
- const rootStyles = getComputedStyle(document.documentElement);
- const tokens = reactive({
- borderRadius: '' as any,
- colorBgBase: '',
- colorBgContainer: '',
- colorBgElevated: '',
- colorBgLayout: '',
- colorBgMask: '',
- colorBorder: '',
- colorBorderSecondary: '',
- colorError: '',
- colorInfo: '',
- colorPrimary: '',
- colorSuccess: '',
- colorTextBase: '',
- colorWarning: '',
- });
- const getCssVariableValue = (variable: string, isColor: boolean = true) => {
- const value = rootStyles.getPropertyValue(variable);
- return isColor ? `hsl(${value})` : value;
- };
- watch(
- () => preferences.theme,
- () => {
- tokens.colorPrimary = getCssVariableValue('--primary');
- tokens.colorInfo = getCssVariableValue('--primary');
- tokens.colorError = getCssVariableValue('--destructive');
- tokens.colorWarning = getCssVariableValue('--warning');
- tokens.colorSuccess = getCssVariableValue('--success');
- tokens.colorTextBase = getCssVariableValue('--foreground');
- getCssVariableValue('--primary-foreground');
- tokens.colorBorderSecondary = tokens.colorBorder =
- getCssVariableValue('--border');
- tokens.colorBgElevated = getCssVariableValue('--popover');
- tokens.colorBgContainer = getCssVariableValue('--card');
- tokens.colorBgBase = getCssVariableValue('--background');
- const radius = Number.parseFloat(getCssVariableValue('--radius', false));
- // 1rem = 16px
- tokens.borderRadius = radius * 16;
- tokens.colorBgLayout = getCssVariableValue('--background-deep');
- tokens.colorBgMask = getCssVariableValue('--overlay');
- },
- { immediate: true },
- );
- return {
- tokens,
- };
- }
- export function useNaiveDesignTokens() {
- const rootStyles = getComputedStyle(document.documentElement);
- const commonTokens = reactive({
- baseColor: '',
- bodyColor: '',
- borderColor: '',
- borderRadius: '',
- cardColor: '',
- dividerColor: '',
- errorColor: '',
- errorColorHover: '',
- errorColorPressed: '',
- errorColorSuppl: '',
- invertedColor: '',
- modalColor: '',
- popoverColor: '',
- primaryColor: '',
- primaryColorHover: '',
- primaryColorPressed: '',
- primaryColorSuppl: '',
- successColor: '',
- successColorHover: '',
- successColorPressed: '',
- successColorSuppl: '',
- tableColor: '',
- textColorBase: '',
- warningColor: '',
- warningColorHover: '',
- warningColorPressed: '',
- warningColorSuppl: '',
- });
- const getCssVariableValue = (variable: string, isColor: boolean = true) => {
- const value = rootStyles.getPropertyValue(variable);
- return isColor ? convertToRgb(`hsl(${value})`) : value;
- };
- watch(
- () => preferences.theme,
- () => {
- commonTokens.primaryColor = getCssVariableValue('--primary');
- commonTokens.primaryColorHover = getCssVariableValue('--primary-600');
- commonTokens.primaryColorPressed = getCssVariableValue('--primary-700');
- commonTokens.primaryColorSuppl = getCssVariableValue('--primary-800');
- commonTokens.errorColor = getCssVariableValue('--destructive');
- commonTokens.errorColorHover = getCssVariableValue('--destructive-600');
- commonTokens.errorColorPressed = getCssVariableValue('--destructive-700');
- commonTokens.errorColorSuppl = getCssVariableValue('--destructive-800');
- commonTokens.warningColor = getCssVariableValue('--warning');
- commonTokens.warningColorHover = getCssVariableValue('--warning-600');
- commonTokens.warningColorPressed = getCssVariableValue('--warning-700');
- commonTokens.warningColorSuppl = getCssVariableValue('--warning-800');
- commonTokens.successColor = getCssVariableValue('--success');
- commonTokens.successColorHover = getCssVariableValue('--success-600');
- commonTokens.successColorPressed = getCssVariableValue('--success-700');
- commonTokens.successColorSuppl = getCssVariableValue('--success-800');
- commonTokens.textColorBase = getCssVariableValue('--foreground');
- commonTokens.baseColor = getCssVariableValue('--primary-foreground');
- commonTokens.dividerColor = commonTokens.borderColor =
- getCssVariableValue('--border');
- commonTokens.modalColor = commonTokens.popoverColor =
- getCssVariableValue('--popover');
- commonTokens.tableColor = commonTokens.cardColor =
- getCssVariableValue('--card');
- commonTokens.bodyColor = getCssVariableValue('--background');
- commonTokens.invertedColor = getCssVariableValue('--background-deep');
- commonTokens.borderRadius = getCssVariableValue('--radius', false);
- },
- { immediate: true },
- );
- return {
- commonTokens,
- };
- }
- export function useElementPlusDesignTokens() {
- const { isDark } = usePreferences();
- const rootStyles = getComputedStyle(document.documentElement);
- const getCssVariableValueRaw = (variable: string) => {
- return rootStyles.getPropertyValue(variable);
- };
- const getCssVariableValue = (variable: string, isColor: boolean = true) => {
- const value = getCssVariableValueRaw(variable);
- return isColor ? convertToRgb(`hsl(${value})`) : value;
- };
- watch(
- () => preferences.theme,
- () => {
- const background = getCssVariableValue('--background');
- const border = getCssVariableValue('--border');
- const accent = getCssVariableValue('--accent');
- const variables: Record<string, string> = {
- '--el-bg-color': background,
- '--el-bg-color-overlay': getCssVariableValue('--popover'),
- '--el-bg-color-page': getCssVariableValue('--background-deep'),
- '--el-border-color': border,
- '--el-border-color-dark': border,
- '--el-border-color-extra-light': border,
- '--el-border-color-hover': accent,
- '--el-border-color-light': border,
- '--el-border-color-lighter': border,
- '--el-border-radius-base': getCssVariableValue('--radius', false),
- '--el-color-danger': getCssVariableValue('--destructive-500'),
- '--el-color-danger-dark-2': getCssVariableValue('--destructive'),
- '--el-color-danger-light-3': getCssVariableValue('--destructive-400'),
- '--el-color-danger-light-5': getCssVariableValue('--destructive-300'),
- '--el-color-danger-light-7': getCssVariableValue('--destructive-200'),
- '--el-color-danger-light-8': isDark.value
- ? border
- : getCssVariableValue('--destructive-100'),
- '--el-color-danger-light-9': isDark.value
- ? accent
- : getCssVariableValue('--destructive-50'),
- '--el-color-error': getCssVariableValue('--destructive-500'),
- '--el-color-error-dark-2': getCssVariableValue('--destructive'),
- '--el-color-error-light-3': getCssVariableValue('--destructive-400'),
- '--el-color-error-light-5': getCssVariableValue('--destructive-300'),
- '--el-color-error-light-7': getCssVariableValue('--destructive-200'),
- '--el-color-error-light-8': isDark.value
- ? border
- : getCssVariableValue('--destructive-100'),
- '--el-color-error-light-9': isDark.value
- ? accent
- : getCssVariableValue('--destructive-50'),
- '--el-color-info-light-8': border,
- '--el-color-info-light-9': getCssVariableValue('--info'), // getCssVariableValue('--secondary'),
- '--el-color-primary': getCssVariableValue('--primary-500'),
- '--el-color-primary-dark-2': getCssVariableValue('--primary'),
- '--el-color-primary-light-3': getCssVariableValue('--primary-400'),
- '--el-color-primary-light-5': getCssVariableValue('--primary-300'),
- '--el-color-primary-light-7': getCssVariableValue('--primary-200'),
- '--el-color-primary-light-8': isDark.value
- ? border
- : getCssVariableValue('--primary-100'),
- '--el-color-primary-light-9': isDark.value
- ? accent
- : getCssVariableValue('--primary-50'),
- '--el-color-success': getCssVariableValue('--success-500'),
- '--el-color-success-dark-2': getCssVariableValue('--success'),
- '--el-color-success-light-3': getCssVariableValue('--success-400'),
- '--el-color-success-light-5': getCssVariableValue('--success-300'),
- '--el-color-success-light-7': getCssVariableValue('--success-200'),
- '--el-color-success-light-8': isDark.value
- ? border
- : getCssVariableValue('--success-100'),
- '--el-color-success-light-9': isDark.value
- ? accent
- : getCssVariableValue('--success-50'),
- '--el-color-warning': getCssVariableValue('--warning-500'),
- '--el-color-warning-dark-2': getCssVariableValue('--warning'),
- '--el-color-warning-light-3': getCssVariableValue('--warning-400'),
- '--el-color-warning-light-5': getCssVariableValue('--warning-300'),
- '--el-color-warning-light-7': getCssVariableValue('--warning-200'),
- '--el-color-warning-light-8': isDark.value
- ? border
- : getCssVariableValue('--warning-100'),
- '--el-color-warning-light-9': isDark.value
- ? accent
- : getCssVariableValue('--warning-50'),
- '--el-fill-color': getCssVariableValue('--accent'),
- '--el-fill-color-blank': background,
- '--el-fill-color-light': getCssVariableValue('--accent'),
- '--el-fill-color-lighter': getCssVariableValue('--accent-lighter'),
- // 解决ElLoading背景色问题
- '--el-mask-color': isDark.value
- ? 'rgba(0,0,0,.8)'
- : 'rgba(255,255,255,.9)',
- '--el-text-color-primary': getCssVariableValue('--foreground'),
- '--el-text-color-regular': getCssVariableValue('--foreground'),
- };
- updateCSSVariables(variables, `__vben_design_styles__`);
- },
- { immediate: true },
- );
- }
|