@fiscozen/tooltip

中文文档
3.1.1发布于 2026/10/23ISCES Module近 30 天下载 2767

设计系统工具提示组件

中文使用文档
文档目录23 节
  1. 特征
  2. 安装
  3. 基本用途
  4. 简单文本工具提示
  5. 带槽的丰富内容
  6. 基于状态的工具提示
  7. API 参考
  8. 道具
  9. 槽数
  10. FzTrunced 标签
  11. 状态类型
  12. 样式和主题
  13. 状态颜色映射
  14. 无障碍特性
  15. WCAG 2.1 AA 遵守情况
  16. 交互式元素和自动检测
  17. 键盘交互
  18. 故事书中的设计回顾
  19. QQ 重要警告
  20. 故事书中的用法
  21. 何时使用
  22. 故事书故事
  23. 为什么不用于生产?

@fiscozen/ 工具提示

用于Vue 3应用程序的完全无障碍WCAG 2.1 AA兼容工具提示组件. 以企业级无障碍功能,键盘导航支持为主,并优化了屏幕阅读器.

特征

  • 自动检测 - 自动检测交互式组件(FzButton、FzLink),以防止双重制表站
  • 基于状态的样式 - 有语义色彩编码的视觉变体
  • 灵活内容 - 支持文本道具和丰富的槽内容
  • WCAG 2.1 AA 公司 - 充分提供无障碍支助,包括非洲建筑协会的作用和特性
  • 屏幕阅读器优化 - 适当的语义标记和屏幕阅读器公告
  • 键盘导航 - 完成重点管理的键盘存取
  • 坚持不懈 - WCAG 1.4.13 为改进UX而遵循的徘徊行为

安装

npm install @fiscozen/tooltip

基本用途

简单文本工具提示

<script setup>
import { FzTooltip } from '@fiscozen/tooltip'
import { FzButton } from '@fiscozen/button'
</script>

<template>
  <!-- Non-interactive element (wrapper gets tabindex="0") -->
  <FzTooltip text="User profile settings">
    Settings
  </FzTooltip>
  
  <!-- Interactive component - auto-detected (no wrapper tabindex) -->
  <FzTooltip text="Save your changes">
    <FzButton>Save</FzButton>
  </FzTooltip>
  
  <!-- Native HTML element (not auto-detected, wrapper gets tabindex="0") -->
  <FzTooltip text="Submit form">
    <span @click="someAction">Submit</span>
  </FzTooltip>
  
  <!-- Native HTML element with manual override (no wrapper tabindex) -->
  <FzTooltip text="Submit form" :interactive="true">
    <span @click="someAction">Submit</span>
  </FzTooltip>
</template>

带槽的丰富内容

<template>
  <FzTooltip aria-label="Account information">
    <img src="/avatar.jpg" alt="User avatar" class="avatar" />
    
    <template #text>
      <strong>John Doe</strong><br>
      <span>Premium Member</span><br>
      <small>Last active: 2 hours ago</small>
    </template>
  </FzTooltip>
</template>

基于状态的工具提示

<template>
  <div class="dashboard-actions">
    <!-- Error state -->
    <FzTooltip 
      status="error" 
      :with-icon="true"
      text="Action failed: Insufficient permissions"
      aria-label="Delete operation status"
    >
      <button disabled>Delete Item</button>
    </FzTooltip>
    
    <!-- Success state -->
    <FzTooltip 
      status="positive" 
      :with-icon="true"
      text="Backup completed successfully at 14:32"
    >
      <span class="status-badge success">Backup Complete</span>
    </FzTooltip>
    
    <!-- Alert/Warning state -->
    <FzTooltip 
      status="alert" 
      :with-icon="true"
      text="System maintenance scheduled for tonight"
      aria-label="Maintenance warning"
    >
      <strong class="warning-text">Maintenance Notice</strong>
    </FzTooltip>
    
    <!-- Informative state -->
    <FzTooltip 
      status="informative" 
      :with-icon="true"
      text="This feature is currently in beta testing"
    >
      <div class="feature-card">
        <span class="beta-label">BETA</span>
        <p>New Analytics Dashboard</p>
      </div>
    </FzTooltip>
  </div>
</template>

API 参考

道具

