pptx-vanilla-viewer 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,81 @@
1
1
  # Changelog
2
2
 
3
+ All notable changes to this project are documented here.
4
+ This file is generated from [Conventional Commits](https://www.conventionalcommits.org)
5
+ by [git-cliff](https://git-cliff.org); do not edit it by hand.
6
+
7
+ ## [0.1.2](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-vanilla-viewer@0.1.2) - 2026-07-10
8
+
9
+ ### Features
10
+
11
+ - **core:** Add signature-node module and shared signature utilities (by @ChristopherVR) ([e7cb263](https://github.com/ChristopherVR/pptx-viewer/commit/e7cb26335f15e633cfc37371f16a6ad210be5e11))
12
+ - **vue:** Add pptx-vue-viewer package + bundled pptx-viewer-shared (by @ChristopherVR) ([1b7a958](https://github.com/ChristopherVR/pptx-viewer/commit/1b7a958ce91792a6d174f174932800bc8ff40ef9))
13
+ - **shared:** Add Three.js SmartArt 3D model + scene runtime (by @ChristopherVR) ([f949213](https://github.com/ChristopherVR/pptx-viewer/commit/f949213b33ed0dca4c52d5d1ab414c3dba67efe7))
14
+ - **shared:** Add canonical i18n translation dictionary (by @ChristopherVR) ([429e386](https://github.com/ChristopherVR/pptx-viewer/commit/429e386c7245fc5cf526ac72481fd5ab23b3e09d))
15
+ - **core,cli:** Add react, angular, vue to npm keywords (by @ChristopherVR) ([528ec61](https://github.com/ChristopherVR/pptx-viewer/commit/528ec6182bb77c07444dd0e93560b65e604b9524))
16
+ - **vanilla:** Add pptx-vanilla-viewer zero-framework binding (viewer core) (by @ChristopherVR) ([e5374a6](https://github.com/ChristopherVR/pptx-viewer/commit/e5374a66522daf27606c7f0d3d93a50d9da43146))
17
+ - **vanilla,svelte:** Opt-in 3D SmartArt renderer (by @ChristopherVR) ([15337c9](https://github.com/ChristopherVR/pptx-viewer/commit/15337c9bc1a31ad614a4aca88be3e71ba848413f))
18
+ - **vanilla:** PNG and PDF export (by @ChristopherVR) ([a314688](https://github.com/ChristopherVR/pptx-viewer/commit/a3146882c706e6591b30176fbd06f62c001fd31f))
19
+
20
+ ### Bug Fixes
21
+
22
+ - Enable vitest globals in all packages to fix expectTypeOf errors (by @ChristopherVR) ([6d90d72](https://github.com/ChristopherVR/pptx-viewer/commit/6d90d72ff0107ad0194f9c73ceeb3df244f4cfc6))
23
+ - **test:** Add i18n mocks to react tests and bump versions to 1.2.0 (by @ChristopherVR) ([2c1c962](https://github.com/ChristopherVR/pptx-viewer/commit/2c1c9628714b905b28592493abf02fb270107b65))
24
+ - **deps:** Pin @xmldom/xmldom to 0.8.x in core to fix build (by @ChristopherVR) ([2ed7b2e](https://github.com/ChristopherVR/pptx-viewer/commit/2ed7b2e777d4e740a3e4c9ca7e2b3d6fc2bbd21f))
25
+ - **core:** Declare jszip and fast-xml-parser as runtime dependencies (by @ChristopherVR) ([b6636be](https://github.com/ChristopherVR/pptx-viewer/commit/b6636be972206bb2c6acee0fed05c45b4759fbdc))
26
+ - **angular:** Bundle pptx-viewer-core and fix demo JIT + Vue demo alias (by @ChristopherVR) ([78838ec](https://github.com/ChristopherVR/pptx-viewer/commit/78838ec900fe2d8c90bc39333636d788c52c3161))
27
+ - Missing document links (by @ChristopherVR) ([f52bd6f](https://github.com/ChristopherVR/pptx-viewer/commit/f52bd6fd2fc4f564f018ecf5e84e64d24c8fd240))
28
+ - **core:** Correct install docs and drop the retired @christophervr/pptx-viewer alias (by @ChristopherVR) ([6544b4e](https://github.com/ChristopherVR/pptx-viewer/commit/6544b4eaf086945ecd8a18b877de5a483032aa14))
29
+ - **core,angular:** Revert xmldom to 0.8.x and fix shared import specifiers (by @ChristopherVR) ([29eda31](https://github.com/ChristopherVR/pptx-viewer/commit/29eda3119836559b63bc08733dd9dd6398a69c8d))
30
+
31
+ ### Other
32
+
33
+ - **smartart:** Snapshot in-progress SmartArt session work (by @ChristopherVR) ([0cac22f](https://github.com/ChristopherVR/pptx-viewer/commit/0cac22f5b1a0ecc33960f4712ff2ef691beb3f65))
34
+ - Reconcile with origin/main before push (by @ChristopherVR) ([b8c46bc](https://github.com/ChristopherVR/pptx-viewer/commit/b8c46bc3622e301d3365f5c489144e5aa5401782))
35
+ - Reconcile with origin/main before push (by @ChristopherVR) ([10acef8](https://github.com/ChristopherVR/pptx-viewer/commit/10acef81a7f5d79e778e4e4464d956cc84682f7c))
36
+ - Reconcile with origin/main before push (by @ChristopherVR) ([0ecd3d9](https://github.com/ChristopherVR/pptx-viewer/commit/0ecd3d935f97c78e8b0a62bebc8bf610c42414ab))
37
+
38
+ ### Refactor
39
+
40
+ - **react:** Consume theme + loader from pptx-viewer-shared (by @ChristopherVR) ([1b93d1f](https://github.com/ChristopherVR/pptx-viewer/commit/1b93d1fccff378b0ac402810a0cbddea46add29c))
41
+ - **core:** Consume emf-converter and mtx-decompressor from npm (by @ChristopherVR) ([2f6013d](https://github.com/ChristopherVR/pptx-viewer/commit/2f6013d5b8fab0aef5b32901841d94c0fa886f24))
42
+ - **shared:** Extract text-rendering pure logic (line-height, warp, effects) (by @ChristopherVR) ([11c8d22](https://github.com/ChristopherVR/pptx-viewer/commit/11c8d22e9910dda9c8dfa18e0f6d7683577c7b9f))
43
+
44
+ ### Documentation
45
+
46
+ - Restructure root README, elevate limitations, fix outdated claims (by @ChristopherVR) ([86dcda9](https://github.com/ChristopherVR/pptx-viewer/commit/86dcda9b5e3129f2223341337055778db574e985))
47
+ - Rewrite limitations with technical explanations and remove inaccurate claims (by @ChristopherVR) ([ac4bc84](https://github.com/ChristopherVR/pptx-viewer/commit/ac4bc84ed9bd03f62e3ae29c35baf3f444a3c0bf))
48
+ - **readme:** Npm-friendly READMEs — hero image, capabilities & install first (by @ChristopherVR) ([c843d19](https://github.com/ChristopherVR/pptx-viewer/commit/c843d1934b846f901bba92e63d2b01f9479594d0))
49
+ - Streamline npm READMEs and add badges, screenshots, demo links (by @ChristopherVR) ([92e980d](https://github.com/ChristopherVR/pptx-viewer/commit/92e980d434900abd223c4d70c6cae19a623f9ca8))
50
+ - Sharpen npm descriptions and keywords for discoverability (by @ChristopherVR) ([8fea56d](https://github.com/ChristopherVR/pptx-viewer/commit/8fea56d7650f7dc2f3167dea97b94b612a03a4e7))
51
+ - **core:** Reword README in plain language (by @ChristopherVR) ([793c26e](https://github.com/ChristopherVR/pptx-viewer/commit/793c26ec7e2415c66f34c637cb541483bf395a11))
52
+ - Remove completed ROADMAP and PORTING trackers, scrub stale references (by @ChristopherVR) ([8a745a1](https://github.com/ChristopherVR/pptx-viewer/commit/8a745a1d2a1ee3932503d37dd022494ab9cfcc4b))
53
+ - **core:** Remove explicit jszip/fast-xml-parser mention from install section (by @ChristopherVR) ([6b72906](https://github.com/ChristopherVR/pptx-viewer/commit/6b72906c08447ba38a704ff4572c89d7cad7e60c))
54
+ - Correct stale vanilla/svelte docs and add both bindings to core guide (by @ChristopherVR) ([6815740](https://github.com/ChristopherVR/pptx-viewer/commit/6815740f71f85d3876e548d177bb2e709f1b91d1))
55
+
56
+ ### Build & CI
57
+
58
+ - Independent per-package versioning, tags, and changelogs (by @ChristopherVR) ([79595d9](https://github.com/ChristopherVR/pptx-viewer/commit/79595d972d7c4102e8b1e1e3926f439486f76ba1))
59
+ - Publish pptx-vanilla-viewer and pptx-svelte-viewer from the release pipeline (by @ChristopherVR) ([50dd90a](https://github.com/ChristopherVR/pptx-viewer/commit/50dd90aa3a7a707d9c56d3755098b431c37457b5))
60
+
61
+ ### Dependencies
62
+
63
+ - **deps:** Update all dependencies to latest (by @ChristopherVR) ([e3287c0](https://github.com/ChristopherVR/pptx-viewer/commit/e3287c03ff58b1a1ae103ed32a513468a454a084))
64
+ - **deps:** Bump all workspace manifest floors to latest (by @ChristopherVR) ([890c33d](https://github.com/ChristopherVR/pptx-viewer/commit/890c33d667a39480a69e6a3da893964382993b29))
65
+ - **deps:** Update dependencies within semver ranges (by @ChristopherVR) ([d472b58](https://github.com/ChristopherVR/pptx-viewer/commit/d472b58dfd47628b5c682bd5f4dc2014ec29b421))
66
+ - **deps:** Declare yjs, y-websocket, and y-webrtc across bindings (by @ChristopherVR) ([27a2849](https://github.com/ChristopherVR/pptx-viewer/commit/27a2849da755a0902296dcd59557c1329a1cbadf))
67
+
68
+ ### Chores
69
+
70
+ - Add license files, NOTICE, and package metadata for npm publishing (by @ChristopherVR) ([9464bb8](https://github.com/ChristopherVR/pptx-viewer/commit/9464bb8b91734daf35131d3c7e52e60895fe0a1c))
71
+ - Bump all packages to v1.1.0 and remove remaining MyClawAssist refs (by @ChristopherVR) ([c386511](https://github.com/ChristopherVR/pptx-viewer/commit/c38651150c08011cee5e17e15f7ee8adc0014b80))
72
+ - Bump all packages to 1.x.1 patch versions (by @ChristopherVR) ([c75205a](https://github.com/ChristopherVR/pptx-viewer/commit/c75205a96cc7797d1647ac4705395b7707ac8910))
73
+ - Bump all packages to minor versions for SDK table support (by @ChristopherVR) ([2d4b635](https://github.com/ChristopherVR/pptx-viewer/commit/2d4b6351b0bf328f8a556cf593733fd8ad36c7b5))
74
+ - Bump dependencies to latest and minor-bump packages for parity work (by @ChristopherVR) ([da19fdf](https://github.com/ChristopherVR/pptx-viewer/commit/da19fdf9a4670d274d9973b67aa22d34217b8555))
75
+ - Roll TypeScript back to 5.9.x; quiet new oxlint vitest rules (by @ChristopherVR) ([713c020](https://github.com/ChristopherVR/pptx-viewer/commit/713c020ac2428db0fb1eb6cb30e56b2cff19a80f))
76
+ - Relicense from MIT to Apache-2.0 (by @ChristopherVR) ([e12f926](https://github.com/ChristopherVR/pptx-viewer/commit/e12f9266f02bebbfc218986b617c418fee43a56b))
77
+ - Bump vanilla + svelte to 0.1.1; clarify view-only in READMEs (by @ChristopherVR) ([0bc44ab](https://github.com/ChristopherVR/pptx-viewer/commit/0bc44ab3b083c7d8aeed51197584f8eee04fc9ee))
78
+
79
+ # Changelog
80
+
3
81
  All notable changes to `pptx-vanilla-viewer` are documented in this file.
package/README.md CHANGED
@@ -1,19 +1,21 @@
1
1
  # pptx-vanilla-viewer
2
2
 
3
- > ### ⚠️ Viewing capability only
4
- > This release provides **read-only / viewing** of `.pptx` files.
5
- > Editing, saving, and authoring features are **not available** in this
6
- > version and will be added in a future release.
7
- >
8
- > The package is under active development and the API may change.
9
- > For the latest source, roadmap, and issue tracker visit:
10
- >
11
- > **https://github.com/ChristopherVR/pptx-viewer**
12
-
13
- Zero-framework PowerPoint viewer: render `.pptx` slides in the browser with
14
- plain DOM. No React, Vue, or Angular required; the parsing engine
15
- (`pptx-viewer-core`) and the shared render logic (`pptx-viewer-shared`) are
16
- bundled in.
3
+ [![npm version](https://img.shields.io/npm/v/pptx-vanilla-viewer.svg)](https://www.npmjs.com/package/pptx-vanilla-viewer)
4
+ [![license](https://img.shields.io/npm/l/pptx-vanilla-viewer.svg)](https://github.com/ChristopherVR/pptx-viewer/blob/main/LICENSE)
5
+
6
+ Show, edit, and present Microsoft PowerPoint (`.pptx`) files directly in the
7
+ browser with **zero framework**: no React, Vue, or Angular required, no
8
+ server, no conversion step, no PowerPoint install. Call one factory function,
9
+ `createPptxViewer(container, options)`, and slides render as real HTML and
10
+ CSS.
11
+
12
+ ![PowerPoint editor UI rendered in the browser](https://raw.githubusercontent.com/ChristopherVR/pptx-viewer/main/.github/assets/editor.png)
13
+
14
+ The rendering is done by the framework-agnostic [`pptx-viewer-core`](https://www.npmjs.com/package/pptx-viewer-core) engine, which turns a `.pptx` file into a structured slide model. This package is the plain-DOM layer that draws that model on screen, and the engine is **bundled in**, so you install just one package.
15
+
16
+ <samp>**[▶️ Try the live demo](https://christophervr.github.io/pptx-viewer/demo-vanilla/)** · **[📦 npm](https://www.npmjs.com/package/pptx-vanilla-viewer)** · **[📖 Full docs](https://christophervr.github.io/pptx-viewer/vanilla/)** · **[🧩 Core SDK](https://www.npmjs.com/package/pptx-viewer-core)**</samp>
17
+
18
+ ## Install
17
19
 
18
20
  ```bash
19
21
  npm install pptx-vanilla-viewer jszip fast-xml-parser
@@ -29,11 +31,13 @@ const viewer = createPptxViewer(document.getElementById('host')!, {
29
31
  theme: { colors: { primary: '#e34f26' } },
30
32
  locale: 'en',
31
33
  initialSlide: 0,
34
+ editable: true, // select, drag, resize, rotate, inline text, undo/redo, save
32
35
  showToolbar: true,
33
36
  showThumbnails: true,
34
37
  onLoad: ({ slideCount }) => console.log(`${slideCount} slides`),
35
38
  onSlideChange: (index) => console.log('slide', index + 1),
36
39
  onError: (message) => console.error(message),
40
+ onDirtyChange: (dirty) => console.log('unsaved edits:', dirty),
37
41
  });
38
42
 
39
43
  // Navigation / zoom
@@ -46,6 +50,14 @@ viewer.zoomToFit();
46
50
  // Presentation mode (real Fullscreen API; Esc exits)
47
51
  await viewer.enterPresentation();
48
52
 
53
+ // Editing (click/drag/resize/rotate/double-click-to-edit-text happen via the
54
+ // DOM; these are the programmatic entry points)
55
+ viewer.undo();
56
+ viewer.redo();
57
+ viewer.deleteSelected();
58
+ const bytes = await viewer.save(); // serialise the edited deck to .pptx bytes
59
+ await viewer.downloadPptx('quarterly-edited.pptx'); // save() + trigger a download
60
+
49
61
  // Load a different file later
50
62
  await viewer.loadFile(fileInput.files![0]);
51
63
  await viewer.loadUrl('/other-deck.pptx');
@@ -61,9 +73,15 @@ The container should have a size (the viewer fills it: `width/height: 100%`).
61
73
 
62
74
  ## Keyboard
63
75
 
64
- Arrow keys / PageUp / PageDown / Space navigate, Home/End jump to the first or
65
- last slide, Esc exits presentation mode. The viewer root is focusable
66
- (`tabindex="0"`).
76
+ Navigation: arrow keys / PageUp / PageDown / Space, Home/End jump to the
77
+ first or last slide, Esc exits presentation mode. The viewer root is
78
+ focusable (`tabindex="0"`).
79
+
80
+ When `editable` is on and an element is selected: Ctrl/Cmd+Z undoes,
81
+ Ctrl/Cmd+Shift+Z (or Ctrl+Y) redoes, Delete/Backspace deletes the selection,
82
+ Ctrl/Cmd+D duplicates it, arrow keys nudge it by 1px (Shift+arrow for 10px),
83
+ and Escape deselects. Double-click a text-capable element to edit its text
84
+ inline.
67
85
 
68
86
  ## Styling and theming
69
87
 
@@ -76,6 +94,23 @@ All chrome colors come from the shared `--pptx-*` CSS custom properties. Pass
76
94
  a `ViewerTheme` (`theme` option or `setTheme`) to override them; the
77
95
  `vermilionLightTheme` / `vermilionDarkTheme` presets are re-exported.
78
96
 
97
+ ## Editing
98
+
99
+ Pass `editable: true` (or call `setEditable(true)` at runtime) to turn on:
100
+
101
+ - Click to select an element, click empty space to deselect.
102
+ - Drag to move, with snap-to-sibling-edge guides.
103
+ - Resize via 8 handles (Shift locks aspect ratio on the corner handles) and
104
+ rotate via a rotate handle (Shift snaps to angle increments).
105
+ - Double-click a text-capable element for inline text editing.
106
+ - Undo/redo (100-entry history), delete, and duplicate (`Ctrl/Cmd+D`).
107
+ - The toolbar's Save button (shown only when `editable`), which calls
108
+ `downloadPptx()` to serialise and download the edited `.pptx`.
109
+
110
+ Use `viewer.getSelectedElementId()` and the `onSelectionChange` /
111
+ `onDirtyChange` callbacks to build your own chrome around the selection
112
+ state.
113
+
79
114
  ## i18n
80
115
 
81
116
  All UI strings go through the shared `pptx.*` dictionary (English built in).
@@ -85,10 +120,11 @@ fall back to English, then to a humanised label.
85
120
 
86
121
  ## Element coverage
87
122
 
88
- Dedicated renderers: text, shape, image/picture, group, connector. All other
89
- element types (table, chart, SmartArt, media, ink, OLE, ...) currently render
90
- a typed placeholder box. Renderers are dispatched through an open registry, so
91
- coverage can be extended without forking:
123
+ Dedicated renderers ship for every element type: text, shape, image/picture,
124
+ group, connector, table, chart, SmartArt (2D and opt-in 3D), media
125
+ (video/audio), ink, OLE, content parts, zoom links, and 3D models. Renderers
126
+ are dispatched through an open registry, so any of them can be overridden
127
+ without forking:
92
128
 
93
129
  ```ts
94
130
  import { createPptxViewer, type ElementRenderer } from 'pptx-vanilla-viewer';