pptx-svelte-viewer 3.4.0 → 3.5.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 (55) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/{AiChatPanel-DjHkDmi9.js → AiChatPanel-DnrMMtf7.js} +1 -1
  3. package/dist/{export-Bb3HzTLw.js → export-Bk-Ju0nY.js} +32090 -29408
  4. package/dist/i18n.js +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/pptx-svelte-viewer.css +1 -1
  7. package/dist/{translator-vErJ1kUG.js → translator-YCJ___7k.js} +41 -1
  8. package/dist/viewer/components/props-elements.d.ts +19 -0
  9. package/dist/viewer/components/props-elements.d.ts.map +1 -1
  10. package/dist/viewer/components/props-stage.d.ts +4 -0
  11. package/dist/viewer/components/props-stage.d.ts.map +1 -1
  12. package/dist/viewer/components/ribbon/review/comment-compose.svelte.d.ts +40 -0
  13. package/dist/viewer/components/ribbon/review/comment-compose.svelte.d.ts.map +1 -0
  14. package/dist/viewer/components/viewer-body-props.d.ts +14 -9
  15. package/dist/viewer/components/viewer-body-props.d.ts.map +1 -1
  16. package/dist/viewer/editor/editor-document-lifecycle.d.ts.map +1 -1
  17. package/dist/viewer/editor/editor-document-state.d.ts +6 -2
  18. package/dist/viewer/editor/editor-document-state.d.ts.map +1 -1
  19. package/dist/viewer/editor/editor-master-crud.d.ts +24 -0
  20. package/dist/viewer/editor/editor-master-crud.d.ts.map +1 -0
  21. package/dist/viewer/editor/editor-presentation-metadata.svelte.d.ts +7 -0
  22. package/dist/viewer/editor/editor-presentation-metadata.svelte.d.ts.map +1 -1
  23. package/dist/viewer/editor/editor-state.svelte.d.ts +43 -1
  24. package/dist/viewer/editor/editor-state.svelte.d.ts.map +1 -1
  25. package/dist/viewer/export/export-controller.svelte.d.ts.map +1 -1
  26. package/dist/viewer/export/export-print.d.ts +7 -1
  27. package/dist/viewer/export/export-print.d.ts.map +1 -1
  28. package/dist/viewer/index.d.ts +264 -6
  29. package/dist/viewer/index.js +1 -1
  30. package/dist/viewer/presentation/action-runner-callbacks.d.ts +18 -0
  31. package/dist/viewer/presentation/action-runner-callbacks.d.ts.map +1 -0
  32. package/dist/viewer/presentation/presentation-controller.svelte.d.ts +31 -2
  33. package/dist/viewer/presentation/presentation-controller.svelte.d.ts.map +1 -1
  34. package/dist/viewer/state/compat-toasts.svelte.d.ts +28 -0
  35. package/dist/viewer/state/compat-toasts.svelte.d.ts.map +1 -0
  36. package/dist/viewer/state/create-viewer-state-editor-ui.svelte.d.ts +4 -0
  37. package/dist/viewer/state/create-viewer-state-editor-ui.svelte.d.ts.map +1 -1
  38. package/dist/viewer/state/create-viewer-state-presentation.svelte.d.ts.map +1 -1
  39. package/dist/viewer/state/create-viewer-state-types.d.ts +10 -0
  40. package/dist/viewer/state/create-viewer-state-types.d.ts.map +1 -1
  41. package/dist/viewer/state/create-viewer-state.svelte.d.ts.map +1 -1
  42. package/dist/viewer/state/guide-id.d.ts +9 -0
  43. package/dist/viewer/state/guide-id.d.ts.map +1 -0
  44. package/dist/viewer/state/inspector-deck.d.ts +9 -2
  45. package/dist/viewer/state/inspector-deck.d.ts.map +1 -1
  46. package/dist/viewer/state/presentation-loader.svelte.d.ts +20 -1
  47. package/dist/viewer/state/presentation-loader.svelte.d.ts.map +1 -1
  48. package/dist/viewer/state/read-only-recommendation.svelte.d.ts +34 -0
  49. package/dist/viewer/state/read-only-recommendation.svelte.d.ts.map +1 -0
  50. package/dist/viewer/state/viewer-effects.svelte.d.ts.map +1 -1
  51. package/dist/viewer/state/viewer-parity-ui.svelte.d.ts +19 -7
  52. package/dist/viewer/state/viewer-parity-ui.svelte.d.ts.map +1 -1
  53. package/dist/viewer/state/viewport-handlers.d.ts +4 -0
  54. package/dist/viewer/state/viewport-handlers.d.ts.map +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ /**
2
+ * New alignment-guide id (`pptx-viewer-shared`'s `Guide.id`), mirroring the
3
+ * element-id shape `editor-insert.ts` already uses for new elements. Guide
4
+ * creation happens from two sites (the ruler-drag drop in `ViewerMain` and
5
+ * the ribbon/mobile "Add H/V Guide" buttons in `ViewerChrome`), so this is
6
+ * shared between them rather than duplicated.
7
+ */
8
+ export declare function nextGuideId(): string;
9
+ //# sourceMappingURL=guide-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide-id.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/guide-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC"}
@@ -1,5 +1,5 @@
1
1
  import { PptxAppProperties, PptxCoreProperties, PptxCustomProperty, PptxPresentationProperties, PptxThemeOption } from 'pptx-viewer-core';
