@atri-editor/core 0.3.0 → 0.5.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 (76) hide show
  1. package/CHANGELOG.md +155 -0
  2. package/dist/AtriEditor.d.ts +20 -1
  3. package/dist/AtriEditor.d.ts.map +1 -1
  4. package/dist/AtriEditorElement.d.ts +26 -2
  5. package/dist/AtriEditorElement.d.ts.map +1 -1
  6. package/dist/ai/AICommandMenu.d.ts +1 -0
  7. package/dist/ai/AICommandMenu.d.ts.map +1 -1
  8. package/dist/ai/AIInterceptor.d.ts.map +1 -1
  9. package/dist/ai/AIService.d.ts.map +1 -1
  10. package/dist/core/CoreEditor.d.ts +9 -0
  11. package/dist/core/CoreEditor.d.ts.map +1 -1
  12. package/dist/core/I18nManager.d.ts +25 -0
  13. package/dist/core/I18nManager.d.ts.map +1 -1
  14. package/dist/core/LinkPanel.d.ts +1 -0
  15. package/dist/core/LinkPanel.d.ts.map +1 -1
  16. package/dist/core/MarkdownService.d.ts +12 -1
  17. package/dist/core/MarkdownService.d.ts.map +1 -1
  18. package/dist/core/StyleOptionPanel.d.ts +73 -0
  19. package/dist/core/StyleOptionPanel.d.ts.map +1 -0
  20. package/dist/core/TableGridPanel.d.ts +1 -0
  21. package/dist/core/TableGridPanel.d.ts.map +1 -1
  22. package/dist/core/TableMenu.d.ts +1 -0
  23. package/dist/core/TableMenu.d.ts.map +1 -1
  24. package/dist/core/ThemeManager.d.ts.map +1 -1
  25. package/dist/core/ToolbarManager.d.ts +50 -1
  26. package/dist/core/ToolbarManager.d.ts.map +1 -1
  27. package/dist/core/ToolbarMenuPanel.d.ts +58 -0
  28. package/dist/core/ToolbarMenuPanel.d.ts.map +1 -0
  29. package/dist/core/bubble-toolbar.d.ts +8 -2
  30. package/dist/core/bubble-toolbar.d.ts.map +1 -1
  31. package/dist/core/floating-panel.d.ts +24 -1
  32. package/dist/core/floating-panel.d.ts.map +1 -1
  33. package/dist/core/icons.d.ts.map +1 -1
  34. package/dist/core/markdown-losses.d.ts +26 -0
  35. package/dist/core/markdown-losses.d.ts.map +1 -0
  36. package/dist/core/style-presets.d.ts +47 -0
  37. package/dist/core/style-presets.d.ts.map +1 -0
  38. package/dist/extensions/Attachment.d.ts.map +1 -1
  39. package/dist/extensions/AttachmentLink.d.ts.map +1 -1
  40. package/dist/extensions/attachment-attrs.d.ts.map +1 -1
  41. package/dist/extensions/formatting.d.ts +24 -0
  42. package/dist/extensions/formatting.d.ts.map +1 -0
  43. package/dist/extensions/markdown-inline-html.d.ts +73 -0
  44. package/dist/extensions/markdown-inline-html.d.ts.map +1 -0
  45. package/dist/index.d.ts +2 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +1529 -199
  48. package/dist/index.js.map +1 -1
  49. package/dist/media/InsertPanel.d.ts +1 -0
  50. package/dist/media/InsertPanel.d.ts.map +1 -1
  51. package/dist/media/MediaRuntime.d.ts +13 -0
  52. package/dist/media/MediaRuntime.d.ts.map +1 -1
  53. package/dist/media/MediaStatusStrip.d.ts.map +1 -1
  54. package/dist/media/Uploader.d.ts.map +1 -1
  55. package/dist/style.css +186 -0
  56. package/dist/types/ai.d.ts +5 -0
  57. package/dist/types/ai.d.ts.map +1 -1
  58. package/dist/types/editor.d.ts +23 -2
  59. package/dist/types/editor.d.ts.map +1 -1
  60. package/dist/types/markdown.d.ts +32 -0
  61. package/dist/types/markdown.d.ts.map +1 -1
  62. package/dist/types/media.d.ts +5 -0
  63. package/dist/types/media.d.ts.map +1 -1
  64. package/dist/utils/escape.d.ts +30 -0
  65. package/dist/utils/escape.d.ts.map +1 -0
  66. package/dist/utils/formatting.d.ts +18 -0
  67. package/dist/utils/formatting.d.ts.map +1 -0
  68. package/dist/utils/index.d.ts +3 -0
  69. package/dist/utils/index.d.ts.map +1 -1
  70. package/dist/utils/markdown.d.ts +5 -3
  71. package/dist/utils/markdown.d.ts.map +1 -1
  72. package/dist/utils/safe-call.d.ts +15 -0
  73. package/dist/utils/safe-call.d.ts.map +1 -0
  74. package/dist/utils/url.d.ts +20 -0
  75. package/dist/utils/url.d.ts.map +1 -0
  76. package/package.json +16 -12
