Icon
全站图标唯一入口。名字统一用 Iconify 的 集合:名字(如 ph:list),去 icones.js.org 挑图标复制即用,全站优先 ph(Phosphor)集。
尺寸与颜色不由组件定:默认 1em 跟随字号,用 size-* / text-* 控制。
尺寸
尺寸跟随
ph:heart
ph:star
ph:bell
ph:magnifying-glass
L0 内联写法:
离线与 SSR
两条渲染路径:
- 随包子集(库内组件用到的图标,清单在
packages/ui/core/scripts/gen-icons.mts)直接内联 SVG 路径,SSR 直出、首屏不闪、零网络。 - 子集之外的名字回落 Iconify 运行时,会在客户端去公网拉。宿主要用的固定图标在构建期登记成离线:Nuxt 宿主写进
nuxt.config的xwinkUi.icons(本站就是这样,清单见apps/ui-docs/nuxt.config.ts),模块从宿主装的@iconify-json/*抽出子集、两端addCollection,数据在 registry 里时XIcon自动打开 SSR 直出。
ts
// nuxt.config.ts —— 宿主另装 @iconify-json/ph(devDependency 即可)
export default defineNuxtConfig({
modules: ['@xwink/ui/nuxt'],
xwinkUi: { icons: ['ph:lightning', 'ph:palette'] },
})
非 Nuxt 宿主在构建脚本里用 @xwink/ui/icons 的 loadIconCollections(names, [宿主根目录]) 抽出子集写成文件,入口里 addCollection(从 @xwink/ui 导入)。运营配置的动态图标这类构建期不知道名字的,才留给运行时。
API
Props
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name 必填 | string | — | Iconify 的 `集合:名字` |
size | number | "mini" | "small" | "medium" | "large" | "super" | undefined | — | 边长:尺寸档(取该档控件的图标边长 `--ui-size-<档>-icon-size`,与同档按钮里的图标一样大)或像素数。 缺省不定——默认 1em 跟字号,放进控件跟控件档;宿主写的 `size-*` 类照样优先 |