# @fileverse-dev/ddoc 中文文档

规范地址：https://npmcn.com/package/%40fileverse-dev/ddoc/

版本：7\.2\.2
npm 元数据更新时间：2026-11-09T14:52:53.737Z
中文译文更新时间：2026-11-14T17:53:35.190Z
软件包许可：未声明

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

原始 npm 页面：https://www.npmjs.com/package/%40fileverse-dev/ddoc
原文对照：https://npmcn.com/package/%40fileverse-dev/ddoc/?lang=original
项目主页：https://github.com/fileverse/fileverse-ddocs#readme
源码仓库：https://github.com/fileverse/fileverse-ddocs

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

- 包体积（解压后）：4.5 MB，409 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：90 个
- peer 依赖：yjs \>=13\.6\.30 \<14，viem \>=2\.35\.0，react ^18\.2\.0 \|\| ^19\.0\.0，mermaid 11\.14\.0，frimousse \>=0\.3\.0，react-dom ^18\.2\.0 \|\| ^19\.0\.0，tailwindcss ^3\.4\.0，@dnd-kit/core \>=6\.3\.1，@fileverse/ui ^5\.4\.2，framer-motion \>=11\.2\.10，@fileverse/ens 0\.0\.4，@dnd-kit/sortable \>=10\.0\.0，@fileverse/crypto \>=0\.0\.21，@dnd-kit/utilities \>=3\.2\.2
- 首次发布：2024-06-04T18:35:25.041Z
- 最新版本发布：2026-11-09T14:52:53.203Z
- 近 30 天下载量：5764（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：1358（近 12 个月 785 个）

## 中文简介

DDoc 文档

## 安装

```sh
npm install @fileverse-dev/ddoc
```

也可以使用：`pnpm add @fileverse-dev/ddoc`、`yarn add @fileverse-dev/ddoc`、`bun add @fileverse-dev/ddoc`

## README

# 文件向量 dDocs

