// uno.config.ts import { defineConfig, presetMini, presetWind3, transformerDirectives, transformerVariantGroup } from 'unocss'; import { presetExtra } from 'unocss-preset-extra'; // ==================== 语义化文字颜色 / Semantic Text Colors ==================== // 用途:正文、标题等文字内容(推荐用于文本) // Usage: Body text, headings, etc. (Recommended for text) const textColors = { // 自定义语义化文字色 / Custom semantic text colors 't-primary': 'var(--text-primary)', // text-t-primary - 主要文字 't-secondary': 'var(--text-secondary)', // text-t-secondary - 次要文字 't-tertiary': 'var(--bg-6)', // text-t-tertiary - 三级说明/提示文字 't-disabled': 'var(--text-disabled)', // text-t-disabled - 禁用文字 }; // ==================== 语义状态色 / Semantic State Colors ==================== // 用途:状态提示、按钮、标签等 // Usage: Status indicators, buttons, tags, etc. const semanticColors = { primary: 'var(--primary)', // bg-primary, text-primary, border-primary success: 'var(--success)', // bg-success, text-success warning: 'var(--warning)', // bg-warning, text-warning danger: 'var(--danger)', // bg-danger, text-danger info: 'var(--info)', // bg-info, text-info }; // ==================== 背景色系统 / Background Color System ==================== // 用途:背景、容器等布局元素 // Usage: Backgrounds, containers, layout elements // ⚠️ 数字键同时支持 bg-* 和 border-* (如: bg-1, border-1) // Numeric keys support bg-* and border-* simultaneously // 📝 text-1 到 text-4 通过自定义规则支持,指向 Arco 的 --color-text-* // text-1 to text-4 are supported via custom rules, pointing to Arco's --color-text-* const backgroundColors = { base: 'var(--bg-base)', // bg-base, border-base - 主背景 1: 'var(--bg-1)', // bg-1, border-1 - 次级背景 2: 'var(--bg-2)', // bg-2, border-2 - 三级背景 3: 'var(--bg-3)', // bg-3, border-3 - 边框/分隔 4: 'var(--bg-4)', // bg-4, border-4 5: 'var(--bg-5)', // bg-5, border-5 6: 'var(--bg-6)', // bg-6, border-6 8: 'var(--bg-8)', // bg-8, border-8 9: 'var(--bg-9)', // bg-9, border-9 10: 'var(--bg-10)', // bg-10, border-10 hover: 'var(--bg-hover)', // bg-hover - 悬停背景 active: 'var(--bg-active)', // bg-active - 激活背景 }; // ==================== 边框颜色 / Border Colors ==================== const borderColors = { 'b-base': 'var(--border-base)', // border-b-base - 基础边框 'b-light': 'var(--border-light)', // border-b-light - 浅色边框 'b-1': 'var(--bg-3)', // border-b-1 - 基于 bg-3 'b-2': 'var(--bg-4)', // border-b-2 - 基于 bg-4 'b-3': 'var(--bg-5)', // border-b-3 - 基于 bg-5 }; // ==================== 品牌色 / Brand Colors ==================== const brandColors = { brand: 'var(--brand)', 'brand-light': 'var(--brand-light)', 'brand-hover': 'var(--brand-hover)', }; // ==================== AOU 品牌色系 / AOU Brand Colors ==================== const aouColors = { aou: { 1: 'var(--aou-1)', 2: 'var(--aou-2)', 3: 'var(--aou-3)', 4: 'var(--aou-4)', 5: 'var(--aou-5)', 6: 'var(--aou-6)', 7: 'var(--aou-7)', 8: 'var(--aou-8)', 9: 'var(--aou-9)', 10: 'var(--aou-10)', }, }; // ==================== UI 组件专用颜色 / UI Component Specific Colors ==================== const componentColors = { 'message-user': 'var(--message-user-bg)', 'message-tips': 'var(--message-tips-bg)', 'workspace-btn': 'var(--workspace-btn-bg)', }; // ==================== 特殊颜色 / Special Colors ==================== const specialColors = { fill: 'var(--fill)', inverse: 'var(--inverse)', }; export default defineConfig({ presets: [presetMini(), presetExtra(), presetWind3()], transformers: [transformerVariantGroup(), transformerDirectives({ enforce: 'pre' })], content: { pipeline: { // Use RegExp instead of glob strings so patterns match against absolute // module IDs regardless of the Vite root directory. electron-vite sets // the renderer root to packages/desktop/src/renderer/, which causes glob patterns like // 'packages/desktop/src/**/*.tsx' to resolve to the wrong nested path. include: [/\.[jt]sx?($|\?)/, /\.vue($|\?)/, /\.css($|\?)/], exclude: [/[\\/]node_modules[\\/]/, /\.html($|\?)/], }, }, // 自定义规则 / Custom rules rules: [ // Arco Design 官方文字颜色 text-1 到 text-4 // Arco Design official text colors: text-1, text-2, text-3, text-4 [/^text-([1-4])$/, ([, d]: RegExpExecArray) => ({ color: `var(--color-text-${d})` })], // Arco Design 官方填充色 fill-1 到 fill-4 // Arco Design official fill colors: bg-fill-1, bg-fill-2, bg-fill-3, bg-fill-4 [/^bg-fill-([1-4])$/, ([, d]: RegExpExecArray) => ({ 'background-color': `var(--color-fill-${d})` })], // Arco Design 官方边框色 border-1 到 border-4 (使用 border-arco-* 避免和项目自定义冲突) // Arco Design official border colors: border-arco-1, border-arco-2, border-arco-3, border-arco-4 [/^border-arco-([1-4])$/, ([, d]: RegExpExecArray) => ({ 'border-color': `var(--color-border-${d})` })], // Arco Design 官方浅色系 primary/success/warning/danger/link-light-1 到 -light-4 // Arco Design light variants: bg-primary-light-1, bg-success-light-1, etc. [ /^bg-(primary|success|warning|danger|link)-light-([1-4])$/, ([, color, d]: RegExpExecArray) => ({ 'background-color': `var(--color-${color}-light-${d})` }), ], // Arco Design 官方色阶 primary/success/warning/danger 1-9 // Arco Design color levels: bg-primary-1, text-primary-1, border-primary-1, etc. [ /^(bg|text|border)-(primary|success|warning|danger)-([1-9])$/, ([, prefix, color, d]: RegExpExecArray) => { const prop = prefix === 'bg' ? 'background-color' : prefix === 'text' ? 'color' : 'border-color'; return { [prop]: `rgb(var(--${color}-${d}))` }; }, ], // Arco Design 官方白色和黑色 // Arco Design white and black: bg-color-white, text-color-white, bg-color-black, text-color-black ['bg-color-white', { 'background-color': 'var(--color-white)' }], ['text-color-white', { color: 'var(--color-white)' }], ['bg-color-black', { 'background-color': 'var(--color-black)' }], ['text-color-black', { color: 'var(--color-black)' }], // Arco Design 对话框/弹出层专用背景色 // Arco Design popup/dialog background color: bg-popup ['bg-popup', { 'background-color': 'var(--color-bg-popup)' }], // 项目自定义颜色 / Project custom colors ['bg-dialog-fill-0', { 'background-color': 'var(--dialog-fill-0)' }], ['text-0', { color: 'var(--text-0)' }], ['text-white', { color: 'var(--text-white)' }], ['bg-fill-0', { 'background-color': 'var(--fill-0)' }], ['bg-fill-white-to-black', { 'background-color': 'var(--fill-white-to-black)' }], ['border-special', { 'border-color': 'var(--border-special)' }], // Wiggle animation for attention indicators (e.g. pending permission badge) // Shakes briefly then pauses — 3s cycle, active in first ~20% ['animate-wiggle', { animation: 'wiggle 3s ease-in-out infinite' }], ], // Preflights - Global base styles 全局基础样式 preflights: [ { getCSS: () => ` * { /* Set default text color to follow theme 所有元素默认使用主题文字颜色 */ color: inherit; } /* * 边框基线(对齐 Tailwind Preflight):所有元素默认 border-width:0 + border-style:solid * + border-color:transparent。 * * 两个问题一起治: * 1) 幽灵框:UnoCSS 的 \`border-solid\` 把四边都设 solid,而单边工具类(border-l/border-b…) * 只设自己那条边的宽度,其余三边回退到 CSS 初始 medium(≈1.5px) 并因 solid 显形,画出整框。 * 宽度基线归零后,单边类只画它自己那条线。 * 2) 黑边:很多元素只写了 \`border\`/\`border-b\` 却没写颜色类(或写了无效的颜色类),其 * border-color 回退到 CSS 初始值 \`currentColor\`(=文字色=深)。以前 border-style 初始为 * none 不显形;一旦全局设 solid 就全变黑线。把颜色基线设为 transparent:没显式指定颜色的 * 边框保持不可见(与改动前一致),显式 border-base 等仍正常显示。 */ *, ::before, ::after { border-width: 0; border-style: solid; border-color: transparent; } @keyframes wiggle { 0%, 20%, 100% { transform: rotate(0deg); } 4% { transform: rotate(8deg); } 8% { transform: rotate(-8deg); } 12% { transform: rotate(6deg); } 16% { transform: rotate(-4deg); } } `, }, ], // 基础配置 shortcuts: { 'flex-center': 'flex items-center justify-center', }, theme: { colors: { // 合并所有颜色配置 Merge all color configurations ...textColors, ...semanticColors, ...backgroundColors, ...borderColors, ...brandColors, ...aouColors, ...componentColors, ...specialColors, }, fontFamily: { // Unified monospace stack for all code views (source, code blocks, editors) // 所有代码视图(原文、代码块、编辑器)统一的等宽字体栈 mono: 'ui-monospace, "SF Mono", SFMono-Regular, Menlo, "Cascadia Code", "Roboto Mono", Consolas, "Liberation Mono", monospace', }, }, });