docxodus 12.3.0 → 12.4.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.
Files changed (120) hide show
  1. package/README.md +31 -6
  2. package/dist/core.d.ts +924 -0
  3. package/dist/core.d.ts.map +1 -0
  4. package/dist/core.js +2094 -0
  5. package/dist/core.js.map +1 -0
  6. package/dist/editor.bundle.js +1206 -27
  7. package/dist/editor.d.ts +10 -1
  8. package/dist/editor.d.ts.map +1 -1
  9. package/dist/editor.js +48 -16
  10. package/dist/editor.js.map +1 -1
  11. package/dist/embed.bundle.js +12371 -11779
  12. package/dist/embed.d.ts +5 -2
  13. package/dist/embed.d.ts.map +1 -1
  14. package/dist/embed.iife.js +12282 -11690
  15. package/dist/embed.js +10 -3
  16. package/dist/embed.js.map +1 -1
  17. package/dist/export-assets.json +39 -39
  18. package/dist/history-checkpoints.d.ts +2 -0
  19. package/dist/history-checkpoints.d.ts.map +1 -1
  20. package/dist/history-checkpoints.js +2 -0
  21. package/dist/history-checkpoints.js.map +1 -1
  22. package/dist/history-controls.d.ts +6 -3
  23. package/dist/history-controls.d.ts.map +1 -1
  24. package/dist/history-controls.js +71 -29
  25. package/dist/history-controls.js.map +1 -1
  26. package/dist/index.d.ts +3 -923
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +2 -2093
  29. package/dist/index.js.map +1 -1
  30. package/dist/ribbon-chrome.d.ts +1 -1
  31. package/dist/ribbon-chrome.d.ts.map +1 -1
  32. package/dist/ribbon-chrome.js +6 -3
  33. package/dist/ribbon-chrome.js.map +1 -1
  34. package/dist/ribbon-history.d.ts +85 -0
  35. package/dist/ribbon-history.d.ts.map +1 -0
  36. package/dist/ribbon-history.js +508 -0
  37. package/dist/ribbon-history.js.map +1 -0
  38. package/dist/ribbon.d.ts +6 -0
  39. package/dist/ribbon.d.ts.map +1 -1
  40. package/dist/ribbon.js +47 -18
  41. package/dist/ribbon.js.map +1 -1
  42. package/dist/viewport.d.ts +3 -1
  43. package/dist/viewport.d.ts.map +1 -1
  44. package/dist/viewport.js +14 -0
  45. package/dist/viewport.js.map +1 -1
  46. package/dist/wasm/_framework/Docxodus.wasm +0 -0
  47. package/dist/wasm/_framework/Docxodus.wasm.br +0 -0
  48. package/dist/wasm/_framework/DocxodusWasm.wasm +0 -0
  49. package/dist/wasm/_framework/DocxodusWasm.wasm.br +0 -0
  50. package/dist/wasm/_framework/System.Collections.Concurrent.wasm +0 -0
  51. package/dist/wasm/_framework/System.Collections.Concurrent.wasm.br +0 -0
  52. package/dist/wasm/_framework/System.Collections.Immutable.wasm +0 -0
  53. package/dist/wasm/_framework/System.Collections.Immutable.wasm.br +0 -0
  54. package/dist/wasm/_framework/System.Collections.NonGeneric.wasm +0 -0
  55. package/dist/wasm/_framework/System.Collections.NonGeneric.wasm.br +0 -0
  56. package/dist/wasm/_framework/System.Collections.Specialized.wasm +0 -0
  57. package/dist/wasm/_framework/System.Collections.Specialized.wasm.br +0 -0
  58. package/dist/wasm/_framework/System.Collections.wasm +0 -0
  59. package/dist/wasm/_framework/System.Collections.wasm.br +0 -0
  60. package/dist/wasm/_framework/System.ComponentModel.Primitives.wasm +0 -0
  61. package/dist/wasm/_framework/System.ComponentModel.Primitives.wasm.br +0 -0
  62. package/dist/wasm/_framework/System.ComponentModel.TypeConverter.wasm +0 -0
  63. package/dist/wasm/_framework/System.ComponentModel.TypeConverter.wasm.br +0 -0
  64. package/dist/wasm/_framework/System.ComponentModel.wasm +0 -0
  65. package/dist/wasm/_framework/System.ComponentModel.wasm.br +0 -0
  66. package/dist/wasm/_framework/System.Console.wasm +0 -0
  67. package/dist/wasm/_framework/System.Console.wasm.br +0 -0
  68. package/dist/wasm/_framework/System.IO.Compression.wasm +0 -0
  69. package/dist/wasm/_framework/System.IO.Compression.wasm.br +0 -0
  70. package/dist/wasm/_framework/System.IO.Pipelines.wasm +0 -0
  71. package/dist/wasm/_framework/System.IO.Pipelines.wasm.br +0 -0
  72. package/dist/wasm/_framework/System.Linq.Expressions.wasm +0 -0
  73. package/dist/wasm/_framework/System.Linq.Expressions.wasm.br +0 -0
  74. package/dist/wasm/_framework/System.Linq.wasm +0 -0
  75. package/dist/wasm/_framework/System.Linq.wasm.br +0 -0
  76. package/dist/wasm/_framework/System.Memory.wasm +0 -0
  77. package/dist/wasm/_framework/System.Memory.wasm.br +0 -0
  78. package/dist/wasm/_framework/System.Net.Http.wasm +0 -0
  79. package/dist/wasm/_framework/System.Net.Http.wasm.br +0 -0
  80. package/dist/wasm/_framework/System.Net.Primitives.wasm +0 -0
  81. package/dist/wasm/_framework/System.Net.Primitives.wasm.br +0 -0
  82. package/dist/wasm/_framework/System.ObjectModel.wasm +0 -0
  83. package/dist/wasm/_framework/System.ObjectModel.wasm.br +0 -0
  84. package/dist/wasm/_framework/System.Private.CoreLib.wasm +0 -0
  85. package/dist/wasm/_framework/System.Private.CoreLib.wasm.br +0 -0
  86. package/dist/wasm/_framework/System.Private.Uri.wasm +0 -0
  87. package/dist/wasm/_framework/System.Private.Uri.wasm.br +0 -0
  88. package/dist/wasm/_framework/System.Private.Xml.Linq.wasm +0 -0
  89. package/dist/wasm/_framework/System.Private.Xml.Linq.wasm.br +0 -0
  90. package/dist/wasm/_framework/System.Private.Xml.wasm +0 -0
  91. package/dist/wasm/_framework/System.Private.Xml.wasm.br +0 -0
  92. package/dist/wasm/_framework/System.Runtime.InteropServices.JavaScript.wasm +0 -0
  93. package/dist/wasm/_framework/System.Runtime.InteropServices.JavaScript.wasm.br +0 -0
  94. package/dist/wasm/_framework/System.Runtime.wasm +0 -0
  95. package/dist/wasm/_framework/System.Runtime.wasm.br +0 -0
  96. package/dist/wasm/_framework/System.Security.Cryptography.wasm +0 -0
  97. package/dist/wasm/_framework/System.Security.Cryptography.wasm.br +0 -0
  98. package/dist/wasm/_framework/System.Text.Encodings.Web.wasm +0 -0
  99. package/dist/wasm/_framework/System.Text.Encodings.Web.wasm.br +0 -0
  100. package/dist/wasm/_framework/System.Text.Json.wasm +0 -0
  101. package/dist/wasm/_framework/System.Text.Json.wasm.br +0 -0
  102. package/dist/wasm/_framework/System.Text.RegularExpressions.wasm +0 -0
  103. package/dist/wasm/_framework/System.Text.RegularExpressions.wasm.br +0 -0
  104. package/dist/wasm/_framework/System.Xml.Linq.wasm +0 -0
  105. package/dist/wasm/_framework/System.Xml.Linq.wasm.br +0 -0
  106. package/dist/wasm/_framework/System.Xml.XDocument.wasm +0 -0
  107. package/dist/wasm/_framework/System.Xml.XDocument.wasm.br +0 -0
  108. package/dist/wasm/_framework/System.wasm +0 -0
  109. package/dist/wasm/_framework/System.wasm.br +0 -0
  110. package/dist/wasm/_framework/dotnet.boot.js +34 -34
  111. package/dist/wasm/_framework/dotnet.boot.js.br +0 -0
  112. package/dist/wasm/_framework/dotnet.js +1 -1
  113. package/dist/wasm/_framework/dotnet.js.br +0 -0
  114. package/dist/wasm/_framework/dotnet.native.js +3 -3
  115. package/dist/wasm/_framework/dotnet.native.js.br +0 -0
  116. package/dist/wasm/_framework/dotnet.native.wasm +0 -0
  117. package/dist/wasm/_framework/dotnet.native.wasm.br +0 -0
  118. package/dist/wasm/_framework/dotnet.runtime.js +1 -1
  119. package/dist/wasm/_framework/dotnet.runtime.js.br +0 -0
  120. package/package.json +14 -8
