Icon 使用手册
v2.3.4 · @snowui-design-system/components
许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。
组件介绍
展示 SVG 图标,并统一尺寸与颜色,适合按钮、导航和内容中的视觉标识。
使用选择
用于统一图标宿主与尺寸。优先复用 SnowUI 资源图标;有操作行为时放入 Button 并提供可访问名称,不把装饰图形误作功能图标。
优先提供资源图标;src 与解析后的 icon 均未命中时才渲染 children。
size 可继承父级尺寸;角标使用 Badge as="badge"。交互名称应提供给拥有操作的按钮。
Accordion 内的
Icon as="leading"在未显式指定size时继承 Accordion 图标尺寸:sm/md/lg 分别为 16/20/24;未声明 leading 的 Icon 不参与这项继承,显式size优先。
快速开始
以下示例展示推荐的基本组合。更多场景与组合限制见后文。
API
未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。
使用边界与详细说明
布局模型
主布局模型:内禀原子布局。
Icon 的根节点是由
size、backgroundpadding 与图标资源共同决定的内禀盒,作为其他布局子项时表现为 Hug。as="leading" / "trailing" / "icon" / "badge" / "prev" / "next" / "close"只声明 Icon 在外部宿主中的角色;进入 Image / ImageViewer 宿主时会由宿主上下文翻译为对应pin-*方位。背景、空占位、badge overlay 与图片资源渲染都是 Icon 私有结构,不对外承诺通用槽位。
外部需要图标加文字排列时,应由 Button、MenuItem、Frame 等宿主组件负责 gap / padding / alignment。
stateIcon 解析规则
Icon读取最近父级 Frame Context 的currentState。当前状态命中
stateIcon[currentState]时使用该图标。未命中当前状态时回退
stateIcon.Idle。仍未解析出图标时回退现有
icon/src/ children 渲染规则。状态值为
null时隐藏 Icon,用于Idle无图标、Pending显示 Spinner 这类稳定结构状态流。stateIcon只影响 Icon 自身展示,不修改父 Frame 状态。
Load是 Frame loading / skeleton 协议状态名。若只是按钮任务处理中并需要展示真实 Spinner,优先使用Pending。
使用示例
子组件上下文 (Context)
Icon 为子组件 (如 Badge 或 另一个 Icon) 提供自适应定位上下文:
badgeStyle: 基于em的绝对定位样式,确保图标外缘角落对齐。badgeSize: 默认点状态尺寸 (0.25em)。
- size/weight: Icon 容器默认透传;子图标显式传入时覆盖(不推荐)。
Icon 样式覆盖
先阅读 完整 LICENSE;同任务、同版本、同范围去重。
优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。
Icon 类型与状态
必填属性:无具名必填属性。
可双向绑定:本组件未声明具名双向绑定属性;状态更新通过公开回调或所属宿主处理。
继承声明:FrameProps。继承能力以基类公开文档为准;Omit 中的字段已排除,不能按基类原样使用。
以下为公开属性实际引用的类型声明,来自源码;Svelte Snippet 表示内容片段,ComponentProps 表示对应组件的 Props。
StateValueMap
来源:components/src/logic/frame-types.ts
CoreState
来源:components/src/logic/frame-types.ts
IconSize
来源:components/src/components/Icon.svelte