@harbour-enterprises/superdoc 0.21.0-next.7 → 0.21.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 (41) hide show
  1. package/dist/chunks/{PdfViewer-B8R1j6LP.es.js → PdfViewer-D3zo7tPo.es.js} +1 -1
  2. package/dist/chunks/{PdfViewer-DWWRw_re.cjs → PdfViewer-OZDJ7gwT.cjs} +1 -1
  3. package/dist/chunks/{index-Bpp8Ruyf.cjs → index-CfYf4T_z.cjs} +3 -4
  4. package/dist/chunks/{index-CLGEbkfW.es.js → index-MzW5BVNd.es.js} +3 -4
  5. package/dist/chunks/{super-editor.es-DWm41myg.es.js → super-editor.es-Bntob7Wd.es.js} +761 -1155
  6. package/dist/chunks/{super-editor.es-aBw27Tag.cjs → super-editor.es-U-GVCd_F.cjs} +761 -1155
  7. package/dist/core/types/index.d.ts +0 -8
  8. package/dist/core/types/index.d.ts.map +1 -1
  9. package/dist/style.css +27 -32
  10. package/dist/super-editor/ai-writer.es.js +2 -2
  11. package/dist/super-editor/chunks/{converter-DYAHhSrg.js → converter-3xnF_NHq.js} +643 -773
  12. package/dist/super-editor/chunks/{docx-zipper-BDbCmfbE.js → docx-zipper-CZdELYi-.js} +1 -1
  13. package/dist/super-editor/chunks/{editor-VW8eKYoK.js → editor-BqYH4kDD.js} +2 -4
  14. package/dist/super-editor/chunks/{toolbar-B1up5fYV.js → toolbar-TkaE2kKM.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/menuItems.d.ts +1 -5
  20. package/dist/super-editor/src/components/slash-menu/utils.d.ts +2 -9
  21. package/dist/super-editor/src/extensions/run-item/index.d.ts +1 -0
  22. package/dist/super-editor/src/extensions/run-item/run-item.d.ts +26 -0
  23. package/dist/super-editor/src/tests/helpers/helpers.d.ts +0 -1
  24. package/dist/super-editor/style.css +0 -5
  25. package/dist/super-editor/super-editor.es.js +151 -452
  26. package/dist/super-editor/toolbar.es.js +2 -2
  27. package/dist/super-editor.cjs +1 -1
  28. package/dist/super-editor.es.js +1 -1
  29. package/dist/superdoc.cjs +2 -2
  30. package/dist/superdoc.es.js +2 -2
  31. package/dist/superdoc.umd.js +762 -1157
  32. package/dist/superdoc.umd.js.map +1 -1
  33. package/package.json +1 -1
  34. package/dist/super-editor/src/components/slash-menu/tests/testHelpers.d.ts +0 -466
  35. package/dist/super-editor/src/core/commands/__tests__/schemaWithLists.d.ts +0 -2
  36. package/dist/super-editor/src/core/commands/__tests__/testHelpers.d.ts +0 -4
  37. package/dist/super-editor/src/core/commands/__tests__/testSchema.d.ts +0 -2
  38. package/dist/super-editor/src/core/commands/tests/commandTestUtils.d.ts +0 -7
  39. package/dist/super-editor/src/core/commands/tests/test-schema.d.ts +0 -2
  40. package/dist/super-editor/src/core/super-converter/v3/handlers/mc/altermateContent/alternate-content-translator.d.ts +0 -6
  41. package/dist/super-editor/src/core/super-converter/v3/handlers/mc/altermateContent/index.d.ts +0 -1
@@ -9,14 +9,14 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
9
9
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
10
10
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
11
11
  var _SuperToolbar_instances, initToolbarGroups_fn, _interceptedCommands, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, runCommandWithArgumentOnly_fn;
12
- import { av as getDefaultExportFromCjs, V as v4, T as TextSelection$1, v as getMarkRange, ay as vClickOutside, H as findParentNode, az as getActiveFormatting, ap as isInTable, aA as readFromClipboard, aB as handleClipboardPaste, aC as getFileObject, aD as runPropertyTranslators, aE as translator, aF as translator$1, aG as translator$2, aH as translator$3, aI as translator$4, aJ as translator$5, aK as translator$6, aL as translator$7, aM as translator$8, aN as translator$9, aO as translator$a, aP as translator$b, aQ as translator$c, aR as translator$d, aS as translator$e, aT as translator$f, aU as translator$g, aV as translator$h, aW as translator$i, aX as translator$j, aY as translator$k, aZ as translator$l, a_ as translator$m, a$ as translator$n, b0 as translator$o, b1 as translator$p, b2 as translator$q, b3 as translator$r, b4 as translator$s, b5 as translator$t, b6 as translator$u, b7 as translator$v, b8 as translator$w, b9 as translator$x, ba as translator$y, bb as translator$z, bc as translator$A, bd as translator$B, be as translator$C, bf as translator$D, bg as translator$E, bh as translator$F, bi as translator$G, bj as translator$H, bk as translator$I, bl as translator$J, bm as translator$K, bn as translator$L, bo as translator$M, bp as translator$N, bq as translator$O, br as translator$P, bs as translator$Q, bt as translator$R, bu as translator$S, bv as translator$T, bw as translator$U, bx as translator$V, by as translator$W, bz as translator$X, bA as translator$Y, bB as translator$Z, bC as translator$_, bD as translator$$, bE as translator$10, a as Plugin } from "./chunks/converter-DYAHhSrg.js";
13
- import { bF, a5, i, a2 } from "./chunks/converter-DYAHhSrg.js";
14
- import { _ as _export_sfc, u as useHighContrastMode, a as getQuickFormatList, b as generateLinkedStyleString, c as getFileOpener, d as checkAndProcessImage, r as replaceSelectionWithImagePlaceholder, e as uploadAndInsertImage, y as yUndoPluginKey, f as undoDepth, h as redoDepth, S as SlashMenuPluginKey, E as Editor, i as getStarterExtensions, P as Placeholder, j as getRichTextExtensions, M as Mark, k as Extension, A as Attribute, N as Node } from "./chunks/editor-VW8eKYoK.js";
15
- import { n, C, o, T, l, p, m } from "./chunks/editor-VW8eKYoK.js";
12
+ import { av as getDefaultExportFromCjs, V as v4, T as TextSelection$1, v as getMarkRange, ay as vClickOutside, H as findParentNode, az as getActiveFormatting, ap as isInTable, aA as readFromClipboard, aB as handleClipboardPaste, aC as getFileObject, aD as runPropertyTranslators, aE as translator, aF as translator$1, aG as translator$2, aH as translator$3, aI as translator$4, aJ as translator$5, aK as translator$6, aL as translator$7, aM as translator$8, aN as translator$9, aO as translator$a, aP as translator$b, aQ as translator$c, aR as translator$d, aS as translator$e, aT as translator$f, aU as translator$g, aV as translator$h, aW as translator$i, aX as translator$j, aY as translator$k, aZ as translator$l, a_ as translator$m, a$ as translator$n, b0 as translator$o, b1 as translator$p, a as Plugin } from "./chunks/converter-3xnF_NHq.js";
13
+ import { b2, a5, i, a2 } from "./chunks/converter-3xnF_NHq.js";
14
+ import { _ as _export_sfc, u as useHighContrastMode, a as getQuickFormatList, b as generateLinkedStyleString, c as getFileOpener, d as checkAndProcessImage, r as replaceSelectionWithImagePlaceholder, e as uploadAndInsertImage, y as yUndoPluginKey, f as undoDepth, h as redoDepth, S as SlashMenuPluginKey, E as Editor, i as getStarterExtensions, P as Placeholder, j as getRichTextExtensions, M as Mark, k as Extension, A as Attribute, N as Node } from "./chunks/editor-BqYH4kDD.js";
15
+ import { n, C, o, T, l, p, m } from "./chunks/editor-BqYH4kDD.js";
16
16
  import { ref, onMounted, createElementBlock, openBlock, normalizeClass, unref, Fragment, renderList, createElementVNode, withModifiers, toDisplayString, createCommentVNode, normalizeStyle, computed, watch, withDirectives, withKeys, vModelText, createTextVNode, createVNode, h, createApp, markRaw, nextTick, onBeforeUnmount, reactive, onUnmounted, renderSlot, shallowRef, createBlock, withCtx, resolveDynamicComponent, normalizeProps, guardReactiveProps } from "vue";
17
- import { t as toolbarIcons, s as sanitizeNumber, T as Toolbar, m as magicWandIcon, p as plusIconSvg, a as trashIconSvg, l as linkIconSvg, b as tableIconSvg, c as scissorsIconSvg, d as copyIconSvg, e as pasteIconSvg, f as borderNoneIconSvg, g as arrowsToDotIconSvg, h as arrowsLeftRightIconSvg, w as wrenchIconSvg, u as useMessage, N as NSkeleton } from "./chunks/toolbar-B1up5fYV.js";
17
+ import { t as toolbarIcons, s as sanitizeNumber, T as Toolbar, m as magicWandIcon, p as plusIconSvg, a as trashIconSvg, l as linkIconSvg, b as tableIconSvg, c as scissorsIconSvg, d as copyIconSvg, e as pasteIconSvg, f as borderNoneIconSvg, g as arrowsToDotIconSvg, h as arrowsLeftRightIconSvg, w as wrenchIconSvg, u as useMessage, N as NSkeleton } from "./chunks/toolbar-TkaE2kKM.js";
18
18
  import AIWriter from "./ai-writer.es.js";
19
- import { D } from "./chunks/docx-zipper-BDbCmfbE.js";
19
+ import { D } from "./chunks/docx-zipper-CZdELYi-.js";
20
20
  import { createZip } from "./file-zipper.es.js";
21
21
  var eventemitter3 = { exports: {} };
22
22
  var hasRequiredEventemitter3;
@@ -3208,115 +3208,6 @@ runCommandWithArgumentOnly_fn = function({ item, argument, noArgumentCallback =
3208
3208
  this.updateToolbarState();
3209
3209
  }
3210
3210
  };
3211
- const onMarginClickCursorChange = (event, editor) => {
3212
- const y = event.clientY;
3213
- const x = event.clientX;
3214
- const { view } = editor;
3215
- const editorRect = view.dom.getBoundingClientRect();
3216
- let coords = {
3217
- left: 0,
3218
- top: y
3219
- };
3220
- let isRightMargin = false;
3221
- if (x > editorRect.right) {
3222
- coords.left = editorRect.left + editorRect.width - 1;
3223
- isRightMargin = true;
3224
- } else if (x < editorRect.left) {
3225
- coords.left = editorRect.left;
3226
- }
3227
- const pos = view.posAtCoords(coords)?.pos;
3228
- if (pos) {
3229
- let cursorPos = pos;
3230
- if (isRightMargin) {
3231
- const $pos = view.state.doc.resolve(pos);
3232
- const charOffset = $pos.textOffset;
3233
- const node = view.state.doc.nodeAt(pos);
3234
- const text = node?.text;
3235
- const charAtPos = text?.charAt(charOffset);
3236
- cursorPos = node?.isText && charAtPos !== " " ? pos - 1 : pos;
3237
- }
3238
- const transaction = view.state.tr.setSelection(TextSelection$1.create(view.state.doc, cursorPos));
3239
- view.dispatch(transaction);
3240
- view.focus();
3241
- }
3242
- };
3243
- const checkNodeSpecificClicks = (editor, event, popoverControls) => {
3244
- if (!editor) return;
3245
- if (selectionHasNodeOrMark(editor.view.state, "link", { requireEnds: true })) {
3246
- popoverControls.component = LinkInput;
3247
- popoverControls.position = {
3248
- left: `${event.clientX - editor.element.getBoundingClientRect().left}px`,
3249
- top: `${event.clientY - editor.element.getBoundingClientRect().top + 15}px`
3250
- };
3251
- popoverControls.props = {
3252
- showInput: true
3253
- };
3254
- popoverControls.visible = true;
3255
- }
3256
- };
3257
- function selectionHasNodeOrMark(state, name, options = {}) {
3258
- const { requireEnds = false } = options;
3259
- const $from = state.selection.$from;
3260
- const $to = state.selection.$to;
3261
- if (requireEnds) {
3262
- for (let d = $from.depth; d > 0; d--) {
3263
- if ($from.node(d).type.name === name) {
3264
- return true;
3265
- }
3266
- }
3267
- for (let d = $to.depth; d > 0; d--) {
3268
- if ($to.node(d).type.name === name) {
3269
- return true;
3270
- }
3271
- }
3272
- } else {
3273
- for (let d = $from.depth; d > 0; d--) {
3274
- if ($from.node(d).type.name === name) {
3275
- return true;
3276
- }
3277
- }
3278
- }
3279
- const markType = state.schema.marks[name];
3280
- if (markType) {
3281
- const { from, to, empty } = state.selection;
3282
- if (requireEnds) {
3283
- const fromMarks = markType.isInSet($from.marks());
3284
- const toMarks = markType.isInSet($to.marks());
3285
- if (fromMarks || toMarks) {
3286
- return true;
3287
- }
3288
- if (empty && markType.isInSet(state.storedMarks || $from.marks())) {
3289
- return true;
3290
- }
3291
- } else {
3292
- if (empty) {
3293
- if (markType.isInSet(state.storedMarks || $from.marks())) {
3294
- return true;
3295
- }
3296
- } else {
3297
- let hasMark = false;
3298
- state.doc.nodesBetween(from, to, (node) => {
3299
- if (markType.isInSet(node.marks)) {
3300
- hasMark = true;
3301
- return false;
3302
- }
3303
- });
3304
- if (hasMark) return true;
3305
- }
3306
- }
3307
- }
3308
- return false;
3309
- }
3310
- function moveCursorToMouseEvent(event, editor) {
3311
- const { view } = editor;
3312
- const coords = { left: event.clientX, top: event.clientY };
3313
- const pos = view.posAtCoords(coords)?.pos;
3314
- if (typeof pos === "number") {
3315
- const tr = view.state.tr.setSelection(TextSelection$1.create(view.state.doc, pos));
3316
- view.dispatch(tr);
3317
- view.focus();
3318
- }
3319
- }
3320
3211
  const ICONS = {
3321
3212
  addRowBefore: plusIconSvg,
3322
3213
  addRowAfter: plusIconSvg,
@@ -3516,30 +3407,6 @@ const getPropsByItemId = (itemId, props) => {
3516
3407
  return baseProps;
3517
3408
  }
3518
3409
  };
3519
- function normalizeClipboardContent(rawClipboardContent) {
3520
- if (!rawClipboardContent) {
3521
- return {
3522
- html: null,
3523
- text: null,
3524
- hasContent: false,
3525
- raw: null
3526
- };
3527
- }
3528
- const html = typeof rawClipboardContent.html === "string" ? rawClipboardContent.html : null;
3529
- const text = typeof rawClipboardContent.text === "string" ? rawClipboardContent.text : null;
3530
- const hasHtml = !!html && html.trim().length > 0;
3531
- const hasText = !!text && text.length > 0;
3532
- const isObject = typeof rawClipboardContent === "object" && rawClipboardContent !== null;
3533
- const fragmentSize = typeof rawClipboardContent.size === "number" ? rawClipboardContent.size : null;
3534
- const nestedSize = isObject && rawClipboardContent.content && typeof rawClipboardContent.content.size === "number" ? rawClipboardContent.content.size : null;
3535
- const hasFragmentContent = (fragmentSize ?? nestedSize ?? 0) > 0;
3536
- return {
3537
- html,
3538
- text,
3539
- hasContent: hasHtml || hasText || hasFragmentContent,
3540
- raw: rawClipboardContent
3541
- };
3542
- }
3543
3410
  async function getEditorContext(editor, event) {
3544
3411
  const { view } = editor;
3545
3412
  const { state } = view;
@@ -3555,144 +3422,123 @@ async function getEditorContext(editor, event) {
3555
3422
  pos = from;
3556
3423
  node = state.doc.nodeAt(pos);
3557
3424
  }
3558
- const rawClipboardContent = await readFromClipboard(state);
3559
- const clipboardContent = normalizeClipboardContent(rawClipboardContent);
3560
- const structureFromResolvedPos = pos !== null ? getStructureFromResolvedPos(state, pos) : null;
3561
- const isInTable2 = structureFromResolvedPos?.isInTable ?? selectionHasNodeOrMark(state, "table", { requireEnds: true });
3562
- const isInList = structureFromResolvedPos?.isInList ?? (selectionHasNodeOrMark(state, "bulletList", { requireEnds: false }) || selectionHasNodeOrMark(state, "orderedList", { requireEnds: false }));
3563
- const isInSectionNode = structureFromResolvedPos?.isInSectionNode ?? selectionHasNodeOrMark(state, "documentSection", { requireEnds: true });
3564
- const currentNodeType = node?.type?.name || null;
3565
- const activeMarks = [];
3566
- if (event && pos !== null) {
3567
- const $pos = state.doc.resolve(pos);
3568
- if ($pos.marks && typeof $pos.marks === "function") {
3569
- $pos.marks().forEach((mark) => activeMarks.push(mark.type.name));
3570
- }
3571
- if (node && node.marks) {
3572
- node.marks.forEach((mark) => activeMarks.push(mark.type.name));
3573
- }
3574
- } else {
3575
- state.storedMarks?.forEach((mark) => activeMarks.push(mark.type.name));
3576
- state.selection.$head.marks().forEach((mark) => activeMarks.push(mark.type.name));
3577
- }
3578
- const isTrackedChange = activeMarks.includes("trackInsert") || activeMarks.includes("trackDelete");
3579
- let trackedChangeId = null;
3580
- if (isTrackedChange && event && pos !== null) {
3581
- const $pos = state.doc.resolve(pos);
3582
- const marksAtPos = $pos.marks();
3583
- const trackedMark = marksAtPos.find((mark) => mark.type.name === "trackInsert" || mark.type.name === "trackDelete");
3584
- if (trackedMark) {
3585
- trackedChangeId = trackedMark.attrs.id;
3586
- }
3587
- }
3588
- const cursorCoords = pos ? view.coordsAtPos(pos) : null;
3589
- const cursorPosition = cursorCoords ? {
3590
- x: cursorCoords.left,
3591
- y: cursorCoords.top
3592
- } : null;
3425
+ const clipboardContent = await readFromClipboard(state);
3593
3426
  return {
3594
- // Selection info
3427
+ editor,
3595
3428
  selectedText,
3596
- hasSelection: !empty,
3597
- selectionStart: from,
3598
- selectionEnd: to,
3599
- // Document structure
3600
- isInTable: isInTable2,
3601
- isInList,
3602
- isInSectionNode,
3603
- currentNodeType,
3604
- activeMarks,
3605
- // Document state
3606
- isTrackedChange,
3607
- trackedChangeId,
3608
- documentMode: editor.options?.documentMode || "editing",
3609
- canUndo: computeCanUndo(editor, state),
3610
- canRedo: computeCanRedo(editor, state),
3611
- isEditable: editor.isEditable,
3612
- // Clipboard
3613
- clipboardContent,
3614
- // Position and trigger info
3615
- cursorPosition,
3616
3429
  pos,
3617
3430
  node,
3618
3431
  event,
3619
- // Editor reference for advanced use cases
3620
- editor
3432
+ clipboardContent
3621
3433
  };
3622
3434
  }
3623
- function computeCanUndo(editor, state) {
3624
- if (typeof editor?.can === "function") {
3625
- try {
3626
- const can = editor.can();
3627
- if (can && typeof can.undo === "function") {
3628
- return !!can.undo();
3629
- }
3630
- } catch (error) {
3631
- console.warn("[SlashMenu] Unable to determine undo availability via editor.can():", error);
3632
- }
3435
+ const onMarginClickCursorChange = (event, editor) => {
3436
+ const y = event.clientY;
3437
+ const x = event.clientX;
3438
+ const { view } = editor;
3439
+ const editorRect = view.dom.getBoundingClientRect();
3440
+ let coords = {
3441
+ left: 0,
3442
+ top: y
3443
+ };
3444
+ let isRightMargin = false;
3445
+ if (x > editorRect.right) {
3446
+ coords.left = editorRect.left + editorRect.width - 1;
3447
+ isRightMargin = true;
3448
+ } else if (x < editorRect.left) {
3449
+ coords.left = editorRect.left;
3633
3450
  }
3634
- if (isCollaborationEnabled(editor)) {
3635
- try {
3636
- const undoManager = yUndoPluginKey.getState(state)?.undoManager;
3637
- return !!undoManager && undoManager.undoStack.length > 0;
3638
- } catch (error) {
3639
- console.warn("[SlashMenu] Unable to determine undo availability via y-prosemirror:", error);
3451
+ const pos = view.posAtCoords(coords)?.pos;
3452
+ if (pos) {
3453
+ let cursorPos = pos;
3454
+ if (isRightMargin) {
3455
+ const $pos = view.state.doc.resolve(pos);
3456
+ const charOffset = $pos.textOffset;
3457
+ const node = view.state.doc.nodeAt(pos);
3458
+ const text = node?.text;
3459
+ const charAtPos = text?.charAt(charOffset);
3460
+ cursorPos = node?.isText && charAtPos !== " " ? pos - 1 : pos;
3640
3461
  }
3462
+ const transaction = view.state.tr.setSelection(TextSelection$1.create(view.state.doc, cursorPos));
3463
+ view.dispatch(transaction);
3464
+ view.focus();
3641
3465
  }
3642
- try {
3643
- return undoDepth(state) > 0;
3644
- } catch (error) {
3645
- console.warn("[SlashMenu] Unable to determine undo availability via history plugin:", error);
3646
- return false;
3466
+ };
3467
+ const checkNodeSpecificClicks = (editor, event, popoverControls) => {
3468
+ if (!editor) return;
3469
+ if (selectionHasNodeOrMark(editor.view.state, "link", { requireEnds: true })) {
3470
+ popoverControls.component = LinkInput;
3471
+ popoverControls.position = {
3472
+ left: `${event.clientX - editor.element.getBoundingClientRect().left}px`,
3473
+ top: `${event.clientY - editor.element.getBoundingClientRect().top + 15}px`
3474
+ };
3475
+ popoverControls.props = {
3476
+ showInput: true
3477
+ };
3478
+ popoverControls.visible = true;
3647
3479
  }
3648
- }
3649
- function computeCanRedo(editor, state) {
3650
- if (typeof editor?.can === "function") {
3651
- try {
3652
- const can = editor.can();
3653
- if (can && typeof can.redo === "function") {
3654
- return !!can.redo();
3480
+ };
3481
+ function selectionHasNodeOrMark(state, name, options = {}) {
3482
+ const { requireEnds = false } = options;
3483
+ const $from = state.selection.$from;
3484
+ const $to = state.selection.$to;
3485
+ if (requireEnds) {
3486
+ for (let d = $from.depth; d > 0; d--) {
3487
+ if ($from.node(d).type.name === name) {
3488
+ return true;
3655
3489
  }
3656
- } catch (error) {
3657
- console.warn("[SlashMenu] Unable to determine redo availability via editor.can():", error);
3658
3490
  }
3659
- }
3660
- if (isCollaborationEnabled(editor)) {
3661
- try {
3662
- const undoManager = yUndoPluginKey.getState(state)?.undoManager;
3663
- return !!undoManager && undoManager.redoStack.length > 0;
3664
- } catch (error) {
3665
- console.warn("[SlashMenu] Unable to determine redo availability via y-prosemirror:", error);
3491
+ for (let d = $to.depth; d > 0; d--) {
3492
+ if ($to.node(d).type.name === name) {
3493
+ return true;
3494
+ }
3495
+ }
3496
+ } else {
3497
+ for (let d = $from.depth; d > 0; d--) {
3498
+ if ($from.node(d).type.name === name) {
3499
+ return true;
3500
+ }
3666
3501
  }
3667
3502
  }
3668
- try {
3669
- return redoDepth(state) > 0;
3670
- } catch (error) {
3671
- console.warn("[SlashMenu] Unable to determine redo availability via history plugin:", error);
3672
- return false;
3503
+ const markType = state.schema.marks[name];
3504
+ if (markType) {
3505
+ const { from, to, empty } = state.selection;
3506
+ if (requireEnds) {
3507
+ const fromMarks = markType.isInSet($from.marks());
3508
+ const toMarks = markType.isInSet($to.marks());
3509
+ if (fromMarks || toMarks) {
3510
+ return true;
3511
+ }
3512
+ if (empty && markType.isInSet(state.storedMarks || $from.marks())) {
3513
+ return true;
3514
+ }
3515
+ } else {
3516
+ if (empty) {
3517
+ if (markType.isInSet(state.storedMarks || $from.marks())) {
3518
+ return true;
3519
+ }
3520
+ } else {
3521
+ let hasMark = false;
3522
+ state.doc.nodesBetween(from, to, (node) => {
3523
+ if (markType.isInSet(node.marks)) {
3524
+ hasMark = true;
3525
+ return false;
3526
+ }
3527
+ });
3528
+ if (hasMark) return true;
3529
+ }
3530
+ }
3673
3531
  }
3532
+ return false;
3674
3533
  }
3675
- function isCollaborationEnabled(editor) {
3676
- return Boolean(editor?.options?.collaborationProvider && editor?.options?.ydoc);
3677
- }
3678
- function getStructureFromResolvedPos(state, pos) {
3679
- try {
3680
- const $pos = state.doc.resolve(pos);
3681
- const ancestors = /* @__PURE__ */ new Set();
3682
- for (let depth = $pos.depth; depth > 0; depth--) {
3683
- ancestors.add($pos.node(depth).type.name);
3684
- }
3685
- const isInList = ancestors.has("bulletList") || ancestors.has("orderedList");
3686
- const isInTable2 = ancestors.has("table") || ancestors.has("tableRow") || ancestors.has("tableCell") || ancestors.has("tableHeader");
3687
- const isInSectionNode = ancestors.has("documentSection");
3688
- return {
3689
- isInTable: isInTable2,
3690
- isInList,
3691
- isInSectionNode
3692
- };
3693
- } catch (error) {
3694
- console.warn("[SlashMenu] Unable to resolve position for structural context:", error);
3695
- return null;
3534
+ function moveCursorToMouseEvent(event, editor) {
3535
+ const { view } = editor;
3536
+ const coords = { left: event.clientX, top: event.clientY };
3537
+ const pos = view.posAtCoords(coords)?.pos;
3538
+ if (typeof pos === "number") {
3539
+ const tr = view.state.tr.setSelection(TextSelection$1.create(view.state.doc, pos));
3540
+ view.dispatch(tr);
3541
+ view.focus();
3696
3542
  }
3697
3543
  }
3698
3544
  const isModuleEnabled = (editorOptions, moduleName) => {
@@ -3706,52 +3552,8 @@ const isModuleEnabled = (editorOptions, moduleName) => {
3706
3552
  return true;
3707
3553
  }
3708
3554
  };
3709
- function applyCustomMenuConfiguration(defaultSections, context) {
3710
- const { editor } = context;
3711
- const slashMenuConfig = editor.options?.slashMenuConfig;
3712
- if (!slashMenuConfig) {
3713
- return defaultSections;
3714
- }
3715
- let sections = [];
3716
- if (slashMenuConfig.includeDefaultItems !== false) {
3717
- sections = [...defaultSections];
3718
- }
3719
- if (slashMenuConfig.customItems && Array.isArray(slashMenuConfig.customItems)) {
3720
- sections = [...sections, ...slashMenuConfig.customItems];
3721
- }
3722
- if (typeof slashMenuConfig.menuProvider === "function") {
3723
- try {
3724
- sections = slashMenuConfig.menuProvider(context, sections) || sections;
3725
- } catch (error) {
3726
- console.warn("[SlashMenu] Error in custom menuProvider:", error);
3727
- }
3728
- }
3729
- return sections;
3730
- }
3731
- function filterCustomItems(sections, context) {
3732
- return sections.map((section) => {
3733
- const filteredItems = section.items.filter((item) => {
3734
- if (typeof item.showWhen === "function") {
3735
- try {
3736
- return item.showWhen(context);
3737
- } catch (error) {
3738
- console.warn(`[SlashMenu] Error in showWhen for item ${item.id}:`, error);
3739
- return false;
3740
- }
3741
- }
3742
- return true;
3743
- });
3744
- return {
3745
- ...section,
3746
- items: filteredItems
3747
- };
3748
- }).filter((section) => section.items.length > 0);
3749
- }
3750
3555
  function getItems(context) {
3751
3556
  const { editor, selectedText, trigger, clipboardContent } = context;
3752
- const clipboardHasContent = Boolean(
3753
- clipboardContent?.hasContent || clipboardContent?.html || clipboardContent?.text || typeof clipboardContent?.size === "number" && clipboardContent.size > 0 || clipboardContent && typeof clipboardContent?.content?.size === "number" && clipboardContent.content.size > 0 || clipboardContent?.raw && typeof clipboardContent.raw.size === "number" && clipboardContent.raw.size > 0 || clipboardContent?.raw && typeof clipboardContent.raw?.content?.size === "number" && clipboardContent.raw.content.size > 0
3754
- );
3755
3557
  const isInTable2 = selectionHasNodeOrMark(editor.view.state, "table", { requireEnds: true });
3756
3558
  const isInSectionNode = selectionHasNodeOrMark(editor.view.state, "documentSection", { requireEnds: true });
3757
3559
  const sections = [
@@ -3888,13 +3690,12 @@ function getItems(context) {
3888
3690
  ]
3889
3691
  }
3890
3692
  ];
3891
- let allSections = applyCustomMenuConfiguration(sections, context);
3892
- const filteredSections = allSections.map((section) => {
3693
+ const filteredSections = sections.map((section) => {
3893
3694
  const filteredItems = section.items.filter((item) => {
3894
3695
  if (item.requiresModule && !isModuleEnabled(editor?.options, item.requiresModule)) return false;
3895
3696
  if (item.requiresSelection && !selectedText) return false;
3896
3697
  if (!item.allowedTriggers.includes(trigger)) return false;
3897
- if (item.requiresClipboard && !clipboardHasContent) return false;
3698
+ if (item.requiresClipboard && !clipboardContent) return false;
3898
3699
  if (item.requiresTableParent && !isInTable2 || item.id === "insert-table" && isInTable2) return false;
3899
3700
  if (item.requiresSectionParent && !isInSectionNode) return false;
3900
3701
  return true;
@@ -3904,8 +3705,7 @@ function getItems(context) {
3904
3705
  items: filteredItems
3905
3706
  };
3906
3707
  }).filter((section) => section.items.length > 0);
3907
- const finalSections = filterCustomItems(filteredSections, context);
3908
- return finalSections;
3708
+ return filteredSections;
3909
3709
  }
3910
3710
  const _hoisted_1$3 = { class: "slash-menu-items" };
3911
3711
  const _hoisted_2$1 = {
@@ -3940,7 +3740,6 @@ const _sfc_main$4 = {
3940
3740
  const menuRef = ref(null);
3941
3741
  const sections = ref([]);
3942
3742
  const selectedId = ref(null);
3943
- const currentContext = ref(null);
3944
3743
  const handleEditorUpdate = () => {
3945
3744
  if (!props.editor?.isEditable && isOpen.value) {
3946
3745
  closeMenu({ restoreCursor: false });
@@ -3986,44 +3785,6 @@ const _sfc_main$4 = {
3986
3785
  selectedId.value = newItems[0].id;
3987
3786
  }
3988
3787
  });
3989
- const customItemRefs = /* @__PURE__ */ new Map();
3990
- const setCustomItemRef = (el, item) => {
3991
- if (el && item.render) {
3992
- customItemRefs.set(item.id, { element: el, item });
3993
- nextTick(() => {
3994
- renderCustomItem(item.id);
3995
- });
3996
- }
3997
- };
3998
- const renderCustomItem = async (itemId) => {
3999
- const refData = customItemRefs.get(itemId);
4000
- if (!refData || refData.element.hasCustomContent) return;
4001
- const { element, item } = refData;
4002
- try {
4003
- if (!currentContext.value) {
4004
- currentContext.value = await getEditorContext(props.editor);
4005
- }
4006
- const context = currentContext.value;
4007
- const customElement = item.render(context);
4008
- if (customElement instanceof HTMLElement) {
4009
- element.innerHTML = "";
4010
- element.appendChild(customElement);
4011
- element.hasCustomContent = true;
4012
- }
4013
- } catch (error) {
4014
- console.warn(`[SlashMenu] Error rendering custom item ${itemId}:`, error);
4015
- element.innerHTML = `<span>${item.label || "Custom Item"}</span>`;
4016
- element.hasCustomContent = true;
4017
- }
4018
- };
4019
- const cleanupCustomItems = () => {
4020
- customItemRefs.forEach((refData) => {
4021
- if (refData.element) {
4022
- refData.element.hasCustomContent = false;
4023
- }
4024
- });
4025
- customItemRefs.clear();
4026
- };
4027
3788
  const handleGlobalKeyDown = (event) => {
4028
3789
  if (event.key === "Escape") {
4029
3790
  event.preventDefault();
@@ -4074,23 +3835,22 @@ const _sfc_main$4 = {
4074
3835
  return;
4075
3836
  }
4076
3837
  event.preventDefault();
4077
- const context = await getEditorContext(props.editor, event);
4078
- currentContext.value = context;
4079
- sections.value = getItems({ ...context, trigger: "click" });
4080
- selectedId.value = flattenedItems.value[0]?.id || null;
4081
- searchQuery.value = "";
4082
3838
  props.editor.view.dispatch(
4083
3839
  props.editor.view.state.tr.setMeta(SlashMenuPluginKey, {
4084
3840
  type: "open",
4085
- pos: context?.pos ?? props.editor.view.state.selection.from,
3841
+ pos: props.editor.view.state.selection.from,
4086
3842
  clientX: event.clientX,
4087
3843
  clientY: event.clientY
4088
3844
  })
4089
3845
  );
3846
+ searchQuery.value = "";
3847
+ const context = await getEditorContext(props.editor, event);
3848
+ sections.value = getItems({ ...context, trigger: "click" });
3849
+ selectedId.value = flattenedItems.value[0]?.id || null;
4090
3850
  };
4091
3851
  const executeCommand = async (item) => {
4092
3852
  if (props.editor) {
4093
- item.action ? await item.action(props.editor, currentContext.value) : null;
3853
+ item.action ? await item.action(props.editor) : null;
4094
3854
  if (item.component) {
4095
3855
  menuRef.value;
4096
3856
  const componentProps = getPropsByItemId(item.id, props);
@@ -4108,7 +3868,7 @@ const _sfc_main$4 = {
4108
3868
  const closeMenu = (options = { restoreCursor: true }) => {
4109
3869
  if (props.editor?.view) {
4110
3870
  const pluginState = SlashMenuPluginKey.getState(props.editor.view.state);
4111
- const anchorPos = pluginState?.anchorPos;
3871
+ const { anchorPos } = pluginState;
4112
3872
  props.editor.view.dispatch(
4113
3873
  props.editor.view.state.tr.setMeta(SlashMenuPluginKey, {
4114
3874
  type: "close"
@@ -4121,8 +3881,6 @@ const _sfc_main$4 = {
4121
3881
  props.editor.view.dispatch(tr);
4122
3882
  props.editor.view.focus();
4123
3883
  }
4124
- cleanupCustomItems();
4125
- currentContext.value = null;
4126
3884
  isOpen.value = false;
4127
3885
  searchQuery.value = "";
4128
3886
  sections.value = [];
@@ -4139,29 +3897,19 @@ const _sfc_main$4 = {
4139
3897
  isOpen.value = true;
4140
3898
  menuPosition.value = event.menuPosition;
4141
3899
  searchQuery.value = "";
4142
- if (!currentContext.value) {
4143
- const context = await getEditorContext(props.editor);
4144
- currentContext.value = context;
4145
- sections.value = getItems({ ...context, trigger: "slash" });
4146
- selectedId.value = flattenedItems.value[0]?.id || null;
4147
- } else if (sections.value.length === 0) {
4148
- const trigger = currentContext.value.event?.type === "contextmenu" ? "click" : "slash";
4149
- sections.value = getItems({ ...currentContext.value, trigger });
4150
- selectedId.value = flattenedItems.value[0]?.id || null;
4151
- }
3900
+ const context = await getEditorContext(props.editor);
3901
+ sections.value = getItems({ ...context, trigger: "slash" });
3902
+ selectedId.value = flattenedItems.value[0]?.id || null;
4152
3903
  });
4153
3904
  props.editor.view.dom.addEventListener("contextmenu", handleRightClick);
4154
3905
  props.editor.on("slashMenu:close", () => {
4155
- cleanupCustomItems();
4156
3906
  isOpen.value = false;
4157
3907
  searchQuery.value = "";
4158
- currentContext.value = null;
4159
3908
  });
4160
3909
  });
4161
3910
  onBeforeUnmount(() => {
4162
3911
  document.removeEventListener("keydown", handleGlobalKeyDown);
4163
3912
  document.removeEventListener("mousedown", handleGlobalOutsideClick);
4164
- cleanupCustomItems();
4165
3913
  if (props.editor) {
4166
3914
  try {
4167
3915
  props.editor.off("slashMenu:open");
@@ -4208,19 +3956,12 @@ const _sfc_main$4 = {
4208
3956
  class: normalizeClass(["slash-menu-item", { "is-selected": item.id === selectedId.value }]),
4209
3957
  onClick: ($event) => executeCommand(item)
4210
3958
  }, [
4211
- item.render ? (openBlock(), createElementBlock("div", {
3959
+ item.icon ? (openBlock(), createElementBlock("span", {
4212
3960
  key: 0,
4213
- ref_for: true,
4214
- ref: (el) => setCustomItemRef(el, item),
4215
- class: "slash-menu-custom-item"
4216
- }, null, 512)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
4217
- item.icon ? (openBlock(), createElementBlock("span", {
4218
- key: 0,
4219
- class: "slash-menu-item-icon",
4220
- innerHTML: item.icon
4221
- }, null, 8, _hoisted_4)) : createCommentVNode("", true),
4222
- createElementVNode("span", null, toDisplayString(item.label), 1)
4223
- ], 64))
3961
+ class: "slash-menu-item-icon",
3962
+ innerHTML: item.icon
3963
+ }, null, 8, _hoisted_4)) : createCommentVNode("", true),
3964
+ createElementVNode("span", null, toDisplayString(item.label), 1)
4224
3965
  ], 10, _hoisted_3$1);
4225
3966
  }), 128))
4226
3967
  ], 64);
@@ -4915,76 +4656,34 @@ const _sfc_main = {
4915
4656
  }
4916
4657
  };
4917
4658
  const SuperInput = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4d5cff52"]]);
4918
- const additionalHandlers = Object.freeze({
4919
- "mc:AlternateContent": translator$10,
4920
- "w:b": translator$$,
4921
- "w:bidiVisual": translator$_,
4922
- "w:bookmarkEnd": translator$Z,
4923
- "w:bookmarkStart": translator$Y,
4924
- "w:bottom": translator$X,
4925
- "w:br": translator$W,
4926
- "w:cantSplit": translator$V,
4927
- "w:cnfStyle": translator$U,
4928
- "w:color": translator$T,
4929
- "w:divId": translator$S,
4930
- "w:drawing": translator$R,
4931
- "w:end": translator$Q,
4932
- "w:gridAfter": translator$P,
4933
- "w:gridBefore": translator$O,
4934
- "w:gridCol": translator$N,
4935
- "w:hidden": translator$M,
4936
- "w:highlight": translator$L,
4937
- "w:hyperlink": translator$K,
4938
- "w:i": translator$J,
4939
- "w:insideH": translator$I,
4940
- "w:insideV": translator$H,
4941
- "w:jc": translator$G,
4942
- "w:left": translator$F,
4943
- "w:p": translator$E,
4944
- "w:r": translator$D,
4945
- "w:rFonts": translator$C,
4946
- "w:rPr": translator$B,
4947
- "w:rStyle": translator$A,
4948
- "w:right": translator$z,
4949
- "w:sdt": translator$y,
4950
- "w:shd": translator$x,
4951
- "w:start": translator$w,
4952
- "w:strike": translator$v,
4953
- "w:sz": translator$u,
4954
- "w:szCs": translator$t,
4955
- "w:tab": translator$s,
4956
- "w:tbl": translator$r,
4957
- "w:tblBorders": translator$q,
4958
- "w:tblCaption": translator$p,
4959
- "w:tblCellMar": translator$o,
4960
- "w:tblCellSpacing": translator$n,
4961
- "w:tblDescription": translator$m,
4962
- "w:tblGrid": translator$l,
4963
- "w:tblHeader": translator$k,
4964
- "w:tblInd": translator$j,
4965
- "w:tblLayout": translator$i,
4966
- "w:tblLook": translator$h,
4967
- "w:tblOverlap": translator$g,
4968
- "w:tblPr": translator$f,
4969
- "w:tblStyle": translator$e,
4970
- "w:tblStyleColBandSize": translator$d,
4971
- "w:tblStyleRowBandSize": translator$c,
4972
- "w:tblW": translator$b,
4973
- "w:tblpPr": translator$a,
4974
- "w:tc": translator$9,
4975
- "w:top": translator$8,
4976
- "w:tr": translator$7,
4977
- "w:trHeight": translator$6,
4978
- "w:trPr": translator$5,
4979
- "w:u": translator$4,
4980
- "w:wAfter": translator$3,
4981
- "w:wBefore": translator$2,
4982
- "wp:anchor": translator$1,
4983
- "wp:inline": translator
4984
- });
4985
4659
  const baseHandlers = {
4986
4660
  ...runPropertyTranslators,
4987
- ...additionalHandlers
4661
+ "w:br": translator$p,
4662
+ "w:cantSplit": translator$o,
4663
+ "w:cnfStyle": translator$n,
4664
+ "w:divId": translator$m,
4665
+ "w:gridAfter": translator$l,
4666
+ "w:gridBefore": translator$k,
4667
+ "w:hidden": translator$j,
4668
+ "w:hyperlink": translator$i,
4669
+ "w:jc": translator$h,
4670
+ "w:p": translator$g,
4671
+ "w:r": translator$f,
4672
+ "w:rPr": translator$e,
4673
+ "w:sdt": translator$d,
4674
+ "w:tab": translator$c,
4675
+ "w:tblCellSpacing": translator$b,
4676
+ "w:tblHeader": translator$a,
4677
+ "w:tc": translator$9,
4678
+ "w:tr": translator$8,
4679
+ "w:trHeight": translator$7,
4680
+ "w:trPr": translator$6,
4681
+ "w:wAfter": translator$5,
4682
+ "w:wBefore": translator$4,
4683
+ "wp:anchor": translator$3,
4684
+ "wp:inline": translator$2,
4685
+ "w:bookmarkStart": translator$1,
4686
+ "w:bookmarkEnd": translator
4988
4687
  };
4989
4688
  const registeredHandlers = Object.freeze(baseHandlers);
4990
4689
  const Extensions = {
@@ -4997,7 +4696,7 @@ const Extensions = {
4997
4696
  export {
4998
4697
  AIWriter,
4999
4698
  n as AnnotatorHelpers,
5000
- bF as BasicUpload,
4699
+ b2 as BasicUpload,
5001
4700
  C as CommentsPluginKey,
5002
4701
  D as DocxZipper,
5003
4702
  Editor,