docxodus 9.3.0 → 9.4.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.
@@ -491,7 +491,9 @@ var DocxSession = class {
491
491
  * Table row/column editing, addressed by a cell-paragraph anchor (e.g. one returned from
492
492
  * {@link insertTable}'s `created`). Insert clones the reference row/column's widths and starts
493
493
  * empty (`created` lists the new cell-paragraph anchors); delete of the last row/column removes
494
- * the whole table. v1 assumes a rectangular grid (no horizontal cell merges).
494
+ * the whole table. All four are grid-aware: inserting across a merge extends it, deleting
495
+ * through one narrows it, and deleting a vertical merge's lead row promotes the next row to
496
+ * carry it — the grid is never left ragged.
495
497
  */
496
498
  insertTableRow(cellAnchorId, position) {
497
499
  return JSON.parse(this.wasm.InsertTableRow(this.handle, cellAnchorId, position));
@@ -505,6 +507,28 @@ var DocxSession = class {
505
507
  deleteTableColumn(cellAnchorId) {
506
508
  return JSON.parse(this.wasm.DeleteTableColumn(this.handle, cellAnchorId));
507
509
  }
510
+ /**
511
+ * Merge the rectangle of cells anchored at `cellAnchorId` running `rowSpan` rows down ×
512
+ * `colSpan` cells right (Word's *Merge Cells*): `w:gridSpan` for the horizontal extent,
513
+ * `w:vMerge` restart/continue for the vertical one. The rectangle must tile the same whole grid
514
+ * columns in every row it covers and must not clip a vertical merge entering from above or
515
+ * continuing below — a partial overlap fails with `invalid_table_merge` instead of tearing the
516
+ * grid. `content` decides what happens to the absorbed cells' content (default `"append"`).
517
+ */
518
+ mergeCells(cellAnchorId, rowSpan, colSpan, content = "append") {
519
+ return JSON.parse(
520
+ this.wasm.MergeCells(this.handle, cellAnchorId, rowSpan, colSpan, content)
521
+ );
522
+ }
523
+ /**
524
+ * Split the merged cell at `cellAnchorId` back into unit cells, dropping its `w:gridSpan` and
525
+ * `w:vMerge` markup and restoring one cell per grid column (each taking its `w:tblGrid` width).
526
+ * Addressing a vertical-merge continuation unmerges the whole run. A cell with no merge markup
527
+ * fails with `invalid_table_merge`.
528
+ */
529
+ unmergeCells(cellAnchorId) {
530
+ return JSON.parse(this.wasm.UnmergeCells(this.handle, cellAnchorId));
531
+ }
508
532
  /**
509
533
  * Table styling, addressed by a cell-paragraph anchor — the post-insert counterpart of
510
534
  * {@link insertTable}'s options (issue #315 Stage A). `setColumnWidths` retunes `w:tblGrid` +
@@ -6057,6 +6081,12 @@ var DocxEditor = class _DocxEditor {
6057
6081
  /** Anchors the current drag source may legally move next to, per the engine's own rules.
6058
6082
  * Null when the bridge predates ValidMoveTargets — then every block is offered, as before. */
6059
6083
  this.blockMoveTargets = null;
6084
+ /** Memoized `ValidMoveTargets` answers, keyed by source anchor and dropped whenever an edit
6085
+ * lands. The legal-target set is a property of the document, so hovering back and forth over
6086
+ * the same blocks between edits must not re-ask the engine. */
6087
+ this.blockMoveTargetCache = /* @__PURE__ */ new Map();
6088
+ /** Cancels the pending idle prefetch of the hovered block's targets — see `showBlockHandle`. */
6089
+ this.blockMoveTargetPrefetch = null;
6060
6090
  /** Why the last move was refused, verbatim from the engine — diagnostics, not announcement copy. */
6061
6091
  this.lastMoveError = null;
6062
6092
  /**
@@ -6357,8 +6387,7 @@ var DocxEditor = class _DocxEditor {
6357
6387
  return true;
6358
6388
  }
6359
6389
  const destination = res.created?.[0] ?? res.modified?.[0];
6360
- if (this.renderTrackedChanges) this.remount();
6361
- else this.reconcile();
6390
+ this.reconcile();
6362
6391
  const moved = destination ? this.bodyUnitNodes().find((el) => el.getAttribute("data-anchor") === destination.unid) : null;
6363
6392
  if (moved) {
6364
6393
  moved.classList.add("docx-block-move-flash");
@@ -6383,7 +6412,12 @@ var DocxEditor = class _DocxEditor {
6383
6412
  const node = target instanceof Node ? target : null;
6384
6413
  const el = node?.nodeType === Node.ELEMENT_NODE ? node : node?.parentElement;
6385
6414
  if (!el || !this.editRoot.contains(el)) return null;
6386
- return this.bodyUnitNodes().find((unit) => unit === el || unit.contains(el)) ?? null;
6415
+ let unit = null;
6416
+ for (let candidate = el.closest("[data-anchor]"); candidate && this.editRoot.contains(candidate); candidate = candidate.parentElement?.closest("[data-anchor]") ?? null) {
6417
+ unit = candidate;
6418
+ }
6419
+ if (!unit || unit.closest("section.footnotes, section.endnotes")) return null;
6420
+ return unit;
6387
6421
  }
6388
6422
  isMovableBlockUnit(unit) {
6389
6423
  if (!unit || !this.anchorIdOf(unit)) return false;
@@ -6405,18 +6439,18 @@ var DocxEditor = class _DocxEditor {
6405
6439
  if (!handle || !this.isMovableBlockUnit(unit)) return;
6406
6440
  const changed = unit !== this.blockDragSource;
6407
6441
  this.blockDragSource = unit;
6408
- if (changed) this.refreshBlockMoveTargets(unit);
6409
- if (this.blockMoveTargets?.size === 0) {
6442
+ const known = this.blockMoveTargetsFor(unit, { cachedOnly: true });
6443
+ if (known?.size === 0) {
6410
6444
  handle.style.display = "none";
6411
6445
  return;
6412
6446
  }
6447
+ if (changed && known === void 0) this.prefetchBlockMoveTargets(unit);
6413
6448
  const rect = unit.getBoundingClientRect();
6414
6449
  handle.style.display = "flex";
6415
6450
  handle.style.left = `${Math.max(4, rect.left - 32)}px`;
6416
6451
  handle.style.top = `${Math.max(4, rect.top + (unit.tagName === "TABLE" ? 6 : Math.max(0, (rect.height - 28) / 2)))}px`;
6417
6452
  const preview = (unit.textContent ?? "").trim().replace(/\s+/g, " ").slice(0, 48);
6418
6453
  handle.setAttribute("aria-label", preview ? `Move block: ${preview}` : "Move block");
6419
- if (changed) this.refreshBlockDropTargets();
6420
6454
  }
6421
6455
  hideBlockHandle() {
6422
6456
  if (this.blockDragging || this.blockMoveMenu?.style.display === "block") return;
@@ -6453,19 +6487,52 @@ var DocxEditor = class _DocxEditor {
6453
6487
  * behaviour this replaces. Null (no bridge support) keeps the previous offer-everything path.
6454
6488
  */
6455
6489
  refreshBlockMoveTargets(source) {
6490
+ this.blockMoveTargets = source ? this.blockMoveTargetsFor(source) ?? null : null;
6491
+ }
6492
+ /**
6493
+ * This block's legal destinations, from the memo when it is there. Returns `undefined` — not
6494
+ * `null` — for "not asked yet", so a caller can tell an unknown answer from the engine's
6495
+ * "no bridge support, offer everything" one.
6496
+ */
6497
+ blockMoveTargetsFor(source, options = {}) {
6456
6498
  const bridge = this.exports.DocxSessionBridge;
6457
- const sourceId = source ? this.anchorIdOf(source) : null;
6458
- if (!sourceId || typeof bridge.ValidMoveTargets !== "function") {
6459
- this.blockMoveTargets = null;
6460
- return;
6461
- }
6499
+ const sourceId = this.anchorIdOf(source);
6500
+ if (!sourceId || typeof bridge.ValidMoveTargets !== "function") return null;
6501
+ if (this.blockMoveTargetCache.has(sourceId)) return this.blockMoveTargetCache.get(sourceId);
6502
+ if (options.cachedOnly) return void 0;
6503
+ let targets;
6462
6504
  try {
6463
- const targets = JSON.parse(bridge.ValidMoveTargets(this.handle, sourceId));
6464
- this.blockMoveTargets = new Map(
6465
- targets.map((t) => [t.anchorId, { before: t.before, after: t.after }])
6466
- );
6505
+ const parsed = JSON.parse(bridge.ValidMoveTargets(this.handle, sourceId));
6506
+ targets = new Map(parsed.map((t) => [t.anchorId, { before: t.before, after: t.after }]));
6467
6507
  } catch {
6468
- this.blockMoveTargets = null;
6508
+ targets = null;
6509
+ }
6510
+ this.blockMoveTargetCache.set(sourceId, targets);
6511
+ return targets;
6512
+ }
6513
+ /**
6514
+ * Ask for the hovered block's destinations off the interaction path, and hide the handle if
6515
+ * the answer comes back empty and that block is still the one under the pointer. The handle
6516
+ * therefore appears immediately on hover and withdraws a beat later on the rare immovable
6517
+ * block, instead of every hover paying for the query up front.
6518
+ */
6519
+ prefetchBlockMoveTargets(source) {
6520
+ const view = this.container.ownerDocument.defaultView;
6521
+ if (!view) return;
6522
+ this.blockMoveTargetPrefetch?.();
6523
+ const run = () => {
6524
+ this.blockMoveTargetPrefetch = null;
6525
+ if (this.closed || !source.isConnected || this.blockDragSource !== source) return;
6526
+ if (this.blockMoveTargetsFor(source)?.size === 0 && this.blockDragHandle)
6527
+ this.blockDragHandle.style.display = "none";
6528
+ };
6529
+ const idle = view;
6530
+ if (idle.requestIdleCallback && idle.cancelIdleCallback) {
6531
+ const id = idle.requestIdleCallback(run, { timeout: 500 });
6532
+ this.blockMoveTargetPrefetch = () => idle.cancelIdleCallback(id);
6533
+ } else {
6534
+ const id = view.setTimeout(run, 0);
6535
+ this.blockMoveTargetPrefetch = () => view.clearTimeout(id);
6469
6536
  }
6470
6537
  }
6471
6538
  /**
@@ -6555,7 +6622,8 @@ var DocxEditor = class _DocxEditor {
6555
6622
  const index = units.indexOf(source);
6556
6623
  if (index < 0) return null;
6557
6624
  const position = action === "up" || action === "top" ? "before" : "after";
6558
- const candidates = units.filter((el) => el !== source && this.isValidMoveTarget(el, position)).filter((el) => position === "before" ? units.indexOf(el) < index : units.indexOf(el) > index);
6625
+ const side = position === "before" ? units.slice(0, index) : units.slice(index + 1);
6626
+ const candidates = side.filter((el) => this.isValidMoveTarget(el, position));
6559
6627
  if (candidates.length === 0) return null;
6560
6628
  if (action === "up") return { target: candidates[candidates.length - 1], position };
6561
6629
  if (action === "down") return { target: candidates[0], position };
@@ -6735,6 +6803,9 @@ var DocxEditor = class _DocxEditor {
6735
6803
  this.refreshBlockDropTargets();
6736
6804
  }
6737
6805
  teardownBlockDrag() {
6806
+ this.blockMoveTargetPrefetch?.();
6807
+ this.blockMoveTargetPrefetch = null;
6808
+ this.blockMoveTargetCache.clear();
6738
6809
  for (const cleanup of this.blockDragTargetCleanup.splice(0)) cleanup();
6739
6810
  for (const cleanup of this.blockDragCleanup.splice(0)) cleanup();
6740
6811
  this.blockDragHandle?.remove();
@@ -7252,11 +7323,22 @@ var DocxEditor = class _DocxEditor {
7252
7323
  }
7253
7324
  parseEdit(json) {
7254
7325
  try {
7255
- return JSON.parse(json);
7326
+ const result = JSON.parse(json);
7327
+ if (result.success) this.invalidateBlockMoveTargets();
7328
+ return result;
7256
7329
  } catch {
7257
7330
  return { success: false };
7258
7331
  }
7259
7332
  }
7333
+ /**
7334
+ * Drop the memoized `ValidMoveTargets` answers. Which blocks a block may move next to is a
7335
+ * fact about the DOCUMENT, so it survives hovering but not editing — and the two places a
7336
+ * document changes are `parseEdit` (every mutation that returns an `EditResult`) and
7337
+ * undo/redo, which return a bare boolean and so cannot go through it.
7338
+ */
7339
+ invalidateBlockMoveTargets() {
7340
+ this.blockMoveTargetCache.clear();
7341
+ }
7260
7342
  // ─── M5: formatting commands (ribbon) ────────────────────────────────
7261
7343
  // ─── Multi-block selection helpers (format a whole stack of paragraphs at once) ──────
7262
7344
  /**
@@ -7810,12 +7892,16 @@ var DocxEditor = class _DocxEditor {
7810
7892
  /** Undo the last edit (incremental repaint; falls back to a full re-render). */
7811
7893
  undo() {
7812
7894
  if (this.closed) return;
7813
- if (this.exports.DocxSessionBridge.Undo(this.handle)) this.reconcile();
7895
+ if (!this.exports.DocxSessionBridge.Undo(this.handle)) return;
7896
+ this.invalidateBlockMoveTargets();
7897
+ this.reconcile();
7814
7898
  }
7815
7899
  /** Redo the last undone edit (incremental repaint; falls back to a full re-render). */
7816
7900
  redo() {
7817
7901
  if (this.closed) return;
7818
- if (this.exports.DocxSessionBridge.Redo(this.handle)) this.reconcile();
7902
+ if (!this.exports.DocxSessionBridge.Redo(this.handle)) return;
7903
+ this.invalidateBlockMoveTargets();
7904
+ this.reconcile();
7819
7905
  }
7820
7906
  // ─── Header/footer region commands (no-ops unless `headerFooter` is on) ───────────────
7821
7907
  /**
@@ -8044,7 +8130,11 @@ var DocxEditor = class _DocxEditor {
8044
8130
  const oldTokens = oldNodes.map(_DocxEditor.domTokenOf);
8045
8131
  const oldKinds = oldNodes.map(_DocxEditor.domKindOf);
8046
8132
  const bodyDiff = diffUnits(oldTokens, plan.body);
8047
- if (needsRemount(bodyDiff, plan.body, oldKinds)) return this.bail("needsRemount (li change or churn)");
8133
+ if (needsRemount(bodyDiff, plan.body, oldKinds)) {
8134
+ return this.bail(
8135
+ `needsRemount (li change or churn): +${bodyDiff.added.length} -${bodyDiff.removed.length} ~${bodyDiff.substituted.length} moved=${bodyDiff.moved.length} of ${plan.body.length}`
8136
+ );
8137
+ }
8048
8138
  const fnState = this.notesDiff("footnotes", plan.footnotes);
8049
8139
  const enState = this.notesDiff("endnotes", plan.endnotes);
8050
8140
  if (fnState === null || enState === null) return this.bail("notes container unstampable/missing");
@@ -601,7 +601,9 @@ var Docxodus = (() => {
601
601
  * Table row/column editing, addressed by a cell-paragraph anchor (e.g. one returned from
602
602
  * {@link insertTable}'s `created`). Insert clones the reference row/column's widths and starts
603
603
  * empty (`created` lists the new cell-paragraph anchors); delete of the last row/column removes
604
- * the whole table. v1 assumes a rectangular grid (no horizontal cell merges).
604
+ * the whole table. All four are grid-aware: inserting across a merge extends it, deleting
605
+ * through one narrows it, and deleting a vertical merge's lead row promotes the next row to
606
+ * carry it — the grid is never left ragged.
605
607
  */
606
608
  insertTableRow(cellAnchorId, position) {
607
609
  return JSON.parse(this.wasm.InsertTableRow(this.handle, cellAnchorId, position));
@@ -615,6 +617,28 @@ var Docxodus = (() => {
615
617
  deleteTableColumn(cellAnchorId) {
616
618
  return JSON.parse(this.wasm.DeleteTableColumn(this.handle, cellAnchorId));
617
619
  }
620
+ /**
621
+ * Merge the rectangle of cells anchored at `cellAnchorId` running `rowSpan` rows down ×
622
+ * `colSpan` cells right (Word's *Merge Cells*): `w:gridSpan` for the horizontal extent,
623
+ * `w:vMerge` restart/continue for the vertical one. The rectangle must tile the same whole grid
624
+ * columns in every row it covers and must not clip a vertical merge entering from above or
625
+ * continuing below — a partial overlap fails with `invalid_table_merge` instead of tearing the
626
+ * grid. `content` decides what happens to the absorbed cells' content (default `"append"`).
627
+ */
628
+ mergeCells(cellAnchorId, rowSpan, colSpan, content = "append") {
629
+ return JSON.parse(
630
+ this.wasm.MergeCells(this.handle, cellAnchorId, rowSpan, colSpan, content)
631
+ );
632
+ }
633
+ /**
634
+ * Split the merged cell at `cellAnchorId` back into unit cells, dropping its `w:gridSpan` and
635
+ * `w:vMerge` markup and restoring one cell per grid column (each taking its `w:tblGrid` width).
636
+ * Addressing a vertical-merge continuation unmerges the whole run. A cell with no merge markup
637
+ * fails with `invalid_table_merge`.
638
+ */
639
+ unmergeCells(cellAnchorId) {
640
+ return JSON.parse(this.wasm.UnmergeCells(this.handle, cellAnchorId));
641
+ }
618
642
  /**
619
643
  * Table styling, addressed by a cell-paragraph anchor — the post-insert counterpart of
620
644
  * {@link insertTable}'s options (issue #315 Stage A). `setColumnWidths` retunes `w:tblGrid` +
@@ -6167,6 +6191,12 @@ var Docxodus = (() => {
6167
6191
  /** Anchors the current drag source may legally move next to, per the engine's own rules.
6168
6192
  * Null when the bridge predates ValidMoveTargets — then every block is offered, as before. */
6169
6193
  this.blockMoveTargets = null;
6194
+ /** Memoized `ValidMoveTargets` answers, keyed by source anchor and dropped whenever an edit
6195
+ * lands. The legal-target set is a property of the document, so hovering back and forth over
6196
+ * the same blocks between edits must not re-ask the engine. */
6197
+ this.blockMoveTargetCache = /* @__PURE__ */ new Map();
6198
+ /** Cancels the pending idle prefetch of the hovered block's targets — see `showBlockHandle`. */
6199
+ this.blockMoveTargetPrefetch = null;
6170
6200
  /** Why the last move was refused, verbatim from the engine — diagnostics, not announcement copy. */
6171
6201
  this.lastMoveError = null;
6172
6202
  /**
@@ -6467,8 +6497,7 @@ var Docxodus = (() => {
6467
6497
  return true;
6468
6498
  }
6469
6499
  const destination = res.created?.[0] ?? res.modified?.[0];
6470
- if (this.renderTrackedChanges) this.remount();
6471
- else this.reconcile();
6500
+ this.reconcile();
6472
6501
  const moved = destination ? this.bodyUnitNodes().find((el) => el.getAttribute("data-anchor") === destination.unid) : null;
6473
6502
  if (moved) {
6474
6503
  moved.classList.add("docx-block-move-flash");
@@ -6493,7 +6522,12 @@ var Docxodus = (() => {
6493
6522
  const node = target instanceof Node ? target : null;
6494
6523
  const el = node?.nodeType === Node.ELEMENT_NODE ? node : node?.parentElement;
6495
6524
  if (!el || !this.editRoot.contains(el)) return null;
6496
- return this.bodyUnitNodes().find((unit) => unit === el || unit.contains(el)) ?? null;
6525
+ let unit = null;
6526
+ for (let candidate = el.closest("[data-anchor]"); candidate && this.editRoot.contains(candidate); candidate = candidate.parentElement?.closest("[data-anchor]") ?? null) {
6527
+ unit = candidate;
6528
+ }
6529
+ if (!unit || unit.closest("section.footnotes, section.endnotes")) return null;
6530
+ return unit;
6497
6531
  }
6498
6532
  isMovableBlockUnit(unit) {
6499
6533
  if (!unit || !this.anchorIdOf(unit)) return false;
@@ -6515,18 +6549,18 @@ var Docxodus = (() => {
6515
6549
  if (!handle || !this.isMovableBlockUnit(unit)) return;
6516
6550
  const changed = unit !== this.blockDragSource;
6517
6551
  this.blockDragSource = unit;
6518
- if (changed) this.refreshBlockMoveTargets(unit);
6519
- if (this.blockMoveTargets?.size === 0) {
6552
+ const known = this.blockMoveTargetsFor(unit, { cachedOnly: true });
6553
+ if (known?.size === 0) {
6520
6554
  handle.style.display = "none";
6521
6555
  return;
6522
6556
  }
6557
+ if (changed && known === void 0) this.prefetchBlockMoveTargets(unit);
6523
6558
  const rect = unit.getBoundingClientRect();
6524
6559
  handle.style.display = "flex";
6525
6560
  handle.style.left = `${Math.max(4, rect.left - 32)}px`;
6526
6561
  handle.style.top = `${Math.max(4, rect.top + (unit.tagName === "TABLE" ? 6 : Math.max(0, (rect.height - 28) / 2)))}px`;
6527
6562
  const preview = (unit.textContent ?? "").trim().replace(/\s+/g, " ").slice(0, 48);
6528
6563
  handle.setAttribute("aria-label", preview ? `Move block: ${preview}` : "Move block");
6529
- if (changed) this.refreshBlockDropTargets();
6530
6564
  }
6531
6565
  hideBlockHandle() {
6532
6566
  if (this.blockDragging || this.blockMoveMenu?.style.display === "block") return;
@@ -6563,19 +6597,52 @@ var Docxodus = (() => {
6563
6597
  * behaviour this replaces. Null (no bridge support) keeps the previous offer-everything path.
6564
6598
  */
6565
6599
  refreshBlockMoveTargets(source) {
6600
+ this.blockMoveTargets = source ? this.blockMoveTargetsFor(source) ?? null : null;
6601
+ }
6602
+ /**
6603
+ * This block's legal destinations, from the memo when it is there. Returns `undefined` — not
6604
+ * `null` — for "not asked yet", so a caller can tell an unknown answer from the engine's
6605
+ * "no bridge support, offer everything" one.
6606
+ */
6607
+ blockMoveTargetsFor(source, options = {}) {
6566
6608
  const bridge = this.exports.DocxSessionBridge;
6567
- const sourceId = source ? this.anchorIdOf(source) : null;
6568
- if (!sourceId || typeof bridge.ValidMoveTargets !== "function") {
6569
- this.blockMoveTargets = null;
6570
- return;
6571
- }
6609
+ const sourceId = this.anchorIdOf(source);
6610
+ if (!sourceId || typeof bridge.ValidMoveTargets !== "function") return null;
6611
+ if (this.blockMoveTargetCache.has(sourceId)) return this.blockMoveTargetCache.get(sourceId);
6612
+ if (options.cachedOnly) return void 0;
6613
+ let targets;
6572
6614
  try {
6573
- const targets = JSON.parse(bridge.ValidMoveTargets(this.handle, sourceId));
6574
- this.blockMoveTargets = new Map(
6575
- targets.map((t) => [t.anchorId, { before: t.before, after: t.after }])
6576
- );
6615
+ const parsed = JSON.parse(bridge.ValidMoveTargets(this.handle, sourceId));
6616
+ targets = new Map(parsed.map((t) => [t.anchorId, { before: t.before, after: t.after }]));
6577
6617
  } catch {
6578
- this.blockMoveTargets = null;
6618
+ targets = null;
6619
+ }
6620
+ this.blockMoveTargetCache.set(sourceId, targets);
6621
+ return targets;
6622
+ }
6623
+ /**
6624
+ * Ask for the hovered block's destinations off the interaction path, and hide the handle if
6625
+ * the answer comes back empty and that block is still the one under the pointer. The handle
6626
+ * therefore appears immediately on hover and withdraws a beat later on the rare immovable
6627
+ * block, instead of every hover paying for the query up front.
6628
+ */
6629
+ prefetchBlockMoveTargets(source) {
6630
+ const view = this.container.ownerDocument.defaultView;
6631
+ if (!view) return;
6632
+ this.blockMoveTargetPrefetch?.();
6633
+ const run = () => {
6634
+ this.blockMoveTargetPrefetch = null;
6635
+ if (this.closed || !source.isConnected || this.blockDragSource !== source) return;
6636
+ if (this.blockMoveTargetsFor(source)?.size === 0 && this.blockDragHandle)
6637
+ this.blockDragHandle.style.display = "none";
6638
+ };
6639
+ const idle = view;
6640
+ if (idle.requestIdleCallback && idle.cancelIdleCallback) {
6641
+ const id = idle.requestIdleCallback(run, { timeout: 500 });
6642
+ this.blockMoveTargetPrefetch = () => idle.cancelIdleCallback(id);
6643
+ } else {
6644
+ const id = view.setTimeout(run, 0);
6645
+ this.blockMoveTargetPrefetch = () => view.clearTimeout(id);
6579
6646
  }
6580
6647
  }
6581
6648
  /**
@@ -6665,7 +6732,8 @@ var Docxodus = (() => {
6665
6732
  const index = units.indexOf(source);
6666
6733
  if (index < 0) return null;
6667
6734
  const position = action === "up" || action === "top" ? "before" : "after";
6668
- const candidates = units.filter((el) => el !== source && this.isValidMoveTarget(el, position)).filter((el) => position === "before" ? units.indexOf(el) < index : units.indexOf(el) > index);
6735
+ const side = position === "before" ? units.slice(0, index) : units.slice(index + 1);
6736
+ const candidates = side.filter((el) => this.isValidMoveTarget(el, position));
6669
6737
  if (candidates.length === 0) return null;
6670
6738
  if (action === "up") return { target: candidates[candidates.length - 1], position };
6671
6739
  if (action === "down") return { target: candidates[0], position };
@@ -6845,6 +6913,9 @@ var Docxodus = (() => {
6845
6913
  this.refreshBlockDropTargets();
6846
6914
  }
6847
6915
  teardownBlockDrag() {
6916
+ this.blockMoveTargetPrefetch?.();
6917
+ this.blockMoveTargetPrefetch = null;
6918
+ this.blockMoveTargetCache.clear();
6848
6919
  for (const cleanup of this.blockDragTargetCleanup.splice(0)) cleanup();
6849
6920
  for (const cleanup of this.blockDragCleanup.splice(0)) cleanup();
6850
6921
  this.blockDragHandle?.remove();
@@ -7362,11 +7433,22 @@ var Docxodus = (() => {
7362
7433
  }
7363
7434
  parseEdit(json) {
7364
7435
  try {
7365
- return JSON.parse(json);
7436
+ const result = JSON.parse(json);
7437
+ if (result.success) this.invalidateBlockMoveTargets();
7438
+ return result;
7366
7439
  } catch {
7367
7440
  return { success: false };
7368
7441
  }
7369
7442
  }
7443
+ /**
7444
+ * Drop the memoized `ValidMoveTargets` answers. Which blocks a block may move next to is a
7445
+ * fact about the DOCUMENT, so it survives hovering but not editing — and the two places a
7446
+ * document changes are `parseEdit` (every mutation that returns an `EditResult`) and
7447
+ * undo/redo, which return a bare boolean and so cannot go through it.
7448
+ */
7449
+ invalidateBlockMoveTargets() {
7450
+ this.blockMoveTargetCache.clear();
7451
+ }
7370
7452
  // ─── M5: formatting commands (ribbon) ────────────────────────────────
7371
7453
  // ─── Multi-block selection helpers (format a whole stack of paragraphs at once) ──────
7372
7454
  /**
@@ -7920,12 +8002,16 @@ var Docxodus = (() => {
7920
8002
  /** Undo the last edit (incremental repaint; falls back to a full re-render). */
7921
8003
  undo() {
7922
8004
  if (this.closed) return;
7923
- if (this.exports.DocxSessionBridge.Undo(this.handle)) this.reconcile();
8005
+ if (!this.exports.DocxSessionBridge.Undo(this.handle)) return;
8006
+ this.invalidateBlockMoveTargets();
8007
+ this.reconcile();
7924
8008
  }
7925
8009
  /** Redo the last undone edit (incremental repaint; falls back to a full re-render). */
7926
8010
  redo() {
7927
8011
  if (this.closed) return;
7928
- if (this.exports.DocxSessionBridge.Redo(this.handle)) this.reconcile();
8012
+ if (!this.exports.DocxSessionBridge.Redo(this.handle)) return;
8013
+ this.invalidateBlockMoveTargets();
8014
+ this.reconcile();
7929
8015
  }
7930
8016
  // ─── Header/footer region commands (no-ops unless `headerFooter` is on) ───────────────
7931
8017
  /**
@@ -8154,7 +8240,11 @@ var Docxodus = (() => {
8154
8240
  const oldTokens = oldNodes.map(_DocxEditor.domTokenOf);
8155
8241
  const oldKinds = oldNodes.map(_DocxEditor.domKindOf);
8156
8242
  const bodyDiff = diffUnits(oldTokens, plan.body);
8157
- if (needsRemount(bodyDiff, plan.body, oldKinds)) return this.bail("needsRemount (li change or churn)");
8243
+ if (needsRemount(bodyDiff, plan.body, oldKinds)) {
8244
+ return this.bail(
8245
+ `needsRemount (li change or churn): +${bodyDiff.added.length} -${bodyDiff.removed.length} ~${bodyDiff.substituted.length} moved=${bodyDiff.moved.length} of ${plan.body.length}`
8246
+ );
8247
+ }
8158
8248
  const fnState = this.notesDiff("footnotes", plan.footnotes);
8159
8249
  const enState = this.notesDiff("endnotes", plan.endnotes);
8160
8250
  if (fnState === null || enState === null) return this.bail("notes container unstampable/missing");
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { ConversionOptions, CompareOptions, Revision, VersionInfo, ErrorResponse, CompareResult, DocxodusWasmExports, GetRevisionsOptions, FormatChangeDetails, DocxDiffSettings, DocxDiffRevision, DocxDiffReviewer, DocxDiffConsolidateSettings, DocxDiffConflict, DocxDiffConflictCompetitor, DocxDiffConsolidatedRevision, Annotation, AddAnnotationRequest, AddAnnotationResponse, RemoveAnnotationResponse, AnnotationOptions, DocumentStructure, DocumentElement, TableColumnInfo, AnnotationTarget, AddAnnotationWithTargetRequest, DocumentMetadata, SectionMetadata, OpenContractDocExport, PawlsPage, PawlsPageBoundary, PawlsToken, OpenContractsAnnotation, OpenContractsSinglePageAnnotation, BoundingBox, TokenId, TextSpan, OpenContractsRelationship, AnnotationLabel, ExternalAnnotationSet, ExternalAnnotationValidationResult, ExternalAnnotationValidationIssue, ExternalAnnotationProjectionSettings, ComparisonLogEntry, CompareResultWithLog, CompareToHtmlResultWithLog, MarkdownProjectionSettings, MarkdownAnchorTarget, MarkdownProjection, DocxSessionSettings } from "./types.js";
2
2
  import { DocxSession } from "./session.js";
3
3
  export { DocxSession } from "./session.js";
4
- export type { AnchorInfo, AnchorRef, AnchorTargetRef, BlockMetadata, CharSpan, CommentListEntry, DocumentAnnotation, DocxSessionProjection, DocxSessionSettings, EditError, EditErrorCode, EditResult, FindOptions, FormatOp, LineSpacingRule, ListMembership, MarkdownPatch, NumberFormat, PageNumberField, PageNumberingOp, ParagraphBorderEdge, ParagraphFormatOp, RevisionListEntry, SectionInfo, SessionRevisionType, TableBorderScope, TableBorderSpec, TableInsertOptions, TableShadingScope, } from "./types.js";
4
+ export type { AnchorInfo, AnchorRef, AnchorTargetRef, BlockMetadata, CharSpan, CommentListEntry, DocumentAnnotation, DocxSessionProjection, DocxSessionSettings, EditError, EditErrorCode, EditResult, FindOptions, FormatOp, LineSpacingRule, ListMembership, MarkdownPatch, NumberFormat, PageNumberField, PageNumberingOp, ParagraphBorderEdge, ParagraphFormatOp, RevisionListEntry, SectionInfo, SessionRevisionType, TableBorderScope, TableBorderSpec, TableInsertOptions, TableMergeContent, TableShadingScope, } from "./types.js";
5
5
  export type { FillOptions, BulkEditResult } from "./types.js";
6
6
  export { PlaceholderKinds, ContextBoundary } from "./types.js";
7
7
  export { DiffFormat } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}