pptx-vue-viewer 1.5.2 → 1.6.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 (41) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +37 -19
  3. package/dist/gif-encoder-1oQk8IOn.js +2 -0
  4. package/dist/gif-encoder-1oQk8IOn.js.br +3 -0
  5. package/dist/gif-encoder-1oQk8IOn.js.gz +0 -0
  6. package/dist/gif-encoder-DYX4iRih.cjs +2 -0
  7. package/dist/gif-encoder-DYX4iRih.cjs.br +0 -0
  8. package/dist/gif-encoder-DYX4iRih.cjs.gz +0 -0
  9. package/dist/index.cjs +1 -1
  10. package/dist/index.cjs.br +0 -0
  11. package/dist/index.cjs.gz +0 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.js.br +0 -0
  16. package/dist/index.js.gz +0 -0
  17. package/dist/viewer/PowerPointViewer.vue.d.ts +10 -2
  18. package/dist/viewer/PowerPointViewer.vue.d.ts.map +1 -1
  19. package/dist/viewer/index.cjs +1 -1
  20. package/dist/viewer/index.cjs.br +0 -0
  21. package/dist/viewer/index.cjs.gz +0 -0
  22. package/dist/viewer/index.js +1 -1
  23. package/dist/viewer/index.js.br +0 -0
  24. package/dist/viewer/index.js.gz +0 -0
  25. package/dist/viewer/types.d.ts +13 -5
  26. package/dist/viewer/types.d.ts.map +1 -1
  27. package/dist/{viewer-90hBuLYm.cjs → viewer-3CMqXDnN.cjs} +80 -4
  28. package/dist/viewer-3CMqXDnN.cjs.br +0 -0
  29. package/dist/{viewer-90hBuLYm.cjs.gz → viewer-3CMqXDnN.cjs.gz} +0 -0
  30. package/dist/{viewer-BEoa6OFB.js → viewer-DnYNLAqp.js} +80 -4
  31. package/dist/viewer-DnYNLAqp.js.br +0 -0
  32. package/dist/{viewer-BEoa6OFB.js.gz → viewer-DnYNLAqp.js.gz} +0 -0
  33. package/package.json +1 -1
  34. package/dist/gif-encoder-CBDIqbU9.cjs +0 -2
  35. package/dist/gif-encoder-CBDIqbU9.cjs.br +0 -0
  36. package/dist/gif-encoder-CBDIqbU9.cjs.gz +0 -0
  37. package/dist/gif-encoder-i2G5pvrX.js +0 -2
  38. package/dist/gif-encoder-i2G5pvrX.js.br +0 -0
  39. package/dist/gif-encoder-i2G5pvrX.js.gz +0 -0
  40. package/dist/viewer-90hBuLYm.cjs.br +0 -0
  41. package/dist/viewer-BEoa6OFB.js.br +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ All notable changes to this project are documented here.
