@canvas-components/print-design-plugin

中文文档
0.1.22发布于 2026/11/09MITTypeScriptESM + CJS近 30 天下载 3704

Native and React plugin bundle for print design.

原始使用文档
文档目录3 节
  1. 在 React 设计器中使用
  2. AI 对话插件
  3. 插件编写指南

打印设计插件包

同一个包提供两个代码入口和一个样式入口:

  • @canvas-components/print-design-plugin/native:原生组件注册表,供 Canvas/HTML 打印端使用,不加载 React。
  • @canvas-components/print-design-plugin/react:左侧菜单、元素创建、右侧属性与数据编辑配置;同时包含原生注册表,供 React 设计器使用。
  • @canvas-components/print-design-plugin/style.css:React 插件的专用界面样式,使用设计器时由宿主显式导入。

在 React 设计器中使用

从包根导入样式;只导入 /react 不会自动加载插件面板样式。一个应用入口导入一次即可,独立打印服务只使用 /native,不需要 CSS。

import "@canvas-components/print-design-plugin/style.css";
import { ReactPrintDesign } from "@canvas-components/react-print-design";
import { builtinPrintDesignPlugins } from "@canvas-components/print-design-plugin/react";

export function PrintEditor() {
  return (
    <div style={{ height: 720 }}>
      <ReactPrintDesign
        componentRegistry={builtinPrintDesignPlugins.componentRegistry}
        componentFactories={builtinPrintDesignPlugins.componentFactories}
        componentMenu={builtinPrintDesignPlugins.componentMenu}
        propertySections={builtinPrintDesignPlugins.propertySections}
        contextMenus={builtinPrintDesignPlugins.contextMenus}
        tools={builtinPrintDesignPlugins.tools}
        pluginCatalog={builtinPrintDesignPlugins.pluginCatalog}
      />
    </div>
  );
}

第三方组件通过 registerPrintDesignPluginPackages 与内置注册表合并,再将返回的同名字段传给设计器;独立打印端使用同版本的 componentRegistry。完整接入示例见当前版本示例。

AI 对话插件

AI 对话位于本包的 src/ai-chat/,由宿主按需装配;未装配时设计器不显示 AI 按钮。按钮位于全屏按钮旁,右侧对话面板默认收起。输入框按 Enter 发送,Shift+Enter 换行;下方的更多按钮旁可切换当前模型和思考程度,未获取模型列表时模型选择器显示空列表。底部输入框的“更多 AI 设置”打开固定高度的配置对话框:左侧选择“基础配置”“外观配置”或“历史对话”,右侧显示内容。“基础配置”可维护多个连接,每个连接独立保存 Base URL、API Key、当前模型、思考程度和获取到的模型列表;修改 URL 或密钥后需重新获取列表。思考程度提供默认、低、中、高选项;默认时不向模型服务发送 reasoning_effort。“历史对话”可选择已有会话,删除时需要再次确认。旧版单连接配置会在读取时转换。

画布选中图层或组件时,输入框上方显示当前选中元素的名称与可读文本摘要。可从 Chat 的目标卡片中单独移除元素,不改变画布选区;移除项不会进入本轮选区摘要或 Agent 的 get_selection 结果。发送消息会把保留项的页面 ID 和元素 ID 作为本轮 Agent 的修改目标;模型通过 get_element 读取完整内容后再修改,聊天记录仍只显示用户输入的原文。画布选区改变后,Chat 目标会按新的选区重置。

import { createPrintDesignAiChatPlugin } from "@canvas-components/print-design-plugin/react";

<ReactPrintDesign
  aiChatPlugin={createPrintDesignAiChatPlugin({
    defaultConfig: {
      baseUrl: "https://example.com/v1",
      model: "example-model",
    },
  })}
/>;

默认连接器使用 OpenAI 兼容的 /v1/models 和 /v1/chat/completions,并通过核心包的 createPrintDesignAgentApi 将读取文档、选区和编辑命令作为模型工具提供。Agent 可列出已注册组件、读取默认模板,并基于组件工厂创建表格等插件元素;表格插入行列和合并单元格复用组件命令。其他协议可通过 provider 选项替换。模型配置使用浏览器 Web Crypto 加密后保存在 IndexedDB;非 HTTPS 且非 localhost 的页面只能在本次会话中使用自定义模型配置。浏览器端内置的 API Key 会随前端代码交付,无法作为产品方秘密密钥;默认配置适合填入公开地址和模型,密钥由使用者在浏览器中自行填写。

宿主配置 pluginAuthoring: createBrowserPluginAuthoring() 后,Agent 可先调用 get_plugin_structure 获取目录约定,再向 create_plugin_archive 提交源码。每份归档只含一个组件,源码必须包含 src/native.js 和 src/react.js;可增加 src/ 下的 .js 共享文件,并使用标准 ESM 导入。原生入口只依赖核心包;React 入口除创建器和菜单外,必须通过 propertySections 注册右侧配置面板,fields 中至少包含一个与元素字段对应的组件专属配置项。dist/、package.json、manifest.json 由浏览器生成,Agent 不提交这些路径。浏览器检查 JavaScript 语法、配置面板与导入路径,校验 ZIP 摘要,再将产物保存在 IndexedDB;下载按钮从本地存储读取 ZIP,不请求打包服务器。下载不等于安装或发布。插件列表的“导入插件包”用于本机安装,允许导入清单标记为不可再分发的 ZIP;“上传到共享库”用于共享发布,仍要求插件包允许再分发。

