@atri-editor/core 0.1.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/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/AtriEditor.d.ts +192 -0
- package/dist/AtriEditor.d.ts.map +1 -0
- package/dist/AtriEditorElement.d.ts +84 -0
- package/dist/AtriEditorElement.d.ts.map +1 -0
- package/dist/ai/AICommandMenu.d.ts +59 -0
- package/dist/ai/AICommandMenu.d.ts.map +1 -0
- package/dist/ai/AIInterceptor.d.ts +39 -0
- package/dist/ai/AIInterceptor.d.ts.map +1 -0
- package/dist/ai/AIService.d.ts +42 -0
- package/dist/ai/AIService.d.ts.map +1 -0
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/core/CoreEditor.d.ts +100 -0
- package/dist/core/CoreEditor.d.ts.map +1 -0
- package/dist/core/ExtensionManager.d.ts +47 -0
- package/dist/core/ExtensionManager.d.ts.map +1 -0
- package/dist/core/I18nManager.d.ts +21 -0
- package/dist/core/I18nManager.d.ts.map +1 -0
- package/dist/core/MarkdownService.d.ts +42 -0
- package/dist/core/MarkdownService.d.ts.map +1 -0
- package/dist/core/ThemeManager.d.ts +30 -0
- package/dist/core/ThemeManager.d.ts.map +1 -0
- package/dist/core/ToolbarManager.d.ts +69 -0
- package/dist/core/ToolbarManager.d.ts.map +1 -0
- package/dist/core/bubble-toolbar.d.ts +38 -0
- package/dist/core/bubble-toolbar.d.ts.map +1 -0
- package/dist/core/icons.d.ts +6 -0
- package/dist/core/icons.d.ts.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/extensions/AtriImage.d.ts +2 -0
- package/dist/extensions/AtriImage.d.ts.map +1 -0
- package/dist/extensions/Attachment.d.ts +24 -0
- package/dist/extensions/Attachment.d.ts.map +1 -0
- package/dist/extensions/AttachmentLink.d.ts +19 -0
- package/dist/extensions/AttachmentLink.d.ts.map +1 -0
- package/dist/extensions/MediaFiles.d.ts +13 -0
- package/dist/extensions/MediaFiles.d.ts.map +1 -0
- package/dist/extensions/attachment-attrs.d.ts +29 -0
- package/dist/extensions/attachment-attrs.d.ts.map +1 -0
- package/dist/extensions/media.d.ts +10 -0
- package/dist/extensions/media.d.ts.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3489 -0
- package/dist/index.js.map +1 -0
- package/dist/media/InsertPanel.d.ts +59 -0
- package/dist/media/InsertPanel.d.ts.map +1 -0
- package/dist/media/MediaRuntime.d.ts +113 -0
- package/dist/media/MediaRuntime.d.ts.map +1 -0
- package/dist/media/MediaStatusStrip.d.ts +20 -0
- package/dist/media/MediaStatusStrip.d.ts.map +1 -0
- package/dist/media/Uploader.d.ts +12 -0
- package/dist/media/Uploader.d.ts.map +1 -0
- package/dist/media/file-policy.d.ts +34 -0
- package/dist/media/file-policy.d.ts.map +1 -0
- package/dist/media/insert-position.d.ts +13 -0
- package/dist/media/insert-position.d.ts.map +1 -0
- package/dist/style.css +578 -0
- package/dist/types/ai.d.ts +76 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/editor.d.ts +140 -0
- package/dist/types/editor.d.ts.map +1 -0
- package/dist/types/events.d.ts +26 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/extension.d.ts +61 -0
- package/dist/types/extension.d.ts.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/markdown.d.ts +29 -0
- package/dist/types/markdown.d.ts.map +1 -0
- package/dist/types/media.d.ts +149 -0
- package/dist/types/media.d.ts.map +1 -0
- package/dist/utils/dom.d.ts +16 -0
- package/dist/utils/dom.d.ts.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/markdown.d.ts +14 -0
- package/dist/utils/markdown.d.ts.map +1 -0
- package/dist/utils/selection.d.ts +17 -0
- package/dist/utils/selection.d.ts.map +1 -0
- package/package.json +63 -0
- package/styles.d.ts +6 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { Editor, Extension } from '@tiptap/core';
|
|
2
|
+
import type { AtriAIConfig } from './ai';
|
|
3
|
+
import type { AtriMarkdownConfig } from './markdown';
|
|
4
|
+
import type { AtriMediaConfig, InsertAttachmentOptions, InsertImageOptions, MediaKind } from './media';
|
|
5
|
+
import type { AtriNodeViewConfig } from './extension';
|
|
6
|
+
/**
|
|
7
|
+
* 工具栏配置
|
|
8
|
+
*/
|
|
9
|
+
export interface ToolbarConfig {
|
|
10
|
+
/**
|
|
11
|
+
* 工具栏项,按顺序渲染;省略时使用默认全集
|
|
12
|
+
* 字符串为内置项 id,ToolbarItem 可在内置项基础上覆盖图标与文案
|
|
13
|
+
*/
|
|
14
|
+
items?: (string | ToolbarItem)[];
|
|
15
|
+
/**
|
|
16
|
+
* 选中文字或图片 / 附件时在选区旁浮出的工具栏,默认关闭,与固定顶栏共存
|
|
17
|
+
* 按钮分两组:文字选区是行内格式五项,选中附件是「附件样式 + 删除」、选中图片只有「删除」
|
|
18
|
+
* 只在创建时生效:BubbleMenu 的挂载元素走扩展选项,而 tiptap v3 没有运行时注册扩展的入口
|
|
19
|
+
*/
|
|
20
|
+
bubble?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 工具栏项
|
|
24
|
+
*/
|
|
25
|
+
export interface ToolbarItem {
|
|
26
|
+
/** 内置项标识 */
|
|
27
|
+
id: string;
|
|
28
|
+
/** 显示名称(无 icon 时以文字渲染按钮) */
|
|
29
|
+
label?: string;
|
|
30
|
+
/** 图标(SVG 字符串,优先于 label 与内置图标) */
|
|
31
|
+
icon?: string;
|
|
32
|
+
/** 提示文字,优先于当前语言的内置词条 */
|
|
33
|
+
tooltip?: string;
|
|
34
|
+
/** 子菜单(尚未实现,声明后会被忽略) */
|
|
35
|
+
children?: ToolbarItem[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 设置内容选项
|
|
39
|
+
*/
|
|
40
|
+
export interface SetContentOptions {
|
|
41
|
+
/** 内容格式 */
|
|
42
|
+
format?: 'html' | 'json' | 'markdown';
|
|
43
|
+
/** 是否触发变更事件 */
|
|
44
|
+
emitUpdate?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 编辑器配置
|
|
48
|
+
*/
|
|
49
|
+
export interface AtriEditorOptions {
|
|
50
|
+
/** 挂载元素 */
|
|
51
|
+
element: string | HTMLElement;
|
|
52
|
+
/** 初始内容 */
|
|
53
|
+
content?: string | object;
|
|
54
|
+
/** 内容格式 */
|
|
55
|
+
contentFormat?: 'html' | 'json' | 'markdown';
|
|
56
|
+
/** 主题 */
|
|
57
|
+
theme?: 'light' | 'dark' | string;
|
|
58
|
+
/** 语言 */
|
|
59
|
+
lang?: string;
|
|
60
|
+
/** 是否可编辑 */
|
|
61
|
+
editable?: boolean;
|
|
62
|
+
/** 占位符 */
|
|
63
|
+
placeholder?: string;
|
|
64
|
+
/** 工具栏配置 */
|
|
65
|
+
toolbar?: ToolbarConfig | false;
|
|
66
|
+
/** 扩展列表 */
|
|
67
|
+
extensions?: Extension[];
|
|
68
|
+
/** NodeView 自定义组件配置 */
|
|
69
|
+
nodeViews?: AtriNodeViewConfig[];
|
|
70
|
+
/** AI 配置 */
|
|
71
|
+
ai?: AtriAIConfig;
|
|
72
|
+
/** Markdown 配置 */
|
|
73
|
+
markdown?: AtriMarkdownConfig;
|
|
74
|
+
/** 媒体(图片 / 附件)配置,false 时不注册图片与附件节点 */
|
|
75
|
+
media?: AtriMediaConfig | false;
|
|
76
|
+
/** 创建完成回调 */
|
|
77
|
+
onCreate?: (editor: IAtriEditor) => void;
|
|
78
|
+
/** 内容变更回调 */
|
|
79
|
+
onChange?: (editor: IAtriEditor) => void;
|
|
80
|
+
/** 聚焦回调 */
|
|
81
|
+
onFocus?: (editor: IAtriEditor) => void;
|
|
82
|
+
/** 失焦回调 */
|
|
83
|
+
onBlur?: (editor: IAtriEditor) => void;
|
|
84
|
+
/** 销毁回调 */
|
|
85
|
+
onDestroy?: (editor: IAtriEditor) => void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 编辑器接口
|
|
89
|
+
*/
|
|
90
|
+
export interface IAtriEditor {
|
|
91
|
+
/** Tiptap Editor 实例 */
|
|
92
|
+
readonly editor: Editor;
|
|
93
|
+
/** 获取 HTML 内容 */
|
|
94
|
+
getHTML(): string;
|
|
95
|
+
/** 获取 JSON 内容 */
|
|
96
|
+
getJSON(): object;
|
|
97
|
+
/** 获取 Markdown 内容 */
|
|
98
|
+
getMarkdown(): string;
|
|
99
|
+
/** 设置内容 */
|
|
100
|
+
setContent(content: string | object, options?: SetContentOptions): void;
|
|
101
|
+
/** 设置 Markdown 内容 */
|
|
102
|
+
setMarkdown(content: string): void;
|
|
103
|
+
/** 清空内容 */
|
|
104
|
+
clearContent(): void;
|
|
105
|
+
/** 是否为空 */
|
|
106
|
+
isEmpty(): boolean;
|
|
107
|
+
/** Markdown 转 HTML */
|
|
108
|
+
markdownToHTML(markdown: string): string;
|
|
109
|
+
/** HTML 转 Markdown */
|
|
110
|
+
htmlToMarkdown(html: string): string;
|
|
111
|
+
/** Markdown 转 JSON */
|
|
112
|
+
markdownToJSON(markdown: string): object;
|
|
113
|
+
/** 获取选中文本 */
|
|
114
|
+
getSelectedText(): string;
|
|
115
|
+
/** 插入内容 */
|
|
116
|
+
insertContent(content: string): void;
|
|
117
|
+
/** 设置占位符 */
|
|
118
|
+
setPlaceholder(placeholder: string): void;
|
|
119
|
+
/** 在选区处插入图片 */
|
|
120
|
+
insertImage(options: InsertImageOptions): void;
|
|
121
|
+
/** 在选区处插入附件卡片 */
|
|
122
|
+
insertAttachment(options: InsertAttachmentOptions): void;
|
|
123
|
+
/** 走上传管线插入本地文件,promise 在这批文件全部落定后 resolve */
|
|
124
|
+
uploadFiles(files: File[] | FileList, kind?: MediaKind): Promise<void>;
|
|
125
|
+
/** 重试所有失败的上传 */
|
|
126
|
+
retryFailedUploads(): Promise<void>;
|
|
127
|
+
/** 是否有文件还没落到服务端(上传中与失败都算) */
|
|
128
|
+
hasPendingUploads(): boolean;
|
|
129
|
+
/** 设置可编辑状态 */
|
|
130
|
+
setEditable(editable: boolean): void;
|
|
131
|
+
/** 是否可编辑 */
|
|
132
|
+
isEditable(): boolean;
|
|
133
|
+
/** 聚焦 */
|
|
134
|
+
focus(): void;
|
|
135
|
+
/** 失焦 */
|
|
136
|
+
blur(): void;
|
|
137
|
+
/** 销毁编辑器 */
|
|
138
|
+
destroy(): void;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 编辑器事件类型
|
|
3
|
+
*/
|
|
4
|
+
export type AtriEventType = 'create' | 'change' | 'focus' | 'blur' | 'destroy' | 'ai:start' | 'ai:complete' | 'ai:error';
|
|
5
|
+
/**
|
|
6
|
+
* 编辑器事件
|
|
7
|
+
*/
|
|
8
|
+
export interface AtriEvent {
|
|
9
|
+
type: AtriEventType;
|
|
10
|
+
editor: unknown;
|
|
11
|
+
data?: unknown;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* AI 事件
|
|
15
|
+
*/
|
|
16
|
+
export interface AtriAIEvent {
|
|
17
|
+
type: 'ai:start' | 'ai:complete' | 'ai:error';
|
|
18
|
+
functionId: string;
|
|
19
|
+
content?: string;
|
|
20
|
+
error?: Error;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 事件监听器
|
|
24
|
+
*/
|
|
25
|
+
export type AtriEventListener = (event: AtriEvent) => void;
|
|
26
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,UAAU,GACV,aAAa,GACb,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Extension, NodeViewRenderer } from '@tiptap/core';
|
|
2
|
+
/**
|
|
3
|
+
* 扩展类别
|
|
4
|
+
*/
|
|
5
|
+
export type ExtensionCategory = 'basic' | 'media' | 'block' | 'enhanced' | 'ai' | 'custom';
|
|
6
|
+
/**
|
|
7
|
+
* 扩展元数据
|
|
8
|
+
*/
|
|
9
|
+
export interface AtriExtensionMeta {
|
|
10
|
+
name: string;
|
|
11
|
+
version: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
category: ExtensionCategory;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Atri 扩展(基于 Tiptap Extension)
|
|
17
|
+
*/
|
|
18
|
+
export interface AtriExtension extends Extension {
|
|
19
|
+
meta?: AtriExtensionMeta;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* NodeView 属性定义
|
|
23
|
+
*/
|
|
24
|
+
export interface NodeViewAttribute {
|
|
25
|
+
default?: any;
|
|
26
|
+
keepOnSplit?: boolean;
|
|
27
|
+
parseHTML?: (element: HTMLElement) => any;
|
|
28
|
+
renderHTML?: (attributes: Record<string, any>) => Record<string, any> | null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* NodeView 配置
|
|
32
|
+
*/
|
|
33
|
+
export interface AtriNodeViewConfig {
|
|
34
|
+
/** 节点类型名称 */
|
|
35
|
+
name: string;
|
|
36
|
+
/** NodeView 渲染器 */
|
|
37
|
+
nodeView: NodeViewRenderer;
|
|
38
|
+
/** 节点属性定义 */
|
|
39
|
+
attributes?: Record<string, NodeViewAttribute>;
|
|
40
|
+
/** HTML 序列化配置 */
|
|
41
|
+
renderHTML?: (props: {
|
|
42
|
+
HTMLAttributes: Record<string, any>;
|
|
43
|
+
node: any;
|
|
44
|
+
}) => any;
|
|
45
|
+
/** HTML 解析配置 */
|
|
46
|
+
parseHTML?: () => Array<{
|
|
47
|
+
tag: string;
|
|
48
|
+
getAttrs?: (el: HTMLElement) => any;
|
|
49
|
+
}>;
|
|
50
|
+
/** 是否为内联节点 */
|
|
51
|
+
inline?: boolean;
|
|
52
|
+
/** 是否为原子节点(不可编辑内容) */
|
|
53
|
+
atom?: boolean;
|
|
54
|
+
/** 节点分组 */
|
|
55
|
+
group?: string;
|
|
56
|
+
/** 节点描述 */
|
|
57
|
+
description?: string;
|
|
58
|
+
/** 自定义 Markdown 序列化回调 */
|
|
59
|
+
markdownSerialize?: (node: any) => string;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/types/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,GAAG,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CAC9E;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C,iBAAiB;IACjB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,KAAK,GAAG,CAAC;IAChF,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,GAAG,CAAA;KAAE,CAAC,CAAC;IAC9E,cAAc;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;CAC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown 配置
|
|
3
|
+
*/
|
|
4
|
+
export interface AtriMarkdownConfig {
|
|
5
|
+
/** 是否启用 Markdown 支持(默认 true) */
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* 列表与代码块的缩进,原样转发给 Tiptap 的 Markdown 扩展,默认 `{ style: 'space', size: 2 }`
|
|
9
|
+
*/
|
|
10
|
+
indentation?: {
|
|
11
|
+
style?: 'space' | 'tab';
|
|
12
|
+
size?: number;
|
|
13
|
+
};
|
|
14
|
+
/** marked 配置选项 */
|
|
15
|
+
markedOptions?: {
|
|
16
|
+
/** GitHub Flavored Markdown */
|
|
17
|
+
gfm?: boolean;
|
|
18
|
+
/** \n 转 <br> */
|
|
19
|
+
breaks?: boolean;
|
|
20
|
+
/** 严格模式 */
|
|
21
|
+
pedantic?: boolean;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* 输入时实时转换(Markdown 风格 input rules),默认 true
|
|
25
|
+
* 作用于所有扩展注册的 input rules,不影响粘贴处理与 Markdown 序列化
|
|
26
|
+
*/
|
|
27
|
+
shortcuts?: boolean;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/types/markdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,kBAAkB;IAClB,aAAa,CAAC,EAAE;QACd,+BAA+B;QAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,gBAAgB;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,WAAW;QACX,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IACF;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 媒体(图片 / 附件)配置
|
|
3
|
+
*/
|
|
4
|
+
/** 上传进度 */
|
|
5
|
+
export interface UploadProgress {
|
|
6
|
+
/** 0-100 */
|
|
7
|
+
percent: number;
|
|
8
|
+
loaded: number;
|
|
9
|
+
total: number;
|
|
10
|
+
}
|
|
11
|
+
/** 上传结果;name / size / mime 缺省时沿用本地文件的值 */
|
|
12
|
+
export interface UploadResult {
|
|
13
|
+
url: string;
|
|
14
|
+
name?: string;
|
|
15
|
+
size?: number;
|
|
16
|
+
mime?: string;
|
|
17
|
+
}
|
|
18
|
+
/** 自定义上传时的上下文 */
|
|
19
|
+
export interface UploadContext {
|
|
20
|
+
onProgress: (progress: UploadProgress) => void;
|
|
21
|
+
/** 编辑器销毁或用户取消时中止 */
|
|
22
|
+
signal: AbortSignal;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 完全接管上传:库不发请求,只负责把结果写回文档
|
|
26
|
+
* 给了它就忽略 endpoint 分支
|
|
27
|
+
*/
|
|
28
|
+
export type UploadHandler = (file: File, context: UploadContext) => Promise<UploadResult>;
|
|
29
|
+
/**
|
|
30
|
+
* 内置上传通道(XHR,fetch 拿不到可移植的上传进度)
|
|
31
|
+
*/
|
|
32
|
+
export interface AtriUploadConfig {
|
|
33
|
+
/** 接收 multipart/form-data 的接口地址 */
|
|
34
|
+
endpoint: string;
|
|
35
|
+
/** 文件字段名,默认 `file` */
|
|
36
|
+
fieldName?: string;
|
|
37
|
+
/** 附加请求头,如授权令牌 */
|
|
38
|
+
headers?: Record<string, string>;
|
|
39
|
+
/** 是否携带 Cookie */
|
|
40
|
+
withCredentials?: boolean;
|
|
41
|
+
/** 服务端要求的文件名与本地不同时使用 */
|
|
42
|
+
requestName?: (file: File) => string;
|
|
43
|
+
/** 响应体形状千差万别,用它挑出 url;缺省时依次找 url / data.url / location */
|
|
44
|
+
transformResult?: (body: unknown, file: File) => UploadResult;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 媒体类型,与同名节点一一对应
|
|
48
|
+
*/
|
|
49
|
+
export type MediaKind = 'image' | 'attachment';
|
|
50
|
+
/** 插入被拒绝的原因 */
|
|
51
|
+
export type MediaRejectReason =
|
|
52
|
+
/** 超出 maxFileSize */
|
|
53
|
+
'too-large'
|
|
54
|
+
/** 不在 accept 白名单内 */
|
|
55
|
+
| 'unsupported-type'
|
|
56
|
+
/** 一次投放的文件数超过 maxFiles,多出来的那些每个回调一次 */
|
|
57
|
+
| 'too-many'
|
|
58
|
+
/** 本地文件需要上传,但没配上传通道也不允许 base64 */
|
|
59
|
+
| 'no-upload'
|
|
60
|
+
/** 请求发出后失败 */
|
|
61
|
+
| 'upload-failed';
|
|
62
|
+
/** 插入被拒绝时回调 */
|
|
63
|
+
export interface MediaRejection {
|
|
64
|
+
file: File;
|
|
65
|
+
reason: MediaRejectReason;
|
|
66
|
+
/** upload-failed 时的原始错误 */
|
|
67
|
+
cause?: unknown;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 图片节点配置
|
|
71
|
+
*/
|
|
72
|
+
export interface AtriImageConfig {
|
|
73
|
+
/** 是否作为内联节点插入,默认 false(块级) */
|
|
74
|
+
inline?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* 是否允许 data URL 形式的 base64 图片,默认 false
|
|
77
|
+
* 同时也是没有上传通道时的退路开关:关掉它,本地文件将无从插入
|
|
78
|
+
*/
|
|
79
|
+
allowBase64?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* 上传失败后是否把这张图读成 data URL 内联,默认 false(只有图片有这条退路)
|
|
82
|
+
*
|
|
83
|
+
* 内联写进文档的是 data URL,而编辑器重建时按 `getHTML()` 回填——节点不认 data URL
|
|
84
|
+
* 就等于内容重建一次就没,所以这个开关会连带打开 `allowBase64`
|
|
85
|
+
*
|
|
86
|
+
* 内联成功后图片仍标着 error 态,「重试」还能把原文件再传一次换成服务端地址;
|
|
87
|
+
* 但内容已经安全落进文档,`hasPendingUploads()` 不再把它算作待处理
|
|
88
|
+
*/
|
|
89
|
+
fallbackToBase64?: boolean;
|
|
90
|
+
/** 是否显示缩放手柄,默认 true */
|
|
91
|
+
resize?: boolean;
|
|
92
|
+
/** 类型白名单,如 `image/*` 或 `.png,.jpg` */
|
|
93
|
+
accept?: string | string[];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 附件显示形态:块级卡片 / 行内链接(两个节点类型,切换命令在它们之间换节点)
|
|
97
|
+
*/
|
|
98
|
+
export type AtriAttachmentDisplay = 'card' | 'link';
|
|
99
|
+
/**
|
|
100
|
+
* 附件节点配置
|
|
101
|
+
*/
|
|
102
|
+
export interface AtriAttachmentConfig {
|
|
103
|
+
/** 类型白名单,默认不限 */
|
|
104
|
+
accept?: string | string[];
|
|
105
|
+
/** 新插入附件的默认形态,默认 'card';上传中与失败的表达在链接形态下与图片同一套语 */
|
|
106
|
+
display?: AtriAttachmentDisplay;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 插入图片的参数
|
|
110
|
+
*/
|
|
111
|
+
export interface InsertImageOptions {
|
|
112
|
+
src: string;
|
|
113
|
+
alt?: string;
|
|
114
|
+
title?: string;
|
|
115
|
+
width?: number;
|
|
116
|
+
height?: number;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 插入附件的参数
|
|
120
|
+
*/
|
|
121
|
+
export interface InsertAttachmentOptions {
|
|
122
|
+
/** 文件地址 */
|
|
123
|
+
src: string;
|
|
124
|
+
/** 展示名,缺省时从 src 推导 */
|
|
125
|
+
name?: string | null;
|
|
126
|
+
/** 字节数 */
|
|
127
|
+
size?: number | null;
|
|
128
|
+
mime?: string | null;
|
|
129
|
+
/** 显示形态,缺省走 media.attachment.display 配置 */
|
|
130
|
+
display?: AtriAttachmentDisplay;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 媒体配置;传 false 完全不注册图片与附件扩展
|
|
134
|
+
*/
|
|
135
|
+
export interface AtriMediaConfig {
|
|
136
|
+
/** 上传通道:配置对象走内置 XHR,或直接给一个函数完全接管 */
|
|
137
|
+
upload?: AtriUploadConfig | UploadHandler;
|
|
138
|
+
/** 单个文件上限(字节),默认 10MB */
|
|
139
|
+
maxFileSize?: number;
|
|
140
|
+
/** 一次投放/选择的文件数上限,默认 10 */
|
|
141
|
+
maxFiles?: number;
|
|
142
|
+
/** 校验不通过或上传失败时回调,编辑器不弹任何默认提示 */
|
|
143
|
+
onError?: (rejection: MediaRejection) => void;
|
|
144
|
+
/** 图片配置 */
|
|
145
|
+
image?: AtriImageConfig;
|
|
146
|
+
/** 附件配置 */
|
|
147
|
+
attachment?: AtriAttachmentConfig;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/types/media.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM 工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 解析元素选择器,返回 HTMLElement
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveElement(element: string | HTMLElement): HTMLElement;
|
|
8
|
+
/**
|
|
9
|
+
* 创建带 class 的 div 元素
|
|
10
|
+
*/
|
|
11
|
+
export declare function createContainer(className?: string): HTMLDivElement;
|
|
12
|
+
/**
|
|
13
|
+
* 检查是否在浏览器环境
|
|
14
|
+
*/
|
|
15
|
+
export declare function isBrowser(): boolean;
|
|
16
|
+
//# sourceMappingURL=dom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/utils/dom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CASzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAMlE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown 工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 简单的 Markdown 转 HTML(用于 AI 响应处理)
|
|
6
|
+
* 注意:完整的 Markdown 解析由 @tiptap/markdown 处理
|
|
7
|
+
* 这里仅提供基础的 Markdown 语法转换
|
|
8
|
+
*/
|
|
9
|
+
export declare function simpleMarkdownToHtml(markdown: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* 简单的 HTML 转 Markdown
|
|
12
|
+
*/
|
|
13
|
+
export declare function simpleHtmlToMarkdown(html: string): string;
|
|
14
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6C7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8CzD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 选区工具函数
|
|
3
|
+
*/
|
|
4
|
+
import type { Editor } from '@tiptap/core';
|
|
5
|
+
/**
|
|
6
|
+
* 获取选中文本
|
|
7
|
+
*/
|
|
8
|
+
export declare function getSelectedText(editor: Editor): string;
|
|
9
|
+
/**
|
|
10
|
+
* 获取光标前的文本(当前段落)
|
|
11
|
+
*/
|
|
12
|
+
export declare function getCursorContext(editor: Editor, maxLength?: number): string;
|
|
13
|
+
/**
|
|
14
|
+
* 获取文档纯文本
|
|
15
|
+
*/
|
|
16
|
+
export declare function getDocumentText(editor: Editor): string;
|
|
17
|
+
//# sourceMappingURL=selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/utils/selection.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAShF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@atri-editor/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Core package for Atri Editor",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"editor",
|
|
7
|
+
"rich-text",
|
|
8
|
+
"tiptap",
|
|
9
|
+
"web-component",
|
|
10
|
+
"wysiwyg"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/CherishDreams/atri-editor.git"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"styles.d.ts"
|
|
20
|
+
],
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "./dist/index.js",
|
|
23
|
+
"module": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"import": "./dist/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./styles": {
|
|
31
|
+
"types": "./styles.d.ts",
|
|
32
|
+
"default": "./dist/style.css"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"dev": "vite build --watch",
|
|
37
|
+
"build": "vite build && pnpm run build:types && pnpm run build:styles",
|
|
38
|
+
"build:types": "tsc -p tsconfig.build.json",
|
|
39
|
+
"build:styles": "sass src/styles/index.scss dist/style.css --style=expanded --no-source-map",
|
|
40
|
+
"typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.test.json",
|
|
41
|
+
"test": "vitest run",
|
|
42
|
+
"test:watch": "vitest"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@floating-ui/dom": "^1.6.0",
|
|
46
|
+
"@tiptap/core": "^3.30.4",
|
|
47
|
+
"@tiptap/extension-bubble-menu": "^3.30.4",
|
|
48
|
+
"@tiptap/extension-image": "^3.30.4",
|
|
49
|
+
"@tiptap/extension-text-align": "^3.30.4",
|
|
50
|
+
"@tiptap/extensions": "^3.30.4",
|
|
51
|
+
"@tiptap/markdown": "^3.30.4",
|
|
52
|
+
"@tiptap/pm": "^3.30.4",
|
|
53
|
+
"@tiptap/starter-kit": "^3.30.4",
|
|
54
|
+
"i18next": "^23.11.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"jsdom": "^30.0.1",
|
|
58
|
+
"sass": "^1.103.1",
|
|
59
|
+
"typescript": "^7.0.0",
|
|
60
|
+
"vite": "^5.2.0",
|
|
61
|
+
"vitest": "^3.2.7"
|
|
62
|
+
}
|
|
63
|
+
}
|