@@ -0,0 +1,508 @@
1
+ import { HistoryCheckpoints } from './history-checkpoints.js';
2
+ import { mountHistoryControls, historyControlError } from './history-controls.js';
3
+ import { openIndexedDbHistoryStore } from './history-indexeddb.js';
4
+ import { DocxHistoryError, MAX_HISTORY_ARCHIVE_BYTES } from './history.js';
5
+ /** Shared ribbon lifecycle, browser persistence and separate previews. No autosave or network sync. */
6
+ export class RibbonHistory {
7
+ constructor(ribbon, options) {
8
+ this.ribbon = ribbon;
9
+ this.options = options;
10
+ this.events = new AbortController();
11
+ this.identity = { id: crypto.randomUUID(), name: 'Untitled.docx' };
12
+ this.destroyed = false;
13
+ this.installing = false;
14
+ this.dirty = false;
15
+ this.generation = 0;
16
+ this.captured = -1;
17
+ this.savedVersion = null;
18
+ this.observedVersion = null;
19
+ this.capturedVersion = null;
20
+ const doc = ribbon.element.ownerDocument;
21
+ this.prefix = `docxodus:versions:${options.storageName ?? 'docxodus-editor'}:document:`;
22
+ this.lastKey = `docxodus:versions:${options.storageName ?? 'docxodus-editor'}:workspace:${options.workspaceId ?? crypto.randomUUID()}`;
23
+ const style = doc.createElement('style');
24
+ style.textContent = HISTORY_DRAWER_CSS;
25
+ this.dialog = doc.createElement('dialog');
26
+ this.dialog.className = 'dxr-history-dialog';
27
+ this.dialog.setAttribute('aria-label', 'Version history');
28
+ const header = doc.createElement('div');
29
+ header.className = 'dxr-history-header';
30
+ this.dialog.append(header);
31
+ const close = this.button('Close version history', () => this.dialog.close(), header);
32
+ close.className = 'dxr-history-close';
33
+ close.textContent = 'Close ✕';
34
+ this.source = doc.createElement('p');
35
+ this.source.className = 'dxr-history-source';
36
+ this.status = doc.createElement('p');
37
+ this.status.setAttribute('role', 'status');
38
+ this.status.className = 'dxr-history-status';
39
+ const recentLabel = doc.createElement('label');
40
+ recentLabel.textContent = 'Saved documents on this device';
41
+ this.recent = doc.createElement('select');
42
+ this.recent.setAttribute('aria-label', recentLabel.textContent);
43
+ recentLabel.append(this.recent);
44
+ this.recent.addEventListener('change', () => this.command(async () => {
45
+ const selectedId = this.recent.value;
46
+ this.recent.value = this.identity.id;
47
+ const selected = this.readIdentity(localStorage.getItem(this.prefix + selectedId));
48
+ if (!selected || !this.confirmReplace())
49
+ return;
50
+ await this.loadSaved(selected);
51
+ await this.mountPanel();
52
+ this.updateRecent();
53
+ }), { signal: this.events.signal });
54
+ this.dialog.append(this.source, this.status, recentLabel);
55
+ this.resumeButton = this.button('Continue editing this document', () => this.command(() => this.importArchive()), this.dialog);
56
+ this.back = this.button('Back to my document', () => this.command(async () => {
57
+ await this.closeArchive();
58
+ await this.mountPanel();
59
+ }), this.dialog);
60
+ this.body = doc.createElement('div');
61
+ this.dialog.append(this.body);
62
+ this.previewDialog = doc.createElement('dialog');
63
+ this.previewDialog.className = 'dxr-version-preview';
64
+ this.previewDialog.setAttribute('aria-label', 'Version preview');
65
+ this.panelObserver = new MutationObserver(() => this.syncBusy());
66
+ ribbon.element.append(style, this.dialog, this.previewDialog);
67
+ for (const dialog of [this.dialog, this.previewDialog]) {
68
+ dialog.addEventListener('keydown', event => event.stopPropagation(), { signal: this.events.signal });
69
+ dialog.addEventListener('click', event => {
70
+ if (event.target === dialog) {
71
+ const rect = dialog.getBoundingClientRect();
72
+ if (event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom)
73
+ dialog.close();
74
+ }
75
+ }, { signal: this.events.signal });
76
+ }
77
+ this.dialog.addEventListener('close', () => ribbon.control('history')?.focus(), { signal: this.events.signal });
78
+ ribbon.control('history')?.addEventListener('click', () => { void this.show(); }, { signal: this.events.signal });
79
+ doc.defaultView?.addEventListener('beforeunload', event => {
80
+ if (this.hasUnsavedChanges || this.busy)
81
+ event.preventDefault();
82
+ }, { signal: this.events.signal });
83
+ doc.defaultView?.addEventListener('pagehide', event => {
84
+ if (!event.persisted)
85
+ void this.destroy();
86
+ }, { signal: this.events.signal });
87
+ }
88
+ get busy() { return !!this.active || this.panel?.element.getAttribute('aria-busy') === 'true'; }
89
+ get hasUnsavedChanges() {
90
+ return this.dirty || (this.ribbon.editor?.version ?? null) !== this.savedVersion;
91
+ }
92
+ /** Called by the ribbon before a programmatic replacement. */
93
+ beforeOpen() {
94
+ if (!this.installing && this.busy)
95
+ throw new DocxHistoryError('Busy', 'Finish the version action before opening another document.');
96
+ }
97
+ /** A new DOCX is a new document identity, even if its filename matches another document. */
98
+ documentOpened(name) {
99
+ if (this.installing)
100
+ return;
101
+ this.identity = { id: crypto.randomUUID(), name };
102
+ this.draft = undefined;
103
+ this.dirty = false;
104
+ this.generation++;
105
+ this.savedVersion = this.observedVersion = this.ribbon.editor?.version ?? null;
106
+ this.dialog.close();
107
+ this.previewDialog.close();
108
+ void this.closeArchive();
109
+ }
110
+ edited() {
111
+ const version = this.ribbon.editor?.version ?? null;
112
+ if (version !== null && version === this.observedVersion)
113
+ return;
114
+ this.observedVersion = version;
115
+ this.dirty = true;
116
+ this.generation++;
117
+ }
118
+ /** Restores a saved workspace only when requested by the host, before exposing the editor. */
119
+ async resume() {
120
+ if (!this.options.workspaceId)
121
+ return;
122
+ try {
123
+ const previous = this.readIdentity(localStorage.getItem(this.lastKey));
124
+ if (previous)
125
+ await this.run(() => this.loadSaved(previous));
126
+ }
127
+ catch (error) {
128
+ // Storage denial/corruption must not prevent an ordinary document from opening.
129
+ this.ribbon.setStatus('Your document is open. Version history is unavailable on this device.');
130
+ this.status.textContent = this.explain(error);
131
+ }
132
+ }
133
+ async show() {
134
+ if (this.destroyed)
135
+ return;
136
+ if (!this.dialog.open)
137
+ this.dialog.showModal();
138
+ if (this.busy)
139
+ return;
140
+ await this.run(async () => { await this.mountPanel(); this.updateRecent(); }).catch(() => { });
141
+ }
142
+ async openFile(file) {
143
+ await this.run(async () => {
144
+ if (/\.docxhistory$/i.test(file.name)) {
145
+ if (file.size > MAX_HISTORY_ARCHIVE_BYTES)
146
+ throw new DocxHistoryError('ResourceLimit', 'History file is too large.');
147
+ const bytes = new Uint8Array(await file.arrayBuffer());
148
+ const reader = await this.options.openArchive(bytes);
149
+ try {
150
+ await reader.read();
151
+ }
152
+ catch (error) {
153
+ reader.close();
154
+ throw error;
155
+ }
156
+ await this.closeArchive();
157
+ this.archive = { reader, bytes, name: file.name };
158
+ if (!this.dialog.open)
159
+ this.dialog.showModal();
160
+ await this.mountPanel();
161
+ this.updateRecent();
162
+ }
163
+ else {
164
+ if (!/\.docx$/i.test(file.name))
165
+ throw new Error('Choose a Word document or a document with version history.');
166
+ if (!this.confirmReplace())
167
+ return;
168
+ const bytes = new Uint8Array(await file.arrayBuffer());
169
+ this.install(bytes, { id: crypto.randomUUID(), name: file.name });
170
+ this.draft = undefined;
171
+ this.dirty = true;
172
+ await this.closeArchive();
173
+ this.dialog.close();
174
+ }
175
+ }).catch(() => { });
176
+ }
177
+ async newDocument() {
178
+ await this.run(async () => {
179
+ if (!this.confirmReplace())
180
+ return;
181
+ this.installing = true;
182
+ try {
183
+ this.ribbon.openBlank('Untitled.docx');
184
+ }
185
+ finally {
186
+ this.installing = false;
187
+ }
188
+ this.identity = { id: crypto.randomUUID(), name: 'Untitled.docx' };
189
+ this.draft = undefined;
190
+ this.dirty = false;
191
+ this.generation++;
192
+ this.savedVersion = this.observedVersion = this.ribbon.editor?.version ?? null;
193
+ // Choosing New survives a reload instead of silently reopening the previous document.
194
+ try {
195
+ localStorage.removeItem(this.lastKey);
196
+ }
197
+ catch { /* editing does not require storage */ }
198
+ await this.closeArchive();
199
+ this.dialog.close();
200
+ }).catch(() => { });
201
+ }
202
+ async destroy() {
203
+ if (this.destroyed)
204
+ return;
205
+ this.destroyed = true;
206
+ this.events.abort();
207
+ this.dialog.remove();
208
+ this.previewDialog.remove();
209
+ this.panelObserver.disconnect();
210
+ await this.active?.catch(() => { });
211
+ await this.closeArchive();
212
+ this.preview?.destroy();
213
+ this.client?.close();
214
+ this.store?.close();
215
+ }
216
+ async ensureStorage() {
217
+ if (this.client)
218
+ return;
219
+ const store = await openIndexedDbHistoryStore(this.options.storageName ?? 'docxodus-editor');
220
+ try {
221
+ this.client = this.options.openHistory(store.storage);
222
+ this.store = store;
223
+ }
224
+ catch (error) {
225
+ store.close();
226
+ throw error;
227
+ }
228
+ }
229
+ async ensureDraft() {
230
+ await this.ensureStorage();
231
+ if (!this.draft) {
232
+ const document = this.client.document(this.identity.id);
233
+ this.draft = { ...this.identity, checkpoints: await HistoryCheckpoints.open(document, this.store.journal(this.identity.id)) };
234
+ }
235
+ return this.draft;
236
+ }
237
+ async loadSaved(identity) {
238
+ await this.ensureStorage();
239
+ const document = this.client.document(identity.id);
240
+ const checkpoints = await HistoryCheckpoints.open(document, this.store.journal(identity.id));
241
+ const pending = checkpoints.pendingRequest;
242
+ const view = checkpoints.view;
243
+ if (!view && pending?.kind !== 'save')
244
+ throw new Error('This saved document is no longer on this device.');
245
+ const bytes = pending?.kind === 'save' ? pending.bytes : await document.exportDocx(view.version.id);
246
+ this.install(bytes, identity);
247
+ this.draft = { ...identity, checkpoints };
248
+ this.dirty = pending?.kind === 'save';
249
+ if (pending?.kind === 'save')
250
+ this.captureState(pending.bytes);
251
+ await this.closeArchive();
252
+ this.remember();
253
+ }
254
+ install(bytes, identity) {
255
+ if (this.destroyed)
256
+ throw new DocxHistoryError('Closed', 'The editor is closed.');
257
+ this.installing = true;
258
+ try {
259
+ this.ribbon.open(bytes, identity.name);
260
+ }
261
+ finally {
262
+ this.installing = false;
263
+ }
264
+ this.identity = identity;
265
+ this.dirty = false;
266
+ this.generation++;
267
+ this.savedVersion = this.observedVersion = this.ribbon.editor?.version ?? null;
268
+ }
269
+ async mountPanel() {
270
+ const current = this.archive ?? await this.ensureDraft();
271
+ const writable = 'checkpoints' in current;
272
+ const holder = this.body.ownerDocument.createElement('div');
273
+ const panel = mountHistoryControls(holder, {
274
+ reader: writable ? current.checkpoints.document : current.reader,
275
+ checkpoints: writable ? current.checkpoints : undefined,
276
+ author: this.options.author, documentName: current.name,
277
+ capture: writable ? () => {
278
+ const bytes = this.ribbon.save();
279
+ if (!bytes)
280
+ throw new Error('Open a document first.');
281
+ // Remember the identity before publication, so uncertain saves can recover after reload.
282
+ this.remember();
283
+ this.captureState(bytes);
284
+ return bytes;
285
+ } : undefined,
286
+ confirmRestore: writable ? title => this.confirm(`Restore ${title}?${this.hasUnsavedChanges ? '\n\nYour unsaved changes will be replaced.' : ''}\n\nAll saved versions will be kept.`) : undefined,
287
+ onCheckpoint: async (view, action, request) => {
288
+ if (this.destroyed)
289
+ return;
290
+ const savedCapture = action === 'save' || (action === 'retry' && request?.kind === 'save'
291
+ && this.capturedBytes && sameBytes(this.capturedBytes, request.bytes));
292
+ if (savedCapture && this.captured === this.generation && this.capturedVersion === (this.ribbon.editor?.version ?? null)) {
293
+ this.dirty = false;
294
+ this.savedVersion = this.capturedVersion;
295
+ }
296
+ this.captured = -1;
297
+ this.capturedBytes = undefined;
298
+ if ((action === 'restore' || (action === 'retry' && request?.kind === 'restore')) && writable)
299
+ this.install(await current.checkpoints.document.exportDocx(view.version.id), this.identity);
300
+ this.remember();
301
+ this.updateRecent();
302
+ },
303
+ restoreUpdatesDraft: true,
304
+ preview: (bytes, title) => this.showPreview(bytes, title),
305
+ });
306
+ try {
307
+ await panel.ready;
308
+ }
309
+ catch (error) {
310
+ await panel.destroy();
311
+ throw error;
312
+ }
313
+ if (this.destroyed) {
314
+ await panel.destroy();
315
+ return;
316
+ }
317
+ await this.panel?.destroy();
318
+ this.panel = panel;
319
+ this.body.replaceChildren(holder);
320
+ this.panelObserver.disconnect();
321
+ this.panelObserver.observe(panel.element, { attributes: true, attributeFilter: ['aria-busy'] });
322
+ this.source.textContent = current.name;
323
+ this.resumeButton.hidden = this.back.hidden = writable;
324
+ this.status.textContent = writable
325
+ ? 'Your saved versions stay on this device.'
326
+ : 'You’re browsing a history file. Your open document is safe.';
327
+ }
328
+ async showPreview(bytes, title) {
329
+ const doc = this.previewDialog.ownerDocument;
330
+ const holder = doc.createElement('div');
331
+ holder.className = 'dxr-version-paper';
332
+ const preview = await this.options.preview(holder, bytes);
333
+ if (this.destroyed) {
334
+ preview.destroy();
335
+ return;
336
+ }
337
+ const heading = doc.createElement('h2');
338
+ heading.textContent = title;
339
+ const actions = doc.createElement('div');
340
+ actions.className = 'dxr-version-actions';
341
+ this.button('Back to version history', () => this.previewDialog.close(), actions);
342
+ if (!this.archive)
343
+ this.button('Use as draft', () => this.command(async () => {
344
+ if (!this.confirmReplace())
345
+ return;
346
+ this.install(bytes, this.identity);
347
+ this.dirty = true;
348
+ this.previewDialog.close();
349
+ this.dialog.close();
350
+ }), actions);
351
+ this.button('Download this version', () => download(bytes, 'version.docx', doc), actions);
352
+ this.preview?.destroy();
353
+ this.preview = preview;
354
+ this.previewDialog.replaceChildren(heading, actions, holder);
355
+ if (!this.previewDialog.open)
356
+ this.previewDialog.showModal();
357
+ }
358
+ async importArchive() {
359
+ if (!this.archive || !this.confirmReplace())
360
+ return;
361
+ await this.ensureStorage();
362
+ const imported = await this.client.importHistoryArchive(this.archive.bytes);
363
+ const identity = { id: imported.archive.documentId, name: this.archive.name.replace(/\.docxhistory$/i, '.docx') };
364
+ const document = this.client.document(identity.id);
365
+ const checkpoints = await HistoryCheckpoints.open(document, this.store.journal(identity.id), imported.view);
366
+ this.install(await document.exportDocx(imported.view.version.id), identity);
367
+ this.draft = { ...identity, checkpoints };
368
+ this.remember();
369
+ await this.closeArchive();
370
+ await this.mountPanel();
371
+ this.updateRecent();
372
+ }
373
+ async closeArchive() {
374
+ this.panelObserver.disconnect();
375
+ const panel = this.panel;
376
+ this.panel = undefined;
377
+ const archive = this.archive;
378
+ this.archive = undefined;
379
+ await panel?.destroy();
380
+ archive?.reader.close();
381
+ }
382
+ remember() {
383
+ localStorage.setItem(this.prefix + this.identity.id, JSON.stringify(this.identity));
384
+ localStorage.setItem(this.lastKey, JSON.stringify(this.identity));
385
+ }
386
+ readIdentity(value) {
387
+ if (!value)
388
+ return null;
389
+ const identity = JSON.parse(value);
390
+ if (typeof identity?.id !== 'string' || !identity.id || typeof identity?.name !== 'string')
391
+ return null;
392
+ return { id: identity.id, name: identity.name };
393
+ }
394
+ updateRecent() {
395
+ this.recent.replaceChildren(new Option('Choose a saved document…', ''));
396
+ for (let i = 0; i < localStorage.length; i++) {
397
+ const key = localStorage.key(i);
398
+ if (!key.startsWith(this.prefix))
399
+ continue;
400
+ try {
401
+ const identity = this.readIdentity(localStorage.getItem(key));
402
+ if (identity)
403
+ this.recent.append(new Option(identity.name, identity.id));
404
+ }
405
+ catch { /* a damaged catalog entry does not hide other saved documents */ }
406
+ }
407
+ this.recent.value = this.identity.id;
408
+ this.recent.parentElement.hidden = this.recent.options.length <= 1;
409
+ }
410
+ confirm(message) { return this.dialog.ownerDocument.defaultView?.confirm(message) ?? false; }
411
+ captureState(bytes) {
412
+ this.captured = this.generation;
413
+ this.capturedVersion = this.ribbon.editor?.version ?? null;
414
+ this.capturedBytes = bytes.slice();
415
+ }
416
+ confirmReplace() { return !this.hasUnsavedChanges || this.confirm('Replace your open document? Save a version or download it first to keep your unsaved changes.'); }
417
+ explain(error) { return historyControlError(error, this.draft?.checkpoints.hasPending); }
418
+ command(action) { void this.run(action).catch(() => { }); }
419
+ syncBusy() {
420
+ const busy = this.busy;
421
+ // Closing the drawer while publication runs must not enable edits that a restore would replace.
422
+ this.ribbon.surface.inert = busy;
423
+ const chrome = this.ribbon.element.querySelector('.dxr-chrome');
424
+ if (chrome)
425
+ chrome.inert = busy;
426
+ this.recent.disabled = this.resumeButton.disabled = this.back.disabled = busy;
427
+ const file = this.ribbon.control('file');
428
+ if (file)
429
+ file.disabled = busy;
430
+ const create = this.ribbon.control('new');
431
+ if (create)
432
+ create.disabled = busy;
433
+ }
434
+ async run(action) {
435
+ if (this.destroyed || this.busy)
436
+ return;
437
+ const work = Promise.resolve().then(action);
438
+ this.active = work;
439
+ this.dialog.setAttribute('aria-busy', 'true');
440
+ this.body.inert = true;
441
+ this.syncBusy();
442
+ this.ribbon.element.querySelector('.dxr-chrome').inert = true;
443
+ this.ribbon.surface.inert = true;
444
+ try {
445
+ await work;
446
+ }
447
+ catch (error) {
448
+ this.status.textContent = this.explain(error);
449
+ this.ribbon.setStatus(this.explain(error));
450
+ throw error;
451
+ }
452
+ finally {
453
+ this.active = undefined;
454
+ this.body.inert = false;
455
+ this.dialog.setAttribute('aria-busy', 'false');
456
+ this.syncBusy();
457
+ this.ribbon.element.querySelector('.dxr-chrome')?.removeAttribute('inert');
458
+ this.ribbon.surface.inert = false;
459
+ }
460
+ }
461
+ button(label, action, parent) {
462
+ const button = parent.ownerDocument.createElement('button');
463
+ button.type = 'button';
464
+ button.textContent = label;
465
+ button.setAttribute('aria-label', label);
466
+ button.addEventListener('click', action, { signal: this.events.signal });
467
+ parent.append(button);
468
+ return button;
469
+ }
470
+ }
471
+ function download(bytes, name, doc) {
472
+ const url = URL.createObjectURL(new Blob([bytes.slice()], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }));
473
+ const link = doc.createElement('a');
474
+ link.href = url;
475
+ link.download = name;
476
+ link.click();
477
+ setTimeout(() => URL.revokeObjectURL(url), 1000);
478
+ }
479
+ function sameBytes(left, right) {
480
+ return left.length === right.length && left.every((value, index) => value === right[index]);
481
+ }
482
+ const HISTORY_DRAWER_CSS = `
483
+ .dxr-history-dialog,.dxr-version-preview{box-sizing:border-box;color:#243b42;background:#fff;border:1px solid #dce5e5;box-shadow:0 24px 80px #163f4033;font:14px/1.5 system-ui,sans-serif;padding:24px;overscroll-behavior:contain}
484
+ .dxr-history-dialog{width:min(420px,calc(100vw - 24px));max-height:calc(100dvh - 24px);margin:12px 12px 12px auto;border-radius:18px}
485
+ .dxr-history-dialog::backdrop,.dxr-version-preview::backdrop{background:#16323333;backdrop-filter:blur(2px)}
486
+ .dxr-history-dialog [hidden],.dxr-version-preview [hidden]{display:none!important}
487
+ .dxr-history-dialog button,.dxr-version-preview button{font:inherit;color:inherit;border:1px solid #cbd9d9;background:#fff;border-radius:9px;min-height:40px;padding:8px 12px;cursor:pointer}
488
+ .dxr-history-dialog button:hover,.dxr-version-preview button:hover{background:#eff8f6}
489
+ .dxr-history-dialog :focus-visible,.dxr-version-preview :focus-visible{outline:3px solid #0f766e;outline-offset:3px}
490
+ .dxr-history-header{display:flex;justify-content:flex-end;position:sticky;top:0;z-index:2;background:#fff;box-shadow:0 0 0 6px #fff}
491
+ .dxr-history-dialog .dxr-history-close{border:0;font-size:13px;background:#fff}
492
+ .dxr-history-source{font-weight:600;overflow-wrap:anywhere;margin:12px 0 4px}
493
+ .dxr-history-status{color:#597273;margin:4px 0 18px}
494
+ .dxr-history-dialog>label{display:block;font-size:12px;color:#597273;margin:12px 0}
495
+ .dxr-history-dialog>label select{display:block;width:100%;font:inherit;padding:8px;border:1px solid #cbd9d9;border-radius:8px;background:#fff;color:#243b42}
496
+ .dxr-history-dialog .dx-history{padding:0;border:0;border-radius:0;background:transparent}
497
+ .dxr-history-dialog .dx-history h2{font-size:24px;letter-spacing:-.6px;margin:12px 0}
498
+ .dxr-history-dialog .dx-history button[data-history-action=save]{background:#0f766e;border-color:#0f766e;color:#fff;font-weight:600}
499
+ .dxr-history-dialog .dx-history select{border-radius:9px;background:#f8fbfa}
500
+ .dxr-history-dialog .dx-history option{padding:10px;font-size:13px}
501
+ .dxr-version-preview{width:min(1080px,calc(100vw - 24px));max-height:calc(100dvh - 24px);border-radius:18px}
502
+ .dxr-version-preview h2{font-size:20px;margin:0 0 12px;overflow-wrap:anywhere}
503
+ .dxr-version-actions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
504
+ .dxr-version-paper{max-height:70dvh;overflow:auto;background:#f2f6f5;padding:20px;border-radius:10px}
505
+ @media(max-width:520px){.dxr-history-dialog,.dxr-version-preview{padding:16px}.dxr-version-paper{padding:8px}}
506
+ @media(prefers-reduced-motion:no-preference){.dxr-history-dialog[open]{animation:dxr-history-in .16s ease-out}@keyframes dxr-history-in{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:translateX(0)}}}
507
+ `;
508
+ //# sourceMappingURL=ribbon-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ribbon-history.js","sourceRoot":"","sources":["../src/ribbon-history.ts"],"names":[],"mappings":"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"}
package/dist/ribbon.d.ts CHANGED
@@ -26,6 +26,9 @@
26
26
  */
