@harbour-enterprises/superdoc 0.23.0-next.10 → 0.23.0-next.11

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 (27) hide show
  1. package/dist/chunks/{PdfViewer-BsnSIYxD.cjs → PdfViewer-CxsRHFKK.cjs} +1 -1
  2. package/dist/chunks/{PdfViewer-CPZ7QD5u.es.js → PdfViewer-itEb8CY_.es.js} +1 -1
  3. package/dist/chunks/{index-Cd9h9gMj.es.js → index-CTFsQkQh.es.js} +46 -9
  4. package/dist/chunks/{index-DOd9uvCv.cjs → index-DO0hDjEd.cjs} +46 -9
  5. package/dist/chunks/{super-editor.es-DAS3_Nt9.cjs → super-editor.es-Ck_zDasU.cjs} +79 -32
  6. package/dist/chunks/{super-editor.es-l3dTZlZX.es.js → super-editor.es-D2K5zQwY.es.js} +79 -32
  7. package/dist/core/types/index.d.ts.map +1 -1
  8. package/dist/stores/comments-store.d.ts +3 -3
  9. package/dist/stores/comments-store.d.ts.map +1 -1
  10. package/dist/style.css +27 -27
  11. package/dist/super-editor/ai-writer.es.js +1 -1
  12. package/dist/super-editor/chunks/{editor-B2aHhS9B.js → editor-C3VH8Ia2.js} +79 -32
  13. package/dist/super-editor/chunks/{toolbar-Cgyf_4bW.js → toolbar-BG1F_1RK.js} +1 -1
  14. package/dist/super-editor/editor.es.js +1 -1
  15. package/dist/super-editor/src/extensions/comment/comments-plugin.d.ts +60 -0
  16. package/dist/super-editor/src/extensions/comment/helpers/index.d.ts +2 -0
  17. package/dist/super-editor/src/extensions/comment/helpers/normalize-comment-event-payload.d.ts +1 -0
  18. package/dist/super-editor/src/extensions/comment/helpers/update-position.d.ts +7 -0
  19. package/dist/super-editor/super-editor.es.js +3 -3
  20. package/dist/super-editor/toolbar.es.js +2 -2
  21. package/dist/super-editor.cjs +1 -1
  22. package/dist/super-editor.es.js +1 -1
  23. package/dist/superdoc.cjs +2 -2
  24. package/dist/superdoc.es.js +2 -2
  25. package/dist/superdoc.umd.js +123 -39
  26. package/dist/superdoc.umd.js.map +1 -1
  27. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const vue = require("./vue-DKMj1I9B.cjs");