在新对话中升级已生成插件时,Agent 可调用 list_plugin_sources 查找包标识及最新版本,再调用 get_plugin_source 读取浏览器本地保存的原始源码。修改后仍通过 create_plugin_archive 生成新 ZIP。浏览器关闭或页面刷新后,已保存的下载卡片仍可从 IndexedDB 取回 ZIP。

“外观配置”分类可填写面板的最小、最大、当前宽度(像素)。拖动面板分隔条会更新当前宽度并独立保存到本地存储;首次宽度可由 createPrintDesignAiChatPlugin({ panelWidths: { min: 280, max: 640, current: 360 } }) 指定。AI 标题行与属性面板标题行使用相同高度。

对话历史只保存在当前浏览器的 IndexedDB,不包含 API Key;点击“新对话”开始独立会话。用户消息位于右侧,AI 回复位于左侧并显示生成时使用的模型名称。内置 OpenAI 兼容提供方流式展示思考和正文;思考区域限高滚动,流式界面仅保留最近的思考文本,回复完成后可展开查看全文。自定义提供方可实现可选的 stream 接口,不实现时继续使用 complete。src/ai-chat/index.ts 是插件入口,types.ts 定义宿主协议,model/ 管理多连接配置及旧版迁移,providers/ 放模型连接,persistence/ 分别管理加密模型配置、面板宽度和历史会话,hooks/ 管理会话状态,components/ 放对话、虚拟列表及配置对话框。新增模型提供方、消息能力或配置导航项时分别在对应目录扩展。

插件编写指南

按项目安装的 @canvas-components/print-design 版本选择指南,当前核心包为 0.1.10:

供 Agent 创建的第三方组件需要注册完整的 componentFactories;只有要让 Agent 发现并调用组件专用命令时,才在工厂中声明可选的 agentCommands,并在原生组件中实现对应的 commands.execute。

当前复杂组件提供的专用 Agent 命令如下。其他组件的常规字段通过 get_component_template、get_element 和 update_element 编辑。

组件专用命令
表格insert-row、insert-column、merge-body、merge-header
透视表move-field、remove-field
甘特图insert-task、update-task、remove-task
图表set-categories、set-series
流程图、列表insert-item、update-item、remove-item
网格、坐标网格resize-grid、set-cell
图形set-polygon-points、set-curve-points、set-path-points
连接线set-endpoint、set-waypoints
图片set-crop、clear-crop
画笔append-stroke、remove-stroke

src/plugins/ 下每种内置组件一个目录,例如 text/、table/、pivot-table/。每个目录的 native.ts 声明原生输出能力,menu.ts 声明左侧菜单入口和预设,factory.ts 创建默认元素,properties.ts 可声明右侧属性分组,react.ts 汇合创建器与编辑能力;包入口只负责汇总与注册。新增组件时先建独立目录,再将其加入两个入口的清单。

组件实现按实际职责放入 data/、layout/、rendering/、interaction/,测试与实现同目录;无需的子目录可以省略。表格插件的具体划分见 src/plugins/table/README.md,整体约定见插件化计划。

组件专属的绘制、数据、分页和交互逻辑由本包各插件目录实现。print-design 核心只负责通用文档模型、分页、Canvas/HTML 调度和组件注册分发;核心默认组件注册表为空,未注册的组件会明确报错。复杂字段控件可复用 react-print-design 的通用能力。核心包不反向依赖本包或 React。

版本与发布记录

@canvas-components/print-design-plugin 共发布 21 个版本,首次发布于 2026/10/25;过去 12 个月发布了 21 个版本。

版本发布日期距今
0.1.22latest2026/11/09今天
0.1.212026/11/09今天
0.1.202026/11/063 天前
0.1.192026/11/054 天前
0.1.182026/11/054 天前
0.1.172026/11/054 天前

关于 @canvas-components/print-design-plugin 的常见问题

@canvas-components/print-design-plugin 是什么?

Native and React plugin bundle for print design.

如何安装 @canvas-components/print-design-plugin?

在项目目录运行 npm install @canvas-components/print-design-plugin,或使用 pnpm add / yarn add / bun add。

@canvas-components/print-design-plugin 支持 TypeScript 吗?

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

@canvas-components/print-design-plugin 支持 ESM 还是 CommonJS?

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

@canvas-components/print-design-plugin 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@canvas-components/print-design-plugin 可以商用吗?

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

@canvas-components/print-design-plugin 的下载量有多少?

根据 npm 官方下载统计,@canvas-components/print-design-plugin 在 2026/10/09 – 2026/11/07 这 30 天内被下载 3,704 次,日均约 123 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@canvas-components/print-design-plugin 还在维护吗?

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