svg-pan-zoom-m
Version:
JavaScript library for panning and zooming an SVG image from the mouse, touches and programmatically.
268 lines (215 loc) • 6.77 kB
TypeScript
// Type definitions for svg-pan-zoom v3.5.0
// Project: https://github.com/ariutta/svg-pan-zoom
// Definitions by: César Vidril <https://github.com/Yimiprod>
// Definitions: https://github.com/ariutta/svg-pan-zoom
declare namespace SvgPanZoom {
interface Options {
/**
* can be querySelector string or SVGElement (default enabled)
* @type {string|HTMLElement|SVGElement}
*/
viewportSelector?: string|HTMLElement|SVGElement;
/**
* enable or disable panning (default enabled)
* @type {boolean}
*/
panEnabled?: boolean;
/**
* insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled)
* @type {boolean}
*/
controlIconsEnabled?: boolean;
/**
* enable or disable zooming (default enabled)
* @type {boolean}
*/
zoomEnabled?: boolean;
/**
* enable or disable zooming by double clicking (default enabled)
* @type {boolean}
*/
dblClickZoomEnabled?: boolean;
/**
* enable or disable zooming by scrolling (default enabled)
* @type {boolean}
*/
mouseWheelZoomEnabled?: boolean;
/**
* jusitfy if use `wheel` or `mousewheel` event
*/
onlyMouseWheel?: boolean;
/**
* prevent mouse events to bubble up (default enabled)
* @type {boolean}
*/
preventMouseEventsDefault?: boolean;
zoomScaleSensitivity?: number; // Zoom sensitivity (Default 0.2)
minZoom?: number; // Minimum Zoom level (Default 0.5)
maxZoom?: number; // Maximum Zoom level (Default 10)
fit?: boolean; // enable or disable viewport fit in SVG (default true)
contain?: boolean; // (default true)
center?: boolean; // enable or disable viewport centering in SVG (default true)
refreshRate?: number | "auto"; // (default 'auto')
beforeZoom?: (oldScale: number, newScale: number) => void | boolean;
onZoom?: (newScale: number) => void;
beforePan?: (oldPan: Point, newPan: Point) => void | boolean | PointModifier;
onPan?: (newPan: Point) => void;
onUpdatedCTM?: (newCTM: SVGMatrix) => void;
customEventsHandler?: CustomEventHandler; // (default null)
eventsListenerElement?: SVGElement; // (default null)
}
interface CustomEventHandler {
init: (options: CustomEventOptions) => void;
haltEventListeners: string[];
destroy: Function;
}
interface CustomEventOptions {
svgElement: SVGSVGElement;
instance: Instance;
}
interface Point {
x: number;
y: number;
}
interface PointModifier {
x: number|boolean;
y: number|boolean;
}
interface Sizes {
width: number;
height: number;
realZoom: number;
viewBox: {
x: number;
y: number;
width: number;
height: number;
};
}
interface Instance {
/**
* Creates a new SvgPanZoom instance with given element selector.
*
* @param {string|HTMLElement|SVGElement} svg selector of the tag on which it is to be applied.
* @param {Object} options provides customization options at the initialization of the object.
* @return {Instance} Current instance
*/
(svg: string|HTMLElement|SVGElement, options?: Options): Instance;
/**
* Enables Panning on svg element
* @return {Instance} Current instance
*/
enablePan(): Instance;
/**
* Disables panning on svg element
* @return {Instance} Current instance
*/
disablePan(): Instance;
/**
* Checks if Panning is enabled or not
* @return {Boolean} true or false based on panning settings
*/
isPanEnabled(): boolean;
setBeforePan(fn: (oldPoint: Point, newPoint: Point) => void | boolean | PointModifier): Instance;
setOnPan(fn: (point: Point) => void): Instance;
/**
* Pan to a rendered position
*
* @param {Object} point {x: 0, y: 0}
* @return {Instance} Current instance
*/
pan(point: Point): Instance;
/**
* Relatively pan the graph by a specified rendered position vector
*
* @param {Object} point {x: 0, y: 0}
* @return {Instance} Current instance
*/
panBy(point: Point): Instance;
/**
* Get pan vector
*
* @return {Object} {x: 0, y: 0}
* @return {Instance} Current instance
*/
getPan(): Point;
resetPan(): Instance;
enableZoom(): Instance;
disableZoom(): Instance;
isZoomEnabled(): boolean;
enableControlIcons(): Instance;
disableControlIcons(): Instance;
isControlIconsEnabled(): boolean;
enableDblClickZoom(): Instance;
disableDblClickZoom(): Instance;
isDblClickZoomEnabled(): boolean;
enableMouseWheelZoom(): Instance;
disableMouseWheelZoom(): Instance;
isMouseWheelZoomEnabled(): boolean;
setZoomScaleSensitivity(scale: number): Instance;
setMinZoom(zoom: number): Instance;
setMaxZoom(zoom: number): Instance;
setBeforeZoom(fn: (oldScale: number, newScale: number) => void | boolean): Instance;
setOnZoom(fn: (scale: number) => void): Instance;
zoom(scale: number): void;
zoomIn(): Instance;
zoomOut(): Instance;
zoomBy(scale: number): Instance;
zoomAtPoint(scale: number, point: Point): Instance;
zoomAtPointBy(scale: number, point: Point): Instance;
resetZoom(): Instance;
/**
* Get zoom scale/level
*
* @return {float} zoom scale
*/
getZoom(): number;
setOnUpdatedCTM(fn: (newCTM: SVGMatrix) => void): Instance;
/**
* Adjust viewport size (only) so it will fit in SVG
* Does not center image
*
* @return {Instance} Current instance
*/
fit(): Instance;
/**
* Adjust viewport size (only) so it will contain in SVG
* Does not center image
*
* @return {Instance} Current instance
*/
contain(): Instance;
/**
* Adjust viewport pan (only) so it will be centered in SVG
* Does not zoom/fit image
*
* @return {Instance} Current instance
*/
center(): Instance;
/**
* Recalculates cached svg dimensions and controls position
*
* @return {Instance} Current instance
*/
resize(): Instance;
/**
* Get all calculate svg dimensions
*
* @return {Object} {width: 0, height: 0, realZoom: 0, viewBox: { width: 0, height: 0 }}
*/
getSizes(): Sizes;
reset(): Instance;
/**
* Update content cached BorderBox
* Use when viewport contents change
*
* @return {Instance} Current instance
*/
updateBBox(): Instance;
destroy(): void;
}
}
declare const svgPanZoom: SvgPanZoom.Instance;
declare module "svg-pan-zoom-m" {
export = svgPanZoom;
}