@atri-editor/core 0.1.0 → 0.3.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 (57) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +5 -5
  3. package/dist/AtriEditor.d.ts +23 -5
  4. package/dist/AtriEditor.d.ts.map +1 -1
  5. package/dist/AtriEditorElement.d.ts +5 -1
  6. package/dist/AtriEditorElement.d.ts.map +1 -1
  7. package/dist/ai/AICommandMenu.d.ts.map +1 -1
  8. package/dist/core/CoreEditor.d.ts +5 -1
  9. package/dist/core/CoreEditor.d.ts.map +1 -1
  10. package/dist/core/ExtensionManager.d.ts +2 -14
  11. package/dist/core/ExtensionManager.d.ts.map +1 -1
  12. package/dist/core/I18nManager.d.ts +9 -0
  13. package/dist/core/I18nManager.d.ts.map +1 -1
  14. package/dist/core/LinkPanel.d.ts +73 -0
  15. package/dist/core/LinkPanel.d.ts.map +1 -0
  16. package/dist/core/TableGridPanel.d.ts +41 -0
  17. package/dist/core/TableGridPanel.d.ts.map +1 -0
  18. package/dist/core/TableMenu.d.ts +67 -0
  19. package/dist/core/TableMenu.d.ts.map +1 -0
  20. package/dist/core/ThemeManager.d.ts +3 -10
  21. package/dist/core/ThemeManager.d.ts.map +1 -1
  22. package/dist/core/ToolbarManager.d.ts +15 -2
  23. package/dist/core/ToolbarManager.d.ts.map +1 -1
  24. package/dist/core/floating-panel.d.ts +20 -0
  25. package/dist/core/floating-panel.d.ts.map +1 -0
  26. package/dist/core/icons.d.ts.map +1 -1
  27. package/dist/extensions/Attachment.d.ts.map +1 -1
  28. package/dist/extensions/AttachmentLink.d.ts.map +1 -1
  29. package/dist/extensions/MediaFiles.d.ts.map +1 -1
  30. package/dist/extensions/attachment-markdown.d.ts +22 -0
  31. package/dist/extensions/attachment-markdown.d.ts.map +1 -0
  32. package/dist/extensions/table.d.ts +23 -0
  33. package/dist/extensions/table.d.ts.map +1 -0
  34. package/dist/index.d.ts +1 -2
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1131 -350
  37. package/dist/index.js.map +1 -1
  38. package/dist/media/InsertPanel.d.ts +5 -6
  39. package/dist/media/InsertPanel.d.ts.map +1 -1
  40. package/dist/media/MediaStatusStrip.d.ts.map +1 -1
  41. package/dist/media/Uploader.d.ts.map +1 -1
  42. package/dist/style.css +183 -0
  43. package/dist/types/ai.d.ts +2 -0
  44. package/dist/types/ai.d.ts.map +1 -1
  45. package/dist/types/editor.d.ts +52 -7
  46. package/dist/types/editor.d.ts.map +1 -1
  47. package/dist/types/extension.d.ts +16 -34
  48. package/dist/types/extension.d.ts.map +1 -1
  49. package/dist/types/index.d.ts +0 -1
  50. package/dist/types/index.d.ts.map +1 -1
  51. package/dist/utils/dom.d.ts +3 -2
  52. package/dist/utils/dom.d.ts.map +1 -1
  53. package/dist/utils/table.d.ts +24 -0
  54. package/dist/utils/table.d.ts.map +1 -0
  55. package/package.json +24 -5
  56. package/dist/types/events.d.ts +0 -26
  57. package/dist/types/events.d.ts.map +0 -1
@@ -2,9 +2,12 @@
2
2
  * InsertPanel - 工具栏下方的插入浮层
3
3
  *
4
4
  * 挂在 document.body 上并用 fixed 定位:工具栏那一层链路上任何一处 overflow 都会把浮层裁掉。
5
+ *
6
+ * 注:media/ 目录同时承载上传运行时(MediaRuntime/Uploader/file-policy)与 UI
7
+ * (本文件与 MediaStatusStrip),两者通过 MediaRuntime 的订阅接口协作,暂不拆分子目录。
5
8
  */
