Skip to content

图标

NetNexus UI 提供 43 个基于 @lucide/vue 的适配图标。公开名称使用 *Outlined 形式,推荐从 netnexus-ui/icons 具名导入。

基础用法

vue
<script setup>
    import { DeleteOutlined, LoadingOutlined, SaveOutlined } from 'netnexus-ui/icons';
    import 'netnexus-ui/icons.css';
</script>

<template>
    <SaveOutlined />
    <DeleteOutlined :size="20" :stroke-width="1.5" class="danger-icon" />
    <LoadingOutlined spin aria-label="正在加载" role="img" />
</template>

<style scoped>
    .danger-icon {
        color: #ff4d4f;
    }
</style>

若应用已经引入 netnexus-ui/style.css,不需要再引入 icons.css

在按钮中使用

图标组件不会随 app.use(NetNexusUi) 自动全局注册,需要在使用它的单文件组件中显式导入。

vue
<script setup>
    import { NnButton } from 'netnexus-ui/components';
    import { SaveOutlined } from 'netnexus-ui/icons';
    import 'netnexus-ui/style.css';
</script>

<template>
    <NnButton type="primary">
        <template #icon>
            <SaveOutlined />
        </template>
        保存
    </NnButton>
</template>

属性与透传

适配层会处理以下属性,其余 attribute 和事件会继续传给底层 Lucide 组件:

属性默认值说明
size1em图标尺寸,可传数字或 CSS 尺寸字符串
strokeWidth2SVG 描边宽度;模板中可写 stroke-width
spin未启用真值会添加 .nn-icon-spin,使用 1 秒线性无限旋转动画
class与内置 .nn-icon、可选 .nn-icon-spin 合并
aria-label存在时不会自动写 aria-hidden="true"

图标颜色使用 currentColor,通常只需设置父元素或图标本身的 color

vue
<script setup>
    import { InfoCircleOutlined } from 'netnexus-ui/icons';

    function openHelp() {
        console.log('打开帮助');
    }
</script>

<template>
    <InfoCircleOutlined size="1.25rem" color="currentColor" aria-label="帮助信息" role="img" @click="openHelp" />
</template>

无障碍

  • 没有 aria-label 时,适配层自动设置 aria-hidden="true",适合按钮文字旁的装饰图标。
  • 图标本身承载含义时,应同时提供可理解的 aria-label,并建议增加 role="img"
  • 只有图标的按钮仍应把可访问名称放在按钮上,例如 <NnButton aria-label="保存">。注意:组件是否透传该属性应以对应组件参考和实现为准。
  • spin 没有内置的 prefers-reduced-motion 处理。应用可以按自身无障碍策略覆盖动画:
css
@media (prefers-reduced-motion: reduce) {
    .nn-icon-spin {
        animation: none;
    }
}

完整图标清单

“底层 Lucide 图标”用于说明当前映射,不是额外的 NetNexus UI 导出。

NetNexus UI 导出底层 Lucide 图标
ApiOutlinedNetwork
AppstoreOutlinedLayoutGrid,运行时保留 AppWindow 回退
BellOutlinedBell
CheckCircleOutlinedCheckCircle
ClockCircleOutlinedClock
CloudDownloadOutlinedCloudDownload
CloudServerOutlinedServer
CloudUploadOutlinedUploadCloud
ClusterOutlinedChartNetwork
CodeOutlinedCode
CopyOutlinedCopy
DatabaseOutlinedDatabase
DeleteOutlinedTrash2
DownloadOutlinedDownload
EditOutlinedEdit
ExclamationCircleOutlinedCircleAlert
EyeOutlinedEye
ExternalLinkOutlinedExternalLink
FileSearchOutlinedFileSearch
FileTextOutlinedFileText
FolderOpenOutlinedFolderOpen
FolderOutlinedFolder
ImportOutlinedImport
InfoCircleOutlinedInfo
KeyOutlinedKeyRound
LoadingOutlinedLoaderCircle
MenuFoldOutlinedPanelLeftClose
MenuUnfoldOutlinedPanelLeftOpen
PlusOutlinedPlus
ProfileOutlinedFileText
ReloadOutlinedRefreshCw
RouteOutlinedRoute
SafetyOutlinedShield
SaveOutlinedSave
SearchOutlinedSearch
SendOutlinedSend
SettingOutlinedSettings
StepForwardOutlinedStepForward
SwapOutlinedRepeat
ToolOutlinedWrench
UnorderedListOutlinedList
UploadOutlinedUpload
WifiOutlinedWifi

也可以从根入口导入同名图标:

js
import { SearchOutlined } from 'netnexus-ui';

使用 netnexus-ui/icons 可以更清楚地表达依赖范围。当前包只公开上表中的适配图标,不会转发 @lucide/vue 的完整导出。

已知边界

  • 图标类型声明当前是通用 Vue Component,不会为 sizestrokeWidthspin 等属性提供精确自动补全。
  • ProfileOutlinedFileTextOutlined 当前都映射到 FileText,不是两种不同图形。
  • 图标不是插件注册表中的组件,必须局部导入或由应用自行注册。
  • icons.css 只包含基础布局和旋转动画;颜色、间距、交互状态由使用场景决定。

相关源码

Released under the MIT License.