driver.js / types /index.d.ts
kamrify's picture
Expose refresh functionality
c95a54d
raw
history blame
22.1 kB
declare module 'driver.js' {
class Driver {
/**
* Refers to the global document object
*/
private document: Document;
/**
* Refers to the global window object
*/
private window: Window;
/**
* If the driver is active or not
*/
public isActivated: boolean;
/**
* Flag for if the current move was prevented. It is used in
* onNext() or onPrevious() callbacks to stop the current transition
*/
private currentMovePrevented: boolean;
/**
* Refers to the array of steps to be presented if any
*/
private steps: Array<Driver.Step>;
/**
* Refers to step index that is currently active
*/
private currentStep: number;
/**
* Refers to the overlay for the screen
*/
private overlay: Driver.Overlay;
/**
* @param {DriverOptions} options
*/
public constructor(options?: Driver.DriverOptions);
/**
* Public getter for steps property
*/
public getSteps(): Array<Driver.Step>;
/**
* Public setter for steps property
*/
public setSteps(): void;
/**
* Does the required bindings for DOM Events
*/
private bind(): void;
/**
* Listener for the click event, to decide if
* to next/previous step, reset the overlay etc
* @param {Event} e
*/
private onClick(e: Event): void;
/**
* Refreshes the driver and resets the position for stage
* and popover on resizing the window
*/
private onResize(): void;
/**
* Refreshes and repositions the popover and the overlay
*/
private refresh(): void;
/**
* Makes it operable with keyboard
* @param {Event} e
*/
private onKeyUp(e: Event): void;
/**
* Handles the internal next event
*/
private handleNext(): void;
/**
* Handles the internal previous event
*/
private handlePrevious(): void;
/**
* Prevents the current move. Useful in `onNext` if you want to
* perform some asynchronous task and manually move to next step
*/
public preventMove(): void;
/**
* Moves to the previous step if possible
* otherwise resets the overlay
*/
public movePrevious(): void;
/**
* Moves to the next step if possible
* otherwise resets the overlay
*/
public moveNext(): void;
/**
* Prevents the current move. Useful in `onNext` if you want to
* perform some asynchronous task and manually move to next step
*/
preventMove(): void;
/**
* Checks if can be moved to next step
* @return {boolean}
*/
public hasNextStep(): boolean;
/**
* Checks if can be moved to previous step
* @return {boolean}
*/
public hasPreviousStep(): boolean;
/**
* Resets the steps and clears the overlay
*/
public reset(immediate?: boolean): void;
/**
* Checks if there is any highlighted element or not
* @return {boolean}
*/
public hasHighlightedElement(): boolean;
/**
* Gets the currently highlighted element if any
* @return {Driver.Element}
*/
public getHighlightedElement(): Driver.Element | null;
/**
* Gets the last highlighted element if any
* @return {Driver.Element}
*/
public getLastHighlightedElement(): Driver.Element | null;
/**
* Defines the steps to be used in multi-step driver
* @param {Array<Driver.Step>} steps
*/
public defineSteps(steps: Array<Driver.Step>): void;
/**
* Prepares {Driver.Element} from the given step definition
* @param {Driver.Step | string} step query selector or step definition for the step
* @param {Array<Driver.Step>} allSteps all the given steps
* @param {number} stepIndex array index for the current step
*/
private prepareElementFromStep(step: Driver.Step | string, allSteps: Array<Driver.Step>, stepIndex: number): void;
/**
* Starts presenting the set steps from the given index
* @param {number} index
*/
public start(index?: number): void;
/**
* Highlights the given element. Element can be a query selector or a step definition
* @param {string | Driver.Step} element
*/
public highlight(element: string | Driver.Step): void;
}
namespace Driver {
interface Step {
/**
* Query selector representing the DOM Element
*/
element: string | HTMLElement | Node;
/**
* Color of stage when this step is active
* @default #ffffff
*/
stageBackground?: string;
/**
* Options representing popover for this step
*/
popover?: Driver.PopoverOptions;
/**
* Is called when the next element is about to be highlighted
*/
onNext?: (element: Driver.Element) => void;
/**
* Is called when the previous element is about to be highlighted
*/
onPrevious?: (element: Driver.Element) => void;
}
class Element {
/**
* Refers to the DOM element that this class wraps
*/
private node: Node | HTMLElement;
/**
* Refers to the global Document object
*/
private document: Document;
/**
* Refers to the global window object
*/
private window: Window;
/**
* Options for this element
*/
private options: Driver.ElementOptions;
/**
* Refers to the overlay that wraps the body
*/
private overlay: Driver.Overlay;
/**
* Refers to the Popover object to be displayed against this element
*/
private popover: Driver.Popover;
/**
* Refers to the stage that will be displayed behind this element
*/
private stage: Driver.Stage;
/**
* @param {HTMLElement | Node} node
* @param {Driver.DriverOptions} options
* @param {Driver.Popover} popover
* @param {Driver.Stage} stage
* @param {Driver.Overlay} overlay
* @param {Window} window
* @param {Document} document
*/
constructor(node: HTMLElement | Node,
options: Driver.DriverOptions,
popover: Driver.Popover,
stage: Driver.Stage,
overlay: Driver.Overlay,
window: Window,
document: Document);
/**
* Checks if the give element is in view port or not
* @return {boolean}
*/
public isInView(): boolean;
/**
* Brings the current DOMElement in view
*/
public bringInView(): void;
/**
* Gets the position of element on screen
* @return {Driver.Position}
*/
public getCalculatedPosition(): Driver.Position;
/**
* Manually scrolls to current element if scrollInToView is not supported
*/
private scrollManually(): void;
/**
* Is called when the current element is deselected
* @param {boolean} hideStage
*/
private onDeselected(hideStage?: boolean): void;
/**
* Is called when element is about to be highlighted
*/
private onHighlightStarted(): void;
/**
* Is called when element has been successfully highlighted
*/
private onHighlighted(): void;
/**
* Shows the stage on the current element
*/
private showStage(): void;
/**
* Hides the popover from the current element if visible
*/
private hidePopover(): void;
/**
* Shows the popover on current element if possible
*/
private showPopover(): void;
/**
* Gets the full page size
*/
private getFullPageSize(): Driver.ElementSize;
/**
* Checks if the current element is same as passed element
* @param {Driver.Element} element
*/
private isSame(element: Driver.Element): void;
/**
* Gets the node that this element refers to
* @return {Node | HTMLElement}
*/
public getNode(): Node | HTMLElement;
/**
* Gets the size of current element
* @return {Driver.ElementSize}
*/
public getSize(): Driver.ElementSize;
/**
* Gets the popover on current element if any
* @returns {Driver.Popover}
*/
public getPopover(): Driver.Popover;
/**
* Removes the highlight classes from current element if any
*/
private removeHighlightClasses(): void;
/**
* Adds the highlight classes to current element if required
*/
private addHighlightClasses(): void;
/**
* Walks through the parents of the current element and fixes
* the stacking context
*/
private fixStackingContext(): void;
/**
* Checks if we can make the current element relative or not
* @return {boolean}
*/
private canMakeRelative(): boolean;
/**
* Get current element's CSS attribute value
* @return {string}
*/
private getStyleProperty(): string;
}
class Overlay {
/**
* Options to modify the overlay behavior
*/
private options: Driver.DriverOptions;
/**
* Refers to currently highlighted element
*/
private highlightedElement: Driver.Element | null;
/**
* Refers to element highlighted before currently highlighted element
*/
private lastHighlightedElement: Driver.Element | null;
/**
* Refers to timeout handler used to animate while resetting
*/
private hideTimer: number | null;
/**
* Refers to global object Window
*/
private window: Window;
/**
* Refers to global object Document
*/
private document: Document;
/**
* Prepares the DOM element for overlay and appends to body
*/
private attachNode(): void;
/**
* Highlights the given Element while resetting the existing one
* @param {Driver.Element} element
*/
public highlight(element: Driver.Element): void;
/**
* Shows the overlay while appending to body if it is not there already
*/
public show(): void;
/**
* Gets the highlighted element in overlay if any
* @return {Driver.Element | null}
*/
public getHighlightedElement(): Driver.Element | null;
/**
* Gets the element highlighted before current element if any
* @return {Driver.Element | null}
*/
public getLastHighlightedElement(): Driver.Element | null;
/**
* Removes the overlay and deselects the highlighted element. Does that with animation
* by default or without animation if immediate is set to false
* @param {boolean} immediate
*/
public clear(immediate?: boolean): void;
/**
* Removes the overlay node if it exists
*/
private removeNode(): void;
/**
* Refreshes the overlay i.e. sets the size according to current window size
* And moves the highlight around if necessary
*/
public refresh(): void;
}
class Popover {
private node: Node | HTMLElement;
private tipNode: Node | HTMLElement;
private titleNode: Node | HTMLElement;
private descriptionNode: Node | HTMLElement;
private footerNode: Node | HTMLElement;
private nextBtnNode: Node | HTMLElement;
private prevBtnNode: Node | HTMLElement;
private closeBtnNode: Node | HTMLElement;
private window: Window;
private document: Document;
/**
* @param {Driver.PopoverOptions} options
* @param {Window} window
* @param {Document} document
*/
constructor(options: Driver.PopoverOptions,
window: Window,
document: Document);
/**
* Prepares the DOM element for popover and appends to the body
*/
private attachNode(): void;
/**
* Hides the popover if visible
*/
public hide(): void;
/**
* Sets the initial state for popover before changing position
*/
private setInitialState(): void;
/**
* Shows the popover at the given position
* @param {Driver.Position} position
*/
public show(position: Driver.Position): void;
/**
* Renders the buttons in the footer of the popover
*/
private renderFooter(): void;
/**
* Positions the popover to the left of the given element position
* @param {Driver.Position} position
*/
private positionOnLeft(position: Driver.Position): void;
/**
* Positions the popover to the left-center of the given element position
* @param {Driver.Position} position
*/
private positionOnLeftCenter(position: Driver.Position): void;
/**
* Positions the popover to the left-bottom of the given element position
* @param {Driver.Position} position
*/
private positionOnLeftBottom(position: Driver.Position): void;
/**
* Positions the popover to the right of the given element position
* @param {Driver.Position} position
*/
private positionOnRight(position: Driver.Position): void;
/**
* Positions the popover to the right-center of the given element position
* @param {Driver.Position} position
*/
private positionOnRightCenter(position: Driver.Position): void;
/**
* Positions the popover to the right-bottom of the given element position
* @param {Driver.Position} position
*/
private positionOnRightBottom(position: Driver.Position): void;
/**
* Positions the popover to the top of the given element position
* @param {Driver.Position} position
*/
private positionOnTop(position: Driver.Position): void;
/**
* Positions the popover to the top-center of the given element position
* @param {Driver.Position} position
*/
private positionOnTopCenter(position: Driver.Position): void;
/**
* Positions the popover to the top-right of the given element position
* @param {Driver.Position} position
*/
private positionOnTopRight(position: Driver.Position): void;
/**
* Positions the popover to the bottom of the given element position
* @param {Driver.Position} position
*/
private positionOnBottom(position: Driver.Position): void;
/**
* Positions the popover to the bottom-center of the given element position
* @param {Driver.Position} position
*/
private positionOnBottomCenter(position: Driver.Position): void;
/**
* Positions the popover to the bottom-right of the given element position
* @param {Driver.Position} position
*/
private positionOnBottomRight(position: Driver.Position): void;
/**
* Positions the popover to the middle center of the given element position
* @param {Driver.Position} position
*/
private positionOnMidCenter(position: Driver.Position): void;
/**
* Positions the popover automatically around the element position
* @param {Driver.Position} position
*/
private autoPosition(position: Driver.Position): void;
/**
* Gets the title node for popover
* @returns {Node | HTMLElement}
*/
public getTitleNode(): Node | HTMLElement;
/**
* Gets the description node for popover
* @returns {Node | HTMLElement}
*/
public getDescriptionNode(): Node | HTMLElement;
}
class Stage extends Element {
/**
* @param {Driver.StageOptions} options
* @param {Window} window
* @param {Document} document
*/
constructor(options: Driver.StageOptions,
window: Window,
document: Document);
/**
* Prepares the node and appends to body if not there already
*/
private attachNode(): void;
/**
* Hides the stage by removing the node
*/
public hide(): void;
/**
* Sets the default properties on the node
*/
private setInitialStyle(): void;
/**
* Shows the stage at provided position
* @param {Driver.Position} position
*/
public show(position: Driver.Position): void;
}
class Position {
constructor({
left,
top,
bottom,
right,
}: {
left: number,
top: number,
bottom: number,
right: number
});
/**
* Checks if the given position is valid and can be highlighted
* @return {boolean}
*/
canHighlight(): boolean;
/**
* Checks if the given position is same as the passed position
* @param {Driver.Position} position
*/
equals(position: Driver.Position): void;
}
interface ScreenCoordinates {
x: number;
y: number;
}
interface ElementSize {
width: number;
height: number;
}
interface PopoverOptions {
/**
* Title for the popover
*/
title?: string;
/**
* Description for the popover
*/
description: string;
/**
* Whether to show control buttons or not
* @default true
*/
showButtons?: boolean;
/**
* Text on the button in the final step
* @default 'Done'
*/
doneBtnText?: string;
/**
* Text on the close button
* @default 'Close'
*/
closeBtnText?: string;
/**
* Text on the next button
* @default 'Next'
*/
nextBtnText?: string;
/**
* Text on the previous button
* @default 'Previous'
*/
prevBtnText?: string;
/**
* Total number of elements with popovers
* @default 0
*/
totalCount?: number;
/**
* Additional offset of the popover
* @default 0
*/
offset?: number;
/**
* Counter for the current popover
* @default 0
*/
currentIndex?: number;
/**
* If the current popover is the first one
* @default true
*/
isFirst?: boolean;
/**
* If the current popover is the last one
* @default true
*/
isLast?: boolean;
/**
* Position for the popover on element
* @default auto
*/
position?: string;
/**
* className for the popover on element
*/
className?: string;
}
interface DriverOptions {
/**
* Whether to animate while transitioning from one highlighted
* element to another
* @default true
*/
animate?: boolean;
/**
* Opacity for the overlay
* @default 0.75
*/
opacity?: number,
/**
* Distance of elements corner from the edges of the overlay
* @default 10
*/
padding?: number,
/**
* Options to be passed to scrollIntoView if supported by browser
* @default { behavior: 'instant', block: 'center' }
*/
scrollIntoViewOptions?: ScrollIntoViewOptions,
/**
* Clicking outside the highlighted element should reset driver or not
* @default true
*/
allowClose?: boolean,
/**
* Whether to allow controlling steps through keyboard
* @default true
*/
keyboardControl?: boolean,
/**
* Clicking outside the highlighted element should move next
* @default false
*/
overlayClickNext?: boolean,
/**
* Background color for the stage behind the highlighted element
* @default '#ffffff'
*/
stageBackground?: string,
/**
* Whether to show control buttons or not
* @default true
*/
showButtons?: boolean;
/**
* Text on the button in the final step
* @default 'Done'
*/
doneBtnText?: string;
/**
* Text on the close button
* @default 'Close'
*/
closeBtnText?: string;
/**
* Text on the next button
* @default 'Next'
*/
nextBtnText?: string;
/**
* Text on the previous button
* @default 'Previous'
*/
prevBtnText?: string;
/**
* className for the driver popovers
*/
className?: string;
/**
* Callback to be called when element is about to be highlighted
* @param {Driver.Element} element
* @returns any
*/
onHighlightStarted?: (element: Driver.Element) => void;
/**
* Callback to be called when element has been highlighted
* @param {Driver.Element} element
* @returns any
*/
onHighlighted?: (element: Driver.Element) => void,
/**
* Callback to be called when element has been deselected
* @param {Driver.Element} element
* @returns any
*/
onDeselected?: (element: Driver.Element) => void,
/**
* Is called when the overlay is about to reset
*/
onReset?: (element: Driver.Element) => void,
/**
* Is called when the next element is about to be highlighted
*/
onNext?: (element: Driver.Element) => void;
/**
* Is called when the previous element is about to be highlighted
*/
onPrevious?: (element: Driver.Element) => void;
}
interface ElementOptions extends Driver.DriverOptions {
}
interface StageOptions extends ElementOptions {
}
}
export = Driver;
}