@@ -27,6 +27,7 @@ export declare class InsertPanel {
27
27
  private mode;
28
28
  private floating;
29
29
  private detachDismiss;
30
+ private detachTheme;
30
31
  private labelled;
31
32
  constructor(options: InsertPanelOptions);
32
33
  get openMode(): InsertPanelMode | null;
@@ -1 +1 @@
1
- {"version":3,"file":"InsertPanel.d.ts","sourceRoot":"","sources":["../../src/media/InsertPanel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAO3C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,YAAY,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CACvD;AAcD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAc;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAyC;IAC9D,OAAO,CAAC,mBAAmB,CAAC,CAAa;IAEzC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAyB;IAEzC,YAAY,OAAO,EAAE,kBAAkB,EAOtC;IAED,IAAI,QAAQ,IAAI,eAAe,GAAG,IAAI,CAErC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAYvD;IAED,KAAK,IAAI,IAAI,CAYZ;IAED,OAAO,IAAI,IAAI,CAId;IAED,OAAO,CAAC,CAAC;IAIT;;OAEG;IACH,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,KAAK;IAqFb;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,QAAQ;IAMhB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAKzB"}
1
+ {"version":3,"file":"InsertPanel.d.ts","sourceRoot":"","sources":["../../src/media/InsertPanel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAO3C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,YAAY,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CACvD;AAcD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAc;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAyC;IAC9D,OAAO,CAAC,mBAAmB,CAAC,CAAa;IAEzC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,QAAQ,CAAyB;IAEzC,YAAY,OAAO,EAAE,kBAAkB,EAOtC;IAED,IAAI,QAAQ,IAAI,eAAe,GAAG,IAAI,CAErC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAYvD;IAED,KAAK,IAAI,IAAI,CAcZ;IAED,OAAO,IAAI,IAAI,CAId;IAED,OAAO,CAAC,CAAC;IAIT;;OAEG;IACH,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,KAAK;IAqFb;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,QAAQ;IAMhB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAKzB"}
@@ -5,6 +5,7 @@
5
5
  * 所以它由 AtriEditor 持有一个实例,每次重建通过 bind() 换绑到新的 Editor。
6
6
  */
7
7
  import type { Editor } from '@tiptap/core';
8
+ import type { Node as PmNode } from '@tiptap/pm/model';
8
9
  import type { AtriMediaConfig, MediaKind } from '../types';
9
10
  /** 节点瞬时态,写进 data-atri-upload-status */
10
11
  export type MediaStatus = 'uploading' | 'error';
@@ -110,4 +111,16 @@ export declare class MediaRuntime {
110
111
  private reject;
111
112
  private emit;
112
113
  }
114
+ /**
115
+ * 找任务对应的节点位置。
116
+ *
117
+ * 预览地址这条兜底必须要求 previewUrl 非空:revokePreviewUrl 会把它置成 null,
118
+ * 而 `node.attrs.src === null` 对任何还没落地地址的媒体节点都成立,
119
+ * 于是进度与状态会写到第一张不相干的卡片上,真正的卡片反而永不更新。
120
+ * uploadId 唯一且稳定,所以先按它找,找不到才退到预览地址。
121
+ */
122
+ export declare function findTaskPosition(doc: PmNode, task: {
123
+ id: string;
124
+ previewUrl: string | null;
125
+ }): number | null;
113
126
  //# sourceMappingURL=MediaRuntime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediaRuntime.d.ts","sourceRoot":"","sources":["../../src/media/MediaRuntime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAW,MAAM,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EAIV,MAAM,UAAU,CAAC;AAKlB,uCAAuC;AACvC,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;AAEhD,wBAAwB;AACxB,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAgCD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,QAAQ,CAAK;IAErB,YAAY,MAAM,GAAE,eAAoB,EAGvC;IAED;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CASzB;IAED;;;OAGG;IACG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC3F;IAED;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAI7C;IAED;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3B;IAED;;;;;;OAMG;IACH,iBAAiB,IAAI,OAAO,CAE3B;IAED,QAAQ,IAAI,UAAU,CAerB;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAM3D;IAED,OAAO,IAAI,IAAI,CAQd;IAED;;;OAGG;YACW,YAAY;IAoB1B,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAyBhB;;;;OAIG;IACH,OAAO,CAAC,cAAc;YAWR,WAAW;IA4CzB;;;;;OAKG;YACW,kBAAkB;IAsBhC,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,KAAK;IAiCb;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;OAEG;IACH,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,IAAI;CAKb"}
1
+ {"version":3,"file":"MediaRuntime.d.ts","sourceRoot":"","sources":["../../src/media/MediaRuntime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAW,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EAIV,MAAM,UAAU,CAAC;AAMlB,uCAAuC;AACvC,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;AAEhD,wBAAwB;AACxB,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAgCD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,QAAQ,CAAK;IAErB,YAAY,MAAM,GAAE,eAAoB,EAGvC;IAED;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CASzB;IAED;;;OAGG;IACG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC3F;IAED;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAI7C;IAED;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3B;IAED;;;;;;OAMG;IACH,iBAAiB,IAAI,OAAO,CAE3B;IAED,QAAQ,IAAI,UAAU,CAerB;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAM3D;IAED,OAAO,IAAI,IAAI,CASd;IAED;;;OAGG;YACW,YAAY;IAoB1B,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAyBhB;;;;OAIG;IACH,OAAO,CAAC,cAAc;YAWR,WAAW;IA4CzB;;;;;OAKG;YACW,kBAAkB;IAsBhC,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,KAAK;IAiCb;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;OAEG;IACH,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,IAAI;CAKb;AAMD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC9C,MAAM,GAAG,IAAI,CAYf"}
@@ -1 +1 @@
1
- {"version":3,"file":"MediaStatusStrip.d.ts","sourceRoot":"","sources":["../../src/media/MediaStatusStrip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAS/D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IAEzC,YAAY,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,EAkC5E;IAED,OAAO,IAAI,IAAI,CAId;IAED,OAAO,CAAC,MAAM;CAwBf"}
1
+ {"version":3,"file":"MediaStatusStrip.d.ts","sourceRoot":"","sources":["../../src/media/MediaStatusStrip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAS/D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IAEzC,YAAY,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,EAwC5E;IAED,OAAO,IAAI,IAAI,CAId;IAED,OAAO,CAAC,MAAM;CAwBf"}
@@ -1 +1 @@
1
- {"version":3,"file":"Uploader.d.ts","sourceRoot":"","sources":["../../src/media/Uploader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7F,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACnE;AA0FD,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,aAAa,GAAG,QAAQ,GAAG,IAAI,CAUzF"}
1
+ {"version":3,"file":"Uploader.d.ts","sourceRoot":"","sources":["../../src/media/Uploader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7F,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACnE;AAgID,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,aAAa,GAAG,QAAQ,GAAG,IAAI,CAUzF"}
package/dist/style.css CHANGED
@@ -426,6 +426,187 @@
426
426
  border-color: var(--atri-color-primary-hover);
427
427
  }
428
428
 
429
+ .atri-style-panel {
430
+ position: fixed;
431
+ z-index: 1000;
432
+ padding: 12px;
433
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
434
+ font-size: 12px;
435
+ color: var(--atri-text-color);
436
+ background-color: var(--atri-bg-color);
437
+ border: 1px solid var(--atri-border-color);
438
+ border-radius: 8px;
439
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
440
+ box-sizing: border-box;
441
+ }
442
+ .atri-style-panel *,
443
+ .atri-style-panel *::before,
444
+ .atri-style-panel *::after {
445
+ box-sizing: border-box;
446
+ }
447
+ .atri-style-panel:focus {
448
+ outline: none;
449
+ }
450
+
451
+ .atri-style-panel-body {
452
+ display: flex;
453
+ flex-direction: column;
454
+ gap: 2px;
455
+ }
456
+
457
+ .atri-style-panel--grid .atri-style-panel-body {
458
+ display: grid;
459
+ grid-template-columns: repeat(6, 24px);
460
+ gap: 4px;
461
+ }
462
+
463
+ .atri-style-panel-row {
464
+ display: flex;
465
+ align-items: center;
466
+ gap: 8px;
467
+ min-width: 120px;
468
+ padding: 4px 6px;
469
+ font-family: inherit;
470
+ font-size: inherit;
471
+ color: inherit;
472
+ text-align: left;
473
+ background: none;
474
+ border: none;
475
+ border-radius: 4px;
476
+ cursor: pointer;
477
+ transition: all 0.2s ease;
478
+ }
479
+ .atri-style-panel-row:hover, .atri-style-panel-row:focus-visible {
480
+ background-color: var(--atri-bg-color-hover);
481
+ }
482
+ .atri-style-panel-row:focus-visible {
483
+ outline: 1px solid var(--atri-border-color-hover);
484
+ outline-offset: 1px;
485
+ }
486
+
487
+ .atri-style-panel--grid .atri-style-panel-row {
488
+ min-width: 0;
489
+ padding: 0;
490
+ justify-content: center;
491
+ }
492
+
493
+ .atri-style-panel-row--swatch-only .atri-style-panel-text {
494
+ display: none;
495
+ }
496
+
497
+ .atri-style-panel-swatch {
498
+ width: 22px;
499
+ height: 22px;
500
+ border: 1px solid var(--atri-border-color);
501
+ border-radius: 4px;
502
+ flex: none;
503
+ }
504
+
505
+ .atri-style-panel-text {
506
+ overflow: hidden;
507
+ white-space: nowrap;
508
+ text-overflow: ellipsis;
509
+ }
510
+
511
+ .atri-style-panel-row--clear {
512
+ margin-top: 2px;
513
+ color: var(--atri-text-color-secondary);
514
+ border-top: 1px solid var(--atri-border-color);
515
+ border-radius: 0;
516
+ }
517
+
518
+ .atri-style-panel--grid .atri-style-panel-row--clear,
519
+ .atri-style-panel-custom {
520
+ grid-column: 1/-1;
521
+ }
522
+
523
+ .atri-style-panel-custom {
524
+ display: flex;
525
+ align-items: center;
526
+ gap: 8px;
527
+ margin-top: 8px;
528
+ padding-top: 8px;
529
+ color: var(--atri-text-color-secondary);
530
+ border-top: 1px solid var(--atri-border-color);
531
+ cursor: pointer;
532
+ }
533
+
534
+ .atri-style-panel-custom-input {
535
+ width: 28px;
536
+ height: 22px;
537
+ padding: 0;
538
+ background: none;
539
+ border: 1px solid var(--atri-border-color);
540
+ border-radius: 4px;
541
+ cursor: pointer;
542
+ }
543
+
544
+ .atri-editor-toolbar-btn--menu {
545
+ width: auto;
546
+ min-width: 32px;
547
+ padding: 0 4px;
548
+ gap: 2px;
549
+ }
550
+ .atri-editor-toolbar-btn--menu svg:last-child {
551
+ width: 12px;
552
+ height: 12px;
553
+ opacity: 0.65;
554
+ }
555
+
556
+ .atri-toolbar-menu {
557
+ position: fixed;
558
+ z-index: 1000;
559
+ min-width: 140px;
560
+ padding: 4px;
561
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
562
+ font-size: 12px;
563
+ color: var(--atri-text-color);
564
+ background-color: var(--atri-bg-color);
565
+ border: 1px solid var(--atri-border-color);
566
+ border-radius: 8px;
567
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
568
+ box-sizing: border-box;
569
+ }
570
+ .atri-toolbar-menu *,
571
+ .atri-toolbar-menu *::before,
572
+ .atri-toolbar-menu *::after {
573
+ box-sizing: border-box;
574
+ }
575
+ .atri-toolbar-menu:focus {
576
+ outline: none;
577
+ }
578
+
579
+ .atri-toolbar-menu-item {
580
+ display: block;
581
+ width: 100%;
582
+ padding: 5px 8px;
583
+ font-family: inherit;
584
+ font-size: inherit;
585
+ color: inherit;
586
+ text-align: left;
587
+ background: none;
588
+ border: none;
589
+ border-radius: 4px;
590
+ cursor: pointer;
591
+ transition: all 0.2s ease;
592
+ }
593
+ .atri-toolbar-menu-item:hover, .atri-toolbar-menu-item:focus-visible {
594
+ background-color: var(--atri-bg-color-hover);
595
+ }
596
+ .atri-toolbar-menu-item:focus-visible {
597
+ outline: 1px solid var(--atri-border-color-hover);
598
+ outline-offset: -1px;
599
+ }
600
+ .atri-toolbar-menu-item.active {
601
+ color: var(--atri-color-primary);
602
+ font-weight: 600;
603
+ }
604
+ .atri-toolbar-menu-item:disabled {
605
+ color: var(--atri-text-color-disabled);
606
+ cursor: not-allowed;
607
+ opacity: 0.6;
608
+ }
609
+
429
610
  :root {
430
611
  --atri-color-primary: #1890ff;
431
612
  --atri-color-primary-hover: #40a9ff;
@@ -530,11 +711,16 @@
530
711
  background-color: var(--atri-bg-color);
531
712
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
532
713
  z-index: 1000;
714
+ max-width: min(90vw, 320px);
715
+ flex-wrap: wrap;
716
+ justify-content: center;
533
717
  }
534
718
  .atri-editor-bubble-toolbar .atri-editor-bubble-group {
535
719
  display: none;
536
720
  align-items: center;
537
721
  gap: 2px;
722
+ flex-wrap: wrap;
723
+ justify-content: center;
538
724
  }
539
725
 
540
726
  .atri-editor-bubble-toolbar[data-atri-bubble-mode=text] .atri-editor-bubble-group[data-atri-bubble-group=text],
@@ -74,5 +74,10 @@ export interface AtriAIConfig {
74
74
  autoTranslateMarkdownToHTML?: boolean;
75
75
  /** 全局错误处理 */
76
76
  onError?: (error: Error, context: AIRequestContext) => void;
77
+ /**
78
+ * 等待 requestEndpoint 的超时毫秒数,缺省不超时(长生成是合法场景)。
79
+ * 超时只让库停止等待并丢弃随后到达的结果——请求由宿主发出,库没有取消它的能力
80
+ */
81
+ timeout?: number;
77
82
  }
78
83
  //# sourceMappingURL=ai.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/types/ai.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,WAAW;IACX,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,gBAAgB,GAAG,KAAK,CAAC;IACrE,oBAAoB;IACpB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,KAAK,UAAU,CAAC;IAC5E,+BAA+B;IAC/B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,MAAM,CAAC;IACtE,YAAY;IACZ,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,eAAe,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACpE,WAAW;IACX,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,4CAA4C;IAC5C,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,aAAa;IACb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC7D"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/types/ai.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5C,WAAW;IACX,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,gBAAgB,GAAG,KAAK,CAAC;IACrE,oBAAoB;IACpB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,KAAK,UAAU,CAAC;IAC5E,+BAA+B;IAC/B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,MAAM,CAAC;IACtE,YAAY;IACZ,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,eAAe,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACpE,WAAW;IACX,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,4CAA4C;IAC5C,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,aAAa;IACb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5D;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -1,6 +1,6 @@
1
1
  import type { Editor, Extensions, JSONContent } from '@tiptap/core';
2
2
  import type { AtriAIConfig } from './ai';
3
- import type { AtriMarkdownConfig } from './markdown';
3
+ import type { AtriMarkdownConfig, MarkdownLoss } from './markdown';
4
4
  import type { AtriMediaConfig, InsertAttachmentOptions, InsertImageOptions, MediaKind } from './media';
5
5
  import type { AtriNodeViewConfig } from './extension';
6
6
  import type { ThemeType } from '../core/ThemeManager';
@@ -32,7 +32,11 @@ export interface ToolbarItem {
32
32
  icon?: string;
33
33
  /** 提示文字,优先于当前语言的内置词条 */
34
34
  tooltip?: string;
35
- /** 子菜单(尚未实现,声明后会被忽略) */
35
+ /**
36
+ * 下拉菜单的子项 id 列表,替换该内置菜单的默认子项。
37
+ * 目前只有 `heading` 与 `align` 两个内置项是下拉,写在其他项上会告警并忽略。
38
+ * 只支持一层;子项走的是与顶栏项同一张表,所以同样受能力门控,未知 id 告警跳过
39
+ */
36
40
  children?: ToolbarItem[];
37
41
  }
38
42
  /**
@@ -116,6 +120,19 @@ export interface AtriEditorOptions {
116
120
  table?: boolean | AtriTableConfig;
117
121
  /** 链接配置;不设置时编辑态点击不导航,改为就地编辑 */
118
122
  link?: AtriLinkConfig;
123
+ /**
124
+ * 基础格式(文字颜色 / 背景色 / 字号 / 字体 / 高亮 / 上下标)开关,默认开。
125
+ * `false` 时这些 mark 一个都不注册,外来 HTML 里的 `<span style="color:…">`
126
+ * 也不会再变成带样式的文字。导出行为见 `markdown.inlineStyles`。
127
+ */
128
+ formatting?: boolean;
129
+ /**
130
+ * 内置代码块开关,默认开。`false` 时不注册 StarterKit 的 CodeBlock,
131
+ * `codeBlock` 这个节点名让给你自己(或 @atri-editor/code-highlight)的实现。
132
+ * 需要关掉而不是"传个同名的顶掉":节点确实后者赢,但两个同名实现并存时
133
+ * lowlight 的装饰插件不工作,且不报错
134
+ */
135
+ codeBlock?: false;
119
136
  /** 创建完成回调 */
120
137
  onCreate?: (editor: IAtriEditor) => void;
121
138
  /** 内容变更回调 */
@@ -139,6 +156,10 @@ export interface IAtriEditor {
139
156
  getJSON(): object;
140
157
  /** 获取 Markdown 内容 */
141
158
  getMarkdown(): string;
159
+ /** 这一次 getMarkdown() 会丢掉哪些内容 */
160
+ getMarkdownLosses(): MarkdownLoss[];
161
+ /** 当前内容里有没有导出 Markdown 时会丢的东西 */
162
+ hasLossyContent(): boolean;
142
163
  /** 设置内容 */
143
164
  setContent(content: string | object, options?: SetContentOptions): void;
144
165
  /** 设置 Markdown 内容 */
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,SAAS,EACV,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACtC,eAAe;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yBAAyB;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,aAAa;AACb,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,oCAAoC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW;IACX,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,WAAW;IACX,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IAC7C,sBAAsB;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,OAAO,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAChC,0CAA0C;IAC1C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,uBAAuB;IACvB,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACjC,YAAY;IACZ,EAAE,CAAC,EAAE,YAAY,CAAC;IAClB,kBAAkB;IAClB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,sCAAsC;IACtC,KAAK,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC;IAChC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IAClC,+BAA+B;IAC/B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa;IACb,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,aAAa;IACb,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,WAAW;IACX,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,WAAW;IACX,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,iBAAiB;IACjB,OAAO,IAAI,MAAM,CAAC;IAClB,iBAAiB;IACjB,OAAO,IAAI,MAAM,CAAC;IAClB,qBAAqB;IACrB,WAAW,IAAI,MAAM,CAAC;IACtB,WAAW;IACX,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxE,qBAAqB;IACrB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,WAAW;IACX,YAAY,IAAI,IAAI,CAAC;IACrB,WAAW;IACX,OAAO,IAAI,OAAO,CAAC;IAEnB,sBAAsB;IACtB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,sBAAsB;IACtB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC,sBAAsB;IACtB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;IAE9C,aAAa;IACb,eAAe,IAAI,MAAM,CAAC;IAC1B,WAAW;IACX,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,YAAY;IACZ,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C,eAAe;IACf,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,iBAAiB;IACjB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACzD,eAAe;IACf,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,6CAA6C;IAC7C,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,gBAAgB;IAChB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,6BAA6B;IAC7B,iBAAiB,IAAI,OAAO,CAAC;IAE7B,cAAc;IACd,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,YAAY;IACZ,UAAU,IAAI,OAAO,CAAC;IACtB,SAAS;IACT,KAAK,IAAI,IAAI,CAAC;IACd,SAAS;IACT,IAAI,IAAI,IAAI,CAAC;IAEb,YAAY;IACZ,OAAO,IAAI,IAAI,CAAC;CACjB"}
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"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"}
@@ -25,5 +25,37 @@ export interface AtriMarkdownConfig {
25
25
  * 作用于所有扩展注册的 input rules,不影响粘贴处理与 Markdown 序列化
26
26
  */
27
27
  shortcuts?: boolean;
28
+ /**
29
+ * 文字颜色 / 背景色 / 字号 / 字体 / 彩色高亮 / 上下标在导出 Markdown 时怎么落。
30
+ *
31
+ * Markdown 没有这些的表示法,默认 `'html'` 用内联 HTML(`<span style>` / `<sub>` /
32
+ * `<mark data-color>`)承载:自家 `getMarkdown → setMarkdown` 无损且幂等,发到 GitHub
33
+ * 一类渲染器时样式会被剥掉但**不会露出字面标签**,读者看到的是干净纯文本。
34
+ *
35
+ * `'drop'` 则完全不发出这些样式,导出的是最纯粹的 CommonMark,代价是这次导出丢内容
36
+ * (粘贴与外来 .md 里的 `<span style>` 仍会正常解析进来)。要发给严格的
37
+ * Markdown 渲染器就用它,配合 `getMarkdownLosses()` 自己决定要不要提示用户。
38
+ *
39
+ * 默认 `'html'`
40
+ */
41
+ inlineStyles?: 'html' | 'drop';
42
+ }
43
+ /** 导出 Markdown 时丢失的类别:整个节点、整个标记,还是类型上一个没被 renderer 读到的属性 */
44
+ export type MarkdownLossKind = 'node' | 'mark' | 'attribute';
45
+ /**
46
+ * 一处会在 `getMarkdown()` 中丢失的内容,由 `AtriEditor.getMarkdownLosses()` 产出
47
+ *
48
+ * Tiptap 的序列化器对没有 `renderMarkdown` 钩子的类型是静默丢弃——不抛错、不降级成 HTML、
49
+ * 不留痕迹,所以光看返回值看不出这一趟少了什么。
50
+ */
51
+ export interface MarkdownLoss {
52
+ /** 丢的是节点、标记,还是一个属性 */
53
+ kind: MarkdownLossKind;
54
+ /** schema 里的类型名,如 `'paragraph'` */
55
+ type: string;
56
+ /** `kind === 'attribute'` 时给出属性名,其余情况省略 */
57
+ attribute?: string;
58
+ /** 这一趟导出里会丢几处。标记按连续区间计,一个红色短语不会数出三处 */
59
+ count: number;
28
60
  }
29
61
  //# sourceMappingURL=markdown.d.ts.map
@@ -1 +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"}
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;IACpB;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,IAAI,EAAE,gBAAgB,CAAC;IACvB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -42,6 +42,11 @@ export interface AtriUploadConfig {
42
42
  requestName?: (file: File) => string;
43
43
  /** 响应体形状千差万别,用它挑出 url;缺省时依次找 url / data.url / location */
44
44
  transformResult?: (body: unknown, file: File) => UploadResult;
45
+ /**
46
+ * 内置 XHR 通道的超时毫秒数。缺省不超时——大文件走慢网本就该能传完,
47
+ * 给一个通用上界反而会把原本成功的宿主变成失败
48
+ */
49
+ timeout?: number;
45
50
  }
46
51
  /**
47
52
  * 媒体类型,与同名节点一一对应
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/types/media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/types/media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * HTML 转义
3
+ *
4
+ * 只服务一件事:把用户或远端来的文本拼成 HTML 字符串(见 utils/markdown.ts 的降级路径)。
5
+ * 走 ProseMirror schema 的正常渲染不需要这里——DOMOutputSpec 的文本与属性由 PM 自己处理,
6
+ * 手工转义反而转出新实体。
7
+ */
8
+ /**
9
+ * 转义文本节点内容:挡住 `<img src=x onerror=…>` 这类标签破出。
10
+ * 不动引号,所以已确定要进属性的文本还得再过一道 escapeQuotes。
11
+ */
12
+ export declare function escapeHtml(value: string): string;
13
+ /**
14
+ * 转义引号:`[x](y" onclick="z)` 会闭合掉属性定界符,把 URL 尾巴变成新属性。
15
+ *
16
+ * 与 escapeHtml 是两个独立步骤而不是一个 escapeAttr,因为拼 HTML 的正确顺序是
17
+ * "整段先过 escapeHtml、再按语法片段插值"——那时捕获到的文本里 `&` 已经是 `&amp;`,
18
+ * 再跑一遍全量转义就成了 `&amp;amp;`,双重转义会把地址改坏。
19
+ */
20
+ export declare function escapeQuotes(value: string): string;
21
+ /**
22
+ * escapeHtml + escapeQuotes 的逆运算。
23
+ *
24
+ * 只有一处需要它:内联 HTML 片段的 Markdown 往返(见 extensions/markdown-inline-html.ts)。
25
+ * 那边发出时把值转义成 &amp;,读回来却不会再解码,于是同一个值每导出一次就多背一层
26
+ * 转义(& → &amp; → &amp;amp;),getMarkdown→setMarkdown→getMarkdown 直接不幂等。
27
+ * 发与收必须成对改动,只改一边就把幂等性换掉了。
28
+ */
29
+ export declare function decodeEntities(value: string): string;
30
+ //# sourceMappingURL=escape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/utils/escape.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAUD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 基础格式能力探测:工具栏决定"这个按钮摆不摆"的唯一依据
3
+ *
4
+ * 内部使用,不进 utils barrel、不随包出口——判据(mark 的 spec.attrs 上有没有那一项)
5
+ * 是 extension-text-style 的实现细节,公共面只承诺"这一下真能生效"。
6
+ *
7
+ * 为什么不看配置而看 schema:CoreEditor 把内置扩展放在用户扩展之前,就是为了让宿主能用
8
+ * 同名扩展顶掉内置 mark。顶掉之后配置里写着 formatting: true,但那四类属性可能一个都不剩,
9
+ * 于是按钮摆出来、点了没反应——正是本包反复在消除的那类"命令返回成功、什么都没发生"。
10
+ */
11
+ import type { Editor } from '@tiptap/core';
12
+ /** textStyle 这一个 mark 承载的四个属性,颜色类与字号字体共用同一个 mark */
13
+ export type TextStyleAttr = 'color' | 'backgroundColor' | 'fontSize' | 'fontFamily';
14
+ /** 这个属性是否既设得了也存得住 */
15
+ export declare function canUseTextStyle(editor: Editor, attr: TextStyleAttr): boolean;
16
+ /** 独立 mark(高亮 / 下标 / 上标)是否在册 */
17
+ export declare function hasMark(editor: Editor, name: string): boolean;
18
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,oDAAoD;AACpD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,iBAAiB,GAAG,UAAU,GAAG,YAAY,CAAC;AAepF,qBAAqB;AACrB,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAI5E;AAED,gCAAgC;AAChC,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D"}
@@ -1,4 +1,7 @@
1
1
  export * from './dom';
2
2
  export * from './selection';
3
3
  export * from './markdown';
4
+ export * from './url';
5
+ export * from './escape';
6
+ export * from './safe-call';
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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.3.0",
3
+ "version": "0.5.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",
@@ -43,23 +44,17 @@
43
44
  "publishConfig": {
44
45
  "access": "public"
45
46
  },
46
- "scripts": {
47
- "dev": "vite build --watch",
48
- "build": "vite build && pnpm run build:types && pnpm run build:styles",
49
- "build:types": "tsc -p tsconfig.build.json",
50
- "build:styles": "sass src/styles/index.scss dist/style.css --style=expanded --no-source-map",
51
- "typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.test.json",
52
- "test": "vitest run",
53
- "test:watch": "vitest",
54
- "prepublishOnly": "pnpm build"
55
- },
56
47
  "dependencies": {
57
48
  "@floating-ui/dom": "^1.6.0",
58
49
  "@tiptap/extension-bubble-menu": "^3.30.4",
50
+ "@tiptap/extension-highlight": "^3.30.4",
59
51
  "@tiptap/extension-image": "^3.30.4",
60
52
  "@tiptap/extension-list": "^3.30.4",
53
+ "@tiptap/extension-subscript": "^3.30.4",
54
+ "@tiptap/extension-superscript": "^3.30.4",
61
55
  "@tiptap/extension-table": "^3.30.4",
62
56
  "@tiptap/extension-text-align": "^3.30.4",
57
+ "@tiptap/extension-text-style": "^3.30.4",
63
58
  "@tiptap/extensions": "^3.30.4",
64
59
  "@tiptap/markdown": "^3.30.4",
65
60
  "@tiptap/starter-kit": "^3.30.4",
@@ -78,5 +73,14 @@
78
73
  "peerDependencies": {
79
74
  "@tiptap/core": "^3.30.4",
80
75
  "@tiptap/pm": "^3.30.4"
76
+ },
77
+ "scripts": {
78
+ "dev": "vite build --watch",
79
+ "build": "vite build && pnpm run build:types && pnpm run build:styles",
80
+ "build:types": "tsc -p tsconfig.build.json",
81
+ "build:styles": "sass src/styles/index.scss dist/style.css --style=expanded --no-source-map",
82
+ "typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.test.json",
83
+ "test": "vitest run",
84
+ "test:watch": "vitest"
81
85
  }
82
- }
86
+ }