@atri-editor/core 0.2.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +175 -0
  2. package/README.md +1 -1
  3. package/dist/AtriEditor.d.ts +11 -1
  4. package/dist/AtriEditor.d.ts.map +1 -1
  5. package/dist/AtriEditorElement.d.ts +14 -1
  6. package/dist/AtriEditorElement.d.ts.map +1 -1
  7. package/dist/ai/AICommandMenu.d.ts +1 -0
  8. package/dist/ai/AICommandMenu.d.ts.map +1 -1
  9. package/dist/ai/AIInterceptor.d.ts.map +1 -1
  10. package/dist/ai/AIService.d.ts.map +1 -1
  11. package/dist/core/CoreEditor.d.ts +14 -3
  12. package/dist/core/CoreEditor.d.ts.map +1 -1
  13. package/dist/core/I18nManager.d.ts +25 -0
  14. package/dist/core/I18nManager.d.ts.map +1 -1
  15. package/dist/core/LinkPanel.d.ts +74 -0
  16. package/dist/core/LinkPanel.d.ts.map +1 -0
  17. package/dist/core/StyleOptionPanel.d.ts +73 -0
  18. package/dist/core/StyleOptionPanel.d.ts.map +1 -0
  19. package/dist/core/TableGridPanel.d.ts +1 -0
  20. package/dist/core/TableGridPanel.d.ts.map +1 -1
  21. package/dist/core/TableMenu.d.ts +68 -0
  22. package/dist/core/TableMenu.d.ts.map +1 -0
  23. package/dist/core/ThemeManager.d.ts.map +1 -1
  24. package/dist/core/ToolbarManager.d.ts +58 -3
  25. package/dist/core/ToolbarManager.d.ts.map +1 -1
  26. package/dist/core/ToolbarMenuPanel.d.ts +58 -0
  27. package/dist/core/ToolbarMenuPanel.d.ts.map +1 -0
  28. package/dist/core/bubble-toolbar.d.ts +8 -2
  29. package/dist/core/bubble-toolbar.d.ts.map +1 -1
  30. package/dist/core/floating-panel.d.ts +24 -1
  31. package/dist/core/floating-panel.d.ts.map +1 -1
  32. package/dist/core/icons.d.ts.map +1 -1
  33. package/dist/core/style-presets.d.ts +47 -0
  34. package/dist/core/style-presets.d.ts.map +1 -0
  35. package/dist/extensions/Attachment.d.ts.map +1 -1
  36. package/dist/extensions/AttachmentLink.d.ts.map +1 -1
  37. package/dist/extensions/attachment-attrs.d.ts.map +1 -1
  38. package/dist/extensions/formatting.d.ts +24 -0
  39. package/dist/extensions/formatting.d.ts.map +1 -0
  40. package/dist/extensions/markdown-inline-html.d.ts +73 -0
  41. package/dist/extensions/markdown-inline-html.d.ts.map +1 -0
  42. package/dist/extensions/table.d.ts +23 -0
  43. package/dist/extensions/table.d.ts.map +1 -0
  44. package/dist/index.d.ts +2 -0
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +2025 -188
  47. package/dist/index.js.map +1 -1
  48. package/dist/media/InsertPanel.d.ts +1 -0
  49. package/dist/media/InsertPanel.d.ts.map +1 -1
  50. package/dist/media/MediaRuntime.d.ts +13 -0
  51. package/dist/media/MediaRuntime.d.ts.map +1 -1
  52. package/dist/media/MediaStatusStrip.d.ts.map +1 -1
  53. package/dist/media/Uploader.d.ts.map +1 -1
  54. package/dist/style.css +311 -4
  55. package/dist/types/ai.d.ts +5 -0
  56. package/dist/types/ai.d.ts.map +1 -1
  57. package/dist/types/editor.d.ts +49 -3
  58. package/dist/types/editor.d.ts.map +1 -1
  59. package/dist/types/markdown.d.ts +14 -0
  60. package/dist/types/markdown.d.ts.map +1 -1
  61. package/dist/types/media.d.ts +5 -0
  62. package/dist/types/media.d.ts.map +1 -1
  63. package/dist/utils/escape.d.ts +30 -0
  64. package/dist/utils/escape.d.ts.map +1 -0
  65. package/dist/utils/formatting.d.ts +18 -0
  66. package/dist/utils/formatting.d.ts.map +1 -0
  67. package/dist/utils/index.d.ts +3 -0
  68. package/dist/utils/index.d.ts.map +1 -1
  69. package/dist/utils/markdown.d.ts +5 -3
  70. package/dist/utils/markdown.d.ts.map +1 -1
  71. package/dist/utils/safe-call.d.ts +15 -0
  72. package/dist/utils/safe-call.d.ts.map +1 -0
  73. package/dist/utils/table.d.ts +11 -4
  74. package/dist/utils/table.d.ts.map +1 -1
  75. package/dist/utils/url.d.ts +20 -0
  76. package/dist/utils/url.d.ts.map +1 -0
  77. package/package.json +7 -1
@@ -1 +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"}
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;AAC3B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
@@ -1,10 +1,12 @@
1
- /**
2
- * Markdown 工具函数
3
- */
4
1
  /**
5
2
  * 简单的 Markdown 转 HTML(用于 AI 响应处理)
6
3
  * 注意:完整的 Markdown 解析由 @tiptap/markdown 处理
7
4
  * 这里仅提供基础的 Markdown 语法转换
5
+ *
6
+ * 定位是"降级渲染器":输出的 HTML 仍需交给 schema 解析或宿主自行处理,
7
+ * 本身不构成一道安全的 sanitizer。但它的产物会经 markdownToHTML() 作为裸字符串
8
+ * 直接返回给宿主,所以不可信的 Markdown(AI 端点、用户上传的 .md)进来时,
9
+ * 尖括号与引号必须先转义、地址必须先过协议白名单。
8
10
  */
