@harbour-enterprises/superdoc 0.21.0 → 0.22.0-next.1

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 (43) hide show
  1. package/dist/chunks/{PdfViewer-OZDJ7gwT.cjs → PdfViewer-B3KmcDup.cjs} +1 -1
  2. package/dist/chunks/{PdfViewer-D3zo7tPo.es.js → PdfViewer-BpwMPbUj.es.js} +1 -1
  3. package/dist/chunks/{index-CfYf4T_z.cjs → index-BOf6E2I4.cjs} +5 -4
  4. package/dist/chunks/{index-MzW5BVNd.es.js → index-Cw4YywoD.es.js} +5 -4
  5. package/dist/chunks/{super-editor.es-U-GVCd_F.cjs → super-editor.es-DHDx2fsy.cjs} +1181 -766
  6. package/dist/chunks/{super-editor.es-Bntob7Wd.es.js → super-editor.es-vfoWxyZL.es.js} +1181 -766
  7. package/dist/core/types/index.d.ts +8 -0
  8. package/dist/core/types/index.d.ts.map +1 -1
  9. package/dist/style.css +32 -27
  10. package/dist/super-editor/ai-writer.es.js +2 -2
  11. package/dist/super-editor/chunks/{converter-3xnF_NHq.js → converter-BcqEfCTg.js} +775 -645
  12. package/dist/super-editor/chunks/{docx-zipper-CZdELYi-.js → docx-zipper-DZ9ph0iQ.js} +1 -1
  13. package/dist/super-editor/chunks/{editor-BqYH4kDD.js → editor-BC2sSIVa.js} +19 -3
  14. package/dist/super-editor/chunks/{toolbar-TkaE2kKM.js → toolbar-DNTo5DDf.js} +2 -2
  15. package/dist/super-editor/converter.es.js +1 -1
  16. package/dist/super-editor/docx-zipper.es.js +2 -2
  17. package/dist/super-editor/editor.es.js +3 -3
  18. package/dist/super-editor/file-zipper.es.js +1 -1
  19. package/dist/super-editor/src/components/slash-menu/contextmenu-helpers.d.ts +1 -0
  20. package/dist/super-editor/src/components/slash-menu/menuItems.d.ts +5 -1
  21. package/dist/super-editor/src/components/slash-menu/tests/testHelpers.d.ts +466 -0
  22. package/dist/super-editor/src/components/slash-menu/utils.d.ts +9 -2
  23. package/dist/super-editor/src/core/commands/__tests__/schemaWithLists.d.ts +2 -0
  24. package/dist/super-editor/src/core/commands/__tests__/testHelpers.d.ts +4 -0
  25. package/dist/super-editor/src/core/commands/__tests__/testSchema.d.ts +2 -0
  26. package/dist/super-editor/src/core/commands/tests/commandTestUtils.d.ts +7 -0
  27. package/dist/super-editor/src/core/commands/tests/test-schema.d.ts +2 -0
  28. package/dist/super-editor/src/core/super-converter/v3/handlers/mc/altermateContent/alternate-content-translator.d.ts +6 -0
  29. package/dist/super-editor/src/core/super-converter/v3/handlers/mc/altermateContent/index.d.ts +1 -0
  30. package/dist/super-editor/src/extensions/custom-selection/custom-selection.d.ts +1 -0
  31. package/dist/super-editor/src/tests/helpers/helpers.d.ts +1 -0
  32. package/dist/super-editor/style.css +5 -0
  33. package/dist/super-editor/super-editor.es.js +461 -153
  34. package/dist/super-editor/toolbar.es.js +2 -2
  35. package/dist/super-editor.cjs +1 -1
  36. package/dist/super-editor.es.js +1 -1
  37. package/dist/superdoc.cjs +2 -2
  38. package/dist/superdoc.es.js +2 -2
  39. package/dist/superdoc.umd.js +1184 -768
  40. package/dist/superdoc.umd.js.map +1 -1
  41. package/package.json +1 -1
  42. package/dist/super-editor/src/extensions/run-item/index.d.ts +0 -1
  43. package/dist/super-editor/src/extensions/run-item/run-item.d.ts +0 -26
@@ -1,4 +1,4 @@
1
- import { p as process$1, au as commonjsGlobal, B as Buffer, av as getDefaultExportFromCjs, aw as getContentTypesFromXml, ax as xmljs } from "./converter-3xnF_NHq.js";
1
+ import { p as process$1, au as commonjsGlobal, B as Buffer, av as getDefaultExportFromCjs, aw as getContentTypesFromXml, ax as xmljs } from "./converter-BcqEfCTg.js";
2
2
  function commonjsRequire(path) {
3
3
  throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
4
4
  }
