docxodus 9.1.0 → 9.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -57,7 +57,7 @@ runtime location auto-detected — no build step, no configuration:
57
57
  ```html
58
58
  <div id="doc"></div>
59
59
  <script type="module">
60
- import { createEditor } from 'https://cdn.jsdelivr.net/npm/docxodus@9.1.0/dist/embed.bundle.js';
60
+ import { createEditor } from 'https://cdn.jsdelivr.net/npm/docxodus@9.1.1/dist/embed.bundle.js';
61
61
  const editor = await createEditor('#doc', './contract.docx'); // or bytes / Blob / File
62
62
  // ...later: const editedBytes = editor.save();
63
63
  </script>
@@ -429,7 +429,7 @@ so a page can embed a full viewer or editor without hosting anything itself.
429
429
  <div id="editor"></div>
430
430
  <script type="module">
431
431
  import { createViewer, createEditor }
432
- from 'https://cdn.jsdelivr.net/npm/docxodus@9.1.0/dist/embed.bundle.js';
432
+ from 'https://cdn.jsdelivr.net/npm/docxodus@9.1.1/dist/embed.bundle.js';
433
433
 
434
434
  // Choose either factory, or render both into separate containers as shown.
435
435
  // Source may be a URL, Uint8Array, ArrayBuffer, Blob, or File.
@@ -449,7 +449,7 @@ For pages that can't use modules, `dist/embed.iife.js` exposes the same surface
449
449
 
450
450
  ```html
451
451
  <div id="doc"></div>
452
- <script src="https://cdn.jsdelivr.net/npm/docxodus@9.1.0/dist/embed.iife.js"></script>
452
+ <script src="https://cdn.jsdelivr.net/npm/docxodus@9.1.1/dist/embed.iife.js"></script>
453
453
  <script>
454
454
  Docxodus.createEditor('#doc').then((editor) => { /* ... */ });
455
455
  </script>
@@ -465,7 +465,7 @@ first `<bundle dir>/wasm/`, then `<bundle dir>/` as a fallback. On a CDN that re
465
465
 
466
466
  ### CDN caveats
467
467
 
468
- - **Pin an exact version in production** (`docxodus@9.1.0`, not `@latest`) — CDN responses are
468
+ - **Pin an exact version in production** (`docxodus@9.1.1`, not `@latest`) — CDN responses are
469
469
  cached as immutable, and the wire shapes between the JS wrappers and the WASM assemblies must
470
470
  come from the same release.
471
471
  - The build patches the .NET loader to fetch with `credentials: "omit"` — required because the
