@harbour-enterprises/superdoc 0.8.11 → 0.8.12

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 (26) hide show
  1. package/dist/chunks/{super-editor.es-DIeHC3Si.js → super-editor.es-D8IC7SPE.js} +239 -211
  2. package/dist/chunks/{super-editor.es-DIeHC3Si.js.map → super-editor.es-D8IC7SPE.js.map} +1 -1
  3. package/dist/super-editor/chunks/{converter-CVSaF15S.js → converter-vMwuPcFT.js} +3 -3
  4. package/dist/super-editor/chunks/{converter-CVSaF15S.js.map → converter-vMwuPcFT.js.map} +1 -1
  5. package/dist/super-editor/chunks/{docx-zipper-BHwY_rz6.js → docx-zipper-CNguQWs9.js} +2 -2
  6. package/dist/super-editor/chunks/{docx-zipper-BHwY_rz6.js.map → docx-zipper-CNguQWs9.js.map} +1 -1
  7. package/dist/super-editor/chunks/{editor-H6Apbtdi.js → editor-aREw3zbp.js} +239 -211
  8. package/dist/super-editor/chunks/editor-aREw3zbp.js.map +1 -0
  9. package/dist/super-editor/chunks/{toolbar-D9ELD8Tt.js → toolbar-BQJNZhd8.js} +3 -3
  10. package/dist/super-editor/chunks/{toolbar-D9ELD8Tt.js.map → toolbar-BQJNZhd8.js.map} +1 -1
  11. package/dist/super-editor/converter.es.js +1 -1
  12. package/dist/super-editor/docx-zipper.es.js +2 -2
  13. package/dist/super-editor/editor.es.js +3 -3
  14. package/dist/super-editor/extensions/comment/comments-plugin.d.ts.map +1 -1
  15. package/dist/super-editor/extensions/track-changes/trackChangesHelpers/addMarkStep.d.ts.map +1 -1
  16. package/dist/super-editor/extensions/track-changes/trackChangesHelpers/removeMarkStep.d.ts.map +1 -1
  17. package/dist/super-editor/extensions/track-changes/trackChangesHelpers/replaceStep.d.ts.map +1 -1
  18. package/dist/super-editor/file-zipper.es.js +1 -1
  19. package/dist/super-editor/super-editor.es.js +6 -6
  20. package/dist/super-editor/toolbar.es.js +2 -2
  21. package/dist/super-editor.es.js +1 -1
  22. package/dist/superdoc.es.js +3 -3
  23. package/dist/superdoc.umd.js +239 -211
  24. package/dist/superdoc.umd.js.map +1 -1
  25. package/package.json +1 -1
  26. package/dist/super-editor/chunks/editor-H6Apbtdi.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { E } from "./chunks/converter-CVSaF15S.js";
1
+ import { E } from "./chunks/converter-vMwuPcFT.js";
2
2
  export {
3
3
  E as SuperConverter
4
4
  };
@@ -1,5 +1,5 @@
1
- import "./chunks/converter-CVSaF15S.js";
2
- import { D } from "./chunks/docx-zipper-BHwY_rz6.js";
1
+ import "./chunks/converter-vMwuPcFT.js";
2
+ import { D } from "./chunks/docx-zipper-CNguQWs9.js";
3
3
  export {
4
4
  D as default
5
5
  };
@@ -1,6 +1,6 @@
1
- import { E } from "./chunks/editor-H6Apbtdi.js";
2
- import "./chunks/converter-CVSaF15S.js";
3
- import "./chunks/docx-zipper-BHwY_rz6.js";
1
+ import { E } from "./chunks/editor-aREw3zbp.js";
2
+ import "./chunks/converter-vMwuPcFT.js";
3
+ import "./chunks/docx-zipper-CNguQWs9.js";
4
4
  export {
5
5
  E as Editor
6
6
  };