4
4
  This file is generated from [Conventional Commits](https://www.conventionalcommits.org)
5
5
  by [git-cliff](https://git-cliff.org); do not edit it by hand.
6
6
 
7
+ ## [1.5.3](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-vue-viewer@1.5.3) - 2026-07-04
8
+
9
+ ## [1.5.2](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-vue-viewer@1.5.2) - 2026-07-04
10
+
7
11
  ## [1.5.1](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-vue-viewer@1.5.1) - 2026-07-04
8
12
 
9
13
  ## [1.5.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-vue-viewer@1.5.0) - 2026-07-04
package/README.md CHANGED
@@ -33,6 +33,7 @@ The rendering is done by the framework-agnostic [`pptx-viewer-core`](https://www
33
33
  - **Export**: PNG, PDF, GIF, and WebM video; print; Save As (pptx/ppsx/pptm).
34
34
  - **Collaboration**: real-time Yjs-based co-editing with cursor/selection presence.
35
35
  - **Comments, find/replace, accessibility panel, version history**, and more.
36
+ - **Mobile chrome**: touch toolbar, bottom bar with sheets, and touch editing.
36
37
  - **Slide navigation**: live thumbnail previews, previous/next, and a slide counter.
37
38
  - **Zoom**: in, out, and reset.
38
39
  - **Themeable**: change colours through CSS custom properties.
@@ -161,17 +162,41 @@ async function save() {
161
162
 
162
163
  ### Events
163
164
 
164
- | Event | Payload | Description |
165
- | --------------------- | ------------ | -------------------------------------------------- |
166
- | `active-slide-change` | `number` | Emits the active slide index on navigation. |
167
- | `content-change` | `Uint8Array` | Emits updated bytes after any editing change. |
168
- | `dirty-change` | `boolean` | Emits `true`/`false` when the dirty state changes. |
165
+ | Event | Payload | Description |
166
+ | --------------------- | ------------ | ------------------------------------------------------------------------------------ |
167
+ | `active-slide-change` | `number` | Emits the active slide index on navigation. |
168
+ | `content-change` | `Uint8Array` | Emits updated bytes after any editing change. |
169
+ | `dirty-change` | `boolean` | Emits `true`/`false` when the dirty state changes. |
170
+ | `mode-change` | `string` | Emits the new mode when it changes (`'preview'`, `'edit'`, `'present'`, `'master'`). |
171
+ | `zoom-change` | `number` | Emits the new zoom level (1 = 100%). |
172
+ | `selection-change` | `string[]` | Emits the selected element IDs when selection changes. |
173
+ | `slide-count-change` | `number` | Emits the total slide count when slides are added/removed. |
169
174
 
170
175
  ### Exposed methods (template `ref`)
171
176
 
172
- | Method | Returns | Description |
173
- | -------------- | --------------------- | ---------------------------------------------- |
174
- | `getContent()` | `Promise<Uint8Array>` | Serialise the current presentation to `.pptx`. |
177
+ | Method | Returns | Description |
178
+ | ------------------------- | --------------------- | ---------------------------------------------- |
179
+ | `getContent()` | `Promise<Uint8Array>` | Serialise the current presentation to `.pptx`. |
180
+ | `goTo(index)` | `void` | Navigate to a slide by zero-based index. |
181
+ | `goPrev()` | `void` | Navigate to the previous slide. |
182
+ | `goNext()` | `void` | Navigate to the next slide. |
183
+ | `undo()` | `void` | Undo the last editing action. |
184
+ | `redo()` | `void` | Redo the last undone action. |
185
+ | `canUndo()` | `boolean` | Whether an undo action is available. |
186
+ | `canRedo()` | `boolean` | Whether a redo action is available. |
187
+ | `getZoom()` | `number` | Get the current zoom level. |
188
+ | `setZoom(level)` | `void` | Set the zoom level (clamped to 0.2 - 3.0). |
189
+ | `zoomIn()` | `void` | Zoom in by one step. |
190
+ | `zoomOut()` | `void` | Zoom out by one step. |
191
+ | `zoomReset()` | `void` | Reset zoom to 100%. |
192
+ | `getMode()` | `ViewerMode` | Get the current viewer mode. |
193
+ | `setMode(mode)` | `void` | Switch mode programmatically. |
194
+ | `getActiveSlideIndex()` | `number` | Get the zero-based active slide index. |
195
+ | `getSlideCount()` | `number` | Get the total number of slides. |
196
+ | `isDirty()` | `boolean` | Whether the document has unsaved changes. |
197
+ | `getSelectedElementIds()` | `string[]` | Get IDs of currently selected elements. |
198
+ | `selectElements(ids)` | `void` | Programmatically select elements by ID. |
199
+ | `clearSelection()` | `void` | Clear the current selection. |
175
200
 
176
201
  ### Exported components & helpers
177
202
 
@@ -200,17 +225,10 @@ Switch languages with `i18n.global.locale.value = 'fr'`. `pptx-vue-viewer/i18n`
200
225
 
201
226
  ## Limitations
202
227
 
203
- The Vue package is at functional parity with the React package across the
204
- editing, rendering, and presentation surface: secondary/log/display-unit chart
205
- axes (with trendlines, error bars, and data tables), real CSS-3D extruded faces,
206
- image `clrChange` chroma-key and shape `effectDag` duotone, interactive GLB/GLTF
207
- 3D models, slide master/layout template editing, and zoom tiles that show the
208
- target slide's background, number, and section name (matching React; as in React,
209
- the tile is a styled summary rather than a live re-render of the target slide).
210
-
211
- The only differences from React are the CSS-rendering approximations the two
212
- share by design (see the root README's Limitations: `backdrop-filter` and path
213
- gradients are approximated on screen, and a few effects flatten in raster export).
228
+ A handful of effects (`backdrop-filter`, path gradients) are approximated on
229
+ screen, and a few effects flatten in raster export; see the root README's
230
+ Limitations for details.
231
+
214
232
  The `pptx-viewer-core` engine parses all slide data, so anything not surfaced in
215
233
  the UI is still readable from the model.
216
234
 
@@ -0,0 +1,2 @@
1
+ import { H as r } from "./viewer-DnYNLAqp.js";
2
+ export { r as encodeGif };
@@ -0,0 +1,3 @@
1
+ �$�import { H as r } from "./viewer-DnYNLAqp.js";
2
+ export { r as encodeGif };
3
+ 
Binary file
@@ -0,0 +1,2 @@
1
+ const e = require("./viewer-3CMqXDnN.cjs");
2
+ exports.encodeGif = e.encodeGif;
Binary file
Binary file
package/dist/index.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const e = require("./viewer-90hBuLYm.cjs");
2
+ const e = require("./viewer-3CMqXDnN.cjs");
3
3
  exports.AUDIENCE_HASH = e.AUDIENCE_HASH, exports.ElementRenderer = e.ElementRenderer_default, exports.PowerPointViewer = e.PowerPointViewer_default, exports.SlideCanvas = e.SlideCanvas_default, exports.SlideStage = e.SlideStage_default, exports.clearAudienceContent = e.clearAudienceContent, exports.cn = e.cn, exports.defaultCssVars = e.defaultCssVars, exports.defaultRadius = e.defaultRadius, exports.defaultThemeColors = e.defaultThemeColors, exports.isAudienceTab = e.isAudienceTab, exports.loadAudienceContent = e.loadAudienceContent, exports.provideViewerTheme = e.provideViewerTheme, exports.storeAudienceContent = e.storeAudienceContent, exports.themeToCssVars = e.themeToCssVars, exports.useThemeStyle = e.useThemeStyle, exports.useViewerTheme = e.useViewerTheme;
package/dist/index.cjs.br CHANGED
Binary file
package/dist/index.cjs.gz CHANGED
Binary file
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { PowerPointViewer, SlideCanvas, SlideStage, ElementRenderer } from './viewer';
2
2
  export type { PowerPointViewerProps, PowerPointViewerEmits, PowerPointViewerExpose, CollaborationConfig, CollaborationRole, CanvasSize, } from './viewer';
3
+ export type { ViewerMode, PowerPointViewerAPI } from 'pptx-viewer-shared';
3
4
  export { AUDIENCE_HASH, isAudienceTab, storeAudienceContent, loadAudienceContent, clearAudienceContent, } from './viewer';
4
5
  export { cn } from './utils';
5
6
  export type { ViewerTheme, ViewerThemeColors } from './theme';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACtF,YAAY,EACX,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,GACV,MAAM,UAAU,CAAC;AAGlB,OAAO,EACN,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EACN,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,aAAa,GACb,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACtF,YAAY,EACX,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,GACV,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EACN,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EACN,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,aAAa,GACb,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { B as a, F as s, G as e, N as r, P as i, V as o, a as t, d as n, f as d, i as l, n as m, o as p, p as w, r as P, t as S, u as f, z as v } from "./viewer-BEoa6OFB.js";
1
+ import { B as a, F as s, G as e, N as r, P as i, V as o, a as t, d as n, f as d, i as l, n as m, o as p, p as w, r as P, t as S, u as f, z as v } from "./viewer-DnYNLAqp.js";
2
2
  export { S as AUDIENCE_HASH, w as ElementRenderer, p as PowerPointViewer, f as SlideCanvas, d as SlideStage, m as clearAudienceContent, n as cn, v as defaultCssVars, a as defaultRadius, o as defaultThemeColors, P as isAudienceTab, l as loadAudienceContent, r as provideViewerTheme, t as storeAudienceContent, e as themeToCssVars, i as useThemeStyle, s as useViewerTheme };
package/dist/index.js.br CHANGED
Binary file
package/dist/index.js.gz CHANGED
Binary file
@@ -3,14 +3,22 @@ declare const __VLS_export: import('vue').DefineComponent<PowerPointViewerProps,
3
3
  "dirty-change": (isDirty: boolean) => any;
4
4
  "content-change": (content: Uint8Array<ArrayBufferLike>) => any;
5
5
  autosave: (content: Uint8Array<ArrayBufferLike>) => any;
6
- "active-slide-change": (slideIndex: number) => any;
6
+ "active-slide-change": (value: number) => any;
7
+ "zoom-change": (value: number) => any;
8
+ "slide-count-change": (value: number) => any;
9
+ "mode-change": (mode: string) => any;
10
+ "selection-change": (elementIds: string[]) => any;
7
11
  "start-collaboration": (config: import('pptx-viewer-shared').CollaborationConfig) => any;
8
12
  "stop-collaboration": () => any;
9
13
  }, string, import('vue').PublicProps, Readonly<PowerPointViewerProps> & Readonly<{
10
14
  "onDirty-change"?: ((isDirty: boolean) => any) | undefined;
11
15
  "onContent-change"?: ((content: Uint8Array<ArrayBufferLike>) => any) | undefined;
12
16
  onAutosave?: ((content: Uint8Array<ArrayBufferLike>) => any) | undefined;
13
- "onActive-slide-change"?: ((slideIndex: number) => any) | undefined;
17
+ "onActive-slide-change"?: ((value: number) => any) | undefined;
18
+ "onZoom-change"?: ((value: number) => any) | undefined;
19
+ "onSlide-count-change"?: ((value: number) => any) | undefined;
20
+ "onMode-change"?: ((mode: string) => any) | undefined;
21
+ "onSelection-change"?: ((elementIds: string[]) => any) | undefined;
14
22
  "onStart-collaboration"?: ((config: import('pptx-viewer-shared').CollaborationConfig) => any) | undefined;
15
23
  "onStop-collaboration"?: (() => any) | undefined;
16
24
  }>, {
@@ -1 +1 @@
1
- {"version":3,"file":"PowerPointViewer.vue.d.ts","sourceRoot":"","sources":["../../src/viewer/PowerPointViewer.vue"],"names":[],"mappings":"AAmjEA,OAAO,KAAK,EAAyB,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AA2kHpG,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;6EAKhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"PowerPointViewer.vue.d.ts","sourceRoot":"","sources":["../../src/viewer/PowerPointViewer.vue"],"names":[],"mappings":"AAopEA,OAAO,KAAK,EAAyB,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AA4qHpG,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;6EAKhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const e = require("../viewer-90hBuLYm.cjs");
2
+ const e = require("../viewer-3CMqXDnN.cjs");
3
3
  exports.AUDIENCE_HASH = e.AUDIENCE_HASH, exports.ChartRenderer = e.ChartRenderer_default, exports.ConnectorRenderer = e.ConnectorRenderer_default, exports.DEFAULT_CANVAS_HEIGHT = e.DEFAULT_CANVAS_HEIGHT, exports.DEFAULT_CANVAS_WIDTH = e.DEFAULT_CANVAS_WIDTH, exports.DEFAULT_FILL_COLOR = e.DEFAULT_FILL_COLOR, exports.DEFAULT_STROKE_COLOR = e.DEFAULT_STROKE_COLOR, exports.DEFAULT_TEXT_COLOR = e.DEFAULT_TEXT_COLOR, exports.ElementRenderer = e.ElementRenderer_default, exports.EquationRenderer = e.EquationRenderer_default, exports.InkRenderer = e.InkRenderer_default, exports.Model3DRenderer = e.Model3DRenderer_default, exports.OleRenderer = e.OleRenderer_default, exports.PowerPointViewer = e.PowerPointViewer_default, exports.SlideCanvas = e.SlideCanvas_default, exports.SlideStage = e.SlideStage_default, exports.SmartArtRenderer = e.SmartArtRenderer_default, exports.TableRenderer = e.TableRenderer_default, exports.WordArtText = e.WordArtText_default, exports.ZoomRenderer = e.ZoomRenderer_default, exports.buildInitialGuides = e.buildInitialGuides, exports.clearAudienceContent = e.clearAudienceContent, exports.collectImagePaths = e.collectImagePaths, exports.collectMediaElements = e.collectMediaElements, exports.getContainerStyle = e.getContainerStyle, exports.getImageSrc = e.getImageSrc, exports.getResolvedShapeClipPath = e.getResolvedShapeClipPath, exports.getResolvedShapeClipPathFor = e.getResolvedShapeClipPathFor, exports.getShapeFillStrokeStyle = e.getShapeFillStrokeStyle, exports.getTextBlockStyle = e.getTextBlockStyle, exports.isAudienceTab = e.isAudienceTab, exports.loadAudienceContent = e.loadAudienceContent, exports.storeAudienceContent = e.storeAudienceContent, exports.useEditorHistory = e.useEditorHistory, exports.useEditorOperations = e.useEditorOperations, exports.useLoadContent = e.useLoadContent;
Binary file
Binary file
@@ -1,2 +1,2 @@
1
- import { A as a, C as s, D as e, E as r, I as n, L as d, M as o, O as t, R, S as i, T as l, U as m, W as S, _ as w, a as C, b as p, c as v, f as x, g as A, h as E, i as T, j as b, k as c, l as f, m as g, n as h, o as j, p as k, r as u, s as D, t as I, u as M, v as O, w as P, x as W, y as q } from "../viewer-BEoa6OFB.js";
1
+ import { A as a, C as s, D as e, E as r, I as n, L as d, M as o, O as t, R, S as i, T as l, U as m, W as S, _ as w, a as C, b as p, c as v, f as x, g as A, h as E, i as T, j as b, k as c, l as f, m as g, n as h, o as j, p as k, r as u, s as D, t as I, u as M, v as O, w as P, x as W, y as q } from "../viewer-DnYNLAqp.js";
2
2
  export { I as AUDIENCE_HASH, s as ChartRenderer, i as ConnectorRenderer, t as DEFAULT_CANVAS_HEIGHT, c as DEFAULT_CANVAS_WIDTH, a as DEFAULT_FILL_COLOR, b as DEFAULT_STROKE_COLOR, o as DEFAULT_TEXT_COLOR, k as ElementRenderer, W as EquationRenderer, p as InkRenderer, q as Model3DRenderer, O as OleRenderer, j as PowerPointViewer, M as SlideCanvas, x as SlideStage, w as SmartArtRenderer, A as TableRenderer, E as WordArtText, g as ZoomRenderer, n as buildInitialGuides, h as clearAudienceContent, d as collectImagePaths, R as collectMediaElements, P as getContainerStyle, l as getImageSrc, m as getResolvedShapeClipPath, S as getResolvedShapeClipPathFor, r as getShapeFillStrokeStyle, e as getTextBlockStyle, u as isAudienceTab, T as loadAudienceContent, C as storeAudienceContent, f as useEditorHistory, v as useEditorOperations, D as useLoadContent };
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- import { CanvasSize, CollaborationConfig, CollaborationRole } from 'pptx-viewer-shared';
1
+ import { CanvasSize, CollaborationConfig, CollaborationRole, PowerPointViewerAPI } from 'pptx-viewer-shared';
2
2
  import { ViewerTheme } from '../theme';
3
3
  /**
4
4
  * Public component types for the Vue PowerPoint viewer.
@@ -89,6 +89,10 @@ export interface PowerPointViewerProps {
89
89
  * - `onDirtyChange` → `@dirty-change`
90
90
  * - `onContentChange` → `@content-change`
91
91
  * - `onActiveSlideChange` → `@active-slide-change`
92
+ * - `onModeChange` → `@mode-change`
93
+ * - `onZoomChange` → `@zoom-change`
94
+ * - `onSelectionChange` → `@selection-change`
95
+ * - `onSlideCountChange` → `@slide-count-change`
92
96
  */
93
97
  export interface PowerPointViewerEmits {
94
98
  /** Fired when the unsaved-changes flag toggles. */
@@ -98,8 +102,12 @@ export interface PowerPointViewerEmits {
98
102
  * edits) and when autosave persists the presentation.
99
103
  */
100
104
  (e: 'content-change' | 'autosave', content: Uint8Array): void;
101
- /** Fired when the active slide changes. */
102
- (e: 'active-slide-change', slideIndex: number): void;
105
+ /** Fired when the active slide, zoom level, or slide count changes. */
106
+ (e: 'active-slide-change' | 'zoom-change' | 'slide-count-change', value: number): void;
107
+ /** Fired when the viewer mode changes. */
108
+ (e: 'mode-change', mode: string): void;
109
+ /** Fired when element selection changes. */
110
+ (e: 'selection-change', elementIds: string[]): void;
103
111
  /** Fired when the user starts a collaboration session from the Share dialog. */
104
112
  (e: 'start-collaboration', config: CollaborationConfig): void;
105
113
  /** Fired when the user stops a collaboration session from the Share dialog. */
@@ -107,7 +115,7 @@ export interface PowerPointViewerEmits {
107
115
  }
108
116
  /**
109
117
  * Imperative surface exposed via `defineExpose`, retrievable through a
110
- * template ref. Mirrors the React `PowerPointViewerHandle`.
118
+ * template ref. Implements the shared {@link PowerPointViewerAPI} contract.
111
119
  *
112
120
  * @example
113
121
  * ```vue
@@ -121,7 +129,7 @@ export interface PowerPointViewerEmits {
121
129
  * </script>
122
130
  * ```
123
131
  */
124
- export interface PowerPointViewerExpose {
132
+ export interface PowerPointViewerExpose extends PowerPointViewerAPI {
125
133
  /** Serialise the current presentation to `.pptx` bytes. */
126
134
  getContent: () => Promise<Uint8Array>;
127
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/viewer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;;;;;;;;;;;GAiBG;AACH,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,yDAAyD;IACzD,OAAO,EAAE,UAAU,GAAG,WAAW,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,kDAAkD;IAClD,aAAa,CAAC,EAAE;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACrC,mDAAmD;IACnD,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C;;;OAGG;IACH,CAAC,CAAC,EAAE,gBAAgB,GAAG,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9D,2CAA2C;IAC3C,CAAC,CAAC,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,gFAAgF;IAChF,CAAC,CAAC,EAAE,qBAAqB,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC9D,+EAA+E;IAC/E,CAAC,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,sBAAsB;IACtC,2DAA2D;IAC3D,UAAU,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;CACtC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/viewer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;;;;;;;;;;;GAiBG;AACH,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,yDAAyD;IACzD,OAAO,EAAE,UAAU,GAAG,WAAW,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,kDAAkD;IAClD,aAAa,CAAC,EAAE;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,qBAAqB;IACrC,mDAAmD;IACnD,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C;;;OAGG;IACH,CAAC,CAAC,EAAE,gBAAgB,GAAG,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9D,uEAAuE;IACvE,CAAC,CAAC,EAAE,qBAAqB,GAAG,aAAa,GAAG,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvF,0CAA0C;IAC1C,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,4CAA4C;IAC5C,CAAC,CAAC,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpD,gFAAgF;IAChF,CAAC,CAAC,EAAE,qBAAqB,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC9D,+EAA+E;IAC/E,CAAC,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IAClE,2DAA2D;IAC3D,UAAU,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;CACtC"}
@@ -35454,7 +35454,7 @@ function hQ(e) {
35454
35454
  canvasSize: a,
35455
35455
  rasterizeSlide: d
35456
35456
  }), m = function(e) {
35457
- const { slideCount: t, rasterizeSlide: o } = e, r = e.loadGifEncoder ?? (async () => (await Promise.resolve().then(() => require("./gif-encoder-CBDIqbU9.cjs"))).encodeGif), a = e.createRecorder ?? fQ, l = e.createCanvas ?? (() => document.createElement("canvas")), i = e.downloadBlob ?? qi, s = (0, n.ref)(!1), c = (0, n.ref)(0);
35457
+ const { slideCount: t, rasterizeSlide: o } = e, r = e.loadGifEncoder ?? (async () => (await Promise.resolve().then(() => require("./gif-encoder-DYX4iRih.cjs"))).encodeGif), a = e.createRecorder ?? fQ, l = e.createCanvas ?? (() => document.createElement("canvas")), i = e.downloadBlob ?? qi, s = (0, n.ref)(!1), c = (0, n.ref)(0);
35458
35458
  return {
35459
35459
  exporting: s,
35460
35460
  progress: c,
@@ -36934,6 +36934,10 @@ var RQ = ["tabindex"], UQ = {
36934
36934
  "content-change",
36935
36935
  "autosave",
36936
36936
  "active-slide-change",
36937
+ "zoom-change",
36938
+ "slide-count-change",
36939
+ "mode-change",
36940
+ "selection-change",
36937
36941
  "start-collaboration",
36938
36942
  "stop-collaboration"
36939
36943
  ],
@@ -37048,7 +37052,15 @@ var RQ = ["tabindex"], UQ = {
37048
37052
  pushHistory: oe.pushHistory,
37049
37053
  selectedElementIds: te,
37050
37054
  templateElementsBySlideId: p
37051
- }), ae = (0, n.computed)(() => te.value.length > 0), le = (0, n.computed)(() => p.value[R.value?.id ?? ""] ?? []);
37055
+ }), ae = (0, n.computed)(() => te.value.length > 0);
37056
+ (0, n.watch)(Y, (e) => {
37057
+ l("zoom-change", e);
37058
+ }), (0, n.watch)(te, (e) => {
37059
+ l("selection-change", e);
37060
+ }), (0, n.watch)(O, (e) => {
37061
+ l("slide-count-change", e);
37062
+ });
37063
+ const le = (0, n.computed)(() => p.value[R.value?.id ?? ""] ?? []);
37052
37064
  function ie(e) {
37053
37065
  return nr(e) ? le.value.find((t) => t.id === e) : R.value?.elements.find((t) => t.id === e);
37054
37066
  }
@@ -37749,7 +37761,11 @@ var RQ = ["tabindex"], UQ = {
37749
37761
  slides: d,
37750
37762
  pushHistory: oe.pushHistory,
37751
37763
  ops: re
37752
- }), Sr = (Er = {
37764
+ });
37765
+ (0, n.watch)(vr, (e) => {
37766
+ l("mode-change", e);
37767
+ });
37768
+ const Sr = (Er = {
37753
37769
  ribbonMode: vr,
37754
37770
  canEdit: () => a.canEdit,
37755
37771
  isMobile: Yn,
@@ -37861,7 +37877,67 @@ var RQ = ["tabindex"], UQ = {
37861
37877
  ...DQ(Er)
37862
37878
  })));
37863
37879
  var Er;
37864
- return o({ getContent: I }), (e, t) => ((0, n.openBlock)(), (0, n.createElementBlock)("div", {
37880
+ return o({
37881
+ getContent: I,
37882
+ goTo: U,
37883
+ goPrev: W,
37884
+ goNext: j,
37885
+ undo: () => oe.undo(),
37886
+ redo: () => oe.redo(),
37887
+ canUndo: () => oe.canUndo.value,
37888
+ canRedo: () => oe.canRedo.value,
37889
+ getZoom: () => Y.value,
37890
+ setZoom: (e) => {
37891
+ Y.value = Math.min(Math.max(e, .2), 3);
37892
+ },
37893
+ zoomIn: X,
37894
+ zoomOut: q,
37895
+ zoomReset: Z,
37896
+ getMode: () => vr.value,
37897
+ setMode: (e) => {
37898
+ "present" === e ? dt() : "master" === e ? io.value = !0 : (ut.value = !1, io.value = !1);
37899
+ },
37900
+ getActiveSlideIndex: () => _.value,
37901
+ setActiveSlideIndex: (e) => U(e),
37902
+ getSlideCount: () => O.value,
37903
+ isDirty: () => ln.isDirty.value,
37904
+ getSlides: () => d.value,
37905
+ getSlide: (e) => d.value[e],
37906
+ getActiveSlide: () => R.value,
37907
+ addSlide: () => rt.addSlide(),
37908
+ deleteSlides: (e) => {
37909
+ for (const t of [...e].sort((e, t) => t - e)) rt.deleteSlide(t);
37910
+ },
37911
+ duplicateSlides: (e) => {
37912
+ for (const t of e) rt.duplicateSlide(t);
37913
+ },
37914
+ moveSlide: (e, t) => rt.moveSlide(e, t),
37915
+ toggleHideSlides: (e) => {
37916
+ for (const t of e) _t(t);
37917
+ },
37918
+ getElements: (e) => {
37919
+ const t = e ?? _.value;
37920
+ return d.value[t]?.elements ?? [];
37921
+ },
37922
+ getElementById: (e, t) => {
37923
+ const n = t ?? _.value;
37924
+ return d.value[n]?.elements.find((t) => t.id === e);
37925
+ },
37926
+ updateElement: (e, t) => {
37927
+ re.updateElement(e, t);
37928
+ },
37929
+ deleteElements: (e) => {
37930
+ for (const t of e) re.removeElement(t);
37931
+ },
37932
+ duplicateElement: (e) => re.duplicateElement(e),
37933
+ getSelectedElementIds: () => te.value,
37934
+ selectElements: (e) => {
37935
+ te.value = e;
37936
+ },
37937
+ clearSelection: () => {
37938
+ te.value = [];
37939
+ }
37940
+ }), (e, t) => ((0, n.openBlock)(), (0, n.createElementBlock)("div", {
37865
37941
  ref_key: "viewerRootRef",
37866
37942
  ref: Gn,
37867
37943
  class: (0, n.normalizeClass)(["pptx-vue-viewer", a.class]),
Binary file
@@ -35453,7 +35453,7 @@ function k5(e) {
35453
35453
  canvasSize: a,
35454
35454
  rasterizeSlide: c
35455
35455
  }), d = function(e) {
35456
- const { slideCount: t, rasterizeSlide: n } = e, o = e.loadGifEncoder ?? (async () => (await import("./gif-encoder-i2G5pvrX.js")).encodeGif), a = e.createRecorder ?? y5, r = e.createCanvas ?? (() => document.createElement("canvas")), l = e.downloadBlob ?? Zp, i = nt(!1), s = nt(0);
35456
+ const { slideCount: t, rasterizeSlide: n } = e, o = e.loadGifEncoder ?? (async () => (await import("./gif-encoder-1oQk8IOn.js")).encodeGif), a = e.createRecorder ?? y5, r = e.createCanvas ?? (() => document.createElement("canvas")), l = e.downloadBlob ?? Zp, i = nt(!1), s = nt(0);
35457
35457
  return {
35458
35458
  exporting: i,
35459
35459
  progress: s,
@@ -36932,6 +36932,10 @@ var Y5 = ["tabindex"], V5 = {
36932
36932
  "content-change",
36933
36933
  "autosave",
36934
36934
  "active-slide-change",
36935
+ "zoom-change",
36936
+ "slide-count-change",
36937
+ "mode-change",
36938
+ "selection-change",
36935
36939
  "start-collaboration",
36936
36940
  "stop-collaboration"
36937
36941
  ],
@@ -37045,7 +37049,15 @@ var Y5 = ["tabindex"], V5 = {
37045
37049
  pushHistory: ce.pushHistory,
37046
37050
  selectedElementIds: se,
37047
37051
  templateElementsBySlideId: f
37048
- }), de = Ie(() => se.value.length > 0), me = Ie(() => f.value[G.value?.id ?? ""] ?? []);
37052
+ }), de = Ie(() => se.value.length > 0);
37053
+ bt(ee, (e) => {
37054
+ s("zoom-change", e);
37055
+ }), bt(se, (e) => {
37056
+ s("selection-change", e);
37057
+ }), bt(K, (e) => {
37058
+ s("slide-count-change", e);
37059
+ });
37060
+ const me = Ie(() => f.value[G.value?.id ?? ""] ?? []);
37049
37061
  function fe(e) {
37050
37062
  return os(e) ? me.value.find((t) => t.id === e) : G.value?.elements.find((t) => t.id === e);
37051
37063
  }
@@ -37746,7 +37758,11 @@ var Y5 = ["tabindex"], V5 = {
37746
37758
  slides: m,
37747
37759
  pushHistory: ce.pushHistory,
37748
37760
  ops: pe
37749
- }), er = (tr = {
37761
+ });
37762
+ bt(Xa, (e) => {
37763
+ s("mode-change", e);
37764
+ });
37765
+ const er = (tr = {
37750
37766
  ribbonMode: Xa,
37751
37767
  canEdit: () => a.canEdit,
37752
37768
  isMobile: To,
@@ -37858,7 +37874,67 @@ var Y5 = ["tabindex"], V5 = {
37858
37874
  ...L5(tr)
37859
37875
  })));
37860
37876
  var tr;
37861
- return t({ getContent: N }), (e, t) => (Qe(), Ae("div", {
37877
+ return t({
37878
+ getContent: N,
37879
+ goTo: Y,
37880
+ goPrev: V,
37881
+ goNext: X,
37882
+ undo: () => ce.undo(),
37883
+ redo: () => ce.redo(),
37884
+ canUndo: () => ce.canUndo.value,
37885
+ canRedo: () => ce.canRedo.value,
37886
+ getZoom: () => ee.value,
37887
+ setZoom: (e) => {
37888
+ ee.value = Math.min(Math.max(e, .2), 3);
37889
+ },
37890
+ zoomIn: te,
37891
+ zoomOut: oe,
37892
+ zoomReset: ae,
37893
+ getMode: () => Xa.value,
37894
+ setMode: (e) => {
37895
+ "present" === e ? jt() : "master" === e ? No.value = !0 : (Wt.value = !1, No.value = !1);
37896
+ },
37897
+ getActiveSlideIndex: () => H.value,
37898
+ setActiveSlideIndex: (e) => Y(e),
37899
+ getSlideCount: () => K.value,
37900
+ isDirty: () => Rn.isDirty.value,
37901
+ getSlides: () => m.value,
37902
+ getSlide: (e) => m.value[e],
37903
+ getActiveSlide: () => G.value,
37904
+ addSlide: () => Lt.addSlide(),
37905
+ deleteSlides: (e) => {
37906
+ for (const t of [...e].sort((e, t) => t - e)) Lt.deleteSlide(t);
37907
+ },
37908
+ duplicateSlides: (e) => {
37909
+ for (const t of e) Lt.duplicateSlide(t);
37910
+ },
37911
+ moveSlide: (e, t) => Lt.moveSlide(e, t),
37912
+ toggleHideSlides: (e) => {
37913
+ for (const t of e) gn(t);
37914
+ },
37915
+ getElements: (e) => {
37916
+ const t = e ?? H.value;
37917
+ return m.value[t]?.elements ?? [];
37918
+ },
37919
+ getElementById: (e, t) => {
37920
+ const n = t ?? H.value;
37921
+ return m.value[n]?.elements.find((t) => t.id === e);
37922
+ },
37923
+ updateElement: (e, t) => {
37924
+ pe.updateElement(e, t);
37925
+ },
37926
+ deleteElements: (e) => {
37927
+ for (const t of e) pe.removeElement(t);
37928
+ },
37929
+ duplicateElement: (e) => pe.duplicateElement(e),
37930
+ getSelectedElementIds: () => se.value,
37931
+ selectElements: (e) => {
37932
+ se.value = e;
37933
+ },
37934
+ clearSelection: () => {
37935
+ se.value = [];
37936
+ }
37937
+ }), (e, t) => (Qe(), Ae("div", {
37862
37938
  ref_key: "viewerRootRef",
37863
37939
  ref: $o,
37864
37940
  class: Ge(["pptx-vue-viewer", a.class]),
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pptx-vue-viewer",
3
- "version": "1.5.2",
3
+ "version": "1.6.0",
4
4
  "description": "Vue 3 PowerPoint viewer and editor component: render, edit, and export PPTX slides in the browser.",
5
5
  "keywords": [
6
6
  "editor",
@@ -1,2 +0,0 @@
1
- const e = require("./viewer-90hBuLYm.cjs");
2
- exports.encodeGif = e.encodeGif;
Binary file
Binary file
@@ -1,2 +0,0 @@
1
- import { H as r } from "./viewer-BEoa6OFB.js";
2
- export { r as encodeGif };
Binary file
Binary file
Binary file
Binary file