2
- import { CanvasSize, SlideSizeEmu } from 'pptx-viewer-shared';
2
+ import { CanvasSize, SlideSizeEmu, SlideSizeRescaleMode } from 'pptx-viewer-shared';
3
3
  import { EditorState } from '../editor/editor-state.svelte';
4
4
  import { PresentationLoader } from './presentation-loader.svelte';
5
5
  /**
@@ -22,6 +22,8 @@ export interface InspectorDeckActions {
22
22
  readonly notesCanvasSize: CanvasSize | undefined;
23
23
  /** The deck's `p:sldSz` in EMU, which is what a save persists. */
24
24
  readonly slideSize: SlideSizeEmu | undefined;
25
+ /** Whether any slide has at least one element; gates the Maximize/Ensure Fit rescale prompt. */
26
+ readonly hasContent: boolean;
25
27
  /** Apply a packaged theme part by archive path (React's `handleApplyTheme`). */
26
28
  applyThemeByPath(themePath: string, applyToAllMasters: boolean): void;
27
29
  /** Resize the slide canvas (inspector SLIDE SIZE card's raw W/H inputs). */
@@ -30,8 +32,13 @@ export interface InspectorDeckActions {
30
32
  * Adopt an EMU slide size (a preset pick or an orientation flip). Writes the
31
33
  * EMU state AND the pixel canvas, so the stage resizes and the save keeps the
32
34
  * exact authored dimensions.
35
+ *
36
+ * `rescaleMode` is set only when the user confirmed the Maximize/Ensure Fit
37
+ * prompt for a size change that affects existing content: the shared
38
+ * `scaleSlidesForSizeChange` transform is applied to every slide as ONE
39
+ * undo step together with the size change (`commitSlides`).
33
40
  */
34
- updateSlideSize(size: SlideSizeEmu): void;
41
+ updateSlideSize(size: SlideSizeEmu, rescaleMode?: SlideSizeRescaleMode): void;
35
42
  /** Patch deck-wide slide-show / print settings (PRESENTATION card). */
36
43
  updatePresentationProperties(patch: Partial<PptxPresentationProperties>): void;
37
44
  /** Patch document core properties (Title / Author / ...). */
@@ -1 +1 @@
1
- {"version":3,"file":"inspector-deck.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/inspector-deck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,eAAe,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,CAAC;IACzC,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,eAAe,EAAE,UAAU,GAAG,SAAS,CAAC;IACjD,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,YAAY,GAAG,SAAS,CAAC;IAC7C,gFAAgF;IAChF,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;IACtE,4EAA4E;IAC5E,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACzC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1C,uEAAuE;IACvE,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC;IAC/E,6DAA6D;IAC7D,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;IAC/D,4DAA4D;IAC5D,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAC7D,iDAAiD;IACjD,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;IACzD;;;;OAIG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACnE,wDAAwD;IACxD,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;CACpB;AAED,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,CAqHxF;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,eAAuC,CAAC;AAE/E,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAErE;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,IAAI,oBAAoB,GAAG,SAAS,CAEnE"}
1
+ {"version":3,"file":"inspector-deck.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/inspector-deck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,eAAe,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AASzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,CAAC;IACzC,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,eAAe,EAAE,UAAU,GAAG,SAAS,CAAC;IACjD,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,YAAY,GAAG,SAAS,CAAC;IAC7C,gGAAgG;IAChG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,gFAAgF;IAChF,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;IACtE,4EAA4E;IAC5E,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACzC;;;;;;;;;OASG;IACH,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC9E,uEAAuE;IACvE,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC;IAC/E,6DAA6D;IAC7D,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;IAC/D,4DAA4D;IAC5D,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAC7D,iDAAiD;IACjD,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;IACzD;;;;OAIG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACnE,wDAAwD;IACxD,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;CACpB;AAED,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,CAiIxF;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,eAAuC,CAAC;AAE/E,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAErE;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,IAAI,oBAAoB,GAAG,SAAS,CAEnE"}
@@ -1,4 +1,4 @@
1
- import { ParsedTableStyleMap, PptxAppProperties, PptxCoreProperties, PptxCustomProperty, PptxEmbeddedFont, PptxHandoutMaster, PptxHeaderFooter, PptxHandlerLoadOptions, PptxNotesMaster, PptxPresentationProperties, PptxCustomShow, PptxSection, PptxSlide, PptxSlideMaster, PptxTagCollection, PptxThemeColorScheme, PptxTheme, PptxThemeOption, PptxViewProperties, PptxHandler } from 'pptx-viewer-core';
1
+ import { ParsedTableStyleMap, PptxAppProperties, PptxCommentAuthor, PptxCoreProperties, PptxCustomProperty, PptxEmbeddedFont, PptxCompatibilityWarning, PptxHandoutMaster, PptxHeaderFooter, PptxHandlerLoadOptions, PptxModernCommentAuthor, PptxModifyVerifier, PptxNotesMaster, PptxPresentationProperties, PptxCustomShow, PptxSection, PptxSlide, PptxSlideMaster, PptxTagCollection, PptxThemeColorScheme, PptxTheme, PptxThemeOption, PptxViewProperties, PptxHandler } from 'pptx-viewer-core';
2
2
  import { CanvasSize, CollabLoadOrigin, SlideSizeEmu } from 'pptx-viewer-shared';
3
3
  /**
4
4
  * Reactive load pipeline for the Svelte viewer: the runes port of the Vue
@@ -28,7 +28,20 @@ export declare class PresentationLoader {
28
28
  * `p:presentationPr`.
29
29
  */
30
30
  viewProperties: PptxViewProperties | undefined;
31
+ /** Write-protection verifier from `p:modifyVerifier` (`presentation.xml`). */
32
+ modifyVerifier: PptxModifyVerifier | undefined;
33
+ /**
34
+ * Every compatibility warning the load (and any save/patch so far this
35
+ * session) has raised, from `handler.getCompatibilityWarnings()`: unmodelled
36
+ * markup round-tripped only via `rawXml`, an external image reference that
37
+ * cannot be embedded, and so on. Feeds the compat-toast stack (wave 4 #3).
38
+ */
39
+ compatibilityWarnings: PptxCompatibilityWarning[];
31
40
  customShows: PptxCustomShow[];
41
+ /** Modern comment authors (`ppt/authors.xml`, Office 2021 `p188:author`), for the @-mention typeahead (wave-4 B5). */
42
+ modernCommentAuthors: PptxModernCommentAuthor[];
43
+ /** Legacy comment authors (`ppt/commentAuthors.xml`), round-tripped and offered to the typeahead alongside the modern list. */
44
+ commentAuthors: PptxCommentAuthor[];
32
45
  coreProperties: PptxCoreProperties | undefined;
33
46
  appProperties: PptxAppProperties | undefined;
34
47
  customProperties: PptxCustomProperty[];
@@ -92,6 +105,12 @@ export declare class PresentationLoader {
92
105
  getLoadOptions: () => Pick<PptxHandlerLoadOptions, 'allowExternalImages'>;
93
106
  /** Parse a `.pptx` buffer into reactive viewer state. */
94
107
  load(raw: Uint8Array | ArrayBuffer, origin?: CollabLoadOrigin): Promise<void>;
108
+ /**
109
+ * Replace the live handler with one core rebuilt (master-view CRUD returns
110
+ * a fresh package rather than a patch). Disposes the previous handler; the
111
+ * Blob URLs stay valid because the media parts are unchanged.
112
+ */
113
+ adoptHandler(next: PptxHandler): void;
95
114
  /** Cancel in-flight loads, revoke Blob URLs, dispose the handler. */
96
115
  dispose(): void;
97
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"presentation-loader.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/presentation-loader.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAsB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWrF;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;;IAC9B,8DAA8D;IAC9D,MAAM,cAA+B;IACrC,wEAAwE;IACxE,YAAY,oBAAqC;IACjD,WAAW,8BAAsD;IACjE,aAAa,gCAAwD;IACrE,QAAQ,gBAAiC;IACzC,YAAY,mBAAoC;IAChD,sBAAsB,6BAA8C;IACpE;;;;;;OAMG;IACH,cAAc,iCAAyD;IACvE,WAAW,mBAAoC;IAC/C,cAAc,iCAAyD;IACvE,aAAa,gCAAwD;IACrE,gBAAgB,uBAAwC;IACxD,qFAAqF;IACrF,cAAc,sBAAuC;IACrD,aAAa,qBAAsC;IACnD,oBAAoB,UAAiB;IACrC,qBAAqB,SAAa;IAClC,mBAAmB,UAAiB;IACpC,yDAAyD;IACzD,SAAS,UAAiB;IAC1B,eAAe,yBAAiD;IAChE,4EAA4E;IAC5E,YAAY,oBAAqC;IACjD,mCAAmC;IACnC,UAAU,aAGP;IACH;;;;;;;;;OASG;IACH,SAAS,2BAAmD;IAC5D,qEAAqE;IACrE,aAAa,sBAA8C;IAC3D,4EAA4E;IAC5E,WAAW,mCAA2D;IACtE,iBAAiB,wBAAgD;IACjE,qEAAqE;IACrE,aAAa,kCAA0D;IACvE,sCAAsC;IACtC,OAAO,UAAiB;IACxB,wDAAwD;IACxD,KAAK,gBAA+B;IACpC,wEAAwE;IACxE,WAAW,UAAiB;IAC5B,4DAA4D;IAC5D,OAAO,qBAAwC;IAC/C,wEAAwE;IACxE,SAAS,SAAa;IAKtB;;;;OAIG;IACH,UAAU,EAAE,gBAAgB,CAAkB;IAE9C;;;;;;;;;OASG;IACH,cAAc,EAAE,MAAM,IAAI,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,CAAc;IAEvF,yDAAyD;IACnD,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,WAAW,EAAE,MAAM,GAAE,gBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuG3F,qEAAqE;IACrE,OAAO,IAAI,IAAI;CAQf"}
1
+ {"version":3,"file":"presentation-loader.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/presentation-loader.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAsB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWrF;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;;IAC9B,8DAA8D;IAC9D,MAAM,cAA+B;IACrC,wEAAwE;IACxE,YAAY,oBAAqC;IACjD,WAAW,8BAAsD;IACjE,aAAa,gCAAwD;IACrE,QAAQ,gBAAiC;IACzC,YAAY,mBAAoC;IAChD,sBAAsB,6BAA8C;IACpE;;;;;;OAMG;IACH,cAAc,iCAAyD;IACvE,8EAA8E;IAC9E,cAAc,iCAAyD;IACvE;;;;;OAKG;IACH,qBAAqB,6BAA8C;IACnE,WAAW,mBAAoC;IAC/C,sHAAsH;IACtH,oBAAoB,4BAA6C;IACjE,+HAA+H;IAC/H,cAAc,sBAAuC;IACrD,cAAc,iCAAyD;IACvE,aAAa,gCAAwD;IACrE,gBAAgB,uBAAwC;IACxD,qFAAqF;IACrF,cAAc,sBAAuC;IACrD,aAAa,qBAAsC;IACnD,oBAAoB,UAAiB;IACrC,qBAAqB,SAAa;IAClC,mBAAmB,UAAiB;IACpC,yDAAyD;IACzD,SAAS,UAAiB;IAC1B,eAAe,yBAAiD;IAChE,4EAA4E;IAC5E,YAAY,oBAAqC;IACjD,mCAAmC;IACnC,UAAU,aAGP;IACH;;;;;;;;;OASG;IACH,SAAS,2BAAmD;IAC5D,qEAAqE;IACrE,aAAa,sBAA8C;IAC3D,4EAA4E;IAC5E,WAAW,mCAA2D;IACtE,iBAAiB,wBAAgD;IACjE,qEAAqE;IACrE,aAAa,kCAA0D;IACvE,sCAAsC;IACtC,OAAO,UAAiB;IACxB,wDAAwD;IACxD,KAAK,gBAA+B;IACpC,wEAAwE;IACxE,WAAW,UAAiB;IAC5B,4DAA4D;IAC5D,OAAO,qBAAwC;IAC/C,wEAAwE;IACxE,SAAS,SAAa;IAKtB;;;;OAIG;IACH,UAAU,EAAE,gBAAgB,CAAkB;IAE9C;;;;;;;;;OASG;IACH,cAAc,EAAE,MAAM,IAAI,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,CAAc;IAEvF,yDAAyD;IACnD,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,WAAW,EAAE,MAAM,GAAE,gBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2G3F;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAQrC,qEAAqE;IACrE,OAAO,IAAI,IAAI;CAQf"}
@@ -0,0 +1,34 @@
1
+ import { PptxCustomProperty, PptxModifyVerifier } from 'pptx-viewer-core';
2
+ import { ReadOnlyRecommendation } from 'pptx-viewer-shared';
3
+ /**
4
+ * ReadOnlyRecommendationState: the Trust-Center-style banner shown when a
5
+ * loaded deck asks to be opened read-only (`p:modifyVerifier`, or `docProps/
6
+ * custom.xml`'s "Mark as Final"), and the lock that goes with it. Svelte port
7
+ * of Vue's `useReadOnlyRecommendation` composable.
8
+ *
9
+ * `locked` is meant to be ANDed into the SAME `getEditable` gate the viewer
10
+ * already reads (Protected View, collaboration read-only), not a second
11
+ * editability mechanism. `reset()` is called from the load-commit hook
12
+ * (`onContentApplied`) so a newly opened document is evaluated fresh even if
13
+ * a previous one was unlocked.
14
+ */
15
+ export declare class ReadOnlyRecommendationState {
16
+ #private;
17
+ constructor(deps: {
18
+ getModifyVerifier(): PptxModifyVerifier | undefined;
19
+ getCustomProperties(): PptxCustomProperty[];
20
+ });
21
+ /** The current recommendation (`kind: null` when the deck asks for nothing). */
22
+ get recommendation(): ReadOnlyRecommendation;
23
+ /** Whether the banner should render. */
24
+ get showBanner(): boolean;
25
+ /** Whether editing should currently be blocked because of this recommendation. */
26
+ get locked(): boolean;
27
+ /** "Edit anyway": lifts the lock and hides the banner for this document. */
28
+ editAnyway(): void;
29
+ /** "Dismiss": hides the banner but leaves the lock (if any) in place. */
30
+ dismiss(): void;
31
+ /** Re-arm the recommendation for a newly loaded document. */
32
+ reset(): void;
33
+ }
34
+ //# sourceMappingURL=read-only-recommendation.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-only-recommendation.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/read-only-recommendation.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE;;;;;;;;;;;GAWG;AACH,qBAAa,2BAA2B;;gBAM3B,IAAI,EAAE;QACjB,iBAAiB,IAAI,kBAAkB,GAAG,SAAS,CAAC;QACpD,mBAAmB,IAAI,kBAAkB,EAAE,CAAC;KAC5C;IAKD,gFAAgF;IAChF,IAAI,cAAc,IAAI,sBAAsB,CAK3C;IAED,wCAAwC;IACxC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,kFAAkF;IAClF,IAAI,MAAM,IAAI,OAAO,CAGpB;IAED,4EAA4E;IAC5E,UAAU,IAAI,IAAI;IAKlB,yEAAyE;IACzE,OAAO,IAAI,IAAI;IAIf,6DAA6D;IAC7D,KAAK,IAAI,IAAI;CAIb"}
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-effects.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/viewer-effects.svelte.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IACjC,SAAS,IAAI,UAAU,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACzD,WAAW,IAAI,OAAO,CAAC;IACvB,eAAe,IAAI,MAAM,CAAC;IAC1B,aAAa,IAAI,UAAU,CAAC;IAC5B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9D,UAAU,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,gBAAgB,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1D;;;;;;;OAOG;IACH,gBAAgB,CAAC,IAAI,IAAI,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAmH9D"}
1
+ {"version":3,"file":"viewer-effects.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/viewer-effects.svelte.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IACjC,SAAS,IAAI,UAAU,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACzD,WAAW,IAAI,OAAO,CAAC;IACvB,eAAe,IAAI,MAAM,CAAC;IAC1B,aAAa,IAAI,UAAU,CAAC;IAC5B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9D,UAAU,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,gBAAgB,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1D;;;;;;;OAOG;IACH,gBAAgB,CAAC,IAAI,IAAI,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAuH9D"}
@@ -1,4 +1,4 @@
1
- import { ViewerPreferences } from 'pptx-viewer-shared';
1
+ import { DeckViewPreferences, Guide } from 'pptx-viewer-shared';
2
2
  import { CompareController } from '../compare/compare-controller.svelte';
3
3
  import { PresentToolbarChrome } from '../components/presentation-toolbar.svelte';
4
4
  import { EditorState } from '../editor/editor-state.svelte';
@@ -52,15 +52,27 @@ export declare class ViewerParityUiState {
52
52
  readingViewOpen: boolean;
53
53
  /** View tab > Outline View: the deck as one editable indented text document. */
54
54
  outlineViewOpen: boolean;
55
+ /** View > H/V Guides. Also seeded from the deck's `slideViewPr/@showGuides`. */
55
56
  showGuides: boolean;
57
+ /**
58
+ * "Snap to shape" (View ▸ Snap Objects to Other Objects): the on-drag
59
+ * alignment-guide snap. Also seeded from the deck's
60
+ * `slideViewPr/@snapToObjects` (shared's `DeckViewPreferences.snapToObjects`
61
+ * field; this binding's own historical name for the same toggle).
62
+ */
56
63
  snapToShape: boolean;
57
- guides: {
58
- axis: "h" | "v";
59
- position: number;
60
- }[];
61
- preferences: ViewerPreferences;
64
+ guides: Guide[];
65
+ /**
66
+ * Also carries the deck-authored `snapToObjects`/`showGuides`/
67
+ * `gridSpacingCx`/`gridSpacingCy` fields (`DeckViewPreferences`, a superset
68
+ * of the base `ViewerPreferences` toggles), even though `showGuides` and
69
+ * `snapToShape` above are the fields this binding actually reads: keeping
70
+ * them here too is what lets `viewerPreferencesFromViewProperties` seed (and
71
+ * `viewPropertiesPatchFromPreferences` later read back) a single object.
72
+ */
73
+ preferences: DeckViewPreferences;
62
74
  constructor(editor: EditorState);
63
75
  syncAutosave(enabled: boolean): void;
64
- updatePreferences(next: ViewerPreferences, onAutosaveChange: (enabled: boolean) => void): void;
76
+ updatePreferences(next: DeckViewPreferences, onAutosaveChange: (enabled: boolean) => void): void;
65
77
  }
66
78
  //# sourceMappingURL=viewer-parity-ui.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-parity-ui.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/viewer-parity-ui.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,6EAA6E;AAC7E,qBAAa,mBAAmB;IAC/B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,WAAW,0BAAiC;IACrD;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,uBAA8B;IACjD,wEAAwE;IACxE,aAAa,UAAiB;IAC9B;;;;OAIG;IACH,uBAAuB;WAAe,MAAM;WAAK,MAAM;aAAiB;IACxE,QAAQ,CAAC,QAAQ,gBAAuB;IACxC,kBAAkB,UAAiB;IACnC,gBAAgB,UAAiB;IACjC,YAAY,UAAiB;IAC7B,aAAa,UAAiB;IAC9B,mBAAmB,UAAiB;IACpC,iBAAiB,UAAiB;IAClC,gBAAgB,UAAiB;IACjC,eAAe,UAAiB;IAChC;;;;;;;;OAQG;IACH,kBAAkB,gBAA+B;IACjD,iBAAiB,UAAiB;IAClC,eAAe,UAAiB;IAChC,+EAA+E;IAC/E,eAAe,UAAiB;IAChC,gFAAgF;IAChF,eAAe,UAAiB;IAChC,UAAU,UAAiB;IAC3B,WAAW,UAAgB;IAC3B,MAAM;cAAkB,GAAG,GAAG,GAAG;kBAAY,MAAM;QAAU;IAC7D,WAAW,oBAAgE;gBAE/D,MAAM,EAAE,WAAW;IAI/B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIpC,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;CAI9F"}
1
+ {"version":3,"file":"viewer-parity-ui.svelte.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/viewer-parity-ui.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,6EAA6E;AAC7E,qBAAa,mBAAmB;IAC/B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,WAAW,0BAAiC;IACrD;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,uBAA8B;IACjD,wEAAwE;IACxE,aAAa,UAAiB;IAC9B;;;;OAIG;IACH,uBAAuB;WAAe,MAAM;WAAK,MAAM;aAAiB;IACxE,QAAQ,CAAC,QAAQ,gBAAuB;IACxC,kBAAkB,UAAiB;IACnC,gBAAgB,UAAiB;IACjC,YAAY,UAAiB;IAC7B,aAAa,UAAiB;IAC9B,mBAAmB,UAAiB;IACpC,iBAAiB,UAAiB;IAClC,gBAAgB,UAAiB;IACjC,eAAe,UAAiB;IAChC;;;;;;;;OAQG;IACH,kBAAkB,gBAA+B;IACjD,iBAAiB,UAAiB;IAClC,eAAe,UAAiB;IAChC,+EAA+E;IAC/E,eAAe,UAAiB;IAChC,gFAAgF;IAChF,eAAe,UAAiB;IAChC,gFAAgF;IAChF,UAAU,UAAiB;IAC3B;;;;;OAKG;IACH,WAAW,UAAgB;IAC3B,MAAM,UAAuB;IAC7B;;;;;;;OAOG;IACH,WAAW,sBAAkE;gBAEjE,MAAM,EAAE,WAAW;IAI/B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIpC,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;CAIhG"}
@@ -25,6 +25,10 @@ export interface ViewportHandlersDeps {
25
25
  toggleChrome?(): void;
26
26
  /** Raise PowerPoint's "See All Slides" navigator (Ctrl+S). */
27
27
  showAllSlides?(): void;
28
+ /** Start the show from slide 1 (F5): the ribbon's "From Beginning" button. */
29
+ onStartFromBeginning?(): void;
30
+ /** Start the show on the active slide (Shift+F5): the ribbon's "From Current Slide" button. */
31
+ onStartFromCurrent?(): void;
28
32
  }
29
33
  export interface ViewportHandlers {
30
34
  onFullscreenToggle(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"viewport-handlers.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/viewport-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAUlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACpC,SAAS,IAAI,cAAc,GAAG,SAAS,CAAC;IACxC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gBAAgB,IAAI,OAAO,CAAC;IAC5B,+EAA+E;IAC/E,YAAY,EAAE,sBAAsB,CAAC;IACrC,wCAAwC;IACxC,SAAS,CAAC,IAAI,IAAI,CAAC;IACnB,iEAAiE;IACjE,cAAc,CAAC,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACrD,4CAA4C;IAC5C,gBAAgB,CAAC,IAAI,IAAI,CAAC;IAC1B,wCAAwC;IACxC,eAAe,CAAC,IAAI,IAAI,CAAC;IACzB,6DAA6D;IAC7D,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IAC7C,0DAA0D;IAC1D,eAAe,CAAC,IAAI,IAAI,CAAC;IACzB,2DAA2D;IAC3D,YAAY,CAAC,IAAI,IAAI,CAAC;IACtB,8DAA8D;IAC9D,aAAa,CAAC,IAAI,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAChC,kBAAkB,IAAI,IAAI,CAAC;IAC3B,kBAAkB,IAAI,IAAI,CAAC;IAC3B,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,6EAA6E;IAC7E,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CACjC;AA4FD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,GAAG,gBAAgB,CAoEnF"}
1
+ {"version":3,"file":"viewport-handlers.d.ts","sourceRoot":"","sources":["../../../src/viewer/state/viewport-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAWlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACpC,SAAS,IAAI,cAAc,GAAG,SAAS,CAAC;IACxC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gBAAgB,IAAI,OAAO,CAAC;IAC5B,+EAA+E;IAC/E,YAAY,EAAE,sBAAsB,CAAC;IACrC,wCAAwC;IACxC,SAAS,CAAC,IAAI,IAAI,CAAC;IACnB,iEAAiE;IACjE,cAAc,CAAC,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACrD,4CAA4C;IAC5C,gBAAgB,CAAC,IAAI,IAAI,CAAC;IAC1B,wCAAwC;IACxC,eAAe,CAAC,IAAI,IAAI,CAAC;IACzB,6DAA6D;IAC7D,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IAC7C,0DAA0D;IAC1D,eAAe,CAAC,IAAI,IAAI,CAAC;IACzB,2DAA2D;IAC3D,YAAY,CAAC,IAAI,IAAI,CAAC;IACtB,8DAA8D;IAC9D,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,8EAA8E;IAC9E,oBAAoB,CAAC,IAAI,IAAI,CAAC;IAC9B,+FAA+F;IAC/F,kBAAkB,CAAC,IAAI,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAChC,kBAAkB,IAAI,IAAI,CAAC;IAC3B,kBAAkB,IAAI,IAAI,CAAC;IAC3B,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,6EAA6E;IAC7E,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CACjC;AA4FD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,GAAG,gBAAgB,CA8FnF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pptx-svelte-viewer",
3
- "version": "3.4.0",
3
+ "version": "3.5.1",
4
4
  "description": "Svelte 5 PowerPoint viewer and editor component: render, edit, present, and export PPTX slides in the browser.",
5
5
  "keywords": [
6
6
  "office",