pptx-svelte-viewer 1.4.0 → 2.0.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.
- package/CHANGELOG.md +440 -0
- package/README.md +175 -17
- package/dist/AiChatPanel-CssmoLYL.js +1110 -0
- package/dist/__vite-browser-external-DOmiXdGM.js +7 -0
- package/dist/{dist-DZ-fjucV.js → dist-AHWCPEmj.js} +44226 -40236
- package/dist/export-DplwT6FC.js +96087 -0
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +2193 -99
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -22
- package/dist/pptx-svelte-viewer.css +1 -1
- package/dist/rolldown-runtime--_vEcKDh.js +29 -0
- package/dist/{translator-D4a_pxY4.js → translator-Ddi-liGk.js} +251 -7
- package/dist/viewer/ai/ai-bridge.d.ts +61 -0
- package/dist/viewer/ai/ai-bridge.d.ts.map +1 -0
- package/dist/viewer/ai/ai-history-persist.d.ts +13 -0
- package/dist/viewer/ai/ai-history-persist.d.ts.map +1 -0
- package/dist/viewer/ai/ai-log-export.d.ts +71 -0
- package/dist/viewer/ai/ai-log-export.d.ts.map +1 -0
- package/dist/viewer/ai/ai-panel-controller.svelte.d.ts +77 -0
- package/dist/viewer/ai/ai-panel-controller.svelte.d.ts.map +1 -0
- package/dist/viewer/ai/chat.svelte.d.ts +43 -0
- package/dist/viewer/ai/chat.svelte.d.ts.map +1 -0
- package/dist/viewer/ai/focus-targets.d.ts +36 -0
- package/dist/viewer/ai/focus-targets.d.ts.map +1 -0
- package/dist/viewer/ai/index.d.ts +11 -0
- package/dist/viewer/ai/index.d.ts.map +1 -0
- package/dist/viewer/collab/collaboration-deps.d.ts +23 -0
- package/dist/viewer/collab/collaboration-deps.d.ts.map +1 -0
- package/dist/viewer/collab/collaboration-remote-sync.d.ts +13 -0
- package/dist/viewer/collab/collaboration-remote-sync.d.ts.map +1 -1
- package/dist/viewer/collab/collaboration.svelte.d.ts +9 -21
- package/dist/viewer/collab/collaboration.svelte.d.ts.map +1 -1
- package/dist/viewer/collab/components/props.d.ts +12 -0
- package/dist/viewer/collab/components/props.d.ts.map +1 -1
- package/dist/viewer/collab/components/remote-selection.d.ts +29 -0
- package/dist/viewer/collab/components/remote-selection.d.ts.map +1 -0
- package/dist/viewer/collab/components/share-helpers.d.ts +7 -28
- package/dist/viewer/collab/components/share-helpers.d.ts.map +1 -1
- package/dist/viewer/collab/index.d.ts +1 -1
- package/dist/viewer/collab/index.d.ts.map +1 -1
- package/dist/viewer/components/props.d.ts +66 -2
- package/dist/viewer/components/props.d.ts.map +1 -1
- package/dist/viewer/components/ribbon/ribbon-types.d.ts +7 -0
- package/dist/viewer/components/ribbon/ribbon-types.d.ts.map +1 -1
- package/dist/viewer/components/typed-exports.d.ts +19 -0
- package/dist/viewer/components/typed-exports.d.ts.map +1 -0
- package/dist/viewer/editor/editor-controller-deps.d.ts +5 -0
- package/dist/viewer/editor/editor-controller-deps.d.ts.map +1 -1
- package/dist/viewer/editor/editor-state.svelte.d.ts +6 -0
- package/dist/viewer/editor/editor-state.svelte.d.ts.map +1 -1
- package/dist/viewer/export/export-ui.svelte.d.ts +5 -0
- package/dist/viewer/export/export-ui.svelte.d.ts.map +1 -1
- package/dist/viewer/index.d.ts +2781 -31
- package/dist/viewer/index.d.ts.map +1 -1
- package/dist/viewer/index.js +392 -14
- package/dist/viewer/presentation/animation-playback-helpers.d.ts +43 -0
- package/dist/viewer/presentation/animation-playback-helpers.d.ts.map +1 -0
- package/dist/viewer/presentation/animation-playback.svelte.d.ts +50 -40
- package/dist/viewer/presentation/animation-playback.svelte.d.ts.map +1 -1
- package/dist/viewer/presentation/animation-sound.d.ts +20 -0
- package/dist/viewer/presentation/animation-sound.d.ts.map +1 -0
- package/dist/viewer/presentation/apply-animation-styles.d.ts +6 -5
- package/dist/viewer/presentation/apply-animation-styles.d.ts.map +1 -1
- package/dist/viewer/presentation/index.d.ts +2 -1
- package/dist/viewer/presentation/index.d.ts.map +1 -1
- package/dist/viewer/presentation/keyframes.d.ts +9 -0
- package/dist/viewer/presentation/keyframes.d.ts.map +1 -1
- package/dist/viewer/presentation/presentation-controller.svelte.d.ts +32 -10
- package/dist/viewer/presentation/presentation-controller.svelte.d.ts.map +1 -1
- package/dist/viewer/presentation/presentation-effects.svelte.d.ts +6 -2
- package/dist/viewer/presentation/presentation-effects.svelte.d.ts.map +1 -1
- package/dist/viewer/presentation/presentation-triggers.d.ts +18 -0
- package/dist/viewer/presentation/presentation-triggers.d.ts.map +1 -0
- package/dist/viewer/presentation/transition-overlay.d.ts +23 -0
- package/dist/viewer/presentation/transition-overlay.d.ts.map +1 -0
- package/dist/viewer/render/smartart-view.d.ts +7 -2
- package/dist/viewer/render/smartart-view.d.ts.map +1 -1
- package/dist/viewer/state/create-viewer-state-collab.svelte.d.ts +37 -0
- package/dist/viewer/state/create-viewer-state-collab.svelte.d.ts.map +1 -0
- package/dist/viewer/state/create-viewer-state-editor-ui.svelte.d.ts +42 -0
- package/dist/viewer/state/create-viewer-state-editor-ui.svelte.d.ts.map +1 -0
- package/dist/viewer/state/create-viewer-state-export-notes.svelte.d.ts +36 -0
- package/dist/viewer/state/create-viewer-state-export-notes.svelte.d.ts.map +1 -0
- package/dist/viewer/state/create-viewer-state-presentation.svelte.d.ts +30 -0
- package/dist/viewer/state/create-viewer-state-presentation.svelte.d.ts.map +1 -0
- package/dist/viewer/state/create-viewer-state-types.d.ts +134 -0
- package/dist/viewer/state/create-viewer-state-types.d.ts.map +1 -0
- package/dist/viewer/state/create-viewer-state.svelte.d.ts +30 -0
- package/dist/viewer/state/create-viewer-state.svelte.d.ts.map +1 -0
- package/dist/viewer/state/index.d.ts +2 -0
- package/dist/viewer/state/index.d.ts.map +1 -1
- package/dist/viewer/state/presentation-element-states-context.d.ts +37 -0
- package/dist/viewer/state/presentation-element-states-context.d.ts.map +1 -0
- package/dist/viewer/state/render-context.d.ts +3 -1
- package/dist/viewer/state/render-context.d.ts.map +1 -1
- package/dist/viewer/state/viewer-effects.svelte.d.ts +8 -0
- package/dist/viewer/state/viewer-effects.svelte.d.ts.map +1 -1
- package/dist/viewer/state/viewer-options-context.d.ts +10 -0
- package/dist/viewer/state/viewer-options-context.d.ts.map +1 -0
- package/dist/viewer/state/viewer-options-wiring.svelte.d.ts +31 -0
- package/dist/viewer/state/viewer-options-wiring.svelte.d.ts.map +1 -0
- package/dist/viewer/state/viewer-options.svelte.d.ts +55 -0
- package/dist/viewer/state/viewer-options.svelte.d.ts.map +1 -0
- package/dist/viewer/style/element-style.d.ts +3 -3
- package/dist/viewer/style/element-style.d.ts.map +1 -1
- package/dist/viewer/types.d.ts +16 -5
- package/dist/viewer/types.d.ts.map +1 -1
- package/dist/{y-webrtc-BdH40MC6.js → y-webrtc-BiViqyU2.js} +1079 -1101
- package/package.json +18 -5
- package/dist/export-N-hrLHrd.js +0 -38592
package/README.md
CHANGED
|
@@ -86,27 +86,185 @@ import 'pptx-svelte-viewer/styles';
|
|
|
86
86
|
|
|
87
87
|
## Props
|
|
88
88
|
|
|
89
|
-
| Prop
|
|
90
|
-
|
|
|
91
|
-
| `source`
|
|
92
|
-
| `theme`
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
96
|
-
| `
|
|
97
|
-
| `
|
|
98
|
-
| `
|
|
99
|
-
| `
|
|
100
|
-
| `
|
|
101
|
-
| `
|
|
102
|
-
| `
|
|
103
|
-
| `
|
|
104
|
-
| `
|
|
105
|
-
| `
|
|
89
|
+
| Prop | Type | Default | Description |
|
|
90
|
+
| -------------------- | ------------------------------------ | ------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
91
|
+
| `source` | `Uint8Array \| ArrayBuffer \| null` | - | Raw `.pptx` bytes. |
|
|
92
|
+
| `theme` | `ViewerTheme` | - | Color/radius/CSS-var overrides. |
|
|
93
|
+
| `fonts` | `ViewerFontSource[]` | `[]` | Licensed font sources supplied by the host application. |
|
|
94
|
+
| `locale` | `string` | `'en'` | UI locale (see `pptx-svelte-viewer/i18n`). |
|
|
95
|
+
| `initialSlide` | `number` | `0` | Slide shown after load (0-based). |
|
|
96
|
+
| `showThumbnails` | `boolean` | `true` | Thumbnail sidebar. |
|
|
97
|
+
| `showToolbar` | `boolean` | `true` | Navigation/zoom/fullscreen toolbar. |
|
|
98
|
+
| `showNotes` | `boolean` | `true` | Speaker-notes panel and its toolbar toggle. |
|
|
99
|
+
| `hiddenActions` | `ToolbarActionId[]` | - | Toolbar buttons/ribbon tabs to hide individually (e.g. `['share', 'broadcast']`), instead of hiding the whole toolbar. |
|
|
100
|
+
| `editable` | `boolean` | `false` | Ribbon editing, insertion, arrange, and save. |
|
|
101
|
+
| `smartArt3D` | `boolean` | `false` | Opt-in Three.js 3D SmartArt renderer (needs the optional `three` peer; falls back to SVG without it). |
|
|
102
|
+
| `class` | `string` | - | Class applied to the root element. |
|
|
103
|
+
| `fileName` | `string` | - | Display name shown in the desktop title bar. |
|
|
104
|
+
| `autosave` | `boolean` | `false` | Debounced crash-recovery autosave to IndexedDB (requires `filePath`; fires `onautosave`). |
|
|
105
|
+
| `filePath` | `string` | - | IndexedDB record key for autosave; autosave is inert without it. |
|
|
106
|
+
| `autosaveIntervalMs` | `number` | `2000` | Autosave debounce window in milliseconds. |
|
|
107
|
+
| `collaboration` | `CollaborationConfig` | - | Yjs real-time collaboration config (y-websocket or serverless y-webrtc room, role). |
|
|
108
|
+
| `shareDefaults` | `{ roomId?, userName?, serverUrl? }` | - | Prefilled values for the Share/Broadcast dialogs. |
|
|
109
|
+
| `defaultThemeKey` | `string` | - | Initial File > Options > Appearance selection when no persisted preference exists. |
|
|
110
|
+
| `availableThemes` | `ThemeCatalogEntry[]` | - | Theme choices offered by File > Options > Appearance (defaults to the built-in catalog). |
|
|
111
|
+
| `onThemeChange` | `(key: string) => void` | - | Host hook for the appearance picker; when set, the host owns persisting the choice. |
|
|
112
|
+
| `defaultLocale` | `string` | - | Initial File > Options > Language selection when no persisted preference exists. |
|
|
113
|
+
| `availableLocales` | `LocaleCatalogEntry[]` | - | Locale choices offered by File > Options > Language (defaults to the registered dictionaries). |
|
|
114
|
+
| `onLocaleChange` | `(code: string) => void` | - | Host hook for the language picker; when set, the host owns persisting the switch. |
|
|
115
|
+
| `accountAuth` | `AccountAuthConfig` | - | Optional sign-in hook point for File > Account (disabled unless `enabled: true`). |
|
|
116
|
+
|
|
117
|
+
### Callbacks
|
|
118
|
+
|
|
119
|
+
| Callback | Payload | Description |
|
|
120
|
+
| ---------------------- | --------------------- | -------------------------------------------------------------------------------- |
|
|
121
|
+
| `onload` | `ViewerLoadDetail` | Fired after a presentation loads. |
|
|
122
|
+
| `onerror` | `string` | Fired when loading fails (human-readable message). |
|
|
123
|
+
| `onslidechange` | `number` | Fired when the active slide changes (0-based). |
|
|
124
|
+
| `onnotesupdate` | `string` | Fired when the user edits the speaker notes; omit to render the panel read-only. |
|
|
125
|
+
| `onchange` | - | Fired after every committed edit when `editable`. |
|
|
126
|
+
| `ondirtychange` | `boolean` | Fired when the unsaved-changes flag toggles. |
|
|
127
|
+
| `oncontentchange` | `Uint8Array` | Fired with freshly serialised `.pptx` bytes when the content changes. |
|
|
128
|
+
| `onmodechange` | `string` | Fired when the viewer mode changes. |
|
|
129
|
+
| `onzoomchange` | `number` | Fired when the zoom level changes. |
|
|
130
|
+
| `onselectionchange` | `string[]` | Fired with the selected element IDs when selection changes. |
|
|
131
|
+
| `onslidecountchange` | `number` | Fired when the total slide count changes. |
|
|
132
|
+
| `onopenfile` | - | Host override for the File > Open action. |
|
|
133
|
+
| `onautosave` | `Uint8Array` | Fired with serialised bytes after each successful autosave. |
|
|
134
|
+
| `onautosavetoggle` | `boolean` | Fired when the title bar toggles AutoSave. |
|
|
135
|
+
| `onstartcollaboration` | `CollaborationConfig` | Fired when a collaboration session starts. |
|
|
136
|
+
| `onstopcollaboration` | - | Fired when a collaboration session stops. |
|
|
137
|
+
|
|
138
|
+
## Imperative API (`bind:this`)
|
|
139
|
+
|
|
140
|
+
The component instance implements the full shared `PowerPointViewerAPI` plus
|
|
141
|
+
editing and export methods (the `PowerPointViewerApi` type):
|
|
142
|
+
|
|
143
|
+
```svelte
|
|
144
|
+
<script lang="ts">
|
|
145
|
+
import { PowerPointViewer, type PowerPointViewerApi } from 'pptx-svelte-viewer';
|
|
146
|
+
|
|
147
|
+
let viewer: PowerPointViewerApi | undefined = $state();
|
|
148
|
+
</script>
|
|
149
|
+
|
|
150
|
+
<PowerPointViewer bind:this={viewer} {source} editable />
|
|
151
|
+
<button onclick={() => viewer?.undo()}>Undo</button>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
- **Serialisation**: `getContent()`, `save(format?)`, `downloadPptx(fileName?)`,
|
|
155
|
+
`downloadAs(format, fileName?)`, `packageForSharing(fileName?)`.
|
|
156
|
+
- **Navigation / zoom / mode**: `goTo(index)`, `goPrev()`, `goNext()`,
|
|
157
|
+
`getZoom()`, `setZoom(level)`, `zoomIn()`, `zoomOut()`, `zoomReset()`,
|
|
158
|
+
`getMode()`, `setMode(mode)`, `getActiveSlideIndex()`,
|
|
159
|
+
`setActiveSlideIndex(index)`, `getSlideCount()`, `isDirty()`.
|
|
160
|
+
- **Editing**: `undo()`, `redo()`, `canUndo()`, `canRedo()`, `deleteSelected()`,
|
|
161
|
+
`getSelectedElementId()`, `getSelectedElementIds()`, `selectElements(ids)`,
|
|
162
|
+
`clearSelection()`.
|
|
163
|
+
- **Slides / elements**: `getSlides()`, `getSlide(index)`, `getActiveSlide()`,
|
|
164
|
+
`addSlide(afterIndex?)`, `deleteSlides(indexes)`, `duplicateSlides(indexes)`,
|
|
165
|
+
`moveSlide(from, to)`, `toggleHideSlides(indexes)`, `getElements(slideIndex?)`,
|
|
166
|
+
`getElementById(id, slideIndex?)`, `updateElement(id, patch)`,
|
|
167
|
+
`deleteElements(ids)`, `duplicateElement(id)`.
|
|
168
|
+
- **Export / print**: `exportSlidePng(index?)`, `copySlideAsImage(index?)`,
|
|
169
|
+
`exportPdf(options?)`, `exportGif(options?)`, `exportVideo(options?)`,
|
|
170
|
+
`print(options?)`.
|
|
106
171
|
|
|
107
172
|
See the [full docs](https://christophervr.github.io/pptx-viewer/svelte/) for
|
|
108
173
|
the complete props/events contract, theming, and localization guides.
|
|
109
174
|
|
|
175
|
+
### Composing a custom viewer shell
|
|
176
|
+
|
|
177
|
+
`<PowerPointViewer>` bundles the slide canvas, ribbon, thumbnail rail,
|
|
178
|
+
inspector, and every dialog into one component. If you only want a subset,
|
|
179
|
+
for example your own chrome around just the ribbon and the slide canvas,
|
|
180
|
+
import the pieces independently from the `pptx-svelte-viewer/viewer`
|
|
181
|
+
sub-path instead: `Ribbon` / `ViewerToolbar` (the full editing ribbon and the
|
|
182
|
+
compact read-only toolbar), `SlideCanvas` (the slide stage-holder), and
|
|
183
|
+
`createViewerState`, a factory that builds the same reactive controllers
|
|
184
|
+
(`ViewerState`, `EditorState`, `EditorController`, `CollaborationController`,
|
|
185
|
+
etc.) `PowerPointViewer.svelte` itself constructs, so wiring `Ribbon` /
|
|
186
|
+
`ViewerToolbar` to its return value mirrors the bundled component exactly.
|
|
187
|
+
|
|
188
|
+
```svelte
|
|
189
|
+
<script lang="ts">
|
|
190
|
+
import { createViewerState, Ribbon, SlideCanvas } from 'pptx-svelte-viewer/viewer';
|
|
191
|
+
|
|
192
|
+
let source: ArrayBuffer | undefined = $state();
|
|
193
|
+
let rootEl: HTMLDivElement | undefined;
|
|
194
|
+
let stageHolderEl: HTMLDivElement | undefined;
|
|
195
|
+
let viewportWidth = $state(0);
|
|
196
|
+
let viewportHeight = $state(0);
|
|
197
|
+
|
|
198
|
+
// Must be called synchronously here, in your own shell component's
|
|
199
|
+
// script (not inside a callback or after an `await`): it registers
|
|
200
|
+
// `onMount`/`onDestroy` and Svelte context (the translator context
|
|
201
|
+
// `Ribbon`'s tabs and `ViewerToolbar` read via `useTranslator()`,
|
|
202
|
+
// among others) that only work during component initialisation.
|
|
203
|
+
const state = createViewerState({
|
|
204
|
+
getSource: () => source,
|
|
205
|
+
getAutosave: () => false,
|
|
206
|
+
getFilePath: () => undefined,
|
|
207
|
+
getInitialSlide: () => 0,
|
|
208
|
+
t: (key) => key, // or `createTranslator` from `pptx-svelte-viewer/i18n`
|
|
209
|
+
getSmartArt3D: () => false,
|
|
210
|
+
getEditable: () => true,
|
|
211
|
+
getStageHolderEl: () => stageHolderEl,
|
|
212
|
+
getRootEl: () => rootEl,
|
|
213
|
+
getViewportWidth: () => viewportWidth,
|
|
214
|
+
getViewportHeight: () => viewportHeight,
|
|
215
|
+
getMasterScale: () => 1,
|
|
216
|
+
});
|
|
217
|
+
</script>
|
|
218
|
+
|
|
219
|
+
<div bind:this={rootEl} class="my-custom-shell">
|
|
220
|
+
<Ribbon
|
|
221
|
+
editor={state.editor}
|
|
222
|
+
findReplace={state.findReplace}
|
|
223
|
+
canvasSize={state.loader.canvasSize}
|
|
224
|
+
current={state.viewer.current}
|
|
225
|
+
total={state.viewer.slideCount}
|
|
226
|
+
onprev={() => state.viewer.prev()}
|
|
227
|
+
onnext={() => state.viewer.next()}
|
|
228
|
+
onnavigateslide={(index) => state.viewer.goTo(index)}
|
|
229
|
+
/>
|
|
230
|
+
<!-- ...plus whichever other `RibbonProps` fields your shell needs. -->
|
|
231
|
+
<div bind:clientWidth={viewportWidth} bind:clientHeight={viewportHeight}>
|
|
232
|
+
<SlideCanvas
|
|
233
|
+
slide={state.activeSlide}
|
|
234
|
+
canvasSize={state.loader.canvasSize}
|
|
235
|
+
mediaDataUrls={state.loader.mediaDataUrls}
|
|
236
|
+
scale={state.scale}
|
|
237
|
+
editingActive={state.editingActive}
|
|
238
|
+
onstageholder={(el) => (stageHolderEl = el ?? undefined)}
|
|
239
|
+
onstagepointerdown={state.controller.onStagePointerDown}
|
|
240
|
+
onstagepointermove={state.controller.onStagePointerMove}
|
|
241
|
+
/>
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
`Ribbon`'s full prop contract is the `RibbonProps` type; `ViewerToolbar`'s is
|
|
247
|
+
`ViewerToolbarProps`; `SlideCanvas`'s is `SlideCanvasProps` (flat/typed
|
|
248
|
+
props, no live state-class instances - the editing/annotation/collaboration
|
|
249
|
+
overlays that stack on top of the stage are passed in as `SlideCanvas`
|
|
250
|
+
children instead, since only the host knows which of them it needs).
|
|
251
|
+
`createViewerState`'s options and return value are `CreateViewerStateOptions`
|
|
252
|
+
and `ViewerStateBag`.
|
|
253
|
+
|
|
254
|
+
Two caveats if you go this route:
|
|
255
|
+
|
|
256
|
+
- There is no standalone "canvas-only" component that also owns the
|
|
257
|
+
thumbnail rail, notes panel, and inspector pane the way the bundled
|
|
258
|
+
viewer's `ViewerBody` does - those stay your shell's responsibility to
|
|
259
|
+
assemble (or reuse `ViewerBody` itself, which is not exported, since it
|
|
260
|
+
takes live state-class instances rather than flat props).
|
|
261
|
+
- `createViewerState` is a newer, lower-level extraction than the rest of
|
|
262
|
+
this package's public API; its exact option/return shape may still be
|
|
263
|
+
refined as more of the bundled component's construction gets folded into
|
|
264
|
+
it. `PowerPointViewer.svelte` currently keeps its own parallel inline copy
|
|
265
|
+
of the same wiring rather than calling `createViewerState` itself, so treat
|
|
266
|
+
the factory as accurate-today rather than the single source of truth yet.
|
|
267
|
+
|
|
110
268
|
## License
|
|
111
269
|
|
|
112
270
|
Apache-2.0. See `LICENSE` and `NOTICE`.
|