@atri-editor/core 0.3.0 → 0.4.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 +147 -0
- package/dist/AtriEditor.d.ts +7 -0
- package/dist/AtriEditor.d.ts.map +1 -1
- package/dist/AtriEditorElement.d.ts +14 -1
- package/dist/AtriEditorElement.d.ts.map +1 -1
- package/dist/ai/AICommandMenu.d.ts +1 -0
- package/dist/ai/AICommandMenu.d.ts.map +1 -1
- package/dist/ai/AIInterceptor.d.ts.map +1 -1
- package/dist/ai/AIService.d.ts.map +1 -1
- package/dist/core/CoreEditor.d.ts +9 -0
- package/dist/core/CoreEditor.d.ts.map +1 -1
- package/dist/core/I18nManager.d.ts +25 -0
- package/dist/core/I18nManager.d.ts.map +1 -1
- package/dist/core/LinkPanel.d.ts +1 -0
- package/dist/core/LinkPanel.d.ts.map +1 -1
- package/dist/core/StyleOptionPanel.d.ts +73 -0
- package/dist/core/StyleOptionPanel.d.ts.map +1 -0
- package/dist/core/TableGridPanel.d.ts +1 -0
- package/dist/core/TableGridPanel.d.ts.map +1 -1
- package/dist/core/TableMenu.d.ts +1 -0
- package/dist/core/TableMenu.d.ts.map +1 -1
- package/dist/core/ThemeManager.d.ts.map +1 -1
- package/dist/core/ToolbarManager.d.ts +50 -1
- package/dist/core/ToolbarManager.d.ts.map +1 -1
- package/dist/core/ToolbarMenuPanel.d.ts +58 -0
- package/dist/core/ToolbarMenuPanel.d.ts.map +1 -0
- package/dist/core/bubble-toolbar.d.ts +8 -2
- package/dist/core/bubble-toolbar.d.ts.map +1 -1
- package/dist/core/floating-panel.d.ts +24 -1
- package/dist/core/floating-panel.d.ts.map +1 -1
- package/dist/core/icons.d.ts.map +1 -1
- package/dist/core/style-presets.d.ts +47 -0
- package/dist/core/style-presets.d.ts.map +1 -0
- package/dist/extensions/Attachment.d.ts.map +1 -1
- package/dist/extensions/AttachmentLink.d.ts.map +1 -1
- package/dist/extensions/attachment-attrs.d.ts.map +1 -1
- package/dist/extensions/formatting.d.ts +24 -0
- package/dist/extensions/formatting.d.ts.map +1 -0
- package/dist/extensions/markdown-inline-html.d.ts +73 -0
- package/dist/extensions/markdown-inline-html.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1381 -198
- package/dist/index.js.map +1 -1
- package/dist/media/InsertPanel.d.ts +1 -0
- package/dist/media/InsertPanel.d.ts.map +1 -1
- package/dist/media/MediaRuntime.d.ts +13 -0
- package/dist/media/MediaRuntime.d.ts.map +1 -1
- package/dist/media/MediaStatusStrip.d.ts.map +1 -1
- package/dist/media/Uploader.d.ts.map +1 -1
- package/dist/style.css +186 -0
- package/dist/types/ai.d.ts +5 -0
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/editor.d.ts +18 -1
- package/dist/types/editor.d.ts.map +1 -1
- package/dist/types/markdown.d.ts +14 -0
- package/dist/types/markdown.d.ts.map +1 -1
- package/dist/types/media.d.ts +5 -0
- package/dist/types/media.d.ts.map +1 -1
- package/dist/utils/escape.d.ts +30 -0
- package/dist/utils/escape.d.ts.map +1 -0
- package/dist/utils/formatting.d.ts +18 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/markdown.d.ts +5 -3
- package/dist/utils/markdown.d.ts.map +1 -1
- package/dist/utils/safe-call.d.ts +15 -0
- package/dist/utils/safe-call.d.ts.map +1 -0
- package/dist/utils/url.d.ts +20 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolbarMenuPanel - 工具栏项的下拉菜单(ToolbarItem.children 的落地)
|
|
3
|
+
*
|
|
4
|
+
* 与 StyleOptionPanel 是同一类东西的两个特例,所以结构上有八成相似
|
|
5
|
+
* (锚定、外点与 Escape 关闭、主题跟随、方向键走完列表、共用实例时按 key 归属按下态)。
|
|
6
|
+
* 没有在这里合并成一个带 mode 开关的类,是跟本仓库自己的先例走:
|
|
7
|
+
* 浮层公共底盘是在第三份出现时才抽出去的(见提交 2764ef6),两份先并存。
|
|
8
|
+
* 第三份浮层出现时一起抽,比现在为了少 60 行而给两边都加条件分支更划算。
|
|
9
|
+
*/
|
|
10
|
+
import type { Editor } from '@tiptap/core';
|
|
11
|
+
/** 菜单里的一行。active / disabled 在打开那一刻算好——开着菜单时选区不会变,
|
|
12
|
+
* 因为点进正文的那一下 pointerdown 就已经把菜单关掉了 */
|
|
13
|
+
export interface ToolbarMenuItemRow {
|
|
14
|
+
id: string;
|
|
15
|
+
label: string;
|
|
16
|
+
active: boolean;
|
|
17
|
+
disabled: boolean;
|
|
18
|
+
run: () => void;
|
|
19
|
+
}
|
|
20
|
+
export interface ToolbarMenuSpec {
|
|
21
|
+
/** 触发这一菜单的工具栏项 id,按下态只归它 */
|
|
22
|
+
key: string;
|
|
23
|
+
/** 面板的无障碍名字 */
|
|
24
|
+
label: string;
|
|
25
|
+
rows: ToolbarMenuItemRow[];
|
|
26
|
+
}
|
|
27
|
+
export interface ToolbarMenuPanelOptions {
|
|
28
|
+
editor: Editor;
|
|
29
|
+
/** 开合时把控制权交回工具栏:按钮的 active 与 aria-expanded 由它维护 */
|
|
30
|
+
onOpenChange?: (open: boolean) => void;
|
|
31
|
+
}
|
|
32
|
+
export declare class ToolbarMenuPanel {
|
|
33
|
+
private editor;
|
|
34
|
+
private onOpenChange?;
|
|
35
|
+
private element;
|
|
36
|
+
private floating;
|
|
37
|
+
private detachDismiss;
|
|
38
|
+
private detachTheme;
|
|
39
|
+
private anchor;
|
|
40
|
+
private currentKey;
|
|
41
|
+
private rows;
|
|
42
|
+
constructor(options: ToolbarMenuPanelOptions);
|
|
43
|
+
get isOpen(): boolean;
|
|
44
|
+
get openKey(): string | null;
|
|
45
|
+
toggle(anchor: HTMLElement, spec: ToolbarMenuSpec): void;
|
|
46
|
+
close(): void;
|
|
47
|
+
destroy(): void;
|
|
48
|
+
private open;
|
|
49
|
+
/**
|
|
50
|
+
* 主题类要从编辑器根上取,而这里只拿得到一个锚在工具栏上的按钮:
|
|
51
|
+
* 沿 DOM 往上找 .atri-editor 比让调用方再多传一个参数省事,且工具栏就在那个根里面
|
|
52
|
+
*/
|
|
53
|
+
private editorViewDom;
|
|
54
|
+
private build;
|
|
55
|
+
private makeRow;
|
|
56
|
+
private onKeyDown;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=ToolbarMenuPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolbarMenuPanel.d.ts","sourceRoot":"","sources":["../../src/core/ToolbarMenuPanel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQ3C;uCACuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,kBAAkB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAC,CAA0B;IAE/C,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,IAAI,CAA2B;IAEvC,YAAY,OAAO,EAAE,uBAAuB,EAG3C;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAQvD;IAED,KAAK,IAAI,IAAI,CAcZ;IAED,OAAO,IAAI,IAAI,CAEd;IAED,OAAO,CAAC,IAAI;IAaZ;;;OAGG;IACH,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,OAAO;IA0Bf,OAAO,CAAC,SAAS;CAiBlB"}
|
|
@@ -8,8 +8,14 @@ import { type Editor } from '@tiptap/core';
|
|
|
8
8
|
import type { EditorState } from '@tiptap/pm/state';
|
|
9
9
|
/** 浮层的作用对象:一段文字,还是一个整节点 */
|
|
10
10
|
export type BubbleGroup = 'text' | 'node';
|
|
11
|
-
/**
|
|
12
|
-
|
|
11
|
+
/**
|
|
12
|
+
* 文字组只放行内格式:块级与列表留在顶栏,浮层短到不遮住所选的字。
|
|
13
|
+
*
|
|
14
|
+
* 只收纯开关——带浮层的选择面板进不了这里(按钮随浮层一起被摘出文档,面板无处可锚,
|
|
15
|
+
* 见 ToolbarManager.attachBubbleToolbar 的告警)。所以是"高亮"这个开关而不是"挑高亮色"。
|
|
16
|
+
* 项 id 必须与 mark 名同形,allowsBubbleMark 就是拿它去查 schema 的。
|
|
17
|
+
*/
|
|
18
|
+
export declare const BUBBLE_TEXT_ITEMS: readonly ['bold', 'italic', 'underline', 'strike', 'code', 'highlight', 'subscript', 'superscript'];
|
|
13
19
|
/** 节点组换一批:附件能切形态,图片与附件都能删 */
|
|
14
20
|
export declare const BUBBLE_NODE_ITEMS: readonly ['attachmentDisplay', 'delete'];
|
|
15
21
|
/** 选中这些节点才有可施加的操作,别的整节点选择(将来的 atom 之类)什么都不浮 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bubble-toolbar.d.ts","sourceRoot":"","sources":["../../src/core/bubble-toolbar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,2BAA2B;AAC3B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C
|
|
1
|
+
{"version":3,"file":"bubble-toolbar.d.ts","sourceRoot":"","sources":["../../src/core/bubble-toolbar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,2BAA2B;AAC3B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,YAC5B,MAAM,EACN,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,MAAM,EACN,WAAW,EACX,WAAW,EACX,aAAa,CACL,CAAC;AAEX,6BAA6B;AAC7B,eAAO,MAAM,iBAAiB,YAAI,mBAAmB,EAAE,QAAQ,CAAU,CAAC;AAE1E,+CAA+C;AAC/C,eAAO,MAAM,uBAAuB,YAAI,OAAO,EAAE,YAAY,EAAE,gBAAgB,CAAU,CAAC;AAE1F;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAInE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAGrE;AAiBD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,OAAO,CAoBV"}
|
|
@@ -1,7 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* floating-panel - 工具栏浮层的公共底盘
|
|
3
|
+
*
|
|
4
|
+
* 浮层统一挂 document.body + fixed 定位:工具栏链路任何一处 overflow 都会裁掉子元素。
|
|
5
|
+
* InsertPanel / TableGridPanel / LinkPanel / TableMenu / 格式选择面板共用这里的
|
|
6
|
+
* 定位、外点与 Escape 关闭、主题类跟随三段。
|
|
7
|
+
*/
|
|
8
|
+
import { flip, offset, shift } from '@floating-ui/dom';
|
|
1
9
|
export interface FloatingPanel {
|
|
2
10
|
/** 停止位置跟随;重复调用无副作用 */
|
|
3
11
|
stop: () => void;
|
|
4
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* 浮层共用的三段中间件:溢出翻转 + 贴边收拢。
|
|
15
|
+
*
|
|
16
|
+
* 各处只有 placement 不同(工具栏向下、表格菜单贴着单元格向上),
|
|
17
|
+
* 这三个参数此前被抄成 offset(6)/offset(6)/offset(8)、shift(8)/shift(8)/shift(),
|
|
18
|
+
* 差的那 2px 没人说得清是有意还是漏改
|
|
19
|
+
*/
|
|
20
|
+
export declare function panelMiddleware(): ReturnType<typeof offset | typeof flip | typeof shift>[];
|
|
21
|
+
/** 落位:浮层统一 fixed,坐标是 computePosition 给的视口值 */
|
|
22
|
+
export declare function placePanel(panel: HTMLElement, x: number, y: number): void;
|
|
5
23
|
/**
|
|
6
24
|
* 把面板锚定到 trigger 下方并持续跟随。
|
|
7
25
|
* isCurrent 用于在异步计算间隙确认面板还没被关掉/换掉——关掉的实例不该再写样式
|
|
@@ -15,6 +33,11 @@ export declare function listenPanelDismiss(trigger: HTMLElement, panel: HTMLElem
|
|
|
15
33
|
/**
|
|
16
34
|
* 主题变量写在 .atri-editor 上,浮层挂在 body 上够不着,只能把主题类复制一份。
|
|
17
35
|
* 面板此刻往往还没入 DOM,closest 搜不到编辑器根,所以源元素必须由编辑器侧给(如 view.dom)
|
|
36
|
+
*
|
|
37
|
+
* 只复制一次是不够的:ThemeManager 换主题只动容器上的 class,已经打开的浮层无从得知,
|
|
38
|
+
* 于是"开着面板切主题"会得到一个浅色面板配深色正文。这里改成持续跟随:
|
|
39
|
+
* 观察者盯的是容器自己的 class(面板自己的改动不会触发它,没有回环),
|
|
40
|
+
* 返回的 disposer 由面板在关闭与销毁时调用。
|
|
18
41
|
*/
|
|
19
|
-
export declare function
|
|
42
|
+
export declare function followThemeClasses(source: Element | null, panel: HTMLElement): () => void;
|
|
20
43
|
//# sourceMappingURL=floating-panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floating-panel.d.ts","sourceRoot":"","sources":["../../src/core/floating-panel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"floating-panel.d.ts","sourceRoot":"","sources":["../../src/core/floating-panel.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAA+B,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAOD;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAAC,OAAO,MAAM,GAAG,OAAO,IAAI,GAAG,OAAO,KAAK,CAAC,EAAE,CAE1F;AAED,8CAA8C;AAC9C,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,OAAO,GACvB,aAAa,CA8Bf;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,IAAI,GAClB,MAAM,IAAI,CAoBZ;AAcD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAQzF"}
|
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,CAyIxC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 格式选择面板的内置预设(色板 / 字号 / 字体)
|
|
3
|
+
*
|
|
4
|
+
* 先给固定默认值,不做成配置项:本轮要解决的是"开箱看不见这些能力",让宿主换一套品牌
|
|
5
|
+
* 色板是独立需求,向后兼容地加 `formatting.colors` 即可;现在预留一份没人读的配置
|
|
6
|
+
* 只会多一处要同步的文档。
|
|
7
|
+
*
|
|
8
|
+
* 这里的文字一律**不写中文词条**:色块与字号本来就没有名字,用 CSS 值自己当无障碍标签
|
|
9
|
+
* (`rgb(24, 144, 255)` 比"蓝"更准确,也不需要同步两份);只有字体族的通用名需要翻译,
|
|
10
|
+
* 那几条走 i18n key 写在 label 字段上,由面板取词。工具栏 40 项文案收成单源那次
|
|
11
|
+
* (见提交 20c6a5a)说的就是"抄一份兜底字面量等于给漂移留位置",这里不重犯。
|
|
12
|
+
*/
|
|
13
|
+
/** 面板的一行 */
|
|
14
|
+
export interface StyleOption {
|
|
15
|
+
/** 写进 mark 属性的值 */
|
|
16
|
+
value: string;
|
|
17
|
+
/**
|
|
18
|
+
* 行内文字。颜色与字号直接用 CSS 值;
|
|
19
|
+
* 需要翻译的行由面板按 i18nKey 取词,取不到才回落到这里
|
|
20
|
+
*/
|
|
21
|
+
label: string;
|
|
22
|
+
/** 填了就用这个 CSS 值画色块,代替文字预览 */
|
|
23
|
+
swatch?: string;
|
|
24
|
+
/** 行文字的 font-family 预览样式 */
|
|
25
|
+
preview?: string;
|
|
26
|
+
/** 需要翻译的行指向的词条 key */
|
|
27
|
+
i18nKey?: string;
|
|
28
|
+
/** 这一行是"清除该属性"而不是设置某个值 */
|
|
29
|
+
isClear?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 文字色:前 9 个对齐包内既有的 Ant 系主题色,后 3 个补常用正文色。
|
|
33
|
+
* 不放纯黑纯白——正文本来就不是"黑",而白字在亮色主题下等于隐形。
|
|
34
|
+
*/
|
|
35
|
+
export declare const TEXT_COLORS: StyleOption[];
|
|
36
|
+
/**
|
|
37
|
+
* 高亮色一律偏浅:深底配黑字刺眼,深底配白字则把"高亮"变成"遮挡"。
|
|
38
|
+
* 值写成 rgb() 与 TEXT_COLORS 同形,避免同一份导出里混着 #hex 与 rgb() 两种写法。
|
|
39
|
+
*/
|
|
40
|
+
export declare const HIGHLIGHT_COLORS: StyleOption[];
|
|
41
|
+
export declare const FONT_SIZES: StyleOption[];
|
|
42
|
+
/**
|
|
43
|
+
* 字体族。前三项按用途选,中文栈必须自己列——只写 sans-serif 时中文会落到系统默认宋体上,
|
|
44
|
+
* 与英文部分的观感差一截。后三项按名字选,装了才有用,没装就退回系统默认,不报错。
|
|
45
|
+
*/
|
|
46
|
+
export declare const FONT_FAMILIES: StyleOption[];
|
|
47
|
+
//# sourceMappingURL=style-presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-presets.d.ts","sourceRoot":"","sources":["../../src/core/style-presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,YAAY;AACZ,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,WAAW,EAaqB,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,EASgB,CAAC;AAE3D,eAAO,MAAM,UAAU,EAAE,WAAW,EAWO,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,EAuBtC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Attachment.d.ts","sourceRoot":"","sources":["../../src/extensions/Attachment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAC;AASrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Attachment.d.ts","sourceRoot":"","sources":["../../src/extensions/Attachment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAC;AASrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAY/E,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,UAAU,EAAE;YACV,mBAAmB;YACnB,aAAa,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,UAAU,CAAC;YAChE,gCAAgC;YAChC,oBAAoB,EAAE,CAAC,OAAO,EAAE;gBAAE,OAAO,EAAE,qBAAqB,CAAA;aAAE,KAAK,UAAU,CAAC;YAClF,wBAAwB;YACxB,uBAAuB,EAAE,MAAM,UAAU,CAAC;SAC3C,CAAC;KACH;CACF;AAqED,eAAO,MAAM,UAAU,gBAkKrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentLink.d.ts","sourceRoot":"","sources":["../../src/extensions/AttachmentLink.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"AttachmentLink.d.ts","sourceRoot":"","sources":["../../src/extensions/AttachmentLink.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAmB,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAUxD,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,cAAc,EAAE;YACd,qBAAqB;YACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,UAAU,CAAC;SACrE,CAAC;KACH;CACF;AAED,eAAO,MAAM,cAAc,gBAgEzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-attrs.d.ts","sourceRoot":"","sources":["../../src/extensions/attachment-attrs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"attachment-attrs.d.ts","sourceRoot":"","sources":["../../src/extensions/attachment-attrs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAIxD,oBAAoB;AACpB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;gCACgC;AAChC,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAiBvF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAgCT;AAED,sDAAsD;AACtD,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED,+CAA+C;AAC/C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOzF;AAED,oBAAoB;AACpB,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAQnE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAiDhE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基础格式扩展装配(文字颜色 / 背景色 / 字号 / 字体 / 高亮 / 上下标)
|
|
3
|
+
*
|
|
4
|
+
* 这些 mark 在 Tiptap 里都是零运行时依赖的小包,代价全在" Markdown 往返"这一侧:
|
|
5
|
+
* 上游除 Highlight 的 `==x==` 之外一个 renderMarkdown 都没给,序列化器对没钩子的 mark
|
|
6
|
+
* 是静默丢弃。所以本文件的主体不是注册扩展,而是给它们补发与补收,详见 markdown-inline-html.ts。
|
|
7
|
+
*
|
|
8
|
+
* 行高(LineHeight)刻意不装:上游它是 span 级属性,挂在选中的文字片段上,
|
|
9
|
+
* 而用户心里的行高是段落属性——span 级改一下几乎看不出变化,还不如不给这个按钮。
|
|
10
|
+
* 它和颜色同属一个 textStyle mark,将来要给就走同一条 attrsToStyleCss 路径加一项即可。
|
|
11
|
+
*/
|
|
12
|
+
import { type EditorOptions } from '@tiptap/core';
|
|
13
|
+
export interface AtriFormattingOptions {
|
|
14
|
+
/** 'drop' 时不挂发出侧的钩子,颜色类样式导出 Markdown 即丢失(入向仍会解析) */
|
|
15
|
+
inlineStyles?: 'html' | 'drop';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 构造基础格式扩展。
|
|
19
|
+
*
|
|
20
|
+
* 三个 Reader 与 inlineStyles 无关,'drop' 只关掉发出侧:粘贴与外来 .md 里的
|
|
21
|
+
* `<span style>` 仍然应该解析成 mark,否则关掉一个导出偏好会连带把导入能力也削掉。
|
|
22
|
+
*/
|
|
23
|
+
export declare function createFormattingExtensions(options?: AtriFormattingOptions): NonNullable<EditorOptions['extensions']>;
|
|
24
|
+
//# sourceMappingURL=formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/extensions/formatting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AA8G7D,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,qBAA0B,GAClC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAgB1C"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内联 HTML 片段的 Markdown 双向支持
|
|
3
|
+
*
|
|
4
|
+
* Markdown 没有"颜色 / 字号 / 上下标"的表示法,上游对这些 mark 一个 renderMarkdown 钩子
|
|
5
|
+
* 都没给,于是 @tiptap/markdown 会把它们**静默丢掉**(MarkdownManager 的 getMarkOpening
|
|
6
|
+
* 在没有钩子时返回空串),正文原样输出、样式无痕消失。这里给它们补上钩子,落点是内联 HTML。
|
|
7
|
+
*
|
|
8
|
+
* 为什么必须自己写 tokenizer、而不能只挂 renderMarkdown 让 marked 的通用 html token 接回去:
|
|
9
|
+
* 实测那样做 `<span style="…">**b**</span>` 里的 `**b**` 会回来成字面文本——因为
|
|
10
|
+
* parseHTMLToken 走的是 generateJSON,即 **HTML 解析而不是 Markdown 解析**,
|
|
11
|
+
* 片段内部的语法永远不会被重新分词。后果不只是丢格式:正文里的反斜杠每导出一次翻一倍,
|
|
12
|
+
* getMarkdown → setMarkdown → getMarkdown 不幂等,对内容编辑器是最不能接受的一类缺陷。
|
|
13
|
+
* 所以内层必须显式重新分词——用 tokenizer 收到的第三个参数 lexer.inlineTokens,
|
|
14
|
+
* 它的类型注释就写着"useful while tokenizing child tokens"。
|
|
15
|
+
*/
|
|
16
|
+
import type { MarkdownLexerConfiguration, MarkdownParseHelpers, MarkdownToken } from '@tiptap/core';
|
|
17
|
+
/** 从 style 属性里认出来的属性名 → mark 属性名 */
|
|
18
|
+
export type StyleProp = 'color' | 'backgroundColor' | 'fontSize' | 'fontFamily';
|
|
19
|
+
/** `style="color: red; font-size: 20px"` → { color: 'red', fontSize: '20px' } */
|
|
20
|
+
export declare function styleAttrToAttrs(styleText: string): Partial<Record<StyleProp, string>>;
|
|
21
|
+
/** mark 属性 → style 字符串;一个都没有时返回空串,调用方据此不发标签 */
|
|
22
|
+
export declare function attrsToStyleCss(attrs?: Record<string, unknown>): string;
|
|
23
|
+
export interface InlineHtmlToken extends MarkdownToken {
|
|
24
|
+
/** 开始标签与它之间的原始文本,如 ` style="color: red"` */
|
|
25
|
+
openAttrs?: string;
|
|
26
|
+
/** 内层已重新分词的结果,由 tokenize 通过官方 lexer.inlineTokens 产出 */
|
|
27
|
+
tokens?: MarkdownToken[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 一个内联标签的 tokenizer + parseMarkdown。
|
|
31
|
+
*
|
|
32
|
+
* 只负责"读进来"这一侧;发出去那一侧(renderMarkdown)必须挂在 mark 自己身上,
|
|
33
|
+
* 因为序列化器是按 mark 类型去查钩子的。
|
|
34
|
+
*/
|
|
35
|
+
export declare function makeInlineHtmlReader(options: {
|
|
36
|
+
/** marked 的 token 名,同时是 markdownTokenName */
|
|
37
|
+
tokenName: string;
|
|
38
|
+
/** 起始标签匹配片段,需自带捕获组给出标签名与内层文本 */
|
|
39
|
+
pattern: RegExp;
|
|
40
|
+
/** 快速定位用,避免每次都对整段源码跑正则 */
|
|
41
|
+
begins: string[];
|
|
42
|
+
/** token → { markName, attrs };返回 null 表示这个 token 不该产出 mark */
|
|
43
|
+
resolve: (token: InlineHtmlToken) => {
|
|
44
|
+
markName: string;
|
|
45
|
+
attrs: Record<string, string>;
|
|
46
|
+
} | null;
|
|
47
|
+
}): {
|
|
48
|
+
markdownTokenName: string;
|
|
49
|
+
markdownTokenizer: {
|
|
50
|
+
name: string;
|
|
51
|
+
level: 'inline';
|
|
52
|
+
start: (src: string) => number;
|
|
53
|
+
tokenize: (src: string, _tokens: MarkdownToken[], lexer: MarkdownLexerConfiguration) => {
|
|
54
|
+
type: string;
|
|
55
|
+
raw: string;
|
|
56
|
+
text: string;
|
|
57
|
+
openAttrs: string;
|
|
58
|
+
tokens: MarkdownToken[];
|
|
59
|
+
} | undefined;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* token.tokens 已经是分好词的内层,直接 parseInline。
|
|
63
|
+
*
|
|
64
|
+
* resolve 认不出属性时(`<span class="x">` 这种)照样解析内层、只是不套 mark——
|
|
65
|
+
* 把整个 token 丢给 parseInline 会让里面的文字一起消失。
|
|
66
|
+
*/
|
|
67
|
+
parseMarkdown: (token: InlineHtmlToken, helpers: MarkdownParseHelpers) => import("@tiptap/core").JSONContent[] | {
|
|
68
|
+
mark: string;
|
|
69
|
+
content: import("@tiptap/core").JSONContent[];
|
|
70
|
+
attrs?: any;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=markdown-inline-html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-inline-html.d.ts","sourceRoot":"","sources":["../../src/extensions/markdown-inline-html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEpG,oCAAoC;AACpC,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,iBAAiB,GAAG,UAAU,GAAG,YAAY,CAAC;AAyBhF,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAWtF;AAED,+CAA+C;AAC/C,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,MAAM,CAO3E;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+DAA+D;IAC/D,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;CACjG;IAIG,iBAAiB;IAEjB,iBAAiB;QACf,IAAI;QACJ,KAAK,EAAE,QAAQ;QACf,KAAK,QAAQ,MAAM;QAQnB,QAAQ,QAAQ,MAAM,WAAW,aAAa,EAAE,SAAS,0BAA0B;;;;;;;;IAerF;;;;;OAKG;IACH,aAAa,UAAU,eAAe,WAAW,oBAAoB;;;;;EAMxE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export type { CoreEditorConfig, ThemeType } from './core';
|
|
|
14
14
|
export { AtriImage } from './extensions/AtriImage';
|
|
15
15
|
export { Attachment } from './extensions/Attachment';
|
|
16
16
|
export { createMediaExtensions } from './extensions/media';
|
|
17
|
+
export { createFormattingExtensions } from './extensions/formatting';
|
|
18
|
+
export type { AtriFormattingOptions } from './extensions/formatting';
|
|
17
19
|
export { MediaRuntime } from './media/MediaRuntime';
|
|
18
20
|
export type { MediaState, MediaStatus } from './media/MediaRuntime';
|
|
19
21
|
export { AIService, AIInterceptor, AICommandMenuManager } from './ai';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,cAAc,GACf,MAAM,QAAQ,CAAC;AAEhB,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAG1D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAEtE,YAAY,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAGjD,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,cAAc,GACf,MAAM,QAAQ,CAAC;AAEhB,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAG1D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAEtE,YAAY,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAGjD,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
|