@atri-editor/core 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/CHANGELOG.md +28 -0
- package/README.md +1 -1
- package/dist/AtriEditor.d.ts +4 -1
- package/dist/AtriEditor.d.ts.map +1 -1
- package/dist/core/CoreEditor.d.ts +5 -3
- package/dist/core/CoreEditor.d.ts.map +1 -1
- package/dist/core/I18nManager.d.ts.map +1 -1
- package/dist/core/LinkPanel.d.ts +73 -0
- package/dist/core/LinkPanel.d.ts.map +1 -0
- package/dist/core/TableMenu.d.ts +67 -0
- package/dist/core/TableMenu.d.ts.map +1 -0
- package/dist/core/ToolbarManager.d.ts +8 -2
- package/dist/core/ToolbarManager.d.ts.map +1 -1
- package/dist/core/icons.d.ts.map +1 -1
- package/dist/extensions/table.d.ts +23 -0
- package/dist/extensions/table.d.ts.map +1 -0
- package/dist/index.js +685 -31
- package/dist/index.js.map +1 -1
- package/dist/style.css +125 -4
- package/dist/types/editor.d.ts +31 -2
- package/dist/types/editor.d.ts.map +1 -1
- package/dist/utils/table.d.ts +11 -4
- package/dist/utils/table.d.ts.map +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# @atri-editor/core
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- d3b367d: 表格与链接补上操作入口,其中链接的点击行为有变更。
|
|
8
|
+
|
|
9
|
+
### 表格
|
|
10
|
+
- 光标进入表格时在单元格上方浮出操作菜单:上/下插入行、删行、左/右插入列、删列、合并单元格、拆分单元格、切换表头行、单元格左/中/右对齐、删除表格。合并与拆分够不着时是禁用而不是隐藏,位置不跳
|
|
11
|
+
- 列宽可拖拽(`table.resizable`,默认开),拖出来的列宽写回单元格 `colwidth`,随 JSON / HTML 一起保存
|
|
12
|
+
- 单元格对齐写在单元格自带的 `align` 属性上,导出 Markdown 时落到 pipe table 分隔行的 `:---` / `---:` / `:---:`,双向都不丢
|
|
13
|
+
- `table` 选项从 `boolean` 扩为 `boolean | AtriTableConfig`(`{ resizable?, menu? }`);`false` 的语义不变,仍是节点、按钮、菜单与 `insertTable()` 一并不提供
|
|
14
|
+
|
|
15
|
+
### 链接
|
|
16
|
+
- 新增工具栏「链接」项与插入 / 编辑浮层:填地址、切「在新窗口打开」、移除链接;只贴域名会自动补 `https://`
|
|
17
|
+
- **行为变更**:`openOnClick` 默认从 Tiptap 的 `true` 改为 `false`。编辑态点击链接不再导航,而是在浮层里就地编辑——此前这次点击会被链接扩展整个吃掉(连光标都放不进去)并打开新标签页,未保存的内容会跟着一起丢。需要原来的导航行为就显式设 `link: { openOnClick: true }`
|
|
18
|
+
- 新增 `link.target`(默认 `'_blank'`)与 `link.markdownLinks`(默认 false)
|
|
19
|
+
|
|
20
|
+
### 其他
|
|
21
|
+
- 新增 i18n 词条 `table.*` 与 `link.*`(中英双语)
|
|
22
|
+
- `ToolbarManager.updateButtonStates()` 由私有改为公开:挂在门面上的浮层开合不改文档,等不到 transaction,按钮状态需要外部主动刷一次
|
|
23
|
+
|
|
24
|
+
- 938fd17: 工具栏补上任务列表、分割线与两端对齐。
|
|
25
|
+
|
|
26
|
+
- 任务列表:一键把段落转成任务列表,勾选框写回 `checked`;Markdown 以 `- [ ]` / `- [x]` 双向往返,嵌套任务列表也不丢。新增运行时依赖 `@tiptap/extension-list`(与 StarterKit 同源同版本,不引入新的传递依赖)
|
|
27
|
+
- 分割线:工具栏可插 `<hr>`,与插入表格同组(都是"往正文里插一块"的动作),Markdown 以 `---` 往返
|
|
28
|
+
- 两端对齐:`alignJustify` 命令与快捷键此前已存在,这次补上按钮
|
|
29
|
+
- 内置项 id 新增 `taskList` `horizontalRule` `alignJustify`;默认布局按钮数 22 → 25,分组数不变
|
|
30
|
+
|
|
3
31
|
## 0.2.0
|
|
4
32
|
|
|
5
33
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @atri-editor/core
|
|
2
2
|
|
|
3
|
-
基于 Tiptap v3 的框架无关富文本编辑器:Web Component、Markdown
|
|
3
|
+
基于 Tiptap v3 的框架无关富文本编辑器:Web Component、Markdown 双向转换、表格(网格选择器插入、操作菜单与列宽拖拽、pipe table 双向转换)、链接插入与编辑浮层、任务列表(`- [ ]` 双向)、图片与附件上传管线、可插拔 AI 集成、中英文 i18n 与亮/暗主题。
|
|
4
4
|
|
|
5
5
|
完整文档见 [仓库 README](https://github.com/CherishDreams/atri-editor#readme),示例见 [demos/](https://github.com/CherishDreams/atri-editor/tree/main/demos)(vanilla / vue / react 三个)。
|
|
6
6
|
|
package/dist/AtriEditor.d.ts
CHANGED
|
@@ -19,6 +19,9 @@ export declare class AtriEditor implements IAtriEditor {
|
|
|
19
19
|
private toolbarContainer;
|
|
20
20
|
private aiService;
|
|
21
21
|
private aiMenuManager;
|
|
22
|
+
/** 链接浮层与表格操作菜单归门面所有:两者都跟着"编辑行为"走,与工具栏渲染与否无关 */
|
|
23
|
+
private linkPanel;
|
|
24
|
+
private tableMenu;
|
|
22
25
|
private mediaRuntime;
|
|
23
26
|
private mediaStatus;
|
|
24
27
|
/** 重建后待恢复的选区,新视图就绪时应用 */
|
|
@@ -41,7 +44,7 @@ export declare class AtriEditor implements IAtriEditor {
|
|
|
41
44
|
* 逐项手抄两遍必然漂移——出错的第一现场就是两处不齐
|
|
42
45
|
*/
|
|
43
46
|
private createCoreEditor;
|
|
44
|
-
/** 初始化依赖编辑器实例的子系统:Markdown
|
|
47
|
+
/** 初始化依赖编辑器实例的子系统:Markdown 服务、链接浮层、工具栏、表格菜单、AI 服务,重建后同样要重新走一遍 */
|
|
45
48
|
private setupSubsystems;
|
|
46
49
|
/**
|
|
47
50
|
* 重新创建编辑器(用于动态注册 NodeView 后更新 schema)
|
package/dist/AtriEditor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AtriEditor.d.ts","sourceRoot":"","sources":["../src/AtriEditor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"AtriEditor.d.ts","sourceRoot":"","sources":["../src/AtriEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Editor, type EditorOptions } from '@tiptap/core';
|
|
5
5
|
import { MediaRuntime } from '../media/MediaRuntime';
|
|
6
|
-
import type { AtriMarkdownConfig, AtriMediaConfig } from '../types';
|
|
6
|
+
import type { AtriLinkConfig, AtriMarkdownConfig, AtriMediaConfig, AtriTableConfig } from '../types';
|
|
7
7
|
export interface CoreEditorConfig {
|
|
8
8
|
element: HTMLElement;
|
|
9
9
|
content?: string | object;
|
|
@@ -14,8 +14,10 @@ export interface CoreEditorConfig {
|
|
|
14
14
|
markdown?: AtriMarkdownConfig;
|
|
15
15
|
/** 媒体(图片 / 附件)配置,false 时不注册任何媒体节点 */
|
|
16
16
|
media?: AtriMediaConfig | false;
|
|
17
|
-
/**
|
|
18
|
-
table?: boolean;
|
|
17
|
+
/** 表格配置,false 时不注册 Table 扩展,工具栏也不出插入按钮;默认开 */
|
|
18
|
+
table?: boolean | AtriTableConfig;
|
|
19
|
+
/** 链接配置,省略时编辑态点击不导航 */
|
|
20
|
+
link?: AtriLinkConfig;
|
|
19
21
|
/**
|
|
20
22
|
* 复用外部的上传运行时
|
|
21
23
|
* AtriEditor 重建编辑器时会把同一个实例传进来,进行中的上传才不会丢
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoreEditor.d.ts","sourceRoot":"","sources":["../../src/core/CoreEditor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"CoreEditor.d.ts","sourceRoot":"","sources":["../../src/core/CoreEditor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AASxE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EAChB,MAAM,UAAU,CAAC;AASlB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,qCAAqC;IACrC,KAAK,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC;IAChC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IAClC,uBAAuB;IACvB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAmB;IACjC,6CAA6C;IAC7C,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAsB;IAE1C,YAAY,MAAM,EAAE,gBAAgB,EAMnC;IAED,OAAO,CAAC,YAAY;IAgIpB;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI,CAErC;IAED;;OAEG;IACH,SAAS,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,OAAO,IAAI,MAAM,CAehB;IAED;;OAEG;IACH,OAAO,IAAI,MAAM,CAEhB;IAED;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,UAAO,GAAG,IAAI,CAE5D;IAED;;OAEG;IACH,YAAY,IAAI,IAAI,CAEnB;IAED;;OAEG;IACH,OAAO,IAAI,OAAO,CAEjB;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAEnC;IAED;;OAEG;IACH,UAAU,IAAI,OAAO,CAEpB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAEZ;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,CAEX;IAED;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEnC;IAED;;;;OAIG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAGxC;IAED;;OAEG;IACH,OAAO,IAAI,IAAI,CAEd;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"I18nManager.d.ts","sourceRoot":"","sources":["../../src/core/I18nManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"I18nManager.d.ts","sourceRoot":"","sources":["../../src/core/I18nManager.ts"],"names":[],"mappings":"AAmKA,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAe;IAE/B,YAAY,IAAI,GAAE,MAAa,EAa9B;IAED;;OAEG;IACH,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAExD;IAED;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAG5E;IAED;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhD;IAED;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAG7D;IAED;;OAEG;IACH,WAAW,IAAI,MAAM,CAEpB;CACF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LinkPanel - 链接插入 / 编辑浮层
|
|
3
|
+
*
|
|
4
|
+
* 与 InsertPanel 同为挂在 document.body 上的浮层,定位 / 关闭 / 主题三段走 floating-panel 公共底盘。
|
|
5
|
+
*
|
|
6
|
+
* 链接此前只有 schema 与命令、没有任何入口:工具栏没有按钮,插进去也改不了,
|
|
7
|
+
* 而编辑态点击又会按链接扩展的默认行为直接导航,等于把当前页面连同未保存的内容一起交出去。
|
|
8
|
+
* 这个浮层补上入口,同时把"点链接"改成"就地编辑"。
|
|
9
|
+
*/
|
|
10
|
+
import type { Editor } from '@tiptap/core';
|
|
11
|
+
import { type I18nManager } from './I18nManager';
|
|
12
|
+
import type { AtriLinkTarget } from '../types';
|
|
13
|
+
export interface LinkPanelOptions {
|
|
14
|
+
editor: Editor;
|
|
15
|
+
/**
|
|
16
|
+
* 编辑器根容器(.atri-editor)
|
|
17
|
+
*
|
|
18
|
+
* 点击监听与主题类都挂在它身上,不碰 editor.view.dom:Tiptap v3 的视图是迟到且会被销毁的,
|
|
19
|
+
* 构造时未必拿得到、销毁时已经没了,而这个容器由门面创建,生命周期与编辑器实例一致
|
|
20
|
+
*/
|
|
21
|
+
root: HTMLElement;
|
|
22
|
+
i18n?: I18nManager;
|
|
23
|
+
/** 与交给链接扩展的 openOnClick 同源:扩展负责导航时浮层不抢点击 */
|
|
24
|
+
openOnClick?: boolean;
|
|
25
|
+
/** 新链接的打开方式,默认 '_blank' */
|
|
26
|
+
target?: AtriLinkTarget;
|
|
27
|
+
/** 开合时把控制权交回工具栏:按钮的 active 与 aria-expanded 由它维护 */
|
|
28
|
+
onOpenChange?: (open: boolean) => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 补全协议:用户多半只贴 example.com,补成 https:// 浏览器与 Markdown 两边才都认。
|
|
32
|
+
* 已有协议的(https:、mailto:…)与站内绝对路径 / 锚点 / 相对路径原样保留
|
|
33
|
+
*/
|
|
34
|
+
export declare function normalizeHref(value: string): string;
|
|
35
|
+
export declare class LinkPanel {
|
|
36
|
+
private editor;
|
|
37
|
+
private root;
|
|
38
|
+
private i18n?;
|
|
39
|
+
private openOnClick;
|
|
40
|
+
private defaultTarget;
|
|
41
|
+
private onOpenChange?;
|
|
42
|
+
private unsubscribeLanguage?;
|
|
43
|
+
private element;
|
|
44
|
+
private floating;
|
|
45
|
+
private detachDismiss;
|
|
46
|
+
private labelled;
|
|
47
|
+
private urlInput;
|
|
48
|
+
private targetInput;
|
|
49
|
+
/** 打开时选区内是否已有链接:决定"确定"是改这一条还是新插一条 */
|
|
50
|
+
private editing;
|
|
51
|
+
constructor(options: LinkPanelOptions);
|
|
52
|
+
get isOpen(): boolean;
|
|
53
|
+
toggle(anchor: HTMLElement): void;
|
|
54
|
+
open(anchor: HTMLElement): void;
|
|
55
|
+
close(): void;
|
|
56
|
+
destroy(): void;
|
|
57
|
+
/**
|
|
58
|
+
* 编辑态点击链接就地编辑(与 wangEditor / AIEditor 一致)
|
|
59
|
+
*
|
|
60
|
+
* 拖选收尾也会派发 click,所以只在选区收拢时接管;openOnClick 开着说明点击归扩展导航
|
|
61
|
+
*/
|
|
62
|
+
private onEditorClick;
|
|
63
|
+
private t;
|
|
64
|
+
/** 登记一处随语言重画的文案:input 画到 placeholder,其他画成文字 */
|
|
65
|
+
private label;
|
|
66
|
+
private applyLabels;
|
|
67
|
+
private applyLabel;
|
|
68
|
+
private build;
|
|
69
|
+
/** 有链接就整条改(extendMarkRange 把范围摊到整段链接),没链接就看选区:套住它,或者把地址本身当链接文字插进去 */
|
|
70
|
+
private apply;
|
|
71
|
+
private remove;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=LinkPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkPanel.d.ts","sourceRoot":"","sources":["../../src/core/LinkPanel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAO3C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAQD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAc;IAC3B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,YAAY,CAAC,CAA0B;IAC/C,OAAO,CAAC,mBAAmB,CAAC,CAAa;IAEzC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,WAAW,CAAiC;IACpD,qCAAqC;IACrC,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,OAAO,EAAE,gBAAgB,EAWpC;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAMhC;IAED,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAU9B;IAED,KAAK,IAAI,IAAI,CAeZ;IAED,OAAO,IAAI,IAAI,CAKd;IAED;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAcnB;IAEF,OAAO,CAAC,CAAC;IAIT,+CAA+C;IAC/C,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,KAAK;IA+Db,qEAAqE;IACrE,OAAO,CAAC,KAAK;IAyBb,OAAO,CAAC,MAAM;CAIf"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TableMenu - 光标落在表格里时浮出的上下文操作菜单
|
|
3
|
+
*
|
|
4
|
+
* 与工具栏浮层(InsertPanel / TableGridPanel)同一套外观,但触发方式不同:它没有锚点按钮,
|
|
5
|
+
* 靠选区进入表格自动浮出,所以定位锚是「当前单元格的 DOM 盒子」,量不到再退回光标坐标
|
|
6
|
+
* (AICommandMenu 的虚拟锚点写法)。
|
|
7
|
+
*
|
|
8
|
+
* 行列增删合并这些命令由 prosemirror-tables 提供,此前只有命令没有入口,
|
|
9
|
+
* 表格因此是"插得出来、改不动"的半成品。
|
|
10
|
+
*/
|
|
11
|
+
import type { Editor } from '@tiptap/core';
|
|
12
|
+
import { type I18nManager } from './I18nManager';
|
|
13
|
+
export interface TableMenuOptions {
|
|
14
|
+
editor: Editor;
|
|
15
|
+
/**
|
|
16
|
+
* 编辑器根容器(.atri-editor):只用来复制主题类
|
|
17
|
+
*
|
|
18
|
+
* 不取 editor.view.dom:那个视图是迟到且会被销毁的,而这个容器由门面创建,生命周期一致
|
|
19
|
+
*/
|
|
20
|
+
root: HTMLElement;
|
|
21
|
+
i18n?: I18nManager;
|
|
22
|
+
}
|
|
23
|
+
export declare class TableMenu {
|
|
24
|
+
private editor;
|
|
25
|
+
private root;
|
|
26
|
+
private i18n?;
|
|
27
|
+
private items;
|
|
28
|
+
private unsubscribeLanguage?;
|
|
29
|
+
private element;
|
|
30
|
+
private detachEscape;
|
|
31
|
+
/** Escape 收起后不再自动浮出,直到光标离开表格(否则下一次状态更新立刻又把它拉出来) */
|
|
32
|
+
private dismissed;
|
|
33
|
+
constructor(options: TableMenuOptions);
|
|
34
|
+
get isOpen(): boolean;
|
|
35
|
+
destroy(): void;
|
|
36
|
+
private t;
|
|
37
|
+
/**
|
|
38
|
+
* 按当前选区决定浮出还是收起。光标在表格里是唯一条件——
|
|
39
|
+
* 空选区、单元格内选一段字、框选多个单元格都算
|
|
40
|
+
*
|
|
41
|
+
* 听的是 update 而不是 transaction:setEditable 只发 update(造一个空事务),
|
|
42
|
+
* 切只读时若不跟着重判,菜单会留在只读的表格上
|
|
43
|
+
*/
|
|
44
|
+
private sync;
|
|
45
|
+
/** 点到编辑器外面就收起来:菜单没有"关了还要在"的理由,焦点回来时 sync 会重新浮出 */
|
|
46
|
+
private onBlur;
|
|
47
|
+
private onScroll;
|
|
48
|
+
private dismiss;
|
|
49
|
+
private show;
|
|
50
|
+
private hide;
|
|
51
|
+
/**
|
|
52
|
+
* Escape 收起菜单。这里不用 floating-panel 的 listenPanelDismiss:那一套还管外点关闭,
|
|
53
|
+
* 而点外面多半仍落在同一个单元格里,关了立刻被下一次状态更新重新浮出,只会闪
|
|
54
|
+
*/
|
|
55
|
+
private listenEscape;
|
|
56
|
+
private build;
|
|
57
|
+
private applyLabels;
|
|
58
|
+
private updateStates;
|
|
59
|
+
/**
|
|
60
|
+
* 当前单元格的虚拟锚点;量不到返回 null,调用方保持面板可见但不改坐标
|
|
61
|
+
*
|
|
62
|
+
* 优先锚在单元格盒子上(菜单跟着格子走,比跟着光标稳),拿不到盒子才退回光标坐标
|
|
63
|
+
*/
|
|
64
|
+
private anchor;
|
|
65
|
+
private position;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=TableMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableMenu.d.ts","sourceRoot":"","sources":["../../src/core/TableMenu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAG9D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAiJD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IAEzC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,YAAY,CAA2B;IAC/C,mDAAmD;IACnD,OAAO,CAAC,SAAS,CAAS;IAE1B,YAAY,OAAO,EAAE,gBAAgB,EAepC;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,OAAO,IAAI,IAAI,CASd;IAED,OAAO,CAAC,CAAC;IAIT;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,CAeV;IAEF,kDAAkD;IAClD,OAAO,CAAC,MAAM,CAEZ;IAEF,OAAO,CAAC,QAAQ,CAEd;IAEF,OAAO,CAAC,OAAO,CAGb;IAEF,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,IAAI;IAQZ;;;OAGG;IACH,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,KAAK;IAuCb,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,YAAY;IAYpB;;;;OAIG;IACH,OAAO,CAAC,MAAM;YA4BA,QAAQ;CA0BvB"}
|
|
@@ -6,6 +6,7 @@ import { type Editor } from '@tiptap/core';
|
|
|
6
6
|
import type { ToolbarConfig } from '../types';
|
|
7
7
|
import type { MediaRuntime } from '../media/MediaRuntime';
|
|
8
8
|
import type { I18nManager } from './I18nManager';
|
|
9
|
+
import type { LinkPanel } from './LinkPanel';
|
|
9
10
|
/**
|
|
10
11
|
* 工具栏管理器
|
|
11
12
|
*/
|
|
@@ -15,6 +16,8 @@ export declare class ToolbarManager {
|
|
|
15
16
|
private i18n?;
|
|
16
17
|
private config?;
|
|
17
18
|
private mediaRuntime;
|
|
19
|
+
/** 链接浮层由门面持有:编辑态点击链接也要能打开它,跟工具栏渲染不渲染无关 */
|
|
20
|
+
private linkPanel;
|
|
18
21
|
private unsubscribeLanguage?;
|
|
19
22
|
/** 同一个项可能同时渲染在顶栏与浮动工具栏里,所以一个 id 对应一组按钮 */
|
|
20
23
|
private buttons;
|
|
@@ -24,7 +27,7 @@ export declare class ToolbarManager {
|
|
|
24
27
|
private createdElements;
|
|
25
28
|
private panel;
|
|
26
29
|
private tablePanel;
|
|
27
|
-
constructor(editor: Editor, container: HTMLElement, config?: ToolbarConfig, i18n?: I18nManager, mediaRuntime?: MediaRuntime | null);
|
|
30
|
+
constructor(editor: Editor, container: HTMLElement, config?: ToolbarConfig, i18n?: I18nManager, mediaRuntime?: MediaRuntime | null, linkPanel?: LinkPanel | null);
|
|
28
31
|
/**
|
|
29
32
|
* 把浮动工具栏的按钮渲染进给定的元素
|
|
30
33
|
*
|
|
@@ -66,8 +69,11 @@ export declare class ToolbarManager {
|
|
|
66
69
|
private bindEditorEvents;
|
|
67
70
|
/**
|
|
68
71
|
* 更新所有按钮状态
|
|
72
|
+
*
|
|
73
|
+
* 公开是因为浮层开合不改文档,等不到 transaction:挂在门面上的浮层(链接)
|
|
74
|
+
* 由门面在开合时叫一次,挂在这里的浮层则在 onOpenChange 里叫
|
|
69
75
|
*/
|
|
70
|
-
|
|
76
|
+
updateButtonStates(): void;
|
|
71
77
|
/**
|
|
72
78
|
* 销毁工具栏
|
|
73
79
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarManager.d.ts","sourceRoot":"","sources":["../../src/core/ToolbarManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,UAAU,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ToolbarManager.d.ts","sourceRoot":"","sources":["../../src/core/ToolbarManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,UAAU,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAoD7C;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAC,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAsB;IAC1C,0CAA0C;IAC1C,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,0CAA0C;IAC1C,OAAO,CAAC,OAAO,CAAkD;IACjE,2CAA2C;IAC3C,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,UAAU,CAA+B;IAEjD,YACE,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,WAAW,EACtB,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE,WAAW,EAClB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,EAClC,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,EAa7B;IAED;;;;;OAKG;IACH,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAoC9C;IAED;;OAEG;IACH,OAAO,KAAK,WAAW,GAUtB;IAED,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,KAAK,SAAS,GASpB;IAED,oEAAoE;IACpE,OAAO,KAAK,wBAAwB,GAEnC;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmDxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,YAAY;IA4CpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IA+RvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;;;;OAKG;IACH,kBAAkB,IAAI,IAAI,CAiBzB;IAED;;OAEG;IACH,OAAO,IAAI,IAAI,CAad;CACF"}
|
package/dist/core/icons.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/core/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/core/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsGxC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 表格扩展装配
|
|
3
|
+
*
|
|
4
|
+
* 增量只有一处:列宽拖拽默认打开。单元格对齐不必动 schema —— extension-table 的单元格
|
|
5
|
+
* 自带 align 属性(解析 style="text-align: …",Markdown 的 pipe table 分隔行也对到它,
|
|
6
|
+
* 双向都通),缺的只是按得动的按钮,那是操作菜单的事。
|
|
7
|
+
*/
|
|
8
|
+
import type { EditorOptions } from '@tiptap/core';
|
|
9
|
+
import type { AtriTableConfig } from '../types';
|
|
10
|
+
/**
|
|
11
|
+
* 补上默认值,供扩展装配与操作菜单共用:两处必须看到同一个配置,
|
|
12
|
+
* 否则会出现"菜单浮得出来,节点却没注册"这种按了没反应的组合
|
|
13
|
+
*
|
|
14
|
+
* 只归一化 true / undefined / 对象三种写法,false(不注册表格)由调用方先行拦掉
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveTableConfig(table?: boolean | AtriTableConfig): Required<AtriTableConfig>;
|
|
17
|
+
/**
|
|
18
|
+
* 构造表格扩展
|
|
19
|
+
*
|
|
20
|
+
* 四件套在这里集中,调用方不必知道 resizable 落在那一个扩展上
|
|
21
|
+
*/
|
|
22
|
+
export declare function createTableExtensions(table?: AtriTableConfig): NonNullable<EditorOptions['extensions']>;
|
|
23
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/extensions/table.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAQhD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC,CAE/F;AAcD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,EAAE,eAAe,GACtB,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAI1C"}
|