/**
* 统一 SVG 图标库 — 替代所有 Emoji,保持视觉一致性
* 基于 Lucide/Feather 风格,使用 currentColor 继承颜色
*/
const PATHS = {
// 状态图标
'check-circle': '',
'x-circle': '',
'alert-triangle': '',
'info': '',
'circle': '',
// 简单指示符
'check': '',
'x': '',
// 操作图标
'search': '',
'gift': '',
'zap': '',
'target': '',
'bar-chart': '',
'home': '',
'paperclip': '',
'copy': '',
'clipboard': '',
'file': '',
'file-text': '',
'file-plain': '',
'package': '',
'box': '',
'trash': '',
'terminal': '',
'edit': '',
'folder': '',
'monitor': '',
'plug': '',
'wrench': '',
'bug': '',
'fire': '',
'key': '',
'lock': '',
'clock': '',
'send': '',
'download': '',
'upload': '',
'inbox': '',
'radio': '',
'lightbulb': '',
'globe': '',
'shield': '',
'hash': '',
'phone': '',
'users': '',
'list': '',
// 军事主题图标
'swords': '',
'castle': '',
'tent': '',
'scroll': '',
'play': '',
'pause': '',
'alert-circle': '',
'message-circle': '',
'message-square': '',
'stop': '',
'refresh-cw': '',
'rocket': '',
'eye': '',
'pen-tool': '',
'gear': '',
'plus-circle': '',
'crown': '',
'hammer': '',
'send': '',
}
/**
* 生成内联 SVG 图标
* @param {string} name 图标名称
* @param {number} [size=16] 图标尺寸(px)
* @param {string} [className] 可选 CSS 类名
* @returns {string} SVG HTML 字符串
*/
export function icon(name, size = 16, className) {
const paths = PATHS[name]
if (!paths) return ''
const cls = className ? ` class="${className}"` : ''
return ``
}
/**
* 状态图标(带颜色)
* @param {'ok'|'err'|'warn'|'info'} type 状态类型
* @param {number} [size=16] 图标尺寸
* @returns {string} 带颜色的 SVG 字符串
*/
export function statusIcon(type, size = 16) {
const map = {
ok: { name: 'check-circle', color: 'var(--success)' },
err: { name: 'x-circle', color: 'var(--danger, var(--error))' },
warn: { name: 'alert-triangle', color: 'var(--warning)' },
info: { name: 'info', color: 'var(--info, var(--primary))' },
}
const cfg = map[type]
if (!cfg) return ''
const paths = PATHS[cfg.name]
return ``
}
/**
* 用于日志前缀的图标(纯文本环境也能回退)
* @param {string} name 图标名称
* @returns {string} 小尺寸 SVG 字符串
*/
export function logIcon(name, size = 14) {
return icon(name, size)
}