@@ -1 +1 @@
1
- {"version":3,"file":"comments-plugin.d.ts","sourceRoot":"","sources":["../../../src/extensions/comment/comments-plugin.js"],"names":[],"mappings":"AAoBA,+CAA0D;AAE1D,iCAqRG;0BA3S+B,mBAAmB"}
1
+ {"version":3,"file":"comments-plugin.d.ts","sourceRoot":"","sources":["../../../src/extensions/comment/comments-plugin.js"],"names":[],"mappings":"AAoBA,+CAA0D;AAE1D,iCA0RG;0BAhT+B,mBAAmB"}
@@ -1 +1 @@
1
- {"version":3,"file":"addMarkStep.d.ts","sourceRoot":"","sources":["../../../../src/extensions/track-changes/trackChangesHelpers/addMarkStep.js"],"names":[],"mappings":"AAmBO,8EATI,WAAW,QA8FrB;4BAxGwC,mBAAmB"}
1
+ {"version":3,"file":"addMarkStep.d.ts","sourceRoot":"","sources":["../../../../src/extensions/track-changes/trackChangesHelpers/addMarkStep.js"],"names":[],"mappings":"AAoBO,8EATI,WAAW,QA+FrB;4BA1GwC,mBAAmB"}
@@ -1 +1 @@
1
- {"version":3,"file":"removeMarkStep.d.ts","sourceRoot":"","sources":["../../../../src/extensions/track-changes/trackChangesHelpers/removeMarkStep.js"],"names":[],"mappings":"AAkBO,iFATI,WAAW,QAkFrB;4BA3FwC,mBAAmB"}
1
+ {"version":3,"file":"removeMarkStep.d.ts","sourceRoot":"","sources":["../../../../src/extensions/track-changes/trackChangesHelpers/removeMarkStep.js"],"names":[],"mappings":"AAmBO,iFATI,WAAW,QAmFrB;4BA7FwC,mBAAmB"}
@@ -1 +1 @@
1
- {"version":3,"file":"replaceStep.d.ts","sourceRoot":"","sources":["../../../../src/extensions/track-changes/trackChangesHelpers/replaceStep.js"],"names":[],"mappings":"AAsBO,+GAXI,WAAW,QA+ErB;4BAzFwC,mBAAmB"}
1
+ {"version":3,"file":"replaceStep.d.ts","sourceRoot":"","sources":["../../../../src/extensions/track-changes/trackChangesHelpers/replaceStep.js"],"names":[],"mappings":"AAuBO,+GAXI,WAAW,QAgFrB;4BA3FwC,mBAAmB"}
@@ -1,4 +1,4 @@
1
- import { J as JSZip } from "./chunks/docx-zipper-BHwY_rz6.js";
1
+ import { J as JSZip } from "./chunks/docx-zipper-CNguQWs9.js";
2
2
  async function createZip(blobs, fileNames) {
3
3
  const zip = new JSZip();
4
4
  blobs.forEach((blob, index) => {
@@ -9,13 +9,13 @@ 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 _interceptedCommands, _SuperToolbar_instances, makeToolbarItems_fn, initDefaultFonts_fn, updateHighlightColors_fn, deactivateAll_fn, updateToolbarHistory_fn, runCommandWithArgumentOnly_fn;
12
- import { _ as _export_sfc, a as getQuickFormatList, b as generateLinkedStyleString, I as ImagePlaceholderPluginKey, f as findPlaceholder, c as findParentNode, d as getActiveFormatting, i as isInTable, u as undoDepth, r as redoDepth, E as Editor, e as getStarterExtensions, P as Placeholder, h as getRichTextExtensions, j as Extension, A as Attribute, N as Node } from "./chunks/editor-H6Apbtdi.js";
13
- import { C, T, l, n, k, m } from "./chunks/editor-H6Apbtdi.js";
14
- import { Q as getDefaultExportFromCjs, v as v4, T as TextSelection, V as vClickOutside, a as Plugin } from "./chunks/converter-CVSaF15S.js";
15
- import { E } from "./chunks/converter-CVSaF15S.js";
12
+ import { _ as _export_sfc, a as getQuickFormatList, b as generateLinkedStyleString, I as ImagePlaceholderPluginKey, f as findPlaceholder, c as findParentNode, d as getActiveFormatting, i as isInTable, u as undoDepth, r as redoDepth, E as Editor, e as getStarterExtensions, P as Placeholder, h as getRichTextExtensions, j as Extension, A as Attribute, N as Node } from "./chunks/editor-aREw3zbp.js";
13
+ import { C, T, l, n, k, m } from "./chunks/editor-aREw3zbp.js";
14
+ import { Q as getDefaultExportFromCjs, v as v4, T as TextSelection, V as vClickOutside, a as Plugin } from "./chunks/converter-vMwuPcFT.js";
15
+ import { E } from "./chunks/converter-vMwuPcFT.js";
16
16
  import { ref, createElementBlock, openBlock, createElementVNode, unref, getCurrentInstance, computed, watch, onMounted, createCommentVNode, withDirectives, withKeys, normalizeClass, withModifiers, vModelText, createTextVNode, toDisplayString, Fragment, renderList, normalizeStyle, createVNode, h, createApp, reactive, onUnmounted, shallowRef, onBeforeUnmount, createBlock } from "vue";
17
- import { t as toolbarIcons, s as sanitizeNumber, T as Toolbar, N as NSkeleton } from "./chunks/toolbar-D9ELD8Tt.js";
18
- import { D } from "./chunks/docx-zipper-BHwY_rz6.js";
17
+ import { t as toolbarIcons, s as sanitizeNumber, T as Toolbar, N as NSkeleton } from "./chunks/toolbar-BQJNZhd8.js";
18
+ import { D } from "./chunks/docx-zipper-CNguQWs9.js";
19
19
  import { createZip } from "./file-zipper.es.js";
20
20
  var eventemitter3 = { exports: {} };
21
21
  (function(module) {
@@ -1,6 +1,6 @@
1
1
  import "vue";
2
- import { T } from "./chunks/toolbar-D9ELD8Tt.js";
3
- import "./chunks/editor-H6Apbtdi.js";
2
+ import { T } from "./chunks/toolbar-BQJNZhd8.js";
3
+ import "./chunks/editor-aREw3zbp.js";
4
4
  export {
5
5
  T as default
6
6
  };
@@ -1,4 +1,4 @@
1
- import { _, C, D, E, a, S, b, c, d, T, e, f, i, g, h, j, k, l, m, n } from "./chunks/super-editor.es-DIeHC3Si.js";
1
+ import { _, C, D, E, a, S, b, c, d, T, e, f, i, g, h, j, k, l, m, n } from "./chunks/super-editor.es-D8IC7SPE.js";
2
2
  import "./chunks/vue-BjMDYCe1.js";
3
3
  export {
4
4
  _ as BasicUpload,
@@ -1,5 +1,5 @@
1
- import { n as index$1, C as CommentsPluginKey, e as TrackChangesBasePluginKey, E as Editor, k as getRichTextExtensions, c as SuperInput, b as SuperEditor, d as SuperToolbar, f as createZip } from "./chunks/super-editor.es-DIeHC3Si.js";
2
- import { S, i, m } from "./chunks/super-editor.es-DIeHC3Si.js";
1
+ import { n as index$1, C as CommentsPluginKey, e as TrackChangesBasePluginKey, E as Editor, k as getRichTextExtensions, c as SuperInput, b as SuperEditor, d as SuperToolbar, f as createZip } from "./chunks/super-editor.es-D8IC7SPE.js";
2
+ import { S, i, m } from "./chunks/super-editor.es-D8IC7SPE.js";
3
3
  import { Y as effectScope, r as ref, Z as markRaw, p as process$1, _ as toRaw, a as computed, $ as isRef, a0 as isReactive, C as toRef, i as inject, q as getCurrentInstance, l as watch, x as unref, a1 as hasInjectionContext, L as reactive, R as nextTick, a2 as getCurrentScope, a3 as onScopeDispose, a4 as toRefs, g as global$1, N as shallowRef, M as readonly, j as onMounted, k as onBeforeUnmount, h as onBeforeMount, U as onActivated, s as onDeactivated, z as createTextVNode, F as Fragment, Q as Comment, m as defineComponent, D as provide, G as withDirectives, B as h, V as Teleport, S as renderSlot, W as isVNode, K as watchEffect, O as Transition, E as mergeProps, P as vShow, J as cloneVNode, T as Text, b as createElementBlock, o as openBlock, t as toDisplayString, v as createVNode, y as withCtx, f as createBaseVNode, A as normalizeStyle, e as createCommentVNode, u as createBlock, w as withModifiers, n as normalizeClass, a5 as resolveDirective, d as renderList, c as createApp, a6 as resolveDynamicComponent } from "./chunks/vue-BjMDYCe1.js";
4
4
  import { B as Buffer$2 } from "./chunks/jszip-Df6uKve1.js";
5
5
  import { B as BlankDOCX } from "./chunks/blank-docx-iwdyG9RH.js";
@@ -45872,7 +45872,7 @@ class SuperDoc extends EventEmitter {
45872
45872
  this.config.colors = shuffleArray(this.config.colors);
45873
45873
  this.userColorMap = /* @__PURE__ */ new Map();
45874
45874
  this.colorIndex = 0;
45875
- this.version = "0.8.11";
45875
+ this.version = "0.8.12";
45876
45876
  console.debug("🦋 [superdoc] Using SuperDoc version:", this.version);
45877
45877
  this.superdocId = config.superdocId || v4();
45878
45878
  this.colors = this.config.colors;
@@ -28001,7 +28001,7 @@
28001
28001
  return;
28002
28002
  }
28003
28003
  }
28004
- static updateDocumentVersion(docx = this.convertedXml, version2 = "0.8.11") {
28004
+ static updateDocumentVersion(docx = this.convertedXml, version2 = "0.8.12") {
28005
28005
  const customLocation = "docProps/custom.xml";
28006
28006
  if (!docx[customLocation]) {
28007
28007
  docx[customLocation] = generateCustomXml();
@@ -28274,7 +28274,7 @@
28274
28274
  function generateCustomXml() {
28275
28275
  return DEFAULT_CUSTOM_XML;
28276
28276
  }
28277
- function generateSuperdocVersion(pid = 2, version2 = "0.8.11") {
28277
+ function generateSuperdocVersion(pid = 2, version2 = "0.8.12") {
28278
28278
  return {
28279
28279
  type: "element",
28280
28280
  name: "property",
@@ -41323,199 +41323,6 @@
41323
41323
  });
41324
41324
  return DecorationSet.create(state2.doc, decorations);
41325
41325
  };
41326
- const replaceStep = ({ state: state2, tr, step, newTr, map: map2, doc: doc2, user, date, originalStep, originalStepIndex }) => {
41327
- const deletionMarkSchema = state2.schema.marks[TrackDeleteMarkName];
41328
- const deletionMark = findMark(state2, deletionMarkSchema, false);
41329
- const positionTo = deletionMark ? deletionMark.to : step.to;
41330
- const newStep = new ReplaceStep(
41331
- positionTo,
41332
- // We insert all the same steps, but with "from"/"to" both set to "to" in order not to delete content. Mapped as needed.
41333
- positionTo,
41334
- step.slice,
41335
- step.structure
41336
- );
41337
- const invertStep = originalStep.invert(tr.docs[originalStepIndex]).map(map2);
41338
- map2.appendMap(invertStep.getMap());
41339
- const meta = {};
41340
- if (newStep) {
41341
- const trTemp = state2.apply(newTr).tr;
41342
- if (trTemp.maybeStep(newStep).failed) {
41343
- return;
41344
- }
41345
- const mappedNewStepTo = newStep.getMap().map(newStep.to);
41346
- const insertedMark = markInsertion({
41347
- tr: trTemp,
41348
- from: newStep.from,
41349
- to: mappedNewStepTo,
41350
- user,
41351
- date
41352
- });
41353
- const condensedStep = new ReplaceStep(newStep.from, newStep.to, trTemp.doc.slice(newStep.from, mappedNewStepTo));
41354
- newTr.step(condensedStep);
41355
- const mirrorIndex = map2.maps.length - 1;
41356
- map2.appendMap(condensedStep.getMap(), mirrorIndex);
41357
- if (newStep.from !== mappedNewStepTo) {
41358
- meta.insertedMark = insertedMark;
41359
- meta.step = condensedStep;
41360
- }
41361
- if (!newTr.selection.eq(trTemp.selection)) {
41362
- newTr.setSelection(trTemp.selection);
41363
- }
41364
- }
41365
- if (step.from !== step.to) {
41366
- const { deletionMark: deletionMark2, deletionMap, nodes: deletionNodes } = markDeletion({
41367
- tr: newTr,
41368
- from: step.from,
41369
- to: step.to,
41370
- user,
41371
- date
41372
- });
41373
- meta.deletionNodes = deletionNodes;
41374
- meta.deletionMark = deletionMark2;
41375
- map2.appendMapping(deletionMap);
41376
- }
41377
- newTr.setMeta(TrackChangesBasePluginKey, meta);
41378
- };
41379
- const markWrapping = () => {
41380
- };
41381
- const replaceAroundStep = () => {
41382
- };
41383
- const addMarkStep = ({ state: state2, tr, step, newTr, map: map2, doc: doc2, user, date }) => {
41384
- const meta = {};
41385
- doc2.nodesBetween(step.from, step.to, (node2, pos) => {
41386
- if (!node2.isInline) {
41387
- return;
41388
- }
41389
- if (node2.marks.find((mark) => mark.type.name === TrackDeleteMarkName)) {
41390
- return false;
41391
- }
41392
- const existingChangeMark = node2.marks.find((mark) => [TrackDeleteMarkName, TrackFormatMarkName].includes(mark.type.name));
41393
- const wid = existingChangeMark ? existingChangeMark.attrs.id : v4$1();
41394
- newTr.addMark(Math.max(step.from, pos), Math.min(step.to, pos + node2.nodeSize), step.mark);
41395
- const allowedMarks = ["bold", "italic", "strike", "underline", "textStyle"];
41396
- if (allowedMarks.includes(step.mark.type.name) && !node2.marks.find((mark) => mark.type === step.mark.type)) {
41397
- const formatChangeMark = node2.marks.find((mark) => mark.type.name === TrackFormatMarkName);
41398
- let after = [];
41399
- let before = [];
41400
- if (formatChangeMark) {
41401
- let foundBefore = formatChangeMark.attrs.before.find((mark) => {
41402
- if (mark.type === "textStyle") {
41403
- return mark.type === step.mark.type.name && objectIncludes(mark.attrs, step.mark.attrs);
41404
- }
41405
- return mark.type === step.mark.type.name;
41406
- });
41407
- if (foundBefore) {
41408
- before = [...formatChangeMark.attrs.before.filter((mark) => mark.type !== step.mark.type.name)];
41409
- after = [...formatChangeMark.attrs.after];
41410
- } else {
41411
- before = [...formatChangeMark.attrs.before];
41412
- after = [
41413
- ...formatChangeMark.attrs.after,
41414
- {
41415
- type: step.mark.type.name,
41416
- attrs: { ...step.mark.attrs }
41417
- }
41418
- ];
41419
- }
41420
- } else {
41421
- before = node2.marks.map((mark) => ({
41422
- type: mark.type.name,
41423
- attrs: { ...mark.attrs }
41424
- }));
41425
- after = [
41426
- {
41427
- type: step.mark.type.name,
41428
- attrs: { ...step.mark.attrs }
41429
- }
41430
- ];
41431
- }
41432
- if (after.length || before.length) {
41433
- const newFormatMark = state2.schema.marks[TrackFormatMarkName].create({
41434
- id: wid,
41435
- author: user.name,
41436
- authorEmail: user.email,
41437
- date,
41438
- before,
41439
- after
41440
- });
41441
- newTr.addMark(
41442
- step.from,
41443
- // Math.max(step.from, pos)
41444
- step.to,
41445
- // Math.min(step.to, pos + node.nodeSize),
41446
- newFormatMark
41447
- );
41448
- meta.formatMark = newFormatMark;
41449
- meta.step = step;
41450
- newTr.setMeta(TrackChangesBasePluginKey, meta);
41451
- } else if (formatChangeMark) {
41452
- newTr.removeMark(Math.max(step.from, pos), Math.min(step.to, pos + node2.nodeSize), formatChangeMark);
41453
- }
41454
- }
41455
- });
41456
- };
41457
- const removeMarkStep = ({ state: state2, tr, step, newTr, map: map2, doc: doc2, user, date }) => {
41458
- const meta = {};
41459
- doc2.nodesBetween(step.from, step.to, (node2, pos) => {
41460
- if (!node2.isInline) {
41461
- return true;
41462
- }
41463
- if (node2.marks.find((mark) => mark.type.name === TrackDeleteMarkName)) {
41464
- return false;
41465
- }
41466
- newTr.removeMark(Math.max(step.from, pos), Math.min(step.to, pos + node2.nodeSize), step.mark);
41467
- const allowedMarks = ["bold", "italic", "strike", "underline", "textStyle"];
41468
- if (allowedMarks.includes(step.mark.type.name) && node2.marks.find((mark) => mark.type === step.mark.type)) {
41469
- const formatChangeMark = node2.marks.find((mark) => mark.type.name === TrackFormatMarkName);
41470
- let after = [];
41471
- let before = [];
41472
- if (formatChangeMark) {
41473
- let foundAfter = formatChangeMark.attrs.after.find((mark) => mark.type === step.mark.type.name);
41474
- if (foundAfter) {
41475
- after = [...formatChangeMark.attrs.after.filter((mark) => mark.type !== step.mark.type.name)];
41476
- before = [...formatChangeMark.attrs.before];
41477
- } else {
41478
- after = [...formatChangeMark.attrs.after];
41479
- before = [
41480
- ...formatChangeMark.attrs.before,
41481
- {
41482
- type: step.mark.type.name,
41483
- attrs: { ...step.mark.attrs }
41484
- }
41485
- ];
41486
- }
41487
- } else {
41488
- after = [];
41489
- before = [
41490
- {
41491
- type: step.mark.type.name,
41492
- attrs: { ...step.mark.attrs }
41493
- }
41494
- ];
41495
- }
41496
- if (after.length || before.length) {
41497
- const newFormatMark = state2.schema.marks[TrackFormatMarkName].create({
41498
- id: v4$1(),
41499
- author: user.name,
41500
- authorEmail: user.email,
41501
- date,
41502
- before,
41503
- after
41504
- });
41505
- newTr.addMark(
41506
- Math.max(step.from, pos),
41507
- Math.min(step.to, pos + node2.nodeSize),
41508
- newFormatMark
41509
- );
41510
- meta.formatMark = newFormatMark;
41511
- meta.step = step;
41512
- newTr.setMeta(TrackChangesBasePluginKey, meta);
41513
- } else if (formatChangeMark) {
41514
- newTr.removeMark(Math.max(step.from, pos), Math.min(step.to, pos + node2.nodeSize), formatChangeMark);
41515
- }
41516
- }
41517
- });
41518
- };
41519
41326
  const CommentMarkName = "commentMark";
41520
41327
  const removeCommentsById = ({ commentId, state: state2, tr, dispatch }) => {
41521
41328
  const positions = getCommentPositionsById(commentId, state2.doc);
@@ -41922,7 +41729,7 @@
41922
41729
  update(view, prevState) {
41923
41730
  const { state: state2 } = view;
41924
41731
  const { doc: doc2, tr } = state2;
41925
- if (prevDoc && prevDoc.eq(doc2)) shouldUpdate = true;
41732
+ if (prevDoc && !prevDoc.eq(doc2)) shouldUpdate = true;
41926
41733
  if (!shouldUpdate) return;
41927
41734
  prevDoc = doc2;
41928
41735
  shouldUpdate = false;
@@ -41956,10 +41763,14 @@
41956
41763
  if (hasActive && activeThreadId !== threadId) return;
41957
41764
  decorations.push(deco);
41958
41765
  });
41959
- const trackedChangeNode = getTrackedChangeNode(node2);
41960
- if (trackedChangeNode) {
41766
+ const trackedChangeMark = findTrackedMark({
41767
+ doc: doc2,
41768
+ from: pos,
41769
+ to: pos + node2.nodeSize
41770
+ });
41771
+ if (trackedChangeMark) {
41961
41772
  const currentBounds = view.coordsAtPos(pos);
41962
- const { id } = trackedChangeNode.attrs;
41773
+ const { id } = trackedChangeMark.mark.attrs;
41963
41774
  updatePosition({
41964
41775
  allCommentPositions,
41965
41776
  threadId: id,
@@ -42027,9 +41838,13 @@
42027
41838
  if ($from.pos !== $to.pos) return;
42028
41839
  const nodeAtPos = doc2.nodeAt($from.pos);
42029
41840
  if (!nodeAtPos) return;
42030
- const trackedChangeNode = getTrackedChangeNode(nodeAtPos);
42031
- if (trackedChangeNode) {
42032
- return trackedChangeNode.attrs.id;
41841
+ const trackedChangeMark = findTrackedMark({
41842
+ doc: doc2,
41843
+ from: $from.pos,
41844
+ to: $to.pos
41845
+ });
41846
+ if (trackedChangeMark) {
41847
+ return trackedChangeMark.mark.attrs.id;
42033
41848
  }
42034
41849
  const overlaps = [];
42035
41850
  let found2 = false;
@@ -42066,13 +41881,30 @@
42066
41881
  const closestCommentMark = closestMarks.find((mark) => mark.type.name === CommentMarkName);
42067
41882
  return closestCommentMark?.attrs?.commentId || closestCommentMark?.attrs?.importedId;
42068
41883
  };
42069
- const getTrackedChangeNode = (node2) => {
42070
- if (!node2) return;
42071
- const nodeMarks = node2.marks;
42072
- const trackedInsertMark = nodeMarks?.find((mark) => mark.type.name === TrackInsertMarkName);
42073
- const trackedDeleteMark = nodeMarks?.find((mark) => mark.type.name === TrackDeleteMarkName);
42074
- const trackedFormatMark = nodeMarks?.find((mark) => mark.type.name === TrackFormatMarkName);
42075
- return trackedInsertMark || trackedDeleteMark || trackedFormatMark;
41884
+ const findTrackedMark = ({
41885
+ doc: doc2,
41886
+ from: from2,
41887
+ to,
41888
+ offset: offset2 = 1
41889
+ // To get non-inclusive marks.
41890
+ }) => {
41891
+ const startPos = Math.max(from2 - offset2, 0);
41892
+ const endPos = Math.min(to + offset2, doc2.content.size);
41893
+ let markFound;
41894
+ doc2.nodesBetween(startPos, endPos, (node2, pos) => {
41895
+ if (!node2 || node2?.nodeSize === void 0) {
41896
+ return;
41897
+ }
41898
+ const mark = node2.marks.find((mark2) => TRACK_CHANGE_MARKS.includes(mark2.type.name));
41899
+ if (mark && !markFound) {
41900
+ markFound = {
41901
+ from: pos,
41902
+ to: pos + node2.nodeSize,
41903
+ mark
41904
+ };
41905
+ }
41906
+ });
41907
+ return markFound;
42076
41908
  };
42077
41909
  const handleTrackedChangeTransaction = (trackedChangeMeta, trackedChanges, newEditorState, editor) => {
42078
41910
  const {
@@ -42212,6 +42044,202 @@
42212
42044
  });
42213
42045
  return found2;
42214
42046
  }
42047
+ const replaceStep = ({ state: state2, tr, step, newTr, map: map2, doc: doc2, user, date, originalStep, originalStepIndex }) => {
42048
+ const deletionMarkSchema = state2.schema.marks[TrackDeleteMarkName];
42049
+ const deletionMark = findMark(state2, deletionMarkSchema, false);
42050
+ const positionTo = deletionMark ? deletionMark.to : step.to;
42051
+ const newStep = new ReplaceStep(
42052
+ positionTo,
42053
+ // We insert all the same steps, but with "from"/"to" both set to "to" in order not to delete content. Mapped as needed.
42054
+ positionTo,
42055
+ step.slice,
42056
+ step.structure
42057
+ );
42058
+ const invertStep = originalStep.invert(tr.docs[originalStepIndex]).map(map2);
42059
+ map2.appendMap(invertStep.getMap());
42060
+ const meta = {};
42061
+ if (newStep) {
42062
+ const trTemp = state2.apply(newTr).tr;
42063
+ if (trTemp.maybeStep(newStep).failed) {
42064
+ return;
42065
+ }
42066
+ const mappedNewStepTo = newStep.getMap().map(newStep.to);
42067
+ const insertedMark = markInsertion({
42068
+ tr: trTemp,
42069
+ from: newStep.from,
42070
+ to: mappedNewStepTo,
42071
+ user,
42072
+ date
42073
+ });
42074
+ const condensedStep = new ReplaceStep(newStep.from, newStep.to, trTemp.doc.slice(newStep.from, mappedNewStepTo));
42075
+ newTr.step(condensedStep);
42076
+ const mirrorIndex = map2.maps.length - 1;
42077
+ map2.appendMap(condensedStep.getMap(), mirrorIndex);
42078
+ if (newStep.from !== mappedNewStepTo) {
42079
+ meta.insertedMark = insertedMark;
42080
+ meta.step = condensedStep;
42081
+ }
42082
+ if (!newTr.selection.eq(trTemp.selection)) {
42083
+ newTr.setSelection(trTemp.selection);
42084
+ }
42085
+ }
42086
+ if (step.from !== step.to) {
42087
+ const { deletionMark: deletionMark2, deletionMap, nodes: deletionNodes } = markDeletion({
42088
+ tr: newTr,
42089
+ from: step.from,
42090
+ to: step.to,
42091
+ user,
42092
+ date
42093
+ });
42094
+ meta.deletionNodes = deletionNodes;
42095
+ meta.deletionMark = deletionMark2;
42096
+ map2.appendMapping(deletionMap);
42097
+ }
42098
+ newTr.setMeta(TrackChangesBasePluginKey, meta);
42099
+ newTr.setMeta(CommentsPluginKey, { type: "force" });
42100
+ };
42101
+ const markWrapping = () => {
42102
+ };
42103
+ const replaceAroundStep = () => {
42104
+ };
42105
+ const addMarkStep = ({ state: state2, tr, step, newTr, map: map2, doc: doc2, user, date }) => {
42106
+ const meta = {};
42107
+ doc2.nodesBetween(step.from, step.to, (node2, pos) => {
42108
+ if (!node2.isInline) {
42109
+ return;
42110
+ }
42111
+ if (node2.marks.find((mark) => mark.type.name === TrackDeleteMarkName)) {
42112
+ return false;
42113
+ }
42114
+ const existingChangeMark = node2.marks.find((mark) => [TrackDeleteMarkName, TrackFormatMarkName].includes(mark.type.name));
42115
+ const wid = existingChangeMark ? existingChangeMark.attrs.id : v4$1();
42116
+ newTr.addMark(Math.max(step.from, pos), Math.min(step.to, pos + node2.nodeSize), step.mark);
42117
+ const allowedMarks = ["bold", "italic", "strike", "underline", "textStyle"];
42118
+ if (allowedMarks.includes(step.mark.type.name) && !node2.marks.find((mark) => mark.type === step.mark.type)) {
42119
+ const formatChangeMark = node2.marks.find((mark) => mark.type.name === TrackFormatMarkName);
42120
+ let after = [];
42121
+ let before = [];
42122
+ if (formatChangeMark) {
42123
+ let foundBefore = formatChangeMark.attrs.before.find((mark) => {
42124
+ if (mark.type === "textStyle") {
42125
+ return mark.type === step.mark.type.name && objectIncludes(mark.attrs, step.mark.attrs);
42126
+ }
42127
+ return mark.type === step.mark.type.name;
42128
+ });
42129
+ if (foundBefore) {
42130
+ before = [...formatChangeMark.attrs.before.filter((mark) => mark.type !== step.mark.type.name)];
42131
+ after = [...formatChangeMark.attrs.after];
42132
+ } else {
42133
+ before = [...formatChangeMark.attrs.before];
42134
+ after = [
42135
+ ...formatChangeMark.attrs.after,
42136
+ {
42137
+ type: step.mark.type.name,
42138
+ attrs: { ...step.mark.attrs }
42139
+ }
42140
+ ];
42141
+ }
42142
+ } else {
42143
+ before = node2.marks.map((mark) => ({
42144
+ type: mark.type.name,
42145
+ attrs: { ...mark.attrs }
42146
+ }));
42147
+ after = [
42148
+ {
42149
+ type: step.mark.type.name,
42150
+ attrs: { ...step.mark.attrs }
42151
+ }
42152
+ ];
42153
+ }
42154
+ if (after.length || before.length) {
42155
+ const newFormatMark = state2.schema.marks[TrackFormatMarkName].create({
42156
+ id: wid,
42157
+ author: user.name,
42158
+ authorEmail: user.email,
42159
+ date,
42160
+ before,
42161
+ after
42162
+ });
42163
+ newTr.addMark(
42164
+ step.from,
42165
+ // Math.max(step.from, pos)
42166
+ step.to,
42167
+ // Math.min(step.to, pos + node.nodeSize),
42168
+ newFormatMark
42169
+ );
42170
+ meta.formatMark = newFormatMark;
42171
+ meta.step = step;
42172
+ newTr.setMeta(TrackChangesBasePluginKey, meta);
42173
+ newTr.setMeta(CommentsPluginKey, { type: "force" });
42174
+ } else if (formatChangeMark) {
42175
+ newTr.removeMark(Math.max(step.from, pos), Math.min(step.to, pos + node2.nodeSize), formatChangeMark);
42176
+ }
42177
+ }
42178
+ });
42179
+ };
42180
+ const removeMarkStep = ({ state: state2, tr, step, newTr, map: map2, doc: doc2, user, date }) => {
42181
+ const meta = {};
42182
+ doc2.nodesBetween(step.from, step.to, (node2, pos) => {
42183
+ if (!node2.isInline) {
42184
+ return true;
42185
+ }
42186
+ if (node2.marks.find((mark) => mark.type.name === TrackDeleteMarkName)) {
42187
+ return false;
42188
+ }
42189
+ newTr.removeMark(Math.max(step.from, pos), Math.min(step.to, pos + node2.nodeSize), step.mark);
42190
+ const allowedMarks = ["bold", "italic", "strike", "underline", "textStyle"];
42191
+ if (allowedMarks.includes(step.mark.type.name) && node2.marks.find((mark) => mark.type === step.mark.type)) {
42192
+ const formatChangeMark = node2.marks.find((mark) => mark.type.name === TrackFormatMarkName);
42193
+ let after = [];
42194
+ let before = [];
42195
+ if (formatChangeMark) {
42196
+ let foundAfter = formatChangeMark.attrs.after.find((mark) => mark.type === step.mark.type.name);
42197
+ if (foundAfter) {
42198
+ after = [...formatChangeMark.attrs.after.filter((mark) => mark.type !== step.mark.type.name)];
42199
+ before = [...formatChangeMark.attrs.before];
42200
+ } else {
42201
+ after = [...formatChangeMark.attrs.after];
42202
+ before = [
42203
+ ...formatChangeMark.attrs.before,
42204
+ {
42205
+ type: step.mark.type.name,
42206
+ attrs: { ...step.mark.attrs }
42207
+ }
42208
+ ];
42209
+ }
42210
+ } else {
42211
+ after = [];
42212
+ before = [
42213
+ {
42214
+ type: step.mark.type.name,
42215
+ attrs: { ...step.mark.attrs }
42216
+ }
42217
+ ];
42218
+ }
42219
+ if (after.length || before.length) {
42220
+ const newFormatMark = state2.schema.marks[TrackFormatMarkName].create({
42221
+ id: v4$1(),
42222
+ author: user.name,
42223
+ authorEmail: user.email,
42224
+ date,
42225
+ before,
42226
+ after
42227
+ });
42228
+ newTr.addMark(
42229
+ Math.max(step.from, pos),
42230
+ Math.min(step.to, pos + node2.nodeSize),
42231
+ newFormatMark
42232
+ );
42233
+ meta.formatMark = newFormatMark;
42234
+ meta.step = step;
42235
+ newTr.setMeta(TrackChangesBasePluginKey, meta);
42236
+ newTr.setMeta(CommentsPluginKey, { type: "force" });
42237
+ } else if (formatChangeMark) {
42238
+ newTr.removeMark(Math.max(step.from, pos), Math.min(step.to, pos + node2.nodeSize), formatChangeMark);
42239
+ }
42240
+ }
42241
+ });
42242
+ };
42215
42243
  const trackedTransaction = ({ tr, state: state2, user }) => {
42216
42244
  const onlyInputTypeMeta = ["inputType", "uiEvent", "paste", "pointer"];
42217
42245
  const notAllowedMeta = ["historyUndo", "historyRedo", "acceptReject"];
@@ -42809,7 +42837,7 @@
42809
42837
  * @returns {Y.Doc | undefined} Updated Y.Doc if any, otherwise undefined
42810
42838
  */
42811
42839
  processCollaborationMigrations() {
42812
- console.debug("[checkVersionMigrations] Current editor version", "0.8.11");
42840
+ console.debug("[checkVersionMigrations] Current editor version", "0.8.12");
42813
42841
  if (!this.options.ydoc) return;
42814
42842
  const metaMap = this.options.ydoc.getMap("meta");
42815
42843
  let docVersion = metaMap.get("version");
@@ -111278,7 +111306,7 @@ ${style2}
111278
111306
  this.config.colors = shuffleArray(this.config.colors);
111279
111307
  this.userColorMap = /* @__PURE__ */ new Map();
111280
111308
  this.colorIndex = 0;
111281
- this.version = "0.8.11";
111309
+ this.version = "0.8.12";
111282
111310
  console.debug("🦋 [superdoc] Using SuperDoc version:", this.version);
111283
111311
  this.superdocId = config.superdocId || v4();
111284
111312
  this.colors = this.config.colors;