6
9
  import type { Editor } from '@tiptap/core';
7
- import type { I18nManager } from '../core/I18nManager';
10
+ import { type I18nManager } from '../core/I18nManager';
8
11
  import type { MediaRuntime } from './MediaRuntime';
9
12
  export type InsertPanelMode = 'image' | 'attachment';
10
13
  export interface InsertPanelOptions {
@@ -22,7 +25,7 @@ export declare class InsertPanel {
22
25
  private unsubscribeLanguage?;
23
26
  private element;
24
27
  private mode;
25
- private stopAutoUpdate;
28
+ private floating;
26
29
  private detachDismiss;
27
30
  private labelled;
28
31
  constructor(options: InsertPanelOptions);
@@ -41,10 +44,6 @@ export declare class InsertPanel {
41
44
  private applyLabels;
42
45
  private applyLabel;
43
46
  private build;
44
- /**
45
- * 主题变量写在 .atri-editor 上,浮层挂在 body 上够不着,只能把主题类复制一份
46
- */
47
- private applyTheme;
48
47
  /**
49
48
  * 外链图片当场就插,不进上传队列:地址本来就是可用的
50
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"InsertPanel.d.ts","sourceRoot":"","sources":["../../src/media/InsertPanel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,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;AAmBD,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,cAAc,CAA6B;IACnD,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;IAMT;;OAEG;IACH,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,KAAK;IAqFb;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,MAAM;YAOA,QAAQ;IA2BtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAqBzB"}
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 +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,EAoC5E;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,EAkC5E;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;AAkFD,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;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"}
package/dist/style.css CHANGED
@@ -280,6 +280,152 @@
280
280
  color: var(--atri-bg-color);
281
281
  }
282
282
 
283
+ .atri-table-panel, .atri-table-menu {
284
+ position: fixed;
285
+ z-index: 1000;
286
+ padding: 12px;
287
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
288
+ font-size: 12px;
289
+ color: var(--atri-text-color);
290
+ background-color: var(--atri-bg-color);
291
+ border: 1px solid var(--atri-border-color);
292
+ border-radius: 8px;
293
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
294
+ box-sizing: border-box;
295
+ }
296
+ .atri-table-panel *, .atri-table-menu *,
297
+ .atri-table-panel *::before,
298
+ .atri-table-menu *::before,
299
+ .atri-table-panel *::after,
300
+ .atri-table-menu *::after {
301
+ box-sizing: border-box;
302
+ }
303
+ .atri-table-panel:focus, .atri-table-menu:focus {
304
+ outline: none;
305
+ }
306
+
307
+ .atri-table-panel-grid {
308
+ display: grid;
309
+ grid-template-columns: repeat(8, 1fr);
310
+ gap: 2px;
311
+ }
312
+
313
+ .atri-table-panel-cell {
314
+ width: 18px;
315
+ height: 18px;
316
+ border: 1px solid var(--atri-border-color);
317
+ border-radius: 2px;
318
+ background-color: var(--atri-bg-color);
319
+ cursor: pointer;
320
+ transition: background-color 0.1s ease;
321
+ }
322
+ .atri-table-panel-cell--active {
323
+ background-color: rgba(24, 144, 255, 0.25);
324
+ border-color: var(--atri-color-primary);
325
+ }
326
+
327
+ .atri-table-panel-hint {
328
+ margin-top: 8px;
329
+ color: var(--atri-text-color-secondary);
330
+ text-align: center;
331
+ }
332
+
333
+ .atri-table-menu {
334
+ display: flex;
335
+ align-items: center;
336
+ gap: 2px;
337
+ padding: 4px;
338
+ }
339
+
340
+ .atri-table-menu-separator {
341
+ width: 1px;
342
+ height: 20px;
343
+ margin: 0 2px;
344
+ background-color: var(--atri-border-color);
345
+ }
346
+
347
+ .atri-link-panel {
348
+ position: fixed;
349
+ z-index: 1000;
350
+ display: flex;
351
+ flex-direction: column;
352
+ gap: 8px;
353
+ min-width: 280px;
354
+ padding: 12px;
355
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
356
+ font-size: 14px;
357
+ color: var(--atri-text-color);
358
+ background-color: var(--atri-bg-color);
359
+ border: 1px solid var(--atri-border-color);
360
+ border-radius: 8px;
361
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
362
+ box-sizing: border-box;
363
+ }
364
+ .atri-link-panel *,
365
+ .atri-link-panel *::before,
366
+ .atri-link-panel *::after {
367
+ box-sizing: border-box;
368
+ }
369
+ .atri-link-panel input[type=url] {
370
+ width: 100%;
371
+ padding: 4px 8px;
372
+ font-family: inherit;
373
+ font-size: inherit;
374
+ color: var(--atri-text-color);
375
+ background-color: var(--atri-bg-color);
376
+ border: 1px solid var(--atri-border-color);
377
+ border-radius: 4px;
378
+ transition: all 0.2s ease;
379
+ }
380
+ .atri-link-panel input[type=url]::placeholder {
381
+ color: var(--atri-text-color-disabled);
382
+ }
383
+ .atri-link-panel input[type=url]:focus {
384
+ outline: none;
385
+ border-color: var(--atri-border-color-hover);
386
+ }
387
+
388
+ .atri-link-panel-target {
389
+ display: flex;
390
+ align-items: center;
391
+ gap: 4px;
392
+ color: var(--atri-text-color-secondary);
393
+ cursor: pointer;
394
+ }
395
+
396
+ .atri-link-panel-actions {
397
+ display: flex;
398
+ justify-content: flex-end;
399
+ gap: 8px;
400
+ }
401
+
402
+ .atri-link-panel-apply,
403
+ .atri-link-panel-remove {
404
+ padding: 4px 12px;
405
+ font-family: inherit;
406
+ font-size: 12px;
407
+ border: 1px solid var(--atri-border-color);
408
+ border-radius: 4px;
409
+ background-color: var(--atri-bg-color-secondary);
410
+ color: var(--atri-text-color);
411
+ cursor: pointer;
412
+ transition: all 0.2s ease;
413
+ }
414
+ .atri-link-panel-apply:hover,
415
+ .atri-link-panel-remove:hover {
416
+ background-color: var(--atri-bg-color-hover);
417
+ }
418
+
419
+ .atri-link-panel-apply {
420
+ border-color: var(--atri-color-primary);
421
+ background-color: var(--atri-color-primary);
422
+ color: var(--atri-bg-color);
423
+ }
424
+ .atri-link-panel-apply:hover {
425
+ background-color: var(--atri-color-primary-hover);
426
+ border-color: var(--atri-color-primary-hover);
427
+ }
428
+
283
429
  :root {
284
430
  --atri-color-primary: #1890ff;
285
431
  --atri-color-primary-hover: #40a9ff;
@@ -478,6 +624,11 @@
478
624
  background: none;
479
625
  padding: 0;
480
626
  }
627
+ .atri-editor-content hr {
628
+ border: none;
629
+ border-top: 1px solid var(--atri-border-color);
630
+ margin: 1em 0;
631
+ }
481
632
  .atri-editor-content a {
482
633
  color: var(--atri-color-primary);
483
634
  text-decoration: none;
@@ -496,15 +647,47 @@
496
647
  }
497
648
  .atri-editor-content table td,
498
649
  .atri-editor-content table th {
650
+ position: relative;
499
651
  border: 1px solid var(--atri-border-color);
500
652
  padding: 8px 12px;
501
653
  text-align: left;
502
654
  }
655
+ .atri-editor-content table td p,
656
+ .atri-editor-content table th p {
657
+ margin: 0;
658
+ }
503
659
  .atri-editor-content table th {
504
660
  background-color: var(--atri-bg-color-secondary);
505
661
  font-weight: 600;
506
662
  }
507
663
 
664
+ .atri-editor-content .selectedCell::after {
665
+ content: "";
666
+ position: absolute;
667
+ inset: 0;
668
+ background-color: var(--atri-color-primary);
669
+ opacity: 0.12;
670
+ pointer-events: none;
671
+ }
672
+
673
+ .atri-editor-content .tableWrapper {
674
+ overflow-x: auto;
675
+ }
676
+
677
+ .atri-editor-content .column-resize-handle {
678
+ position: absolute;
679
+ top: 0;
680
+ bottom: 0;
681
+ right: -2px;
682
+ width: 4px;
683
+ background-color: var(--atri-color-primary);
684
+ pointer-events: none;
685
+ }
686
+
687
+ .atri-editor-content.resize-cursor {
688
+ cursor: col-resize;
689
+ }
690
+
508
691
  .atri-editor-content ul[data-type=taskList] {
509
692
  list-style: none;
510
693
  padding-left: 0;
@@ -64,6 +64,8 @@ export interface AtriAIInterceptors {
64
64
  export interface AtriAIConfig {
65
65
  /** AI 功能列表 */
66
66
  functions: AtriAIFunction[];
67
+ /** 命令菜单触发字符(单字符,默认 '/') */
68
+ triggerChar?: string;
67
69
  /** 请求端点,开发者完全控制网络请求 */
68
70
  requestEndpoint: (context: AIRequestContext) => Promise<AIResponse>;
69
71
  /** 拦截器链 */
@@ -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,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;CAC7D"}
@@ -1,8 +1,9 @@
1
- import type { Editor, Extension } from '@tiptap/core';
1
+ import type { Editor, Extensions, JSONContent } from '@tiptap/core';
2
2
  import type { AtriAIConfig } from './ai';
3
3
  import type { AtriMarkdownConfig } from './markdown';
4
4
  import type { AtriMediaConfig, InsertAttachmentOptions, InsertImageOptions, MediaKind } from './media';
5
5
  import type { AtriNodeViewConfig } from './extension';
6
+ import type { ThemeType } from '../core/ThemeManager';
6
7
  /**
7
8
  * 工具栏配置
8
9
  */
@@ -13,7 +14,7 @@ export interface ToolbarConfig {
13
14
  */
14
15
  items?: (string | ToolbarItem)[];
15
16
  /**
16
- * 选中文字或图片 / 附件时在选区旁浮出的工具栏,默认关闭,与固定顶栏共存
17
+ * 选中文字或图片 / 附件时在选区旁浮出的工具栏,默认开启,与固定顶栏共存
17
18
  * 按钮分两组:文字选区是行内格式五项,选中附件是「附件样式 + 删除」、选中图片只有「删除」
18
19
  * 只在创建时生效:BubbleMenu 的挂载元素走扩展选项,而 tiptap v3 没有运行时注册扩展的入口
19
20
  */
@@ -43,6 +44,44 @@ export interface SetContentOptions {
43
44
  /** 是否触发变更事件 */
44
45
  emitUpdate?: boolean;
45
46
  }
47
+ /**
48
+ * 插入表格选项
49
+ */
50
+ export interface InsertTableOptions {
51
+ /** 行数(含表头行),默认 3 */
52
+ rows?: number;
53
+ /** 列数,默认 3 */
54
+ cols?: number;
55
+ /** 首行是否为表头,默认 true */
56
+ withHeaderRow?: boolean;
57
+ }
58
+ /**
59
+ * 表格配置
60
+ */
61
+ export interface AtriTableConfig {
62
+ /** 列宽拖拽,默认开 */
63
+ resizable?: boolean;
64
+ /** 光标进入表格时浮出的操作菜单,默认开 */
65
+ menu?: boolean;
66
+ }
67
+ /** 链接打开方式 */
68
+ export type AtriLinkTarget = '_blank' | '_self';
69
+ /**
70
+ * 链接配置
71
+ */
72
+ export interface AtriLinkConfig {
73
+ /**
74
+ * 编辑态点击链接是否直接导航,默认 false
75
+ *
76
+ * 默认关:编辑时点链接多半是想改它,跳走会把当前页面连同未保存的内容一起丢下。
77
+ * 关闭时点击落在链接上,浮层就地打开编辑;置 true 交回链接扩展去 window.open
78
+ */
79
+ openOnClick?: boolean;
80
+ /** 新链接的打开方式,默认 '_blank',也是浮层里「在新窗口打开」的初始状态 */
81
+ target?: AtriLinkTarget;
82
+ /** 输入 [文字](url) 时实时转成链接,默认 false */
83
+ markdownLinks?: boolean;
84
+ }
46
85
  /**
47
86
  * 编辑器配置
48
87
  */
@@ -53,8 +92,8 @@ export interface AtriEditorOptions {
53
92
  content?: string | object;
54
93
  /** 内容格式 */
55
94
  contentFormat?: 'html' | 'json' | 'markdown';
56
- /** 主题 */
57
- theme?: 'light' | 'dark' | string;
95
+ /** 主题:内置亮/暗或自定义主题名 */
96
+ theme?: ThemeType;
58
97
  /** 语言 */
59
98
  lang?: string;
60
99
  /** 是否可编辑 */
@@ -63,8 +102,8 @@ export interface AtriEditorOptions {
63
102
  placeholder?: string;
64
103
  /** 工具栏配置 */
65
104
  toolbar?: ToolbarConfig | false;
66
- /** 扩展列表 */
67
- extensions?: Extension[];
105
+ /** 扩展列表(节点 / 标记 / 普通扩展皆可,与 Tiptap 同口径) */
106
+ extensions?: Extensions;
68
107
  /** NodeView 自定义组件配置 */
69
108
  nodeViews?: AtriNodeViewConfig[];
70
109
  /** AI 配置 */
@@ -73,6 +112,10 @@ export interface AtriEditorOptions {
73
112
  markdown?: AtriMarkdownConfig;
74
113
  /** 媒体(图片 / 附件)配置,false 时不注册图片与附件节点 */
75
114
  media?: AtriMediaConfig | false;
115
+ /** 表格开关,false 时不注册表格节点、工具栏也不出插入表格按钮、光标进入表格不再浮出操作菜单;默认开 */
116
+ table?: boolean | AtriTableConfig;
117
+ /** 链接配置;不设置时编辑态点击不导航,改为就地编辑 */
118
+ link?: AtriLinkConfig;
76
119
  /** 创建完成回调 */
77
120
  onCreate?: (editor: IAtriEditor) => void;
78
121
  /** 内容变更回调 */
@@ -109,7 +152,7 @@ export interface IAtriEditor {
109
152
  /** HTML 转 Markdown */
110
153
  htmlToMarkdown(html: string): string;
111
154
  /** Markdown 转 JSON */
112
- markdownToJSON(markdown: string): object;
155
+ markdownToJSON(markdown: string): JSONContent;
113
156
  /** 获取选中文本 */
114
157
  getSelectedText(): string;
115
158
  /** 插入内容 */
@@ -120,6 +163,8 @@ export interface IAtriEditor {
120
163
  insertImage(options: InsertImageOptions): void;
121
164
  /** 在选区处插入附件卡片 */
122
165
  insertAttachment(options: InsertAttachmentOptions): void;
166
+ /** 在选区处插入表格 */
167
+ insertTable(options?: InsertTableOptions): void;
123
168
  /** 走上传管线插入本地文件,promise 在这批文件全部落定后 resolve */
124
169
  uploadFiles(files: File[] | FileList, kind?: MediaKind): Promise<void>;
125
170
  /** 重试所有失败的上传 */
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,16 @@
1
- import type { Extension, NodeViewRenderer } from '@tiptap/core';
2
- /**
3
- * 扩展类别
4
- */
5
- export type ExtensionCategory = 'basic' | 'media' | 'block' | 'enhanced' | 'ai' | 'custom';
6
- /**
7
- * 扩展元数据
8
- */
9
- export interface AtriExtensionMeta {
10
- name: string;
11
- version: string;
12
- description?: string;
13
- category: ExtensionCategory;
14
- }
15
- /**
16
- * Atri 扩展(基于 Tiptap Extension)
17
- */
18
- export interface AtriExtension extends Extension {
19
- meta?: AtriExtensionMeta;
20
- }
1
+ import type { JSONContent, NodeViewRenderer } from '@tiptap/core';
2
+ import type { DOMOutputSpec, Node as ProseMirrorNode, NodeSpec } from '@tiptap/pm/model';
21
3
  /**
22
4
  * NodeView 属性定义
5
+ * 结构对齐 Tiptap 的 Attribute:default 用泛型让接入方拿到属性值类型,无需 any
23
6
  */
24
- export interface NodeViewAttribute {
25
- default?: any;
7
+ export interface NodeViewAttribute<T = unknown> {
8
+ /** 属性默认值,与 Tiptap Attribute.default 一致 */
9
+ default?: T;
26
10
  keepOnSplit?: boolean;
27
- parseHTML?: (element: HTMLElement) => any;
28
- renderHTML?: (attributes: Record<string, any>) => Record<string, any> | null;
11
+ /** 属性值没有结构化约束,保留宽松返回 */
12
+ parseHTML?: (element: HTMLElement) => unknown;
13
+ renderHTML?: (attributes: Record<string, unknown>) => Record<string, unknown> | null;
29
14
  }
30
15
  /**
31
16
  * NodeView 配置
@@ -37,16 +22,13 @@ export interface AtriNodeViewConfig {
37
22
  nodeView: NodeViewRenderer;
38
23
  /** 节点属性定义 */
39
24
  attributes?: Record<string, NodeViewAttribute>;
40
- /** HTML 序列化配置 */
25
+ /** HTML 序列化配置,签名与 Tiptap NodeConfig.renderHTML 一致 */
41
26
  renderHTML?: (props: {
42
27
  HTMLAttributes: Record<string, any>;
43
- node: any;
44
- }) => any;
45
- /** HTML 解析配置 */
46
- parseHTML?: () => Array<{
47
- tag: string;
48
- getAttrs?: (el: HTMLElement) => any;
49
- }>;
28
+ node: ProseMirrorNode;
29
+ }) => DOMOutputSpec;
30
+ /** 解析规则,与 Tiptap NodeConfig.parseHTML 一致 */
31
+ parseHTML?: () => NonNullable<NodeSpec['parseDOM']>;
50
32
  /** 是否为内联节点 */
51
33
  inline?: boolean;
52
34
  /** 是否为原子节点(不可编辑内容) */
@@ -55,7 +37,7 @@ export interface AtriNodeViewConfig {
55
37
  group?: string;
56
38
  /** 节点描述 */
57
39
  description?: string;
58
- /** 自定义 Markdown 序列化回调 */
59
- markdownSerialize?: (node: any) => string;
40
+ /** 自定义 Markdown 序列化回调,由 Tiptap 的 MarkdownManager 按节点名调用 */
41
+ markdownSerialize?: (node: JSONContent) => string;
60
42
  }
61
43
  //# sourceMappingURL=extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/types/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,GAAG,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CAC9E;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C,iBAAiB;IACjB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,KAAK,GAAG,CAAC;IAChF,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,GAAG,CAAA;KAAE,CAAC,CAAC;IAC9E,cAAc;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;CAC3C"}
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/types/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,IAAI,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,0CAA0C;IAC1C,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wBAAwB;IACxB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;IAC9C,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C,qDAAqD;IACrD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QACnB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,eAAe,CAAC;KACvB,KAAK,aAAa,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACpD,cAAc;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,MAAM,CAAC;CACnD"}
@@ -2,6 +2,5 @@ export * from './ai';
2
2
  export * from './markdown';
3
3
  export * from './media';
4
4
  export * from './editor';
5
- export * from './events';
6
5
  export * from './extension';
7
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
@@ -10,7 +10,8 @@ export declare function resolveElement(element: string | HTMLElement): HTMLEleme
10
10
  */
11
11
  export declare function createContainer(className?: string): HTMLDivElement;
12
12
  /**
13
- * 检查是否在浏览器环境
13
+ * 从拖放/剪贴板事件里取文件列表
14
+ * 剪贴板里的截图与文件都在 files 上,text 为空不代表没有可投的东西
14
15
  */
15
- export declare function isBrowser(): boolean;
16
+ export declare function filesOf(transfer: DataTransfer | null | undefined): File[];
16
17
  //# sourceMappingURL=dom.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/utils/dom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CASzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAMlE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC"}
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/utils/dom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CASzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAMlE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,EAAE,CAGzE"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 表格能力探测:工具栏按钮与门面 insertTable 共用的 gate
3
+ *
4
+ * 内部使用,不进 utils barrel、不随包出口——检测口径(schema spec 上的 tableRole)
5
+ * 是 extension-table 的实现细节,公共面只承诺"能不能插"这件事本身
6
+ */
7
+ import type { Editor } from '@tiptap/core';
8
+ /**
9
+ * 内置表格是否真的赢下了 schema
10
+ *
11
+ * 不能扫 extensionManager 里的名字:tiptap 对重名扩展只告警不去重,顶掉场景下
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 找型,找不到就在点击当场抛错
22
+ */
23
+ export declare function canInsertTable(editor: Editor): boolean;
24
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +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,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGtD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atri-editor/core",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Core package for Atri Editor",
5
5
  "keywords": [
6
6
  "editor",
@@ -9,6 +9,10 @@
9
9
  "web-component",
10
10
  "wysiwyg"
11
11
  ],
12
+ "homepage": "https://github.com/CherishDreams/atri-editor",
13
+ "bugs": {
14
+ "url": "https://github.com/CherishDreams/atri-editor/issues"
15
+ },
12
16
  "license": "MIT",
13
17
  "repository": {
14
18
  "type": "git",
@@ -16,9 +20,13 @@
16
20
  },
17
21
  "files": [
18
22
  "dist",
19
- "styles.d.ts"
23
+ "styles.d.ts",
24
+ "CHANGELOG.md"
20
25
  ],
21
26
  "type": "module",
27
+ "sideEffects": [
28
+ "dist/style.css"
29
+ ],
22
30
  "main": "./dist/index.js",
23
31
  "module": "./dist/index.js",
24
32
  "types": "./dist/index.d.ts",
@@ -32,6 +40,9 @@
32
40
  "default": "./dist/style.css"
33
41
  }
34
42
  },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
35
46
  "scripts": {
36
47
  "dev": "vite build --watch",
37
48
  "build": "vite build && pnpm run build:types && pnpm run build:styles",
@@ -39,25 +50,33 @@
39
50
  "build:styles": "sass src/styles/index.scss dist/style.css --style=expanded --no-source-map",
40
51
  "typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.test.json",
41
52
  "test": "vitest run",
42
- "test:watch": "vitest"
53
+ "test:watch": "vitest",
54
+ "prepublishOnly": "pnpm build"
43
55
  },
44
56
  "dependencies": {
45
57
  "@floating-ui/dom": "^1.6.0",
46
- "@tiptap/core": "^3.30.4",
47
58
  "@tiptap/extension-bubble-menu": "^3.30.4",
48
59
  "@tiptap/extension-image": "^3.30.4",
60
+ "@tiptap/extension-list": "^3.30.4",
61
+ "@tiptap/extension-table": "^3.30.4",
49
62
  "@tiptap/extension-text-align": "^3.30.4",
50
63
  "@tiptap/extensions": "^3.30.4",
51
64
  "@tiptap/markdown": "^3.30.4",
52
- "@tiptap/pm": "^3.30.4",
53
65
  "@tiptap/starter-kit": "^3.30.4",
54
66
  "i18next": "^23.11.0"
55
67
  },
56
68
  "devDependencies": {
69
+ "@tiptap/core": "^3.30.4",
70
+ "@tiptap/pm": "^3.30.4",
71
+ "@vitest/coverage-v8": "^3.2.7",
57
72
  "jsdom": "^30.0.1",
58
73
  "sass": "^1.103.1",
59
74
  "typescript": "^7.0.0",
60
75
  "vite": "^5.2.0",
61
76
  "vitest": "^3.2.7"
77
+ },
78
+ "peerDependencies": {
79
+ "@tiptap/core": "^3.30.4",
80
+ "@tiptap/pm": "^3.30.4"
62
81
  }
63
82
  }