9
11
  export declare function simpleMarkdownToHtml(markdown: string): string;
10
12
  /**
@@ -1 +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"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiE7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiDzD"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 宿主回调隔离
3
+ *
4
+ * 编辑器在 Tiptap 的事件里同步调用宿主传入的 onCreate/onChange/onError/…,
5
+ * 一个抛错的回调会把整条 dispatch 链打断——症状是"敲了键但文档没变",
6
+ * 排查方向还会被带到编辑器身上。回调是外部输入,边界处就得自己兜住。
7
+ */
8
+ /**
9
+ * 调用宿主回调,异常降级成一条日志。
10
+ *
11
+ * 非函数(宿主没配这个钩子)静默返回,不占用去重名额。
12
+ * 只用于包宿主的函数,库内部逻辑不要经这里——那会把真正的 bug 也吞成日志。
13
+ */
14
+ export declare function runSafely(callback: unknown, label: string, args?: unknown[]): void;
15
+ //# sourceMappingURL=safe-call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-call.d.ts","sourceRoot":"","sources":["../../src/utils/safe-call.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,EAAO,GAAG,IAAI,CAUtF"}
@@ -6,12 +6,19 @@
6
6
  */
7
7
  import type { Editor } from '@tiptap/core';
8
8
  /**
9
- * 内置表格是否真的可用:table:false 不注册、用户用同名扩展顶掉,两种情况都该判 false
9
+ * 内置表格是否真的赢下了 schema
10
10
  *
11
11
  * 不能扫 extensionManager 里的名字:tiptap 对重名扩展只告警不去重,顶掉场景下
12
- * 内置 Table 仍在列表里、赢的却是用户的 schema 节点,而内置 insertTable 命令
13
- * 按 spec.tableRole 找型,找不到就在点击当场抛错。命令存在性 + schema 角色
14
- * 两条一起看,判定的才是"这一下真能插出来"
12
+ * 内置 Table 仍在列表里、赢的却是用户的 schema 节点,而它没有 tableRole。
13
+ * prosemirror-tables 的列宽插件启动时就按 tableRole 找 table 节点,找不到直接抛错,
14
+ * 所以这个判据同时决定"按钮摆不摆"和"这套插件注不注册"
15
+ */
16
+ export declare function isBuiltinTableActive(editor: Editor): boolean;
17
+ /**
18
+ * 内置表格是否真的可用:table:false 不注册、用户用同名扩展顶掉,两种情况都该判 false
19
+ *
20
+ * 命令存在性 + schema 角色两条一起看,判定的才是"这一下真能插出来"——
21
+ * 内置 insertTable 命令按 spec.tableRole 找型,找不到就在点击当场抛错
15
22
  */
16
23
  export declare function canInsertTable(editor: Editor): boolean;
17
24
  //# sourceMappingURL=table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/utils/table.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAKtD"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/utils/table.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGtD"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * URL 协议白名单
3
+ *
4
+ * 库里有五条来源会把 URL 写进可点击的 DOM 属性:宿主调 insertImage/insertAttachment、
5
+ * 上传服务的响应体、外部粘贴的 HTML、setJSON 回灌、以及节点属性的 setNodeMarkup。
6
+ * 逐条在入口校验拦不住全部——只有渲染层是唯一的收口点,所以校验放在 renderHTML。
7
+ */
8
+ /**
9
+ * 校验 URL 的协议是否安全,返回清洗后的地址;不接受时返回 null。
10
+ *
11
+ * 没有 scheme 的相对路径(/files/a.pdf、a.pdf、#anchor、?q=1)一律放行:
12
+ * 附件与图片的常见部署形态就是同源相对路径,按协议拦会把正常用法打断。
13
+ */
14
+ export declare function safeHref(value: unknown, schemes?: readonly string[]): string | null;
15
+ /**
16
+ * 校验图片 / 附件的资源地址:比 href 多允许 data: 与 blob:,
17
+ * 因为「本地预览 → 上传完成后换成服务端地址」这条链路全程依赖它们。
18
+ */
19
+ export declare function safeMediaSrc(value: unknown): string | null;
20
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+BH;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,SAAS,MAAM,EAAiB,GAAG,MAAM,GAAG,IAAI,CAUjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE1D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atri-editor/core",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Core package for Atri Editor",
5
5
  "keywords": [
6
6
  "editor",
@@ -25,6 +25,7 @@
25
25
  ],
26
26
  "type": "module",
27
27
  "sideEffects": [
28
+ "dist/index.js",
28
29
  "dist/style.css"
29
30
  ],
30
31
  "main": "./dist/index.js",
@@ -56,9 +57,14 @@
56
57
  "dependencies": {
57
58
  "@floating-ui/dom": "^1.6.0",
58
59
  "@tiptap/extension-bubble-menu": "^3.30.4",
60
+ "@tiptap/extension-highlight": "^3.30.4",
59
61
  "@tiptap/extension-image": "^3.30.4",
62
+ "@tiptap/extension-list": "^3.30.4",
63
+ "@tiptap/extension-subscript": "^3.30.4",
64
+ "@tiptap/extension-superscript": "^3.30.4",
60
65
  "@tiptap/extension-table": "^3.30.4",
61
66
  "@tiptap/extension-text-align": "^3.30.4",
67
+ "@tiptap/extension-text-style": "^3.30.4",
62
68
  "@tiptap/extensions": "^3.30.4",
63
69
  "@tiptap/markdown": "^3.30.4",
64
70
  "@tiptap/starter-kit": "^3.30.4",