Initial TrueGrowth source import

This commit is contained in:
2026-07-07 09:36:36 +08:00
commit 3b6781d695
2283 changed files with 691996 additions and 0 deletions

111
docs/TEXT_PASTE_FEATURE.md Normal file
View File

@@ -0,0 +1,111 @@
# 文本粘贴功能
## 功能概述
Opentu 现在支持智能文本粘贴功能,当你从外部复制文本并粘贴到画布时,系统会自动控制文本宽度,避免文本过长。
## 功能特点
### 1. 自动换行
- 当文本行超过 50 个字符时,自动换行
- 优先在空格处断行,保持单词完整性
- 如果空格位置不合适,则在最大字符数处强制断行
### 2. 智能断行
- 在空格处断行时会检查空格位置是否在合理范围内70% 以上)
- 避免在行首或行尾留下过短的单词片段
- 自动去除断行后的多余空格
### 3. 保留原有格式
- 保留原文本中的换行符
- 每个原始行独立处理,不会合并多行
## 技术实现
### 核心文件
- `packages/drawnix/src/plugins/with-text-paste.ts` - 文本粘贴插件
- `packages/drawnix/src/plugins/with-common.tsx` - 插件注册
### 配置参数
```typescript
const TEXT_CONFIG = {
/** 最大字符数(超过则换行) */
MAX_CHARS_PER_LINE: 50,
/** 默认文本框宽度(像素) */
DEFAULT_WIDTH: 400,
/** 最大文本框宽度(像素) */
MAX_WIDTH: 600,
/** 估算字符宽度(像素) */
CHAR_WIDTH: 8,
};
```
### 插件链顺序
```typescript
// 在 with-common.tsx 中
return withTextPastePlugin(withImagePlugin(newBoard));
```
插件按以下顺序处理粘贴事件:
1. `withTextPastePlugin` - 检查是否为纯文本,如果是则处理并返回
2. `withImagePlugin` - 检查是否为图片,如果是则处理并返回
3. 默认处理 - 处理其他类型的粘贴(如 Plait 元素)
## 使用方法
### 基本使用
1. 从任何地方复制文本(浏览器、编辑器、文档等)
2. 在 Opentu 画布上按 `Ctrl+V` (Windows/Linux) 或 `Cmd+V` (Mac)
3. 文本会自动插入到鼠标位置,并自动换行
### 示例
**输入文本:**
```
This is a very long line of text that exceeds the maximum character limit and should be automatically wrapped to multiple lines.
```
**输出效果:**
```
This is a very long line of text that exceeds
the maximum character limit and should be
automatically wrapped to multiple lines.
```
## 注意事项
1. **不影响现有功能**
- 图片粘贴功能正常工作
- Plait 元素复制粘贴正常工作
- 只处理纯文本粘贴
2. **文本宽度限制**
- 默认最大 50 字符/行
- 可以通过修改 `TEXT_CONFIG.MAX_CHARS_PER_LINE` 调整
3. **中英文混排**
- 当前按字符数计算,中文字符和英文字符同等对待
- 中文文本可能需要调整 `MAX_CHARS_PER_LINE` 参数
## 未来改进方向
1. **智能宽度检测**
- 根据实际字符宽度(中文 vs 英文)动态调整
- 支持等宽字体和比例字体的不同处理
2. **用户配置**
- 在设置中允许用户自定义最大字符数
- 支持开启/关闭自动换行功能
3. **富文本支持**
- 保留粘贴文本的格式(粗体、斜体等)
- 支持 Markdown 格式自动转换
## 相关文件
- `packages/drawnix/src/plugins/with-text-paste.ts` - 文本粘贴插件实现
- `packages/drawnix/src/plugins/with-common.tsx` - 插件注册
- `packages/drawnix/src/plugins/with-image.tsx` - 图片粘贴插件(参考实现)
- `packages/drawnix/src/mcp/tools/canvas-insertion.ts` - 画布插入工具(文本插入参考)