pptx-angular-viewer 4.1.2 → 4.1.3

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/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ A release listed with no entries carried no Conventional Commit in this package'
7
7
  scope: scripts/release-plan.mjs re-releases a package whenever any of its files
8
8
  change, not only on conventional ones.
9
9
 
10
+ ## [4.1.2](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-angular-viewer@4.1.2) - 2026-09-21
11
+
12
+ ### Bug Fixes
13
+
14
+ - **autosave:** Harden recovery dialogs (by @yunfeizhu) ([29ef529](https://github.com/ChristopherVR/pptx-viewer/commit/29ef529f4eb6439315bb90b088f2ffe6877577ba))
15
+
10
16
  ## [4.1.1](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-angular-viewer@4.1.1) - 2026-09-20
11
17
 
12
18
  ### Bug Fixes
@@ -1,4 +1,4 @@
1
- import { t as toChatSummary } from './pptx-angular-viewer-pptx-angular-viewer-DpuKwEgB.mjs';
1
+ import { t as toChatSummary } from './pptx-angular-viewer-pptx-angular-viewer-BvT4AAG0.mjs';
2
2
 
3
3
  /**
4
4
  * IndexedDB backend for {@link createChatHistoryStore}. Kept in its own module
@@ -103,4 +103,4 @@ function createIdbBackend(db) {
103
103
  }
104
104
 
105
105
  export { CHAT_STORE, createIdbBackend, openChatDb };
106
- //# sourceMappingURL=pptx-angular-viewer-chat-history-idb-3tv0EF5v.mjs.map
106
+ //# sourceMappingURL=pptx-angular-viewer-chat-history-idb-C4hemHaY.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"pptx-angular-viewer-chat-history-idb-3tv0EF5v.mjs","sources":["../../src/internal/shared-src/ai/chat-history-idb.ts"],"sourcesContent":["/**\n * IndexedDB backend for {@link createChatHistoryStore}. Kept in its own module\n * so the localStorage fallback and the public factory stay within the per-file\n * size budget. Uses the raw IndexedDB API with tiny promise wrappers so no new\n * runtime dependency is pulled in.\n *\n * Every browser global is touched lazily from inside a function, never at module\n * load, so importing this file in a non-DOM environment (Node, SSR) never throws.\n */\n\nimport type { ChatBackend, PptxAiChatSummary, PptxAiStoredChat } from './chat-history-store';\nimport { toChatSummary } from './chat-history-store';\n\n/** Object store holding one record per chat, keyed by `id`. */\nexport const CHAT_STORE = 'chats';\n/** Index over the optional `deckId` key path, used for per-deck filtering. */\nconst DECK_INDEX = 'deckId';\n\n/** Resolve an `IDBRequest` to a promise. */\nfunction requestToPromise<T>(request: IDBRequest<T>): Promise<T> {\n\treturn new Promise<T>((resolve, reject) => {\n\t\trequest.onsuccess = () => resolve(request.result);\n\t\trequest.onerror = () => reject(request.error ?? new Error('IndexedDB request failed.'));\n\t});\n}\n\n/** Resolve when a transaction commits (or reject on error/abort). */\nfunction transactionDone(tx: IDBTransaction): Promise<void> {\n\treturn new Promise<void>((resolve, reject) => {\n\t\ttx.oncomplete = () => resolve();\n\t\ttx.onerror = () => reject(tx.error ?? new Error('IndexedDB transaction failed.'));\n\t\ttx.onabort = () => reject(tx.error ?? new Error('IndexedDB transaction aborted.'));\n\t});\n}\n\n/**\n * Open (and if needed create/upgrade) the chat database. Throws when there is no\n * `indexedDB` global so the caller can transparently fall back to localStorage.\n */\nexport function openChatDb(dbName: string): Promise<IDBDatabase> {\n\tconst idb = typeof indexedDB !== 'undefined' ? indexedDB : undefined;\n\tif (!idb) {\n\t\tthrow new Error('IndexedDB is not available in this environment.');\n\t}\n\treturn new Promise<IDBDatabase>((resolve, reject) => {\n\t\tconst open = idb.open(dbName, 1);\n\t\topen.onupgradeneeded = () => {\n\t\t\tconst db = open.result;\n\t\t\tif (!db.objectStoreNames.contains(CHAT_STORE)) {\n\t\t\t\tconst store = db.createObjectStore(CHAT_STORE, { keyPath: 'id' });\n\t\t\t\tstore.createIndex(DECK_INDEX, 'deckId', { unique: false });\n\t\t\t}\n\t\t};\n\t\topen.onsuccess = () => resolve(open.result);\n\t\topen.onerror = () => reject(open.error ?? new Error('Failed to open IndexedDB.'));\n\t\topen.onblocked = () => reject(new Error('IndexedDB open blocked by another connection.'));\n\t});\n}\n\n/** Read every stored chat (newest-first ordering is applied by the caller). */\nasync function readAll(db: IDBDatabase, deckId: string | undefined): Promise<PptxAiStoredChat[]> {\n\tconst tx = db.transaction(CHAT_STORE, 'readonly');\n\tconst store = tx.objectStore(CHAT_STORE);\n\tconst source =\n\t\tdeckId === undefined\n\t\t\t? store.getAll()\n\t\t\t: store.index(DECK_INDEX).getAll(IDBKeyRange.only(deckId));\n\tconst rows = await requestToPromise<PptxAiStoredChat[]>(source);\n\tawait transactionDone(tx);\n\treturn rows;\n}\n\n/** Create an IndexedDB-backed {@link ChatBackend}. */\nexport function createIdbBackend(db: IDBDatabase): ChatBackend {\n\treturn {\n\t\tasync list(deckId: string | undefined): Promise<PptxAiChatSummary[]> {\n\t\t\tconst rows = await readAll(db, deckId);\n\t\t\treturn rows.map(toChatSummary).sort((a, b) => b.updatedAt - a.updatedAt);\n\t\t},\n\t\tasync load(id: string): Promise<PptxAiStoredChat | null> {\n\t\t\tconst tx = db.transaction(CHAT_STORE, 'readonly');\n\t\t\tconst row = await requestToPromise<PptxAiStoredChat | undefined>(\n\t\t\t\ttx.objectStore(CHAT_STORE).get(id),\n\t\t\t);\n\t\t\tawait transactionDone(tx);\n\t\t\treturn row ?? null;\n\t\t},\n\t\tasync save(chat: PptxAiStoredChat): Promise<void> {\n\t\t\tconst tx = db.transaction(CHAT_STORE, 'readwrite');\n\t\t\ttx.objectStore(CHAT_STORE).put(chat);\n\t\t\tawait transactionDone(tx);\n\t\t},\n\t\tasync remove(id: string): Promise<void> {\n\t\t\tconst tx = db.transaction(CHAT_STORE, 'readwrite');\n\t\t\ttx.objectStore(CHAT_STORE).delete(id);\n\t\t\tawait transactionDone(tx);\n\t\t},\n\t\tasync clear(deckId: string | undefined): Promise<void> {\n\t\t\tconst tx = db.transaction(CHAT_STORE, 'readwrite');\n\t\t\tconst store = tx.objectStore(CHAT_STORE);\n\t\t\tif (deckId === undefined) {\n\t\t\t\tstore.clear();\n\t\t\t} else {\n\t\t\t\tconst ids = await requestToPromise<IDBValidKey[]>(\n\t\t\t\t\tstore.index(DECK_INDEX).getAllKeys(IDBKeyRange.only(deckId)),\n\t\t\t\t);\n\t\t\t\tfor (const id of ids) {\n\t\t\t\t\tstore.delete(id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait transactionDone(tx);\n\t\t},\n\t};\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pptx-angular-viewer-chat-history-idb-C4hemHaY.mjs","sources":["../../src/internal/shared-src/ai/chat-history-idb.ts"],"sourcesContent":["/**\n * IndexedDB backend for {@link createChatHistoryStore}. Kept in its own module\n * so the localStorage fallback and the public factory stay within the per-file\n * size budget. Uses the raw IndexedDB API with tiny promise wrappers so no new\n * runtime dependency is pulled in.\n *\n * Every browser global is touched lazily from inside a function, never at module\n * load, so importing this file in a non-DOM environment (Node, SSR) never throws.\n */\n\nimport type { ChatBackend, PptxAiChatSummary, PptxAiStoredChat } from './chat-history-store';\nimport { toChatSummary } from './chat-history-store';\n\n/** Object store holding one record per chat, keyed by `id`. */\nexport const CHAT_STORE = 'chats';\n/** Index over the optional `deckId` key path, used for per-deck filtering. */\nconst DECK_INDEX = 'deckId';\n\n/** Resolve an `IDBRequest` to a promise. */\nfunction requestToPromise<T>(request: IDBRequest<T>): Promise<T> {\n\treturn new Promise<T>((resolve, reject) => {\n\t\trequest.onsuccess = () => resolve(request.result);\n\t\trequest.onerror = () => reject(request.error ?? new Error('IndexedDB request failed.'));\n\t});\n}\n\n/** Resolve when a transaction commits (or reject on error/abort). */\nfunction transactionDone(tx: IDBTransaction): Promise<void> {\n\treturn new Promise<void>((resolve, reject) => {\n\t\ttx.oncomplete = () => resolve();\n\t\ttx.onerror = () => reject(tx.error ?? new Error('IndexedDB transaction failed.'));\n\t\ttx.onabort = () => reject(tx.error ?? new Error('IndexedDB transaction aborted.'));\n\t});\n}\n\n/**\n * Open (and if needed create/upgrade) the chat database. Throws when there is no\n * `indexedDB` global so the caller can transparently fall back to localStorage.\n */\nexport function openChatDb(dbName: string): Promise<IDBDatabase> {\n\tconst idb = typeof indexedDB !== 'undefined' ? indexedDB : undefined;\n\tif (!idb) {\n\t\tthrow new Error('IndexedDB is not available in this environment.');\n\t}\n\treturn new Promise<IDBDatabase>((resolve, reject) => {\n\t\tconst open = idb.open(dbName, 1);\n\t\topen.onupgradeneeded = () => {\n\t\t\tconst db = open.result;\n\t\t\tif (!db.objectStoreNames.contains(CHAT_STORE)) {\n\t\t\t\tconst store = db.createObjectStore(CHAT_STORE, { keyPath: 'id' });\n\t\t\t\tstore.createIndex(DECK_INDEX, 'deckId', { unique: false });\n\t\t\t}\n\t\t};\n\t\topen.onsuccess = () => resolve(open.result);\n\t\topen.onerror = () => reject(open.error ?? new Error('Failed to open IndexedDB.'));\n\t\topen.onblocked = () => reject(new Error('IndexedDB open blocked by another connection.'));\n\t});\n}\n\n/** Read every stored chat (newest-first ordering is applied by the caller). */\nasync function readAll(db: IDBDatabase, deckId: string | undefined): Promise<PptxAiStoredChat[]> {\n\tconst tx = db.transaction(CHAT_STORE, 'readonly');\n\tconst store = tx.objectStore(CHAT_STORE);\n\tconst source =\n\t\tdeckId === undefined\n\t\t\t? store.getAll()\n\t\t\t: store.index(DECK_INDEX).getAll(IDBKeyRange.only(deckId));\n\tconst rows = await requestToPromise<PptxAiStoredChat[]>(source);\n\tawait transactionDone(tx);\n\treturn rows;\n}\n\n/** Create an IndexedDB-backed {@link ChatBackend}. */\nexport function createIdbBackend(db: IDBDatabase): ChatBackend {\n\treturn {\n\t\tasync list(deckId: string | undefined): Promise<PptxAiChatSummary[]> {\n\t\t\tconst rows = await readAll(db, deckId);\n\t\t\treturn rows.map(toChatSummary).sort((a, b) => b.updatedAt - a.updatedAt);\n\t\t},\n\t\tasync load(id: string): Promise<PptxAiStoredChat | null> {\n\t\t\tconst tx = db.transaction(CHAT_STORE, 'readonly');\n\t\t\tconst row = await requestToPromise<PptxAiStoredChat | undefined>(\n\t\t\t\ttx.objectStore(CHAT_STORE).get(id),\n\t\t\t);\n\t\t\tawait transactionDone(tx);\n\t\t\treturn row ?? null;\n\t\t},\n\t\tasync save(chat: PptxAiStoredChat): Promise<void> {\n\t\t\tconst tx = db.transaction(CHAT_STORE, 'readwrite');\n\t\t\ttx.objectStore(CHAT_STORE).put(chat);\n\t\t\tawait transactionDone(tx);\n\t\t},\n\t\tasync remove(id: string): Promise<void> {\n\t\t\tconst tx = db.transaction(CHAT_STORE, 'readwrite');\n\t\t\ttx.objectStore(CHAT_STORE).delete(id);\n\t\t\tawait transactionDone(tx);\n\t\t},\n\t\tasync clear(deckId: string | undefined): Promise<void> {\n\t\t\tconst tx = db.transaction(CHAT_STORE, 'readwrite');\n\t\t\tconst store = tx.objectStore(CHAT_STORE);\n\t\t\tif (deckId === undefined) {\n\t\t\t\tstore.clear();\n\t\t\t} else {\n\t\t\t\tconst ids = await requestToPromise<IDBValidKey[]>(\n\t\t\t\t\tstore.index(DECK_INDEX).getAllKeys(IDBKeyRange.only(deckId)),\n\t\t\t\t);\n\t\t\t\tfor (const id of ids) {\n\t\t\t\t\tstore.delete(id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait transactionDone(tx);\n\t\t},\n\t};\n}\n"],"names":[],"mappings":"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"}
@@ -84134,6 +84134,72 @@ function savedPresentationFileName(sourceName, format = 'pptx') {
84134
84134
  return `${presentationBaseName(sourceName)}.${format}`;
84135
84135
  }
84136
84136
 
84137
+ /** Per-tab acknowledgements: reloads keep them, a fresh tab starts clean. */
84138
+ const AUTOSAVE_RECOVERY_ACKNOWLEDGEMENTS_KEY = 'pptx-viewer-autosave-recovery-acknowledgements';
84139
+ function readAutosaveRecoveryAcknowledgements() {
84140
+ try {
84141
+ if (typeof sessionStorage === 'undefined') {
84142
+ return new Map();
84143
+ }
84144
+ const raw = sessionStorage.getItem(AUTOSAVE_RECOVERY_ACKNOWLEDGEMENTS_KEY);
84145
+ const parsed = raw ? JSON.parse(raw) : [];
84146
+ if (!Array.isArray(parsed)) {
84147
+ return new Map();
84148
+ }
84149
+ const entries = parsed.filter((value) => Array.isArray(value) &&
84150
+ value.length === 2 &&
84151
+ typeof value[0] === 'string' &&
84152
+ typeof value[1] === 'number' &&
84153
+ Number.isFinite(value[1]));
84154
+ return new Map(entries);
84155
+ }
84156
+ catch {
84157
+ return new Map();
84158
+ }
84159
+ }
84160
+ /** The exact snapshot this tab has already loaded for `filePath`, if any. */
84161
+ function getAcknowledgedAutosaveRecoveryTimestamp(filePath) {
84162
+ return readAutosaveRecoveryAcknowledgements().get(filePath);
84163
+ }
84164
+ /** Remember that this tab has loaded this exact snapshot without deleting it. */
84165
+ function acknowledgeAutosaveRecovery(record) {
84166
+ if (!record.key || !Number.isFinite(record.timestamp)) {
84167
+ return;
84168
+ }
84169
+ try {
84170
+ if (typeof sessionStorage === 'undefined') {
84171
+ return;
84172
+ }
84173
+ const acknowledgements = readAutosaveRecoveryAcknowledgements();
84174
+ acknowledgements.set(record.key, record.timestamp);
84175
+ sessionStorage.setItem(AUTOSAVE_RECOVERY_ACKNOWLEDGEMENTS_KEY, JSON.stringify([...acknowledgements]));
84176
+ }
84177
+ catch {
84178
+ // A blocked sessionStorage must not prevent recovery from loading.
84179
+ }
84180
+ }
84181
+ /** Undo an acknowledgement when loading that exact snapshot failed. */
84182
+ function clearAutosaveRecoveryAcknowledgement(record) {
84183
+ try {
84184
+ if (typeof sessionStorage === 'undefined') {
84185
+ return;
84186
+ }
84187
+ const acknowledgements = readAutosaveRecoveryAcknowledgements();
84188
+ if (acknowledgements.get(record.key) !== record.timestamp) {
84189
+ return;
84190
+ }
84191
+ acknowledgements.delete(record.key);
84192
+ if (acknowledgements.size === 0) {
84193
+ sessionStorage.removeItem(AUTOSAVE_RECOVERY_ACKNOWLEDGEMENTS_KEY);
84194
+ return;
84195
+ }
84196
+ sessionStorage.setItem(AUTOSAVE_RECOVERY_ACKNOWLEDGEMENTS_KEY, JSON.stringify([...acknowledgements]));
84197
+ }
84198
+ catch {
84199
+ // A blocked sessionStorage already behaves as if nothing was acknowledged.
84200
+ }
84201
+ }
84202
+
84137
84203
  /**
84138
84204
  * IndexedDB-backed autosave recovery store, shared by every binding.
84139
84205
  *
@@ -84291,12 +84357,10 @@ async function listAutosaveSnapshots() {
84291
84357
  }
84292
84358
  });
84293
84359
  }
84294
- /**
84295
- * Delete an autosave snapshot by file path.
84296
- */
84360
+ /** Delete a snapshot, rejecting when IndexedDB cannot commit the transaction. */
84297
84361
  async function deleteAutosaveSnapshot(filePath) {
84298
84362
  const db = await openAutosaveDb$1();
84299
- return new Promise((resolve) => {
84363
+ return new Promise((resolve, reject) => {
84300
84364
  try {
84301
84365
  const tx = db.transaction(AUTOSAVE_STORE_NAME, 'readwrite');
84302
84366
  const store = tx.objectStore(AUTOSAVE_STORE_NAME);
@@ -84305,19 +84369,21 @@ async function deleteAutosaveSnapshot(filePath) {
84305
84369
  db.close();
84306
84370
  resolve(true);
84307
84371
  };
84308
- tx.onerror = () => {
84372
+ const rejectDelete = () => {
84309
84373
  db.close();
84310
- resolve(false);
84374
+ reject(tx.error ?? new Error(`Failed to delete autosave snapshot: ${filePath}`));
84311
84375
  };
84376
+ tx.onerror = rejectDelete;
84377
+ tx.onabort = rejectDelete;
84312
84378
  }
84313
- catch {
84379
+ catch (error) {
84314
84380
  try {
84315
84381
  db.close();
84316
84382
  }
84317
84383
  catch {
84318
84384
  // Ignore
84319
84385
  }
84320
- resolve(false);
84386
+ reject(error);
84321
84387
  }
84322
84388
  });
84323
84389
  }
@@ -84633,6 +84699,7 @@ async function restoreSessionDeck() {
84633
84699
  const snapshot = await getAutosaveSnapshot(deck.fileName);
84634
84700
  const bytes = snapshot ? toBytes(snapshot.data) : null;
84635
84701
  if (snapshot && bytes && bytes.byteLength > 0 && snapshot.timestamp > deck.timestamp) {
84702
+ acknowledgeAutosaveRecovery(snapshot);
84636
84703
  return { fileName: deck.fileName, data: bytes, timestamp: snapshot.timestamp };
84637
84704
  }
84638
84705
  }
@@ -97413,7 +97480,10 @@ function ageKeyFor(ageMinutes) {
97413
97480
  */
97414
97481
  function autosaveRecoveryPrompt(input) {
97415
97482
  const record = input.record;
97416
- if (!record || record.size <= 0 || !record.key) {
97483
+ if (!record ||
97484
+ record.size <= 0 ||
97485
+ !record.key ||
97486
+ record.timestamp === input.acknowledgedTimestamp) {
97417
97487
  return null;
97418
97488
  }
97419
97489
  const age = input.now - record.timestamp;
@@ -97479,6 +97549,7 @@ async function probeAutosaveRecovery(filePath, now = Date.now(), displayName) {
97479
97549
  : undefined,
97480
97550
  now,
97481
97551
  displayName,
97552
+ acknowledgedTimestamp: getAcknowledgedAutosaveRecoveryTimestamp(filePath),
97482
97553
  });
97483
97554
  if (!prompt || !record) {
97484
97555
  return null;
@@ -97502,12 +97573,7 @@ function acceptAutosaveRecovery(record) {
97502
97573
  * the editor's own autosave writes a fresh one the moment they edit anything.
97503
97574
  */
97504
97575
  async function discardAutosaveRecovery(record) {
97505
- try {
97506
- await deleteAutosaveSnapshot(record.key);
97507
- }
97508
- catch {
97509
- // Best-effort: storage failures leave the snapshot available to retry.
97510
- }
97576
+ await deleteAutosaveSnapshot(record.key);
97511
97577
  }
97512
97578
 
97513
97579
  /**
@@ -109800,7 +109866,7 @@ function createLocalStorageBackend(namespace) {
109800
109866
  /** Try IndexedDB first; fall back to localStorage on any failure. */
109801
109867
  async function resolveBackend(dbName, namespace) {
109802
109868
  try {
109803
- const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-3tv0EF5v.mjs');
109869
+ const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-C4hemHaY.mjs');
109804
109870
  const db = await openChatDb(dbName);
109805
109871
  return createIdbBackend(db);
109806
109872
  }
@@ -112048,8 +112114,9 @@ class AutosaveRecoveryService {
112048
112114
  const found = this.record;
112049
112115
  this.prompt.set(null);
112050
112116
  this.record = null;
112051
- if (found) {
112052
- this.host?.restore(acceptAutosaveRecovery(found));
112117
+ if (found && this.host) {
112118
+ this.host.restore(acceptAutosaveRecovery(found));
112119
+ acknowledgeAutosaveRecovery(found);
112053
112120
  }
112054
112121
  }
112055
112122
  /** The user declined: drop the snapshot. */
@@ -151241,7 +151308,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
151241
151308
  }], propDecorators: { canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], slideIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideIndex", required: false }] }], selectedElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedElement", required: false }] }] } });
151242
151309
 
151243
151310
  // Generated by scripts/inline-shared.mjs from package.json. Do not edit.
151244
- const PPTX_ANGULAR_VIEWER_VERSION = "4.1.1";
151311
+ const PPTX_ANGULAR_VIEWER_VERSION = "4.1.2";
151245
151312
 
151246
151313
  /**
151247
151314
  * account-page.component.ts: File > Account content.
@@ -182692,7 +182759,9 @@ class ViewerExtraDialogsComponent {
182692
182759
  }
182693
182760
  /** Options > Save > "Delete cached files": purge autosave recovery snapshots. */
182694
182761
  onClearOptionsCache() {
182695
- void this.viewerOpts.clearCache();
182762
+ void this.viewerOpts.clearCache().catch(() => {
182763
+ // Keep the options dialog usable when IndexedDB rejects cleanup.
182764
+ });
182696
182765
  }
182697
182766
  /** Drop the pending presentation ink. */
182698
182767
  onDiscardAnnotations() {
@@ -184282,7 +184351,9 @@ class PowerPointViewerComponent {
184282
184351
  this.viewerOpts.playFeedback();
184283
184352
  const filePath = this.filePath();
184284
184353
  if (format === 'pptx' && filePath && this.viewerOpts.shouldDiscardAutosaveOnSave()) {
184285
- void deleteAutosaveSnapshot(filePath);
184354
+ void deleteAutosaveSnapshot(filePath).catch(() => {
184355
+ // Saving succeeded; recovery cleanup is best-effort here.
184356
+ });
184286
184357
  }
184287
184358
  },
184288
184359
  });
@@ -184334,7 +184405,9 @@ class PowerPointViewerComponent {
184334
184405
  // above covers the tab actually closing/navigating away).
184335
184406
  this.destroyRef.onDestroy(() => {
184336
184407
  if (this.viewerOpts.shouldClearCacheOnClose()) {
184337
- void this.viewerOpts.clearCache();
184408
+ void this.viewerOpts.clearCache().catch(() => {
184409
+ // Browser lifecycle cleanup cannot report an IndexedDB failure.
184410
+ });
184338
184411
  }
184339
184412
  });
184340
184413
  // Hand the canvas-editing controller the accessors it alone needs from the
@@ -185263,7 +185336,9 @@ class PowerPointViewerComponent {
185263
185336
  /** Options > Save > "clear cache on close": wipe recovery snapshots when the tab closes. */
185264
185337
  clearCacheOnUnload() {
185265
185338
  if (this.viewerOpts.shouldClearCacheOnClose()) {
185266
- void this.viewerOpts.clearCache();
185339
+ void this.viewerOpts.clearCache().catch(() => {
185340
+ // Browser lifecycle cleanup cannot report an IndexedDB failure.
185341
+ });
185267
185342
  }
185268
185343
  }
185269
185344
  /** Resolve the live slide-stage element within `<main>`. */
@@ -189688,4 +189763,4 @@ function cn(...values) {
189688
189763
  */
189689
189764
 
189690
189765
  export { CollaborationCursorsComponent as $, AFTER_ANIMATION_VALUES as A, AnimationAuthorPanelComponent as B, AnimationPanelComponent as C, AnimationPlaybackService as D, AutosaveRecoveryDialogComponent as E, AutosaveService as F, BroadcastDialogComponent as G, CHART_EDITOR_STYLES as H, CINEMATIC_TRANSITION_KEYFRAMES as I, CURSOR_PALETTE as J, CanvasFitService as K, ChartAxisOptionsComponent as L, ChartAxisStyleOptionsComponent as M, ChartComboTypeOptionsComponent as N, ChartDataEditorComponent as O, ChartDataLabelOptionsComponent as P, ChartDatapointMarkerOptionsComponent as Q, ChartDatapointOptionsComponent as R, ChartDisplayOptionsComponent as S, ChartElementViewComponent as T, ChartErrorBarOptionsComponent as U, ChartMarkerOptionsComponent as V, ChartPartSelectionService as W, ChartPrimitivesComponent as X, ChartRendererComponent as Y, ChartTrendlineOptionsComponent as Z, ChartTypeSelectorComponent as _, ALIGN_OPTIONS as a, INSTANT as a$, CollaborationService as a0, ColorChangedImageComponent as a1, CommentMarkersOverlayComponent as a2, CommentsPanelComponent as a3, CommentsService as a4, ComparePanelComponent as a5, ConnectorRendererComponent as a6, ConnectorTextOverlayComponent as a7, CustomShowsComponent as a8, DEFAULT_BOUNDS as a9, EditorContextMenuComponent as aA, EditorHistory as aB, EditorStateService as aC, EditorToolbarComponent as aD, EffectsPanelComponent as aE, ElementRendererComponent as aF, EmbeddedFontsService as aG, EncryptedFileDialogComponent as aH, EquationEditorDialogComponent as aI, EquationRendererComponent as aJ, EquationTemplateGalleryComponent as aK, ExportProgressModalComponent as aL, ExportService as aM, FieldContextService as aN, FindBarComponent as aO, FindReplaceBarComponent as aP, FollowModeBarComponent as aQ, FontEmbeddingListComponent as aR, FontEmbeddingPanelComponent as aS, GALLERY_THEME_PRESETS as aT, GOOGLE_WEBFONTS_LINK_ID as aU, GRIDLINE_COLOR$1 as aV, GoogleWebfontsService as aW, GradientPickerComponent as aX, HANDOUT_OPTIONS as aY, HeaderFooterDialogComponent as aZ, HyperlinkDialogComponent as a_, DEFAULT_BROADCAST_SERVER_URL as aa, DEFAULT_CANVAS_HEIGHT as ab, DEFAULT_CANVAS_WIDTH as ac, DEFAULT_COLOR_SCHEME as ad, DEFAULT_FILL_COLOR$1 as ae, DEFAULT_LAYOUT as af, DEFAULT_MORPH_DURATION_MS as ag, DEFAULT_PALETTE$1 as ah, DEFAULT_PATTERN_FILL_PRESET as ai, DEFAULT_PRINT_SETTINGS as aj, DEFAULT_SLIDE_BACKGROUND as ak, DEFAULT_STROKE_COLOR as al, DEFAULT_STYLE as am, DEFAULT_TABLE_ROW_HEIGHT as an, DEFAULT_TEXT_COLOR$2 as ao, DEFAULT_VIEWER_PROFILE as ap, DIRECTIONAL_PRESETS as aq, DIRECTION_OPTIONS as ar, DocumentPropertiesCardComponent as as, EASE as at, EFFECT_SOUND_CATALOGUE as au, EMBEDDED_FONTS_STYLE_ID as av, EMPHASIS_PRESETS as aw, ENTRANCE_PRESETS as ax, TEMPLATES as ay, EXIT_PRESETS as az, ANIMATION_PRESET_CATEGORIES as b, REPEAT_MODE_OPTIONS as b$, ImagePropertiesPanelComponent as b0, InkDrawingService as b1, InkRendererComponent as b2, InsertSmartArtDialogComponent as b3, InspectorPaneHeaderComponent as b4, InspectorPanelComponent as b5, IsMobileService as b6, KeepAnnotationsDialogComponent as b7, LOCALE_CATALOG as b8, LONG_PRESS_DURATION_MS as b9, POWER_POINT_VIEWER_PROVIDERS as bA, PPTX_OPEN_ACCEPT as bB, PRESENTATION_OPEN_EXTENSIONS as bC, PRESENTER_CHANNEL_NAME as bD, PRESENTER_MSG_ORIGIN as bE, PRESENTER_TIMER_SEGMENT_MS as bF, PX_PER_CM as bG, PX_PER_INCH as bH, PasswordProtectionDialogComponent as bI, PasswordStrengthMeterComponent as bJ, PowerPointViewerComponent as bK, PresentToolbarAutoHide as bL, PresentationAnnotationOverlayComponent as bM, PresentationAnnotationsService as bN, PresentationOverlayComponent as bO, PresentationPropertiesPanelComponent as bP, PresentationSettingsCardComponent as bQ, PresentationSubtitleBarComponent as bR, PresentationToolbarComponent as bS, PresentationTransitionOverlayComponent as bT, PresenterViewComponent as bU, PresenterWindowService as bV, PrintDialogComponent as bW, PrintService as bX, PrintSettingsPanelComponent as bY, PropertiesDialogComponent as bZ, RANDOM_ELIGIBLE_TYPES as b_, LONG_PRESS_MOVE_TOLERANCE_PX as ba, LoadContentService as bb, LocalPresencePublisher as bc, MAX_ZOOM_SCALE as bd, MIN_ZOOM_SCALE as be, MOTION_PATH_COLUMNS as bf, MediaPreviewComponent as bg, MediaPropertiesPanelComponent as bh, MediaRendererComponent as bi, MediaTrimTimelineComponent as bj, MobileBottomBarComponent as bk, MobileMenuSheetComponent as bl, MobilePresenterViewComponent as bm, MobileSheetComponent as bn, MobileSlidesSheetComponent as bo, MobileToolbarComponent as bp, ModalDialogComponent as bq, Model3DRendererComponent as br, NotesHandoutCardComponent as bs, NotesPanelComponent as bt, NotesToolbarComponent as bu, OleRendererComponent as bv, OutlineViewOverlayComponent as bw, P14_TRANSITION_KEYFRAMES as bx, P14_TRANSITION_KEYFRAMES_2 as by, P14_TRANSITION_KEYFRAMES_ALL as bz, AUDIENCE_HASH as c, SlideSorterOverlayComponent as c$, RESIZE_HANDLES as c0, RULER_FONT_SIZE as c1, RULER_THICKNESS as c2, ReadingViewOverlayComponent as c3, RemoteSelectionOverlayComponent as c4, RibbonAnimationGalleryComponent as c5, RibbonAnimationsSectionComponent as c6, RibbonArrangeSectionComponent as c7, RibbonColorPopoverComponent as c8, RibbonComponent as c9, DEFAULT_PALETTE as cA, PALETTES as cB, SMART_ART_COLOR_SCHEMES as cC, SMART_ART_STYLE_OPTIONS as cD, SUB_ITEM_LABEL as cE, SVG_WARP_PRESETS as cF, SWIPE_MAX_VERTICAL_PX as cG, SWIPE_THRESHOLD_PX as cH, SelectionPaneComponent as cI, SetUpSlideShowDialogComponent as cJ, SettingsAppearanceTabComponent as cK, SettingsDialogComponent as cL, SettingsLanguageTabComponent as cM, ShareDialogComponent as cN, ShortcutPanelComponent as cO, ShowOptionsFieldsetComponent as cP, ShowSlidesFieldsetComponent as cQ, SignatureStrippedDialogComponent as cR, SignaturesPanelComponent as cS, SignaturesService as cT, SlideBackgroundCardComponent as cU, SlideCanvasComponent as cV, SlideDefaultInspectorComponent as cW, SlideDiffChangesComponent as cX, SlideDiffRowComponent as cY, SlideDiffThumbnailsComponent as cZ, SlideSizeCardComponent as c_, RibbonDesignSectionComponent as ca, RibbonDrawSectionComponent as cb, RibbonDrawingGroupComponent as cc, RibbonEditingSectionComponent as cd, RibbonFileSectionComponent as ce, RibbonFontControlsComponent as cf, RibbonHomeSectionComponent as cg, RibbonHyperlinkButtonComponent as ch, RibbonInsertFieldsComponent as ci, RibbonInsertSectionComponent as cj, RibbonMotionPathGalleryComponent as ck, RibbonParagraphControlsComponent as cl, RibbonPrimaryRowComponent as cm, RibbonReviewSectionComponent as cn, RibbonShapeExtrasComponent as co, RibbonSlideshowSectionComponent as cp, RibbonTransitionsSectionComponent as cq, RibbonViewSectionComponent as cr, RulerGuidesService as cs, SEQUENCE_OPTIONS as ct, SEVERITY_GROUPS as cu, SEVERITY_LABELS as cv, DEFAULT_TRANSITION_DURATION_MS$1 as cw, SHORTCUT_REFERENCE_ITEMS as cx, SLIDE_TRANSITION_KEYFRAMES as cy, SLIDE_TRANSITION_KEYFRAMES_CSS as cz, AUDIENCE_NONCE_KEY as d, ZERO_LINE_COLOR as d$, SlideThemeOverridePanelComponent as d0, SlideTransitionCardComponent as d1, SlidesPanelComponent as d2, SmartArt3DRendererComponent as d3, SmartArt3DService as d4, SmartArtPreviewComponent as d5, SmartArtPropertiesComponent as d6, SmartArtRendererComponent as d7, StatusBarComponent as d8, TABLE_STRUCTURE_TOGGLES as d9, TransitionPreviewComponent as dA, VALIGN_OPTIONS as dB, VIEWER_THEME as dC, VersionHistoryPanelComponent as dD, ViewerCanvasEditingService as dE, ViewerCollabCursorService as dF, ViewerCollaborationSessionService as dG, ViewerCollaborationShellService as dH, ViewerCompareService as dI, ViewerCustomShowsService as dJ, ViewerDialogsService as dK, ViewerDocumentPropertiesService as dL, ViewerExportService as dM, ViewerExtraDialogsComponent as dN, ViewerFileIOService as dO, ViewerFindReplaceService as dP, ViewerFormatPainterService as dQ, ViewerInspectorPanelService as dR, ViewerKeyboardService as dS, ViewerMobileSheetService as dT, ViewerPresentationModeService as dU, ViewerThemeGalleryService as dV, ViewerTouchGesturesService as dW, ViewerZoomService as dX, WEBM_MIME_CANDIDATES as dY, WHEEL_SPOKE_COUNTS as dZ, WriteBackScheduler as d_, TEXT_3D_BOTTOM_BEVEL_KEYS as da, TEXT_3D_TOP_BEVEL_KEYS as db, TEXT_DIRECTION_OPTIONS$1 as dc, THEME_CATALOG as dd, TIMING_CURVE_OPTIONS as de, TRANSITION_SPEED_DURATION_MS as df, TRIGGER_OPTIONS as dg, TYPE_LABELS as dh, TableCellAdvancedFillComponent as di, TableCellFormattingComponent as dj, TableDataEditorComponent as dk, TablePropertiesComponent as dl, TableRendererComponent as dm, TableResizeOverlayComponent as dn, TableSelectionService as dp, TagsCardComponent as dq, Text3DBevelSectionComponent as dr, Text3DPanelComponent as ds, TextAdvancedPanelComponent as dt, ThemeEditorFieldsComponent as du, ThemeGalleryComponent as dv, ThemeSelectorCardComponent as dw, TitleBarComponent as dx, TitleBarSearchComponent as dy, TransitionDirectionPickerComponent as dz, AVATAR_COLOR_SWATCHES as e, buildModel3DContainerStyle as e$, ZoomNavigationService as e0, ZoomRendererComponent as e1, ZoomTargetService as e2, addCategory as e3, addCommentToList as e4, addGradientStopPatch as e5, addItem as e6, addSeries as e7, addSubItem as e8, advanceStep as e9, buildCategoryLabels as eA, buildCellParagraphs as eB, buildChartViewModel as eC, buildChatLogExport as eD, buildChatLogMarkdown as eE, buildChromeStyle as eF, buildClearHyperlinkPatch as eG, buildClickGroups as eH, buildColStyles as eI, buildCollaborationConfig as eJ, buildComboViewModel as eK, buildCssGradientFromShapeStyle as eL, buildDuotoneFilter as eM, buildDuotoneFilterId as eN, buildEmbeddedFontStyles as eO, buildEquationElement as eP, buildEquationSegment as eQ, buildFallbackViewModel as eR, buildFontFaceRule as eS, buildGradientFillCss as eT, buildGridlinesAndLabels as eU, buildHyperlinkPatch as eV, buildInkContainerStyle as eW, buildInkStrokes as eX, buildLegend as eY, buildLiveInkStrokeView as eZ, buildMarkTooltip as e_, affordanceElements as ea, aiToggleVisible as eb, alignPatch as ec, animationFor as ed, animationPresetLabelKey as ee, annotationMapToInkInserts as ef, applyAcceptedDiff as eg, applyAnimationPreset as eh, applyFindReplacements as ei, applyFormatToElement as ej, applyMove as ek, applyResize as el, asMediaElement as em, assignUserColor as en, attachShowVisibilityPause as eo, attachTouchGestures as ep, axisTickValues as eq, beginDrawingNodeEdit as er, beginNodeEdit as es, bevelSizePatch as et, boolFromEvent as eu, bringForward as ev, bringToFront as ew, buildBarActions as ex, buildBroadcastConfig as ey, buildBroadcastViewerUrl as ez, AXIS_LABEL_COLOR as f, computeDrawingViewBox as f$, buildModel3DViewModel as f0, buildOleActionModel as f1, buildOleInfoRows as f2, buildPatternFillCss as f3, buildPieViewModel as f4, buildPrintHtmlDocument as f5, buildPropertiesPatch as f6, buildRadarViewModel as f7, buildRegionMapViewModel as f8, buildSaveSlides as f9, changeCountLabel as fA, changeIcon as fB, characterSpacingPatch as fC, chartPreserveAspectRatio as fD, checkFontAvailable as fE, clampCursorPosition as fF, clampGifDimensions as fG, clampIndex as fH, clampNotesFontSize as fI, clampScale as fJ, clampStep as fK, clearAllLocalViewerData as fL, clearAudienceContent as fM, cn as fN, collectAccessibilityIssues as fO, collectElementText as fP, collectSlideText as fQ, collectStoredChats as fR, collectUsedFontFamilies as fS, columnWidthStyle as fT, commitNodeText as fU, computeAlign as fV, computeAxisTitlePrimitives as fW, computeBarRects as fX, computeBubbleRadius as fY, computeCornerHandle as fZ, computeDistribute as f_, buildShareUrl as fa, buildSmartArtInsertElement as fb, buildSmartArtNodes as fc, buildStockViewModel as fd, buildSurfaceViewModel as fe, buildTableViewModel as ff, buildTreemapViewModel as fg, buildTrimFragment as fh, buildWaterfallViewModel as fi, buildZeroLine as fj, buildZoomContainerStyle as fk, buildZoomViewModel as fl, bulletIndentPx as fm, canAddTopLevelNode as fn, canEditSmartArtNodes as fo, canGroupSelection as fp, canRemoveTopLevelNode as fq, canSetStrokeWidth as fr, canStartBroadcast as fs, canStartShare as ft, canUngroupSelection as fu, canUseClipboard as fv, captionDisplayText as fw, cellRunStyle as fx, cellStyleToStyleMap as fy, cellTdStyle as fz, AccessibilityPanelComponent as g, enableReflectionPatch as g$, computeErrorBarPrimitives as g0, computeFocusTargets as g1, computeGridSpacingPx as g2, computeHandleBoxes as g3, computeHandoutLayout as g4, computeIsMobile as g5, computeIsTablet as g6, computeLinePoints as g7, computeLinearRegression as g8, computePageCount as g9, createWebrtcBundle as gA, createWebsocketBundle as gB, cssObjectToStyleMap as gC, currentColorScheme as gD, currentLayout as gE, currentStyle as gF, defaultCssVars as gG, defaultRadius as gH, defaultThemeColors as gI, deleteElementsByIds as gJ, deleteVersion as gK, demoteNode as gL, deriveModel3DBlobUrl as gM, derivePresenceList as gN, describeCollaborationShellState as gO, describeSmartArtBounds as gP, disableGlowPatch as gQ, disableInnerShadowPatch as gR, disableOuterShadowPatch as gS, disableReflectionPatch as gT, disableSoftEdgePatch as gU, duplicateElementById as gV, durationOf as gW, effectsStateOf as gX, enableGlowPatch as gY, enableInnerShadowPatch as gZ, enableOuterShadowPatch as g_, computePieLayout as ga, computePieSlicePath as gb, computePieSlices as gc, computePlotLayout as gd, computeRSquared as ge, computeRadarPoints as gf, computeResizeHandleBoxes as gg, computeRotateHandleBox as gh, computeScatterDots as gi, computeScatterXDomain as gj, computeSelectionBoxes as gk, computeSingleSelected as gl, computeSlideIndices as gm, computeSnap as gn, computeStackedBarRects as go, computeStackedValueRange as gp, computeTrendlinePrimitives as gq, computeValueRange as gr, convertOmmlToMathMl as gs, copyFormatFromElement as gt, countAccessibilityIssues as gu, countAnnotationStrokes as gv, createAngularAiBridge as gw, createCustomShow as gx, createImageElementFromFile as gy, createSwipeDismissDrag as gz, AccessibilityService as h, getWarpCategory as h$, enableSoftEdgePatch as h0, encodeGif as h1, endShowMediaCleanup as h2, estimatePageCount as h3, exitPresentationFullscreen as h4, exportAiChatLogs as h5, extractPathPoints as h6, eyedropperAvailable as h7, fillColorOf$1 as h8, findInSlides as h9, getDuotoneFilterDef as hA, getEffectSoundAsset as hB, getEffectSoundState as hC, getImageSrc as hD, getLocalStorageUsageSummary as hE, getOleAriaLabel as hF, getOleBadgeLabel as hG, getOleDisplayName as hH, getOleDownloadFileName as hI, getOleTypeColor as hJ, getOleTypeLabel as hK, getP14TransitionAnimations as hL, getPasswordStrength as hM, getPatternSvg as hN, getPlaceholderStyle as hO, getVersions as hP, getResolvedShapeClipPath as hQ, getResolvedShapeClipPathFor as hR, getSessionTabId as hS, getShapeFillStrokeStyle as hT, getSlideBackgroundStyle as hU, getSlideTransitionAnimations as hV, getSmartArtNodeBounds as hW, getSpeechRecognitionCtor as hX, getTextBlockStyle as hY, getTextWarp as hZ, getTouchDistance as h_, findOwningSlideIndex as ha, findSlideIndexByElementId as hb, firstVisibleIndex as hc, fitPolynomial as hd, fitZoom as he, focusTargetChips as hf, fontMimeForFormat as hg, fontSizeOf as hh, forgetSessionDeck as hi, formatAxisValue as hj, formatBytes as hk, formatCursorLabel as hl, formatElapsed as hm, formatFileSize as hn, formatInlineListStyle as ho, formatPropertyDate as hp, formatTime as hq, fpsToFrameIntervalMs as hr, generateBroadcastRoomId as hs, generateCommentId as ht, generateCustomShowId as hu, generatePressureCircles as hv, generateTicks as hw, getCinematicTransitionAnimations as hx, getClrChangeParams as hy, getContainerStyle as hz, AccessibilityTextPanelComponent as i, narrowToCircle as i$, getWarpPath as i0, gradientStateFromStyle as i1, gradientStateOf as i2, gradientStatePatch as i3, gradientStopColorCommitPatch as i4, gridColumns as i5, groupIssuesBySeverity as i6, hasAnimation as i7, hasCopyableFormat as i8, hasExistingLink as i9, isUnderline as iA, isUrlSafe as iB, isValidRoomId as iC, isViewportBackgroundPressTarget as iD, isZoomActivationKey as iE, issueTrackKey as iF, issueTypeLabel as iG, keyToLabel as iH, lastVisibleIndex as iI, latexToMathml as iJ, layoutConnectorPaints as iK, layoutNodeLabels as iL, linePointsToSvgString as iM, lineSpacingPatch as iN, loadAudienceContent as iO, loadSessionDeck as iP, mediaFallbackFor as iQ, mediaSurfaceFor as iR, mergeCaptionResults as iS, mergeDown as iT, mergeRight as iU, mergeSelection as iV, mergeTablesDirective as iW, moveElementBy as iX, moveNodeDown as iY, moveNodeUp as iZ, msToFrameDelayCs as i_, hasExitedFullscreen as ia, hasGradientFill as ib, hasPressureVariation as ic, hasVisibleSlideAfter as id, headerLabel as ie, imageDimensions as ig, inkViewBox as ih, insertTableElementColumn as ii, insertTableElementRow as ij, interpolateWidth as ik, isAudienceTab as il, isBold as im, isBrowserOpenableMime as io, isChildNode as ip, isElementInteractive as iq, isInjectableUrl as ir, isItalic as is, isLegacyBinaryPresentation as it, isPpactionUrl as iu, isPresenterMessage as iv, isSigned as iw, isSupportedPresentationFile as ix, isTextElement as iy, isTwoTableFocus as iz, AccountPageComponent as j, removeElementAnimation as j$, narrowToPolygon as j0, narrowToRect as j1, newChartElement as j2, newEquationElement as j3, newPresetShapeElement as j4, newShapeElement as j5, newSmartArtElement as j6, newTableElement as j7, newTextElement as j8, nextVisibleIndex as j9, pickFile as jA, pickSupportedMimeType as jB, planGifFrames as jC, planVideoSegments as jD, pointFromPointerEvent as jE, pointsToSvgPathD as jF, presenceToCursors as jG, presentationBaseName as jH, presentationStageStyle as jI, presenterTimerProgress as jJ, presetByLayout as jK, presetsForCategory as jL, pressuresToWidths as jM, prevVisibleIndex as jN, projectDrawingShapes as jO, promoteNode as jP, provideViewerTheme as jQ, radarAngle as jR, radarRingPoints as jS, readAsDataUrl as jT, recordWebm as jU, registerCrossSlideAudio as jV, rememberSessionDeck as jW, removeAnimation as jX, removeCategory as jY, removeTableElementColumn as jZ, removeCommentFromList as j_, nodeBold as ja, nodeEditBox as jb, nodeFillColor as jc, nodeFontColor as jd, nodeIdFromKey as je, nodeItalic as jf, nodeStyle as jg, normalizeFontFormat as jh, normalizeSlidesPerPage as ji, normalizeValue as jj, numFromEvent as jk, ommlToMathml as jl, ooxmlDashToCssBorderStyle as jm, openNativeEyeDropper as jn, overallStatus as jo, paletteColor as jp, parseAudienceNonce as jq, parseNodeTextarea as jr, partitionSlides as js, patchChartData as jt, patchChartStyle as ju, patchTableData as jv, patchTextStyle as jw, patternPresetOptions as jx, pendingElementStyles as jy, pickColorByClickFallback as jz, ActionSettingsPanelComponent as k, setAnimationExit as k$, removeGradientStopPatch as k0, removeNode as k1, removeTableElementRow as k2, removeSeries as k3, renderToCanvas as k4, reorderAnimationDown as k5, reorderAnimationUp as k6, replaceInSlides as k7, replaceMatch as k8, requestPresentationFullscreen as k9, rowStyle as kA, rulerDragToGuidePosition as kB, rulerHighlight as kC, rulerStripTicks as kD, sampleColorFromSlide as kE, sanitizeColor as kF, sanitizeSlideIndex as kG, sanitizeUserName as kH, saveViewerProfile as kI, savedPresentationFileName as kJ, scanAvailableFonts as kK, searchSlides as kL, seedBroadcastFields as kM, seedHyperlinkDraft as kN, seedPropertiesDraft as kO, seedShareFields as kP, segmentFrameCount as kQ, selectValue$3 as kR, sendBackward as kS, sendToBack as kT, sequentialColorScale as kU, serializeWriteBack as kV, seriesColor as kW, setAfterAnimation as kX, setAfterAnimationColor as kY, setAnimationEmphasis as kZ, setAnimationEntrance as k_, resizeElement as ka, resolveCaptionTracks as kb, resolveChartKind as kc, resolveDirection as kd, resolveDirection8 as ke, resolveFontVariant as kf, resolveHyperlinkHref as kg, resolveInteractiveElementId as kh, resolveMediaSrc as ki, resolveOleType as kj, resolveOrientation as kk, resolveParagraphBullet as kl, resolvePresenterNotes as km, resolveProfileInitial as kn, resolveRegionCode as ko, resolveRibbonCanGroup as kp, resolveSlideAutoAdvanceMs as kq, resolveSlideTransition as kr, resolvePalette as ks, resolveThemeCatalogEntry as kt, resolveTransitionDuration as ku, resolveTransitionDurationMs as kv, resolveWheelSpokeCount as kw, restoreSessionDeck as kx, revealedElementStyles as ky, routeOrthogonalConnector as kz, AdvancedChartEditorComponent as l, surfaceColor as l$, setAxis as l0, setAxisLogScale as l1, setAxisTitleStyle as l2, setCategoryLabel as l3, setCellText as l4, setColorScheme as l5, setDataLabels as l6, setDataPointExplosion as l7, setDataPointFill as l8, setDataPointLabel as l9, setTriggerShapeId as lA, shapeStylePatch$1 as lB, sheetAfterNavigate as lC, shouldBlockClickAdvance as lD, shouldUseSvgWarp as lE, showDirectionPicker as lF, showsTemplateAffordance as lG, signatureCountLabel as lH, signatureKey as lI, signatureTimestamp as lJ, signerName as lK, statusLabel as lL, slideNumberOf as lM, slidesWithReappliedLayout as lN, smartArtNodes as lO, paletteColour as lP, snapToGridStep as lQ, splitCursorCell as lR, splitMergedCell as lS, statusKind as lT, statusLabel$1 as lU, storeAudienceContent as lV, stringFromEvent$5 as lW, strokeColorOf as lX, strokeToInkElement as lY, strokeWidthOf as lZ, styleShadowFilter as l_, setDataPointMarker as la, setDelay as lb, setDirection as lc, setDuration as ld, setEffectSound as le, setEffectStockSound as lf, setElementPosition as lg, setGridlineStyle as lh, setLayout as li, setLegend as lj, setNodeStyle as lk, setNodeText as ll, setRepeatCount as lm, setRepeatMode as ln, setSequence as lo, setSeriesChartType as lp, setSeriesColor as lq, setSeriesErrorBars as lr, setSeriesMarker as ls, setSeriesName as lt, setSeriesTrendline as lu, setSeriesValue as lv, setStyle as lw, setTimingCurve as lx, setTitle as ly, setTrigger as lz, AiChangeOverlayComponent as m, textAdvancedPatch as m0, textAdvancedStateFromStyle as m1, textAdvancedStateOf as m2, textColorOf as m3, textDirectionPatch as m4, textFontSizePatch as m5, textStyleOf as m6, textStylePatch as m7, themeStyle as m8, themeToCssVars as m9, withManualLayouts as mA, worstStatus as mB, zoomTargetSlideIndex as mC, thumbnailHeight as ma, thumbnailZoom as mb, toggleCommentResolvedInList as mc, toggleNodeBold as md, toggleNodeItalic as me, toggleSheet as mf, topLevelNodeCount as mg, transformSelectedTextCase as mh, translationsEn as mi, updateElementById as mj, updateGlowPatch as mk, updateGradientStopPatch as ml, updateInnerShadowPatch as mm, updateOuterShadowPatch as mn, updateReflectionPatch as mo, vAlignPatch as mp, validatePassword as mq, validatePrintSettings as mr, validateRoomId as ms, valueToY as mt, vermilionDarkColors as mu, vermilionDarkTheme as mv, vermilionLightColors as mw, vermilionLightTheme as mx, vermilionRadius as my, waypointsToPathD as mz, AiChatPanelComponent as n, AiChatService as o, AiComposerComponent as p, AiFocusBarComponent as q, AiFocusHighlightOverlayComponent as r, AiHistoryMenuComponent as s, toChatSummary as t, AiHistoryService as u, AiMessageListComponent as v, AiPanelStore as w, AiProposalCardComponent as x, AiSettingsSectionComponent as y, AiToolCallCardComponent as z };
189691
- //# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-DpuKwEgB.mjs.map
189766
+ //# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-BvT4AAG0.mjs.map