@@ -12,9 +12,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
12
12
  var _Attribute_static, getGlobalAttributes_fn, getNodeAndMarksAttributes_fn, _Schema_static, createNodesSchema_fn, createMarksSchema_fn, _events, _ExtensionService_instances, setupExtensions_fn, attachEditorEvents_fn, _editor, _stateValidators, _xmlValidators, _requiredNodeTypes, _requiredMarkTypes, _SuperValidator_instances, initializeValidators_fn, collectValidatorRequirements_fn, analyzeDocument_fn, _commandService, _Editor_instances, initContainerElement_fn, init_fn, initRichText_fn, onFocus_fn, checkHeadless_fn, registerCopyHandler_fn, insertNewFileData_fn, registerPluginByNameIfNotExists_fn, createExtensionService_fn, createCommandService_fn, createConverter_fn, initMedia_fn, initFonts_fn, createSchema_fn, generatePmData_fn, createView_fn, onCollaborationReady_fn, initComments_fn, initPagination_fn, dispatchTransaction_fn, handleNodeSelection_fn, prepareDocumentForImport_fn, prepareDocumentForExport_fn, endCollaboration_fn, validateDocumentInit_fn, validateDocumentExport_fn, initDevTools_fn, _ListItemNodeView_instances, init_fn2, _FieldAnnotationView_instances, createAnnotation_fn, _AutoPageNumberNodeView_instances, renderDom_fn, scheduleUpdateNodeStyle_fn, _DocumentSectionView_instances, init_fn3, addToolTip_fn;
13
13
  import * as Y from "yjs";
14
14
  import { UndoManager, Item as Item$1, ContentType, Text as Text$1, XmlElement, encodeStateAsUpdate } from "yjs";
15
- import { P as PluginKey, a as Plugin, M as Mapping, N as NodeSelection, S as Selection, T as TextSelection, b as Slice, D as DOMSerializer, F as Fragment, c as DOMParser$1, d as Mark$1, e as dropPoint, A as AllSelection, p as process$1, B as Buffer2, f as callOrGet, g as getExtensionConfigField, h as getMarkType, i as getMarksFromSelection, j as getNodeType, k as getSchemaTypeNameByName, l as Schema$1, m as cleanSchemaItem, n as canSplit, o as defaultBlockAt$1, q as liftTarget, r as canJoin, s as joinPoint, t as replaceStep$1, R as ReplaceAroundStep$1, u as isTextSelection, v as getMarkRange, w as isMarkActive, x as isNodeActive, y as deleteProps, z as processContent, C as ReplaceStep, E as NodeRange, G as findWrapping, L as ListHelpers, H as findParentNode, I as isMacOS, J as isIOS, K as getSchemaTypeByName, O as inputRulesPlugin, Q as TrackDeleteMarkName, U as TrackInsertMarkName, V as v4, W as TrackFormatMarkName, X as comments_module_events, Y as findMark, Z as objectIncludes, _ as AddMarkStep, $ as RemoveMarkStep, a0 as twipsToLines, a1 as pixelsToTwips, a2 as helpers, a3 as posToDOMRect, a4 as CommandService, a5 as SuperConverter, a6 as createDocument, a7 as createDocFromMarkdown, a8 as createDocFromHTML, a9 as EditorState, aa as hasSomeParentWithClass, ab as isActive, ac as unflattenListsInHtml, ad as parseSizeUnit, ae as minMax, af as getLineHeightValueString, ag as InputRule, ah as kebabCase, ai as findParentNodeClosestToPos, aj as getListItemStyleDefinitions, ak as docxNumberigHelpers, al as parseIndentElement, am as combineIndents, an as SelectionRange, ao as Transform, ap as isInTable$1, aq as generateDocxRandomId, ar as insertNewRelationship, as as updateDOMAttributes, at as htmlHandler } from "./converter-3xnF_NHq.js";
15
+ import { P as PluginKey, a as Plugin, M as Mapping, N as NodeSelection, S as Selection, T as TextSelection, b as Slice, D as DOMSerializer, F as Fragment, c as DOMParser$1, d as Mark$1, e as dropPoint, A as AllSelection, p as process$1, B as Buffer2, f as callOrGet, g as getExtensionConfigField, h as getMarkType, i as getMarksFromSelection, j as getNodeType, k as getSchemaTypeNameByName, l as Schema$1, m as cleanSchemaItem, n as canSplit, o as defaultBlockAt$1, q as liftTarget, r as canJoin, s as joinPoint, t as replaceStep$1, R as ReplaceAroundStep$1, u as isTextSelection, v as getMarkRange, w as isMarkActive, x as isNodeActive, y as deleteProps, z as processContent, C as ReplaceStep, E as NodeRange, G as findWrapping, L as ListHelpers, H as findParentNode, I as isMacOS, J as isIOS, K as getSchemaTypeByName, O as inputRulesPlugin, Q as TrackDeleteMarkName, U as TrackInsertMarkName, V as v4, W as TrackFormatMarkName, X as comments_module_events, Y as findMark, Z as objectIncludes, _ as AddMarkStep, $ as RemoveMarkStep, a0 as twipsToLines, a1 as pixelsToTwips, a2 as helpers, a3 as posToDOMRect, a4 as CommandService, a5 as SuperConverter, a6 as createDocument, a7 as createDocFromMarkdown, a8 as createDocFromHTML, a9 as EditorState, aa as hasSomeParentWithClass, ab as isActive, ac as unflattenListsInHtml, ad as parseSizeUnit, ae as minMax, af as getLineHeightValueString, ag as InputRule, ah as kebabCase, ai as findParentNodeClosestToPos, aj as getListItemStyleDefinitions, ak as docxNumberigHelpers, al as parseIndentElement, am as combineIndents, an as SelectionRange, ao as Transform, ap as isInTable$1, aq as generateDocxRandomId, ar as insertNewRelationship, as as updateDOMAttributes, at as htmlHandler } from "./converter-BcqEfCTg.js";
16
16
  import { ref, computed, createElementBlock, openBlock, withModifiers, Fragment as Fragment$1, renderList, normalizeClass, createCommentVNode, toDisplayString, createElementVNode, createApp } from "vue";
