pptx-svelte-viewer 2.19.0 → 2.20.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.
Files changed (36) hide show
  1. package/CHANGELOG.md +448 -0
  2. package/dist/{AiChatPanel-DKeBilcx.js → AiChatPanel-DPXM1HsP.js} +188 -204
  3. package/dist/{export-CZzvhGTm.js → export-Cp97qZ_g.js} +22289 -21779
  4. package/dist/i18n.js +1 -1
  5. package/dist/index.d.ts +55 -9
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +29 -29
  8. package/dist/pptx-svelte-viewer.css +1 -1
  9. package/dist/{translator-EP8BTIz6.js → translator-Cs5ewuZ4.js} +8 -0
  10. package/dist/viewer/components/presentation-toolbar.svelte.d.ts +6 -0
  11. package/dist/viewer/components/presentation-toolbar.svelte.d.ts.map +1 -1
  12. package/dist/viewer/editor/editor-document-lifecycle.d.ts.map +1 -1
  13. package/dist/viewer/editor/editor-state.svelte.d.ts +14 -0
  14. package/dist/viewer/editor/editor-state.svelte.d.ts.map +1 -1
  15. package/dist/viewer/index.d.ts +298 -17
  16. package/dist/viewer/index.js +10 -10
  17. package/dist/viewer/state/autosave-recovery.svelte.d.ts +48 -0
  18. package/dist/viewer/state/autosave-recovery.svelte.d.ts.map +1 -0
  19. package/dist/viewer/state/autosave.svelte.d.ts +26 -2
  20. package/dist/viewer/state/autosave.svelte.d.ts.map +1 -1
  21. package/dist/viewer/state/create-viewer-state-collab.svelte.d.ts +23 -0
  22. package/dist/viewer/state/create-viewer-state-collab.svelte.d.ts.map +1 -1
  23. package/dist/viewer/state/create-viewer-state-presentation.svelte.d.ts.map +1 -1
  24. package/dist/viewer/state/create-viewer-state-types.d.ts +21 -4
  25. package/dist/viewer/state/create-viewer-state-types.d.ts.map +1 -1
  26. package/dist/viewer/state/create-viewer-state.svelte.d.ts.map +1 -1
  27. package/dist/viewer/state/viewer-options.svelte.d.ts +5 -3
  28. package/dist/viewer/state/viewer-options.svelte.d.ts.map +1 -1
  29. package/dist/viewer/state/viewer-parity-ui.svelte.d.ts +11 -0
  30. package/dist/viewer/state/viewer-parity-ui.svelte.d.ts.map +1 -1
  31. package/dist/viewer/state/viewer-state-options.d.ts.map +1 -1
  32. package/dist/viewer/state/viewport-handlers.d.ts +4 -0
  33. package/dist/viewer/state/viewport-handlers.d.ts.map +1 -1
  34. package/dist/viewer/types.d.ts +32 -8
  35. package/dist/viewer/types.d.ts.map +1 -1
  36. package/package.json +1 -1