@@ -1 +1 @@
1
- {"version":3,"file":"editor-reconcile.d.ts","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;kBAKkB;AAClB,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;oFAEoF;AACpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEhD;AAED,oFAAoF;AACpF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,uEAAuE;IACvE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;OAKG;IACH,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,6DAA6D;AAC7D,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,QAAQ,CA8D9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,SAAK,GACb,OAAO,CAWT"}
1
+ {"version":3,"file":"editor-reconcile.d.ts","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;kBAKkB;AAClB,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;oFAEoF;AACpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEhD;AAED,oFAAoF;AACpF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,uEAAuE;IACvE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;OAKG;IACH,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,6DAA6D;AAC7D,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,QAAQ,CAyF9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,SAAK,GACb,OAAO,CAWT"}
@@ -63,8 +63,38 @@ export function diffUnits(oldUnids, newUnits) {
63
63
  removed.push(i++);
64
64
  while (j < m)
65
65
  added.push(j++);
66
- // Substitutions: an added index and a removed index with the same number of
67
- // kept units before theman in-place change of one unit.
66
+ // Substitutions: an added index and a removed index that are an IN-PLACE change
67
+ // of one unit. Paired by UNID first a block whose content changed keeps its
68
+ // unid (unids are sticky in-session; only the content signature part of the
69
+ // token moves), so an equal-unid add/remove pair is that block re-rendering in
70
+ // place regardless of how many other units changed around it. Position-based
71
+ // (kept-count) pairing is the fallback for genuine replacements; unid pairing
72
+ // must run first or several same-position changes mispair, e.g. binding an
73
+ // edited paragraph's fresh render to a NEIGHBOR's border-wrapped node — which
74
+ // the DOM patcher can only resolve by bailing to a full remount.
75
+ const bareUnid = (token) => {
76
+ const bar = token.indexOf("|");
77
+ return bar < 0 ? token : token.slice(0, bar);
78
+ };
79
+ const substituted = [];
80
+ const usedRemoved = new Set();
81
+ const removedByUnid = new Map();
82
+ for (const oi of removed) {
83
+ const u = bareUnid(oldUnids[oi]);
84
+ (removedByUnid.get(u) ?? removedByUnid.set(u, []).get(u)).push(oi);
85
+ }
86
+ const unmatchedAdded = [];
87
+ for (const nj of added) {
88
+ const candidates = removedByUnid.get(bareUnid(newUnids[nj]));
89
+ const oi = candidates?.find((i) => !usedRemoved.has(i));
90
+ if (oi !== undefined) {
91
+ substituted.push({ oldIndex: oi, newIndex: nj });
92
+ usedRemoved.add(oi);
93
+ }
94
+ else {
95
+ unmatchedAdded.push(nj);
96
+ }
97
+ }
68
98
  const keptBeforeOld = (oi) => {
69
99
  let c = 0;
70
100
  for (const v of keep.values())
@@ -79,9 +109,7 @@ export function diffUnits(oldUnids, newUnits) {
79
109
  c++;
80
110
  return c;
81
111
  };
82
- const substituted = [];
83
- const usedRemoved = new Set();
84
- for (const nj of added) {
112
+ for (const nj of unmatchedAdded) {
85
113
  const target = keptBeforeNew(nj);
86
114
  for (const oi of removed) {
87
115
  if (usedRemoved.has(oi))
@@ -1 +1 @@
1
- {"version":3,"file":"editor-reconcile.js","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor-reconcile.js","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"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"}
@@ -1921,6 +1921,28 @@ var DocxodusEditor = (() => {
1921
1921
  }
1922
1922
  while (i < n) removed.push(i++);
1923
1923
  while (j < m) added.push(j++);
1924
+ const bareUnid = (token) => {
1925
+ const bar = token.indexOf("|");
1926
+ return bar < 0 ? token : token.slice(0, bar);
1927
+ };
1928
+ const substituted = [];
1929
+ const usedRemoved = /* @__PURE__ */ new Set();
1930
+ const removedByUnid = /* @__PURE__ */ new Map();
1931
+ for (const oi of removed) {
1932
+ const u = bareUnid(oldUnids[oi]);
1933
+ (removedByUnid.get(u) ?? removedByUnid.set(u, []).get(u)).push(oi);
1934
+ }
1935
+ const unmatchedAdded = [];
1936
+ for (const nj of added) {
1937
+ const candidates = removedByUnid.get(bareUnid(newUnids[nj]));
1938
+ const oi = candidates?.find((i2) => !usedRemoved.has(i2));
1939
+ if (oi !== void 0) {
1940
+ substituted.push({ oldIndex: oi, newIndex: nj });
1941
+ usedRemoved.add(oi);
1942
+ } else {
1943
+ unmatchedAdded.push(nj);
1944
+ }
1945
+ }
1924
1946
  const keptBeforeOld = (oi) => {
1925
1947
  let c = 0;
1926
1948
  for (const v of keep.values()) if (v < oi) c++;
@@ -1931,9 +1953,7 @@ var DocxodusEditor = (() => {
1931
1953
  for (const k of keep.keys()) if (k < nj) c++;
1932
1954
  return c;
1933
1955
  };
1934
- const substituted = [];
1935
- const usedRemoved = /* @__PURE__ */ new Set();
1936
- for (const nj of added) {
1956
+ for (const nj of unmatchedAdded) {
1937
1957
  const target = keptBeforeNew(nj);
1938
1958
  for (const oi of removed) {
1939
1959
  if (usedRemoved.has(oi)) continue;
@@ -2137,6 +2157,33 @@ var DocxodusEditor = (() => {
2137
2157
  if (lastText) return { node: lastText, offset: (lastText.textContent ?? "").length };
2138
2158
  return { node: el, offset: el.childNodes.length };
2139
2159
  }
2160
+ function caretPointFromClient(doc, clientX, clientY) {
2161
+ const caretDoc = doc;
2162
+ const position = caretDoc.caretPositionFromPoint?.(clientX, clientY);
2163
+ if (position) return { node: position.offsetNode, offset: position.offset };
2164
+ const range = caretDoc.caretRangeFromPoint?.(clientX, clientY);
2165
+ return range ? { node: range.startContainer, offset: range.startOffset } : null;
2166
+ }
2167
+ function setSelectionBetween(anchor, focus) {
2168
+ const sel = typeof window !== "undefined" ? window.getSelection() : null;
2169
+ if (!sel || !anchor.node.isConnected || !focus.node.isConnected) return false;
2170
+ try {
2171
+ const probe = document.createRange();
2172
+ probe.setStart(anchor.node, anchor.offset);
2173
+ probe.collapse(true);
2174
+ const focusIsBefore = probe.comparePoint(focus.node, focus.offset) < 0;
2175
+ const range = document.createRange();
2176
+ const start = focusIsBefore ? focus : anchor;
2177
+ const end = focusIsBefore ? anchor : focus;
2178
+ range.setStart(start.node, start.offset);
2179
+ range.setEnd(end.node, end.offset);
2180
+ sel.removeAllRanges();
2181
+ sel.addRange(range);
2182
+ return true;
2183
+ } catch {
2184
+ return false;
2185
+ }
2186
+ }
2140
2187
  function placeCaretAtOffset(el, offset) {
2141
2188
  const sel = typeof window !== "undefined" ? window.getSelection() : null;
2142
2189
  if (!sel) return;
@@ -2302,6 +2349,15 @@ var DocxodusEditor = (() => {
2302
2349
  * block, and cleared when a caret is collapsed inside a block (so it never goes stale).
2303
2350
  */
2304
2351
  this.lastSelection = null;
2352
+ /**
2353
+ * Stable bookmark for a selection spanning independent editable blocks. Native controls such as
2354
+ * a font-size combobox can take focus and collapse the live DOM selection; block ids + content
2355
+ * offsets let the command restore that same range before applying. This is the multi-block
2356
+ * counterpart to lastSelection above.
2357
+ */
2358
+ this.lastCrossBlockSelection = null;
2359
+ /** State for the mouse-selection bridge between independent contenteditable block hosts. */
2360
+ this.dragSelection = null;
2305
2361
  /** The docked header/footer bands, when `options.headerFooter` is on. */
2306
2362
  this.region = null;
2307
2363
  /** Why the last reconcile() fell back to a full remount (null = it patched). For
@@ -2313,24 +2369,92 @@ var DocxodusEditor = (() => {
2313
2369
  const sel = typeof window !== "undefined" ? window.getSelection() : null;
2314
2370
  if (!sel || sel.rangeCount === 0) return;
2315
2371
  const range = sel.getRangeAt(0);
2316
- const block = this.editableBlockOf(range.commonAncestorContainer);
2372
+ const startBlock = this.editableBlockOf(range.startContainer);
2373
+ const endBlock = this.editableBlockOf(range.endContainer);
2374
+ const block = startBlock ?? endBlock;
2317
2375
  if (!block) return;
2318
- const unid = block.getAttribute("data-anchor");
2319
- if (!unid) return;
2320
2376
  if (range.collapsed) {
2321
2377
  this.lastSelection = null;
2378
+ this.lastCrossBlockSelection = null;
2379
+ return;
2380
+ }
2381
+ if (startBlock && endBlock && startBlock !== endBlock && this.ownerRoot(startBlock) === this.ownerRoot(endBlock)) {
2382
+ const startUnid = startBlock.getAttribute("data-anchor");
2383
+ const endUnid = endBlock.getAttribute("data-anchor");
2384
+ if (startUnid && endUnid) {
2385
+ this.lastSelection = null;
2386
+ this.lastCrossBlockSelection = {
2387
+ startUnid,
2388
+ startOffset: contentOffsetOf(startBlock, range.startContainer, range.startOffset),
2389
+ endUnid,
2390
+ endOffset: contentOffsetOf(endBlock, range.endContainer, range.endOffset)
2391
+ };
2392
+ }
2322
2393
  return;
2323
2394
  }
2395
+ const unid = block.getAttribute("data-anchor");
2396
+ if (!unid) return;
2397
+ this.lastCrossBlockSelection = null;
2324
2398
  const span = selectionSpanIn(block);
2325
2399
  if (span) this.lastSelection = { unid, span };
2326
2400
  };
2401
+ /** Start tracking a normal primary-button text drag inside one editable block. */
2402
+ this.onMouseDown = (event) => {
2403
+ if (this.closed || !this.options.editable || event.button !== 0) return;
2404
+ const target = event.target instanceof Node ? event.target : null;
2405
+ const origin = this.editableBlockOf(target);
2406
+ if (!origin || isInMarker(target)) return;
2407
+ const anchor = caretPointFromClient(document, event.clientX, event.clientY);
2408
+ if (!anchor || this.editableBlockOf(anchor.node) !== origin) return;
2409
+ this.dragSelection = { anchor, origin, crossedBlockBoundary: false };
2410
+ };
2411
+ /**
2412
+ * Browsers fence native mouse selection at a contenteditable host boundary. Once a drag reaches
2413
+ * another block in the same OOXML story, take over just that gesture and create the cross-block
2414
+ * Selection the editor's existing multi-block command path consumes. Intra-block selection stays
2415
+ * entirely native, and separate hosts remain intact for safe per-anchor commits.
2416
+ */
2417
+ this.onMouseMove = (event) => {
2418
+ const drag = this.dragSelection;
2419
+ if (!drag) return;
2420
+ if ((event.buttons & 1) === 0) {
2421
+ this.dragSelection = null;
2422
+ return;
2423
+ }
2424
+ const focus = caretPointFromClient(document, event.clientX, event.clientY);
2425
+ if (!focus || isInMarker(focus.node)) return;
2426
+ const focusBlock = this.editableBlockOf(focus.node);
2427
+ if (!focusBlock || this.ownerRoot(focusBlock) !== this.ownerRoot(drag.origin)) return;
2428
+ if (focusBlock !== drag.origin) drag.crossedBlockBoundary = true;
2429
+ if (!drag.crossedBlockBoundary) return;
2430
+ event.preventDefault();
2431
+ setSelectionBetween(drag.anchor, focus);
2432
+ };
2433
+ /** Commit the final cross-block endpoint before releasing the gesture state. */
2434
+ this.onMouseUp = (event) => {
2435
+ const drag = this.dragSelection;
2436
+ if (!drag) return;
2437
+ if (drag.crossedBlockBoundary) {
2438
+ const focus = caretPointFromClient(document, event.clientX, event.clientY);
2439
+ const focusBlock = focus ? this.editableBlockOf(focus.node) : null;
2440
+ if (focus && focusBlock && this.ownerRoot(focusBlock) === this.ownerRoot(drag.origin)) {
2441
+ event.preventDefault();
2442
+ setSelectionBetween(drag.anchor, focus);
2443
+ }
2444
+ }
2445
+ this.dragSelection = null;
2446
+ };
2327
2447
  this.container = container;
2328
2448
  this.exports = exports;
2329
2449
  this.handle = handle;
2330
2450
  this.options = options;
2331
2451
  this.editRoot = container;
2332
- if (typeof document !== "undefined")
2452
+ if (typeof document !== "undefined") {
2333
2453
  document.addEventListener("selectionchange", this.onSelectionChange);
2454
+ document.addEventListener("mousedown", this.onMouseDown, true);
2455
+ document.addEventListener("mousemove", this.onMouseMove, true);
2456
+ document.addEventListener("mouseup", this.onMouseUp, true);
2457
+ }
2334
2458
  }
2335
2459
  /** The editable block (contenteditable [data-anchor]) containing `node`, if any, within this editor.
2336
2460
  * Fenced by `container`, not `editRoot`, so header/footer band blocks — which live outside the
@@ -2410,8 +2534,13 @@ var DocxodusEditor = (() => {
2410
2534
  close() {
2411
2535
  if (this.closed) return;
2412
2536
  this.closed = true;
2413
- if (typeof document !== "undefined")
2537
+ if (typeof document !== "undefined") {
2414
2538
  document.removeEventListener("selectionchange", this.onSelectionChange);
2539
+ document.removeEventListener("mousedown", this.onMouseDown, true);
2540
+ document.removeEventListener("mousemove", this.onMouseMove, true);
2541
+ document.removeEventListener("mouseup", this.onMouseUp, true);
2542
+ }
2543
+ this.dragSelection = null;
2415
2544
  this.exports.DocxSessionBridge.CloseSession(this.handle);
2416
2545
  }
2417
2546
  /**
@@ -2719,8 +2848,7 @@ var DocxodusEditor = (() => {
2719
2848
  this.options.onEdit?.({ anchorId: second.id, unid: second.unid });
2720
2849
  return;
2721
2850
  }
2722
- const firstEl = this.renderInto(first.id);
2723
- const secondEl = this.renderInto(second.id);
2851
+ const [firstEl, secondEl] = this.renderTwo(first.id, second.id);
2724
2852
  if (!firstEl || !secondEl) return;
2725
2853
  const inBand = this.isBandBlock(el);
2726
2854
  if (!this.replaceNode(el, firstEl, secondEl)) return;
@@ -2833,6 +2961,34 @@ var DocxodusEditor = (() => {
2833
2961
  if (html.charCodeAt(0) === 123) return null;
2834
2962
  return new DOMParser().parseFromString(html, "text/html").body.firstElementChild;
2835
2963
  }
2964
+ /** Render two blocks in ONE batched bridge call when the bundle carries RenderBlocksHtml —
2965
+ * the per-render shell/converter setup is paid once instead of twice, which matters on the
2966
+ * Enter path (split renders both halves synchronously under the keystroke). Falls back to
2967
+ * two per-block renders on older bundles. Output is renderInto-identical per block (both
2968
+ * routes share the same extraction). */
2969
+ renderTwo(a, b) {
2970
+ const bridge = this.exports.DocxSessionBridge;
2971
+ if (typeof bridge.RenderBlocksHtml === "function") {
2972
+ try {
2973
+ const map = JSON.parse(
2974
+ bridge.RenderBlocksHtml(
2975
+ this.handle,
2976
+ JSON.stringify([a, b]),
2977
+ this.options.cssPrefix,
2978
+ this.options.fabricateClasses
2979
+ )
2980
+ );
2981
+ if (!map.error) {
2982
+ const parse = (h) => h ? new DOMParser().parseFromString(h, "text/html").body.firstElementChild : null;
2983
+ const fa = parse(map[a]);
2984
+ const fb = parse(map[b]);
2985
+ if (fa && fb) return [fa, fb];
2986
+ }
2987
+ } catch {
2988
+ }
2989
+ }
2990
+ return [this.renderInto(a), this.renderInto(b)];
2991
+ }
2836
2992
  /** The editable block immediately before `el` within its own root, or null. */
2837
2993
  previousEditable(el) {
2838
2994
  const all = Array.from(
@@ -2850,12 +3006,34 @@ var DocxodusEditor = (() => {
2850
3006
  }
2851
3007
  // ─── M5: formatting commands (ribbon) ────────────────────────────────
2852
3008
  // ─── Multi-block selection helpers (format a whole stack of paragraphs at once) ──────
3009
+ /**
3010
+ * Restore a cross-block selection after a native toolbar control took focus. The bookmark uses
3011
+ * stable anchor ids and content offsets, so it also survives incremental block swaps.
3012
+ */
3013
+ restoreCrossBlockSelection() {
3014
+ const bookmark = this.lastCrossBlockSelection;
3015
+ const active = this.activeBlock;
3016
+ if (!bookmark || !active) return false;
3017
+ const all = Array.from(
3018
+ this.ownerRoot(active).querySelectorAll('[data-anchor][contenteditable="true"]')
3019
+ );
3020
+ const first = all.find((block) => block.getAttribute("data-anchor") === bookmark.startUnid);
3021
+ const last = all.find((block) => block.getAttribute("data-anchor") === bookmark.endUnid);
3022
+ if (!first || !last || first === last || all.indexOf(first) > all.indexOf(last)) return false;
3023
+ const start = contentPositionIn(first, bookmark.startOffset);
3024
+ const end = contentPositionIn(last, bookmark.endOffset);
3025
+ return setSelectionBetween(start, end);
3026
+ }
2853
3027
  /** Editable blocks the current selection covers, in document order. Uses Range.comparePoint
2854
3028
  * (robust to a selection boundary that normalized onto a wrapper element rather than a block
2855
3029
  * or text node — Range.intersectsNode misses the end block at a `(block, childCount)` boundary).
2856
3030
  * A collapsed or single-block selection yields just the active block. */
2857
3031
  selectedBlocks() {
2858
- const sel = typeof window !== "undefined" ? window.getSelection() : null;
3032
+ let sel = typeof window !== "undefined" ? window.getSelection() : null;
3033
+ if ((!sel || sel.rangeCount === 0 || sel.isCollapsed) && this.lastCrossBlockSelection) {
3034
+ this.restoreCrossBlockSelection();
3035
+ sel = typeof window !== "undefined" ? window.getSelection() : null;
3036
+ }
2859
3037
  const root = this.activeBlock ? this.ownerRoot(this.activeBlock) : this.editRoot;
2860
3038
  const all = Array.from(
2861
3039
  root.querySelectorAll('[data-anchor][contenteditable="true"]')
@@ -3634,7 +3812,8 @@ var DocxodusEditor = (() => {
3634
3812
  );
3635
3813
  if (oldMarker !== newMarker) return this.bail("substituted li marker drift");
3636
3814
  }
3637
- if (!this.applyBodyDiff(oldNodes, plan.body, bodyDiff, freshBody)) return this.bail("applyBodyDiff bail");
3815
+ const bodyApply = this.applyBodyDiff(oldNodes, plan.body, bodyDiff, freshBody);
3816
+ if (bodyApply !== true) return this.bail(`applyBodyDiff bail: ${bodyApply}`);
3638
3817
  this.applyNotesDiff("footnotes", plan.footnotes, fnState, rendered);
3639
3818
  this.applyNotesDiff("endnotes", plan.endnotes, enState, rendered);
3640
3819
  const freshHasMarker = [...freshBody.values()].some(
@@ -3666,15 +3845,15 @@ var DocxodusEditor = (() => {
3666
3845
  static anchorElOf(root) {
3667
3846
  return root.hasAttribute("data-anchor") ? root : root.querySelector("[data-anchor]");
3668
3847
  }
3669
- /** Insert/remove/swap body unit nodes per the diff. Returns false to bail (parent
3670
- * ambiguity, order violation, wrapper semantics) — the session is already correct,
3671
- * so bailing just means a full repaint. */
3848
+ /** Insert/remove/swap body unit nodes per the diff. Returns `true` on success or a
3849
+ * bail-reason string (parent ambiguity, order violation, wrapper semantics) — the
3850
+ * session is already correct, so bailing just means a full repaint. */
3672
3851
  applyBodyDiff(oldNodes, units, diff, fresh) {
3673
3852
  let lastOld = -1;
3674
3853
  for (let j = 0; j < units.length; j++) {
3675
3854
  const oi = diff.keep.get(j);
3676
3855
  if (oi === void 0) continue;
3677
- if (oi < lastOld) return false;
3856
+ if (oi < lastOld) return "kept order violation";
3678
3857
  lastOld = oi;
3679
3858
  }
3680
3859
  const subOldByNew = new Map(diff.substituted.map((s) => [s.newIndex, s.oldIndex]));
@@ -3685,8 +3864,10 @@ var DocxodusEditor = (() => {
3685
3864
  oldWrapper.replaceWith(freshRoot);
3686
3865
  } else if (oldWrapper === oldNodes[oi]) {
3687
3866
  oldNodes[oi].replaceWith(freshRoot);
3867
+ } else if (!oldNodes[oi].hasAttribute("data-render-sig") && unidOf(units[nj].id) === oldNodes[oi].getAttribute("data-anchor")) {
3868
+ oldNodes[oi].replaceWith(freshRoot);
3688
3869
  } else {
3689
- return false;
3870
+ return `leaf render into wrapped slot (unit ${units[nj].id.slice(0, 24)})`;
3690
3871
  }
3691
3872
  this.wireUnit(freshRoot, units[nj]);
3692
3873
  }
@@ -3713,10 +3894,11 @@ var DocxodusEditor = (() => {
3713
3894
  }
3714
3895
  const prevW = prev ? this.unitWrapperOf(prev) : null;
3715
3896
  const nextW = next ? this.unitWrapperOf(next) : null;
3716
- if (prevW && nextW && prevW.parentElement !== nextW.parentElement) return false;
3897
+ if (prevW && nextW && prevW.parentElement !== nextW.parentElement)
3898
+ return "insert neighbors in different parents";
3717
3899
  if (prevW) prevW.after(el);
3718
3900
  else if (nextW) nextW.before(el);
3719
- else return false;
3901
+ else return "insert with no anchored neighbor";
3720
3902
  this.wireUnit(el, units[j]);
3721
3903
  }
3722
3904
  for (const i of pureRemoved) {
package/dist/editor.d.ts CHANGED
@@ -139,6 +139,15 @@ export declare class DocxEditor {
139
139
  * block, and cleared when a caret is collapsed inside a block (so it never goes stale).
140
140
  */
141
141
  private lastSelection;
142
+ /**
143
+ * Stable bookmark for a selection spanning independent editable blocks. Native controls such as
144
+ * a font-size combobox can take focus and collapse the live DOM selection; block ids + content
145
+ * offsets let the command restore that same range before applying. This is the multi-block
146
+ * counterpart to lastSelection above.
147
+ */
148
+ private lastCrossBlockSelection;
149
+ /** State for the mouse-selection bridge between independent contenteditable block hosts. */
150
+ private dragSelection;
142
151
  /** The docked header/footer bands, when `options.headerFooter` is on. */
143
152
  private region;
144
153
  /** Why the last reconcile() fell back to a full remount (null = it patched). For
@@ -147,6 +156,17 @@ export declare class DocxEditor {
147
156
  private constructor();
148
157
  /** Track the last meaningful selection so focus-stealing toolbar controls can still target it. */
149
158
  private readonly onSelectionChange;
159
+ /** Start tracking a normal primary-button text drag inside one editable block. */
160
+ private readonly onMouseDown;
161
+ /**
162
+ * Browsers fence native mouse selection at a contenteditable host boundary. Once a drag reaches
163
+ * another block in the same OOXML story, take over just that gesture and create the cross-block
164
+ * Selection the editor's existing multi-block command path consumes. Intra-block selection stays
165
+ * entirely native, and separate hosts remain intact for safe per-anchor commits.
166
+ */
167
+ private readonly onMouseMove;
168
+ /** Commit the final cross-block endpoint before releasing the gesture state. */
169
+ private readonly onMouseUp;
150
170
  /** The editable block (contenteditable [data-anchor]) containing `node`, if any, within this editor.
151
171
  * Fenced by `container`, not `editRoot`, so header/footer band blocks — which live outside the
152
172
  * body edit root by design — also register. The fence still rejects other editors on the page. */
@@ -266,9 +286,20 @@ export declare class DocxEditor {
266
286
  private syncBlock;
267
287
  /** Render a block by anchor and parse it into a detached element (null on error). */
268
288
  private renderInto;
289
+ /** Render two blocks in ONE batched bridge call when the bundle carries RenderBlocksHtml —
290
+ * the per-render shell/converter setup is paid once instead of twice, which matters on the
291
+ * Enter path (split renders both halves synchronously under the keystroke). Falls back to
292
+ * two per-block renders on older bundles. Output is renderInto-identical per block (both
293
+ * routes share the same extraction). */
294
+ private renderTwo;
269
295
  /** The editable block immediately before `el` within its own root, or null. */
270
296
  private previousEditable;
271
297
  private parseEdit;
298
+ /**
299
+ * Restore a cross-block selection after a native toolbar control took focus. The bookmark uses
300
+ * stable anchor ids and content offsets, so it also survives incremental block swaps.
301
+ */
302
+ private restoreCrossBlockSelection;
272
303
  /** Editable blocks the current selection covers, in document order. Uses Range.comparePoint
273
304
  * (robust to a selection boundary that normalized onto a wrapper element rather than a block
274
305
  * or text node — Range.intersectsNode misses the end block at a `(block, childCount)` boundary).
@@ -488,9 +519,9 @@ export declare class DocxEditor {
488
519
  /** The `[data-anchor]` element of a fresh render root (the root itself for a leaf
489
520
  * block, its descendant for a wrapper-shaped render like a table's align div). */
490
521
  private static anchorElOf;
491
- /** Insert/remove/swap body unit nodes per the diff. Returns false to bail (parent
492
- * ambiguity, order violation, wrapper semantics) — the session is already correct,
493
- * so bailing just means a full repaint. */
522
+ /** Insert/remove/swap body unit nodes per the diff. Returns `true` on success or a
523
+ * bail-reason string (parent ambiguity, order violation, wrapper semantics) — the
524
+ * session is already correct, so bailing just means a full repaint. */
494
525
  private applyBodyDiff;
495
526
  /** Wire a freshly rendered unit root (and its nested blocks) and stamp the unit's
496
527
  * content signature on its `[data-anchor]` element — the element the next
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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"}