27
27
  import { DocxEditor } from "./editor.js";
28
28
  import type { DocxEditorExports, DocxEditorOptions } from "./editor.js";
29
+ import { RibbonHistory } from './ribbon-history.js';
30
+ import type { RibbonHistoryBinding } from './ribbon-history.js';
31
+ export type { RibbonHistoryBinding, RibbonHistoryOptions } from './ribbon-history.js';
29
32
  export { DocxEditor } from "./editor.js";
30
33
  export type { DocxEditorExports, DocxEditorOptions } from "./editor.js";
31
34
  /** Which layout the chrome uses. "auto" measures the root and switches at `compactBreakpoint`. */
@@ -62,6 +65,8 @@ export interface RibbonLoaderOptions {
62
65
  onRetry?: () => void;
63
66
  }
64
67
  export interface RibbonOptions extends DocxEditorOptions {
68
+ /** Optional version-history services. createRibbonEditor accepts history: true to wire browser storage. */
69
+ history?: RibbonHistoryBinding;
65
70
  /** WASM exports. Omit to mount chrome first (showing the loader) and call `setExports` later. */
66
71
  exports?: DocxEditorExports;
67
72
  /** Layout density. Default "auto". */
@@ -120,6 +125,7 @@ export interface RibbonLoader {
120
125
  fail(error: unknown): void;
121
126
  }
122
127
  export interface RibbonEditor {
128
+ readonly history: RibbonHistory | null;
123
129
  /** The mounted root element (carries `data-state` and `data-chrome`). */
124
130
  readonly element: HTMLElement;
125
131
  /** The element the document renders into. */
@@ -1 +1 @@
1
- {"version":3,"file":"ribbon.d.ts","sourceRoot":"","sources":["../src/ribbon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ribbon.d.ts","sourceRoot":"","sources":["../src/ribbon.ts"],"names":[],"mappings":"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"}