# @fluid-topics/ftds-toc 中文文档

规范地址：https://npmcn.com/package/%40fluid-topics/ftds-toc/

版本：2\.2\.52
npm 元数据更新时间：2026-11-14T00:35:23.200Z
中文译文更新时间：2026-11-15T02:03:21.326Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40fluid-topics/ftds-toc
原文对照：https://npmcn.com/package/%40fluid-topics/ftds-toc/?lang=original
源码仓库：https://scm.mrs.antidot.net:2222/fluidtopics/ft-web-components

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：458 kB，16 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：4 个
- 首次发布：2026-10-15T13:51:23.920Z
- 最新版本发布：2026-11-14T00:35:22.967Z
- 近 30 天下载量：18708（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：26（近 12 个月 26 个）

## 中文简介

设计系统目录组件

## 安装

```sh
npm install @fluid-topics/ftds-toc
```

也可以使用：`pnpm add @fluid-topics/ftds-toc`、`yarn add @fluid-topics/ftds-toc`、`bun add @fluid-topics/ftds-toc`

## README

## 安装

```shell
npm install @fluid-topics/ftds-toc
yarn add @fluid-topics/ftds-toc
```

## 使用量

设计系统目录 (TOC). 它是一个导航组件,具有两个关卡(分节和分节)连接到一页的锚.

匹配当前页面位置的链接被标记为 `aria-current="page"`。其更新时间为点击和 `hashchange`,或可被迫使用 `current` 属性.

它很粘,隐藏在屏幕上,最宽可达1440px.

```typescript
import { html } from "lit"
import "@fluid-topics/ftds-toc"

function render() {
    return html`
        <ftds-toc
            label="Content"
            .items=${ [
                { value: "general", label: "General", href: "#general" },
                {
                    value: "provider",
                    label: "Provider",
                    href: "#provider",
                    children: [
                        { value: "settings", label: "Settings", href: "#settings" },
                    ],
                },
            ] }
        ></ftds-toc>`
}
```

## 键盘导航

它跟随 [APG 树景导航模式](https://www.w3.org/WAI/ARIA/apg/patterns/treeview/examples/treeview-navigation/),没有扩张和倒塌。 标签序列中只有一个项目(当前一个,或第一个).

| 密钥 | 行动 |
| --- | --- |
| `ArrowDown` 编号 : `Up` | 将焦点移到下一个/ 上一个项目 |
| `ArrowRight` | 将焦点移动到项目的第一个孩子 |
| `ArrowLeft` | 将焦点移动到子项目的父母 |
| `Home` 编号 : `End` | 将焦点移动到第一个/最后一个项目 |
| 一封信 | 将焦点移到从该字母开始的下一个项目 |
| `Space` 编号 : `Enter` | 激活链接 |

## 活动

`item-selected` (单位:千美元)`TocItemSelectedEvent`, (中文(简体) ), `detail` 当一个项目被单击或用键盘激活时,将发出. 可取消:拨打 `preventDefault()` 上面取消了链接的本地导航,所以主机可以滚动到区域本身.

## 从页面中构建项目

而不是用手写东西, `FtTocController` (从) `@fluid-topics/ft-wc-utils`)可以从主机组件的区块来构建它们并跟踪目前所看到的区块.

标记主机光度DOM的每个部分 `data-toc-label`添加 `data-toc-level="1"` 以制作上一节的分节. 没有元素 `id` 给一个。 当主机的光 DOM 改变时, 这些区域会被重新扫描 .

```typescript
import { html } from "lit"
import { FtLitElement, FtTocController } from "@fluid-topics/ft-wc-utils"
import { TocItemSelectedEvent } from "@fluid-topics/ftds-toc"
import "@fluid-topics/ftds-toc"

class MyPage extends FtLitElement {
    private readonly toc = new FtTocController(this, {
        scrollContainer: () => this.renderRoot.querySelector("main"),
    })

    protected render() {
        return html`
            <ftds-toc label="Content"
                      .items=${ this.toc.items }
                      .current=${ this.toc.current }
                      @item-selected=${ this.onItemSelected }>
            </ftds-toc>
            <main>
                <slot></slot>
            </main>`
    }

    private onItemSelected(e: TocItemSelectedEvent) {
        if (this.toc.scrollTo(e.detail.value)) {
            e.preventDefault()
        }
    }
}
```

```typescript
html`
    <my-page>
        <section data-toc-label="General">...</section>
        <section data-toc-label="Provider">...</section>
        <section data-toc-label="Settings" data-toc-level="1">...</section>
    </my-page>`
```

| 成员 | 说明 |
| --- | --- |
| `scrollContainer` (选项) | 滚动各节的元素. |
| `isVisible` (选项) | 返回TOC是否可见 。 卷轴返回时没有被跟踪 `false`。默认总是可见. |
| `scrollOffset` (选项) | 以像素表示的距离 。 默认为 `24`。 。 。 . |
| `scrollSettleDelay` (选项) | 毫秒不滚动事件,然后由滚动触发 `scrollTo` 结束了。 默认为 `150`。 。 。 . |
| `items` | 给 `ftds-toc`。 。 。 . |
| `current` | 本节的价值,即: `ftds-toc`。 。 。 . |
| `scrollTo(value)` | 向一节滚动,使其流出并保持到滚动结束. |
| `refresh()` | 重新扫描区域. |

`ftds-page-layout` 做这个给你 用它的 `withToc` 属性.

## 常见问题

### @fluid-topics/ftds-toc 是什么？

设计系统目录组件

### 如何安装 @fluid-topics/ftds-toc？

在项目目录运行 npm install @fluid-topics/ftds-toc，或使用 pnpm add / yarn add / bun add。

### @fluid-topics/ftds-toc 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @fluid-topics/ftds-toc 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @fluid-topics/ftds-toc 可以商用吗？

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

### @fluid-topics/ftds-toc 的下载量有多少？

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

### @fluid-topics/ftds-toc 还在维护吗？

最新版本 2\.2\.52 发布于 2026/11/14（1 天前）；至今共发布 26 个版本，其中过去 12 个月发布了 26 个；首次发布于 2026/10/15。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

