@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.
Files changed (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/AtriEditor.d.ts +192 -0
  4. package/dist/AtriEditor.d.ts.map +1 -0
  5. package/dist/AtriEditorElement.d.ts +84 -0
  6. package/dist/AtriEditorElement.d.ts.map +1 -0
  7. package/dist/ai/AICommandMenu.d.ts +59 -0
  8. package/dist/ai/AICommandMenu.d.ts.map +1 -0
  9. package/dist/ai/AIInterceptor.d.ts +39 -0
  10. package/dist/ai/AIInterceptor.d.ts.map +1 -0
  11. package/dist/ai/AIService.d.ts +42 -0
  12. package/dist/ai/AIService.d.ts.map +1 -0
  13. package/dist/ai/index.d.ts +5 -0
  14. package/dist/ai/index.d.ts.map +1 -0
  15. package/dist/core/CoreEditor.d.ts +100 -0
  16. package/dist/core/CoreEditor.d.ts.map +1 -0
  17. package/dist/core/ExtensionManager.d.ts +47 -0
  18. package/dist/core/ExtensionManager.d.ts.map +1 -0
  19. package/dist/core/I18nManager.d.ts +21 -0
  20. package/dist/core/I18nManager.d.ts.map +1 -0
  21. package/dist/core/MarkdownService.d.ts +42 -0
  22. package/dist/core/MarkdownService.d.ts.map +1 -0
  23. package/dist/core/ThemeManager.d.ts +30 -0
  24. package/dist/core/ThemeManager.d.ts.map +1 -0
  25. package/dist/core/ToolbarManager.d.ts +69 -0
  26. package/dist/core/ToolbarManager.d.ts.map +1 -0
  27. package/dist/core/bubble-toolbar.d.ts +38 -0
  28. package/dist/core/bubble-toolbar.d.ts.map +1 -0
  29. package/dist/core/icons.d.ts +6 -0
  30. package/dist/core/icons.d.ts.map +1 -0
  31. package/dist/core/index.d.ts +9 -0
  32. package/dist/core/index.d.ts.map +1 -0
  33. package/dist/extensions/AtriImage.d.ts +2 -0
  34. package/dist/extensions/AtriImage.d.ts.map +1 -0
  35. package/dist/extensions/Attachment.d.ts +24 -0
  36. package/dist/extensions/Attachment.d.ts.map +1 -0
  37. package/dist/extensions/AttachmentLink.d.ts +19 -0
  38. package/dist/extensions/AttachmentLink.d.ts.map +1 -0
  39. package/dist/extensions/MediaFiles.d.ts +13 -0
  40. package/dist/extensions/MediaFiles.d.ts.map +1 -0
  41. package/dist/extensions/attachment-attrs.d.ts +29 -0
  42. package/dist/extensions/attachment-attrs.d.ts.map +1 -0
  43. package/dist/extensions/media.d.ts +10 -0
  44. package/dist/extensions/media.d.ts.map +1 -0
  45. package/dist/index.d.ts +23 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +3489 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/media/InsertPanel.d.ts +59 -0
  50. package/dist/media/InsertPanel.d.ts.map +1 -0
  51. package/dist/media/MediaRuntime.d.ts +113 -0
  52. package/dist/media/MediaRuntime.d.ts.map +1 -0
  53. package/dist/media/MediaStatusStrip.d.ts +20 -0
  54. package/dist/media/MediaStatusStrip.d.ts.map +1 -0
  55. package/dist/media/Uploader.d.ts +12 -0
  56. package/dist/media/Uploader.d.ts.map +1 -0
  57. package/dist/media/file-policy.d.ts +34 -0
  58. package/dist/media/file-policy.d.ts.map +1 -0
  59. package/dist/media/insert-position.d.ts +13 -0
  60. package/dist/media/insert-position.d.ts.map +1 -0
  61. package/dist/style.css +578 -0
  62. package/dist/types/ai.d.ts +76 -0
  63. package/dist/types/ai.d.ts.map +1 -0
  64. package/dist/types/editor.d.ts +140 -0
  65. package/dist/types/editor.d.ts.map +1 -0
  66. package/dist/types/events.d.ts +26 -0
  67. package/dist/types/events.d.ts.map +1 -0
  68. package/dist/types/extension.d.ts +61 -0
  69. package/dist/types/extension.d.ts.map +1 -0
  70. package/dist/types/index.d.ts +7 -0
  71. package/dist/types/index.d.ts.map +1 -0
  72. package/dist/types/markdown.d.ts +29 -0
  73. package/dist/types/markdown.d.ts.map +1 -0
  74. package/dist/types/media.d.ts +149 -0
  75. package/dist/types/media.d.ts.map +1 -0
  76. package/dist/utils/dom.d.ts +16 -0
  77. package/dist/utils/dom.d.ts.map +1 -0
  78. package/dist/utils/index.d.ts +4 -0
  79. package/dist/utils/index.d.ts.map +1 -0
  80. package/dist/utils/markdown.d.ts +14 -0
  81. package/dist/utils/markdown.d.ts.map +1 -0
  82. package/dist/utils/selection.d.ts +17 -0
  83. package/dist/utils/selection.d.ts.map +1 -0
  84. package/package.json +63 -0
  85. package/styles.d.ts +6 -0
@@ -0,0 +1,21 @@
1
+ export declare class I18nManager {
2
+ private instance;
3
+ constructor(lang?: string);
4
+ /**
5
+ * 翻译
6
+ */
7
+ t(key: string, options?: Record<string, unknown>): string;
8
+ /**
9
+ * 切换语言
10
+ */
11
+ changeLanguage(lang: string): Promise<void>;
12
+ /**
13
+ * 监听语言变更,返回取消订阅的函数
14
+ */
15
+ onLanguageChanged(handler: (lang: string) => void): () => void;
16
+ /**
17
+ * 获取当前语言
18
+ */
19
+ getLanguage(): string;
20
+ }
21
+ //# sourceMappingURL=I18nManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"I18nManager.d.ts","sourceRoot":"","sources":["../../src/core/I18nManager.ts"],"names":[],"mappings":"AAmHA,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;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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * MarkdownService - Markdown 解析/序列化服务
3
+ */
4
+ import { type Editor, type JSONContent } from '@tiptap/core';
5
+ import type { AtriMarkdownConfig } from '../types';
6
+ export declare class MarkdownService {
7
+ private editor;
8
+ private config;
9
+ constructor(editor: Editor, config?: AtriMarkdownConfig);
10
+ /**
11
+ * Tiptap Markdown 序列化器,未注册 Markdown 扩展时为 null
12
+ */
13
+ private get manager();
14
+ /**
15
+ * 获取编辑器内容为 Markdown
16
+ * 自定义节点的输出由其 renderMarkdown 钩子负责(见 ExtensionManager.registerNodeView),
17
+ * 因此这里始终走 Tiptap 序列化器,不对整篇文档做额外替换。
18
+ */
19
+ getMarkdown(): string;
20
+ /**
21
+ * 设置 Markdown 内容
22
+ */
23
+ setMarkdown(content: string, emitUpdate?: boolean): void;
24
+ /**
25
+ * Markdown 转 HTML
26
+ * 与 htmlToMarkdown 方向对称:解析为 JSON 后再按当前 schema 序列化为 HTML
27
+ */
28
+ markdownToHTML(markdown: string): string;
29
+ /**
30
+ * HTML 转 Markdown
31
+ */
32
+ htmlToMarkdown(html: string): string;
33
+ /**
34
+ * Markdown 转 JSON
35
+ */
36
+ markdownToJSON(markdown: string): JSONContent;
37
+ /**
38
+ * 是否启用
39
+ */
40
+ isEnabled(): boolean;
41
+ }
42
+ //# sourceMappingURL=MarkdownService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownService.d.ts","sourceRoot":"","sources":["../../src/core/MarkdownService.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAqB;IAEnC,YAAY,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAuB,EAM1D;IAED;;OAEG;IACH,OAAO,KAAK,OAAO,GAElB;IAED;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAMpB;IAED;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,IAAI,CAMpD;IAED;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUvC;IAED;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASnC;IAED;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAe5C;IAED;;OAEG;IACH,SAAS,IAAI,OAAO,CAEnB;CACF"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * ThemeManager - 主题管理
3
+ */
4
+ export type ThemeType = 'light' | 'dark' | string;
5
+ export declare class ThemeManager {
6
+ private container;
7
+ private currentTheme;
8
+ constructor(container: HTMLElement, theme?: ThemeType);
9
+ /**
10
+ * 应用当前主题
11
+ */
12
+ private applyTheme;
13
+ /**
14
+ * 获取当前主题
15
+ */
16
+ getTheme(): ThemeType;
17
+ /**
18
+ * 设置主题
19
+ */
20
+ setTheme(theme: ThemeType): void;
21
+ /**
22
+ * 切换亮/暗主题
23
+ */
24
+ toggleTheme(): void;
25
+ /**
26
+ * 是否为暗色主题
27
+ */
28
+ isDark(): boolean;
29
+ }
30
+ //# sourceMappingURL=ThemeManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeManager.d.ts","sourceRoot":"","sources":["../../src/core/ThemeManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,YAAY,CAAY;IAEhC,YAAY,SAAS,EAAE,WAAW,EAAE,KAAK,GAAE,SAAmB,EAI7D;IAED;;OAEG;IACH,OAAO,CAAC,UAAU;IAgBlB;;OAEG;IACH,QAAQ,IAAI,SAAS,CAEpB;IAED;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAG/B;IAED;;OAEG;IACH,WAAW,IAAI,IAAI,CASlB;IAED;;OAEG;IACH,MAAM,IAAI,OAAO,CAEhB;CACF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * ToolbarManager - 工具栏管理器
3
+ * 负责创建工具栏 DOM、绑定按钮事件、更新按钮状态
4
+ */
5
+ import { type Editor } from '@tiptap/core';
6
+ import type { ToolbarConfig } from '../types';
7
+ import type { MediaRuntime } from '../media/MediaRuntime';
8
+ import type { I18nManager } from './I18nManager';
9
+ /**
10
+ * 工具栏管理器
11
+ */
12
+ export declare class ToolbarManager {
13
+ private container;
14
+ private editor;
15
+ private i18n?;
16
+ private config?;
17
+ private mediaRuntime;
18
+ private unsubscribeLanguage?;
19
+ /** 同一个项可能同时渲染在顶栏与浮动工具栏里,所以一个 id 对应一组按钮 */
20
+ private buttons;
21
+ /** 按 id 记的覆盖文案:顶栏与浮层共用一份,改一处两处一起改,这是有意的 */
22
+ private customTooltips;
23
+ private itemDefs;
24
+ private createdElements;
25
+ private panel;
26
+ constructor(editor: Editor, container: HTMLElement, config?: ToolbarConfig, i18n?: I18nManager, mediaRuntime?: MediaRuntime | null);
27
+ /**
28
+ * 把浮动工具栏的按钮渲染进给定的元素
29
+ *
30
+ * 元素由门面创建并持有:BubbleMenu 每次隐藏都会把它从文档里摘掉,重建编辑器后
31
+ * 还得拿同一个元素重新 attach,所以它不进 createdElements、也不在这里 remove
32
+ */
33
+ attachBubbleToolbar(element: HTMLElement): void;
34
+ /**
35
+ * 插入浮层按需创建:没点开过就不该有一个实例挂在编辑器上
36
+ */
37
+ private get insertPanel();
38
+ private openInsert;
39
+ /**
40
+ * 创建工具栏 DOM - 直接将按钮插入 container
41
+ */
42
+ private createToolbarDOM;
43
+ /**
44
+ * 解析配置项:字符串按 id 取内置定义,ToolbarItem 允许覆盖展示文案
45
+ */
46
+ private resolveItem;
47
+ private createButton;
48
+ /**
49
+ * 按当前语言刷新按钮 tooltip
50
+ */
51
+ private applyTooltips;
52
+ /**
53
+ * 获取默认工具栏项定义
54
+ */
55
+ private getDefaultItems;
56
+ /**
57
+ * 绑定编辑器事件,更新按钮状态
58
+ */
59
+ private bindEditorEvents;
60
+ /**
61
+ * 更新所有按钮状态
62
+ */
63
+ private updateButtonStates;
64
+ /**
65
+ * 销毁工具栏
66
+ */
67
+ destroy(): void;
68
+ }
69
+ //# sourceMappingURL=ToolbarManager.d.ts.map
@@ -0,0 +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;AA6CjD;;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,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;IAEzC,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,EAYnC;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,CAAC,gBAAgB;IAiDxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,YAAY;IAmDpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAsOvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,IAAI,IAAI,CAWd;CACF"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 选区浮动工具栏的判定:这一次要不要浮出、浮出哪一组
3
+ *
4
+ * 只读状态、不碰排版,BubbleMenu 的 shouldShow 直接喂这里的函数,
5
+ * 单测也就不必先给 jsdom 补一套它根本没有的布局能力
6
+ */
7
+ import { type Editor } from '@tiptap/core';
8
+ import type { EditorState } from '@tiptap/pm/state';
9
+ /** 浮层的作用对象:一段文字,还是一个整节点 */
10
+ export type BubbleGroup = 'text' | 'node';
11
+ /** 文字组只放行内格式:块级与列表留在顶栏,浮层短到不遮住所选的字 */
12
+ export declare const BUBBLE_TEXT_ITEMS: readonly ['bold', 'italic', 'underline', 'strike', 'code'];
13
+ /** 节点组换一批:附件能切形态,图片与附件都能删 */
14
+ export declare const BUBBLE_NODE_ITEMS: readonly ['attachmentDisplay', 'delete'];
15
+ /** 选中这些节点才有可施加的操作,别的整节点选择(将来的 atom 之类)什么都不浮 */
16
+ export declare const BUBBLE_SELECTABLE_NODES: readonly ['image', 'attachment', 'attachmentLink'];
17
+ /**
18
+ * 选中的可操作节点叫什么,没选中或选的是别的节点就返回 null
19
+ */
20
+ export declare function bubbleNodeNameFor(state: EditorState): string | null;
21
+ /**
22
+ * 这一次浮出哪一组。空选区与空白选区仍算 'text',由 shouldShow 里那句 textBetween 判掉
23
+ */
24
+ export declare function bubbleGroupFor(state: EditorState): BubbleGroup | null;
25
+ /**
26
+ * 交给 BubbleMenu.configure 的 shouldShow。
27
+ *
28
+ * 没照抄官方那句"编辑器必须有焦点":失焦隐藏本来就归插件自己的 blurHandler 管,
29
+ * 而 hasFocus() 在 jsdom 里恒假,加上它单测就完全驱动不了这个插件。
30
+ */
31
+ export declare function shouldShowBubbleMenu(props: {
32
+ editor: Editor;
33
+ element: HTMLElement;
34
+ state: EditorState;
35
+ from: number;
36
+ to: number;
37
+ }): boolean;
38
+ //# sourceMappingURL=bubble-toolbar.d.ts.map
@@ -0,0 +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,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,YAAI,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAE5F,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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Lucide Icons - 工具栏图标映射
3
+ * 来源: https://lucide.dev (MIT License)
4
+ */
5
+ export declare const icons: Record<string, string>;
6
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +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,CA4DxC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { CoreEditor } from './CoreEditor';
2
+ export type { CoreEditorConfig } from './CoreEditor';
3
+ export { MarkdownService } from './MarkdownService';
4
+ export { ThemeManager } from './ThemeManager';
5
+ export type { ThemeType } from './ThemeManager';
6
+ export { I18nManager } from './I18nManager';
7
+ export { ExtensionManager } from './ExtensionManager';
8
+ export { ToolbarManager } from './ToolbarManager';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const AtriImage: import("@tiptap/core").Node<import("@tiptap/extension-image").ImageOptions, any>;
2
+ //# sourceMappingURL=AtriImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AtriImage.d.ts","sourceRoot":"","sources":["../../src/extensions/AtriImage.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,SAAS,kFAiCpB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Attachment - 文件附件节点
3
+ *
4
+ * 不能走 ExtensionManager.registerNodeView:那条路合成的节点声明不了 addCommands 与
5
+ * markdown 三件套(只有 renderMarkdown,导出得回来不去),附件要能往返。
6
+ */
7
+ import { Node } from '@tiptap/core';
8
+ import type { AtriAttachmentDisplay, InsertAttachmentOptions } from '../types';
9
+ declare module '@tiptap/core' {
10
+ interface Commands<ReturnType> {
11
+ attachment: {
12
+ /** 在选区处插入一个附件卡片 */
13
+ setAttachment: (options: InsertAttachmentOptions) => ReturnType;
14
+ /** 把选中的附件换成指定显示形态(卡片 / 行内链接) */
15
+ setAttachmentDisplay: (options: {
16
+ display: AtriAttachmentDisplay;
17
+ }) => ReturnType;
18
+ /** 在卡片与行内链接之间切换选中的附件 */
19
+ toggleAttachmentDisplay: () => ReturnType;
20
+ };
21
+ }
22
+ }
23
+ export declare const Attachment: Node<any, any>;
24
+ //# sourceMappingURL=Attachment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Attachment.d.ts","sourceRoot":"","sources":["../../src/extensions/Attachment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAuC,MAAM,cAAc,CAAC;AASzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAS/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;AAwED,eAAO,MAAM,UAAU,gBAwLrB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * AttachmentLink - 行内链接形态的文件附件
3
+ *
4
+ * 与 attachment(块级卡片)是两个节点类型:PM 的 inline/group 在 schema 里静态声明,
5
+ * 同一类型当不了两种形态。属性集、瞬时态补丁与 Markdown 语法家族都走共享模块,
6
+ * 切换命令(Attachment.ts 的 setAttachmentDisplay)只在两者间换节点。
7
+ */
8
+ import { Node } from '@tiptap/core';
9
+ import type { InsertAttachmentOptions } from '../types';
10
+ declare module '@tiptap/core' {
11
+ interface Commands<ReturnType> {
12
+ attachmentLink: {
13
+ /** 在选区处插入一个行内附件链接 */
14
+ setAttachmentLink: (options: InsertAttachmentOptions) => ReturnType;
15
+ };
16
+ }
17
+ }
18
+ export declare const AttachmentLink: Node<any, any>;
19
+ //# sourceMappingURL=AttachmentLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentLink.d.ts","sourceRoot":"","sources":["../../src/extensions/AttachmentLink.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAuC,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAIxD,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;AAQD,eAAO,MAAM,cAAc,gBAiGzB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * MediaFiles - 拖放与剪贴板投放本地文件
3
+ *
4
+ * 只做事件到 MediaRuntime 的转接:校验、限流、插入与回写都在运行时里,
5
+ * 面板选文件走的是同一条路。
6
+ */
7
+ import { Extension } from '@tiptap/core';
8
+ import type { MediaRuntime } from '../media/MediaRuntime';
9
+ export interface MediaFilesOptions {
10
+ runtime: MediaRuntime | null;
11
+ }
12
+ export declare const MediaFiles: Extension<MediaFilesOptions, any>;
13
+ //# sourceMappingURL=MediaFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaFiles.d.ts","sourceRoot":"","sources":["../../src/extensions/MediaFiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAqBD,eAAO,MAAM,UAAU,mCAwCrB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 附件两种形态(块级卡片 attachment / 行内链接 attachmentLink)共享的节点属性
3
+ *
4
+ * PM 的 inline/group 是 schema 级声明,一个类型当不了两种形态,只能拆成两个节点;
5
+ * 但属性集必须完全一致,否则切换形态会丢字段,上传管线也得按类型开分支
6
+ */
7
+ import type { Attribute, CommandProps } from '@tiptap/core';
8
+ import { type Transaction } from '@tiptap/pm/state';
9
+ import type { InsertAttachmentOptions } from '../types';
10
+ /** 两种形态的节点名,判一处用 */
11
+ export declare function isAttachmentForm(name: string): boolean;
12
+ /** 把选区放到离 from 最近的、指定形态的附件节点上——只认"刚插的那种",
13
+ * 否则句中建卡片时旧链接会和新卡片打平距离,选错对象 */
14
+ export declare function selectNearestForm(tr: Transaction, from: number, typeName: string): void;
15
+ /**
16
+ * 插入附件节点并把选区落在它身上
17
+ *
18
+ * tiptap 的 insertContentAt 收尾只给 TextSelection,而这两种 atom 没有 NodeView
19
+ * 不会自己选中——切形态、删除都以"选中的附件"为作用对象,插完就该是选中的
20
+ */
21
+ export declare function insertAttachmentContent(props: CommandProps, typeName: string, options: InsertAttachmentOptions): boolean;
22
+ /** 属性值一律走 data-* 或文本节点,不进 innerHTML:文件名可能来自上传方,不可信 */
23
+ export declare function dataAttr(name: string, value: string | number | null | undefined): Record<string, string>;
24
+ /** 百分比同源写两份:data-* 是"知道进度"的开关,内联自定义属性给样式表取值 */
25
+ export declare function progressAttrs(progress: number | null | undefined): Record<string, string>;
26
+ /** 展示名缺省时从地址尾巴推导 */
27
+ export declare function attachmentLabel(name: unknown, src: unknown): string;
28
+ export declare function attachmentAttributes(): Record<string, Attribute>;
29
+ //# sourceMappingURL=attachment-attrs.d.ts.map
@@ -0,0 +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;AAGxD,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,CAqBT;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,CA8ChE"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 媒体扩展装配
3
+ * 图片与附件是一等 Tiptap 扩展:需要 addCommands / addProseMirrorPlugins / markdown 三件套,
4
+ * 而 ExtensionManager.registerNodeView 合成的节点声明不了这些,所以不走那条路
5
+ */
6
+ import type { EditorOptions } from '@tiptap/core';
7
+ import type { AtriMediaConfig } from '../types';
8
+ import type { MediaRuntime } from '../media/MediaRuntime';
9
+ export declare function createMediaExtensions(media?: AtriMediaConfig | false, runtime?: MediaRuntime | null): NonNullable<EditorOptions['extensions']>;
10
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/extensions/media.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAS1D,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,EAAE,eAAe,GAAG,KAAK,EAC/B,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,GAC5B,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CA8B1C"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Atri Editor - 主入口
3
+ *
4
+ * 一个基于 Tiptap v3 的框架无关富文本编辑器
5
+ * 支持 Web Component、Markdown、AI 集成
6
+ *
7
+ * 样式需显式导入:import '@atri-editor/core/styles';
8
+ */
9
+ export { AtriEditor } from './AtriEditor';
10
+ export { AtriEditorElement, registerAtriElement } from './AtriEditorElement';
11
+ export * from './types';
12
+ export type { AtriNodeViewConfig, NodeViewAttribute } from './types/extension';
13
+ export { CoreEditor, MarkdownService, ThemeManager, I18nManager, ExtensionManager, ToolbarManager, } from './core';
14
+ export type { CoreEditorConfig, ThemeType } from './core';
15
+ export { AtriImage } from './extensions/AtriImage';
16
+ export { Attachment } from './extensions/Attachment';
17
+ export { createMediaExtensions } from './extensions/media';
18
+ export { MediaRuntime } from './media/MediaRuntime';
19
+ export type { MediaState, MediaStatus } from './media/MediaRuntime';
20
+ export { AIService, AIInterceptor, AICommandMenuManager } from './ai';
21
+ export type { AICommandMenuOptions } from './ai';
22
+ export { resolveElement, createContainer, isBrowser, getSelectedText, getCursorContext, getDocumentText, simpleMarkdownToHtml, simpleHtmlToMarkdown, } from './utils';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AACxB,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG/E,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,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,SAAS,CAAC"}