@atri-editor/core 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +147 -0
- package/dist/AtriEditor.d.ts +7 -0
- package/dist/AtriEditor.d.ts.map +1 -1
- package/dist/AtriEditorElement.d.ts +14 -1
- package/dist/AtriEditorElement.d.ts.map +1 -1
- package/dist/ai/AICommandMenu.d.ts +1 -0
- package/dist/ai/AICommandMenu.d.ts.map +1 -1
- package/dist/ai/AIInterceptor.d.ts.map +1 -1
- package/dist/ai/AIService.d.ts.map +1 -1
- package/dist/core/CoreEditor.d.ts +9 -0
- package/dist/core/CoreEditor.d.ts.map +1 -1
- package/dist/core/I18nManager.d.ts +25 -0
- package/dist/core/I18nManager.d.ts.map +1 -1
- package/dist/core/LinkPanel.d.ts +1 -0
- package/dist/core/LinkPanel.d.ts.map +1 -1
- package/dist/core/StyleOptionPanel.d.ts +73 -0
- package/dist/core/StyleOptionPanel.d.ts.map +1 -0
- package/dist/core/TableGridPanel.d.ts +1 -0
- package/dist/core/TableGridPanel.d.ts.map +1 -1
- package/dist/core/TableMenu.d.ts +1 -0
- package/dist/core/TableMenu.d.ts.map +1 -1
- package/dist/core/ThemeManager.d.ts.map +1 -1
- package/dist/core/ToolbarManager.d.ts +50 -1
- package/dist/core/ToolbarManager.d.ts.map +1 -1
- package/dist/core/ToolbarMenuPanel.d.ts +58 -0
- package/dist/core/ToolbarMenuPanel.d.ts.map +1 -0
- package/dist/core/bubble-toolbar.d.ts +8 -2
- package/dist/core/bubble-toolbar.d.ts.map +1 -1
- package/dist/core/floating-panel.d.ts +24 -1
- package/dist/core/floating-panel.d.ts.map +1 -1
- package/dist/core/icons.d.ts.map +1 -1
- package/dist/core/style-presets.d.ts +47 -0
- package/dist/core/style-presets.d.ts.map +1 -0
- package/dist/extensions/Attachment.d.ts.map +1 -1
- package/dist/extensions/AttachmentLink.d.ts.map +1 -1
- package/dist/extensions/attachment-attrs.d.ts.map +1 -1
- package/dist/extensions/formatting.d.ts +24 -0
- package/dist/extensions/formatting.d.ts.map +1 -0
- package/dist/extensions/markdown-inline-html.d.ts +73 -0
- package/dist/extensions/markdown-inline-html.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1381 -198
- package/dist/index.js.map +1 -1
- package/dist/media/InsertPanel.d.ts +1 -0
- package/dist/media/InsertPanel.d.ts.map +1 -1
- package/dist/media/MediaRuntime.d.ts +13 -0
- package/dist/media/MediaRuntime.d.ts.map +1 -1
- package/dist/media/MediaStatusStrip.d.ts.map +1 -1
- package/dist/media/Uploader.d.ts.map +1 -1
- package/dist/style.css +186 -0
- package/dist/types/ai.d.ts +5 -0
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/editor.d.ts +18 -1
- package/dist/types/editor.d.ts.map +1 -1
- package/dist/types/markdown.d.ts +14 -0
- package/dist/types/markdown.d.ts.map +1 -1
- package/dist/types/media.d.ts +5 -0
- package/dist/types/media.d.ts.map +1 -1
- package/dist/utils/escape.d.ts +30 -0
- package/dist/utils/escape.d.ts.map +1 -0
- package/dist/utils/formatting.d.ts +18 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/markdown.d.ts +5 -3
- package/dist/utils/markdown.d.ts.map +1 -1
- package/dist/utils/safe-call.d.ts +15 -0
- package/dist/utils/safe-call.d.ts.map +1 -0
- package/dist/utils/url.d.ts +20 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/package.json +6 -1
|
@@ -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,
|
|
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;
|
|
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,
|
|
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;
|
|
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],
|
package/dist/types/ai.d.ts
CHANGED
|
@@ -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
|
package/dist/types/ai.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/types/editor.d.ts
CHANGED
|
@@ -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
|
/** 内容变更回调 */
|
|
@@ -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
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"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"}
|
package/dist/types/markdown.d.ts
CHANGED
|
@@ -25,5 +25,19 @@ 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';
|
|
28
42
|
}
|
|
29
43
|
//# 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;
|
|
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"}
|
package/dist/types/media.d.ts
CHANGED
|
@@ -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":"AAAA;;GAEG;AAEH,WAAW;AACX,MAAM,WAAW,cAAc;IAC7B,YAAY;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iBAAiB;AACjB,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C,oBAAoB;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kBAAkB;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB;IACxB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACrC,0DAA0D;IAC1D,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC;
|
|
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、再按语法片段插值"——那时捕获到的文本里 `&` 已经是 `&`,
|
|
18
|
+
* 再跑一遍全量转义就成了 `&amp;`,双重转义会把地址改坏。
|
|
19
|
+
*/
|
|
20
|
+
export declare function escapeQuotes(value: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* escapeHtml + escapeQuotes 的逆运算。
|
|
23
|
+
*
|
|
24
|
+
* 只有一处需要它:内联 HTML 片段的 Markdown 往返(见 extensions/markdown-inline-html.ts)。
|
|
25
|
+
* 那边发出时把值转义成 &,读回来却不会再解码,于是同一个值每导出一次就多背一层
|
|
26
|
+
* 转义(& → & → &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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/utils/markdown.d.ts
CHANGED
|
@@ -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":"
|
|
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
|
+
"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,10 +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",
|
|
60
62
|
"@tiptap/extension-list": "^3.30.4",
|
|
63
|
+
"@tiptap/extension-subscript": "^3.30.4",
|
|
64
|
+
"@tiptap/extension-superscript": "^3.30.4",
|
|
61
65
|
"@tiptap/extension-table": "^3.30.4",
|
|
62
66
|
"@tiptap/extension-text-align": "^3.30.4",
|
|
67
|
+
"@tiptap/extension-text-style": "^3.30.4",
|
|
63
68
|
"@tiptap/extensions": "^3.30.4",
|
|
64
69
|
"@tiptap/markdown": "^3.30.4",
|
|
65
70
|
"@tiptap/starter-kit": "^3.30.4",
|