本次发布包含 16 个组件的交互精修。版本 0.10.0,签名与产物就绪。
构建验证、类型检查、浏览器回归与视觉基线均已通过。
有 tag 可直接回滚;迁移脚本可逆。
<div data-icen-tabs data-icen-tabs-hash="replace"> <nav class="icen-tabs" data-icen-tabs-ink role="tablist" aria-label="发布流程"> <button class="icen-page-tab is-active" type="button" data-icen-tab="overview">概览</button> <button class="icen-page-tab" type="button" data-icen-tab="checks">检查单</button> <button class="icen-page-tab" type="button" data-icen-tab="rollback">回滚</button> </nav> <section data-icen-tab-panel="overview" role="tabpanel"> <p>本次发布包含 16 个组件的交互精修。版本 0.10.0,签名与产物就绪。</p> </section> <section data-icen-tab-panel="checks" role="tabpanel" hidden> <p>构建验证、类型检查、浏览器回归与视觉基线均已通过。</p> </section> <section data-icen-tab-panel="rollback" role="tabpanel" hidden> <p>有 tag 可直接回滚;迁移脚本可逆。</p> </section></div>
特性
- 键盘:←/→/↑↓ 移动焦点,Home/End 跳首尾;roving tabindex 只留一个 tab 进 Tab 序
- 激活模式:缺省 manual 只移焦点;
data-icen-tabs-activation="auto"移动即激活 - 墨水条:tablist 挂
data-icen-tabs-ink,宽度与位移走过渡(reduced-motion 直落) - 地址同步:容器挂
data-icen-tabs-hash="push|replace",刷新后位置不丢 - 事件:切换派发
icen:tab-change(detail 含tab/panel/index)
接口
- 初始化
initTabs()(kit 一行入口可直接命名导入)- 导出
-
initTabs - 事件
-
icen:tab-changedetail 契约见IcenEventMap - 类型
dist/behaviors/tabs.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 { initTabs } from '@icen.ai/ui/kit/tabs';initTabs();
也可以用脚手架直接打印引入行:
bunx --bun @icen.ai/ui add tabs
Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/tabs.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。
用法
import { initTabs } from '@icen.ai/ui/kit/tabs';initTabs(); // 点击 + 方向键/Home/End;派发 icen:tab-change { tab, panel, index }<!-- 墨水条:tablist 挂 data-icen-tabs-ink;地址同步:容器挂 data-icen-tabs-hash="replace" --><!-- data-icen-tabs-activation="auto" 方向键移动即激活(缺省 manual 只移焦点) -->