docxodus 9.1.1 → 9.3.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.
- package/README.md +39 -18
- package/dist/editor-reconcile.d.ts +5 -0
- package/dist/editor-reconcile.d.ts.map +1 -1
- package/dist/editor-reconcile.js +23 -2
- package/dist/editor-reconcile.js.map +1 -1
- package/dist/editor.bundle.js +5099 -283
- package/dist/editor.d.ts +112 -0
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +742 -55
- package/dist/editor.js.map +1 -1
- package/dist/embed.bundle.js +5215 -331
- package/dist/embed.d.ts +25 -0
- package/dist/embed.d.ts.map +1 -1
- package/dist/embed.iife.js +5201 -330
- package/dist/embed.js +77 -0
- package/dist/embed.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/ribbon-chrome.d.ts +45 -0
- package/dist/ribbon-chrome.d.ts.map +1 -0
- package/dist/ribbon-chrome.js +965 -0
- package/dist/ribbon-chrome.js.map +1 -0
- package/dist/ribbon.d.ts +153 -0
- package/dist/ribbon.d.ts.map +1 -0
- package/dist/ribbon.js +834 -0
- package/dist/ribbon.js.map +1 -0
- package/dist/session.bundle.js +6 -0
- package/dist/session.d.ts +2 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +4 -0
- package/dist/session.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/wasm/_framework/Docxodus.wasm +0 -0
- package/dist/wasm/_framework/Docxodus.wasm.br +0 -0
- package/dist/wasm/_framework/DocxodusWasm.wasm +0 -0
- package/dist/wasm/_framework/DocxodusWasm.wasm.br +0 -0
- package/dist/wasm/_framework/dotnet.boot.js +3 -3
- package/dist/wasm/_framework/dotnet.boot.js.br +0 -0
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -41,31 +41,41 @@ a 346-block, 94-footnote filing template. `save()` returns lossless bytes.
|
|
|
41
41
|
|
|
42
42
|