@@ -295,12 +295,20 @@ var n = {
295
295
  "pptx.autosave.disabled": "AutoSave unavailable",
296
296
  "pptx.autosave.disabledNoFilePath": "AutoSave disabled: no file path provided",
297
297
  "pptx.autosave.disabledToggleOff": "AutoSave off",
298
+ "pptx.autosave.disabledByHost": "AutoSave turned off by this application",
299
+ "pptx.autosave.disabledReadOnly": "AutoSave disabled: this presentation is read-only",
298
300
  "pptx.autosave.justNow": "just now",
299
301
  "pptx.autosave.oneMinAgo": "1 min ago",
300
302
  "pptx.autosave.minutesAgo": "{{count}} min ago",
301
303
  "pptx.autosave.saveFailed": "Save failed",
302
304
  "pptx.autosave.savedShort": "Saved",
303
305
  "pptx.autosave.allChangesSaved": "All changes saved",
306
+ "pptx.autosave.recovery.title": "Recover unsaved changes?",
307
+ "pptx.autosave.recovery.message": 'An autosaved copy of "{{file}}" ({{size}}) has changes that are not in the version you just opened.',
308
+ "pptx.autosave.recovery.savedLabel": "Autosaved {{when}}",
309
+ "pptx.autosave.recovery.hoursAgo": "{{count}} h ago",
310
+ "pptx.autosave.recovery.restore": "Restore",
311
+ "pptx.autosave.recovery.discard": "Discard",
304
312
  "pptx.titleBar.autoSave": "AutoSave",
305
313
  "pptx.titleBar.autoSaveOn": "On",
306
314
  "pptx.titleBar.autoSaveOff": "Off",
@@ -28,6 +28,12 @@ export declare class PresentToolbarChrome {
28
28
  enter(): void;
29
29
  /** Pointer left the bar: restart the auto-hide countdown. */
30
30
  leave(): void;
31
+ /**
32
+ * PowerPoint's Ctrl+H: flip the show chrome. Deliberately the same `visible`
33
+ * flag auto-hide writes, and it re-arms the countdown when it reveals the bar,
34
+ * so the shortcut leaves the toolbar in a state the pointer can still govern.
35
+ */
36
+ toggleVisible(): void;
31
37
  /** Open `key`'s palette, or close it when it is already the open one. */
32
38
  togglePalette(key: PresentPaletteKey): void;
33
39
  /** Close both palettes (after picking a colour or choosing a tool). */
@@ -1 +1 @@
1
- {"version":3,"file":"presentation-toolbar.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/presentation-toolbar.svelte.ts"],"names":[],"mappings":"AAeA,6DAA6D;AAC7D,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,aAAa,CAAC;AAEtD,gFAAgF;AAChF,MAAM,WAAW,2BAA2B;IAC3C;;;;OAIG;IACH,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACvC,2EAA2E;IAC3E,UAAU,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;CACrC;AAED,qBAAa,oBAAoB;;IAChC,0EAA0E;IAC1E,OAAO,UAAiB;IACxB,oEAAoE;IACpE,SAAS,SAAa;IACtB,+DAA+D;IAC/D,OAAO,2BAA0C;IAYjD;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,IAAI;IAuCxD,2EAA2E;IAC3E,KAAK,IAAI,IAAI;IAMb,6DAA6D;IAC7D,KAAK,IAAI,IAAI;IAKb,yEAAyE;IACzE,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAI3C,uEAAuE;IACvE,aAAa,IAAI,IAAI;CAwBrB"}
1
+ {"version":3,"file":"presentation-toolbar.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/presentation-toolbar.svelte.ts"],"names":[],"mappings":"AAeA,6DAA6D;AAC7D,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,aAAa,CAAC;AAEtD,gFAAgF;AAChF,MAAM,WAAW,2BAA2B;IAC3C;;;;OAIG;IACH,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACvC,2EAA2E;IAC3E,UAAU,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;CACrC;AAED,qBAAa,oBAAoB;;IAChC,0EAA0E;IAC1E,OAAO,UAAiB;IACxB,oEAAoE;IACpE,SAAS,SAAa;IACtB,+DAA+D;IAC/D,OAAO,2BAA0C;IAYjD;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,IAAI;IAuCxD,2EAA2E;IAC3E,KAAK,IAAI,IAAI;IAMb,6DAA6D;IAC7D,KAAK,IAAI,IAAI;IAKb;;;;OAIG;IACH,aAAa,IAAI,IAAI;IASrB,yEAAyE;IACzE,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAI3C,uEAAuE;IACvE,aAAa,IAAI,IAAI;CAwBrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"editor-document-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/viewer/editor/editor-document-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,SAAS,EAAE;IACnB,YAAY,CAAC,EAAE,eAAe,EAAE;IAChC,WAAW,CAAC,EAAE,eAAe;IAC7B,aAAa,CAAC,EAAE,iBAAiB;IACjC,QAAQ,CAAC,EAAE,WAAW,EAAE;IACxB,cAAc,CAAC,EAAE,kBAAkB;IACnC,aAAa,CAAC,EAAE,iBAAiB;IACjC,gBAAgB,CAAC,EAAE,kBAAkB,EAAE;IACvC,YAAY,CAAC,EAAE,gBAAgB;IAC/B,sBAAsB,CAAC,EAAE,0BAA0B;IACnD,WAAW,CAAC,EAAE,cAAc,EAAE;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,gBAAgB,GAAG,IAAI,CA6BtF;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAS3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAKrF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,GAAG,SAAS,GAClC,IAAI,CAuBN;AAED,0EAA0E;AAC1E,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,kBAAkB,EAAE,GAC1B,IAAI,CASN;AAED,iFAAiF;AACjF,wBAAgB,0BAA0B,CACzC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,iBAAiB,EAAE,GAChC,IAAI,CAUN;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACpC,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,cAAuB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAkBrB"}
1
+ {"version":3,"file":"editor-document-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/viewer/editor/editor-document-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,SAAS,EAAE;IACnB,YAAY,CAAC,EAAE,eAAe,EAAE;IAChC,WAAW,CAAC,EAAE,eAAe;IAC7B,aAAa,CAAC,EAAE,iBAAiB;IACjC,QAAQ,CAAC,EAAE,WAAW,EAAE;IACxB,cAAc,CAAC,EAAE,kBAAkB;IACnC,aAAa,CAAC,EAAE,iBAAiB;IACjC,gBAAgB,CAAC,EAAE,kBAAkB,EAAE;IACvC,YAAY,CAAC,EAAE,gBAAgB;IAC/B,sBAAsB,CAAC,EAAE,0BAA0B;IACnD,WAAW,CAAC,EAAE,cAAc,EAAE;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAkCtF;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAS3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAKrF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,GAAG,SAAS,GAClC,IAAI,CAuBN;AAED,0EAA0E;AAC1E,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,kBAAkB,EAAE,GAC1B,IAAI,CASN;AAED,iFAAiF;AACjF,wBAAgB,0BAA0B,CACzC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,iBAAiB,EAAE,GAChC,IAAI,CAUN;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACpC,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,cAAuB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAkBrB"}
@@ -85,6 +85,20 @@ export declare class EditorState {
85
85
  readonly tableCells: TableCellSelection;
86
86
  editable: boolean;
87
87
  dirty: boolean;
88
+ /**
89
+ * Monotonic counter bumped by {@link setSlides}, i.e. every time a freshly
90
+ * loaded deck is installed as the working document.
91
+ *
92
+ * It exists because the loader's own `loadCount` is bumped in an EARLIER
93
+ * flush than the one that writes these slides: the seeding effect
94
+ * (`viewer-effects.svelte.ts`) reacts to `loadCount`, so by the time it calls
95
+ * `setSlides` the autosave effect has already run once, seen the new count
96
+ * against the old slides, and settled. The slide reassignment that followed
97
+ * then looked exactly like a user edit, and merely OPENING a deck wrote a
98
+ * crash-recovery snapshot. This counter changes in the SAME synchronous block
99
+ * as the slides it describes, so the reseed can never be misread again.
100
+ */
101
+ seedNonce: number;
88
102
  editTemplateMode: boolean;
89
103
  interactionActive: boolean;
90
104
  clipboard: ElementClipboardPayload | null;
@@ -1 +1 @@
1
- {"version":3,"file":"editor-state.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/editor/editor-state.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor-state.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/editor/editor-state.svelte.ts"],"names":[],"mappings":"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"}
@@ -183,11 +183,18 @@ interface XmlObject {
183
183
  [child: string]: XmlObject | XmlObject[] | string | undefined;
184
184
  }
185
185
  /**
186
- * Shape lock attributes from `p:cNvSpPr / a:spLocks`.
186
+ * Lock attributes from an element's non-visual properties node.
187
187
  *
188
188
  * When a flag is `true` the corresponding user interaction is disabled
189
189
  * in the editor (e.g. `noRotation` prevents free rotation of the shape).
190
190
  *
191
+ * One bag covers every family, but the families are NOT interchangeable in
192
+ * the file: `a:spLocks` (`CT_ShapeLocking`), `a:picLocks`, `a:cxnSpLocks`,
193
+ * `a:grpSpLocks` (`CT_GroupLocking`) and `a:graphicFrameLocks`
194
+ * (`CT_GraphicalObjectFrameLocking`) each declare their own attribute subset.
195
+ * `runtime/shape-lock-containers` holds that table and is what decides which
196
+ * of these fields may be written for a given element.
197
+ *
191
198
  * @example
192
199
  * ```ts
193
200
  * const locks: PptxShapeLocks = { noMove: true, noResize: true };
@@ -206,6 +213,14 @@ interface PptxShapeLocks {
206
213
  noAdjustHandles?: boolean;
207
214
  noChangeArrowheads?: boolean;
208
215
  noChangeShapeType?: boolean;
216
+ /**
217
+ * `a:graphicFrameLocks/@noDrilldown`: forbids selecting the individual
218
+ * parts inside a graphic frame (a chart series, a SmartArt node). Declared
219
+ * ONLY by `CT_GraphicalObjectFrameLocking`, so it is written for tables,
220
+ * charts, SmartArt, OLE objects and graphic-frame media, and never onto
221
+ * `a:spLocks` / `a:picLocks` / `a:cxnSpLocks` / `a:grpSpLocks`.
222
+ */
223
+ noDrilldown?: boolean;
209
224
  /**
210
225
  * Text-box flag from `p:cNvSpPr/@txBox`. Not a lock in the strict sense,
211
226
  * but it lives on the same non-visual-properties node as `a:spLocks`, so
@@ -9651,6 +9666,93 @@ interface FontEmbeddingDescriptor {
9651
9666
  declare function zoomInPercent(percent: number): number;
9652
9667
  /** The percentage one zoom-out press moves to, clamped. */
9653
9668
  declare function zoomOutPercent(percent: number): number;
9669
+ //#endregion
9670
+ //#region src/render/autosave-policy.d.ts
9671
+ /**
9672
+ * @fileoverview Who decides whether recovery autosave runs, and how often.
9673
+ *
9674
+ * ## The rule: the host prop is a ceiling, the toggle is a preference
9675
+ *
9676
+ * Two things can speak about autosave, and until now each binding invented its
9677
+ * own answer for what happens when both do:
9678
+ *
9679
+ * - the **host** passes an `autosave` prop. That is a POLICY: the embedder is
9680
+ * stating what its application permits.
9681
+ * - the **user** flips the title-bar AutoSave switch, or File > Options > Save
9682
+ * > AutoSave. That is a PREFERENCE, expressed inside whatever the host allows.
9683
+ *
9684
+ * A preference can never exceed a policy, so:
9685
+ *
9686
+ * - `autosave={false}` turns recovery autosave OFF and takes the toggle away
9687
+ * (`toggleAvailable: false`). A user cannot switch on what the application
9688
+ * forbade, and a switch that silently does nothing is worse than no switch.
9689
+ * - `autosave={true}`, or the prop omitted entirely, PERMITS autosave. The
9690
+ * user's toggle then decides, and it defaults to on.
9691
+ *
9692
+ * The prop is therefore only load-bearing when it is `false`. That is
9693
+ * deliberate: crash recovery that is off by default is crash recovery nobody
9694
+ * has, and the shared options schema already declares `save.autoSave: true` as
9695
+ * the user default, so any other prop default would contradict it. Vue, Svelte
9696
+ * and Vanilla previously defaulted to `false` and React and Angular to `true`;
9697
+ * `true` is the answer, and the three that defaulted off now write recovery
9698
+ * snapshots for hosts that never opted in. Pass `autosave={false}` to opt out.
9699
+ *
9700
+ * Two further gates are not negotiable by anyone, because without them there is
9701
+ * nothing to write or nowhere to write it: editing must be possible at all, and
9702
+ * a `filePath` must be set to key the IndexedDB record.
9703
+ *
9704
+ * ## Cadence follows the same rule
9705
+ *
9706
+ * An explicit `autosaveIntervalMs` prop is a policy and is honoured as given.
9707
+ * Otherwise the cadence is the user's own File > Options > Save > "Save
9708
+ * AutoRecover information every N minutes" (default two minutes), which React
9709
+ * and Angular already respected and the other three ignored.
9710
+ *
9711
+ * ## What the two engine shapes must agree on
9712
+ *
9713
+ * React and Angular POLL on a fixed interval; Vue, Svelte and Vanilla DEBOUNCE
9714
+ * on the edit. Both are legitimate, but a plain debounce has a failure mode a
9715
+ * poll does not: a user who keeps editing keeps re-arming the timer, so it can
9716
+ * defer a snapshot forever, and at the two-minute cadence that is an entire
9717
+ * session of lost work. {@link nextAutosaveDelayMs} caps the debounce so both
9718
+ * shapes make the same promise:
9719
+ *
9720
+ * **a snapshot lands no later than one interval after the first unsaved edit,
9721
+ * and no more often than once per interval.**
9722
+ *
9723
+ * @module render/autosave-policy
9724
+ */
9725
+ /**
9726
+ * Why autosave is not running. `autosave_toggle_off` and `no_file_path` are the
9727
+ * codes the title bar has always understood; the other two are new and fall
9728
+ * back to the generic message in bindings that do not map them.
9729
+ */
9730
+ type AutosaveDisabledReason = 'autosave_host_off' | 'autosave_toggle_off' | 'no_file_path' | 'read_only';
9731
+ /** Everything a binding needs to render the recovery dialog, and nothing else. */
9732
+ interface AutosaveRecoveryPrompt {
9733
+ /** IndexedDB key the snapshot is stored under (the deck's file path/name). */
9734
+ readonly filePath: string;
9735
+ /** When the snapshot was written (epoch ms). */
9736
+ readonly timestamp: number;
9737
+ /** Snapshot size in bytes. */
9738
+ readonly size: number;
9739
+ /** Whole minutes since it was written, floored at 0. */
9740
+ readonly ageMinutes: number;
9741
+ readonly titleKey: string;
9742
+ readonly messageKey: string;
9743
+ /** `size` is pre-formatted here because byte units are not translated. */
9744
+ readonly messageParams: {
9745
+ readonly file: string;
9746
+ readonly size: string;
9747
+ };
9748
+ /** Relative age, reusing the existing autosave age keys. */
9749
+ readonly ageKey: string;
9750
+ readonly ageParams: {
9751
+ readonly count: number;
9752
+ };
9753
+ readonly restoreKey: string;
9754
+ readonly discardKey: string;
9755
+ }
9654
9756
  /**
9655
9757
  * Why the deck is being serialised, which is a separate question from whether
9656
9758
  * the user protected it.
@@ -10572,13 +10674,28 @@ interface PowerPointViewerProps {
10572
10674
  /** Host override for the File > Open action. */
10573
10675
  onopenfile?: () => void;
10574
10676
  /**
10575
- * Enable debounced crash-recovery autosave. On each edit (when `editable`)
10576
- * the current slides are serialized to `.pptx` bytes and written to the
10577
- * shared IndexedDB recovery store (keyed by {@link filePath}), and
10578
- * `onautosave` is fired with the bytes. Requires `filePath`; without one the
10579
- * autosave indicator reads "disabled". This binding does not auto-restore on
10580
- * load; recovery is a host concern (see the re-exported `getAutosaveSnapshot`
10581
- * / `listAutosaveSnapshots` helpers). Default false.
10677
+ * POLICY CEILING for crash-recovery autosave. Not a switch the host flips on
10678
+ * the user's behalf: it states what this application permits, and the
10679
+ * title-bar AutoSave toggle (and File > Options > Save > AutoSave) is the
10680
+ * user's preference inside it.
10681
+ *
10682
+ * - `false` turns autosave off AND renders the toggle off and inert; a user
10683
+ * cannot switch on what the application forbade.
10684
+ * - `true`, or omitted, PERMITS autosave and lets the toggle decide.
10685
+ *
10686
+ * While active, each edit serializes the current slides to `.pptx` bytes,
10687
+ * writes them to the shared IndexedDB recovery store (keyed by
10688
+ * {@link filePath}) and fires `onautosave`. A snapshot lands no later than
10689
+ * one interval after the first unsaved edit, and no more often than once per
10690
+ * interval. Requires `filePath`; without one the indicator reads "disabled".
10691
+ *
10692
+ * On the next load of the same `filePath` the viewer OFFERS the snapshot back
10693
+ * in a "Recover unsaved changes?" dialog (Restore loads it in place, Discard
10694
+ * deletes it), unless this prop is `false`. The store is also reachable
10695
+ * directly through the re-exported `getAutosaveSnapshot` /
10696
+ * `listAutosaveSnapshots` helpers.
10697
+ *
10698
+ * @default true
10582
10699
  */
10583
10700
  autosave?: boolean;
10584
10701
  /** Fired when the desktop title bar toggles AutoSave for this viewer instance. */
@@ -10588,7 +10705,16 @@ interface PowerPointViewerProps {
10588
10705
  * Autosave is inert until this is set.
10589
10706
  */
10590
10707
  filePath?: string;
10591
- /** Autosave debounce window in milliseconds. Default 2000. */
10708
+ /**
10709
+ * Autosave cadence in milliseconds: the debounce window, and the ceiling on
10710
+ * how long an unbroken stream of edits may defer a snapshot.
10711
+ *
10712
+ * Optional, and a policy like {@link autosave}: pass it and it wins. Leave it
10713
+ * out and the cadence is the user's own File > Options > Save > "Save
10714
+ * AutoRecover information every N minutes", which defaults to two minutes.
10715
+ *
10716
+ * @default 120000 (Options > Save, "every 2 minutes")
10717
+ */
10592
10718
  autosaveIntervalMs?: number;
10593
10719
  /** Fired with the serialized `.pptx` bytes after each successful autosave. */
10594
10720
  onautosave?: (bytes: Uint8Array) => void;
@@ -10820,6 +10946,13 @@ declare class ExportUiState {
10820
10946
  * - Vue's debounce-on-edit trigger: an edit marks the document dirty and
10821
10947
  * (re)arms a debounce timer instead of polling on a fixed interval.
10822
10948
  *
10949
+ * The debounce is CAPPED by the shared `nextAutosaveDelayMs`, so it keeps the
10950
+ * same promise React's and Angular's polling engines do: a snapshot lands no
10951
+ * later than one interval after the FIRST unsaved edit, and no more often than
10952
+ * once per interval. Without that cap a user who keeps typing keeps re-arming
10953
+ * the timer, and at the two-minute AutoRecover cadence that is a whole session
10954
+ * of work that never reaches the recovery store.
10955
+ *
10823
10956
  * The controller registers its own edit-watching `$effect` in the constructor,
10824
10957
  * so the SFC only has to construct it once during setup and read its reactive
10825
10958
  * `status` / `isDirty` for the toolbar indicator.
@@ -10835,9 +10968,13 @@ declare class ExportUiState {
10835
10968
  */
10836
10969
  type AutosaveStatus = 'idle' | 'disabled' | 'saving' | 'saved' | 'error';
10837
10970
  interface AutosaveDeps {
10838
- /** Master on/off: host `autosave` prop AND editing allowed. */
10971
+ /**
10972
+ * Master on/off: the resolved activation (`resolveAutosaveActivation` in
10973
+ * shared), which folds the host policy, the user's toggle, editability and
10974
+ * the collaboration read-only veto into one answer.
10975
+ */
10839
10976
  getEnabled: () => boolean;
10840
- /** Debounce window in milliseconds. */
10977
+ /** Debounce window in milliseconds, and the ceiling on deferring a save. */
10841
10978
  getIntervalMs: () => number;
10842
10979
  /** IndexedDB record key (host `filePath`); autosave is disabled without one. */
10843
10980
  getFilePath: () => string | undefined;
@@ -10862,6 +10999,19 @@ interface AutosaveDeps {
10862
10999
  * a user edit), so the watcher clears dirty instead of arming a save.
10863
11000
  */
10864
11001
  getLoadCount: () => number;
11002
+ /**
11003
+ * Monotonic SEED counter, bumped in the same synchronous block that installs
11004
+ * the loaded slides (`EditorState.seedNonce`).
11005
+ *
11006
+ * `getLoadCount` alone is not enough, because the loader bumps it in an
11007
+ * earlier flush than the effect that copies its slides into the editor: this
11008
+ * watcher ran once on the count change (old slides, so nothing to do) and
11009
+ * then a second time on the slide reassignment, with the count already
11010
+ * settled - indistinguishable from an edit. Merely OPENING a deck therefore
11011
+ * marked it dirty and wrote a crash-recovery snapshot, so the next visit
11012
+ * offered to recover unsaved changes that never existed.
11013
+ */
11014
+ getSeedNonce?: () => number;
10865
11015
  /** Host callback with the freshly-serialized bytes on each successful save. */
10866
11016
  onSaved?: (bytes: Uint8Array) => void;
10867
11017
  }
@@ -11536,6 +11686,20 @@ declare class EditorState {
11536
11686
  readonly tableCells: TableCellSelection;
11537
11687
  editable: boolean;
11538
11688
  dirty: boolean;
11689
+ /**
11690
+ * Monotonic counter bumped by {@link setSlides}, i.e. every time a freshly
11691
+ * loaded deck is installed as the working document.
11692
+ *
11693
+ * It exists because the loader's own `loadCount` is bumped in an EARLIER
11694
+ * flush than the one that writes these slides: the seeding effect
11695
+ * (`viewer-effects.svelte.ts`) reacts to `loadCount`, so by the time it calls
11696
+ * `setSlides` the autosave effect has already run once, seen the new count
11697
+ * against the old slides, and settled. The slide reassignment that followed
11698
+ * then looked exactly like a user edit, and merely OPENING a deck wrote a
11699
+ * crash-recovery snapshot. This counter changes in the SAME synchronous block
11700
+ * as the slides it describes, so the reseed can never be misread again.
11701
+ */
11702
+ seedNonce: number;
11539
11703
  editTemplateMode: boolean;
11540
11704
  interactionActive: boolean;
11541
11705
  clipboard: ElementClipboardPayload | null;
@@ -12631,6 +12795,53 @@ declare class PresenterSession {
12631
12795
  private getChannel;
12632
12796
  }
12633
12797
 
12798
+ /**
12799
+ * autosave-recovery.svelte.ts: offer the crash-recovery snapshot back.
12800
+ *
12801
+ * This binding has always WRITTEN recovery snapshots (see `autosave.svelte.ts`)
12802
+ * and never once offered one back, so the whole feature was invisible: the user
12803
+ * lost a tab mid-edit, reopened the deck, and silently got the pre-crash work
12804
+ * thrown away. Every decision (is it worth probing, is the snapshot fresh
12805
+ * enough, has this tab already taken delivery of it, what should the prompt
12806
+ * say) lives in `pptx-viewer-shared`'s `render/autosave-recovery` so all five
12807
+ * bindings ask the same questions in the same order; this class is only the
12808
+ * runes wiring plus the two actions.
12809
+ *
12810
+ * It registers its own probing `$effect` in the constructor, exactly like
12811
+ * {@link AutosaveController}, so a caller only has to construct it during
12812
+ * component initialisation and render `prompt` when it is non-null.
12813
+ */
12814
+ interface AutosaveRecoveryDeps {
12815
+ /** IndexedDB record key (host `filePath`). Nothing to look up without one. */
12816
+ getFilePath: () => string | undefined;
12817
+ /**
12818
+ * Whether recovery snapshots are permitted at all, which is the HOST prop
12819
+ * (`autosave !== false`) and not the user's toggle: someone who merely
12820
+ * switched AutoSave off should still be offered the pre-crash snapshot that
12821
+ * was written while it was on.
12822
+ */
12823
+ getAutosaveAllowed: () => boolean;
12824
+ getLoading: () => boolean;
12825
+ getError: () => string | null;
12826
+ getSlideCount: () => number;
12827
+ /** Monotonic load counter: the probe runs once per loaded deck. */
12828
+ getLoadCount: () => number;
12829
+ /** The loader's own load path, the same one the backstage recent list uses. */
12830
+ load: (bytes: Uint8Array) => Promise<void> | void;
12831
+ }
12832
+ declare class AutosaveRecoveryController {
12833
+ #private;
12834
+ /** The prompt to render, or null when there is nothing to recover. */
12835
+ prompt: AutosaveRecoveryPrompt | null;
12836
+ constructor(deps: AutosaveRecoveryDeps);
12837
+ /** Take the snapshot: mark it consumed, then load its bytes in place. */
12838
+ restore(): Promise<void>;
12839
+ /** Decline the snapshot: delete it, and never load it. */
12840
+ discard(): Promise<void>;
12841
+ /** Close the prompt without touching the stored snapshot. */
12842
+ dismiss(): void;
12843
+ }
12844
+
12634
12845
  /** One element ring to draw on the canvas: an explicit pick or a live-tool focus. */
12635
12846
  interface AiCanvasHighlight {
12636
12847
  slideIndex: number;
@@ -12762,10 +12973,12 @@ declare class ViewerOptionsState {
12762
12973
  /** Accessibility > "feedback with sound" cue for a completed action. */
12763
12974
  playFeedback(): void;
12764
12975
  /**
12765
- * Autosave debounce in ms: the host prop until the user picks a custom
12766
- * AutoRecover cadence in Options > Save, which then takes over.
12976
+ * Options > Save > "Save AutoRecover information every N minutes", in
12977
+ * seconds. The autosave cadence whenever the host passed no explicit
12978
+ * `autosaveIntervalMs`; the host-vs-user precedence itself is decided by
12979
+ * `resolveAutosaveIntervalMs` in shared, not re-invented here.
12767
12980
  */
12768
- autosaveDebounceMs(hostIntervalMs: number, defaultMinutes: number): number;
12981
+ get autosaveIntervalSeconds(): number;
12769
12982
  /** Options > Save > "Delete cached files": drop all recovery snapshots. */
12770
12983
  clearCache(): Promise<void>;
12771
12984
  dispose(): void;
@@ -12784,6 +12997,48 @@ declare class CompareController {
12784
12997
  acceptAll(): void;
12785
12998
  }
12786
12999
 
13000
+ /** Which tool's colour palette is currently open, if any. */
13001
+ type PresentPaletteKey = 'pen' | 'highlighter';
13002
+ /** DOM getters {@link PresentToolbarChrome.attach} needs from the component. */
13003
+ interface PresentToolbarChromeTargets {
13004
+ /**
13005
+ * The positioned show surface the bar floats over. Used only for the
13006
+ * bottom-trigger-zone fast path; a missing container still shows the bar on
13007
+ * any movement, exactly as React's wrapper does.
13008
+ */
13009
+ getContainer: () => HTMLElement | null;
13010
+ /** The bar itself, so a mousedown outside it can close an open palette. */
13011
+ getToolbar: () => HTMLElement | null;
13012
+ }
13013
+ declare class PresentToolbarChrome {
13014
+ #private;
13015
+ /** Whether the bar is currently faded in and accepting pointer events. */
13016
+ visible: boolean;
13017
+ /** Milliseconds since the show started, refreshed once a second. */
13018
+ elapsedMs: number;
13019
+ /** The open colour palette, or `null` when both are closed. */
13020
+ palette: PresentPaletteKey | null;
13021
+ /**
13022
+ * Wire the document listeners and the one-second tick. Returns a teardown,
13023
+ * so a component can hand it straight to `$effect`.
13024
+ */
13025
+ attach(targets: PresentToolbarChromeTargets): () => void;
13026
+ /** Pointer entered the bar: pin it open until the pointer leaves again. */
13027
+ enter(): void;
13028
+ /** Pointer left the bar: restart the auto-hide countdown. */
13029
+ leave(): void;
13030
+ /**
13031
+ * PowerPoint's Ctrl+H: flip the show chrome. Deliberately the same `visible`
13032
+ * flag auto-hide writes, and it re-arms the countdown when it reveals the bar,
13033
+ * so the shortcut leaves the toolbar in a state the pointer can still govern.
13034
+ */
13035
+ toggleVisible(): void;
13036
+ /** Open `key`'s palette, or close it when it is already the open one. */
13037
+ togglePalette(key: PresentPaletteKey): void;
13038
+ /** Close both palettes (after picking a colour or choosing a tool). */
13039
+ closePalettes(): void;
13040
+ }
13041
+
12787
13042
  type PresentationInkTool = 'none' | 'pen' | 'highlighter' | 'eraser' | 'laser';
12788
13043
  interface PresentationStroke {
12789
13044
  id: string;
@@ -12841,6 +13096,16 @@ declare class RehearseState {
12841
13096
  declare class ViewerParityUiState {
12842
13097
  readonly compare: CompareController;
12843
13098
  readonly annotations: PresentationAnnotations;
13099
+ /**
13100
+ * The show toolbar's fade/auto-hide state. It lives here, not inside
13101
+ * `PresentationToolbar.svelte`, because PowerPoint's Ctrl+H toggles the show
13102
+ * chrome from the keyboard handler, which is nowhere near that component: a
13103
+ * second visibility flag over there would be overwritten by the next mouse
13104
+ * move, so the shortcut and the countdown share this one.
13105
+ */
13106
+ readonly showChrome: PresentToolbarChrome;
13107
+ /** PowerPoint's Ctrl+S "See All Slides" grid, over the running show. */
13108
+ allSlidesOpen: boolean;
12844
13109
  readonly rehearse: RehearseState;
12845
13110
  setupSlideShowOpen: boolean;
12846
13111
  headerFooterOpen: boolean;
@@ -12890,8 +13155,13 @@ interface CreateViewerStateOptions {
12890
13155
  getSource: () => Uint8Array | ArrayBuffer | null | undefined;
12891
13156
  collaboration?: CollaborationConfig;
12892
13157
  shareDefaults?: ShareDefaultsInput;
12893
- /** Host `autosave` prop (post-effect value the caller keeps in sync). */
12894
- getAutosave: () => boolean;
13158
+ /**
13159
+ * Host `autosave` prop, verbatim. `undefined` means the host said nothing,
13160
+ * which PERMITS autosave (the user's toggle then decides); only an explicit
13161
+ * `false` vetoes it and makes the toggle inert. See
13162
+ * `resolveAutosaveActivation` in `pptx-viewer-shared`.
13163
+ */
13164
+ getAutosave: () => boolean | undefined;
12895
13165
  autosaveIntervalMs?: number;
12896
13166
  getFilePath: () => string | undefined;
12897
13167
  getInitialSlide: () => number;
@@ -12955,6 +13225,8 @@ interface ViewerStateBag {
12955
13225
  readonly collab: CollaborationController;
12956
13226
  readonly dialogs: CollaborationDialogsState;
12957
13227
  readonly autosaveCtl: AutosaveController;
13228
+ /** The "recover unsaved changes?" probe + prompt for the loaded deck. */
13229
+ readonly autosaveRecovery: AutosaveRecoveryController;
12958
13230
  readonly presentation: PresentationController;
12959
13231
  readonly presenterSession: PresenterSession;
12960
13232
  readonly exportWiring: ExportWiring;
@@ -12990,8 +13262,17 @@ interface ViewerStateBag {
12990
13262
  * can flip it without waiting on the host.
12991
13263
  */
12992
13264
  editable: boolean;
12993
- /** Read-only: mutate via {@link setAutosaveEnabled}, which also fires `onautosavetoggle`. */
13265
+ /**
13266
+ * The EFFECTIVE title-bar AutoSave state: the user's preference, or false
13267
+ * when the host vetoed autosave (the switch renders off and inert rather
13268
+ * than pretending to work). Mutate via {@link setAutosaveEnabled}, which
13269
+ * also fires `onautosavetoggle`.
13270
+ */
12994
13271
  readonly autosaveEnabled: boolean;
13272
+ /** False only when the host passed `autosave={false}`; the toggle is then inert. */
13273
+ readonly autosaveToggleAvailable: boolean;
13274
+ /** Why autosave is not running, for a host that wants to explain it. */
13275
+ readonly autosaveDisabledReason: AutosaveDisabledReason | undefined;
12995
13276
  setAutosaveEnabled(enabled: boolean): void;
12996
13277
  presenterMode: boolean;
12997
13278
  /** `Date.now()` timestamp of the last `enterPresenterView()` call; the presenter view's elapsed-time display. */
@@ -1,11 +1,11 @@
1
- import { A as e, _ as s, c as t, d as i, f as l, ht as S, i as n, j as a, k as o, l as v, mt as d, n as p, o as b, p as c, r as g, s as x, t as m, u as w } from "../export-CZzvhGTm.js";
2
- var T = a, A = e, P = o;
1
+ import { A as e, M as a, _ as s, c as t, d as i, f as l, gt as S, ht as n, i as v, j as o, l as d, n as p, o as b, p as g, r as c, s as x, t as w, u as T } from "../export-Cp97qZ_g.js";
2
+ var m = a, A = o, P = e;
3
3
  export {
4
- m as PowerPointViewer,
5
- n as PresentationLoader,
6
- T as Ribbon,
4
+ w as PowerPointViewer,
5
+ v as PresentationLoader,
6
+ m as Ribbon,
7
7
  P as SlideCanvas,
8
- g as ViewerState,
8
+ c as ViewerState,
9
9
  A as ViewerToolbar,
10
10
  i as clampSlideIndex,
11
11
  s as createSvelteAiBridge,
@@ -13,10 +13,10 @@ export {
13
13
  b as exportAllSlidesToSvg,
14
14
  x as exportAllSlidesToSvgBlobs,
15
15
  t as exportSlideAsSvg,
16
- v as exportSlideToSvg,
17
- w as exportSlideToSvgBlob,
16
+ d as exportSlideToSvg,
17
+ T as exportSlideToSvgBlob,
18
18
  l as fitScale,
19
- c as resolveNavigationKey,
20
- d as zoomInPercent,
19
+ g as resolveNavigationKey,
20
+ n as zoomInPercent,
21
21
  S as zoomOutPercent
22
22
  };
@@ -0,0 +1,48 @@
1
+ import { AutosaveRecoveryPrompt } from 'pptx-viewer-shared';
2
+ /**
3
+ * autosave-recovery.svelte.ts: offer the crash-recovery snapshot back.
4
+ *
5
+ * This binding has always WRITTEN recovery snapshots (see `autosave.svelte.ts`)
6
+ * and never once offered one back, so the whole feature was invisible: the user
7
+ * lost a tab mid-edit, reopened the deck, and silently got the pre-crash work
8
+ * thrown away. Every decision (is it worth probing, is the snapshot fresh
9
+ * enough, has this tab already taken delivery of it, what should the prompt
10
+ * say) lives in `pptx-viewer-shared`'s `render/autosave-recovery` so all five
11
+ * bindings ask the same questions in the same order; this class is only the
12
+ * runes wiring plus the two actions.
13
+ *
14
+ * It registers its own probing `$effect` in the constructor, exactly like
15
+ * {@link AutosaveController}, so a caller only has to construct it during
16
+ * component initialisation and render `prompt` when it is non-null.
17
+ */
18
+ export interface AutosaveRecoveryDeps {
19
+ /** IndexedDB record key (host `filePath`). Nothing to look up without one. */
20
+ getFilePath: () => string | undefined;
21
+ /**
22
+ * Whether recovery snapshots are permitted at all, which is the HOST prop
23
+ * (`autosave !== false`) and not the user's toggle: someone who merely
24
+ * switched AutoSave off should still be offered the pre-crash snapshot that
25
+ * was written while it was on.
26
+ */
27
+ getAutosaveAllowed: () => boolean;
28
+ getLoading: () => boolean;
29
+ getError: () => string | null;
30
+ getSlideCount: () => number;
31
+ /** Monotonic load counter: the probe runs once per loaded deck. */
32
+ getLoadCount: () => number;
33
+ /** The loader's own load path, the same one the backstage recent list uses. */
34
+ load: (bytes: Uint8Array) => Promise<void> | void;
35
+ }
36
+ export declare class AutosaveRecoveryController {
37
+ #private;
38
+ /** The prompt to render, or null when there is nothing to recover. */
39
+ prompt: AutosaveRecoveryPrompt | null;
40
+ constructor(deps: AutosaveRecoveryDeps);
41
+ /** Take the snapshot: mark it consumed, then load its bytes in place. */
42
+ restore(): Promise<void>;
43
+ /** Decline the snapshot: delete it, and never load it. */
44
+ discard(): Promise<void>;
45
+ /** Close the prompt without touching the stored snapshot. */
46
+ dismiss(): void;
47
+ }
48
+ //# sourceMappingURL=autosave-recovery.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autosave-recovery.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/autosave-recovery.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAQjF;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,oBAAoB;IACpC,8EAA8E;IAC9E,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACtC;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAClC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,mEAAmE;IACnE,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAClD;AAED,qBAAa,0BAA0B;;IACtC,sEAAsE;IACtE,MAAM,gCAAmD;gBAO7C,IAAI,EAAE,oBAAoB;IAgCtC,yEAAyE;IACnE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,0DAA0D;IACpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,6DAA6D;IAC7D,OAAO,IAAI,IAAI;CAIf"}