import { defineConfig, UserConfig, presetTypography, presetIcons, transformerDirectives } from 'unocss'; import { FileSystemIconLoader } from '@iconify/utils/lib/loader/node-loaders'; import { presetWind3 } from '@unocss/preset-wind3'; export default defineConfig({ inspector: false, content: { pipeline: { include: ['**/*.vue', '**/*.tsx', '**/*.ts', '**/*-lib/**/*.mjs'], exclude: ['.git', '.idea', '.turbo', 'node_modules', 'public'], }, }, /** * 图标白名单。 * * Icon 组件是在运行时拼出 `i-:` 类名的,而 UnoCSS 只对 * `content.pipeline.include` 命中的文件做静态扫描 —— `src/core/store/modules/menu.json` * 不在扫描范围内,因此菜单里配置的图标不会被生成。 * 这里把「菜单配置 + 运行时拼接」两类图标显式列入白名单,保证图标一定渲染。 */ safelist: [ // 菜单图标(写在 menu.json 中,无法被静态扫描到) 'i-simple-line-icons:bubble', 'i-mdi:chart-box-outline', 'i-mdi:brain', 'i-mdi:history', // AI 模块组件内通过 Icon 组件动态拼接的图标 'i-mdi:refresh', 'i-mdi:plus', 'i-mdi:send', 'i-mdi:stop', 'i-mdi:magnify', 'i-mdi:pin', 'i-mdi:pin-outline', 'i-mdi:pencil-outline', 'i-mdi:trash-can-outline', 'i-mdi:fullscreen', 'i-mdi:fullscreen-exit', // 图谱详情面板的通话 / 交易明细入口 'i-mdi:phone-outline', 'i-mdi:bank-transfer', // 登录页页脚的联系方式(phone-outline 上面已有) 'i-mdi:email-outline', // 对话消息排版改造后新增:消息操作条、AI 头像、输入区、回到底部 'i-mdi:sparkles', 'i-mdi:content-copy', 'i-mdi:check', 'i-mdi:tray-arrow-down', 'i-mdi:star', 'i-mdi:star-outline', 'i-mdi:alert-circle-outline', 'i-mdi:chip', 'i-mdi:arrow-up', 'i-mdi:arrow-down', // 执行过程时间线(ProcessTimeline):折叠箭头、工具图标 'i-mdi:chevron-right', 'i-mdi:chevron-down', 'i-mdi:chevron-up', 'i-mdi:database-search-outline', 'i-mdi:format-list-bulleted', 'i-mdi:table-search', 'i-mdi:language-python', 'i-mdi:graph-outline', 'i-mdi:folder-search-outline', 'i-mdi:tools', // 对象关系分析 · AI 研判(抽屉 / 线索卡 / 报告) 'i-mdi:auto-fix', 'i-mdi:alert-decagram-outline', 'i-mdi:lightbulb-on-outline', 'i-mdi:arrow-right', 'i-mdi:clock-outline', 'i-mdi:map-marker-path', 'i-mdi:phone-in-talk-outline', 'i-mdi:close', 'i-mdi:account-outline', 'i-mdi:account-search-outline', 'i-mdi:account-multiple-outline', 'i-mdi:swap-horizontal', // AI 插件页(Skill / MCP / Codex 运行时);puzzle-outline 同时是 menu.json 里的菜单图标 'i-mdi:puzzle-outline', 'i-mdi:server-network', 'i-mdi:cog-outline', 'i-mdi:power', 'i-mdi:play', 'i-mdi:upload', 'i-mdi:folder-open-outline', 'i-mdi:eye-outline', 'i-mdi:check-circle-outline', // Codex 模块(Icon 运行时加 i- 前缀,动态拼接的图标必须在此白名单) 'i-mdi:star-four-points-outline', 'i-mdi:view-dashboard-outline', // 产物栏与消息内产物卡片(面板头/触发条/空态/预览下载/定位) 'i-mdi:file-delimited-outline', 'i-mdi:file-table-outline', 'i-mdi:chevron-double-right', 'i-mdi:arrow-top-left-bold-outline', // Codex 模块(Icon 组件运行时加 i- 前缀,动态图标必须在此白名单) 'i-mdi:bookmark-multiple-outline', 'i-mdi:briefcase-outline', 'i-mdi:bug-outline', 'i-mdi:clipboard-text-outline', 'i-mdi:code-braces', 'i-mdi:code-json', 'i-mdi:console-line', 'i-mdi:download-outline', 'i-mdi:file-document-edit-outline', 'i-mdi:file-document-outline', 'i-mdi:file-outline', 'i-mdi:file-pdf-box', 'i-mdi:folder-outline', 'i-mdi:head-snowflake-outline', 'i-mdi:image-outline', 'i-mdi:information-outline', 'i-mdi:language-html5', 'i-mdi:language-markdown-outline', 'i-mdi:laptop-off', 'i-mdi:loading', 'i-mdi:message-outline', 'i-mdi:message-text', 'i-mdi:progress-clock', 'i-mdi:restart', 'i-mdi:robot-outline', 'i-mdi:shield-check-outline', 'i-mdi:shield-lock-outline', 'i-mdi:stop-circle-outline', 'i-mdi:table-arrow-right', 'i-mdi:table-large', // Codex 工作台新增页面/组件用到的图标 'i-mdi:dots-horizontal', ], presets: [ presetWind3(), presetTypography(), presetIcons({ extraProperties: { display: 'inline-block', 'vertical-align': 'middle', }, collections: { svg: FileSystemIconLoader(__dirname + '/src/assets/icons'), }, }), ], transformers: [transformerDirectives()], } as UserConfig);