Skip to content

Options & Callbacks

createPptxViewer(container, options) takes the PptxViewerOptions interface below. Every option is optional, including source (omit it to start empty and call loadFile / loadUrl later). This reference is taken directly from packages/vanilla/src/viewer/types.ts.

ts
import { createPptxViewer } from 'pptx-vanilla-viewer';
import type { PptxViewerOptions, PptxViewerCallbacks } from 'pptx-vanilla-viewer';

TIP

The factory also returns an imperative handle, see Viewer Instance API - that is not part of PptxViewerOptions.

Content

OptionTypeDefaultDescription
sourcePptxViewerSource-The presentation to open: raw bytes (ArrayBuffer / Uint8Array), a Blob/File, or a URL string to fetch.
ts
type PptxViewerSource = ArrayBuffer | Uint8Array | Blob | string;

Chrome & initial state

OptionTypeDefaultDescription
initialSlidenumber0Zero-based slide to show after load (clamped).
showToolbarbooleantrueShow the navigation/zoom/fullscreen toolbar.
showThumbnailsbooleantrueShow the thumbnail sidebar.
editablebooleanfalseEnable editing: click to select, drag/resize/rotate, inline text editing, keyboard shortcuts, undo/redo, and the toolbar Save button. Toggle later via setEditable.
readOnlyboolean-Legacy flag superseded by editable; kept so existing option objects stay type-valid. It has no effect.

Theming & localization

OptionTypeDefaultDescription
themeViewerTheme-Viewer chrome theme (shared ViewerTheme: colors, radius, CSS vars). See Theming.
localestring'en'UI locale. Dictionaries come from messages; English is built in.
messagesTranslationMessages-Per-locale pptx.* message dictionaries. English falls back to the built-in shared dictionary; other locales fall back to English.

TranslationMessages is a Record<string, Record<string, string>>: locale code to a flat dictionary of dotted pptx.* keys. Both can be changed later via setTheme / setLocale.

Extension

OptionTypeDefaultDescription
registryElementRendererRegistrycreateDefaultRegistry()Custom element-renderer registry; pass your own (or mutate the default via getRegistry()) to add or override element renderers. See Element Renderers.

Callbacks

PptxViewerOptions extends PptxViewerCallbacks - there is no framework event system, so events are plain callback options:

CallbackSignatureDescription
onLoad(info: { slideCount: number; canvasSize: CanvasSize }) => voidFired after a presentation loads successfully.
onError(message: string, error: unknown) => voidFired when a load fails (message is already localised/best-effort).
onSlideChange(index: number) => voidFired when the active slide changes (zero-based index).
onZoomChange(scale: number) => voidFired when the effective zoom scale changes (1 = 100%).
onPresentationChange(presenting: boolean) => voidFired when presentation (fullscreen) mode is entered or exited.
onChange() => voidFired after any document mutation (move, resize, edit, undo, ...).
onDirtyChange(dirty: boolean) => voidFired when the unsaved-edits flag flips (a save resets it).
onSelectionChange(elementId: string | null) => voidFired when the selected element changes (null = no selection).

Full interface

ts
interface PptxViewerCallbacks {
	onLoad?: (info: { slideCount: number; canvasSize: CanvasSize }) => void;
	onError?: (message: string, error: unknown) => void;
	onSlideChange?: (index: number) => void;
	onZoomChange?: (scale: number) => void;
	onPresentationChange?: (presenting: boolean) => void;
	onChange?: () => void;
	onDirtyChange?: (dirty: boolean) => void;
	onSelectionChange?: (elementId: string | null) => void;
}

interface PptxViewerOptions extends PptxViewerCallbacks {
	source?: PptxViewerSource;
	theme?: ViewerTheme;
	locale?: string;
	messages?: TranslationMessages;
	initialSlide?: number;
	editable?: boolean;
	readOnly?: boolean;
	showToolbar?: boolean;
	showThumbnails?: boolean;
	registry?: ElementRendererRegistry;
}

Example: everything wired

ts
import { createPptxViewer, vermilionLightTheme } from 'pptx-vanilla-viewer';

const viewer = createPptxViewer(document.getElementById('host')!, {
	source: '/decks/quarterly.pptx',
	theme: vermilionLightTheme,
	locale: 'en',
	initialSlide: 0,
	editable: true,
	showToolbar: true,
	showThumbnails: true,
	onLoad: ({ slideCount }) => console.log(`${slideCount} slides`),
	onSlideChange: (index) => console.log('slide', index + 1),
	onZoomChange: (scale) => console.log(`${Math.round(scale * 100)}%`),
	onPresentationChange: (presenting) => console.log(presenting ? 'presenting' : 'back'),
	onDirtyChange: (dirty) => console.log('unsaved edits:', dirty),
	onSelectionChange: (elementId) => console.log('selected', elementId),
	onError: (message) => console.error(message),
});

Released under the Apache-2.0 License.