react-photo-sphere-viewer
Version:
A React wrapper for Photo Sphere Viewer, to display 360° panoramas with ease.
147 lines (146 loc) • 7.61 kB
TypeScript
import React from "react";
import { Viewer, ViewerConfig, AnimateOptions, CssSize, ExtendedPosition, UpdatableViewerConfig, events, PluginConstructor, NavbarCustomButton, TooltipConfig, Tooltip, Position, Size, PanoramaOptions, utils, AbstractPlugin } from "@photo-sphere-viewer/core";
import "./styles.css";
import "@photo-sphere-viewer/core/index.css";
type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
export interface CubeMapSrc {
left: string;
front: string;
right: string;
back: string;
top: string;
bottom: string;
}
export interface TilesAdapterSrc {
width: number;
cols: number;
rows: number;
baseUrl: string;
tileUrl: (col: number, row: number) => string;
}
type PluginEntry = PluginConstructor | [PluginConstructor, Record<string, unknown>];
export type PluginConfig = PluginEntry;
/**
* Props interface for the Viewer component.
*
* @interface
* @property {string} src - The source of the image to be viewed.
* @property {boolean | string | Array<string | NavbarCustomButton>} [navbar] - Configuration for the navbar. Can be a boolean, string, or an array of strings or NavbarCustomButton.
* @property {string} height - The height of the viewer.
* @property {string} [width] - The width of the viewer.
* @property {string} [containerClass] - The CSS class for the viewer container.
* @property {boolean} [littlePlanet] - Enable or disable the little planet effect.
* @property {boolean | number} [fishEye] - Enable or disable the fisheye effect, or set the fisheye level.
* @property {boolean} [hideNavbarButton] - Show/hide the button that hides the navbar.
* @property {Object} [lang] - Language configuration for the viewer. Each property is a string that represents the text for a specific action.
* @property {Function} [onPositionChange] - Event handler for when the position changes. Receives the latitude, longitude, and the Viewer instance.
* @property {Function} [onZoomChange] - Event handler for when the zoom level changes. Receives the ZoomUpdatedEvent and the Viewer instance.
* @property {Function} [onClick] - Event handler for when the viewer is clicked. Receives the ClickEvent and the Viewer instance.
* @property {Function} [onDblclick] - Event handler for when the viewer is double clicked. Receives the ClickEvent and the Viewer instance.
* @property {Function} [onReady] - Event handler for when the viewer is ready. Receives the Viewer instance.
*/
export interface Props extends MakeOptional<ViewerConfig, "container"> {
src: string | CubeMapSrc | TilesAdapterSrc;
navbar?: boolean | string | Array<string | NavbarCustomButton>;
height: string;
width?: string;
containerClass?: string;
littlePlanet?: boolean;
fishEye?: boolean | number;
hideNavbarButton?: boolean;
lang?: Record<string, string>;
plugins?: PluginEntry[];
onPositionChange?(lat: number, lng: number, instance: Viewer): void;
onZoomChange?(data: events.ZoomUpdatedEvent & {
type: "zoom-updated";
}, instance: Viewer): void;
onClick?(data: events.ClickEvent & {
type: "click";
}, instance: Viewer): void;
onDblclick?(data: events.ClickEvent & {
type: "dblclick";
}, instance: Viewer): void;
onReady?(instance: Viewer): void;
}
/**
* Interface for the Viewer API.
*
* @interface
* @property {Function} animate - Starts an animation. Receives an object of AnimateOptions.
* @property {Function} destroy - Destroys the viewer.
* @property {Function} createTooltip - Creates a tooltip. Receives a TooltipConfig object.
* @property {Function} needsContinuousUpdate - Enables or disables continuous updates. Receives a boolean.
* @property {Function} observeObjects - Starts observing objects. Receives a string key.
* @property {Function} unobserveObjects - Stops observing objects. Receives a string key.
* @property {Function} setCursor - Sets the cursor. Receives a string.
* @property {Function} stopAnimation - Stops the current animation. Returns a Promise.
* @property {Function} rotate - Rotates the viewer. Receives an ExtendedPosition object.
* @property {Function} setOption - Sets a single option. Receives an option key and a value.
* @property {Function} setOptions - Sets multiple options. Receives an object of options.
* @property {Function} getCurrentNavbar - Returns the current navbar.
* @property {Function} zoom - Sets the zoom level. Receives a number.
* @property {Function} zoomIn - Increases the zoom level. Receives a number.
* @property {Function} zoomOut - Decreases the zoom level. Receives a number.
* @property {Function} resize - Resizes the viewer. Receives a CssSize object.
* @property {Function} enterFullscreen - Enters fullscreen mode.
* @property {Function} exitFullscreen - Exits fullscreen mode.
* @property {Function} toggleFullscreen - Toggles fullscreen mode.
* @property {Function} isFullscreenEnabled - Returns whether fullscreen is enabled.
* @property {Function} getPlugin - Returns a plugin. Receives a plugin ID or a PluginConstructor.
* @property {Function} getPosition - Returns the current position.
* @property {Function} getZoomLevel - Returns the current zoom level.
* @property {Function} getSize - Returns the current size.
* @property {Function} needsUpdate - Updates the viewer.
* @property {Function} autoSize - Sets the size to auto.
* @property {Function} setPanorama - Sets the panorama. Receives a path and an optional PanoramaOptions object. Returns a Promise.
* @property {Function} showError - Shows an error message. Receives a string.
* @property {Function} hideError - Hides the error message.
* @property {Function} startKeyboardControl - Starts keyboard control.
* @property {Function} stopKeyboardControl - Stops keyboard control.
*/
export interface ViewerAPI {
animate(options: AnimateOptions): utils.Animation<any>;
destroy(): void;
createTooltip(config: TooltipConfig): Tooltip;
needsContinuousUpdate(enabled: boolean): void;
observeObjects(userDataKey: string): void;
unobserveObjects(userDataKey: string): void;
setCursor(cursor: string): void;
stopAnimation(): PromiseLike<any>;
rotate(position: ExtendedPosition): void;
setOption<T extends keyof UpdatableViewerConfig>(option: T, value: UpdatableViewerConfig[T]): void;
setOptions(options: Partial<UpdatableViewerConfig>): void;
getCurrentNavbar(): (string | object)[] | void;
zoom(value: number): void;
zoomIn(step: number): void;
zoomOut(step: number): void;
resize(size: CssSize): void;
enterFullscreen(): void;
exitFullscreen(): void;
toggleFullscreen(): void;
isFullscreenEnabled(): boolean | void;
/**
* Returns the instance of a plugin if it exists
* @example By plugin identifier
* ```js
* viewer.getPlugin('markers')
* ```
* @example By plugin class with TypeScript support
* ```ts
* viewer.getPlugin<MarkersPlugin>(MarkersPlugin)
* ```
*/
getPlugin<T extends AbstractPlugin<never>>(pluginId: string | PluginConstructor): T;
getPosition(): Position;
getZoomLevel(): number;
getSize(): Size;
needsUpdate(): void;
autoSize(): void;
setPanorama(path: any, options?: PanoramaOptions): Promise<boolean>;
showError(message: string): void;
hideError(): void;
startKeyboardControl(): void;
stopKeyboardControl(): void;
}
declare const ReactPhotoSphereViewer: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<ViewerAPI>>;
export { ReactPhotoSphereViewer };