|
|
43
43
|
|
|
44
|
+
Two layers, so you can take as much UI as you want:
|
|
45
|
+
|
|
44
46
|
```ts
|
|
47
|
+
// The engine, with no chrome — bring your own UI.
|
|
45
48
|
import { DocxEditor } from 'docxodus';
|
|
46
49
|
const editor = DocxEditor.open(container, docxBytes, exports);
|
|
50
|
+
|
|
51
|
+
// Or the whole surface: tabbed ribbon, anchor rail, table picker, loading overlay.
|
|
52
|
+
import { mountRibbon } from 'docxodus';
|
|
53
|
+
const ribbon = mountRibbon(container, { exports });
|
|
54
|
+
ribbon.open(docxBytes, 'contract.docx');
|
|
47
55
|
```
|
|
48
56
|
|
|
49
|
-
|
|
50
|
-
a
|
|
57
|
+
The ribbon picks its layout from the width of the element you give it, so the same call serves a
|
|
58
|
+
full-page editor and a narrow embedded panel. [`examples/editor.html`](https://github.com/JSv4/Docxodus/blob/main/npm/examples/editor.html)
|
|
59
|
+
is a host for it in ~60 lines.
|
|
51
60
|
|
|
52
61
|
## Embed it with one script tag
|
|
53
62
|
|
|
54
|
-
The `embed` entry packages the viewer and editor behind
|
|
63
|
+
The `embed` entry packages the viewer and editor behind one-call factories, with the WASM
|
|
55
64
|
runtime location auto-detected — no build step, no configuration:
|
|
56
65
|
|
|
57
66
|
```html
|
|
58
|
-
<div id="doc"></div>
|
|
67
|
+
<div id="doc" style="height: 100dvh"></div>
|
|
59
68
|
<script type="module">
|
|
60
|
-
import {
|
|
61
|
-
const
|
|
62
|
-
// ...later: const editedBytes =
|
|
69
|
+
import { createRibbonEditor } from 'https://cdn.jsdelivr.net/npm/docxodus@9.2.0/dist/embed.bundle.js';
|
|
70
|
+
const ribbon = await createRibbonEditor('#doc', './contract.docx'); // or bytes / Blob / File
|
|
71
|
+
// ...later: const editedBytes = ribbon.save();
|
|
63
72
|
</script>
|
|
64
73
|
```
|
|
65
74
|
|
|
66
|
-
`
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
That gives you the full editor UI. `createEditor('#doc', source, options?)` is the same document
|
|
76
|
+
without the chrome, and `createViewer('#doc', source, options?)` is the read-only counterpart.
|
|
77
|
+
Bundler users get the same API from `docxodus/embed`; classic-script pages can load
|
|
78
|
+
`dist/embed.iife.js` for a global `Docxodus`. See [Embedding via CDN](#embedding-via-cdn) below.
|
|
69
79
|
|
|
70
80
|
## Project it for an LLM
|
|
71
81
|
|
|
@@ -427,31 +437,42 @@ so a page can embed a full viewer or editor without hosting anything itself.
|
|
|
427
437
|
```html
|
|
428
438
|
<div id="viewer"></div>
|
|
429
439
|
<div id="editor"></div>
|
|
440
|
+
<div id="app" style="height: 100dvh"></div>
|
|
430
441
|
<script type="module">
|
|
431
|
-
import { createViewer, createEditor }
|
|
432
|
-
from 'https://cdn.jsdelivr.net/npm/docxodus@9.
|
|
442
|
+
import { createViewer, createEditor, createRibbonEditor }
|
|
443
|
+
from 'https://cdn.jsdelivr.net/npm/docxodus@9.2.0/dist/embed.bundle.js';
|
|
433
444
|
|
|
434
|
-
// Choose
|
|
445
|
+
// Choose a factory, or render several into separate containers as shown.
|
|
435
446
|
// Source may be a URL, Uint8Array, ArrayBuffer, Blob, or File.
|
|
436
447
|
const viewer = await createViewer('#viewer', './contract.docx');
|
|
437
448
|
|
|
438
449
|
// No source opens a blank "New document"; returns a DocxEditor.
|
|
439
450
|
const editor = await createEditor('#editor', './contract.docx', { paginated: false });
|
|
440
451
|
const bytes = editor.save(); // lossless DOCX bytes
|
|
452
|
+
|
|
453
|
+
// The whole editor UI in one call — ribbon, rail, table picker, loading overlay.
|
|
454
|
+
// Density follows the CONTAINER's width, so this is also the mobile answer.
|
|
455
|
+
const ribbon = await createRibbonEditor('#app', './contract.docx', {
|
|
456
|
+
chrome: 'auto', // 'full' | 'compact' | 'auto' (default)
|
|
457
|
+
rail: true, // the live kind:scope:unid / session / last-op readout
|
|
458
|
+
hint: true, // the editing hint above the document
|
|
459
|
+
loader: true, // the staged loading overlay; false removes it
|
|
460
|
+
});
|
|
441
461
|
</script>
|
|
442
462
|
```
|
|
443
463
|
|
|
444
464
|
`dist/embed.bundle.js` is a self-contained ESM bundle re-exporting the entire main API
|
|
445
|
-
(convert, compare, diff, sessions, annotations) plus
|
|
446
|
-
so it also works as
|
|
465
|
+
(convert, compare, diff, sessions, annotations) plus
|
|
466
|
+
`createViewer`/`createEditor`/`createRibbonEditor`/`mountRibbon`/`DocxEditor`, so it also works as
|
|
467
|
+
a no-build way to use any other function.
|
|
447
468
|
|
|
448
469
|
For pages that can't use modules, `dist/embed.iife.js` exposes the same surface as a global:
|
|
449
470
|
|
|
450
471
|
```html
|
|
451
472
|
<div id="doc"></div>
|
|
452
|
-
<script src="https://cdn.jsdelivr.net/npm/docxodus@9.
|
|
473
|
+
<script src="https://cdn.jsdelivr.net/npm/docxodus@9.2.0/dist/embed.iife.js"></script>
|
|
453
474
|
<script>
|
|
454
|
-
Docxodus.
|
|
475
|
+
Docxodus.createRibbonEditor('#doc').then((ribbon) => { /* ... */ });
|
|
455
476
|
</script>
|
|
456
477
|
```
|
|
457
478
|
|
|
@@ -465,7 +486,7 @@ first `<bundle dir>/wasm/`, then `<bundle dir>/` as a fallback. On a CDN that re
|
|
|
465
486
|
|
|
466
487
|
### CDN caveats
|
|
467
488
|
|
|
468
|
-
- **Pin an exact version in production** (`docxodus@9.
|
|
489
|
+
- **Pin an exact version in production** (`docxodus@9.2.0`, not `@latest`) — CDN responses are
|
|
469
490
|
cached as immutable, and the wire shapes between the JS wrappers and the WASM assemblies must
|
|
470
491
|
come from the same release.
|
|
471
492
|
- The build patches the .NET loader to fetch with `credentials: "omit"` — required because the
|
|
@@ -48,6 +48,11 @@ export interface UnitDiff {
|
|
|
48
48
|
oldIndex: number;
|
|
49
49
|
newIndex: number;
|
|
50
50
|
}>;
|
|
51
|
+
/** Exact-token units whose existing DOM node moves to a new document slot. */
|
|
52
|
+
moved: Array<{
|
|
53
|
+
oldIndex: number;
|
|
54
|
+
newIndex: number;
|
|
55
|
+
}>;
|
|
51
56
|
}
|
|
52
57
|
/** unid ("a1b2…") from a full anchor id ("p:body:a1b2…"). */
|
|
53
58
|
export declare function unidOf(id: string): string;
|
|
@@ -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;
|
|
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;IAC3D,8EAA8E;IAC9E,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;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,CA8G9E;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"}
|
package/dist/editor-reconcile.js
CHANGED
|
@@ -76,15 +76,36 @@ export function diffUnits(oldUnids, newUnits) {
|
|
|
76
76
|
const bar = token.indexOf("|");
|
|
77
77
|
return bar < 0 ? token : token.slice(0, bar);
|
|
78
78
|
};
|
|
79
|
-
const
|
|
79
|
+
const moved = [];
|
|
80
80
|
const usedRemoved = new Set();
|
|
81
|
+
const usedAdded = new Set();
|
|
82
|
+
// An exact token on both sides is a relocation, not a replacement. Pair these
|
|
83
|
+
// before same-unid substitutions so a pure reorder preserves its live DOM node.
|
|
84
|
+
const removedByToken = new Map();
|
|
85
|
+
for (const oi of removed) {
|
|
86
|
+
(removedByToken.get(oldUnids[oi]) ?? removedByToken.set(oldUnids[oi], []).get(oldUnids[oi])).push(oi);
|
|
87
|
+
}
|
|
88
|
+
for (const nj of added) {
|
|
89
|
+
const candidates = removedByToken.get(newUnids[nj]);
|
|
90
|
+
const oi = candidates?.find((i) => !usedRemoved.has(i));
|
|
91
|
+
if (oi !== undefined) {
|
|
92
|
+
moved.push({ oldIndex: oi, newIndex: nj });
|
|
93
|
+
usedRemoved.add(oi);
|
|
94
|
+
usedAdded.add(nj);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const substituted = [];
|
|
81
98
|
const removedByUnid = new Map();
|
|
82
99
|
for (const oi of removed) {
|
|
100
|
+
if (usedRemoved.has(oi))
|
|
101
|
+
continue;
|
|
83
102
|
const u = bareUnid(oldUnids[oi]);
|
|
84
103
|
(removedByUnid.get(u) ?? removedByUnid.set(u, []).get(u)).push(oi);
|
|
85
104
|
}
|
|
86
105
|
const unmatchedAdded = [];
|
|
87
106
|
for (const nj of added) {
|
|
107
|
+
if (usedAdded.has(nj))
|
|
108
|
+
continue;
|
|
88
109
|
const candidates = removedByUnid.get(bareUnid(newUnids[nj]));
|
|
89
110
|
const oi = candidates?.find((i) => !usedRemoved.has(i));
|
|
90
111
|
if (oi !== undefined) {
|
|
@@ -121,7 +142,7 @@ export function diffUnits(oldUnids, newUnits) {
|
|
|
121
142
|
}
|
|
122
143
|
}
|
|
123
144
|
}
|
|
124
|
-
return { keep, removed, added, substituted };
|
|
145
|
+
return { keep, removed, added, substituted, moved };
|
|
125
146
|
}
|
|
126
147
|
/**
|
|
127
148
|
* Whether this diff must fall back to a full remount:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-reconcile.js","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH;;oFAEoF;AACpF,MAAM,UAAU,OAAO,CAAC,IAAgB;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5D,CAAC;
|
|
1
|
+
{"version":3,"file":"editor-reconcile.js","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"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"}
|