--- name: fms-vue-tabs overview: 在 fms-vue 组件库中新增 Tabs 标签页组件:line 线型 + top/left/right 三种标签方向,同时支持 items 数组与 TabPane 插槽双数据源,含键盘方向键导航、懒渲染缓存、禁用态与完整 ARIA,并在演示站 App.vue 中新增展示。 design: architecture: framework: vue styleKeywords: - 克制简洁 - 清晰分层 - 主色指示条 fontSystem: fontFamily: PingFang SC heading: size: 14px weight: 600 subheading: size: 14px weight: 500 body: size: 14px weight: 400 colorSystem: primary: - "#0f172b" background: - "#ffffff" - "#f5f6f8" text: - "#1f2329" - "#86909c" - "#c9cdd4" functional: - "#e5e6eb" todos: - id: create-tab-pane-and-normalize content: 参考 [skill:antdv-next] 核对 API 语义,创建 tab-pane.vue 并实现 tabs.vue 双数据源归一与激活管理 status: completed - id: implement-tabs-interaction content: 在 tabs.vue 完成模板:tablist/方向键导航/懒渲染缓存/ARIA 关联 status: completed dependencies: - create-tab-pane-and-normalize - id: write-tabs-styles content: 用 [skill:ui-ux-pro-max] 校验后编写 index.scss:top/left/right 布局、指示条与各状态样式 status: completed dependencies: - create-tab-pane-and-normalize - id: add-demo-and-check content: App.vue 新增 Tabs 导航项与演示 section,做静态检查并汇报 status: completed dependencies: - implement-tabs-interaction - write-tabs-styles --- ## 产品概述 为 fms-vue 自研 UI 组件库新增 Tabs 标签页组件,遵循 `fms-vue/开发规范.md` 约束并借鉴 `参考组件库/antdv-next` 的 Tabs 设计语义。包含 Tabs(根)与 TabPane(子声明)两个组件,用于在同一区域内分组展示内容、切换视图。 ## 核心功能 - **双数据源**:支持 `items` 数组(`[{ key, label, disabled?, content? }]`)与 TabPane 插槽两种声明方式,与 Select 的 options/插槽模式一致,二选一使用。 - **line 线型指示**:激活标签底部(top)或侧边(left/right)显示主色指示条,标签栏有浅色分隔线。 - **侧边/垂直方向**:`placement` 支持 `top`(默认,横排在上)、`left`、`right`(纵向排列在左/右,内容区自适应剩余宽度)。 - **禁用态**:支持单个 TabPane 禁用与 Tabs 整组禁用,反映到原生属性与视觉(降透明 + not-allowed)。 - **键盘与无障碍**:tablist/tab/tabpanel 语义,方向键循环切换激活(top 用左右键,left/right 用上下键),roving tabindex、aria-selected/aria-controls/aria-labelledby,`:focus-visible` 焦点样式。 - **懒渲染 + 缓存**:非激活面板不渲染,首次激活后缓存(切换不销毁),符合性能优先规范。 - **自定义标签**:`#label` 插槽支持自定义标题内容(TabPane 与 items 两种模式均可用)。 ## 技术栈 - Vue 3.5 `