17
- import { D as DocxZipper } from "./docx-zipper-CZdELYi-.js";
17
+ import { D as DocxZipper } from "./docx-zipper-DZ9ph0iQ.js";
18
18
  var GOOD_LEAF_SIZE = 200;
19
19
  var RopeSequence = function RopeSequence2() {
20
20
  };
@@ -14562,6 +14562,8 @@ const _Editor = class _Editor extends EventEmitter {
14562
14562
  element.style.isolation = "isolate";
14563
14563
  proseMirror.style.outline = "none";
14564
14564
  proseMirror.style.border = "none";
14565
+ element.style.backgroundColor = "#fff";
14566
+ proseMirror.style.backgroundColor = "#fff";
14565
14567
  const { typeface, fontSizePt, fontFamilyCss } = this.converter.getDocumentDefaultStyles() ?? {};
14566
14568
  const resolvedFontFamily = fontFamilyCss || typeface;
14567
14569
  if (resolvedFontFamily) {
@@ -14884,7 +14886,7 @@ const _Editor = class _Editor extends EventEmitter {
14884
14886
  * @returns {Object | void} Migration results
14885
14887
  */
14886
14888
  processCollaborationMigrations() {
14887
- console.debug("[checkVersionMigrations] Current editor version", "0.20.2");
14889
+ console.debug("[checkVersionMigrations] Current editor version", "0.21.0");
14888
14890
  if (!this.options.ydoc) return;
14889
14891
  const metaMap = this.options.ydoc.getMap("meta");
14890
14892
  let docVersion = metaMap.get("version");
@@ -17479,6 +17481,14 @@ const intToJapaneseCounting = (num) => {
17479
17481
  return result;
17480
17482
  };
17481
17483
  const CustomSelectionPluginKey = new PluginKey("CustomSelection");
17484
+ const shouldAllowNativeContextMenu = (event) => {
17485
+ if (!event) return false;
17486
+ if (event.ctrlKey || event.metaKey) {
17487
+ return true;
17488
+ }
17489
+ const isKeyboardInvocation = event.type === "contextmenu" && typeof event.detail === "number" && event.detail === 0 && (event.button === 0 || event.button === void 0) && event.clientX === 0 && event.clientY === 0;
17490
+ return Boolean(isKeyboardInvocation);
17491
+ };
17482
17492
  const handleClickOutside = (event, editor) => {
17483
17493
  const editorElem = editor?.options?.element;
17484
17494
  if (!editorElem) return;
@@ -17540,6 +17550,9 @@ const CustomSelection = Extension.create({
17540
17550
  props: {
17541
17551
  handleDOMEvents: {
17542
17552
  contextmenu: (view, event) => {
17553
+ if (shouldAllowNativeContextMenu(event)) {
17554
+ return false;
17555
+ }
17543
17556
  event.preventDefault();
17544
17557
  const { selection } = view.state;
17545
17558
  if (!selection.empty) {
@@ -17558,6 +17571,9 @@ const CustomSelection = Extension.create({
17558
17571
  },
17559
17572
  mousedown: (view, event) => {
17560
17573
  if (event.button === 2) {
17574
+ if (shouldAllowNativeContextMenu(event)) {
17575
+ return false;
17576
+ }
17561
17577
  event.preventDefault();
17562
17578
  const { selection: selection2 } = view.state;
17563
17579
  if (!selection2.empty) {
@@ -1,6 +1,6 @@
1
1
  import { computed, createElementBlock, openBlock, createElementVNode, createCommentVNode, normalizeClass, normalizeStyle, ref, withKeys, unref, withModifiers, createBlock, toDisplayString, withDirectives, vModelText, nextTick, getCurrentInstance, createVNode, readonly, watch, onMounted, onBeforeUnmount, reactive, onBeforeMount, inject, onActivated, onDeactivated, createTextVNode, Fragment, Comment, defineComponent, provide, h, Teleport, toRef, renderSlot, isVNode, shallowRef, watchEffect, mergeProps, Transition, vShow, cloneVNode, Text, renderList, withCtx } from "vue";
2
- import { p as process$1 } from "./converter-3xnF_NHq.js";
3
- import { _ as _export_sfc, u as useHighContrastMode, g as global$1 } from "./editor-BqYH4kDD.js";
2
+ import { p as process$1 } from "./converter-BcqEfCTg.js";
3
+ import { _ as _export_sfc, u as useHighContrastMode, g as global$1 } from "./editor-BC2sSIVa.js";
4
4
  const sanitizeNumber = (value, defaultNumber) => {
5
5
  let sanitized = value.replace(/[^0-9.]/g, "");
6
6
  sanitized = parseFloat(sanitized);
@@ -1,4 +1,4 @@
1
- import { a5 } from "./chunks/converter-3xnF_NHq.js";
1
+ import { a5 } from "./chunks/converter-BcqEfCTg.js";
2
2
  import "vue";
3
3
  export {
4
4
  a5 as SuperConverter
@@ -1,5 +1,5 @@
1
- import "./chunks/converter-3xnF_NHq.js";
2
- import { D } from "./chunks/docx-zipper-CZdELYi-.js";
1
+ import "./chunks/converter-BcqEfCTg.js";
2
+ import { D } from "./chunks/docx-zipper-DZ9ph0iQ.js";
3
3
  export {
4
4
  D as default
5
5
  };
@@ -1,6 +1,6 @@
1
- import { E } from "./chunks/editor-BqYH4kDD.js";
2
- import "./chunks/converter-3xnF_NHq.js";
3
- import "./chunks/docx-zipper-CZdELYi-.js";
1
+ import { E } from "./chunks/editor-BC2sSIVa.js";
2
+ import "./chunks/converter-BcqEfCTg.js";
3
+ import "./chunks/docx-zipper-DZ9ph0iQ.js";
4
4
  export {
5
5
  E as Editor
6
6
  };
@@ -1,4 +1,4 @@
1
- import { J as JSZip } from "./chunks/docx-zipper-CZdELYi-.js";
1
+ import { J as JSZip } from "./chunks/docx-zipper-DZ9ph0iQ.js";
2
2
  async function createZip(blobs, fileNames) {
3
3
  const zip = new JSZip();
4
4
  blobs.forEach((blob, index) => {
@@ -0,0 +1 @@
1
+ export function shouldBypassContextMenu(event: any): boolean;
@@ -14,7 +14,9 @@
14
14
  * requiresClipboard?: boolean
15
15
  * requiresTableParent?: boolean
16
16
  * requiredSectionParent?: boolean,
17
- * requiresModule?: string
17
+ * requiresModule?: string,
18
+ * render?: (context: Object) => HTMLElement,
19
+ * showWhen?: (context: Object) => boolean
18
20
  * }>
19
21
  * }>} Array of menu sections
20
22
  */
@@ -32,5 +34,7 @@ export function getItems(context: any): Array<{
32
34
  requiresTableParent?: boolean;
33
35
  requiredSectionParent?: boolean;
34
36
  requiresModule?: string;
37
+ render?: (context: any) => HTMLElement;
38
+ showWhen?: (context: any) => boolean;
35
39
  }>;
36
40
  }>;
@@ -0,0 +1,466 @@
1
+ /**
2
+ * Test helper utilities for slash menu components
3
+ * Extracts shared patterns from utils.test.js, SlashMenu.test.js, and menuItems.test.js
4
+ */
5
+ /**
6
+ * Creates a mock ProseMirror selection object with configurable properties
7
+ */
8
+ export function createMockSelection(options?: {}): {
9
+ from: number;
10
+ to: number;
11
+ empty: boolean;
12
+ $head: {
13
+ marks: import("vitest").Mock<() => {
14
+ type: {
15
+ name: any;
16
+ };
17
+ }[]>;
18
+ };
19
+ $from: {
20
+ depth: number;
21
+ node: import("vitest").Mock<() => {
22
+ type: {
23
+ name: string;
24
+ };
25
+ }>;
26
+ };
27
+ $to: {
28
+ depth: number;
29
+ node: import("vitest").Mock<() => {
30
+ type: {
31
+ name: string;
32
+ };
33
+ }>;
34
+ };
35
+ constructor: {
36
+ near: import("vitest").Mock<() => {
37
+ from: number;
38
+ to: number;
39
+ }>;
40
+ };
41
+ };
42
+ /**
43
+ * Creates a mock ProseMirror state object with configurable properties
44
+ */
45
+ export function createMockState(options?: {}): {
46
+ selection: {
47
+ from: number;
48
+ to: number;
49
+ empty: boolean;
50
+ $head: {
51
+ marks: import("vitest").Mock<() => {
52
+ type: {
53
+ name: any;
54
+ };
55
+ }[]>;
56
+ };
57
+ $from: {
58
+ depth: number;
59
+ node: import("vitest").Mock<() => {
60
+ type: {
61
+ name: string;
62
+ };
63
+ }>;
64
+ };
65
+ $to: {
66
+ depth: number;
67
+ node: import("vitest").Mock<() => {
68
+ type: {
69
+ name: string;
70
+ };
71
+ }>;
72
+ };
73
+ constructor: {
74
+ near: import("vitest").Mock<() => {
75
+ from: number;
76
+ to: number;
77
+ }>;
78
+ };
79
+ };
80
+ doc: {
81
+ textBetween: import("vitest").Mock<() => string>;
82
+ nodeAt: import("vitest").Mock<() => {
83
+ type: {
84
+ name: string;
85
+ };
86
+ }>;
87
+ resolve: import("vitest").Mock<() => {}>;
88
+ };
89
+ schema: {
90
+ marks: {};
91
+ nodes: {
92
+ paragraph: {
93
+ name: string;
94
+ };
95
+ table: {
96
+ name: string;
97
+ };
98
+ bulletList: {
99
+ name: string;
100
+ };
101
+ documentSection: {
102
+ name: string;
103
+ };
104
+ };
105
+ };
106
+ storedMarks: any;
107
+ history: {
108
+ undoDepth: number;
109
+ redoDepth: number;
110
+ };
111
+ tr: {
112
+ setMeta: import("vitest").Mock<() => any>;
113
+ setSelection: import("vitest").Mock<() => any>;
114
+ };
115
+ };
116
+ /**
117
+ * Creates a mock ProseMirror view object with configurable properties
118
+ */
119
+ export function createMockView(options?: {}): {
120
+ state: {
121
+ selection: {
122
+ from: number;
123
+ to: number;
124
+ empty: boolean;
125
+ $head: {
126
+ marks: import("vitest").Mock<() => {
127
+ type: {
128
+ name: any;
129
+ };
130
+ }[]>;
131
+ };
132
+ $from: {
133
+ depth: number;
134
+ node: import("vitest").Mock<() => {
135
+ type: {
136
+ name: string;
137
+ };
138
+ }>;
139
+ };
140
+ $to: {
141
+ depth: number;
142
+ node: import("vitest").Mock<() => {
143
+ type: {
144
+ name: string;
145
+ };
146
+ }>;
147
+ };
148
+ constructor: {
149
+ near: import("vitest").Mock<() => {
150
+ from: number;
151
+ to: number;
152
+ }>;
153
+ };
154
+ };
155
+ doc: {
156
+ textBetween: import("vitest").Mock<() => string>;
157
+ nodeAt: import("vitest").Mock<() => {
158
+ type: {
159
+ name: string;
160
+ };
161
+ }>;
162
+ resolve: import("vitest").Mock<() => {}>;
163
+ };
164
+ schema: {
165
+ marks: {};
166
+ nodes: {
167
+ paragraph: {
168
+ name: string;
169
+ };
170
+ table: {
171
+ name: string;
172
+ };
173
+ bulletList: {
174
+ name: string;
175
+ };
176
+ documentSection: {
177
+ name: string;
178
+ };
179
+ };
180
+ };
181
+ storedMarks: any;
182
+ history: {
183
+ undoDepth: number;
184
+ redoDepth: number;
185
+ };
186
+ tr: {
187
+ setMeta: import("vitest").Mock<() => any>;
188
+ setSelection: import("vitest").Mock<() => any>;
189
+ };
190
+ };
191
+ coordsAtPos: import("vitest").Mock<() => {
192
+ left: number;
193
+ top: number;
194
+ }>;
195
+ posAtCoords: import("vitest").Mock<() => {
196
+ pos: number;
197
+ }>;
198
+ dispatch: import("vitest").Mock<(...args: any[]) => any>;
199
+ focus: import("vitest").Mock<(...args: any[]) => any>;
200
+ dom: {
201
+ addEventListener: import("vitest").Mock<(...args: any[]) => any>;
202
+ removeEventListener: import("vitest").Mock<(...args: any[]) => any>;
203
+ };
204
+ };
205
+ /**
206
+ * Creates a mock editor object with configurable options
207
+ */
208
+ export function createMockEditor(options?: {}): {
209
+ view: {
210
+ state: {
211
+ selection: {
212
+ from: number;
213
+ to: number;
214
+ empty: boolean;
215
+ $head: {
216
+ marks: import("vitest").Mock<() => {
217
+ type: {
218
+ name: any;
219
+ };
220
+ }[]>;
221
+ };
222
+ $from: {
223
+ depth: number;
224
+ node: import("vitest").Mock<() => {
225
+ type: {
226
+ name: string;
227
+ };
228
+ }>;
229
+ };
230
+ $to: {
231
+ depth: number;
232
+ node: import("vitest").Mock<() => {
233
+ type: {
234
+ name: string;
235
+ };
236
+ }>;
237
+ };
238
+ constructor: {
239
+ near: import("vitest").Mock<() => {
240
+ from: number;
241
+ to: number;
242
+ }>;
243
+ };
244
+ };
245
+ doc: {
246
+ textBetween: import("vitest").Mock<() => string>;
247
+ nodeAt: import("vitest").Mock<() => {
248
+ type: {
249
+ name: string;
250
+ };
251
+ }>;
252
+ resolve: import("vitest").Mock<() => {}>;
253
+ };
254
+ schema: {
255
+ marks: {};
256
+ nodes: {
257
+ paragraph: {
258
+ name: string;
259
+ };
260
+ table: {
261
+ name: string;
262
+ };
263
+ bulletList: {
264
+ name: string;
265
+ };
266
+ documentSection: {
267
+ name: string;
268
+ };
269
+ };
270
+ };
271
+ storedMarks: any;
272
+ history: {
273
+ undoDepth: number;
274
+ redoDepth: number;
275
+ };
276
+ tr: {
277
+ setMeta: import("vitest").Mock<() => any>;
278
+ setSelection: import("vitest").Mock<() => any>;
279
+ };
280
+ };
281
+ coordsAtPos: import("vitest").Mock<() => {
282
+ left: number;
283
+ top: number;
284
+ }>;
285
+ posAtCoords: import("vitest").Mock<() => {
286
+ pos: number;
287
+ }>;
288
+ dispatch: import("vitest").Mock<(...args: any[]) => any>;
289
+ focus: import("vitest").Mock<(...args: any[]) => any>;
290
+ dom: {
291
+ addEventListener: import("vitest").Mock<(...args: any[]) => any>;
292
+ removeEventListener: import("vitest").Mock<(...args: any[]) => any>;
293
+ };
294
+ };
295
+ options: {
296
+ documentMode: string;
297
+ isAiEnabled: boolean;
298
+ slashMenuConfig: any;
299
+ aiApiKey: any;
300
+ aiEndpoint: any;
301
+ };
302
+ isEditable: boolean;
303
+ commands: any;
304
+ on: import("vitest").Mock<(...args: any[]) => any>;
305
+ off: import("vitest").Mock<(...args: any[]) => any>;
306
+ emit: import("vitest").Mock<(...args: any[]) => any>;
307
+ };
308
+ /**
309
+ * Creates a mock editor context object for slash menu utilities
310
+ */
311
+ export function createMockContext(options?: {}): {
312
+ editor: any;
313
+ cursorPosition: {
314
+ x: number;
315
+ y: number;
316
+ };
317
+ pos: number;
318
+ node: {
319
+ type: {
320
+ name: string;
321
+ };
322
+ };
323
+ event: any;
324
+ selectedText: string;
325
+ hasSelection: boolean;
326
+ trigger: string;
327
+ clipboardContent: {
328
+ html: any;
329
+ text: any;
330
+ hasContent: boolean;
331
+ };
332
+ selectionStart: number;
333
+ selectionEnd: number;
334
+ isInTable: boolean;
335
+ isInList: boolean;
336
+ isInSectionNode: boolean;
337
+ currentNodeType: string;
338
+ activeMarks: any[];
339
+ isTrackedChange: boolean;
340
+ documentMode: string;
341
+ canUndo: boolean;
342
+ canRedo: boolean;
343
+ isEditable: boolean;
344
+ };
345
+ /**
346
+ * Sets up common mocks and returns cleanup functions
347
+ * Returns an object with mock functions and a cleanup function
348
+ */
349
+ export function setupCommonMocks(): {
350
+ mocks: {
351
+ readFromClipboard: import("vitest").Mock<(...args: any[]) => any>;
352
+ selectionHasNodeOrMark: import("vitest").Mock<() => boolean>;
353
+ moveCursorToMouseEvent: import("vitest").Mock<(...args: any[]) => any>;
354
+ handleClipboardPaste: import("vitest").Mock<() => boolean>;
355
+ };
356
+ spies: {
357
+ docAddEventListener: import("vitest").MockInstance<{
358
+ <K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
359
+ (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
360
+ }>;
361
+ docRemoveEventListener: import("vitest").MockInstance<{
362
+ <K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
363
+ (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
364
+ }>;
365
+ };
366
+ cleanup: () => void;
367
+ };
368
+ /**
369
+ * Creates a beforeEach setup function with common mock resets
370
+ * Has a callback for any custom setup that needs to be done before each test
371
+ */
372
+ export function createBeforeEachSetup(customSetup?: () => void): () => void;
373
+ /**
374
+ * Mounts a Vue component with common props and returns wrapper with helper methods
375
+ */
376
+ export function mountSlashMenuComponent(component: any, options?: {}): {
377
+ wrapper: import("@vue/test-utils").VueWrapper<unknown, import("vue").ComponentPublicInstance<unknown, Omit<unknown, never>>>;
378
+ props: any;
379
+ openMenu(menuPosition?: {
380
+ left: string;
381
+ top: string;
382
+ }): Promise<void>;
383
+ closeMenu(): Promise<void>;
384
+ triggerKeydown(key: any, target?: string): Promise<void>;
385
+ };
386
+ /**
387
+ * Filters menu items by various criteria (helper for testing menu item filtering)
388
+ */
389
+ export function filterMenuItems(sections: any, criteria?: {}): any;
390
+ /**
391
+ * Creates mock menu items for testing
392
+ */
393
+ export function createMockMenuItems(count?: number, customItems?: any[]): {
394
+ id: string;
395
+ items: any[];
396
+ }[];
397
+ /**
398
+ * Creates a mock item with custom render function for testing
399
+ */
400
+ export function createMockRenderItem(id?: string, renderFn?: any): {
401
+ id: string;
402
+ label: string;
403
+ render: any;
404
+ allowedTriggers: string[];
405
+ };
406
+ /**
407
+ * Common assertions for editor mock objects
408
+ */
409
+ export function assertEditorMockStructure(editor: any): void;
410
+ /**
411
+ * Common assertions for menu sections structure
412
+ */
413
+ export function assertMenuSectionsStructure(sections: any): void;
414
+ /**
415
+ * Asserts that event listeners are properly set up
416
+ */
417
+ export function assertEventListenersSetup(editor: any, documentSpies: any): void;
418
+ /**
419
+ * Asserts that event listeners are properly cleaned up
420
+ */
421
+ export function assertEventListenersCleanup(editor: any, documentSpies: any): void;
422
+ export namespace SlashMenuConfigs {
423
+ namespace withAI {
424
+ let includeDefaultItems: boolean;
425
+ let customItems: any[];
426
+ }
427
+ namespace customOnly {
428
+ let includeDefaultItems_1: boolean;
429
+ export { includeDefaultItems_1 as includeDefaultItems };
430
+ let customItems_1: {
431
+ id: string;
432
+ items: {
433
+ id: string;
434
+ label: string;
435
+ allowedTriggers: string[];
436
+ action: import("vitest").Mock<(...args: any[]) => any>;
437
+ }[];
438
+ }[];
439
+ export { customItems_1 as customItems };
440
+ }
441
+ function withProvider(providerFn: any): {
442
+ includeDefaultItems: boolean;
443
+ menuProvider: any;
444
+ };
445
+ namespace withConditionalItems {
446
+ let includeDefaultItems_2: boolean;
447
+ export { includeDefaultItems_2 as includeDefaultItems };
448
+ let customItems_2: {
449
+ id: string;
450
+ items: ({
451
+ id: string;
452
+ label: string;
453
+ allowedTriggers: string[];
454
+ action: import("vitest").Mock<(...args: any[]) => any>;
455
+ showWhen?: undefined;
456
+ } | {
457
+ id: string;
458
+ label: string;
459
+ allowedTriggers: string[];
460
+ action: import("vitest").Mock<(...args: any[]) => any>;
461
+ showWhen: (context: any) => any;
462
+ })[];
463
+ }[];
464
+ export { customItems_2 as customItems };
465
+ }
466
+ }
@@ -3,7 +3,14 @@
3
3
  *
4
4
  * @param {Object} editor - The editor instance
5
5
  * @param {MouseEvent} [event] - Optional mouse event (for context menu)
6
- * @returns {Object} context - { editor, selectedText, pos, node, event }
6
+ * @returns {Promise<Object>} context - Enhanced editor context with comprehensive state information
7
7
  */
8
- export function getEditorContext(editor: any, event?: MouseEvent): any;
8
+ export function getEditorContext(editor: any, event?: MouseEvent): Promise<any>;
9
9
  export function getPropsByItemId(itemId: string, props: any): any;
10
+ declare function getStructureFromResolvedPos(state: any, pos: any): {
11
+ isInTable: boolean;
12
+ isInList: boolean;
13
+ isInSectionNode: boolean;
14
+ };
15
+ declare function isCollaborationEnabled(editor: any): boolean;
16
+ export { getStructureFromResolvedPos as __getStructureFromResolvedPosForTest, isCollaborationEnabled as __isCollaborationEnabledForTest };
@@ -0,0 +1,2 @@
1
+ export const schemaWithLists: Schema<"text" | "bulletList" | "orderedList" | "doc" | "listItem" | "paragraph" | "tab", keyof import("orderedmap").default<import("prosemirror-model").MarkSpec>>;
2
+ import { Schema } from 'prosemirror-model';
@@ -0,0 +1,4 @@
1
+ export function createTestEditor({ doc, schemaOverride }?: {}): Editor;
2
+ export function createCommandContext(editor: any): CommandService;
3
+ import { Editor } from '../../Editor.js';
4
+ import { CommandService } from '../../CommandService.js';
@@ -0,0 +1,2 @@
1
+ export const testSchema: Schema<keyof import("orderedmap").default<import("prosemirror-model").NodeSpec>, keyof import("orderedmap").default<import("prosemirror-model").MarkSpec>>;
2
+ import { Schema } from 'prosemirror-model';
@@ -0,0 +1,7 @@
1
+ export function createState(doc: any): EditorState;
2
+ export function setSelection(state: any, pos: any, end?: any): any;
3
+ export function createDispatch(): {
4
+ dispatch: (tr: any) => number;
5
+ dispatched: any[];
6
+ };
7
+ import { EditorState } from 'prosemirror-state';
@@ -0,0 +1,2 @@
1
+ export const testSchema: Schema<"text" | "bulletList" | "orderedList" | "doc" | "listItem" | "paragraph" | "tab", never>;
2
+ import { Schema } from 'prosemirror-model';
@@ -0,0 +1,6 @@
1
+ /** @type {import('@translator').NodeTranslatorConfig} */
2
+ export const config: import("@translator").NodeTranslatorConfig;
3
+ /**
4
+ * @type {import('@translator').NodeTranslator}
5
+ */
6
+ export const translator: import("@translator").NodeTranslator;
@@ -0,0 +1 @@
1
+ export * from "./alternate-content-translator.js";
@@ -22,6 +22,7 @@
22
22
  * @private
23
23
  */
24
24
  export const CustomSelectionPluginKey: PluginKey<any>;
25
+ export function shouldAllowNativeContextMenu(event: MouseEvent): boolean;
25
26
  /**
26
27
  * @module CustomSelection
27
28
  * @sidebarTitle Custom Selection