Prop类型默认说明
textstringundefined工具提示内容文本 。 替代使用 text 插槽
statusFzTooltipStatus'neutral'视觉状态 : 'neutral' | 'informative' | 'positive' | 'alert' | 'error'
positionFzFloatingPosition'auto'相对于触发元素的工具提示定位
withIconbooleanfalse在工具提示内容中显示适合状态的图标
ariaLabelstringundefined触发元素的可访问标签
interactiveboolean | 'auto''auto'控制键盘访问性 : undefined编号 :'auto' 用于自动检测(FzButton、FzLink), true 强制交互, false 强制非互动
truncatebooleanfalse在一行上显示内容,不合适时用椭圆剪接,仅在内容被剪接时打开工具提示. 扳机不设分站也不设 aria-describedby:全部内容已收录于DOM. 在灵活布局中,灵活祖先需要 min-w-0 要切除的内容
externalFocusbooleanfalse焦点是否位于一个元素上, 触发符代表但不包含, 例如控制标签名称 。 虽然 true,工具提示表现为触发器有焦点:打开(与 truncate,只在内容被剪去时,在指针离开时保持开放,并关闭 Escape。 。 。 . FzTruncatedLabel 帮你摆好
_forceOpenForDesignReviewbooleanfalse⚠️ 仅供设计审查 - 保持可见性. 不使用生产

槽数

槽说明
default触发元素内容( 需要)
text工具提示内容 - 支持丰富的 HTML 内容

FzTrunced 标签

在一行上保留着一个字段的标签,用于同时铺设形式组件. 标签被剪去后有椭圆形,当它比球场更宽,并在悬浮上用工具提示完整显示,而被标注的控件有焦点. 这个 <label> 保留全文,所以控制器保留它作为无障碍名称. 未剪接的标签永远不会拓宽字段 。 文本样式在组件上走:标签,椭圆和星号继承.

<FzTruncatedLabel
  class="text-base text-grey-500"
  label="Data di versamento dell’imposta sostitutiva"
  labelId="payment-date-label"
  controlId="payment-date"
  required
/>
<input id="payment-date" aria-labelledby="payment-date-label" required />
Prop类型默认说明
labelstring- 说吧标签的文字( 需要)
labelIdstring- 说吧id 会 议 日 程 和 议 程 <label> 元素,用于控件 aria-labelledby (必须)
controlIdstring- 说吧id 作为标签的标签 for (必须)
requiredbooleanfalse在切口外加一个可视星等。 隐藏辅助技术:按要求标出控制本身

状态类型

type FzTooltipStatus = 
  | 'neutral'     // Default dark background
  | 'informative' // Blue semantic info color
  | 'positive'    // Green semantic success color  
  | 'alert'       // Orange semantic warning color
  | 'error'       // Red semantic error color

样式和主题

状态颜色映射

状态使用大小写背景类图标
neutral概况,帮助文本!bg-core-black无
informative提示, 附加上下文bg-semantic-infocircle-info
positive成功状态、确认bg-semantic-successcircle-check
alert警告,需要注意bg-semantic-warningtriangle-exclamation
error错误, 验证失败bg-semantic-errorcircle-exclamation

无障碍特性

WCAG 2.1 AA 遵守情况

本部分执行全面的无障碍功能:

  • 键盘导航: 支持标签、 焦点和逃逸密钥
  • 屏幕阅读器支持: 适当阿里亚的作用和说明
  • 重点管理: 可用的焦点指标和逻辑分页顺序
  • 坚持不懈1.4.13 符合要求的徘徊行为
  • 高对比度: 符合 WCAG AA 对比比的颜色组合

交互式元素和自动检测

工具提示通过在运行时直接比较组件类型,自动检测交互式组件来防止双制表站.

自动检测组件 :

  • ✅ FzButton - 自动确认为互动
  • ✅ FzIconButton - 自动确认为互动
  • ✅ FzLink - 自动确认为互动

如何运作: 自动检测使用直接组件类型比较,这种比较是生产安全的,不管建筑配置或细化设置如何,都是可行的. 当你包裹一个 FzButton, (中文(简体) ), FzIconButton,或 FzLink 在工具提示中,包裹会自动省略 tabindex="0" 属性来防止双标签站.

正在扩展自动检测 : 为增加支持新的互动部分:

  1. 导入组件为 FzTooltip.vue
  2. 把它加进 INTERACTIVE_COMPONENTS 数组
  3. 把它添加为对等依赖性 package.json

示例

// In FzTooltip.vue
import { FzNewComponent } from '@fiscozen/newComponent'

const INTERACTIVE_COMPONENTS = [FzButton, FzLink, FzNewComponent] as const;

未自动检测( 需要时需要手动覆盖) :

  • QQ 本地 HTML 元素 : <button>, (中文(简体) ), <a>, (中文(简体) ), <input>, (中文(简体) ), <select>, (中文(简体) ), <textarea>
  • 自定义交互式元素 @click 处理者
  • QQ 其他自定义组件( 即使是交互式的)
<!-- Auto-detection (recommended) - no prop needed -->
<FzTooltip text="Save your changes">
  <FzButton>Save</FzButton>
</FzTooltip>

<!-- Span with @click - not auto-detected, creates double tab stop -->
<FzTooltip text="Submit form">
  <span @click="someAction">Submit</span>
</FzTooltip>

<!-- Manual override - prevents double tab stop -->
<FzTooltip text="Submit form" :interactive="true">
  <span @click="someAction">Submit</span>
</FzTooltip>

<!-- Force non-interactive (e.g., disabled button) -->
<FzTooltip text="Action disabled" :interactive="false">
  <FzButton disabled>Save</FzButton>
</FzTooltip>

这个 interactive 道具 :

  • undefined 或者说 'auto' (默认):自动检测 FzButton 和 FzLink
  • true: 强制交互行为(删除包装标签索引)
  • false: 强制非交互行为(添加包式标签索引="0")

为什么这很重要: 没有适当的交互处理, 工具提示包会添加 tabindex="0" 用于键盘访问,创建两个相接的制表站(Wrapper + 内元素)。 自动检测或明确 interactive={true} 删除包装器的分页索引,从而实现有单个分页站的干净键盘导航.

键盘交互

密钥行动
Tab焦点包装并显示工具提示
Shift + Tab聚焦上一个元素并隐藏工具提示
Escape在保持焦点的同时隐藏工具提示

说明:当被包裹的元素是交互式的(按钮/链接)时,其本土键盘行为(Enter/Space活化)继续正常工作.

说明页:1 externalFocus,焦点坐落在触发器外: Escape 在任何地方按下隐藏工具提示 externalFocus 实值 true。 。 。 .

故事书中的设计回顾

为了进行设计检查和审查,工具提示部分提供一种特殊功能 _forceOpenForDesignReview 保持工具提示可见度的道具,无论徘徊状态或焦点状态.

QQ 重要警告

这道道具只用于在"故事书"中进行设计审查,绝不应在生产代码中使用. 下划线前缀表示这是一个内部/只发展功能.

故事书中的用法

<template>
  <!-- Force tooltip to remain visible for design inspection -->
  <FzTooltip 
    text="Review this tooltip styling" 
    status="informative"
    :withIcon="true"
    _forceOpenForDesignReview
  >
    <FzButton>Inspect Me</FzButton>
  </FzTooltip>
</template>

何时使用

  • 设计审查:检查工具提示颜色、打字、间隔和布局
  • 视觉QA: 并行比较工具提示变体
  • 截图文档: 用于设计系统文档的工具提示状态
  • 无障碍审计:审查工具提示内容和ARIA属性

故事书故事

该部分包括了故事书中一个专门的"设计评论"故事,以演示所有工具提示的变体 _forceOpenForDesignReview 启用 。 使用控制面板来切换道具打开/关闭并看到效果.

为什么不用于生产?

  • 绕行所有普通工具提示能见度逻辑( 绕行、 聚焦、 键盘)
  • 用总是可见的工具提示创建不良的用户体验
  • 违反WCAG关于驳回内容的准则
  • 仅用作开发/设计工具

版本与发布记录

@fiscozen/tooltip 共发布 28 个版本,首次发布于 2024/05/28;过去 12 个月发布了 16 个版本。

版本发布日期距今
3.1.1latest2026/10/2322 天前
3.1.02026/10/2025 天前
3.0.92026/09/142 个月前
3.0.82026/09/072 个月前
3.0.72026/08/043 个月前
3.0.62026/08/033 个月前

关于 @fiscozen/tooltip 的常见问题

@fiscozen/tooltip 是什么?

设计系统工具提示组件

如何安装 @fiscozen/tooltip?

在项目目录运行 npm install @fiscozen/tooltip,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:vue(^3.4.13)、tailwindcss(^3.4.1)、@fiscozen/icons(^1.0.8)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@fiscozen/tooltip 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/fiscozen__tooltip 是否存在。

@fiscozen/tooltip 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fiscozen/tooltip 可以商用吗?

@fiscozen/tooltip 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fiscozen/tooltip 的下载量有多少?

根据 npm 官方下载统计,@fiscozen/tooltip 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,767 次,日均约 92 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fiscozen/tooltip 还在维护吗?

最新版本 3.1.1 发布于 2026/10/23(22 天前);至今共发布 28 个版本,其中过去 12 个月发布了 16 个;首次发布于 2024/05/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。