import {
defineConfig,
presetIcons,
presetAttributify,
presetUno,
transformerDirectives,
transformerVariantGroup,
UserConfig,
} from 'unocss';
import { Theme } from 'unocss/preset-mini';
export const iconCollectionName = 'uplus';
// 自定义svg的图标
export const iconCollection = {
/** uplus logo */
logo: `
`,
'chevron-up': `
`,
'chevron-down': `
`,
'chevron-left': `
`,
'chevron-right': `
`,
};
const defaultSizes = {
'spacing-xxxs': '4px',
'spacing-xxs': '8px',
'spacing-xs': '12px',
'spacing-sm': '16px',
'spacing-md': '20px',
spacing: '24px',
'spacing-lg': '28px',
'spacing-xl': '32px',
'spacing-xxl': '36px',
'spacing-xxxl': '40px',
'exercise-header': '56px',
};
export const theme: Theme = {
breakpoints: {
sm: '640px',
md: '768px',
df: '900px',
lg: '1024px',
xl: '1280px',
xxl: '1536px',
xxxl: '1860px',
},
fontSize: {
xs: '12px',
sm: '13px',
base: '14px',
lg: '16px',
xl: '18px',
xxl: '20px',
xxxl: '22px',
},
height: {
...defaultSizes,
},
width: {
...defaultSizes,
},
lineHeight: {
...defaultSizes,
},
// athena产教融合云主题间距
spacing: {
...defaultSizes,
},
colors: {
theme: 'var(--el-color-primary)',
primary: 'var(--el-color-primary)',
success: 'var(--el-color-success)',
warning: 'var(--el-color-warning)',
danger: 'var(--el-color-danger)',
info: 'var(--el-color-info)',
text: {
primary: 'var(--el-text-color-primary)',
regular: 'var(--el-text-color-regular)',
secondary: 'var(--el-text-color-secondary)',
placeholder: 'var(--el-text-color-placeholder)',
disabled: 'var(--el-text-color-disabled)',
},
},
boxShadow: {
card: '0 3px 12px 0px rgba(10, 60, 238, 0.1)',
},
};
/** 将上方自定义的svg图表类明生成列表,传给下面配置中的safeList,保证动态嵌入的自定义图标样式有效 */
export const getIconCollectionList = () => {
const list: string[] = [];
for (const key in iconCollection) {
list.push(`i-${iconCollectionName}:${key}`);
}
return list;
};
const config: UserConfig = defineConfig({
presets: [
presetUno(),
presetAttributify(),
presetIcons({
scale: 1,
warn: true,
collections: {
[iconCollectionName]: iconCollection,
},
}),
],
// unocss can't render icon class dynamically, when adding menu icon class
// in route.meta.menuConfig, you must also add the icon class in safelist.
safelist: [...getIconCollectionList()],
transformers: [transformerDirectives(), transformerVariantGroup()],
theme,
shortcuts: [
{
'flex-row-center': 'flex flex-row items-center justify-center',
'flex-row-between': 'flex flex-row items-center justify-between',
'flex-col-center': 'flex flex-col items-center justify-center',
'flex-col-between': 'flex flex-col items-center justify-between',
},
],
});
export default config;