118 lines
4.2 KiB
TypeScript

// 线性图标集:统一 stroke 风格(见设计规范「图标」一节),禁止引入图标库依赖。
// 使用方式:<AppIcon name="home" :size="20" />
export type IconName =
| 'home'
| 'dashboard'
| 'pen'
| 'chart'
| 'calendar'
| 'news'
| 'user'
| 'book'
| 'settings'
| 'inbox'
| 'alert'
| 'check'
| 'chevron-right'
| 'chevron-left'
| 'close'
| 'clock'
| 'flame'
| 'target'
interface IconNode {
tag: 'path' | 'circle' | 'rect' | 'line' | 'polyline'
attrs: Record<string, string | number>
}
export const icons: Record<IconName, IconNode[]> = {
home: [
{ tag: 'path', attrs: { d: 'M3 10.5 12 3l9 7.5' } },
{ tag: 'path', attrs: { d: 'M5 9.5V21h14V9.5' } },
{ tag: 'path', attrs: { d: 'M10 21v-6h4v6' } }
],
dashboard: [
{ tag: 'rect', attrs: { x: 3, y: 3, width: 7, height: 7, rx: 2 } },
{ tag: 'rect', attrs: { x: 14, y: 3, width: 7, height: 7, rx: 2 } },
{ tag: 'rect', attrs: { x: 3, y: 14, width: 7, height: 7, rx: 2 } },
{ tag: 'rect', attrs: { x: 14, y: 14, width: 7, height: 7, rx: 2 } }
],
pen: [
{ tag: 'path', attrs: { d: 'M12 20h9' } },
{ tag: 'path', attrs: { d: 'M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z' } }
],
chart: [
{ tag: 'path', attrs: { d: 'M3 3v18h18' } },
{ tag: 'path', attrs: { d: 'M18 17V9' } },
{ tag: 'path', attrs: { d: 'M13 17V5' } },
{ tag: 'path', attrs: { d: 'M8 17v-3' } }
],
calendar: [
{ tag: 'rect', attrs: { x: 3, y: 4, width: 18, height: 18, rx: 2 } },
{ tag: 'line', attrs: { x1: 16, y1: 2, x2: 16, y2: 6 } },
{ tag: 'line', attrs: { x1: 8, y1: 2, x2: 8, y2: 6 } },
{ tag: 'line', attrs: { x1: 3, y1: 10, x2: 21, y2: 10 } }
],
news: [
{ tag: 'rect', attrs: { x: 3, y: 5, width: 18, height: 15, rx: 2 } },
{ tag: 'line', attrs: { x1: 3, y1: 10, x2: 21, y2: 10 } },
{ tag: 'line', attrs: { x1: 7, y1: 7, x2: 11, y2: 7 } },
{ tag: 'line', attrs: { x1: 7, y1: 14, x2: 15, y2: 14 } },
{ tag: 'line', attrs: { x1: 7, y1: 17, x2: 11, y2: 17 } }
],
user: [
{ tag: 'circle', attrs: { cx: 12, cy: 8, r: 4 } },
{ tag: 'path', attrs: { d: 'M4 21a8 8 0 0 1 16 0' } }
],
book: [
{ tag: 'path', attrs: { d: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20' } },
{ tag: 'path', attrs: { d: 'M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z' } }
],
settings: [
{ tag: 'line', attrs: { x1: 21, y1: 4, x2: 14, y2: 4 } },
{ tag: 'line', attrs: { x1: 10, y1: 4, x2: 3, y2: 4 } },
{ tag: 'line', attrs: { x1: 21, y1: 12, x2: 12, y2: 12 } },
{ tag: 'line', attrs: { x1: 8, y1: 12, x2: 3, y2: 12 } },
{ tag: 'line', attrs: { x1: 21, y1: 20, x2: 16, y2: 20 } },
{ tag: 'line', attrs: { x1: 12, y1: 20, x2: 3, y2: 20 } },
{ tag: 'line', attrs: { x1: 14, y1: 2, x2: 14, y2: 6 } },
{ tag: 'line', attrs: { x1: 8, y1: 10, x2: 8, y2: 14 } },
{ tag: 'line', attrs: { x1: 16, y1: 18, x2: 16, y2: 22 } }
],
inbox: [
{ tag: 'path', attrs: { d: 'M22 12h-6l-2 3h-4l-2-3H2' } },
{
tag: 'path',
attrs: {
d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z'
}
}
],
alert: [
{ tag: 'circle', attrs: { cx: 12, cy: 12, r: 10 } },
{ tag: 'line', attrs: { x1: 12, y1: 8, x2: 12, y2: 12 } },
{ tag: 'line', attrs: { x1: 12, y1: 16, x2: 12.01, y2: 16 } }
],
check: [{ tag: 'path', attrs: { d: 'M20 6 9 17l-5-5' } }],
'chevron-right': [{ tag: 'path', attrs: { d: 'M9 18l6-6-6-6' } }],
'chevron-left': [{ tag: 'path', attrs: { d: 'M15 18l-6-6 6-6' } }],
close: [{ tag: 'path', attrs: { d: 'M18 6 6 18' } }, { tag: 'path', attrs: { d: 'M6 6l12 12' } }],
clock: [
{ tag: 'circle', attrs: { cx: 12, cy: 12, r: 10 } },
{ tag: 'path', attrs: { d: 'M12 6v6l4 2' } }
],
flame: [
{
tag: 'path',
attrs: {
d: 'M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.07-2.14-.22-4.05 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.15.43-2.29 1-3a2.5 2.5 0 0 0 2.5 2.5z'
}
}
],
target: [
{ tag: 'circle', attrs: { cx: 12, cy: 12, r: 10 } },
{ tag: 'circle', attrs: { cx: 12, cy: 12, r: 6 } },
{ tag: 'circle', attrs: { cx: 12, cy: 12, r: 2 } }
]
}