import type { Theme } from 'unocss/preset-uno' import { entriesToCss, toArray } from '@unocss/core' import { defineConfig, presetAttributify, presetIcons, presetTypography, presetUno, transformerCompileClass, transformerDirectives, transformerVariantGroup, } from 'unocss' import { presetScrollbar } from 'unocss-preset-scrollbar' import { darkTheme, lightTheme } from './themes' export default defineConfig({ content: { pipeline: { include: [ /\.(vue|svelte|[jt]sx|mdx?|astro|elm|php|phtml|html)($|\?)/, 'src/**/*.{js,ts}', ], }, }, shortcuts: [ [/^flex-?(col)?-(start|end|center|baseline|stretch)-?(start|end|center|between|around|evenly|left|right)?$/, ([, col, items, justify]) => { const cls = ['flex'] if (col === 'col') { cls.push('flex-col') } if (items === 'center' && !justify) { cls.push('items-center') cls.push('justify-center') } else { cls.push(`items-${items}`) if (justify) { cls.push(`justify-${justify}`) } } return cls.join(' ') }], ], preflights: [ { getCSS: () => { const returnCss: any = [] // 明亮主题 const lightCss = entriesToCss(Object.entries(lightTheme)) const lightRoots = toArray([`*,::before,::after`, `::backdrop`]) returnCss.push(lightRoots.map(root => `${root}{${lightCss}}`).join('')) // 暗黑主题 const darkCss = entriesToCss(Object.entries(darkTheme)) const darkRoots = toArray([`html.dark,html.dark *,html.dark ::before,html.dark ::after`, `html.dark ::backdrop`]) returnCss.push(darkRoots.map(root => `${root}{${darkCss}}`).join('')) return returnCss.join('') }, }, ], theme: { colors: { 'ui-primary': 'rgb(var(--ui-primary))', 'ui-text': 'rgb(var(--ui-text))', }, }, presets: [ presetUno(), presetAttributify(), presetIcons({ extraProperties: { 'display': 'inline-block', 'vertical-align': 'middle', }, }), presetTypography(), presetScrollbar(), ], transformers: [ transformerDirectives(), transformerVariantGroup(), transformerCompileClass(), ], configDeps: [ 'themes/index.ts', ], })