openseadragon
Version:
Provides a smooth, zoomable user interface for HTML/Javascript.
1,646 lines (1,474 loc) • 85.4 kB
TypeScript
declare namespace OpenSeadragon {
class Browser {
vendor: BROWSERS;
version: number;
alpha: boolean;
}
enum BROWSERS {
UNKNOWN = 0,
IE = 1,
FIREFOX = 2,
SAFARI = 3,
CHROME = 4,
OPERA = 5,
EDGE = 6,
CHROMEEDGE = 7,
}
enum ButtonState {
REST,
GROUP,
HOVER,
DOWN,
}
enum ControlAnchor {
NONE,
TOP_LEFT,
TOP_RIGHT,
BOTTOM_LEFT,
BOTTOM_RIGHT,
ABSOLUTE,
}
const DEFAULT_SETTINGS: Options;
const fullScreenApi: {
supportsFullScreen: boolean;
isFullScreen: () => boolean;
getFullScreenElement: () => HTMLElement;
requestFullScreen: () => void;
exitFullScreen: () => void;
cancelFullScreen: () => void;
fullScreenEventName: string;
fullScreenErrorEventName: string;
};
enum OverlayPlacement {
CENTER,
TOP_LEFT,
TOP,
TOP_RIGHT,
RIGHT,
BOTTOM_RIGHT,
BOTTOM,
BOTTOM_LEFT,
LEFT,
}
enum OverlayRotationMode {
NO_ROTATION,
EXACT,
BOUNDING_BOX,
}
const pixelDensityRatio: number;
enum Placement {
CENTER,
TOP_LEFT,
TOP,
TOP_RIGHT,
RIGHT,
BOTTOM_RIGHT,
BOTTOM,
BOTTOM_LEFT,
LEFT,
}
class SUBPIXEL_ROUNDING_OCCURRENCES {
static NEVER: number;
static ALWAYS: number;
static ONLY_AT_REST: number;
}
const supportsAddEventListener: boolean;
const supportsCanvas: boolean;
const supportsEventListenerOptions: boolean;
const supportsRemoveEventListener: boolean;
const version: {
versionStr: string;
major: number;
minor: number;
revision: number;
};
function addClass(element: Element | string, className: string): void;
function addEvent(
element: Element | string,
eventName: string,
handler: (event: Event) => void,
useCapture?:
| boolean
| { capture?: boolean; passive?: boolean; once?: boolean },
): void;
function cancelEvent(event?: OSDEvent<any>): void;
function capitalizeFirstLetter(value: string): string;
function createCallback(
object: object,
method: (...args: any[]) => void,
...args: any[]
): (...args: any[]) => void;
function delegate(
object: object,
method: (...args: any[]) => void,
): (object: any, ...args: any[]) => void; // REVIEW: unsure of return type
function eventIsCanceled(event: OSDEvent<any>): boolean;
function extend(): any;
function getCssPropertyWithVendorPrefix(property: string): string;
function getCurrentPixelDensityRatio(): number;
function getElement(element: string | Element): Element;
function getElementOffset(element: Element | string): Point;
function getElementPosition(element: Element | string): Point;
function getElementSize(element: Element | string): Point;
function getElementStyle(element: Element | string): CSSStyleDeclaration;
function getViewer(element: string | Element): Viewer;
function getMousePosition(event?: OSDEvent<any>): Point;
function getPageScroll(): Point;
function getString(property: string): string;
function getUrlParameter(key: string): string;
function getWindowSize(): Point;
function imageFormatSupported(extension?: string): boolean;
function indexOf(
array: any[],
searchElement: object,
fromIndex?: number,
): number;
// (missing jquery functions)
function makeAjaxRequest(options: {
url: string;
success: (obj: object) => void;
error: (obj: object) => void;
headers: object;
responseType: string;
postData: string;
withCredentials?: boolean;
}): XMLHttpRequest;
function makeCenteredNode(element: Element | string): Element;
function makeNeutralElement(tagName: string): Element;
function makeTransparentImage(src: string): Element;
function normalizeEventListenerOptions(
options:
| boolean
| { capture?: boolean; passive?: boolean; once?: boolean },
): string;
function now(): number;
function parseJSON(string: string): object;
function parseXml(string: string): Document;
function pointInElement(element: Element | string, point: Point): boolean;
function positiveModulo(number: number, modulo: number): number;
function removeClass(element: Element | string, className: string): void;
function removeEvent(
element: Element | string,
eventName: string,
handler: EventHandler<any>,
useCapture?: boolean | { capture?: boolean },
): void;
function setElementOpacity(
element: Element | string,
opacity: number,
usesAlpha?: boolean,
): void;
function setElementPointerEvents(
element: Element | string,
value: string,
): void;
function setElementPointerEventsNone(element: Element | string): void;
function setElementTouchActionNone(element: Element | string): void;
function setImageFormatsSupported(formats: {
bmp?: boolean;
jpeg?: boolean;
jpg?: boolean;
png?: boolean;
tif?: boolean;
wdp?: boolean;
}): void;
function setPageScroll(point: Point): void;
function setString(property: string, value: string): void;
function stopEvent(event?: OSDEvent<any>): void;
interface GestureSettings {
dragToPan?: boolean;
scrollToZoom?: boolean;
clickToZoom?: boolean;
dblClickToZoom?: boolean;
dblClickDragToZoom?: boolean;
pinchToZoom?: boolean;
zoomToRefPoint?: boolean;
flickEnabled?: boolean;
flickMinSpeed?: number;
flickMomentum?: number;
pinchRotate?: boolean;
}
interface NavImagesValues {
REST: string;
GROUP: string;
HOVER: string;
DOWN: string;
}
interface NavImages {
zoomIn: NavImagesValues;
zoomOut: NavImagesValues;
home: NavImagesValues;
fullpage: NavImagesValues;
rotateleft: NavImagesValues;
rotateright: NavImagesValues;
flip: NavImagesValues;
previous: NavImagesValues;
next: NavImagesValues;
}
type DrawerType = "auto" | "html" | "canvas" | "webgl";
type DrawerConstructor = new (options: TDrawerOptions) => DrawerBase;
type TypeConverter<TIn = any, TOut = any> = (
tile: Tile,
data: TIn,
) => TOut | Promise<TOut>;
type TypeDestructor<TIn = any, TOut = any> = (
data: TIn,
) => TOut | Promise<TOut>;
interface Options {
id?: string;
element?: HTMLElement;
tileSources?:
| string
| TileSourceOptions
| {
type: string;
levels?: Array<{
url: string;
height: number;
width: number;
}>;
}
| {
Image: {
xmlns?: string;
Url: string;
Format: string;
Overlap: string;
TileSize: string;
Size: {
Width: string;
Height: string;
};
};
}
| Array<string | TileSource | { type: "openstreetmaps" }>
| (() => string)
| { getTileUrl: (level: number, x: number, y: number) => string };
tabIndex?: number;
overlays?: any[];
toolbar?: string | HTMLElement;
xmlPath?: string;
prefixUrl?: string;
navImages?: NavImages;
debugMode?: boolean;
debugGridColor?: string;
silenceMultiImageWarnings?: boolean;
blendTime?: number;
alwaysBlend?: boolean;
autoHideControls?: boolean;
immediateRender?: boolean;
defaultZoomLevel?: number;
drawer?:
| DrawerType
| DrawerConstructor
| Array<DrawerType | DrawerConstructor>;
drawerOptions?: DrawerOptions;
opacity?: number;
preload?: boolean;
compositeOperation?:
| "source-over"
| "source-atop"
| "source-in"
| "source-out"
| "destination-over"
| "destination-atop"
| "destination-in"
| "destination-out"
| "lighter"
| "copy"
| "xor"
| "multiply"
| "screen"
| "overlay"
| "darken"
| "lighten"
| "color-dodge"
| "color-burn"
| "hard-light"
| "soft-light"
| "difference"
| "exclusion"
| "hue"
| "saturation"
| "color"
| "luminosity";
imageSmoothingEnabled?: boolean;
placeholderFillStyle?: string | CanvasGradient | CanvasPattern;
subPixelRoundingForTransparency?: object;
degrees?: number;
flipped?: boolean;
overlayPreserveContentDirection?: boolean;
minZoomLevel?: number;
maxZoomLevel?: number;
homeFillsViewer?: boolean;
panHorizontal?: boolean;
panVertical?: boolean;
constrainDuringPan?: boolean;
wrapHorizontal?: boolean;
wrapVertical?: boolean;
minZoomImageRatio?: number;
maxZoomPixelRatio?: number;
smoothTileEdgesMinZoom?: number;
iOSDevice?: boolean;
autoResize?: boolean;
preserveImageSizeOnResize?: boolean;
minScrollDeltaTime?: number;
rotationIncrement?: number;
maxTilesPerFrame?: number;
pixelsPerWheelLine?: number;
pixelsPerArrowPress?: number;
visibilityRatio?: number;
viewportMargins?: object;
imageLoaderLimit?: number;
clickTimeThreshold?: number;
clickDistThreshold?: number;
dblClickTimeThreshold?: number;
dblClickDistThreshold?: number;
springStiffness?: number;
animationTime?: number;
loadDestinationTilesOnAnimation?: boolean;
gestureSettingsMouse?: GestureSettings;
gestureSettingsTouch?: GestureSettings;
gestureSettingsPen?: GestureSettings;
gestureSettingsUnknown?: GestureSettings;
zoomPerClick?: number;
zoomPerScroll?: number;
zoomPerDblClickDrag?: number;
zoomPerSecond?: number;
showNavigator?: boolean;
navigatorElement?: HTMLElement;
navigatorId?: string;
navigatorPosition?:
| "TOP_LEFT"
| "TOP_RIGHT"
| "BOTTOM_LEFT"
| "BOTTOM_RIGHT"
| "ABSOLUTE";
navigatorSizeRatio?: number;
navigatorMaintainSizeRatio?: boolean;
navigatorTop?: number | string;
navigatorLeft?: number | string;
navigatorHeight?: number | string;
navigatorWidth?: number | string;
navigatorAutoFade?: boolean;
navigatorRotate?: boolean;
navigatorBackground?: string;
navigatorOpacity?: number;
navigatorBorderColor?: string;
navigatorDisplayRegionColor?: string;
controlsFadeDelay?: number;
controlsFadeLength?: number;
maxImageCacheCount?: number;
timeout?: number;
tileRetryMax?: number;
tileRetryDelay?: number;
/**
* @deprecated Use the `drawer` option to specify preferred renderer.
*/
useCanvas?: boolean;
minPixelRatio?: number;
mouseNavEnabled?: boolean;
keyboardNavEnabled?: boolean;
showNavigationControl?: boolean;
navigationControlAnchor?: ControlAnchor;
showZoomControl?: boolean;
showHomeControl?: boolean;
showFullPageControl?: boolean;
showRotationControl?: boolean;
showFlipControl?: boolean;
showSequenceControl?: boolean;
sequenceControlAnchor?: ControlAnchor;
navPrevNextWrap?: boolean;
zoomInButton?: string | Element;
zoomOutButton?: string | Element;
homeButton?: string | Element;
fullPageButton?: string | Element;
rotateLeftButton?: string | Element;
rotateRightButton?: string | Element;
previousButton?: string | Element;
nextButton?: string | Element;
sequenceMode?: boolean;
/**
* If sequenceMode is true, display this page initially.
* @default 0
*/
initialPage?: number;
preserveViewport?: boolean;
preserveOverlays?: boolean;
showReferenceStrip?: boolean;
referenceStripScroll?: string;
referenceStripElement?: HTMLElement;
referenceStripHeight?: number;
referenceStripWidth?: number;
referenceStripPosition?: string;
referenceStripSizeRatio?: number;
collectionMode?: boolean;
collectionRows?: number;
collectionColumns?: number;
collectionLayout?: "horizontal" | "vertical";
collectionTileSize?: number;
collectionTileMargin?: number;
crossOriginPolicy?: "Anonymous" | "use-credentials" | false;
ajaxWithCredentials?: boolean;
loadTilesWithAjax?: boolean;
ajaxHeaders?: object;
splitHashDataForPost?: boolean;
callTileLoadedWithCachedData?: boolean;
}
interface TileSourceOptions {
url?: string;
referenceStripThumbnailUrl?: string;
success?: (event: Event) => void;
ajaxWithCredentials?: string | boolean;
ajaxHeaders?: object;
splitHashDataForPost?: boolean;
width?: number;
height?: number;
tileSize?: number;
tileWidth?: number;
tileHeight?: number;
tileOverlap?: number;
minLevel?: number;
maxLevel?: number;
ready?: boolean;
}
interface ButtonOptions {
userData?: object;
element?: HTMLElement;
tooltip?: string;
srcRest?: string;
srcGroup?: string;
srcHover?: string;
srcDown?: string;
fadeDelay?: number;
fadeLength?: number;
onPress?: EventHandler<ButtonEvent>;
onRelease?: EventHandler<ButtonEvent>;
onClick?: EventHandler<ButtonEvent>;
onEnter?: EventHandler<ButtonEvent>;
onExit?: EventHandler<ButtonEvent>;
onFocus?: EventHandler<ButtonEvent>;
onBlur?: EventHandler<ButtonEvent>;
}
class Button extends EventSource<ButtonEventMap> {
clickDistThreshold: number;
clickTimeThreshold: number;
currentState: ButtonState;
element: HTMLElement;
fadeDelay: number;
fadeLength: number;
srcDown: string | null;
srcGroup: string | null;
srcHover: string | null;
srcRest: string | null;
tooltip: string | null;
tracker: MouseTracker;
userData: any;
constructor(options: ButtonOptions);
disable(): void;
enable(): void;
notifyGroupEnter(): void;
notifyGroupExit(): void;
destroy(): void;
}
class ButtonGroup {
buttons: Button[];
clickDistThreshold: number;
clickTimeThreshold: number;
element: HTMLElement;
tracker: MouseTracker;
constructor(options: { buttons: Button[]; element?: Element });
addButton(button: Button): void;
destroy(): void;
}
class InternalCacheRecord {
constructor(
data: any | Promise<any>,
type: string,
onDestroy?: (data: any) => void,
);
tstamp: number;
loaded: boolean;
readonly data: any;
readonly type: string;
await(): Promise<any>;
withTileReference(referenceTile: Tile): InternalCacheRecord;
destroy(): void;
}
class CacheRecord {
constructor();
loaded: boolean;
readonly data: any;
readonly type: string;
await(): Promise<any>;
getImage(): any;
getRenderedContext(): any;
setDataAs(data: any, type: string): Promise<any>;
getDataAs(type?: string, copy?: boolean): Promise<any>;
getDataForRendering(
drawer: DrawerBase,
tileToDraw: Tile,
): CacheRecord | InternalCacheRecord | undefined;
isUsableForDrawer(drawer: DrawerBase): boolean;
prepareForRendering(drawer: DrawerBase): Promise<any>;
prepareInternalCacheAsync(drawer: DrawerBase): Promise<any>;
prepareInternalCacheSync(drawer: DrawerBase): InternalCacheRecord;
transformTo(type?: string | string[]): Promise<any>;
destroyInternalCache(drawerId?: string): void;
withTileReference(ref: Tile): CacheRecord;
toString(): string;
revive(): void;
destroy(): void;
addTile(tile: Tile, data?: any, type?: string): void;
removeTile(tile: Tile): boolean;
getTileCount(): number;
}
interface TControlOptions {
anchor?: ControlAnchor;
attachToViewer?: boolean;
autoFade?: boolean;
}
class Control {
anchor: ControlAnchor;
autoFade: boolean;
container: HTMLElement;
element: HTMLElement;
wrapper: HTMLElement;
constructor(
element: Element,
options: TControlOptions,
container: Element,
);
destroy(): void;
isVisible(): boolean;
setOpacity(opacity: number): void;
setVisible(visible: boolean): void;
}
class ControlDock {
container: HTMLElement;
controls: any[];
constructor(options: object);
addControl(
element: string | Element,
controlOptions: TControlOptions,
): void;
areControlsEnabled(): boolean;
clearControls(): ControlDock;
removeControl(element: Control): ControlDock;
setControlsEnabled(enabled: boolean): ControlDock;
}
interface ConversionStep {
target: PriorityQueue.Node<string>;
origin: PriorityQueue.Node<string>;
weight: number;
transform: TypeConverter;
}
class DataTypeConverter {
constructor();
guessType(x: any): string;
learn(
from: string,
to: string,
callback: TypeConverter,
costPower?: number,
costMultiplier?: number,
): void;
learnDestroy(type: string, callback: TypeDestructor): void;
convert<TOut = any>(
tile: Tile,
data: any,
from: string,
...to: string[]
): Promise<TOut | undefined>;
copy<TOut = any>(
tile: Tile,
data: any,
type: string,
): Promise<TOut | undefined>;
destroy<TOut = any>(data: any, type: string): Promise<TOut> | undefined;
getConversionPath(
from: string,
to: string | string[],
): ConversionStep[] | undefined;
getConversionPathFinalType(
path: ConversionStep[] | undefined,
): string | undefined;
getKnownTypes(): string[];
existsType(type: string): boolean;
}
const converter: DataTypeConverter;
class DisplayRect extends Rect {
minLevel: number;
maxLevel: number;
constructor(
x: number,
y: number,
width: number,
height: number,
minLevel: number,
maxLevel: number,
);
}
interface BaseDrawerOptions {
usePrivateCache?: boolean;
preloadCache?: boolean;
offScreen?: boolean;
broadCastTileInvalidation?: boolean;
}
interface WebGLDrawerOptions extends BaseDrawerOptions {
unpackWithPremultipliedAlpha?: boolean;
}
interface DrawerOptions {
webgl?: WebGLDrawerOptions;
canvas?: BaseDrawerOptions;
html?: BaseDrawerOptions;
custom?: BaseDrawerOptions;
[key: string]: BaseDrawerOptions | undefined;
}
class DrawerBase {
container: HTMLElement;
debugGridColor: string[];
options: BaseDrawerOptions;
viewer: Viewer;
viewport: Viewport;
constructor(options: {
viewer: Viewer;
viewport: Viewport;
element: HTMLElement;
});
static isSupported(): boolean;
get defaultOptions(): BaseDrawerOptions;
get canvas(): HTMLCanvasElement;
canRotate(): boolean;
destroy(): void;
destroyInternalCache(): void;
drawDebuggingRect(rect: Rect): void;
getDataToDraw(tile: Tile): any | undefined;
getId(): string;
getRequiredDataFormats(): string[];
getSupportedDataFormats(): string[];
getType(): string | undefined;
internalCacheCreate(cache: CacheRecord, tile: Tile): any;
internalCacheFree(data: any): any;
setImageSmoothingEnabled(imageSmoothingEnabled: boolean): void;
setInternalCacheNeedsRefresh(): void;
tiledImageCreated(tiledImage: TiledImage): void;
viewportCoordToDrawerCoord(point: Point): Point;
viewportToDrawerRectangle(rectangle: Rect): Rect;
}
interface TDrawerOptions {
viewer: Viewer;
viewport: Viewport;
element: HTMLElement;
debugGridColor?: string | string[];
}
class CanvasDrawer extends DrawerBase {
container: HTMLElement;
constructor(options: TDrawerOptions);
get canvas(): HTMLCanvasElement;
blendSketch(options: {
opacity: number;
scale: number;
translate?: Point;
compositeOperation?: string;
bounds?: Rect;
}): void;
}
interface IDziTileSourceOptions {
width?: number;
height?: number;
tileSize?: number;
tileOverlap?: number;
tilesUrl?: string;
fileFormat?: string;
displayRects?: DisplayRect[];
minLevel?: number;
maxLevel?: number;
}
class DziTileSource extends TileSource {
displayRects: DisplayRect[];
fileFormat: string;
queryParams: string;
tilesUrl: string;
constructor(
width: number | IDziTileSourceOptions,
height?: number,
tileSize?: number,
tileOverlap?: number,
tilesUrl?: string,
fileFormat?: string,
displayRects?: DisplayRect[],
minLevel?: number,
maxLevel?: number,
);
}
class EventSource<EventMap extends Record<string, any> = any> {
addHandler<K extends keyof EventMap>(
eventName: K,
handler: EventHandler<EventMap[K]>,
userData?: object,
priority?: number,
): boolean;
addOnceHandler<K extends keyof EventMap>(
eventName: K,
handler: EventHandler<EventMap[K]>,
userData?: object,
times?: number,
priority?: number,
): boolean;
getAwaitingHandler<K extends keyof EventMap>(
eventName: K,
bindTarget: any,
): null | Promise<any>;
getHandler<K extends keyof EventMap>(eventName: K): void;
numberOfHandlers<K extends keyof EventMap>(eventName: K): number;
raiseEvent<K extends keyof EventMap>(
eventName: K,
eventArgs: object,
): boolean;
raiseEventAwaiting<K extends keyof EventMap>(
eventName: K,
eventArgs: object | undefined,
bindTarget: any,
): Promise<any> | undefined;
removeAllHandlers<K extends keyof EventMap>(eventName: K): boolean;
removeHandler<K extends keyof EventMap>(
eventName: K,
handler: EventHandler<EventMap[K]>,
): boolean;
}
class HTMLDrawer extends DrawerBase {
container: HTMLElement;
constructor(options: TDrawerOptions);
get canvas(): HTMLCanvasElement;
}
class IIIFTileSource extends TileSource {
isLevel0: boolean;
levelSizes?: Array<{ width: number; height: number }>;
scale_factors?: number[];
tileFormat: string;
tiles?: Array<{
width: number;
height?: number;
scaleFactors: number[];
}>;
version: number;
constructor(options: TileSourceOptions & { tileFormat?: string });
}
interface IrisTileSourceOptions extends TileSourceOptions {
type: "iris";
serverUrl: string;
slideId: string;
metadata?: {
extent: {
width: number;
height: number;
layers: Array<{
scale: number;
x_tiles: number;
y_tiles: number;
}>;
};
};
}
interface IIPTileSourceOptions extends TileSourceOptions {
iipsrv: string;
image: string;
format?: string;
transform?: {
stack?: string;
quality?: number;
contrast?: number;
color?: string;
invert?: boolean;
colormap?: string;
gamma?: number;
minmax?: string;
twist?: string;
hillshade?: string;
};
}
class IIPTileSource extends TileSource {
format?: string;
iipsrv: string;
image: string;
levelSizes: Array<{ width: number; height: number }>;
transform?: IIPTileSourceOptions["transform"];
constructor(options: IIPTileSourceOptions);
getMetadataUrl(): string;
parseIIP(data: string): void;
}
class IrisTileSource extends TileSource {
levelScales: number[];
levelSizes: Array<{
height: number;
width: number;
xTiles: number;
yTiles: number;
}>;
serverUrl: string;
slideId: string;
constructor(options: IrisTileSourceOptions);
getMetadataUrl(): string;
parseMetadata(data: IrisTileSourceOptions["metadata"]): void;
}
interface TImageJobOptions {
src?: string;
tile?: Tile;
source?: TileSource;
loadWithAjax?: string;
ajaxHeaders?: Record<string, string>;
ajaxWithCredentials?: boolean;
crossOriginPolicy?: string;
postData?: string | null;
userData?: any;
abort?: () => void;
callback?: () => void;
timeout?: number;
tries?: number;
}
class ImageJob {
ajaxHeaders: object;
ajaxWithCredentials: boolean;
crossOriginPolicy: string;
data: any;
dataType: string | null;
errorMsg: string | null;
jobId: number | null;
loadWithAjax: boolean;
postData: string | object;
request: XMLHttpRequest | null;
source: TileSource;
src: string;
tile: Tile;
timeout: number;
tries: number;
userData: any;
constructor(options: TImageJobOptions);
abort(): void;
fail(errorMessage: string, request: XMLHttpRequest | null): void;
finish(
data: any,
request: XMLHttpRequest | null,
dataType?: string,
): void;
}
interface BatchImageJobOptions {
source: TileSource;
jobs: ImageJob[];
callback?: (job: BatchImageJob) => void;
abort?: () => void;
timeout?: number;
}
class BatchImageJob {
data: any;
dataType: string | null;
errorMsg: string | null;
jobId: number | null;
jobs: ImageJob[];
request: XMLHttpRequest | null;
source: TileSource;
timeout: number;
constructor(options: BatchImageJobOptions);
abort(): void;
fail(errorMessage: string, request: XMLHttpRequest | null): void;
finish(
data: any,
request: XMLHttpRequest | null,
dataType?: string,
): void;
start(): void;
}
interface ImageLoaderOptions {
jobLimit?: number;
timeout?: number;
}
class ImageLoader {
jobLimit: number;
jobQueue: Array<ImageJob | BatchImageJob>;
jobsInProgress: number;
timeout: number;
constructor(options: ImageLoaderOptions);
addJob(options: TImageJobOptions): boolean;
canAcceptNewJob(): boolean;
clear(): void;
}
interface ImageTileSourceOptions extends TileSourceOptions {
url: string;
buildPyramid?: boolean;
crossOriginPolicy?: string | boolean;
ajaxWithCredentials?: string | boolean;
useCanvas?: boolean;
}
class ImageTileSource extends TileSource {
buildPyramid: boolean;
crossOriginPolicy: string | boolean;
ajaxWithCredentials: string | boolean;
useCanvas: boolean;
image: HTMLImageElement | null;
levels: Array<{ url?: string; width: number; height: number }>;
constructor(options: ImageTileSourceOptions);
downloadTileStart(job: ImageJob): void;
/** @deprecated */
getContext2D(
level: number,
x: number,
y: number,
): CanvasRenderingContext2D;
}
class LegacyTileSource extends TileSource {
levels: Array<{
url: string;
width: number;
height: number;
}>;
constructor(
levels: Array<{
url: string;
width: number;
height: number;
}>,
);
}
class Mat3 {
values: number[];
constructor(values?: number[]);
multiply(other: Mat3): Mat3;
scaleAndTranslate(sx: number, sy: number, tx: number, ty: number): Mat3;
scaleAndTranslateSelf(
sx: number,
sy: number,
tx: number,
ty: number,
): void;
scaleAndTranslateOtherSetSelf(other: Mat3): void;
setValues(
a00: number,
a01: number,
a02: number,
a10: number,
a11: number,
a12: number,
a20: number,
a21: number,
a22: number,
): void;
static makeIdentity(): Mat3;
static makeRotation(angleInRadians: number): Mat3;
static makeScaling(sx: number, sy: number): Mat3;
static makeTranslation(tx: number, ty: number): Mat3;
}
interface MouseTrackerOptions {
element: Element | string;
startDisabled?: boolean;
clickTimeThreshold?: number;
clickDistThreshold?: number;
dblClickTimeThreshold?: number;
dblClickDistThreshold?: number;
stopDelay?: number;
userData?: unknown;
preProcessEventHandler?: EventHandler<PreProcessMouseTrackerEvent>;
keyDownHandler?: EventHandler<KeyMouseTrackerEvent>;
keyUpHandler?: EventHandler<KeyMouseTrackerEvent>;
keyHandler?: EventHandler<KeyMouseTrackerEvent>;
focusHandler?: EventHandler<MouseTrackerEvent<FocusEvent>>;
blurHandler?: EventHandler<MouseTrackerEvent<FocusEvent>>;
contextMenuHandler?: EventHandler<ContextMenuMouseTrackerEvent>;
scrollHandler?: EventHandler<ScrollMouseTrackerEvent>;
enterHandler?: EventHandler<EnterLeaveMouseTrackerEvent>;
/** @deprecated use leaveHandler instead */
exitHandler?: EventHandler<EnterLeaveMouseTrackerEvent>;
leaveHandler?: EventHandler<EnterLeaveMouseTrackerEvent>;
overHandler?: EventHandler<EnterLeaveMouseTrackerEvent>;
outHandler?: EventHandler<EnterLeaveMouseTrackerEvent>;
pressHandler?: EventHandler<PointerMouseTrackerEvent>;
releaseHandler?: EventHandler<ReleaseMouseTrackerEvent>;
nonPrimaryPressHandler?: EventHandler<NonPrimaryPressMouseTrackerEvent>;
nonPrimaryReleaseHandler?: EventHandler<NonPrimaryPressMouseTrackerEvent>;
moveHandler?: EventHandler<PointerMouseTrackerEvent>;
clickHandler?: EventHandler<ClickMouseTrackerEvent>;
dblClickHandler?: EventHandler<DblClickMouseTrackerEvent>;
dragHandler?: EventHandler<DragMouseTrackerEvent>;
dragEndHandler?: EventHandler<DragEndMouseTrackerEvent>;
pinchHandler?: EventHandler<PinchMouseTrackerEvent>;
stopHandler?: EventHandler<StopMouseTrackerEvent>;
}
class MouseTracker {
element: Element;
clickTimeThreshold: number;
clickDistThreshold: number;
dblClickTimeThreshold: number;
dblClickDistThreshold: number;
stopDelay: number;
userData: unknown;
destroy(): void;
/** @deprecated use `this.tracking` */
isTracking(): boolean;
setTracking(track: boolean): MouseTracker;
getActivePointersListByType(type: string): GesturePointList;
getActivePointerCount(): number;
get hasGestureHandlers(): boolean;
get hasScrollHandler(): boolean;
constructor(options: MouseTrackerOptions);
preProcessEventHandler: EventHandler<PreProcessMouseTrackerEvent> | null;
keyDownHandler: EventHandler<KeyMouseTrackerEvent> | null;
keyUpHandler: EventHandler<KeyMouseTrackerEvent> | null;
keyHandler: EventHandler<KeyMouseTrackerEvent> | null;
focusHandler: EventHandler<MouseTrackerEvent<FocusEvent>> | null;
blurHandler: EventHandler<MouseTrackerEvent<FocusEvent>> | null;
contextMenuHandler: EventHandler<ContextMenuMouseTrackerEvent> | null;
scrollHandler: EventHandler<ScrollMouseTrackerEvent> | null;
enterHandler: EventHandler<EnterLeaveMouseTrackerEvent> | null;
/** @deprecated use leaveHandler instead */
exitHandler: EventHandler<EnterLeaveMouseTrackerEvent> | null;
leaveHandler: EventHandler<EnterLeaveMouseTrackerEvent> | null;
overHandler: EventHandler<EnterLeaveMouseTrackerEvent> | null;
outHandler: EventHandler<EnterLeaveMouseTrackerEvent> | null;
pressHandler: EventHandler<PointerMouseTrackerEvent> | null;
releaseHandler: EventHandler<ReleaseMouseTrackerEvent> | null;
nonPrimaryPressHandler: EventHandler<NonPrimaryPressMouseTrackerEvent> | null;
nonPrimaryReleaseHandler: EventHandler<NonPrimaryPressMouseTrackerEvent> | null;
moveHandler: EventHandler<PointerMouseTrackerEvent> | null;
clickHandler: EventHandler<ClickMouseTrackerEvent> | null;
dblClickHandler: EventHandler<DblClickMouseTrackerEvent> | null;
dragHandler: EventHandler<DragMouseTrackerEvent> | null;
dragEndHandler: EventHandler<DragEndMouseTrackerEvent> | null;
pinchHandler: EventHandler<PinchMouseTrackerEvent> | null;
stopHandler: EventHandler<StopMouseTrackerEvent> | null;
}
interface GesturePoint {
id: number;
type: string;
captured: boolean;
isPrimary: boolean;
insideElementPressed: boolean;
insideElement: boolean;
speed: number;
direction: number;
contactPos: Point;
contactTime: number;
lastPos: Point;
lastTime: number;
currentPos: Point;
currentTime: number;
}
class GesturePointList {
buttons: number;
captureCount: number;
clicks: number;
contacts: number;
type: string;
constructor(type: string);
add(gesturePoint: GesturePoint): number;
addContact(): void;
asArray(): GesturePoint[];
getById(id: number): GesturePoint | null;
getByIndex(index: number): GesturePoint | null;
getLength(): number;
getPrimary(): GesturePoint | null;
removeById(id: number): number;
removeContact(): void;
}
class Navigator extends Viewer {
setDisplayTransform(rule: string): Navigator;
setFlip(state: boolean): Navigator;
setHeight(height: number | string): void;
setWidth(width: number | string): void;
update(viewport?: Viewport): void;
updateSize(): void;
}
interface OsmTileSourceOptions extends TileSourceOptions {
width?: number;
height?: number;
tileSize?: number;
tileOverlap?: number;
tilesUrl?: string;
}
class OsmTileSource extends TileSource {
constructor(
width: number | OsmTileSourceOptions,
height?: number,
tileSize?: number,
tileOverlap?: number,
tilesUrl?: string,
);
}
type OnDrawCallback = (
position: Point,
size: Point,
element: Element,
) => void;
interface OverlayOptions {
element: Element;
location: Point | Rect;
placement?: Placement;
onDraw?: OnDrawCallback;
checkResize?: boolean;
width?: number;
height?: number;
rotationMode?: OverlayRotationMode;
}
class Overlay {
bounds: Rect;
element: Element;
height: number | null;
location: Point;
placement: Placement;
position: Point;
scales: boolean;
width: number | null;
constructor(options: OverlayOptions);
constructor(
element: Element,
location: Point | Rect,
placement?: Placement,
);
adjust(position: Point, size: Point): void;
destroy(): void;
drawHTML(container: Element, viewport: Viewport): void;
getBounds(viewport: Viewport): Rect;
update(location: Point | Rect | object, placement?: Placement): void;
}
class Point {
x: number;
y: number;
constructor(x?: number, y?: number);
apply(func: (v: number) => number): Point;
clone(): Point;
distanceTo(point: Point): number;
divide(factor: number): Point;
equals(point: Point): boolean;
minus(point: Point): Point;
negate(): Point;
plus(point: Point): Point;
rotate(degrees: number, pivot?: Point): Point;
squaredDistanceTo(point: Point): number;
times(factor: number): Point;
toString(): string;
}
class PriorityQueue<K = any, V = any> {
constructor(optHeap?: PriorityQueue<K, V>);
insert(key: K, value: V): void;
insertNode(node: PriorityQueue.Node<K, V>): void;
insertAll(heap: PriorityQueue<K, V>): void;
remove(): PriorityQueue.Node<K, V> | undefined;
peek(): V | undefined;
peekKey(): K | undefined;
decreaseKey(node: PriorityQueue.Node<K, V>, key: K): void;
getValues(): V[];
getKeys(): K[];
containsValue(val: V): boolean;
containsKey(key: K): boolean;
clone(): PriorityQueue<K, V>;
getCount(): number;
isEmpty(): boolean;
clear(): void;
}
namespace PriorityQueue {
class Node<K = any, V = any> {
constructor(key: K, value: V);
key: K;
value: V;
index?: number;
clone(): PriorityQueue.Node<K, V>;
}
}
class Rect {
x: number;
y: number;
width: number;
height: number;
degrees: number;
constructor(
x?: number,
y?: number,
width?: number,
height?: number,
degrees?: number,
);
static fromSummits(
topLeft: Point,
topRight: Point,
bottomLeft: Point,
): Rect;
clone(): Rect;
containsPoint(point: Point, epsilon?: number): boolean;
equals(rectangle: Rect): boolean;
getAspectRatio(): number;
getBottomLeft(): Point;
getBottomRight(): Point;
getBoundingBox(): Rect;
getCenter(): Point;
getIntegerBoundingBox(): Rect;
getSize(): Point;
getTopLeft(): Point;
getTopRight(): Point;
intersection(rect: Rect): Rect | null;
rotate(degrees: number, pivot?: Point): Rect;
times(factor: number): Rect;
toString(): string;
translate(delta: Point): Rect;
union(rect: Rect): Rect;
}
class ReferenceStrip {
element: HTMLElement;
viewer: Viewer;
constructor(options: object);
destroy(): void;
setFocus(page: number): void;
update(): boolean;
}
interface TSpringObj {
value: number;
time: number;
}
class Spring {
animationTime: number;
current: TSpringObj;
springStiffness: number;
start: TSpringObj;
target: TSpringObj;
constructor(options: {
springStiffness: number;
animationTime: number;
initial?: number;
exponential?: boolean;
});
isAtTargetValue(): boolean;
resetTo(target: number): void;
setExponential(value: boolean): void;
shiftBy(delta: number): void;
springTo(target: number): void;
update(): boolean;
}
class Tile {
ajaxHeaders: object;
beingDrawn: boolean;
blendStart: number | null;
bounds: Rect;
cacheImageRecord: CacheRecord;
cacheKey: string;
context2D: CanvasRenderingContext2D;
element: HTMLElement;
exists: boolean;
flipped: boolean;
hasTransparency: boolean;
image: object;
imgElement: Element;
isBottomMost: boolean;
isRightMost: boolean;
lastTouchTime: number;
level: number;
loaded: boolean;
loading: boolean;
loadWithAjax: boolean;
opacity: number | null;
originalCacheKey: string;
position: Point | null;
positionedBounds: Rect;
postData: string;
processing: boolean | number;
size: Point | null;
sourceBounds: Rect;
style: string;
tiledImage: TiledImage | null;
url: string;
visibility: number | null;
x: number;
y: number;
constructor(
level: number,
x: number,
y: number,
bounds: Rect,
exists: boolean,
url: string | (() => string),
context2D?: CanvasRenderingContext2D,
loadWithAjax?: boolean,
ajaxHeaders?: object,
sourceBounds?: Rect,
postData?: string,
cacheKey?: string,
);
equals(tile: Tile): boolean;
getCache(key?: string): CacheRecord;
getCacheSize(): number;
getTranslationForEdgeSmoothing(
scale: number | undefined,
canvasSize: Point,
sketchCanvasSize: Point,
): Point;
getUrl(): string;
toString(): string;
unload(erase?: boolean): void;
/** @deprecated */
getCanvasContext(): CanvasRenderingContext2D | undefined;
/** @deprecated */
getImage(): object;
/** @deprecated */
getScaleForEdgeSmoothing(): number;
}
class TileCache {
constructor(options: { maxImageCacheCount?: number });
cacheTile(options: {
tile: Tile;
image: HTMLImageElement; // TODO: check type
tiledImage: TiledImage;
cutoff?: number;
}): void;
clear(withZombies?: boolean): void;
clearDrawerInternalCache(drawer: DrawerBase): void;
clearTilesFor(tiledImage: TiledImage): void;
getCacheRecord(cacheKey: string): CacheRecord | undefined;
getLoadedTilesFor(tiledImage: TiledImage | null): Tile[];
numCachesLoaded(): number;
numTilesLoaded(): number;
safeUnloadCache(cache: CacheRecord): void;
unloadTile(tile: Tile, destroy?: boolean): void;
}
interface TiledImageInitOptions {
source: TileSource;
viewer: Viewer;
tileCache: TileCache;
drawer: DrawerBase;
imageLoader: ImageLoader;
x?: number;
y?: number;
width?: number;
height?: number;
fitBounds?: Rect;
fitBoundsPlacement?: Placement;
clip?: Rect;
springStiffness?: number;
animationTime?: boolean;
minZoomImageRatio?: number;
wrapHorizontal?: boolean;
wrapVertical?: boolean;
immediateRender?: boolean;
blendTime?: number;
alwaysBlend?: boolean;
minPixelRatio?: number;
smoothTileEdgesMinZoom?: number;
iOSDevice?: boolean;
opacity?: number;
preload?: boolean;
compositeOperation?: string;
debugMode?: boolean;
placeholderFillStyle?: string | CanvasGradient | CanvasPattern;
crossOriginPolicy?: string | boolean;
ajaxWithCredentials?: boolean;
loadTilesWithAjax?: boolean;
ajaxHeaders?: object;
}
interface DrawTileInfo {
currentTime: number;
level: number;
levelOpacity: number;
tile: Tile;
}
type Issue = "webgl";
class TiledImage extends EventSource<TiledImageEventMap> {
source: TileSource;
viewer: Viewer;
readonly lastDrawn: DrawTileInfo[];
constructor(options: TiledImageInitOptions);
allowZombieCache(allow: boolean): void;
destroy(): void;
fitBounds(
bounds: Rect,
anchor?: Placement,
immediately?: boolean,
): void;
getBounds(current?: boolean): Rect;
getBoundsNoRotate(current?: boolean): Rect;
getClip(): Rect | null;
getClippedBounds(current?: boolean): Rect;
getCompositeOperation(): string;
getContentSize(): Point;
getDrawArea(): Rect | false;
getDrawer(): DrawerBase;
getFlip(): boolean;
getFullyLoaded(): boolean;
getIssue(issueType: string): string | undefined;
getLoadArea(): Rect;
getOpacity(): number;
getPreload(): boolean;
getRotation(current?: boolean): number;
getSizeInWindowCoordinates(): Point;
getTileBounds(level: number, x: number, y: number): Rect;
getTilesToDraw(): DrawTileInfo[];
hasIssue(issueType: string): boolean;
imageToViewerElementCoordinates(pixel: Point): Point;
imageToViewportCoordinates(position: Point, current?: boolean): Point;
imageToViewportCoordinates(
imageX: number,
imageY: number,
current?: boolean,
): Point;
imageToViewportRectangle(
imageX: number,
imageY?: number,
pixelWidth?: number,
pixelHeight?: number,
current?: boolean,
): Rect;
imageToViewportRectangle(
position: Rect,
pixelWidth?: number,
pixelHeight?: number,
current?: boolean,
): Rect;
imageToViewportZoom(imageZoom: number): number;
imageToWindowCoordinates(pixel: Point): Point;
needsDraw(): boolean;
redraw(): void;
requestInvalidate(
restoreTiles?: boolean,
viewportOnly?: boolean,
tStamp?: number,
): Promise<any>;
reset(): void;
resetCroppingPolygons(): void;
setAjaxHeaders(ajaxHeaders: object, propagate?: boolean): void;
setClip(newClip: Rect | null): void;
setCompositeOperation(compositeOperation: string): void;
setCroppingPolygons(polygons: Point[][]): void;
setDrawn(): boolean;
setFlip(flip: boolean): void;
setHeight(height: number, immediately?: boolean): void;
setOpacity(opacity: number): void;
setPosition(position: Point, immediately?: boolean): void;
setPreload(preload: boolean): void;
setRotation(degrees: number, immediately?: boolean): void;
setWidth(width: number, immediately?: boolean): void;
update(viewportChanged: boolean): boolean;
viewerElementToImageCoordinates(pixel: Point): Point;
viewportToImageCoordinates(position: Point, current?: boolean): Point;
viewportToImageCoordinates(
viewerX: number,
viewerY: number,
current?: boolean,
): Point;
viewportToImageRectangle(position: Rect, current?: boolean): Rect;
viewportToImageRectangle(
viewportX: number,
viewportY: number,
pixelWidth?: number,
pixelHeight?: number,
current?: boolean,
): Rect;
viewportToImageZoom(viewportZoom: number): number;
whenFullyLoaded(callback: () => void): void;
windowToImageCoordinates(pixel: Point): Point;
/** @deprecated */
getWorldBounds(): Rect;
}
interface ConfigureOptions {
[key: string]: any;
}
class TileSource extends EventSource<TileSourceEventMap> {
constructor(options: TileSourceOptions | string);
aspectRatio: number;
dimensions: Point;
maxLevel: number;
m