4
- const superdoc = require("./index-DOd9uvCv.cjs");
4
+ const superdoc = require("./index-DO0hDjEd.cjs");
5
5
  function self(vars) {
6
6
  const {
7
7
  opacityDisabled,
@@ -1,5 +1,5 @@
1
1
  import { m as defineComponent, B as h, O as Transition, $ as process$1, I as watchEffect, d as computed, r as ref, j as onMounted, W as onUnmounted, c as createElementBlock, o as openBlock, a as createBaseVNode, f as createCommentVNode, v as createVNode, x as unref } from "./vue-ZWZLQtoU.es.js";
2
- import { d as derived, c, a as cB, f as fadeInTransition, b as cM, N as NBaseLoading, w as warnOnce, u as useConfig, e as useTheme, p as pxfy, g as createKey, h as useThemeClass, i as useCompitable, _ as _export_sfc, j as useSuperdocStore, s as storeToRefs, k as useSelection } from "./index-Cd9h9gMj.es.js";
2
+ import { d as derived, c, a as cB, f as fadeInTransition, b as cM, N as NBaseLoading, w as warnOnce, u as useConfig, e as useTheme, p as pxfy, g as createKey, h as useThemeClass, i as useCompitable, _ as _export_sfc, j as useSuperdocStore, s as storeToRefs, k as useSelection } from "./index-CTFsQkQh.es.js";
3
3
  function self(vars) {
4
4
  const {
5
5
  opacityDisabled,
@@ -1,4 +1,4 @@
1
- import { q as index$1, C as CommentsPluginKey, h as TrackChangesBasePluginKey, E as Editor, n as getRichTextExtensions, f as SuperInput, e as SuperEditor, A as AIWriter, g as SuperToolbar, i as createZip } from "./super-editor.es-l3dTZlZX.es.js";
1
+ import { q as index$1, C as CommentsPluginKey, h as TrackChangesBasePluginKey, E as Editor, n as getRichTextExtensions, f as SuperInput, e as SuperEditor, A as AIWriter, g as SuperToolbar, i as createZip } from "./super-editor.es-D2K5zQwY.es.js";
2
2
  import { a0 as effectScope, r as ref, _ as markRaw, $ as process$1, a1 as toRaw, d as computed, a2 as isRef, a3 as isReactive, C as toRef, i as inject, p as getCurrentInstance, l as watch, x as unref, a4 as hasInjectionContext, M as reactive, s as nextTick, a5 as getCurrentScope, a6 as onScopeDispose, a7 as toRefs, g as global$1, J as shallowRef, N as readonly, j as onMounted, k as onBeforeUnmount, h as onBeforeMount, S as onActivated, q as onDeactivated, z as createTextVNode, F as Fragment, Q as Comment, m as defineComponent, D as provide, H as withDirectives, B as h, U as Teleport, R as renderSlot, V as isVNode, I as watchEffect, O as Transition, a8 as TransitionGroup, E as mergeProps, P as vShow, G as cloneVNode, T as Text, c as createElementBlock, o as openBlock, t as toDisplayString, v as createVNode, y as withCtx, a as createBaseVNode, A as normalizeStyle, f as createCommentVNode, u as createBlock, w as withModifiers, n as normalizeClass, a9 as resolveDirective, e as renderList, b as createApp, X as resolveDynamicComponent, aa as defineAsyncComponent } from "./vue-ZWZLQtoU.es.js";
3
3
  import { B as Buffer$2 } from "./jszip-DAXEPCUv.es.js";
4
4
  import { B as BlankDOCX } from "./blank-docx-iwdyG9RH.es.js";
@@ -4312,7 +4312,11 @@ const useCommentsStore = /* @__PURE__ */ defineStore("comments", () => {
4312
4312
  pendingComment.value = getPendingComment({ selection, documentId: selection.documentId, parentCommentId: null });
4313
4313
  if (!superdoc2.config.isInternal) pendingComment.value.isInternal = false;
4314
4314
  if (superdoc2.activeEditor?.commands) {
4315
- superdoc2.activeEditor.commands.insertComment({ ...pendingComment.value.getValues(), commentId: "pending" });
4315
+ superdoc2.activeEditor.commands.insertComment({
4316
+ ...pendingComment.value.getValues(),
4317
+ commentId: "pending",
4318
+ skipEmit: true
4319
+ });
4316
4320
  }
4317
4321
  if (pendingComment.value.selection.source === "super-editor" && superdocStore.selectionPosition) {
4318
4322
  superdocStore.selectionPosition.source = "super-editor";
@@ -4384,7 +4388,7 @@ const useCommentsStore = /* @__PURE__ */ defineStore("comments", () => {
4384
4388
  superdocStore.selectionPosition = null;
4385
4389
  superdoc2.activeEditor?.commands.removeComment({ commentId: "pending" });
4386
4390
  };
4387
- const addComment = ({ superdoc: superdoc2, comment }) => {
4391
+ const addComment = ({ superdoc: superdoc2, comment, skipEditorUpdate = false }) => {
4388
4392
  let parentComment = commentsList.value.find((c2) => c2.commentId === activeComment.value);
4389
4393
  if (!parentComment) parentComment = comment;
4390
4394
  const newComment = useComment(comment.getValues());
@@ -4398,8 +4402,8 @@ const useCommentsStore = /* @__PURE__ */ defineStore("comments", () => {
4398
4402
  if (!superdoc2.config.isInternal) newComment.isInternal = false;
4399
4403
  commentsList.value.push(newComment);
4400
4404
  removePendingComment(superdoc2);
4401
- if (!comment.trackedChange && superdoc2.activeEditor?.commands && !comment.parentCommentId) {
4402
- superdoc2.activeEditor.commands.insertComment(newComment.getValues());
4405
+ if (!skipEditorUpdate && !comment.trackedChange && superdoc2.activeEditor?.commands && !comment.parentCommentId) {
4406
+ superdoc2.activeEditor.commands.insertComment({ ...newComment.getValues(), skipEmit: true });
4403
4407
  }
4404
4408
  const event = { type: COMMENT_EVENTS.ADD, comment: newComment.getValues() };
4405
4409
  syncCommentsToClients(superdoc2, event);
@@ -17400,7 +17404,7 @@ const _sfc_main = {
17400
17404
  __name: "SuperDoc",
17401
17405
  emits: ["selection-update"],
17402
17406
  setup(__props, { emit: __emit }) {
17403
- const PdfViewer = defineAsyncComponent(() => import("./PdfViewer-CPZ7QD5u.es.js"));
17407
+ const PdfViewer = defineAsyncComponent(() => import("./PdfViewer-itEb8CY_.es.js"));
17404
17408
  const superdocStore = useSuperdocStore();
17405
17409
  const commentsStore = useCommentsStore();
17406
17410
  const {
@@ -17429,7 +17433,14 @@ const _sfc_main = {
17429
17433
  hasInitializedLocations,
17430
17434
  isCommentHighlighted
17431
17435
  } = storeToRefs(commentsStore);
17432
- const { showAddComment, handleEditorLocationsUpdate, handleTrackedChangeUpdate } = commentsStore;
17436
+ const {
17437
+ showAddComment,
17438
+ handleEditorLocationsUpdate,
17439
+ handleTrackedChangeUpdate,
17440
+ addComment,
17441
+ getComment,
17442
+ COMMENT_EVENTS
17443
+ } = commentsStore;
17433
17444
  const { proxy } = getCurrentInstance();
17434
17445
  commentsStore.proxy = proxy;
17435
17446
  const { isHighContrastMode: isHighContrastMode2 } = useHighContrastMode();
@@ -17621,7 +17632,33 @@ const _sfc_main = {
17621
17632
  handleEditorLocationsUpdate(allCommentPositions, activeThreadId);
17622
17633
  };
17623
17634
  const onEditorCommentsUpdate = (params2 = {}) => {
17624
- const { activeCommentId, type } = params2;
17635
+ let { activeCommentId, type, comment: commentPayload } = params2;
17636
+ if (COMMENT_EVENTS?.ADD && type === COMMENT_EVENTS.ADD && commentPayload) {
17637
+ if (!commentPayload.commentText && commentPayload.text) {
17638
+ commentPayload.commentText = commentPayload.text;
17639
+ }
17640
+ const currentUser = proxy.$superdoc?.user;
17641
+ if (currentUser) {
17642
+ if (!commentPayload.creatorName) commentPayload.creatorName = currentUser.name;
17643
+ if (!commentPayload.creatorEmail) commentPayload.creatorEmail = currentUser.email;
17644
+ }
17645
+ if (!commentPayload.createdTime) commentPayload.createdTime = Date.now();
17646
+ const primaryDocumentId = commentPayload.documentId || documents.value?.[0]?.id;
17647
+ if (!commentPayload.documentId && primaryDocumentId) {
17648
+ commentPayload.documentId = primaryDocumentId;
17649
+ }
17650
+ if (!commentPayload.fileId && primaryDocumentId) {
17651
+ commentPayload.fileId = primaryDocumentId;
17652
+ }
17653
+ const id = commentPayload.commentId || commentPayload.importedId;
17654
+ if (id && !getComment(id)) {
17655
+ const commentModel = useComment(commentPayload);
17656
+ addComment({ superdoc: proxy.$superdoc, comment: commentModel, skipEditorUpdate: true });
17657
+ }
17658
+ if (!activeCommentId && id) {
17659
+ activeCommentId = id;
17660
+ }
17661
+ }
17625
17662
  if (type === "trackedChange") {
17626
17663
  handleTrackedChangeUpdate({ superdoc: proxy.$superdoc, params: params2 });
17627
17664
  }
@@ -17954,7 +17991,7 @@ const _sfc_main = {
17954
17991
  };
17955
17992
  }
17956
17993
  };
17957
- const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-45f44b6e"]]);
17994
+ const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-96983cf9"]]);
17958
17995
  const createSuperdocVueApp = () => {
17959
17996
  const app = createApp(App);
17960
17997
  const pinia = createPinia();
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const superEditor_es = require("./super-editor.es-DAS3_Nt9.cjs");
2
+ const superEditor_es = require("./super-editor.es-Ck_zDasU.cjs");
3
3
  const vue = require("./vue-DKMj1I9B.cjs");
4
4
  const jszip = require("./jszip-B4LDL19y.cjs");
5
5
  const blankDocx = require("./blank-docx-CPqX9RF5.cjs");
@@ -4329,7 +4329,11 @@ const useCommentsStore = /* @__PURE__ */ defineStore("comments", () => {
4329
4329
  pendingComment.value = getPendingComment({ selection, documentId: selection.documentId, parentCommentId: null });
4330
4330
  if (!superdoc2.config.isInternal) pendingComment.value.isInternal = false;
4331
4331
  if (superdoc2.activeEditor?.commands) {
4332
- superdoc2.activeEditor.commands.insertComment({ ...pendingComment.value.getValues(), commentId: "pending" });
4332
+ superdoc2.activeEditor.commands.insertComment({
4333
+ ...pendingComment.value.getValues(),
4334
+ commentId: "pending",
4335
+ skipEmit: true
4336
+ });
4333
4337
  }
4334
4338
  if (pendingComment.value.selection.source === "super-editor" && superdocStore.selectionPosition) {
4335
4339
  superdocStore.selectionPosition.source = "super-editor";
@@ -4401,7 +4405,7 @@ const useCommentsStore = /* @__PURE__ */ defineStore("comments", () => {
4401
4405
  superdocStore.selectionPosition = null;
4402
4406
  superdoc2.activeEditor?.commands.removeComment({ commentId: "pending" });
4403
4407
  };
4404
- const addComment = ({ superdoc: superdoc2, comment }) => {
4408
+ const addComment = ({ superdoc: superdoc2, comment, skipEditorUpdate = false }) => {
4405
4409
  let parentComment = commentsList.value.find((c2) => c2.commentId === activeComment.value);
4406
4410
  if (!parentComment) parentComment = comment;
4407
4411
  const newComment = useComment(comment.getValues());
@@ -4415,8 +4419,8 @@ const useCommentsStore = /* @__PURE__ */ defineStore("comments", () => {
4415
4419
  if (!superdoc2.config.isInternal) newComment.isInternal = false;
4416
4420
  commentsList.value.push(newComment);
4417
4421
  removePendingComment(superdoc2);
4418
- if (!comment.trackedChange && superdoc2.activeEditor?.commands && !comment.parentCommentId) {
4419
- superdoc2.activeEditor.commands.insertComment(newComment.getValues());
4422
+ if (!skipEditorUpdate && !comment.trackedChange && superdoc2.activeEditor?.commands && !comment.parentCommentId) {
4423
+ superdoc2.activeEditor.commands.insertComment({ ...newComment.getValues(), skipEmit: true });
4420
4424
  }
4421
4425
  const event = { type: COMMENT_EVENTS.ADD, comment: newComment.getValues() };
4422
4426
  syncCommentsToClients(superdoc2, event);
@@ -17417,7 +17421,7 @@ const _sfc_main = {
17417
17421
  __name: "SuperDoc",
17418
17422
  emits: ["selection-update"],
17419
17423
  setup(__props, { emit: __emit }) {
17420
- const PdfViewer = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./PdfViewer-BsnSIYxD.cjs")));
17424
+ const PdfViewer = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./PdfViewer-CxsRHFKK.cjs")));
17421
17425
  const superdocStore = useSuperdocStore();
17422
17426
  const commentsStore = useCommentsStore();
17423
17427
  const {
@@ -17446,7 +17450,14 @@ const _sfc_main = {
17446
17450
  hasInitializedLocations,
17447
17451
  isCommentHighlighted
17448
17452
  } = storeToRefs(commentsStore);
17449
- const { showAddComment, handleEditorLocationsUpdate, handleTrackedChangeUpdate } = commentsStore;
17453
+ const {
17454
+ showAddComment,
17455
+ handleEditorLocationsUpdate,
17456
+ handleTrackedChangeUpdate,
17457
+ addComment,
17458
+ getComment,
17459
+ COMMENT_EVENTS
17460
+ } = commentsStore;
17450
17461
  const { proxy } = vue.getCurrentInstance();
17451
17462
  commentsStore.proxy = proxy;
17452
17463
  const { isHighContrastMode: isHighContrastMode2 } = useHighContrastMode();
@@ -17638,7 +17649,33 @@ const _sfc_main = {
17638
17649
  handleEditorLocationsUpdate(allCommentPositions, activeThreadId);
17639
17650
  };
17640
17651
  const onEditorCommentsUpdate = (params2 = {}) => {
17641
- const { activeCommentId, type } = params2;
17652
+ let { activeCommentId, type, comment: commentPayload } = params2;
17653
+ if (COMMENT_EVENTS?.ADD && type === COMMENT_EVENTS.ADD && commentPayload) {
17654
+ if (!commentPayload.commentText && commentPayload.text) {
17655
+ commentPayload.commentText = commentPayload.text;
17656
+ }
17657
+ const currentUser = proxy.$superdoc?.user;
17658
+ if (currentUser) {
17659
+ if (!commentPayload.creatorName) commentPayload.creatorName = currentUser.name;
17660
+ if (!commentPayload.creatorEmail) commentPayload.creatorEmail = currentUser.email;
17661
+ }
17662
+ if (!commentPayload.createdTime) commentPayload.createdTime = Date.now();
17663
+ const primaryDocumentId = commentPayload.documentId || documents.value?.[0]?.id;
17664
+ if (!commentPayload.documentId && primaryDocumentId) {
17665
+ commentPayload.documentId = primaryDocumentId;
17666
+ }
17667
+ if (!commentPayload.fileId && primaryDocumentId) {
17668
+ commentPayload.fileId = primaryDocumentId;
17669
+ }
17670
+ const id = commentPayload.commentId || commentPayload.importedId;
17671
+ if (id && !getComment(id)) {
17672
+ const commentModel = useComment(commentPayload);
17673
+ addComment({ superdoc: proxy.$superdoc, comment: commentModel, skipEditorUpdate: true });
17674
+ }
17675
+ if (!activeCommentId && id) {
17676
+ activeCommentId = id;
17677
+ }
17678
+ }
17642
17679
  if (type === "trackedChange") {
17643
17680
  handleTrackedChangeUpdate({ superdoc: proxy.$superdoc, params: params2 });
17644
17681
  }
@@ -17971,7 +18008,7 @@ const _sfc_main = {
17971
18008
  };
17972
18009
  }
17973
18010
  };
17974
- const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-45f44b6e"]]);
18011
+ const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-96983cf9"]]);
17975
18012
  const createSuperdocVueApp = () => {
17976
18013
  const app = vue.createApp(App);
17977
18014
  const pinia = createPinia();
@@ -48744,26 +48744,100 @@ const onHeaderFooterDataUpdate = async ({ editor, transaction }, mainEditor, sec
48744
48744
  const setEditorToolbar = ({ editor }, mainEditor) => {
48745
48745
  editor.setToolbar(mainEditor.toolbar);
48746
48746
  };
48747
+ const normalizeCommentEventPayload = ({ conversation, editorOptions, fallbackCommentId, fallbackInternal }) => {
48748
+ const { user, documentId } = editorOptions || {};
48749
+ const normalized = {
48750
+ ...conversation,
48751
+ commentId: conversation?.commentId ?? fallbackCommentId,
48752
+ isInternal: conversation?.isInternal ?? fallbackInternal
48753
+ };
48754
+ if (!normalized.commentText && normalized.text) {
48755
+ normalized.commentText = normalized.text;
48756
+ delete normalized.text;
48757
+ }
48758
+ if ("skipEmit" in normalized) delete normalized.skipEmit;
48759
+ if (!normalized.creatorName && user?.name) {
48760
+ normalized.creatorName = user.name;
48761
+ }
48762
+ if (!normalized.creatorEmail && user?.email) {
48763
+ normalized.creatorEmail = user.email;
48764
+ }
48765
+ if (!normalized.createdTime) {
48766
+ normalized.createdTime = Date.now();
48767
+ }
48768
+ if (!normalized.fileId && documentId) {
48769
+ normalized.fileId = documentId;
48770
+ }
48771
+ if (!normalized.documentId && documentId) {
48772
+ normalized.documentId = documentId;
48773
+ }
48774
+ return normalized;
48775
+ };
48776
+ const updatePosition = ({ allCommentPositions, threadId, pos, currentBounds, node }) => {
48777
+ let bounds = {};
48778
+ if (currentBounds instanceof DOMRect) {
48779
+ bounds = {
48780
+ top: currentBounds.top,
48781
+ bottom: currentBounds.bottom,
48782
+ left: currentBounds.left,
48783
+ right: currentBounds.right
48784
+ };
48785
+ } else {
48786
+ bounds = { ...currentBounds };
48787
+ }
48788
+ if (!allCommentPositions[threadId]) {
48789
+ allCommentPositions[threadId] = {
48790
+ threadId,
48791
+ start: pos,
48792
+ end: pos + node.nodeSize,
48793
+ bounds
48794
+ };
48795
+ } else {
48796
+ const existing = allCommentPositions[threadId];
48797
+ existing.start = Math.min(existing.start, pos);
48798
+ existing.end = Math.max(existing.end, pos + node.nodeSize);
48799
+ existing.bounds.top = Math.min(existing.bounds.top, currentBounds.top);
48800
+ existing.bounds.bottom = Math.max(existing.bounds.bottom, currentBounds.bottom);
48801
+ }
48802
+ };
48747
48803
  const TRACK_CHANGE_MARKS = [TrackInsertMarkName, TrackDeleteMarkName, TrackFormatMarkName];
48748
48804
  const CommentsPluginKey = new PluginKey("comments");
48749
48805
  const CommentsPlugin = Extension.create({
48750
48806
  name: "comments",
48751
48807
  addCommands() {
48752
48808
  return {
48753
- insertComment: (conversation) => ({ tr, dispatch }) => {
48809
+ insertComment: (conversation = {}) => ({ tr, dispatch }) => {
48754
48810
  const { selection } = tr;
48755
48811
  const { $from, $to } = selection;
48756
- const { commentId, isInternal } = conversation;
48812
+ const skipEmit = conversation?.skipEmit;
48813
+ const resolvedCommentId = conversation?.commentId ?? v4();
48814
+ const resolvedInternal = conversation?.isInternal ?? false;
48757
48815
  tr.setMeta(CommentsPluginKey, { event: "add" });
48758
48816
  tr.addMark(
48759
48817
  $from.pos,
48760
48818
  $to.pos,
48761
48819
  this.editor.schema.marks[CommentMarkName].create({
48762
- commentId,
48763
- internal: isInternal
48820
+ commentId: resolvedCommentId,
48821
+ internal: resolvedInternal
48764
48822
  })
48765
48823
  );
48766
- dispatch(tr);
48824
+ if (dispatch) dispatch(tr);
48825
+ const shouldEmit = !skipEmit && resolvedCommentId !== "pending";
48826
+ if (shouldEmit) {
48827
+ const commentPayload = normalizeCommentEventPayload({
48828
+ conversation,
48829
+ editorOptions: this.editor.options,
48830
+ fallbackCommentId: resolvedCommentId,
48831
+ fallbackInternal: resolvedInternal
48832
+ });
48833
+ const activeCommentId = commentPayload.commentId || commentPayload.importedId || null;
48834
+ const event = {
48835
+ type: comments_module_events.ADD,
48836
+ comment: commentPayload,
48837
+ ...activeCommentId && { activeCommentId }
48838
+ };
48839
+ this.editor.emit("commentsUpdate", event);
48840
+ }
48767
48841
  return true;
48768
48842
  },
48769
48843
  removeComment: ({ commentId, importedId }) => ({ tr, dispatch, state: state2 }) => {
@@ -48999,33 +49073,6 @@ const CommentsPlugin = Extension.create({
48999
49073
  return [commentsPlugin];
49000
49074
  }
49001
49075
  });
49002
- const updatePosition = ({ allCommentPositions, threadId, pos, currentBounds, node }) => {
49003
- let bounds = {};
49004
- if (currentBounds instanceof DOMRect) {
49005
- bounds = {
49006
- top: currentBounds.top,
49007
- bottom: currentBounds.bottom,
49008
- left: currentBounds.left,
49009
- right: currentBounds.right
49010
- };
49011
- } else {
49012
- bounds = { ...currentBounds };
49013
- }
49014
- if (!allCommentPositions[threadId]) {
49015
- allCommentPositions[threadId] = {
49016
- threadId,
49017
- start: pos,
49018
- end: pos + node.nodeSize,
49019
- bounds
49020
- };
49021
- } else {
49022
- const existing = allCommentPositions[threadId];
49023
- existing.start = Math.min(existing.start, pos);
49024
- existing.end = Math.max(existing.end, pos + node.nodeSize);
49025
- existing.bounds.top = Math.min(existing.bounds.top, currentBounds.top);
49026
- existing.bounds.bottom = Math.max(existing.bounds.bottom, currentBounds.bottom);
49027
- }
49028
- };
49029
49076
  const getActiveCommentId = (doc2, selection) => {
49030
49077
  if (!selection) return;
49031
49078
  const { $from, $to } = selection;
@@ -48727,26 +48727,100 @@ const onHeaderFooterDataUpdate = async ({ editor, transaction }, mainEditor, sec
48727
48727
  const setEditorToolbar = ({ editor }, mainEditor) => {
48728
48728
  editor.setToolbar(mainEditor.toolbar);
48729
48729
  };
48730
+ const normalizeCommentEventPayload = ({ conversation, editorOptions, fallbackCommentId, fallbackInternal }) => {
48731
+ const { user, documentId } = editorOptions || {};
48732
+ const normalized = {
48733
+ ...conversation,
48734
+ commentId: conversation?.commentId ?? fallbackCommentId,
48735
+ isInternal: conversation?.isInternal ?? fallbackInternal
48736
+ };
48737
+ if (!normalized.commentText && normalized.text) {
48738
+ normalized.commentText = normalized.text;
48739
+ delete normalized.text;
48740
+ }
48741
+ if ("skipEmit" in normalized) delete normalized.skipEmit;
48742
+ if (!normalized.creatorName && user?.name) {
48743
+ normalized.creatorName = user.name;
48744
+ }
48745
+ if (!normalized.creatorEmail && user?.email) {
48746
+ normalized.creatorEmail = user.email;
48747
+ }
48748
+ if (!normalized.createdTime) {
48749
+ normalized.createdTime = Date.now();
48750
+ }
48751
+ if (!normalized.fileId && documentId) {
48752
+ normalized.fileId = documentId;
48753
+ }
48754
+ if (!normalized.documentId && documentId) {
48755
+ normalized.documentId = documentId;
48756
+ }
48757
+ return normalized;
48758
+ };
48759
+ const updatePosition = ({ allCommentPositions, threadId, pos, currentBounds, node }) => {
48760
+ let bounds = {};
48761
+ if (currentBounds instanceof DOMRect) {
48762
+ bounds = {
48763
+ top: currentBounds.top,
48764
+ bottom: currentBounds.bottom,
48765
+ left: currentBounds.left,
48766
+ right: currentBounds.right
48767
+ };
48768
+ } else {
48769
+ bounds = { ...currentBounds };
48770
+ }
48771
+ if (!allCommentPositions[threadId]) {
48772
+ allCommentPositions[threadId] = {
48773
+ threadId,
48774
+ start: pos,
48775
+ end: pos + node.nodeSize,
48776
+ bounds
48777
+ };
48778
+ } else {
48779
+ const existing = allCommentPositions[threadId];
48780
+ existing.start = Math.min(existing.start, pos);
48781
+ existing.end = Math.max(existing.end, pos + node.nodeSize);
48782
+ existing.bounds.top = Math.min(existing.bounds.top, currentBounds.top);
48783
+ existing.bounds.bottom = Math.max(existing.bounds.bottom, currentBounds.bottom);
48784
+ }
48785
+ };
48730
48786
  const TRACK_CHANGE_MARKS = [TrackInsertMarkName, TrackDeleteMarkName, TrackFormatMarkName];
48731
48787
  const CommentsPluginKey = new PluginKey("comments");
48732
48788
  const CommentsPlugin = Extension.create({
48733
48789
  name: "comments",
48734
48790
  addCommands() {
48735
48791
  return {
48736
- insertComment: (conversation) => ({ tr, dispatch }) => {
48792
+ insertComment: (conversation = {}) => ({ tr, dispatch }) => {
48737
48793
  const { selection } = tr;
48738
48794
  const { $from, $to } = selection;
48739
- const { commentId, isInternal } = conversation;
48795
+ const skipEmit = conversation?.skipEmit;
48796
+ const resolvedCommentId = conversation?.commentId ?? v4();
48797
+ const resolvedInternal = conversation?.isInternal ?? false;
48740
48798
  tr.setMeta(CommentsPluginKey, { event: "add" });
48741
48799
  tr.addMark(
48742
48800
  $from.pos,
48743
48801
  $to.pos,
48744
48802
  this.editor.schema.marks[CommentMarkName].create({
48745
- commentId,
48746
- internal: isInternal
48803
+ commentId: resolvedCommentId,
48804
+ internal: resolvedInternal
48747
48805
  })
48748
48806
  );
48749
- dispatch(tr);
48807
+ if (dispatch) dispatch(tr);
48808
+ const shouldEmit = !skipEmit && resolvedCommentId !== "pending";
48809
+ if (shouldEmit) {
48810
+ const commentPayload = normalizeCommentEventPayload({
48811
+ conversation,
48812
+ editorOptions: this.editor.options,
48813
+ fallbackCommentId: resolvedCommentId,
48814
+ fallbackInternal: resolvedInternal
48815
+ });
48816
+ const activeCommentId = commentPayload.commentId || commentPayload.importedId || null;
48817
+ const event = {
48818
+ type: comments_module_events.ADD,
48819
+ comment: commentPayload,
48820
+ ...activeCommentId && { activeCommentId }
48821
+ };
48822
+ this.editor.emit("commentsUpdate", event);
48823
+ }
48750
48824
  return true;
48751
48825
  },
48752
48826
  removeComment: ({ commentId, importedId }) => ({ tr, dispatch, state: state2 }) => {
@@ -48982,33 +49056,6 @@ const CommentsPlugin = Extension.create({
48982
49056
  return [commentsPlugin];
48983
49057
  }
48984
49058
  });
48985
- const updatePosition = ({ allCommentPositions, threadId, pos, currentBounds, node }) => {
48986
- let bounds = {};
48987
- if (currentBounds instanceof DOMRect) {
48988
- bounds = {
48989
- top: currentBounds.top,
48990
- bottom: currentBounds.bottom,
48991
- left: currentBounds.left,
48992
- right: currentBounds.right
48993
- };
48994
- } else {
48995
- bounds = { ...currentBounds };
48996
- }
48997
- if (!allCommentPositions[threadId]) {
48998
- allCommentPositions[threadId] = {
48999
- threadId,
49000
- start: pos,
49001
- end: pos + node.nodeSize,
49002
- bounds
49003
- };
49004
- } else {
49005
- const existing = allCommentPositions[threadId];
49006
- existing.start = Math.min(existing.start, pos);
49007
- existing.end = Math.max(existing.end, pos + node.nodeSize);
49008
- existing.bounds.top = Math.min(existing.bounds.top, currentBounds.top);
49009
- existing.bounds.bottom = Math.max(existing.bounds.bottom, currentBounds.bottom);
49010
- }
49011
- };
49012
49059
  const getActiveCommentId = (doc2, selection) => {
49013
49060
  if (!selection) return;
49014
49061
  const { $from, $to } = selection;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.js"],"names":[],"mappings":"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"}
@@ -61,7 +61,7 @@ export const useCommentsStore: import("pinia").StoreDefinition<"comments", Pick<
61
61
  parentCommentId: string;
62
62
  }) => any;
63
63
  showAddComment: (superdoc: any) => void;
64
- addComment: ({ superdoc, comment }: {
64
+ addComment: ({ superdoc, comment, skipEditorUpdate }: {
65
65
  superdoc: any;
66
66
  }) => void;
67
67
  cancelComment: (superdoc: any) => void;
@@ -143,7 +143,7 @@ export const useCommentsStore: import("pinia").StoreDefinition<"comments", Pick<
143
143
  parentCommentId: string;
144
144
  }) => any;
145
145
  showAddComment: (superdoc: any) => void;
146
- addComment: ({ superdoc, comment }: {
146
+ addComment: ({ superdoc, comment, skipEditorUpdate }: {
147
147
  superdoc: any;
148
148
  }) => void;
149
149
  cancelComment: (superdoc: any) => void;
@@ -225,7 +225,7 @@ export const useCommentsStore: import("pinia").StoreDefinition<"comments", Pick<
225
225
  parentCommentId: string;
226
226
  }) => any;
227
227
  showAddComment: (superdoc: any) => void;
228
- addComment: ({ superdoc, comment }: {
228
+ addComment: ({ superdoc, comment, skipEditorUpdate }: {
229
229
  superdoc: any;
230
230
  }) => void;
231
231
  cancelComment: (superdoc: any) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"comments-store.d.ts","sourceRoot":"","sources":["../../src/stores/comments-store.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA4Ce,IAAI;qBAiBN,MAAM;0CAWN,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFAwLd;QAAuB,SAAS;QACT,UAAU;QACV,eAAe;KACtC;;wCAoDA;QAAuB,QAAQ;KAC/B,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DAuHJ,IAAI;sDAvad;QAAuB,QAAQ;QACR,MAAM;KAC7B,KAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAvDJ,IAAI;qBAiBN,MAAM;0CAWN,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFAwLd;QAAuB,SAAS;QACT,UAAU;QACV,eAAe;KACtC;;wCAoDA;QAAuB,QAAQ;KAC/B,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DAuHJ,IAAI;sDAvad;QAAuB,QAAQ;QACR,MAAM;KAC7B,KAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAvDJ,IAAI;qBAiBN,MAAM;0CAWN,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFAwLd;QAAuB,SAAS;QACT,UAAU;QACV,eAAe;KACtC;;wCAoDA;QAAuB,QAAQ;KAC/B,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DAuHJ,IAAI;sDAvad;QAAuB,QAAQ;QACR,MAAM;KAC7B,KAAU,IAAI;wUA+iBhB"}
1
+ {"version":3,"file":"comments-store.d.ts","sourceRoot":"","sources":["../../src/stores/comments-store.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA4Ce,IAAI;qBAiBN,MAAM;0CAWN,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFA4Ld;QAAuB,SAAS;QACT,UAAU;QACV,eAAe;KACtC;;0DAoDA;QAAuB,QAAQ;KAC/B,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DAuHJ,IAAI;sDA3ad;QAAuB,QAAQ;QACR,MAAM;KAC7B,KAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAvDJ,IAAI;qBAiBN,MAAM;0CAWN,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFA4Ld;QAAuB,SAAS;QACT,UAAU;QACV,eAAe;KACtC;;0DAoDA;QAAuB,QAAQ;KAC/B,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DAuHJ,IAAI;sDA3ad;QAAuB,QAAQ;QACR,MAAM;KAC7B,KAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAvDJ,IAAI;qBAiBN,MAAM;0CAWN,MAAM,GAAG,SAAS,GAAG,IAAI,KACvB,IAAI;;;;;;gFA4Ld;QAAuB,SAAS;QACT,UAAU;QACV,eAAe;KACtC;;0DAoDA;QAAuB,QAAQ;KAC/B,KAAU,IAAI;sCAyEJ,IAAI;;;;;6CAzFJ,IAAI;4EAsGd;QAAsB,QAAQ;QACP,UAAU;KACjC,KAAU,IAAI;;+DAuHJ,IAAI;sDA3ad;QAAuB,QAAQ;QACR,MAAM;KAC7B,KAAU,IAAI;wUAmjBhB"}