[ddocs. new (英语)](http://ddocs.new/) 您的隐私专注,开源替代 Google Docs 。 它是一款端到端加密的文档编辑器,在无损于速度或人们对其数据的控制的情况下被优化用于多人协作.

## 其特征包括:

-   使用后量子加密的端到端加密
-   实时和同步协作
-   建议模式(跟踪更改)和评论
-   标记下和 LaTeX 支持
-   美人鱼JS 图表支持
-   进出口.docx,.md,.pdf,.html等.
-   黑暗模式和颜色主题
-   离线/在线编辑(即使没有WiFi,仍继续编写和打开更老的文件)
-   交叉设备同步(桌面和移动)
-   移动优化的网络应用和PWA
-   通过零知识证明启用的私人访问权限
-   通过零知识证明使私人社会收回账户/档案
-   版本历史
-   端到端加密,可编程的 API 优化代理( opt- in)

![ddocsNew](https://github.com/user-attachments/assets/b7a344c1-8c86-4735-9181-d0c22a5c4ff6)

该寄存器包含:

-   `/package` ——核心包码.
-   示例和演示源代码以显示 dDocs 功能 .

## 使用量

### 先决条件

您的应用程序运行 Tailwind CSS 3.4 并拥有 `@tailwind base/components/utilities` 输入。 包船只编辑CSS;飞行前、公用事业、 `@fileverse/ui` 样式,而 KATeX 样式表来自您的构建.

### 安装导入( I)

```javascript
import { DdocEditor } from '@fileverse-dev/ddoc';
```

按此顺序装入样式表( 按导入顺序打印出 CSS ; 下一步将前两个放在根版式上, 将后两个放在编辑器路由上 :

```javascript
import './globals.css';                 // your tailwind entry
import '@fileverse/ui/styles/base';     // tokens and base rules
import 'katex/dist/katex.min.css';      // math; fonts are served as files
import '@fileverse-dev/ddoc/styles';    // editor CSS
```

### 大小

`DdocEditor` 填充其父目录 : `width: 100%; height: 100%`。父母必须有一个明确的身高。 编辑器从来不读取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取

```tsx
<div style={{ height: '100dvh', display: 'flex', flexDirection: 'column' }}>
  <div style={{ flex: 1, minHeight: 0 }}>
    <DdocEditor renderNavbar={renderNavbar} />
  </div>
  <footer>…</footer>
</div>
```

如果编辑器不高地制作,则其母版没有.

`renderNavbar` 输出是编辑器默认的第一行, 已渲染为: 编辑器不添加样式, 所以返回一个带有您自己的背景、 绑定和边框的元素 。 在流动中,它坐落在一个没有风格的行上,它只会使倒塌产生动画. 无 `renderNavbar` 无所不能 将导航器移到别处, 传出要转换的元素 。 在状态下保持,而不是在裁判中,所以编辑在附加时重新表示:

```tsx
const [navbarEl, setNavbarEl] = useState<HTMLElement | null>(null);

<header ref={setNavbarEl} />
<DdocEditor navbarContainer={navbarEl} renderNavbar={renderNavbar} />
```

布局遵循编辑器的宽度,而不是窗口的宽度:在一个窄面板中,它使用其狭长的布局. 已知限制:1 `DdocEditor` 每页;在宽屏幕上的窄编辑器中,注释页仍然覆盖整个取景口.

### 同伴依赖关系

此软件包需要在您的工程中安装以下对等依赖 :

```bash
npm install @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities @fileverse/ui @fileverse/crypto viem framer-motion frimousse
```

| 软件包 | 版本 |
| --- | --- |
| `@dnd-kit/core` | `>=6.3.1` |
| `@dnd-kit/sortable` | `>=10.0.0` |
| `@dnd-kit/utilities` | `>=3.2.2` |
| `@fileverse/ui` | `^5.4.2` |
| `@fileverse/crypto` | `>=0.0.21` |
| `viem` | `>=2.13.8` |
| `framer-motion` | `>=11.2.10` |
| `frimousse` | `>=0.3.0` |

对等范围是 `@fileverse/ui@^5.4.2`。如果你曾经测试过预放出配对,请精确地将两个包钉上:预放出不能满足护身范围.

这些从捆绑中外化,以避免在您的应用程序已经使用时出现重复. 如果没有安装它们,npm(v7+)会自动为您安装.

### 更新尾风配置

```javascript
module.exports = {
  presets: [require('@fileverse-dev/ddoc/tailwind')],
  content: [
    './src/**/*.{js,ts,jsx,tsx}',
    './node_modules/@fileverse-dev/ddoc/dist/**/*.{js,mjs}',
    './node_modules/@fileverse/ui/dist/**/*.{js,mjs}',
  ],
};
```

需要两分两分,而不是单分 `index.es.js` 条目: dits被块(`index.es.js` 静态进口 `use-headless-editor-<hash>.mjs`),所以一个单文件条目会留下块 类未生成.

预设作曲 `@fileverse/ui/tailwind` (基于类的暗模式,动画插件,设计-系统类)并添加 `mobile: 960px` 屏幕上显示编辑器所用的内容.

`tailwindcss@^3.4.0` 是一个可选的对等点: 预设会运行在您自己的 Tailwind 构建中, 它也提供 `postcss` 财务报告和审定财务报表 `postcss-js` ii 预置负载。 尾风4不支持.

### 从 4.x 移动

5.0 停止运输前飞行, 尾风公用设备, ui样式表, KaTeX样式表 `html`, (中文(简体) ), `body`,以及 `*` 复发. 要升级 :

1.  添加预设和两个 `content` 以上条目.
    
2.  导入 `@fileverse/ui/styles/base` 财务报告和审定财务报表 `katex/dist/katex.min.css` 照上面的顺序.
    
3.  一揽子计划不再提出这些全球宣言:
    
    -   `* { margin: 0; padding: 0 }`
    -   `html, body { height: 100%; width: 100% }`
    -   `html, body { overflow: hidden }`
    -   `body { position: static; user-select: none; -moz-osx-font-smoothing: grayscale }`
    -   `*, ::before, ::after { border-color: hsl(var(--color-border-default)) }`
    
    如果你的壳依赖 `overflow: hidden` 或者说 `user-select: none`中,添加到自己的 全局样式表。 其余的由尾风预飞或 `@fileverse/ui/styles/base` 床单.
    
4.  删除任何重新声明的工作 `mobile:` 类; 预设生成它们.
    
5.  添加 `katex` 属于自己的依附者`npm install katex@^0.16.11`),包裹不再保证被吊起.
    
6.  如果你把旧包里的东西按类名排序: `.custom-scrollbar` 现在 `.ddoc-scrollbar`,以及 `.highlight-comment-bg`, (中文(简体) ), `.is-active`, (中文(简体) ), `.custom-border-bg`, (中文(简体) ), `.animate-fade-in-out`, (中文(简体) ), `.placeholder-disabled`, (中文(简体) ), `.tooltip:before` 以未使用方式删除.
    
7.  编 成 `@fileverse/ui` 预设定义 `rounded-sm` 作为 `calc(var(--radius) - 4px)` (4px) (中文(简体) ) 而不是 Tailwind的默认 2px, 所以任何使用 ddoc 的表面 `rounded-sm` 现在公用事业 使4px角.
    
8.  第三方 CSS ddoc 导入( 突出主题. js, tippy) 仍为全球船舶 `.hljs*` 财务报告和审定财务报表 `.tippy-box` 选择者——这超出了软件包自己的选择者所有权担保范围.
    
9.  列表规则( E)`ul`, (中文(简体) ), `ol`,而"巢居清单"的计数器)现在被扩大为 `:where(.ProseMirror, .presentation-mode)` 不再有风格 `ol`编号 :`ul` 编辑器外或 演示文稿表面。 如果你的应用依赖于Ddoc的全局列表规则 在其他地方,你自己拥有.
    

你现在应该使用 DDocs !

### 从 6. x 移走

7.0会改变编辑器的大小. 没有删除道具.

-   给编辑器一个有确定高度的父(参见 Sizing) 。 它已经不再大小了 `100dvh`。 。 。 .
-   把脚印放在编辑器正常流后. `footerHeight` 没有效果,可以删除.
-   导航和工具栏已经不在了 `#editor-canvas`. 使用的中央支助系统 `#editor-canvas` 因为他们的祖先应该使用 `.ddoc-editor-root`。 。 。 .
-   编辑器不再将您的导航栏包入 `<nav id="Navbar">`它使什么 `renderNavbar` 返回,因此移动包装的样式(`color-bg-default p-2 flex gap-10 items-center justify-between w-full border-b color-border-default`)和 `id`,如果选中的话,请在自己的元素上。 "逃生归来"对"编辑"的处理器也随之而去,而现在隐藏起来会倒塌一排没有风格的`.ddoc-navbar-row`围绕你的元素。 无 `renderNavbar` 无所不能 导航器的高度来自其内容;它是一个固定的64px,下面是46px `lg`。 。 。 .
-   `editorCanvasClassNames` 不应该设置高度.
-   `zoomLevel`, (中文(简体) ), `isNavbarVisible` 财务报告和审定财务报表 `isPreviewMode` 是可选的。 每个UI状态都可以被忽略,或者用一个值和一个来控制 `onXChange` 调用。 这个 `setX` 道具还行并被腐烂.
-   您的尾风建筑不需要改变配置 。 新的 `ddoc-*` 变体( 随编辑器宽度而来的容器- query 断点)来自 `@fileverse-dev/ddoc/tailwind` 预设已使用.

修改时没有更改代码的行为 :

-   没有他们的UI功能 `setX` prop现在在内部状态上工作. Split View 切换显示, 何时关闭现场协作( 需要) `setIsSplitView` )),以及注释抽屉,大纲和演示文稿模式打开而不用设置. 为了固定一个, 传递它的值 没有回调, 例如 `isPresentationMode={false}`。对于 Split 视图, `isSplitView={false}` 没有回调时,也会隐藏工具栏切换.
-   `onFocusModeChange` 和堕落者 `onFocusMode` 当 `isFocusMode` 未通过.
-   `#editor-canvas` 现在是文档滚动器( 它携带 `data-editor-scroll-container`)和根 (\[`.ddoc-editor-root`)为 `overflow: hidden`。 。 。 .
-   一个传送到 `navbarContainer` 由您定位并分层;编辑器只将它切入元素。 焦点模式和工具栏的崩溃切换不隐藏它: 隐藏您自己的元素 `onFocusModeChange` 财务报告和审定财务报表 `onNavbarVisibleChange` 如果你想要,或通过 `showNavbarToggle={false}` 以删除崩溃切换.
-   工具栏在隐藏时不再滑动或淡出;其行被去掉并被画布取去空间. 一个入流的导航器仍然会滑出并淡出超过300ms. 对于一个传送的导航器,动画是你的:放 `ddoc-navbar-row` 并添加 `ddoc-navbar-row--hidden` 来摧毁它.
-   移动制表板坐落在编辑器的下边. 它不再添加 `24px + env(safe-area-inset-bottom)`,所以你的脚必须携带安全区域设置.
-   编辑的应变课使用 `:where()` 因此他们需要Chrome 88+,Safari 14+或Firefox 78+.

# dDocProps 接口

这个 `DdocProps` 界面是一个 TypeScript 接口,用于定义页面相关组件的属性。 它包括处理预览模式,管理发布数据的属性,以及可选地存储与页面相关的元数据和内容.

## 核心道具

| 财产 | 类型 | 说明 |
| --- | --- | --- |
| `initialContent` | `JSONContent` | 编辑器的初始内容 |
| `onChange` | `(changes: JSONContent, chunk?: any) => void` | 在编辑器内容更改时触发回调 |
| `ref` | `React.RefObject` | 访问编辑器实例的引用 |
| `isPreviewMode` | `boolean` | 如果编辑器处于预览/只读模式,则控制 。 可选的,默认为 `false` |
| `editorCanvasClassNames` | `string` | 编辑画布的额外 CSS 类 |
| `ignoreCorruptedData` | `boolean` | 装入时是否忽略已损坏的数据 |
| `onInvalidContentError` | `(error: any) => void` | 处理无效内容错误的回调 |

## 协作道具

| 财产 | 类型 | 说明 |
| --- | --- | --- |
| `enableCollaboration` | `boolean` | 启用实时协作功能 |
| `collaborationId` | `string` | 协作会话的独特ID( 启用协作时需要) |
| `username` | `string` | 用户协作的显示名 |
| `setUsername` | `(username: string) => void` | 更新用户名的函数 |
| `walletAddress` | `string` | 用户钱包地址 |
| `onCollaboratorChange` | `(collaborators?: IDocCollabUsers[]) => void` | 合作者更改时召回 |
| `enableIndexeddbSync` | `boolean` | 启用离线支持的索引DB同步 |
| `ddocId` | `string` | 独一无二的文档 ID (索引 DB 同步需要) |

## UI/UX 推进

每个UI状态都可以被忽略(编辑器保持内部),或者用值和值来控制 `onXChange` 调用。 这个 `setX` 道具还行并被腐烂.

| 财产 | 类型 | 说明 |
| --- | --- | --- |
| `zoomLevel` | `string` | 当前编辑器的缩放级别 。 可选的,默认为 `'1'` |
| `onZoomLevelChange` | `(zoomLevel: string) => void` | 缩放已更改 |
| `setZoomLevel` | `React.Dispatch<SetStateAction<string>>` | 折旧、使用 `onZoomLevelChange` |
| `isNavbarVisible` | `boolean` | 控制导航的能见度. 可选的,默认为 `true` |
| `onNavbarVisibleChange` | `(visible: boolean) => void` | 显示或隐藏 Navbar |
| `setIsNavbarVisible` | `React.Dispatch<SetStateAction<boolean>>` | 折旧、使用 `onNavbarVisibleChange` |
| `renderNavbar` | `() => JSX.Element` | 自定义导航器渲染器 。 没有它,没有导航器 |
| `navbarContainer` | `HTMLElement | null` | 使导航器进入的元素。 外为入入入入入. `null` 除非它附着,否则什么都不做 |
| `showNavbarToggle` | `boolean` | 显示工具栏的导航崩溃 chevron 。 默认 `true` |
| `renderThemeToggle` | `() => JSX.Element` | 自定义主题切换渲染器 |
| `showTOC` | `boolean` | 控制大纲 |
| `onShowTOCChange` | `(show: boolean) => void` | 显示或隐藏大纲 |
| `setShowTOC` | `React.Dispatch<SetStateAction<boolean>>` | 折旧、使用 `onShowTOCChange` |
| `commentDrawerOpen` | `boolean` | 控制注释抽屉 |
| `onCommentDrawerOpenChange` | `(open: boolean) => void` | 打开或关闭评论抽屉 |
| `setCommentDrawerOpen` | `React.Dispatch<SetStateAction<boolean>>` | 折旧、使用 `onCommentDrawerOpenChange` |
| `isPresentationMode` | `boolean` | 控件显示模式 |
| `onPresentationModeChange` | `(active: boolean) => void` | 输入或左侧的演示模式 |
| `setIsPresentationMode` | `React.Dispatch<SetStateAction<boolean>>` | 折旧、使用 `onPresentationModeChange` |
| `isSplitView` | `boolean` | 控件分割视图 |
| `onSplitViewChange` | `(active: boolean) => void` | 输入或左侧分割视图 |
| `setIsSplitView` | `React.Dispatch<SetStateAction<boolean>>` | 折旧、使用 `onSplitViewChange` |
| `isFocusMode` | `boolean` | 控制焦点模式 |
| `onFocusModeChange` | `(isFocusMode: boolean) => void` | 焦点模式已更改 |
| `onFocusMode` | `(isFocusMode: boolean) => void` | 折旧、使用 `onFocusModeChange` |
| `onStatsChange` | `(stats: { words; characters; selectedWords; pages: number | null }) => void` | 活动 Tab 数据; 当任何字段变化时起火 . `pages` 实值 `null` 直到测量 |
| `setWordCount`, (中文(简体) ), `setCharacterCount`, (中文(简体) ), `setSelectedWordCount`, (中文(简体) ), `setPageCount` | `React.Dispatch<SetStateAction<number>>` | 折旧、使用 `onStatsChange` |
| `footerHeight` | `string` | 被贬去,无所取效. 把页脚放在编辑器后正常流中 |
| `sharedSlidesLink` | `string` | 共享演示文稿幻灯片链接 |
| `documentStyling` | `DocumentStyling` | 文档显示自定义样式 |
| `fonts` | `FontDescriptor[]` | 消费者提供的字体目录( 见自定义字体) |

## 文档样式

这个 `documentStyling` prop允许您自定义文档的视觉外观, 有三个不同的样式区域:

```typescript
interface ThemeVariantValue {
  light: string;
  dark: string;
}

interface DocumentStyling {
  /**
   * Background styling for the outer document area.
   * Supports CSS background values including gradients.
   * Example: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)"
   */
  background?: string | ThemeVariantValue;

  /**
   * Background color for the editor canvas/content area.
   * Should be a solid color value.
   * Example: "#ffffff" or "rgb(255, 255, 255)"
   */
  canvasBackground?: string | ThemeVariantValue;

  /**
   * Text color for the editor content.
   * Example: "#333333" or "rgb(51, 51, 51)"
   */
  textColor?: string | ThemeVariantValue;

  /**
   * Font family for the editor content.
   * Example: "Inter, sans-serif" or "'Times New Roman', serif"
   */
  fontFamily?: string;
}
```

### 用法示例

```tsx
<DdocEditor
  documentStyling={{
    background: {
      light: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
      dark: 'linear-gradient(135deg, #2a3145 0%, #3a2f59 100%)',
    },
    canvasBackground: { light: '#ffffff', dark: '#1e1f22' },
    textColor: { light: '#333333', dark: '#e8ebec' },
    fontFamily: 'Inter, sans-serif',
  }}
  // ... other props
/>
```

**说明:** 文档造型在正则编辑器模式和演示文稿模式两方面都有效. 仅以演示文稿形式 `canvasBackground`, (中文(简体) ), `textColor`,以及 `fontFamily` 用于维护干净的幻灯片外观.

## 自定义字体

编辑的船载着 **仅限系统基准** (Arial, Calibri, Georgia, Times New Roman等)和制作 **没有第三方字体请求** ——没有谷歌字体 `@import`。要提供额外字体,请通过 a `fonts` 目录. 每个字体都由您的应用程序自行托管并加载 **需求** 通过 CSS 字体加载 API: 一个字体的 `woff2` 只有在拾取器中选择或文档(包括远程协作者的更改)实际在其中生成文本时才获取.

```typescript
type FontDescriptor = {
  /** Display name shown in the picker, e.g. "Poppins". */
  name: string;
  /** CSS font-family stack stored in the content, e.g. "Poppins, sans-serif". */
  family: string;
  /**
   * woff2 source(s). Omit for a pure system font (no loading).
   *   - string: a single file covering all weights (e.g. a variable font).
   *   - Record<number, string>: a per-weight map, e.g. { 400: url400, 700: url700 }.
   */
  url?: string | Record<number, string>;
  /**
   * Optional SVG preview rendered in the picker. Any React node that renders an
   * <svg>. Falls back to the font name in the default font when absent.
   */
  preview?: React.ReactNode;
};
```

### 用法示例

```tsx
import { DdocEditor, FontDescriptor } from '@fileverse-dev/ddoc';
// Self-host the woff2 files however your bundler prefers (e.g. @fontsource/*).
import poppins400 from '@fontsource/poppins/files/poppins-latin-400-normal.woff2';
import poppins700 from '@fontsource/poppins/files/poppins-latin-700-normal.woff2';

const fonts: FontDescriptor[] = [
  {
    name: 'Poppins',
    family: 'Poppins, sans-serif',
    url: { 400: poppins400, 700: poppins700 },
    preview: <PoppinsPreview />, // optional SVG
  },
];

<DdocEditor fonts={fonts} /* ...other props */ />;
```

**注释:**

-   采集者列出系统的基线和目录 **a-Z 组合** (与 **默认** 被钉入顶上.
-   CSS的面部名称来源于第一个符号: `family`这样 `name` 纯粹是化妆品,可以有所不同(例如:. `name: 'Poppins (Brand)'`, (中文(简体) ), `family: 'Poppins, sans-serif'`) (中文(简体) ).
-   该目录还驱动 PDF/ 打印导出, 该导出 `@font-face` 规则.
-   主办您的 `woff2` 文件 **原产地** 因此,他们既解决编辑器,又解决了印刷物.

## 注释和协作道具

| 财产 | 类型 | 说明 |
| --- | --- | --- |
| `initialComments` | `IComment[]` | 要显示的初步注释 |
| `setInitialComments` | `(comments: IComment[]) => void` | 更新注释的职能 |
| `onCommentReply` | `(id: string, reply: IComment) => void` | 召回评论回复 |
| `onNewComment` | `(comment: IComment) => void` | 召回新评论 |
| `commentDrawerOpen` | `boolean` | 控件注释抽屉可见度 |
| `onCommentDrawerOpenChange` | `(open: boolean) => void` | 打开或关闭评论抽屉 |
| `setCommentDrawerOpen` | `(isOpen: boolean) => void` | 折旧、使用 `onCommentDrawerOpenChange` |
| `onResolveComment` | `(commentId: string) => void` | 解析批注时召回 |
| `onUnresolveComment` | `(commentId: string) => void` | 解析批注时召回 |
| `onDeleteComment` | `(commentId: string) => void` | 删除注释时召回 |
| `disableInlineComment` | `boolean` | 禁用内置注释特性 |

## 认证道具

| 财产 | 类型 | 说明 |
| --- | --- | --- |
| `isConnected` | `boolean` | 用户连接状态 |
| `isLoading` | `boolean` | 认证加载状态 |
| `connectViaUsername` | `(username: string) => Promise<void>` | 基于用户名的认证 |
| `connectViaWallet` | `() => Promise<void>` | 基于钱包的认证 |
| `isDDocOwner` | `boolean` | 显示是否拥有文档 |

## 工具软件

| 财产 | 类型 | 说明 |
| --- | --- | --- |
| `setCharacterCount` | `React.Dispatch<SetStateAction<number>>` | 折旧、使用 `onStatsChange`更新字符计数 |
| `setWordCount` | `React.Dispatch<SetStateAction<number>>` | 折旧、使用 `onStatsChange`更新字数 |
| `setPageCount` | `React.Dispatch<SetStateAction<number>>` | 折旧、使用 `onStatsChange`。更新近似。 导出页数 |
| `ensResolutionUrl` | `string` | ENS 名称分辨率的 URL |
| `ipfsImageUploadFn` | `(file: File) => Promise<IpfsImageUploadResponse>` | 用于安全图像上传的函数 |
| `ipfsImageFetchFn` | `(_data: IpfsImageFetchPayload) => Promise<{ url: string;file: File;}>` | 从 IPFS 获取安全图像的函数 |
| `onError` | `(error: string) => void` | 一般错误处理器 |
| `onInlineComment` | `() => void` | 调回内行注释 |
| `onMarkdownExport` | `() => void` | 召回标记下导出 |
| `onMarkdownImport` | `() => void` | 召回标记下导入 |
| `onPdfExport` | `() => void` | 回调 pdf 导出 |
| `onSlidesShare` | `() => void` | 回调共享幻灯片 |
| `onComment` | `() => void` | 一般性评论回调 |

## 在当地运行此示例的步骤

-   `npm i`
-   `npm run dev`

它将打开一个 Vite 服务器, 这将拥有 Ddoc 编辑器 .

QQ 此寄存器正在快速开发, 经常更新和更改 。 我们建议暂时不要用于生产.

## 常见问题

### @fileverse-dev/ddoc 是什么？

DDoc 文档

### 如何安装 @fileverse-dev/ddoc？

在项目目录运行 npm install @fileverse-dev/ddoc，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：yjs（\>=13\.6\.30 \<14）、viem（\>=2\.35\.0）、react（^18\.2\.0 \|\| ^19\.0\.0）、mermaid（11\.14\.0）、frimousse（\>=0\.3\.0）、react-dom（^18\.2\.0 \|\| ^19\.0\.0）、@dnd-kit/core（\>=6\.3\.1）、@fileverse/ui（^5\.4\.2）、framer-motion（\>=11\.2\.10）、@fileverse/ens（0\.0\.4）、@dnd-kit/sortable（\>=10\.0\.0）、@fileverse/crypto（\>=0\.0\.21）、@dnd-kit/utilities（\>=3\.2\.2）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @fileverse-dev/ddoc 支持 TypeScript 吗？

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

### @fileverse-dev/ddoc 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @fileverse-dev/ddoc 可以商用吗？

@fileverse-dev/ddoc 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @fileverse-dev/ddoc 的下载量有多少？

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

### @fileverse-dev/ddoc 还在维护吗？

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

