<div class="demo-row"> <button class="icen-switch" type="button" role="switch" aria-checked="true" aria-label="标准开关(开)"><span class="icen-switch-thumb"></span></button> <button class="icen-switch" type="button" role="switch" aria-checked="false" aria-label="标准开关(关)"><span class="icen-switch-thumb"></span></button> <button class="icen-switch icen-switch--sm" type="button" role="switch" aria-checked="true" aria-label="小号开关"><span class="icen-switch-thumb"></span></button></div><div class="demo-row" style="margin-top:16px"> <button class="icen-checkbox icen-focus-ring" type="button" role="checkbox" aria-checked="false" aria-label="未选中"></button> <button class="icen-checkbox icen-focus-ring" type="button" role="checkbox" aria-checked="true" aria-label="已选中"></button> <button class="icen-checkbox icen-focus-ring" type="button" role="checkbox" aria-checked="mixed" aria-label="半选"></button></div><div class="demo-col" style="margin-top:16px"> <div class="icen-radio-group" role="radiogroup" aria-label="套餐"> <button class="icen-radio-item icen-motion is-selected" type="button" role="radio" aria-checked="true"><span class="icen-radio-dot"></span>基础版</button> <button class="icen-radio-item icen-motion" type="button" role="radio" aria-checked="false"><span class="icen-radio-dot"></span>专业版</button> <button class="icen-radio-item icen-motion" type="button" role="radio" aria-checked="false"><span class="icen-radio-dot"></span>旗舰版</button> </div></div>
特性
- 开关:
icen-switch(role="switch")+icen-switch--sm小号 - 勾选框:
icen-checkbox三态——未选 / 已选 / 半选(aria-checked="mixed") - 单选:
icen-radio-group+icen-radio-item行组排他,is-selected标记选中 - 驱动:状态由使用方切换
aria-checked,CSS 负责全部视觉;点击与键盘由initSwitch接管
没有私有状态机——你的框架数据是唯一事实源,组件只管呈现。
接口
- 初始化
initSwitch()(kit 一行入口可直接命名导入)- 导出
-
initSwitch共享行为模块,清单含族内导出 - 事件
-
icen:check-changeicen:page-changeicen:rating-changeicen:segmented-changeicen:sort-changeicen:step-changeicen:stepper-changeicen:switch-changedetail 契约见IcenEventMap;共享行为模块,清单含族内事件 - 类型
dist/behaviors/controls.d.mts(随 npm 包发布,含全部 JSDoc 约束)
安装
bun add @icen.ai/ui pnpm add @icen.ai/ui npm install @icen.ai/ui yarn add @icen.ai/ui 一行引入该组件(CSS 与 behavior 自动带上,无需关心内部 CSS 文件名):
import '@icen.ai/ui/kit/switch';import { initSwitch } from '@icen.ai/ui';initSwitch();
也可以用脚手架直接打印引入行:
bunx --bun @icen.ai/ui add switch
Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/switch.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。
用法
<button class="icen-switch" type="button" role="switch" aria-checked="false"> <span class="icen-switch-thumb"></span></button><!-- 状态由使用方驱动:点击切换 aria-checked,CSS 负责全部视觉 -->