@one2x/medeo-rte 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -5
- package/dist/index.js +2270 -1609
- package/dist/index.js.map +1 -1
- package/dist/style.css +32 -3
- package/dist/types/commands/shortcuts.d.ts +14 -0
- package/dist/types/commands/shortcuts.d.ts.map +1 -1
- package/dist/types/commands/types.d.ts +6 -0
- package/dist/types/commands/types.d.ts.map +1 -1
- package/dist/types/editor.d.ts +67 -0
- package/dist/types/editor.d.ts.map +1 -1
- package/dist/types/input/caretMotion.d.ts +23 -0
- package/dist/types/input/caretMotion.d.ts.map +1 -0
- package/dist/types/input/caretMotion.selfcheck.d.ts +2 -0
- package/dist/types/input/caretMotion.selfcheck.d.ts.map +1 -0
- package/dist/types/input/ime.d.ts +9 -0
- package/dist/types/input/ime.d.ts.map +1 -1
- package/dist/types/input/keyboard.d.ts.map +1 -1
- package/dist/types/layout/engine.d.ts.map +1 -1
- package/dist/types/layout/harness.d.ts.map +1 -1
- package/dist/types/layout/measure.d.ts +11 -0
- package/dist/types/layout/measure.d.ts.map +1 -1
- package/dist/types/layout/types.d.ts +8 -0
- package/dist/types/layout/types.d.ts.map +1 -1
- package/dist/types/model/blocks.d.ts.map +1 -1
- package/dist/types/model/types.d.ts +11 -3
- package/dist/types/model/types.d.ts.map +1 -1
- package/dist/types/operations/slice.d.ts.map +1 -1
- package/dist/types/operations/text.d.ts.map +1 -1
- package/dist/types/operations/virtualBlock.d.ts +6 -0
- package/dist/types/operations/virtualBlock.d.ts.map +1 -1
- package/dist/types/paint/canvasPainter.d.ts +27 -1
- package/dist/types/paint/canvasPainter.d.ts.map +1 -1
- package/dist/types/paint/htmlPainter.d.ts +3 -0
- package/dist/types/paint/htmlPainter.d.ts.map +1 -1
- package/dist/types/paint/types.d.ts +2 -0
- package/dist/types/paint/types.d.ts.map +1 -1
- package/dist/types/perf.d.ts +55 -0
- package/dist/types/perf.d.ts.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -75,12 +75,22 @@ new Editor(el, { plugins: [...builtinEmbedPlugins, formulaPlugin] });
|
|
|
75
75
|
|
|
76
76
|
虚拟块是盖在字符流上的假块:负责皮(背景、圆角)和「整段选中」交互。区间里的字仍是文档正文。用户打字**不会**新建虚拟块,只能由业务 API 插入。
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
三种 kind:
|
|
79
79
|
|
|
80
|
+
- **`mark`**:纯样式叠层(高亮底色、边框、文字缺省色等)。**交互与普通文本流完全一致**:点击落光标、方向键逐字走、能选中、能编辑;不进选中/进出状态机,不参与嵌套(`parentId` 恒为 `null`),可与其他块任意叠放。右边缘继续输入算区间内(背景跟着延伸),遇到换行就断;区间内文字删光后自动移除。样式只需配 `chrome.background`、`chrome.radius`(圆角,默认 3;折行时只有首行的上两角和末行的下两角是圆角,其余角为直角,单行自然四角全圆)、`chrome.paddingX`(水平内边距)和 `chrome.hoverBackground`(鼠标悬停时整段含折行各行换成这个底色):
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
editor.insertVirtualBlock({
|
|
84
|
+
kind: 'mark',
|
|
85
|
+
chrome: { background: '#fff3bf', hoverBackground: '#ffe066', radius: 4, paddingX: 5 }
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`paddingX` 只外扩底色/边框,**不参与排版**(字形位置、折行、行高都不变),行首/行尾也会外扩,所以相邻文字和相邻 mark 的底色可能互相重叠;行首行尾的外扩部分画在内容区外:SDK 默认让画布和 `.mini-page-wrap` 左右各多出 5px(负 margin 抵消,文字位置不变),所以 `paddingX` 在 5px 以内开箱即用,更大就要靠编辑器 `padding.x` 补足。**宿主若覆盖 `.mini-page-wrap` 的 `padding`,请保留 `padding-inline: 5px; margin-inline: -5px;`,否则文字会左移 5px、外扩被裁**。不支持垂直内边距。
|
|
80
90
|
- **`region`**:一层皮 / 分组。整段选中时打字、删除会被忽略(保住模板壳)。没有 `editing` 模式。
|
|
81
91
|
- **`virtualSlot`**:最内层文本槽。可进 `editing`;空着时显示 `placeholder`,填了就是用户字;整段删回 placeholder,槽本身留下。
|
|
82
92
|
|
|
83
|
-
|
|
93
|
+
嵌套规则(针对 `region` / `virtualSlot`):只允许包含、不允许交叉;`virtualSlot` 必须是叶子。`mark` 不受此限。日常编辑里业务**不用维护** `[start, end)`,插删字时 SDK 自动挪区间。
|
|
84
94
|
|
|
85
95
|
### 路径 A:整段模板一次插入(推荐)
|
|
86
96
|
|
|
@@ -136,15 +146,18 @@ editor.insertVirtualBlock({
|
|
|
136
146
|
editor.insertVirtualBlock({ kind: 'region', start: 0, end: 20, chrome: { ... } });
|
|
137
147
|
```
|
|
138
148
|
|
|
149
|
+
可配的 `chrome` 字段:`background`、`hoverBackground`(仅 mark)、`radius`、`borderColor` / `borderWidth`、`paddingX`(仅水平)、文字缺省(`color`、`fontSize`、`fontFamily`、`fontWeight`、`bold`、`italic`)、`placeholderColor`(仅 virtualSlot)。
|
|
150
|
+
|
|
139
151
|
改皮 / 拆皮:`updateVirtualBlock(id, chrome)`、`removeVirtualBlock(id)`(只拆皮,字和胶囊留下)。
|
|
140
152
|
|
|
141
153
|
### 业务浮层(Sample / AI 等)
|
|
142
154
|
|
|
143
155
|
SDK 不画业务菜单。宿主自己:
|
|
144
156
|
|
|
145
|
-
1. 听 `statechange`,看 `getState().vblockStack`
|
|
146
|
-
2.
|
|
147
|
-
3.
|
|
157
|
+
1. 听 `statechange`,看 `getState().vblockStack` 栈顶是否是某槽的 `editing`(点击或键盘进入都会触发)
|
|
158
|
+
2. `editor.getVirtualBlockRect(id)` 拿屏幕坐标(clientX/Y,含滚动)定位浮层:`left/top/width/height` 是外接矩形,折行的块还有 `lines`;下拉放在 `left` / `top + height` 即可。滚动或重排后(`layoutchange`)重新取
|
|
159
|
+
3. 写入:槽正处于 `editing` 时直接 `editor.insertText(text)`——空槽会整段覆盖 placeholder,不会进段落
|
|
160
|
+
4. 关闭浮层:栈顶不再是该槽,或点到编辑器外(宿主自己监听)
|
|
148
161
|
|
|
149
162
|
### 和 host 胶囊一起用
|
|
150
163
|
|
|
@@ -189,6 +202,19 @@ editor.commands.insertHostEmbed('Upscale', { label: '@Upscale' }, { width: 88, h
|
|
|
189
202
|
|
|
190
203
|
脚本化改文档也可 `import { operations, runOperation } from '@one2x/medeo-rte'`,不要直接改 `DocumentModel` 的内部表。
|
|
191
204
|
|
|
205
|
+
## 性能探针(开发用)
|
|
206
|
+
|
|
207
|
+
默认关闭、零开销。在浏览器控制台里:
|
|
208
|
+
|
|
209
|
+
```js
|
|
210
|
+
editor.perf.start() // demo 里 window.editor 已暴露;业务里用自己的 editor 实例
|
|
211
|
+
// 连续打字 / 按住方向键 / 中文输入法连续上屏 / 按快捷键……
|
|
212
|
+
editor.perf.report() // 输出各阶段耗时(平均 / p95 / 最大 ms)和帧率
|
|
213
|
+
editor.perf.stop()
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
详细读法与历次优化记录见 [docs/performance.md](./docs/performance.md)。输出包含:`insertText`、`handleComposition`、`moveCaret` 等入口的同步耗时;`relayout`、`paintDoc`、`paintChrome`、`scrollCaret` 等阶段耗时;`xxx→下一帧`(处理开始到下一帧开始,近似输入延迟);以及帧率、帧间隔 p95、掉帧数。120Hz 屏的帧预算是 8.3ms。
|
|
217
|
+
|
|
192
218
|
## 设计文档
|
|
193
219
|
|
|
194
220
|
`docs/` 下是分层架构与技术方案:
|
|
@@ -201,6 +227,8 @@ editor.commands.insertHostEmbed('Upscale', { label: '@Upscale' }, { width: 88, h
|
|
|
201
227
|
| [edits.md](./docs/edits.md) | 事务边界、撤销栈、片段坐标空间、协同预留 |
|
|
202
228
|
| [rendering.md](./docs/rendering.md) | 块级增量排版、脏区带、绘制后端 |
|
|
203
229
|
| [virtual-blocks.md](./docs/virtual-blocks.md) | 虚拟块:模板混排、文本槽、按层选区 |
|
|
230
|
+
| [agent-segment-mapping.md](./docs/agent-segment-mapping.md) | 面向 Agent:用户的 segment 概念如何对应到真实结构与 API |
|
|
231
|
+
| [performance.md](./docs/performance.md) | 性能目标、探针用法、长文档优化记录与待办 |
|
|
204
232
|
|
|
205
233
|
改动模型前先读 architecture.md 的不变式那一节。
|
|
206
234
|
|