{"version":3,"file":"intro.js","sources":["../src/util/stamp.ts","../src/util/forEach.ts","../src/core/DOMEvent.ts","../src/util/addClass.ts","../src/util/getPropValue.ts","../src/util/setShowElement.ts","../src/util/scrollParentToElement.ts","../src/util/getScrollParent.ts","../src/util/getWindowSize.ts","../src/util/scrollTo.ts","../src/util/elementInViewport.ts","../src/util/setAnchorAsButton.ts","../src/util/isFixed.ts","../src/util/getOffset.ts","../src/util/removeClass.ts","../src/util/setStyle.ts","../src/core/setHelperLayerPosition.ts","../src/util/checkRight.ts","../src/util/checkLeft.ts","../src/util/removeEntry.ts","../src/core/placeTooltip.ts","../src/core/removeShowElement.ts","../src/util/createElement.ts","../src/util/appendChild.ts","../src/core/showElement.ts","../src/core/steps.ts","../src/core/onKeyDown.ts","../src/util/cloneObject.ts","../src/util/debounce.ts","../src/core/hint.ts","../src/core/fetchIntroSteps.ts","../src/core/refresh.ts","../src/core/onResize.ts","../src/util/removeChild.ts","../src/core/exitIntro.ts","../src/core/addOverlayLayer.ts","../src/core/introForElement.ts","../src/util/cookie.ts","../src/core/dontShowAgain.ts","../src/index.ts","../src/util/mergeOptions.ts"],"sourcesContent":["/**\r\n * Mark any object with an incrementing number\r\n * used for keeping track of objects\r\n *\r\n * @param Object obj Any object or DOM Element\r\n * @param String key\r\n * @return Object\r\n */\r\nconst stamp = (() => {\r\n const keys = {};\r\n return function stamp(obj, key = \"introjs-stamp\") {\r\n // each group increments from 0\r\n keys[key] = keys[key] || 0;\r\n\r\n // stamp only once per object\r\n if (obj[key] === undefined) {\r\n // increment key for each new object\r\n obj[key] = keys[key]++;\r\n }\r\n\r\n return obj[key];\r\n };\r\n})();\r\n\r\nexport default stamp;\r\n","/**\r\n * Iterates arrays\r\n */\r\nexport default function forEach(\r\n arr: any[],\r\n forEachFnc: Function,\r\n completeFnc?: Function\r\n): void {\r\n // in case arr is an empty query selector node list\r\n if (arr) {\r\n for (let i = 0, len = arr.length; i < len; i++) {\r\n forEachFnc(arr[i], i);\r\n }\r\n }\r\n\r\n if (typeof completeFnc === \"function\") {\r\n completeFnc();\r\n }\r\n}\r\n","import stamp from \"../util/stamp\";\r\n\r\n/**\r\n * DOMEvent Handles all DOM events\r\n *\r\n * methods:\r\n *\r\n * on - add event handler\r\n * off - remove event\r\n */\r\n\r\nconst DOMEvent = (() => {\r\n function DOMEvent() {\r\n const events_key = \"introjs_event\";\r\n\r\n /**\r\n * Gets a unique ID for an event listener\r\n */\r\n this._id = (type: string, listener: Function, context: Object): string =>\r\n type + stamp(listener) + (context ? `_${stamp(context)}` : \"\");\r\n\r\n /**\r\n * Adds event listener\r\n */\r\n this.on = function (\r\n obj: any,\r\n type: string,\r\n listener: Function,\r\n context: Object,\r\n useCapture: boolean\r\n ) {\r\n const id = this._id.apply(this, [type, listener, context]);\r\n const handler = (e) => listener.call(context || obj, e || window.event);\r\n\r\n if (\"addEventListener\" in obj) {\r\n obj.addEventListener(type, handler, useCapture);\r\n } else if (\"attachEvent\" in obj) {\r\n obj.attachEvent(`on${type}`, handler);\r\n }\r\n\r\n obj[events_key] = obj[events_key] || {};\r\n obj[events_key][id] = handler;\r\n };\r\n\r\n /**\r\n * Removes event listener\r\n */\r\n this.off = function (\r\n obj: any,\r\n type: string,\r\n listener: Function,\r\n context: Object,\r\n useCapture: boolean\r\n ) {\r\n const id = this._id.apply(this, [type, listener, context]);\r\n const handler = obj[events_key] && obj[events_key][id];\r\n\r\n if (!handler) {\r\n return;\r\n }\r\n\r\n if (\"removeEventListener\" in obj) {\r\n obj.removeEventListener(type, handler, useCapture);\r\n } else if (\"detachEvent\" in obj) {\r\n obj.detachEvent(`on${type}`, handler);\r\n }\r\n\r\n obj[events_key][id] = null;\r\n };\r\n }\r\n\r\n return new DOMEvent();\r\n})();\r\n\r\nexport default DOMEvent;\r\n","import forEach from \"./forEach\";\r\n\r\n/**\r\n * Append a class to an element\r\n * @api private\r\n */\r\nexport default function addClass(element: HTMLElement, className: string) {\r\n if (element instanceof SVGElement) {\r\n // svg\r\n const pre = element.getAttribute(\"class\") || \"\";\r\n\r\n if (!pre.match(className)) {\r\n // check if element doesn't already have className\r\n element.setAttribute(\"class\", `${pre} ${className}`);\r\n }\r\n } else {\r\n if (element.classList !== undefined) {\r\n // check for modern classList property\r\n const classes = className.split(\" \");\r\n forEach(classes, (cls) => {\r\n element.classList.add(cls);\r\n });\r\n } else if (!element.className.match(className)) {\r\n // check if element doesn't already have className\r\n element.className += ` ${className}`;\r\n }\r\n }\r\n}\r\n","/**\r\n * Get an element CSS property on the page\r\n * Thanks to JavaScript Kit: http://www.javascriptkit.com/dhtmltutors/dhtmlcascade4.shtml\r\n *\r\n * @api private\r\n * @returns string property value\r\n */\r\nexport default function getPropValue(\r\n element: HTMLElement,\r\n propName: string\r\n): string {\r\n let propValue = \"\";\r\n if (\"currentStyle\" in element) {\r\n //IE\r\n propValue = element.currentStyle[propName];\r\n } else if (document.defaultView && document.defaultView.getComputedStyle) {\r\n //Others\r\n propValue = document.defaultView\r\n .getComputedStyle(element, null)\r\n .getPropertyValue(propName);\r\n }\r\n\r\n //Prevent exception in IE\r\n if (propValue && propValue.toLowerCase) {\r\n return propValue.toLowerCase();\r\n } else {\r\n return propValue;\r\n }\r\n}\r\n","import addClass from \"./addClass\";\r\nimport getPropValue from \"./getPropValue\";\r\n\r\n/**\r\n * To set the show element\r\n * This function set a relative (in most cases) position and changes the z-index\r\n *\r\n * @api private\r\n */\r\nexport default function setShowElement(targetElement: HTMLElement) {\r\n addClass(targetElement, \"introjs-showElement\");\r\n\r\n const currentElementPosition = getPropValue(targetElement, \"position\");\r\n if (\r\n currentElementPosition !== \"absolute\" &&\r\n currentElementPosition !== \"relative\" &&\r\n currentElementPosition !== \"sticky\" &&\r\n currentElementPosition !== \"fixed\"\r\n ) {\r\n //change to new intro item\r\n addClass(targetElement, \"introjs-relativePosition\");\r\n }\r\n}\r\n","import getScrollParent from \"./getScrollParent\";\r\n\r\n/**\r\n * scroll a scrollable element to a child element\r\n */\r\nexport default function scrollParentToElement(targetElement: HTMLElement) {\r\n if (!this._options.scrollToElement) return;\r\n\r\n const parent = getScrollParent(targetElement);\r\n const scrollEl = this._introItems[this._currentStep].scrollElRef || this._options.scrollElRef || parent;\r\n\r\n if (scrollEl === document.body){\r\n return;\r\n }\r\n\r\n parent.scrollTop = targetElement.offsetTop - parent.offsetTop;\r\n}\r\n","/**\r\n * Find the nearest scrollable parent\r\n * copied from https://stackoverflow.com/questions/35939886/find-first-scrollable-parent\r\n */\r\nexport default function getScrollParent(element: HTMLElement): HTMLElement {\r\n let style = window.getComputedStyle(element);\r\n const excludeStaticParent = style.position === \"absolute\";\r\n const overflowRegex = /(auto|scroll)/;\r\n\r\n if (style.position === \"fixed\") return document.body;\r\n\r\n for (let parent = element; (parent = parent.parentElement); ) {\r\n style = window.getComputedStyle(parent);\r\n if (excludeStaticParent && style.position === \"static\") {\r\n continue;\r\n }\r\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX))\r\n return parent;\r\n }\r\n\r\n return document.body;\r\n}\r\n","/**\r\n * Provides a cross-browser way to get the screen dimensions\r\n * via: http://stackoverflow.com/questions/5864467/internet-explorer-innerheight\r\n *\r\n * @api private\r\n */\r\nexport default function getWinSize(): { width: number; height: number } {\r\n if (window.innerWidth !== undefined) {\r\n return { width: window.innerWidth, height: window.innerHeight };\r\n } else {\r\n const D = document.documentElement;\r\n return { width: D.clientWidth, height: D.clientHeight };\r\n }\r\n}\r\n","import getWindowSize from \"./getWindowSize\";\r\nimport elementInViewport from \"./elementInViewport\";\r\n\r\n/**\r\n * To change the scroll of `window` after highlighting an element\r\n *\r\n * @api private\r\n */\r\nexport default function scrollTo(\r\n scrollTo: string,\r\n targetElement: HTMLElement,\r\n tooltipLayer: HTMLElement\r\n) {\r\n if (scrollTo === \"off\") return;\r\n let rect: DOMRect;\r\n\r\n if (!this._options.scrollToElement) return;\r\n\r\n if (scrollTo === \"tooltip\") {\r\n rect = tooltipLayer.getBoundingClientRect();\r\n } else {\r\n rect = targetElement.getBoundingClientRect();\r\n }\r\n\r\n if (!elementInViewport(targetElement)) {\r\n const winHeight = getWindowSize().height;\r\n const top = rect.bottom - (rect.bottom - rect.top);\r\n\r\n // TODO (afshinm): do we need scroll padding now?\r\n // I have changed the scroll option and now it scrolls the window to\r\n // the center of the target element or tooltip.\r\n const scrollEl = this._introItems[this._currentStep].scrollElRef || this._options.scrollElRef || window;\r\n\r\n if (top < 0 || targetElement.clientHeight > winHeight) {\r\n scrollEl.scrollBy(\r\n 0,\r\n rect.top -\r\n (winHeight / 2 - rect.height / 2) -\r\n this._options.scrollPadding\r\n ); // 30px padding from edge to look nice\r\n\r\n //Scroll down\r\n } else {\r\n scrollEl.scrollBy(\r\n 0,\r\n rect.top -\r\n (winHeight / 2 - rect.height / 2) +\r\n this._options.scrollPadding\r\n ); // 30px padding from edge to look nice\r\n }\r\n }\r\n}\r\n","/**\r\n * Check to see if the element is in the viewport or not\r\n * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport\r\n *\r\n * @api private\r\n */\r\nexport default function elementInViewport(el: HTMLElement) {\r\n const rect = el.getBoundingClientRect();\r\n\r\n return (\r\n rect.top >= 0 &&\r\n rect.left >= 0 &&\r\n rect.bottom + 80 <= window.innerHeight && // add 80 to get the text right\r\n rect.right <= window.innerWidth\r\n );\r\n}\r\n","/**\r\n * Setting anchors to behave like buttons\r\n *\r\n * @api private\r\n */\r\nexport default function setAnchorAsButton(anchor: HTMLElement) {\r\n anchor.setAttribute(\"role\", \"button\");\r\n anchor.tabIndex = 0;\r\n}\r\n","import getPropValue from \"./getPropValue\";\r\n\r\n/**\r\n * Checks to see if target element (or parents) position is fixed or not\r\n *\r\n * @api private\r\n */\r\nexport default function isFixed(element: HTMLElement): boolean {\r\n const parent = element.parentElement;\r\n\r\n if (!parent || parent.nodeName === \"HTML\") {\r\n return false;\r\n }\r\n\r\n if (getPropValue(element, \"position\") === \"fixed\") {\r\n return true;\r\n }\r\n\r\n return isFixed(parent);\r\n}\r\n","import getPropValue from \"./getPropValue\";\r\nimport isFixed from \"./isFixed\";\r\n\r\n/**\r\n * Get an element position on the page relative to another element (or body)\r\n * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966\r\n *\r\n * @api private\r\n * @returns Element's position info\r\n */\r\nexport default function getOffset(\r\n element: HTMLElement,\r\n relativeEl?: HTMLElement\r\n): { width: number; height: number; left: number; top: number } {\r\n const body = document.body;\r\n const docEl = document.documentElement;\r\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\r\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\r\n\r\n relativeEl = relativeEl || body;\r\n\r\n const x = element.getBoundingClientRect();\r\n const xr = relativeEl.getBoundingClientRect();\r\n const relativeElPosition = getPropValue(relativeEl, \"position\");\r\n\r\n let obj = {\r\n width: x.width,\r\n height: x.height,\r\n };\r\n\r\n if (\r\n (relativeEl.tagName.toLowerCase() !== \"body\" &&\r\n relativeElPosition === \"relative\") ||\r\n relativeElPosition === \"sticky\"\r\n ) {\r\n // when the container of our target element is _not_ body and has either \"relative\" or \"sticky\" position, we should not\r\n // consider the scroll position but we need to include the relative x/y of the container element\r\n return Object.assign(obj, {\r\n top: x.top - xr.top,\r\n left: x.left - xr.left,\r\n });\r\n } else {\r\n if (isFixed(element)) {\r\n return Object.assign(obj, {\r\n top: x.top,\r\n left: x.left,\r\n });\r\n } else {\r\n return Object.assign(obj, {\r\n top: x.top + scrollTop,\r\n left: x.left + scrollLeft,\r\n });\r\n }\r\n }\r\n}\r\n","/**\r\n * Remove a class from an element\r\n *\r\n * @api private\r\n */\r\nexport default function removeClass(\r\n element: HTMLElement,\r\n classNameRegex: RegExp | string\r\n) {\r\n if (element instanceof SVGElement) {\r\n const pre = element.getAttribute(\"class\") || \"\";\r\n\r\n element.setAttribute(\r\n \"class\",\r\n pre.replace(classNameRegex, \"\").replace(/^\\s+|\\s+$/g, \"\")\r\n );\r\n } else {\r\n element.className = element.className\r\n .replace(classNameRegex, \"\")\r\n .replace(/^\\s+|\\s+$/g, \"\");\r\n }\r\n}\r\n","/**\r\n * Sets the style of an DOM element\r\n */\r\nexport default function setStyle(element: HTMLElement, style: string | Object) {\r\n let cssText = \"\";\r\n\r\n if (element.style.cssText) {\r\n cssText += element.style.cssText;\r\n }\r\n\r\n if (typeof style === \"string\") {\r\n cssText += style;\r\n } else {\r\n for (const rule in style) {\r\n cssText += `${rule}:${style[rule]};`;\r\n }\r\n }\r\n\r\n element.style.cssText = cssText;\r\n}\r\n","import getOffset from \"../util/getOffset\";\r\nimport isFixed from \"../util/isFixed\";\r\nimport addClass from \"../util/addClass\";\r\nimport removeClass from \"../util/removeClass\";\r\nimport setStyle from \"../util/setStyle\";\r\n\r\n/**\r\n * Update the position of the helper layer on the screen\r\n *\r\n * @api private\r\n */\r\nexport default function setHelperLayerPosition(helperLayer: HTMLElement) {\r\n if (helperLayer) {\r\n //prevent error when `this._currentStep` in undefined\r\n if (!this._introItems[this._currentStep]) return;\r\n\r\n const currentElement = this._introItems[this._currentStep];\r\n const elementPosition = getOffset(\r\n currentElement.element,\r\n this._targetElement\r\n );\r\n let widthHeightPadding = this._options.helperElementPadding;\r\n\r\n // If the target element is fixed, the tooltip should be fixed as well.\r\n // Otherwise, remove a fixed class that may be left over from the previous\r\n // step.\r\n if (isFixed(currentElement.element)) {\r\n addClass(helperLayer, \"introjs-fixedTooltip\");\r\n } else {\r\n removeClass(helperLayer, \"introjs-fixedTooltip\");\r\n }\r\n\r\n if (currentElement.position === \"floating\") {\r\n widthHeightPadding = 0;\r\n }\r\n\r\n //set new position to helper layer\r\n setStyle(helperLayer, {\r\n width: `${elementPosition.width + widthHeightPadding}px`,\r\n height: `${elementPosition.height + widthHeightPadding}px`,\r\n top: `${elementPosition.top - widthHeightPadding / 2}px`,\r\n left: `${elementPosition.left - widthHeightPadding / 2}px`,\r\n });\r\n }\r\n}\r\n","/**\r\n * Set tooltip left so it doesn't go off the right side of the window\r\n *\r\n * @return boolean true, if tooltipLayerStyleLeft is ok. false, otherwise.\r\n */\r\nexport default function checkRight(\r\n targetOffset,\r\n tooltipLayerStyleLeft,\r\n tooltipOffset,\r\n windowSize,\r\n tooltipLayer\r\n): boolean {\r\n if (\r\n targetOffset.left + tooltipLayerStyleLeft + tooltipOffset.width >\r\n windowSize.width\r\n ) {\r\n // off the right side of the window\r\n tooltipLayer.style.left = `${\r\n windowSize.width - tooltipOffset.width - targetOffset.left\r\n }px`;\r\n\r\n return false;\r\n }\r\n\r\n tooltipLayer.style.left = `${tooltipLayerStyleLeft}px`;\r\n return true;\r\n}\r\n","/**\r\n * Set tooltip right so it doesn't go off the left side of the window\r\n *\r\n * @return boolean true, if tooltipLayerStyleRight is ok. false, otherwise.\r\n */\r\nexport default function checkLeft(\r\n targetOffset,\r\n tooltipLayerStyleRight,\r\n tooltipOffset,\r\n tooltipLayer\r\n): boolean {\r\n if (\r\n targetOffset.left +\r\n targetOffset.width -\r\n tooltipLayerStyleRight -\r\n tooltipOffset.width <\r\n 0\r\n ) {\r\n // off the left side of the window\r\n tooltipLayer.style.left = `${-targetOffset.left}px`;\r\n return false;\r\n }\r\n tooltipLayer.style.right = `${tooltipLayerStyleRight}px`;\r\n return true;\r\n}\r\n","/**\r\n * Remove an entry from a string array if it's there, does nothing if it isn't there.\r\n */\r\nexport default function removeEntry>(\r\n stringArray: T,\r\n stringToRemove: K\r\n) {\r\n if (stringArray.includes(stringToRemove)) {\r\n stringArray.splice(stringArray.indexOf(stringToRemove), 1);\r\n }\r\n}\r\n","import getOffset from \"../util/getOffset\";\r\nimport getWindowSize from \"../util/getWindowSize\";\r\nimport addClass from \"../util/addClass\";\r\nimport checkRight from \"../util/checkRight\";\r\nimport checkLeft from \"../util/checkLeft\";\r\nimport removeEntry from \"../util/removeEntry\";\r\nimport { Step } from \"./steps\";\r\n\r\n/**\r\n * auto-determine alignment\r\n */\r\nfunction _determineAutoAlignment(\r\n offsetLeft: number,\r\n tooltipWidth: number,\r\n windowWidth: number,\r\n desiredAlignment: string\r\n): string {\r\n const halfTooltipWidth = tooltipWidth / 2;\r\n const winWidth = Math.min(windowWidth, window.screen.width);\r\n const possibleAlignments = [\r\n \"-left-aligned\",\r\n \"-middle-aligned\",\r\n \"-right-aligned\",\r\n ];\r\n let calculatedAlignment = \"\";\r\n\r\n // valid left must be at least a tooltipWidth\r\n // away from right side\r\n if (winWidth - offsetLeft < tooltipWidth) {\r\n removeEntry(possibleAlignments, \"-left-aligned\");\r\n }\r\n\r\n // valid middle must be at least half\r\n // width away from both sides\r\n if (\r\n offsetLeft < halfTooltipWidth ||\r\n winWidth - offsetLeft < halfTooltipWidth\r\n ) {\r\n removeEntry(possibleAlignments, \"-middle-aligned\");\r\n }\r\n\r\n // valid right must be at least a tooltipWidth\r\n // width away from left side\r\n if (offsetLeft < tooltipWidth) {\r\n removeEntry(possibleAlignments, \"-right-aligned\");\r\n }\r\n\r\n if (possibleAlignments.length) {\r\n if (possibleAlignments.includes(desiredAlignment)) {\r\n // the desired alignment is valid\r\n calculatedAlignment = desiredAlignment;\r\n } else {\r\n // pick the first valid position, in order\r\n calculatedAlignment = possibleAlignments[0];\r\n }\r\n } else {\r\n // if screen width is too small\r\n // for ANY alignment, middle is\r\n // probably the best for visibility\r\n calculatedAlignment = \"-middle-aligned\";\r\n }\r\n\r\n return calculatedAlignment;\r\n}\r\n\r\n/**\r\n * Determines the position of the tooltip based on the position precedence and availability\r\n * of screen space.\r\n */\r\nfunction _determineAutoPosition(\r\n targetElement: HTMLElement,\r\n tooltipLayer: HTMLElement,\r\n desiredTooltipPosition: string\r\n): string {\r\n // Take a clone of position precedence. These will be the available\r\n const possiblePositions = this._options.positionPrecedence.slice();\r\n\r\n const windowSize = getWindowSize();\r\n const tooltipHeight = getOffset(tooltipLayer).height + 10;\r\n const tooltipWidth = getOffset(tooltipLayer).width + 20;\r\n const targetElementRect = targetElement.getBoundingClientRect();\r\n\r\n // If we check all the possible areas, and there are no valid places for the tooltip, the element\r\n // must take up most of the screen real estate. Show the tooltip floating in the middle of the screen.\r\n let calculatedPosition = \"floating\";\r\n\r\n /*\r\n * auto determine position\r\n */\r\n\r\n // Check for space below\r\n if (targetElementRect.bottom + tooltipHeight > windowSize.height) {\r\n removeEntry(possiblePositions, \"bottom\");\r\n }\r\n\r\n // Check for space above\r\n if (targetElementRect.top - tooltipHeight < 0) {\r\n removeEntry(possiblePositions, \"top\");\r\n }\r\n\r\n // Check for space to the right\r\n if (targetElementRect.right + tooltipWidth > windowSize.width) {\r\n removeEntry(possiblePositions, \"right\");\r\n }\r\n\r\n // Check for space to the left\r\n if (targetElementRect.left - tooltipWidth < 0) {\r\n removeEntry(possiblePositions, \"left\");\r\n }\r\n\r\n // @var {String} ex: 'right-aligned'\r\n const desiredAlignment = ((pos) => {\r\n const hyphenIndex = pos.indexOf(\"-\");\r\n if (hyphenIndex !== -1) {\r\n // has alignment\r\n return pos.substr(hyphenIndex);\r\n }\r\n return \"\";\r\n })(desiredTooltipPosition || \"\");\r\n\r\n // strip alignment from position\r\n if (desiredTooltipPosition) {\r\n // ex: \"bottom-right-aligned\"\r\n // should return 'bottom'\r\n desiredTooltipPosition = desiredTooltipPosition.split(\"-\")[0];\r\n }\r\n\r\n if (possiblePositions.length) {\r\n if (possiblePositions.includes(desiredTooltipPosition)) {\r\n // If the requested position is in the list, choose that\r\n calculatedPosition = desiredTooltipPosition;\r\n } else {\r\n // Pick the first valid position, in order\r\n calculatedPosition = possiblePositions[0];\r\n }\r\n }\r\n\r\n // only top and bottom positions have optional alignments\r\n if ([\"top\", \"bottom\"].includes(calculatedPosition)) {\r\n calculatedPosition += _determineAutoAlignment(\r\n targetElementRect.left,\r\n tooltipWidth,\r\n windowSize.width,\r\n desiredAlignment\r\n );\r\n }\r\n\r\n return calculatedPosition;\r\n}\r\n\r\n/**\r\n * Render tooltip box in the page\r\n *\r\n * @api private\r\n */\r\nexport default function placeTooltip(\r\n targetElement: HTMLElement,\r\n tooltipLayer: HTMLElement,\r\n arrowLayer: HTMLElement,\r\n hintMode: boolean\r\n) {\r\n let tooltipCssClass = \"\";\r\n let currentStepObj: Step;\r\n let tooltipOffset: {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n };\r\n let targetOffset: {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n };\r\n let windowSize: { width: number; height: number };\r\n let currentTooltipPosition: string;\r\n hintMode = hintMode || false;\r\n\r\n //reset the old style\r\n tooltipLayer.style.top = null;\r\n tooltipLayer.style.right = null;\r\n tooltipLayer.style.bottom = null;\r\n tooltipLayer.style.left = null;\r\n tooltipLayer.style.marginLeft = null;\r\n tooltipLayer.style.marginTop = null;\r\n\r\n arrowLayer.style.display = \"inherit\";\r\n\r\n //prevent error when `this._currentStep` is undefined\r\n if (!this._introItems[this._currentStep]) return;\r\n\r\n //if we have a custom css class for each step\r\n currentStepObj = this._introItems[this._currentStep];\r\n if (typeof currentStepObj.tooltipClass === \"string\") {\r\n tooltipCssClass = currentStepObj.tooltipClass;\r\n } else {\r\n tooltipCssClass = this._options.tooltipClass;\r\n }\r\n\r\n tooltipLayer.className = [\"introjs-tooltip\", tooltipCssClass]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n tooltipLayer.setAttribute(\"role\", \"dialog\");\r\n\r\n currentTooltipPosition = this._introItems[this._currentStep].position;\r\n\r\n // Floating is always valid, no point in calculating\r\n if (currentTooltipPosition !== \"floating\" && this._options.autoPosition) {\r\n currentTooltipPosition = _determineAutoPosition.call(\r\n this,\r\n targetElement,\r\n tooltipLayer,\r\n currentTooltipPosition\r\n );\r\n }\r\n\r\n let tooltipLayerStyleLeft;\r\n targetOffset = getOffset(targetElement);\r\n tooltipOffset = getOffset(tooltipLayer);\r\n windowSize = getWindowSize();\r\n\r\n addClass(tooltipLayer, `introjs-${currentTooltipPosition}`);\r\n\r\n let tooltipLayerStyleLeftRight =\r\n targetOffset.width / 2 - tooltipOffset.width / 2;\r\n\r\n switch (currentTooltipPosition) {\r\n case \"top-right-aligned\":\r\n arrowLayer.className = \"introjs-arrow bottom-right\";\r\n\r\n let tooltipLayerStyleRight = 0;\r\n checkLeft(\r\n targetOffset,\r\n tooltipLayerStyleRight,\r\n tooltipOffset,\r\n tooltipLayer\r\n );\r\n tooltipLayer.style.bottom = `${targetOffset.height + 20}px`;\r\n break;\r\n\r\n case \"top-middle-aligned\":\r\n arrowLayer.className = \"introjs-arrow bottom-middle\";\r\n\r\n // a fix for middle aligned hints\r\n if (hintMode) {\r\n tooltipLayerStyleLeftRight += 5;\r\n }\r\n\r\n if (\r\n checkLeft(\r\n targetOffset,\r\n tooltipLayerStyleLeftRight,\r\n tooltipOffset,\r\n tooltipLayer\r\n )\r\n ) {\r\n tooltipLayer.style.right = null;\r\n checkRight(\r\n targetOffset,\r\n tooltipLayerStyleLeftRight,\r\n tooltipOffset,\r\n windowSize,\r\n tooltipLayer\r\n );\r\n }\r\n tooltipLayer.style.bottom = `${targetOffset.height + 20}px`;\r\n break;\r\n\r\n case \"top-left-aligned\":\r\n // top-left-aligned is the same as the default top\r\n case \"top\":\r\n arrowLayer.className = \"introjs-arrow bottom\";\r\n\r\n tooltipLayerStyleLeft = hintMode ? 0 : 15;\r\n\r\n checkRight(\r\n targetOffset,\r\n tooltipLayerStyleLeft,\r\n tooltipOffset,\r\n windowSize,\r\n tooltipLayer\r\n );\r\n tooltipLayer.style.bottom = `${targetOffset.height + 20}px`;\r\n break;\r\n case \"right\":\r\n tooltipLayer.style.left = `${targetOffset.width + 20}px`;\r\n if (targetOffset.top + tooltipOffset.height > windowSize.height) {\r\n // In this case, right would have fallen below the bottom of the screen.\r\n // Modify so that the bottom of the tooltip connects with the target\r\n arrowLayer.className = \"introjs-arrow left-bottom\";\r\n tooltipLayer.style.top = `-${\r\n tooltipOffset.height - targetOffset.height - 20\r\n }px`;\r\n } else {\r\n arrowLayer.className = \"introjs-arrow left\";\r\n }\r\n break;\r\n case \"left\":\r\n if (!hintMode && this._options.showStepNumbers === true) {\r\n tooltipLayer.style.top = \"15px\";\r\n }\r\n\r\n if (targetOffset.top + tooltipOffset.height > windowSize.height) {\r\n // In this case, left would have fallen below the bottom of the screen.\r\n // Modify so that the bottom of the tooltip connects with the target\r\n tooltipLayer.style.top = `-${\r\n tooltipOffset.height - targetOffset.height - 20\r\n }px`;\r\n arrowLayer.className = \"introjs-arrow right-bottom\";\r\n } else {\r\n arrowLayer.className = \"introjs-arrow right\";\r\n }\r\n tooltipLayer.style.right = `${targetOffset.width + 20}px`;\r\n\r\n break;\r\n case \"floating\":\r\n arrowLayer.style.display = \"none\";\r\n\r\n //we have to adjust the top and left of layer manually for intro items without element\r\n tooltipLayer.style.left = \"50%\";\r\n tooltipLayer.style.top = \"50%\";\r\n tooltipLayer.style.marginLeft = `-${tooltipOffset.width / 2}px`;\r\n tooltipLayer.style.marginTop = `-${tooltipOffset.height / 2}px`;\r\n\r\n break;\r\n case \"bottom-right-aligned\":\r\n arrowLayer.className = \"introjs-arrow top-right\";\r\n\r\n tooltipLayerStyleRight = 0;\r\n checkLeft(\r\n targetOffset,\r\n tooltipLayerStyleRight,\r\n tooltipOffset,\r\n tooltipLayer\r\n );\r\n tooltipLayer.style.top = `${targetOffset.height + 20}px`;\r\n break;\r\n\r\n case \"bottom-middle-aligned\":\r\n arrowLayer.className = \"introjs-arrow top-middle\";\r\n\r\n // a fix for middle aligned hints\r\n if (hintMode) {\r\n tooltipLayerStyleLeftRight += 5;\r\n }\r\n\r\n if (\r\n checkLeft(\r\n targetOffset,\r\n tooltipLayerStyleLeftRight,\r\n tooltipOffset,\r\n tooltipLayer\r\n )\r\n ) {\r\n tooltipLayer.style.right = null;\r\n checkRight(\r\n targetOffset,\r\n tooltipLayerStyleLeftRight,\r\n tooltipOffset,\r\n windowSize,\r\n tooltipLayer\r\n );\r\n }\r\n tooltipLayer.style.top = `${targetOffset.height + 20}px`;\r\n break;\r\n\r\n // case 'bottom-left-aligned':\r\n // Bottom-left-aligned is the same as the default bottom\r\n // case 'bottom':\r\n // Bottom going to follow the default behavior\r\n default:\r\n arrowLayer.className = \"introjs-arrow top\";\r\n\r\n tooltipLayerStyleLeft = 0;\r\n checkRight(\r\n targetOffset,\r\n tooltipLayerStyleLeft,\r\n tooltipOffset,\r\n windowSize,\r\n tooltipLayer\r\n );\r\n tooltipLayer.style.top = `${targetOffset.height + 20}px`;\r\n }\r\n}\r\n","import forEach from \"../util/forEach\";\r\nimport removeClass from \"../util/removeClass\";\r\n\r\n/**\r\n * To remove all show element(s)\r\n *\r\n * @api private\r\n */\r\nexport default function removeShowElement() {\r\n const elms = Array.from(document.querySelectorAll(\".introjs-showElement\"));\r\n\r\n forEach(elms, (elm) => {\r\n removeClass(elm, /introjs-[a-zA-Z]+/g);\r\n });\r\n}\r\n","import setStyle from \"./setStyle\";\r\n\r\n/**\r\n * Create a DOM element with various attributes\r\n */\r\nexport default function _createElement(\r\n tagname: string,\r\n attrs?: Object\r\n): HTMLElement {\r\n let element = document.createElement(tagname);\r\n\r\n attrs = attrs || {};\r\n\r\n // regex for matching attributes that need to be set with setAttribute\r\n const setAttRegex = /^(?:role|data-|aria-)/;\r\n\r\n for (const k in attrs) {\r\n let v = attrs[k];\r\n\r\n if (k === \"style\") {\r\n setStyle(element, v);\r\n } else if (k.match(setAttRegex)) {\r\n element.setAttribute(k, v);\r\n } else {\r\n element[k] = v;\r\n }\r\n }\r\n\r\n return element;\r\n}\r\n","import setStyle from \"./setStyle\";\r\n\r\n/**\r\n * Appends `element` to `parentElement`\r\n */\r\nexport default function appendChild(\r\n parentElement: HTMLElement,\r\n element: HTMLElement,\r\n animate: boolean = false\r\n) {\r\n if (animate) {\r\n const existingOpacity = element.style.opacity || \"1\";\r\n\r\n setStyle(element, {\r\n opacity: \"0\",\r\n });\r\n\r\n window.setTimeout(() => {\r\n setStyle(element, {\r\n opacity: existingOpacity,\r\n });\r\n }, 10);\r\n }\r\n\r\n parentElement.appendChild(element);\r\n}\r\n","import setShowElement from \"../util/setShowElement\";\r\nimport scrollParentToElement from \"../util/scrollParentToElement\";\r\nimport addClass from \"../util/addClass\";\r\nimport scrollTo from \"../util/scrollTo\";\r\nimport exitIntro from \"./exitIntro\";\r\nimport forEach from \"../util/forEach\";\r\nimport setAnchorAsButton from \"../util/setAnchorAsButton\";\r\nimport { Step, nextStep, previousStep } from \"./steps\";\r\nimport setHelperLayerPosition from \"./setHelperLayerPosition\";\r\nimport placeTooltip from \"./placeTooltip\";\r\nimport removeShowElement from \"./removeShowElement\";\r\nimport createElement from \"../util/createElement\";\r\nimport setStyle from \"../util/setStyle\";\r\nimport appendChild from \"../util/appendChild\";\r\n\r\n/**\r\n * Gets the current progress percentage\r\n *\r\n * @api private\r\n * @method _getProgress\r\n * @returns current progress percentage\r\n */\r\nfunction _getProgress() {\r\n // Steps are 0 indexed\r\n const currentStep = parseInt(this._currentStep + 1, 10);\r\n return (currentStep / this._introItems.length) * 100;\r\n}\r\n\r\n/**\r\n * Add disableinteraction layer and adjust the size and position of the layer\r\n *\r\n * @api private\r\n * @method _disableInteraction\r\n */\r\nfunction _disableInteraction() {\r\n let disableInteractionLayer = document.querySelector(\r\n \".introjs-disableInteraction\"\r\n );\r\n\r\n if (disableInteractionLayer === null) {\r\n disableInteractionLayer = createElement(\"div\", {\r\n className: \"introjs-disableInteraction\",\r\n });\r\n\r\n this._targetElement.appendChild(disableInteractionLayer);\r\n }\r\n\r\n setHelperLayerPosition.call(this, disableInteractionLayer);\r\n}\r\n\r\n/**\r\n * Creates the bullets layer\r\n * @private\r\n */\r\nfunction _createBullets(targetElement: Step): HTMLElement {\r\n const self = this;\r\n\r\n const bulletsLayer = createElement(\"div\", {\r\n className: \"introjs-bullets\",\r\n });\r\n\r\n if (this._options.showBullets === false) {\r\n bulletsLayer.style.display = \"none\";\r\n }\r\n\r\n const ulContainer = createElement(\"ul\");\r\n ulContainer.setAttribute(\"role\", \"tablist\");\r\n\r\n const anchorClick = function () {\r\n self.goToStep(this.getAttribute(\"data-step-number\"));\r\n };\r\n\r\n forEach(this._introItems, ({ step }, i) => {\r\n const innerLi = createElement(\"li\");\r\n const anchorLink = createElement(\"a\");\r\n\r\n innerLi.setAttribute(\"role\", \"presentation\");\r\n anchorLink.setAttribute(\"role\", \"tab\");\r\n\r\n anchorLink.onclick = anchorClick;\r\n\r\n if (i === targetElement.step - 1) {\r\n anchorLink.className = \"active\";\r\n }\r\n\r\n setAnchorAsButton(anchorLink);\r\n anchorLink.innerHTML = \" \";\r\n anchorLink.setAttribute(\"data-step-number\", step);\r\n\r\n innerLi.appendChild(anchorLink);\r\n ulContainer.appendChild(innerLi);\r\n });\r\n\r\n bulletsLayer.appendChild(ulContainer);\r\n\r\n return bulletsLayer;\r\n}\r\n\r\n/**\r\n * Deletes and recreates the bullets layer\r\n * @private\r\n */\r\nexport function _recreateBullets(targetElement: Step) {\r\n if (this._options.showBullets) {\r\n const existing = document.querySelector(\".introjs-bullets\");\r\n\r\n if (existing) {\r\n existing.parentNode.replaceChild(\r\n _createBullets.call(this, targetElement),\r\n existing\r\n );\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Updates the bullets\r\n */\r\nfunction _updateBullets(oldReferenceLayer, targetElement) {\r\n if (this._options.showBullets) {\r\n oldReferenceLayer.querySelector(\r\n \".introjs-bullets li > a.active\"\r\n ).className = \"\";\r\n oldReferenceLayer.querySelector(\r\n `.introjs-bullets li > a[data-step-number=\"${targetElement.step}\"]`\r\n ).className = \"active\";\r\n }\r\n}\r\n\r\n/**\r\n * Creates the progress-bar layer and elements\r\n * @returns {*}\r\n * @private\r\n */\r\nfunction _createProgressBar() {\r\n const progressLayer = createElement(\"div\");\r\n\r\n progressLayer.className = \"introjs-progress\";\r\n\r\n if (this._options.showProgress === false) {\r\n progressLayer.style.display = \"none\";\r\n }\r\n\r\n const progressBar = createElement(\"div\", {\r\n className: \"introjs-progressbar\",\r\n });\r\n\r\n if (this._options.progressBarAdditionalClass) {\r\n progressBar.className += \" \" + this._options.progressBarAdditionalClass;\r\n }\r\n\r\n progressBar.setAttribute(\"role\", \"progress\");\r\n progressBar.setAttribute(\"aria-valuemin\", \"0\");\r\n progressBar.setAttribute(\"aria-valuemax\", \"100\");\r\n progressBar.setAttribute(\"aria-valuenow\", _getProgress.call(this));\r\n progressBar.style.cssText = `width:${_getProgress.call(this)}%;`;\r\n\r\n progressLayer.appendChild(progressBar);\r\n\r\n return progressLayer;\r\n}\r\n\r\n/**\r\n * Updates an existing progress bar variables\r\n * @param oldReferenceLayer\r\n * @private\r\n */\r\nexport function _updateProgressBar(oldReferenceLayer) {\r\n oldReferenceLayer.querySelector(\r\n \".introjs-progress .introjs-progressbar\"\r\n ).style.cssText = `width:${_getProgress.call(this)}%;`;\r\n oldReferenceLayer\r\n .querySelector(\".introjs-progress .introjs-progressbar\")\r\n .setAttribute(\"aria-valuenow\", _getProgress.call(this));\r\n}\r\n\r\n/**\r\n * Show an element on the page\r\n *\r\n * @api private\r\n */\r\nexport default async function _showElement(targetElement: Step) {\r\n if (typeof this._introChangeCallback !== \"undefined\") {\r\n await this._introChangeCallback.call(this, targetElement.element);\r\n }\r\n\r\n const self = this;\r\n const oldHelperLayer = document.querySelector(\".introjs-helperLayer\");\r\n const oldReferenceLayer = document.querySelector(\r\n \".introjs-tooltipReferenceLayer\"\r\n );\r\n let highlightClass = \"introjs-helperLayer\";\r\n let nextTooltipButton;\r\n let prevTooltipButton;\r\n let skipTooltipButton;\r\n\r\n //check for a current step highlight class\r\n if (typeof targetElement.highlightClass === \"string\") {\r\n highlightClass += ` ${targetElement.highlightClass}`;\r\n }\r\n //check for options highlight class\r\n if (typeof this._options.highlightClass === \"string\") {\r\n highlightClass += ` ${this._options.highlightClass}`;\r\n }\r\n\r\n if (oldHelperLayer !== null && oldReferenceLayer !== null) {\r\n const oldHelperNumberLayer = oldReferenceLayer.querySelector(\r\n \".introjs-helperNumberLayer\"\r\n );\r\n const oldtooltipLayer = oldReferenceLayer.querySelector(\r\n \".introjs-tooltiptext\"\r\n );\r\n const oldTooltipTitleLayer = oldReferenceLayer.querySelector(\r\n \".introjs-tooltip-title\"\r\n );\r\n const oldArrowLayer = oldReferenceLayer.querySelector(\".introjs-arrow\");\r\n const oldtooltipContainer =\r\n oldReferenceLayer.querySelector(\".introjs-tooltip\");\r\n\r\n skipTooltipButton = oldReferenceLayer.querySelector(\r\n \".introjs-skipbutton\"\r\n );\r\n prevTooltipButton = oldReferenceLayer.querySelector(\r\n \".introjs-prevbutton\"\r\n );\r\n nextTooltipButton = oldReferenceLayer.querySelector(\r\n \".introjs-nextbutton\"\r\n );\r\n\r\n //update or reset the helper highlight class\r\n oldHelperLayer.className = highlightClass;\r\n //hide the tooltip\r\n oldtooltipContainer.style.opacity = \"0\";\r\n oldtooltipContainer.style.display = \"none\";\r\n\r\n // if the target element is within a scrollable element\r\n scrollParentToElement.call(self, targetElement.element);\r\n\r\n scrollTo.call(\r\n self,\r\n targetElement.scrollTo,\r\n targetElement.element,\r\n oldtooltipLayer\r\n );\r\n \r\n // set new position to helper layer\r\n setHelperLayerPosition.call(self, oldHelperLayer);\r\n setHelperLayerPosition.call(self, oldReferenceLayer);\r\n\r\n //remove old classes if the element still exist\r\n removeShowElement();\r\n\r\n //we should wait until the CSS3 transition is competed (it's 0.3 sec) to prevent incorrect `height` and `width` calculation\r\n if (self._lastShowElementTimer) {\r\n window.clearTimeout(self._lastShowElementTimer);\r\n }\r\n\r\n self._lastShowElementTimer = window.setTimeout(() => {\r\n // set current step to the label\r\n if (oldHelperNumberLayer !== null) {\r\n oldHelperNumberLayer.innerHTML = `${targetElement.step} ${this._options.stepNumbersOfLabel} ${this._introItems.length}`;\r\n }\r\n\r\n // set current tooltip text\r\n oldtooltipLayer.innerHTML = targetElement.intro;\r\n\r\n // set current tooltip title\r\n oldTooltipTitleLayer.innerHTML = targetElement.title;\r\n\r\n //set the tooltip position\r\n oldtooltipContainer.style.display = \"block\";\r\n // change the scroll of the window, if needed\r\n scrollTo.call(\r\n self,\r\n targetElement.scrollTo,\r\n targetElement.element,\r\n oldtooltipLayer\r\n );\r\n\r\n placeTooltip.call(\r\n self,\r\n targetElement.element,\r\n oldtooltipContainer,\r\n oldArrowLayer\r\n );\r\n\r\n //change active bullet\r\n _updateBullets.call(self, oldReferenceLayer, targetElement);\r\n\r\n _updateProgressBar.call(self, oldReferenceLayer);\r\n\r\n //show the tooltip\r\n oldtooltipContainer.style.opacity = \"1\";\r\n\r\n //reset button focus\r\n if (\r\n typeof nextTooltipButton !== \"undefined\" &&\r\n nextTooltipButton !== null &&\r\n /introjs-donebutton/gi.test(nextTooltipButton.className)\r\n ) {\r\n // skip button is now \"done\" button\r\n nextTooltipButton.focus();\r\n } else if (\r\n typeof nextTooltipButton !== \"undefined\" &&\r\n nextTooltipButton !== null\r\n ) {\r\n //still in the tour, focus on next\r\n nextTooltipButton.focus();\r\n }\r\n\r\n \r\n }, 350);\r\n\r\n // end of old element if-else condition\r\n } else {\r\n const helperLayer = createElement(\"div\", {\r\n className: highlightClass,\r\n });\r\n const referenceLayer = createElement(\"div\", {\r\n className: \"introjs-tooltipReferenceLayer\",\r\n });\r\n const arrowLayer = createElement(\"div\", {\r\n className: \"introjs-arrow\",\r\n });\r\n const tooltipLayer = createElement(\"div\", {\r\n className: \"introjs-tooltip\",\r\n });\r\n const tooltipTextLayer = createElement(\"div\", {\r\n className: \"introjs-tooltiptext\",\r\n });\r\n const tooltipHeaderLayer = createElement(\"div\", {\r\n className: \"introjs-tooltip-header\",\r\n });\r\n const tooltipTitleLayer = createElement(\"h1\", {\r\n className: \"introjs-tooltip-title\",\r\n });\r\n\r\n const buttonsLayer = createElement(\"div\");\r\n\r\n setStyle(helperLayer, {\r\n \"box-shadow\": `0 0 1px 2px rgba(33, 33, 33, 0.8), rgba(33, 33, 33, ${self._options.overlayOpacity.toString()}) 0 0 0 5000px`,\r\n });\r\n\r\n // target is within a scrollable element\r\n scrollParentToElement.call(self, targetElement.element);\r\n\r\n //set new position to helper layer\r\n setHelperLayerPosition.call(self, helperLayer);\r\n setHelperLayerPosition.call(self, referenceLayer);\r\n\r\n //add helper layer to target element\r\n appendChild(this._targetElement, helperLayer, true);\r\n appendChild(this._targetElement, referenceLayer);\r\n\r\n tooltipTextLayer.innerHTML = targetElement.intro;\r\n tooltipTitleLayer.innerHTML = targetElement.title;\r\n\r\n buttonsLayer.className = \"introjs-tooltipbuttons\";\r\n if (this._options.showButtons === false) {\r\n buttonsLayer.style.display = \"none\";\r\n }\r\n\r\n tooltipHeaderLayer.appendChild(tooltipTitleLayer);\r\n tooltipLayer.appendChild(tooltipHeaderLayer);\r\n tooltipLayer.appendChild(tooltipTextLayer);\r\n\r\n // \"Do not show again\" checkbox\r\n if (this._options.dontShowAgain) {\r\n const dontShowAgainWrapper = createElement(\"div\", {\r\n className: \"introjs-dontShowAgain\",\r\n });\r\n const dontShowAgainCheckbox = createElement(\"input\", {\r\n type: \"checkbox\",\r\n id: \"introjs-dontShowAgain\",\r\n name: \"introjs-dontShowAgain\",\r\n });\r\n dontShowAgainCheckbox.onchange = (e) => {\r\n this.setDontShowAgain((e.target).checked);\r\n };\r\n const dontShowAgainCheckboxLabel = createElement(\"label\", {\r\n htmlFor: \"introjs-dontShowAgain\",\r\n });\r\n dontShowAgainCheckboxLabel.innerText = this._options.dontShowAgainLabel;\r\n dontShowAgainWrapper.appendChild(dontShowAgainCheckbox);\r\n dontShowAgainWrapper.appendChild(dontShowAgainCheckboxLabel);\r\n\r\n tooltipLayer.appendChild(dontShowAgainWrapper);\r\n }\r\n\r\n tooltipLayer.appendChild(_createBullets.call(this, targetElement));\r\n tooltipLayer.appendChild(_createProgressBar.call(this));\r\n\r\n // add helper layer number\r\n const helperNumberLayer = createElement(\"div\");\r\n\r\n if (this._options.showStepNumbers === true) {\r\n helperNumberLayer.className = \"introjs-helperNumberLayer\";\r\n helperNumberLayer.innerHTML = `${targetElement.step} ${this._options.stepNumbersOfLabel} ${this._introItems.length}`;\r\n tooltipLayer.appendChild(helperNumberLayer);\r\n }\r\n\r\n tooltipLayer.appendChild(arrowLayer);\r\n referenceLayer.appendChild(tooltipLayer);\r\n\r\n //next button\r\n nextTooltipButton = createElement(\"a\");\r\n\r\n nextTooltipButton.onclick = async () => {\r\n if (self._introItems.length - 1 !== self._currentStep) {\r\n await nextStep.call(self);\r\n } else if (/introjs-donebutton/gi.test(nextTooltipButton.className)) {\r\n if (typeof self._introCompleteCallback === \"function\") {\r\n await self._introCompleteCallback.call(\r\n self,\r\n self._currentStep,\r\n \"done\"\r\n );\r\n }\r\n\r\n await exitIntro.call(self, self._targetElement);\r\n }\r\n };\r\n\r\n setAnchorAsButton(nextTooltipButton);\r\n nextTooltipButton.innerHTML = this._options.nextLabel;\r\n\r\n //previous button\r\n prevTooltipButton = createElement(\"a\");\r\n\r\n prevTooltipButton.onclick = async () => {\r\n if (self._currentStep !== 0) {\r\n await previousStep.call(self);\r\n }\r\n };\r\n\r\n setAnchorAsButton(prevTooltipButton);\r\n prevTooltipButton.innerHTML = this._options.prevLabel;\r\n\r\n //skip button\r\n skipTooltipButton = createElement(\"a\", {\r\n className: \"introjs-skipbutton\",\r\n });\r\n\r\n setAnchorAsButton(skipTooltipButton);\r\n skipTooltipButton.innerHTML = this._options.skipLabel;\r\n\r\n skipTooltipButton.onclick = async () => {\r\n if (\r\n self._introItems.length - 1 === self._currentStep &&\r\n typeof self._introCompleteCallback === \"function\"\r\n ) {\r\n await self._introCompleteCallback.call(self, self._currentStep, \"skip\");\r\n }\r\n\r\n if (typeof self._introSkipCallback === \"function\") {\r\n await self._introSkipCallback.call(self);\r\n }\r\n\r\n await exitIntro.call(self, self._targetElement);\r\n };\r\n\r\n tooltipHeaderLayer.appendChild(skipTooltipButton);\r\n\r\n //in order to prevent displaying previous button always\r\n if (this._introItems.length > 1) {\r\n buttonsLayer.appendChild(prevTooltipButton);\r\n }\r\n\r\n // we always need the next button because this\r\n // button changes to \"Done\" in the last step of the tour\r\n buttonsLayer.appendChild(nextTooltipButton);\r\n tooltipLayer.appendChild(buttonsLayer);\r\n\r\n //set proper position\r\n placeTooltip.call(self, targetElement.element, tooltipLayer, arrowLayer);\r\n\r\n // change the scroll of the window, if needed\r\n scrollTo.call(\r\n this,\r\n targetElement.scrollTo,\r\n targetElement.element,\r\n tooltipLayer\r\n );\r\n\r\n //end of new element if-else condition\r\n }\r\n\r\n // removing previous disable interaction layer\r\n const disableInteractionLayer = self._targetElement.querySelector(\r\n \".introjs-disableInteraction\"\r\n );\r\n if (disableInteractionLayer) {\r\n disableInteractionLayer.parentNode.removeChild(disableInteractionLayer);\r\n }\r\n\r\n //disable interaction\r\n if (targetElement.disableInteraction) {\r\n _disableInteraction.call(self);\r\n }\r\n\r\n // when it's the first step of tour\r\n if (this._currentStep === 0 && this._introItems.length > 1) {\r\n if (\r\n typeof nextTooltipButton !== \"undefined\" &&\r\n nextTooltipButton !== null\r\n ) {\r\n nextTooltipButton.className = `${this._options.buttonClass} introjs-nextbutton`;\r\n nextTooltipButton.innerHTML = this._options.nextLabel;\r\n }\r\n\r\n if (this._options.hidePrev === true) {\r\n if (\r\n typeof prevTooltipButton !== \"undefined\" &&\r\n prevTooltipButton !== null\r\n ) {\r\n prevTooltipButton.className = `${this._options.buttonClass} introjs-prevbutton introjs-hidden`;\r\n }\r\n if (\r\n typeof nextTooltipButton !== \"undefined\" &&\r\n nextTooltipButton !== null\r\n ) {\r\n addClass(nextTooltipButton, \"introjs-fullbutton\");\r\n }\r\n } else {\r\n if (\r\n typeof prevTooltipButton !== \"undefined\" &&\r\n prevTooltipButton !== null\r\n ) {\r\n prevTooltipButton.className = `${this._options.buttonClass} introjs-prevbutton introjs-disabled`;\r\n }\r\n }\r\n } else if (\r\n this._introItems.length - 1 === this._currentStep ||\r\n this._introItems.length === 1\r\n ) {\r\n // last step of tour\r\n if (\r\n typeof prevTooltipButton !== \"undefined\" &&\r\n prevTooltipButton !== null\r\n ) {\r\n prevTooltipButton.className = `${this._options.buttonClass} introjs-prevbutton`;\r\n }\r\n\r\n if (this._options.hideNext === true) {\r\n if (\r\n typeof nextTooltipButton !== \"undefined\" &&\r\n nextTooltipButton !== null\r\n ) {\r\n nextTooltipButton.className = `${this._options.buttonClass} introjs-nextbutton introjs-hidden`;\r\n }\r\n if (\r\n typeof prevTooltipButton !== \"undefined\" &&\r\n prevTooltipButton !== null\r\n ) {\r\n addClass(prevTooltipButton, \"introjs-fullbutton\");\r\n }\r\n } else {\r\n if (\r\n typeof nextTooltipButton !== \"undefined\" &&\r\n nextTooltipButton !== null\r\n ) {\r\n if (this._options.nextToDone === true) {\r\n nextTooltipButton.innerHTML = this._options.doneLabel;\r\n addClass(\r\n nextTooltipButton,\r\n `${this._options.buttonClass} introjs-nextbutton introjs-donebutton`\r\n );\r\n } else {\r\n nextTooltipButton.className = `${this._options.buttonClass} introjs-nextbutton introjs-disabled`;\r\n }\r\n }\r\n }\r\n } else {\r\n // steps between start and end\r\n if (\r\n typeof prevTooltipButton !== \"undefined\" &&\r\n prevTooltipButton !== null\r\n ) {\r\n prevTooltipButton.className = `${this._options.buttonClass} introjs-prevbutton`;\r\n }\r\n if (\r\n typeof nextTooltipButton !== \"undefined\" &&\r\n nextTooltipButton !== null\r\n ) {\r\n nextTooltipButton.className = `${this._options.buttonClass} introjs-nextbutton`;\r\n nextTooltipButton.innerHTML = this._options.nextLabel;\r\n }\r\n }\r\n\r\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\r\n prevTooltipButton.setAttribute(\"role\", \"button\");\r\n }\r\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\r\n nextTooltipButton.setAttribute(\"role\", \"button\");\r\n }\r\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\r\n skipTooltipButton.setAttribute(\"role\", \"button\");\r\n }\r\n\r\n //Set focus on \"next\" button, so that hitting Enter always moves you onto the next step\r\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\r\n nextTooltipButton.focus();\r\n }\r\n\r\n setShowElement(targetElement.element);\r\n\r\n if (typeof this._introAfterChangeCallback !== \"undefined\") {\r\n await this._introAfterChangeCallback.call(this, targetElement.element);\r\n }\r\n}\r\n","import forEach from \"../util/forEach\";\r\nimport showElement from \"./showElement\";\r\nimport exitIntro from \"./exitIntro\";\r\n\r\nexport type Step = {\r\n step: number;\r\n title: string;\r\n intro: string;\r\n tooltipClass: string;\r\n highlightClass: string;\r\n element: HTMLElement;\r\n position: string;\r\n scrollTo: HTMLElement;\r\n disableInteraction: boolean;\r\n hintAnimation?: boolean;\r\n hintPosition?: string;\r\n};\r\n\r\n/**\r\n * Go to specific step of introduction\r\n *\r\n * @api private\r\n */\r\nexport async function goToStep(step: number) {\r\n //because steps starts with zero\r\n this._currentStep = step - 2;\r\n if (typeof this._introItems !== \"undefined\") {\r\n await nextStep.call(this);\r\n }\r\n}\r\n\r\n/**\r\n * Go to the specific step of introduction with the explicit [data-step] number\r\n *\r\n * @api private\r\n */\r\nexport async function goToStepNumber(step: number) {\r\n this._currentStepNumber = step;\r\n if (typeof this._introItems !== \"undefined\") {\r\n await nextStep.call(this);\r\n }\r\n}\r\n\r\n/**\r\n * Go to next step on intro\r\n *\r\n * @api private\r\n */\r\nexport async function nextStep() {\r\n this._direction = \"forward\";\r\n\r\n if (typeof this._currentStepNumber !== \"undefined\") {\r\n forEach(this._introItems, ({ step }, i) => {\r\n if (step === this._currentStepNumber) {\r\n this._currentStep = i - 1;\r\n this._currentStepNumber = undefined;\r\n }\r\n });\r\n }\r\n\r\n if (typeof this._currentStep === \"undefined\") {\r\n this._currentStep = 0;\r\n } else {\r\n ++this._currentStep;\r\n }\r\n\r\n const nextStep = this._introItems[this._currentStep];\r\n let continueStep = true;\r\n\r\n if (typeof this._introBeforeChangeCallback !== \"undefined\") {\r\n continueStep = await this._introBeforeChangeCallback.call(\r\n this,\r\n nextStep && nextStep.element\r\n );\r\n }\r\n\r\n // if `onbeforechange` returned `false`, stop displaying the element\r\n if (continueStep === false) {\r\n --this._currentStep;\r\n return false;\r\n }\r\n\r\n if (this._introItems.length <= this._currentStep) {\r\n //end of the intro\r\n //check if any callback is defined\r\n if (typeof this._introCompleteCallback === \"function\") {\r\n await this._introCompleteCallback.call(this, this._currentStep, \"end\");\r\n }\r\n\r\n await exitIntro.call(this, this._targetElement);\r\n\r\n return false;\r\n }\r\n\r\n await showElement.call(this, nextStep);\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Go to previous step on intro\r\n *\r\n * @api private\r\n */\r\nexport async function previousStep() {\r\n this._direction = \"backward\";\r\n\r\n if (this._currentStep === 0) {\r\n return false;\r\n }\r\n\r\n --this._currentStep;\r\n\r\n const nextStep = this._introItems[this._currentStep];\r\n let continueStep = true;\r\n\r\n if (typeof this._introBeforeChangeCallback !== \"undefined\") {\r\n continueStep = await this._introBeforeChangeCallback.call(\r\n this,\r\n nextStep && nextStep.element\r\n );\r\n }\r\n\r\n // if `onbeforechange` returned `false`, stop displaying the element\r\n if (continueStep === false) {\r\n ++this._currentStep;\r\n return false;\r\n }\r\n\r\n await showElement.call(this, nextStep);\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Returns the current step of the intro\r\n */\r\nexport function currentStep(): number | boolean {\r\n return this._currentStep;\r\n}\r\n","import { nextStep, previousStep } from \"./steps\";\r\nimport exitIntro from \"./exitIntro\";\r\n\r\n/**\r\n * on keyCode:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\r\n * This feature has been removed from the Web standards.\r\n * Though some browsers may still support it, it is in\r\n * the process of being dropped.\r\n * Instead, you should use KeyboardEvent.code,\r\n * if it's implemented.\r\n *\r\n * jQuery's approach is to test for\r\n * (1) e.which, then\r\n * (2) e.charCode, then\r\n * (3) e.keyCode\r\n * https://github.com/jquery/jquery/blob/a6b0705294d336ae2f63f7276de0da1195495363/src/event.js#L638\r\n *\r\n * @param type var\r\n * @return type\r\n */\r\nexport default async function onKeyDown(e) {\r\n let code = e.code === undefined ? e.which : e.code;\r\n\r\n // if e.which is null\r\n if (code === null) {\r\n code = e.charCode === null ? e.keyCode : e.charCode;\r\n }\r\n\r\n if ((code === \"Escape\" || code === 27) && this._options.exitOnEsc === true) {\r\n //escape key pressed, exit the intro\r\n //check if exit callback is defined\r\n await exitIntro.call(this, this._targetElement);\r\n } else if (code === \"ArrowLeft\" || code === 37) {\r\n //left arrow\r\n await previousStep.call(this);\r\n } else if (code === \"ArrowRight\" || code === 39) {\r\n //right arrow\r\n await nextStep.call(this);\r\n } else if (code === \"Enter\" || code === \"NumpadEnter\" || code === 13) {\r\n //srcElement === ie\r\n const target = e.target || e.srcElement;\r\n if (target && target.className.match(\"introjs-prevbutton\")) {\r\n //user hit enter while focusing on previous button\r\n await previousStep.call(this);\r\n } else if (target && target.className.match(\"introjs-skipbutton\")) {\r\n //user hit enter while focusing on skip button\r\n if (\r\n this._introItems.length - 1 === this._currentStep &&\r\n typeof this._introCompleteCallback === \"function\"\r\n ) {\r\n await this._introCompleteCallback.call(this, this._currentStep, \"skip\");\r\n }\r\n\r\n await exitIntro.call(this, this._targetElement);\r\n } else if (target && target.getAttribute(\"data-step-number\")) {\r\n // user hit enter while focusing on step bullet\r\n target.click();\r\n } else {\r\n //default behavior for responding to enter\r\n await nextStep.call(this);\r\n }\r\n\r\n //prevent default behaviour on hitting Enter, to prevent steps being skipped in some browsers\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n } else {\r\n e.returnValue = false;\r\n }\r\n }\r\n}\r\n","/*\r\n * Makes a copy of an object\r\n * @api private\r\n */\r\nexport default function cloneObject(source: T): T {\r\n if (source === null || typeof source !== \"object\" || \"nodeType\" in source) {\r\n return source;\r\n }\r\n\r\n const temp = {} as T;\r\n\r\n for (const key in source) {\r\n if (\r\n // @ts-ignore:next-line\r\n (\"jQuery\" in window && source[key] instanceof window.jQuery) ||\r\n key === \"scrollElRef\"\r\n ) {\r\n temp[key] = source[key];\r\n } else if (key === \"window\") {\r\n // @ts-ignore:next-line\r\n temp[key] = window;\r\n } else {\r\n temp[key] = cloneObject(source[key]);\r\n }\r\n }\r\n return temp;\r\n}\r\n","export default function debounce(\r\n func: Function,\r\n timeout: number\r\n): (...args) => void {\r\n let timer;\r\n return (...args) => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n func.apply(this, args);\r\n }, timeout);\r\n };\r\n}\r\n","import addClass from \"../util/addClass\";\r\nimport removeClass from \"../util/removeClass\";\r\nimport isFixed from \"../util/isFixed\";\r\nimport getOffset from \"../util/getOffset\";\r\nimport cloneObject from \"../util/cloneObject\";\r\nimport forEach from \"../util/forEach\";\r\nimport DOMEvent from \"./DOMEvent\";\r\nimport setAnchorAsButton from \"../util/setAnchorAsButton\";\r\nimport setHelperLayerPosition from \"./setHelperLayerPosition\";\r\nimport placeTooltip from \"./placeTooltip\";\r\nimport createElement from \"../util/createElement\";\r\nimport debounce from \"../util/debounce\";\r\nimport { Step } from \"./steps\";\r\n\r\n/**\r\n * Get a queryselector within the hint wrapper\r\n */\r\nexport function hintQuerySelectorAll(selector: string): HTMLElement[] {\r\n const hintsWrapper = document.querySelector(\".introjs-hints\");\r\n return hintsWrapper\r\n ? Array.from(hintsWrapper.querySelectorAll(selector))\r\n : [];\r\n}\r\n\r\n/**\r\n * Hide a hint\r\n *\r\n * @api private\r\n */\r\nexport async function hideHint(stepId: number) {\r\n const hint = hintQuerySelectorAll(`.introjs-hint[data-step=\"${stepId}\"]`)[0];\r\n\r\n removeHintTooltip.call(this);\r\n\r\n if (hint) {\r\n addClass(hint, \"introjs-hidehint\");\r\n }\r\n\r\n // call the callback function (if any)\r\n if (typeof this._hintCloseCallback !== \"undefined\") {\r\n await this._hintCloseCallback.call(this, stepId);\r\n }\r\n}\r\n\r\n/**\r\n * Hide all hints\r\n *\r\n * @api private\r\n */\r\nexport function hideHints() {\r\n const hints = hintQuerySelectorAll(\".introjs-hint\");\r\n\r\n forEach(hints, async (hint) => {\r\n await hideHint.call(this, hint.getAttribute(\"data-step\"));\r\n });\r\n}\r\n\r\n/**\r\n * Show all hints\r\n *\r\n * @api private\r\n * @method _showHints\r\n */\r\nexport async function showHints() {\r\n const hints = hintQuerySelectorAll(\".introjs-hint\");\r\n\r\n if (hints && hints.length) {\r\n forEach(hints, (hint) => {\r\n showHint.call(this, hint.getAttribute(\"data-step\"));\r\n });\r\n } else {\r\n await populateHints.call(this, this._targetElement);\r\n }\r\n}\r\n\r\n/**\r\n * Show a hint\r\n *\r\n * @api private\r\n */\r\nexport function showHint(stepId: number) {\r\n const hint = hintQuerySelectorAll(`.introjs-hint[data-step=\"${stepId}\"]`)[0];\r\n\r\n if (hint) {\r\n removeClass(hint, /introjs-hidehint/g);\r\n }\r\n}\r\n\r\n/**\r\n * Removes all hint elements on the page\r\n * Useful when you want to destroy the elements and add them again (e.g. a modal or popup)\r\n *\r\n * @api private\r\n */\r\nexport function removeHints() {\r\n const hints = hintQuerySelectorAll(\".introjs-hint\");\r\n\r\n forEach(hints, (hint) => {\r\n removeHint.call(this, hint.getAttribute(\"data-step\"));\r\n });\r\n\r\n DOMEvent.off(document, \"click\", removeHintTooltip, this, false);\r\n DOMEvent.off(window, \"resize\", reAlignHints, this, true);\r\n\r\n if (this._hintsAutoRefreshFunction) {\r\n DOMEvent.off(window, \"scroll\", this._hintsAutoRefreshFunction, this, true);\r\n }\r\n}\r\n\r\n/**\r\n * Remove one single hint element from the page\r\n * Useful when you want to destroy the element and add them again (e.g. a modal or popup)\r\n * Use removeHints if you want to remove all elements.\r\n *\r\n * @api private\r\n */\r\nexport function removeHint(stepId: number) {\r\n const hint = hintQuerySelectorAll(`.introjs-hint[data-step=\"${stepId}\"]`)[0];\r\n\r\n if (hint) {\r\n hint.parentNode.removeChild(hint);\r\n }\r\n}\r\n\r\n/**\r\n * Add all available hints to the page\r\n *\r\n * @api private\r\n */\r\nexport async function addHints() {\r\n const self = this;\r\n\r\n let hintsWrapper = document.querySelector(\".introjs-hints\");\r\n\r\n if (hintsWrapper === null) {\r\n hintsWrapper = createElement(\"div\", {\r\n className: \"introjs-hints\",\r\n });\r\n }\r\n\r\n /**\r\n * Returns an event handler unique to the hint iteration\r\n */\r\n const getHintClick = (i: number) => (e: Event) => {\r\n const evt = e ? e : window.event;\r\n\r\n if (evt.stopPropagation) {\r\n evt.stopPropagation();\r\n }\r\n\r\n if (evt.cancelBubble !== null) {\r\n evt.cancelBubble = true;\r\n }\r\n\r\n showHintDialog.call(self, i);\r\n };\r\n\r\n forEach(this._introItems, (item: Step, i: number) => {\r\n // avoid append a hint twice\r\n if (document.querySelector(`.introjs-hint[data-step=\"${i}\"]`)) {\r\n return;\r\n }\r\n\r\n const hint = createElement(\"a\", {\r\n className: \"introjs-hint\",\r\n });\r\n setAnchorAsButton(hint);\r\n\r\n hint.onclick = getHintClick(i);\r\n\r\n if (!item.hintAnimation) {\r\n addClass(hint, \"introjs-hint-no-anim\");\r\n }\r\n\r\n // hint's position should be fixed if the target element's position is fixed\r\n if (isFixed(item.element)) {\r\n addClass(hint, \"introjs-fixedhint\");\r\n }\r\n\r\n const hintDot = createElement(\"div\", {\r\n className: \"introjs-hint-dot\",\r\n });\r\n\r\n const hintPulse = createElement(\"div\", {\r\n className: \"introjs-hint-pulse\",\r\n });\r\n\r\n hint.appendChild(hintDot);\r\n hint.appendChild(hintPulse);\r\n hint.setAttribute(\"data-step\", i.toString());\r\n\r\n const targetElement = item.element;\r\n item.element = hint;\r\n\r\n // align the hint position\r\n alignHintPosition.call(this, item.hintPosition, hint, targetElement);\r\n\r\n hintsWrapper.appendChild(hint);\r\n });\r\n\r\n // adding the hints wrapper\r\n document.body.appendChild(hintsWrapper);\r\n\r\n // call the callback function (if any)\r\n if (typeof this._hintsAddedCallback !== \"undefined\") {\r\n await this._hintsAddedCallback.call(this);\r\n }\r\n\r\n if (this._options.hintAutoRefreshInterval >= 0) {\r\n this._hintsAutoRefreshFunction = debounce(\r\n () => reAlignHints.call(this),\r\n this._options.hintAutoRefreshInterval\r\n );\r\n DOMEvent.on(window, \"scroll\", this._hintsAutoRefreshFunction, this, true);\r\n }\r\n}\r\n\r\n/**\r\n * Aligns hint position\r\n *\r\n * @api private\r\n */\r\nexport function alignHintPosition(\r\n position: string,\r\n hintElement: HTMLElement,\r\n targetElement: HTMLElement\r\n) {\r\n // get/calculate offset of target element\r\n const offset = getOffset.call(this, targetElement);\r\n const iconWidth = 20;\r\n const iconHeight = 20;\r\n\r\n // align the hint element\r\n switch (position) {\r\n default:\r\n case \"top-left\":\r\n hintElement.style.left = `${offset.left}px`;\r\n hintElement.style.top = `${offset.top}px`;\r\n break;\r\n case \"top-right\":\r\n hintElement.style.left = `${offset.left + offset.width - iconWidth}px`;\r\n hintElement.style.top = `${offset.top}px`;\r\n break;\r\n case \"bottom-left\":\r\n hintElement.style.left = `${offset.left}px`;\r\n hintElement.style.top = `${offset.top + offset.height - iconHeight}px`;\r\n break;\r\n case \"bottom-right\":\r\n hintElement.style.left = `${offset.left + offset.width - iconWidth}px`;\r\n hintElement.style.top = `${offset.top + offset.height - iconHeight}px`;\r\n break;\r\n case \"middle-left\":\r\n hintElement.style.left = `${offset.left}px`;\r\n hintElement.style.top = `${\r\n offset.top + (offset.height - iconHeight) / 2\r\n }px`;\r\n break;\r\n case \"middle-right\":\r\n hintElement.style.left = `${offset.left + offset.width - iconWidth}px`;\r\n hintElement.style.top = `${\r\n offset.top + (offset.height - iconHeight) / 2\r\n }px`;\r\n break;\r\n case \"middle-middle\":\r\n hintElement.style.left = `${\r\n offset.left + (offset.width - iconWidth) / 2\r\n }px`;\r\n hintElement.style.top = `${\r\n offset.top + (offset.height - iconHeight) / 2\r\n }px`;\r\n break;\r\n case \"bottom-middle\":\r\n hintElement.style.left = `${\r\n offset.left + (offset.width - iconWidth) / 2\r\n }px`;\r\n hintElement.style.top = `${offset.top + offset.height - iconHeight}px`;\r\n break;\r\n case \"top-middle\":\r\n hintElement.style.left = `${\r\n offset.left + (offset.width - iconWidth) / 2\r\n }px`;\r\n hintElement.style.top = `${offset.top}px`;\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * Triggers when user clicks on the hint element\r\n *\r\n * @api private\r\n */\r\nexport async function showHintDialog(stepId: number) {\r\n const hintElement = document.querySelector(\r\n `.introjs-hint[data-step=\"${stepId}\"]`\r\n );\r\n const item = this._introItems[stepId];\r\n\r\n // call the callback function (if any)\r\n if (typeof this._hintClickCallback !== \"undefined\") {\r\n await this._hintClickCallback.call(this, hintElement, item, stepId);\r\n }\r\n\r\n // remove all open tooltips\r\n const removedStep = removeHintTooltip.call(this);\r\n\r\n // to toggle the tooltip\r\n if (parseInt(removedStep, 10) === stepId) {\r\n return;\r\n }\r\n\r\n const tooltipLayer = createElement(\"div\", {\r\n className: \"introjs-tooltip\",\r\n });\r\n const tooltipTextLayer = createElement(\"div\");\r\n const arrowLayer = createElement(\"div\");\r\n const referenceLayer = createElement(\"div\");\r\n\r\n tooltipLayer.onclick = (e: Event) => {\r\n //IE9 & Other Browsers\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n //IE8 and Lower\r\n else {\r\n e.cancelBubble = true;\r\n }\r\n };\r\n\r\n tooltipTextLayer.className = \"introjs-tooltiptext\";\r\n\r\n const tooltipWrapper = createElement(\"p\");\r\n tooltipWrapper.innerHTML = item.hint;\r\n tooltipTextLayer.appendChild(tooltipWrapper);\r\n\r\n if (this._options.hintShowButton) {\r\n const closeButton = createElement(\"a\");\r\n closeButton.className = this._options.buttonClass;\r\n closeButton.setAttribute(\"role\", \"button\");\r\n closeButton.innerHTML = this._options.hintButtonLabel;\r\n closeButton.onclick = hideHint.bind(this, stepId);\r\n tooltipTextLayer.appendChild(closeButton);\r\n }\r\n\r\n arrowLayer.className = \"introjs-arrow\";\r\n tooltipLayer.appendChild(arrowLayer);\r\n\r\n tooltipLayer.appendChild(tooltipTextLayer);\r\n\r\n // set current step for _placeTooltip function\r\n this._currentStep = hintElement.getAttribute(\"data-step\");\r\n\r\n // align reference layer position\r\n referenceLayer.className =\r\n \"introjs-tooltipReferenceLayer introjs-hintReference\";\r\n referenceLayer.setAttribute(\r\n \"data-step\",\r\n hintElement.getAttribute(\"data-step\")\r\n );\r\n setHelperLayerPosition.call(this, referenceLayer);\r\n\r\n referenceLayer.appendChild(tooltipLayer);\r\n document.body.appendChild(referenceLayer);\r\n\r\n //set proper position\r\n placeTooltip.call(this, hintElement, tooltipLayer, arrowLayer, true);\r\n}\r\n\r\n/**\r\n * Removes open hint (tooltip hint)\r\n *\r\n * @api private\r\n */\r\nexport function removeHintTooltip(): string | undefined {\r\n const tooltip = document.querySelector(\".introjs-hintReference\");\r\n\r\n if (tooltip) {\r\n const step = tooltip.getAttribute(\"data-step\");\r\n tooltip.parentNode.removeChild(tooltip);\r\n return step;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Start parsing hint items\r\n *\r\n * @api private\r\n */\r\nexport async function populateHints(targetElm: HTMLElement): Promise {\r\n this._introItems = [];\r\n\r\n if (this._options.hints) {\r\n forEach(this._options.hints, (hint) => {\r\n const currentItem: Step = cloneObject(hint);\r\n\r\n if (typeof currentItem.element === \"string\") {\r\n //grab the element with given selector from the page\r\n currentItem.element = document.querySelector(currentItem.element);\r\n }\r\n\r\n currentItem.hintPosition =\r\n currentItem.hintPosition || this._options.hintPosition;\r\n currentItem.hintAnimation =\r\n currentItem.hintAnimation || this._options.hintAnimation;\r\n\r\n if (currentItem.element !== null) {\r\n this._introItems.push(currentItem);\r\n }\r\n });\r\n } else {\r\n const hints = Array.from(targetElm.querySelectorAll(\"*[data-hint]\"));\r\n\r\n if (!hints || !hints.length) {\r\n return false;\r\n }\r\n\r\n //first add intro items with data-step\r\n forEach(hints, (currentElement) => {\r\n // hint animation\r\n let hintAnimation = currentElement.getAttribute(\"data-hint-animation\");\r\n\r\n if (hintAnimation) {\r\n hintAnimation = hintAnimation === \"true\";\r\n } else {\r\n hintAnimation = this._options.hintAnimation;\r\n }\r\n\r\n this._introItems.push({\r\n element: currentElement,\r\n hint: currentElement.getAttribute(\"data-hint\"),\r\n hintPosition:\r\n currentElement.getAttribute(\"data-hint-position\") ||\r\n this._options.hintPosition,\r\n hintAnimation,\r\n tooltipClass: currentElement.getAttribute(\"data-tooltip-class\"),\r\n position:\r\n currentElement.getAttribute(\"data-position\") ||\r\n this._options.tooltipPosition,\r\n });\r\n });\r\n }\r\n\r\n await addHints.call(this);\r\n\r\n DOMEvent.on(document, \"click\", removeHintTooltip, this, false);\r\n DOMEvent.on(window, \"resize\", reAlignHints, this, true);\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Re-aligns all hint elements\r\n *\r\n * @api private\r\n */\r\nexport function reAlignHints() {\r\n forEach(this._introItems, ({ targetElement, hintPosition, element }) => {\r\n if (typeof targetElement === \"undefined\") {\r\n return;\r\n }\r\n\r\n alignHintPosition.call(this, hintPosition, element, targetElement);\r\n });\r\n}\r\n","import forEach from \"../util/forEach\";\r\nimport cloneObject from \"../util/cloneObject\";\r\nimport createElement from \"../util/createElement\";\r\nimport { Step } from \"./steps\";\r\n\r\n/**\r\n * Finds all Intro steps from the data-* attributes and the options.steps array\r\n *\r\n * @api private\r\n */\r\nexport default function fetchIntroSteps(targetElm: HTMLElement) {\r\n const allIntroSteps = Array.from(targetElm.querySelectorAll(\"*[data-intro]\"));\r\n let introItems: Step[] = [];\r\n\r\n if (this._options.steps) {\r\n //use steps passed programmatically\r\n forEach(this._options.steps, (step) => {\r\n const currentItem: Step = cloneObject(step);\r\n\r\n //set the step\r\n currentItem.step = introItems.length + 1;\r\n\r\n currentItem.title = currentItem.title || \"\";\r\n\r\n //use querySelector function only when developer used CSS selector\r\n if (typeof currentItem.element === \"string\") {\r\n //grab the element with given selector from the page\r\n currentItem.element = document.querySelector(currentItem.element);\r\n }\r\n\r\n //intro without element\r\n if (\r\n typeof currentItem.element === \"undefined\" ||\r\n currentItem.element === null\r\n ) {\r\n let floatingElementQuery = document.querySelector(\r\n \".introjsFloatingElement\"\r\n );\r\n\r\n if (floatingElementQuery === null) {\r\n floatingElementQuery = createElement(\"div\", {\r\n className: \"introjsFloatingElement\",\r\n });\r\n\r\n document.body.appendChild(floatingElementQuery);\r\n }\r\n\r\n currentItem.element = floatingElementQuery;\r\n currentItem.position = \"floating\";\r\n }\r\n\r\n currentItem.position =\r\n currentItem.position || this._options.tooltipPosition;\r\n currentItem.scrollTo = currentItem.scrollTo || this._options.scrollTo;\r\n\r\n if (typeof currentItem.disableInteraction === \"undefined\") {\r\n currentItem.disableInteraction = this._options.disableInteraction;\r\n }\r\n\r\n if (currentItem.element !== null) {\r\n introItems.push(currentItem);\r\n }\r\n });\r\n } else {\r\n //use steps from data-* annotations\r\n const elmsLength = allIntroSteps.length;\r\n let disableInteraction;\r\n\r\n //if there's no element to intro\r\n if (elmsLength < 1) {\r\n return [];\r\n }\r\n\r\n forEach(allIntroSteps, (currentElement) => {\r\n // start intro for groups of elements\r\n if (\r\n this._options.group &&\r\n currentElement.getAttribute(\"data-intro-group\") !== this._options.group\r\n ) {\r\n return;\r\n }\r\n\r\n // skip hidden elements\r\n if (currentElement.style.display === \"none\") {\r\n return;\r\n }\r\n\r\n const step = parseInt(currentElement.getAttribute(\"data-step\"), 10);\r\n\r\n if (currentElement.hasAttribute(\"data-disable-interaction\")) {\r\n disableInteraction = !!currentElement.getAttribute(\r\n \"data-disable-interaction\"\r\n );\r\n } else {\r\n disableInteraction = this._options.disableInteraction;\r\n }\r\n\r\n if (step > 0) {\r\n introItems[step - 1] = {\r\n element: currentElement,\r\n title: currentElement.getAttribute(\"data-title\") || \"\",\r\n intro: currentElement.getAttribute(\"data-intro\"),\r\n step: parseInt(currentElement.getAttribute(\"data-step\"), 10),\r\n tooltipClass: currentElement.getAttribute(\"data-tooltip-class\"),\r\n highlightClass: currentElement.getAttribute(\"data-highlight-class\"),\r\n position:\r\n currentElement.getAttribute(\"data-position\") ||\r\n this._options.tooltipPosition,\r\n scrollTo:\r\n currentElement.getAttribute(\"data-scroll-to\") ||\r\n this._options.scrollTo,\r\n disableInteraction,\r\n };\r\n }\r\n });\r\n\r\n //next add intro items without data-step\r\n //todo: we need a cleanup here, two loops are redundant\r\n let nextStep = 0;\r\n\r\n forEach(allIntroSteps, (currentElement) => {\r\n // start intro for groups of elements\r\n if (\r\n this._options.group &&\r\n currentElement.getAttribute(\"data-intro-group\") !== this._options.group\r\n ) {\r\n return;\r\n }\r\n\r\n if (currentElement.getAttribute(\"data-step\") === null) {\r\n while (true) {\r\n if (typeof introItems[nextStep] === \"undefined\") {\r\n break;\r\n } else {\r\n nextStep++;\r\n }\r\n }\r\n\r\n if (currentElement.hasAttribute(\"data-disable-interaction\")) {\r\n disableInteraction = !!currentElement.getAttribute(\r\n \"data-disable-interaction\"\r\n );\r\n } else {\r\n disableInteraction = this._options.disableInteraction;\r\n }\r\n\r\n introItems[nextStep] = {\r\n element: currentElement,\r\n title: currentElement.getAttribute(\"data-title\") || \"\",\r\n intro: currentElement.getAttribute(\"data-intro\"),\r\n step: nextStep + 1,\r\n tooltipClass: currentElement.getAttribute(\"data-tooltip-class\"),\r\n highlightClass: currentElement.getAttribute(\"data-highlight-class\"),\r\n position:\r\n currentElement.getAttribute(\"data-position\") ||\r\n this._options.tooltipPosition,\r\n scrollTo:\r\n currentElement.getAttribute(\"data-scroll-to\") ||\r\n this._options.scrollTo,\r\n disableInteraction,\r\n };\r\n }\r\n });\r\n }\r\n\r\n //removing undefined/null elements\r\n const tempIntroItems = [];\r\n for (let z = 0; z < introItems.length; z++) {\r\n if (introItems[z]) {\r\n // copy non-falsy values to the end of the array\r\n tempIntroItems.push(introItems[z]);\r\n }\r\n }\r\n\r\n introItems = tempIntroItems;\r\n\r\n //Ok, sort all items with given steps\r\n introItems.sort((a, b) => a.step - b.step);\r\n\r\n return introItems;\r\n}\r\n","import { reAlignHints } from \"./hint\";\r\nimport setHelperLayerPosition from \"./setHelperLayerPosition\";\r\nimport placeTooltip from \"./placeTooltip\";\r\nimport fetchIntroSteps from \"./fetchIntroSteps\";\r\nimport { _recreateBullets, _updateProgressBar } from \"./showElement\";\r\n\r\n/**\r\n * Update placement of the intro objects on the screen\r\n * @api private\r\n */\r\nexport default function refresh(refreshSteps?: boolean) {\r\n const referenceLayer = document.querySelector(\r\n \".introjs-tooltipReferenceLayer\"\r\n );\r\n const helperLayer = document.querySelector(\".introjs-helperLayer\");\r\n const disableInteractionLayer = document.querySelector(\r\n \".introjs-disableInteraction\"\r\n );\r\n\r\n // re-align intros\r\n setHelperLayerPosition.call(this, helperLayer);\r\n setHelperLayerPosition.call(this, referenceLayer);\r\n setHelperLayerPosition.call(this, disableInteractionLayer);\r\n\r\n if (refreshSteps) {\r\n this._introItems = fetchIntroSteps.call(this, this._targetElement);\r\n _recreateBullets.call(this, this._introItems[this._currentStep]);\r\n _updateProgressBar.call(this, referenceLayer);\r\n }\r\n\r\n // re-align tooltip\r\n if (this._currentStep !== undefined && this._currentStep !== null) {\r\n const oldArrowLayer = document.querySelector(\".introjs-arrow\");\r\n const oldtooltipContainer = document.querySelector(\".introjs-tooltip\");\r\n\r\n if (oldtooltipContainer && oldArrowLayer) {\r\n placeTooltip.call(\r\n this,\r\n this._introItems[this._currentStep].element,\r\n oldtooltipContainer,\r\n oldArrowLayer\r\n );\r\n }\r\n }\r\n\r\n //re-align hints\r\n reAlignHints.call(this);\r\n return this;\r\n}\r\n","import refresh from \"./refresh\";\r\n\r\nexport default function onResize() {\r\n refresh.call(this);\r\n}\r\n","import setStyle from \"./setStyle\";\r\n\r\n/**\r\n * Removes `element` from `parentElement`\r\n */\r\nexport default function removeChild(element: HTMLElement, animate = false) {\r\n if (!element || !element.parentElement) return;\r\n\r\n const parentElement = element.parentElement;\r\n\r\n if (animate) {\r\n setStyle(element, {\r\n opacity: \"0\",\r\n });\r\n\r\n window.setTimeout(() => {\r\n try {\r\n // removeChild(..) throws an exception if the child has already been removed (https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild)\r\n // this try-catch is added to make sure this function doesn't throw an exception if the child has been removed\r\n // this scenario can happen when start()/exit() is called multiple times and the helperLayer is removed by the\r\n // previous exit() call (note: this is a timeout)\r\n parentElement.removeChild(element);\r\n } catch (e) {}\r\n }, 500);\r\n } else {\r\n parentElement.removeChild(element);\r\n }\r\n}\r\n","import forEach from \"../util/forEach\";\r\nimport DOMEvent from \"./DOMEvent\";\r\nimport onKeyDown from \"./onKeyDown\";\r\nimport onResize from \"./onResize\";\r\nimport removeShowElement from \"./removeShowElement\";\r\nimport removeChild from \"../util/removeChild\";\r\n\r\n/**\r\n * Exit from intro\r\n *\r\n * @api private\r\n * @param {Object} targetElement\r\n * @param {Boolean} force - Setting to `true` will skip the result of beforeExit callback\r\n */\r\nexport default async function exitIntro(\r\n targetElement: HTMLElement,\r\n force: boolean\r\n) {\r\n let continueExit = true;\r\n\r\n // calling onbeforeexit callback\r\n //\r\n // If this callback return `false`, it would halt the process\r\n if (this._introBeforeExitCallback !== undefined) {\r\n continueExit = await this._introBeforeExitCallback.call(this);\r\n }\r\n\r\n // skip this check if `force` parameter is `true`\r\n // otherwise, if `onbeforeexit` returned `false`, don't exit the intro\r\n if (!force && continueExit === false) return;\r\n\r\n // remove overlay layers from the page\r\n const overlayLayers = Array.from(\r\n targetElement.querySelectorAll(\".introjs-overlay\")\r\n );\r\n\r\n if (overlayLayers && overlayLayers.length) {\r\n forEach(overlayLayers, (overlayLayer) => removeChild(overlayLayer));\r\n }\r\n\r\n //remove all helper layers\r\n const helperLayer = targetElement.querySelector(\r\n \".introjs-helperLayer\"\r\n );\r\n removeChild(helperLayer, true);\r\n\r\n const referenceLayer = targetElement.querySelector(\r\n \".introjs-tooltipReferenceLayer\"\r\n );\r\n removeChild(referenceLayer);\r\n\r\n //remove disableInteractionLayer\r\n const disableInteractionLayer = targetElement.querySelector(\r\n \".introjs-disableInteraction\"\r\n );\r\n removeChild(disableInteractionLayer);\r\n\r\n //remove intro floating element\r\n const floatingElement = document.querySelector(\r\n \".introjsFloatingElement\"\r\n );\r\n removeChild(floatingElement);\r\n\r\n removeShowElement();\r\n\r\n //clean listeners\r\n DOMEvent.off(window, \"keydown\", onKeyDown, this, true);\r\n DOMEvent.off(window, \"resize\", onResize, this, true);\r\n\r\n //check if any callback is defined\r\n if (this._introExitCallback !== undefined) {\r\n await this._introExitCallback.call(this);\r\n }\r\n\r\n //set the step to zero\r\n this._currentStep = undefined;\r\n}\r\n","import exitIntro from \"./exitIntro\";\r\nimport createElement from \"../util/createElement\";\r\nimport setStyle from \"../util/setStyle\";\r\n\r\n/**\r\n * Add overlay layer to the page\r\n *\r\n * @api private\r\n * @method _addOverlayLayer\r\n * @param {Object} targetElm\r\n */\r\nexport default function addOverlayLayer(targetElm) {\r\n const overlayLayer = createElement(\"div\", {\r\n className: \"introjs-overlay\",\r\n });\r\n\r\n setStyle(overlayLayer, {\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n position: \"fixed\",\r\n });\r\n\r\n targetElm.appendChild(overlayLayer);\r\n\r\n if (this._options.exitOnOverlayClick === true) {\r\n setStyle(overlayLayer, {\r\n cursor: \"pointer\",\r\n });\r\n\r\n overlayLayer.onclick = async () => {\r\n await exitIntro.call(this, targetElm);\r\n };\r\n }\r\n\r\n return true;\r\n}\r\n","import addOverlayLayer from \"./addOverlayLayer\";\r\nimport DOMEvent from \"./DOMEvent\";\r\nimport { nextStep } from \"./steps\";\r\nimport onKeyDown from \"./onKeyDown\";\r\nimport onResize from \"./onResize\";\r\nimport fetchIntroSteps from \"./fetchIntroSteps\";\r\n\r\n/**\r\n * Initiate a new introduction/guide from an element in the page\r\n *\r\n * @api private\r\n */\r\nexport default async function introForElement(\r\n targetElm: HTMLElement\r\n): Promise {\r\n // don't start the tour if the instance is not active\r\n if (!this.isActive()) return false;\r\n\r\n if (this._introStartCallback !== undefined) {\r\n await this._introStartCallback.call(this, targetElm);\r\n }\r\n\r\n //set it to the introJs object\r\n const steps = fetchIntroSteps.call(this, targetElm);\r\n\r\n if (steps.length === 0) {\r\n return false;\r\n }\r\n\r\n this._introItems = steps;\r\n\r\n //add overlay layer to the page\r\n if (addOverlayLayer.call(this, targetElm)) {\r\n //then, start the show\r\n await nextStep.call(this);\r\n\r\n if (this._options.keyboardNavigation) {\r\n DOMEvent.on(window, \"keydown\", onKeyDown, this, true);\r\n }\r\n //for window resize\r\n DOMEvent.on(window, \"resize\", onResize, this, true);\r\n }\r\n\r\n return false;\r\n}\r\n","export function setCookie(name: string, value: string, days?: number) {\r\n const cookie = { [name]: value, path: \"/\", expires: undefined };\r\n\r\n if (days) {\r\n let date = new Date();\r\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\r\n cookie.expires = date.toUTCString();\r\n }\r\n\r\n let arr = [];\r\n for (let key in cookie) {\r\n arr.push(`${key}=${cookie[key]}`);\r\n }\r\n\r\n document.cookie = arr.join(\"; \");\r\n\r\n return getCookie(name);\r\n}\r\n\r\nexport function getAllCookies() {\r\n let cookie = {};\r\n\r\n document.cookie.split(\";\").forEach((el) => {\r\n let [k, v] = el.split(\"=\");\r\n cookie[k.trim()] = v;\r\n });\r\n\r\n return cookie;\r\n}\r\n\r\nexport function getCookie(name) {\r\n return getAllCookies()[name];\r\n}\r\n\r\nexport function deleteCookie(name) {\r\n setCookie(name, \"\", -1);\r\n}\r\n","import { deleteCookie, getCookie, setCookie } from \"../util/cookie\";\r\n\r\nconst dontShowAgainCookieValue = \"true\";\r\n\r\n/**\r\n * Set the \"Don't show again\" state\r\n *\r\n * @api private\r\n */\r\nexport function setDontShowAgain(dontShowAgain: boolean) {\r\n if (dontShowAgain) {\r\n setCookie(\r\n this._options.dontShowAgainCookie,\r\n dontShowAgainCookieValue,\r\n this._options.dontShowAgainCookieDays\r\n );\r\n } else {\r\n deleteCookie(this._options.dontShowAgainCookie);\r\n }\r\n}\r\n\r\n/**\r\n * Get the \"Don't show again\" state from cookies\r\n *\r\n * @api private\r\n */\r\nexport function getDontShowAgain(): boolean {\r\n const dontShowCookie = getCookie(this._options.dontShowAgainCookie);\r\n return dontShowCookie && dontShowCookie === dontShowAgainCookieValue;\r\n}\r\n","import mergeOptions from \"./util/mergeOptions\";\r\nimport stamp from \"./util/stamp\";\r\nimport exitIntro from \"./core/exitIntro\";\r\nimport refresh from \"./core/refresh\";\r\nimport introForElement from \"./core/introForElement\";\r\nimport { getDontShowAgain, setDontShowAgain } from \"./core/dontShowAgain\";\r\nimport { version } from \"../package.json\";\r\nimport {\r\n populateHints,\r\n hideHint,\r\n hideHints,\r\n showHint,\r\n showHints,\r\n removeHint,\r\n removeHints,\r\n showHintDialog,\r\n} from \"./core/hint\";\r\nimport {\r\n Step,\r\n currentStep,\r\n goToStep,\r\n goToStepNumber,\r\n nextStep,\r\n previousStep,\r\n} from \"./core/steps\";\r\n\r\nclass IntroJs {\r\n public _targetElement: HTMLElement;\r\n public _introItems: Step[] = [];\r\n public _options: Record;\r\n public _introBeforeChangeCallback: Function;\r\n public _introChangeCallback: Function;\r\n public _introAfterChangeCallback: Function;\r\n public _introCompleteCallback: Function;\r\n public _hintsAddedCallback: Function;\r\n public _hintClickCallback: Function;\r\n public _hintCloseCallback: Function;\r\n public _introStartCallback: Function;\r\n public _introExitCallback: Function;\r\n public _introSkipCallback: Function;\r\n public _introBeforeExitCallback: Function;\r\n\r\n public constructor(targetElement: HTMLElement) {\r\n this._targetElement = targetElement;\r\n\r\n this._options = {\r\n /* Is this tour instance active? Don't show the tour again if this flag is set to false */\r\n isActive: true,\r\n /* Next button label in tooltip box */\r\n nextLabel: \"Next\",\r\n /* Previous button label in tooltip box */\r\n prevLabel: \"Back\",\r\n /* Skip button label in tooltip box */\r\n skipLabel: \"×\",\r\n /* Done button label in tooltip box */\r\n doneLabel: \"Done\",\r\n /* Hide previous button in the first step? Otherwise, it will be disabled button. */\r\n hidePrev: false,\r\n /* Hide next button in the last step? Otherwise, it will be disabled button (note: this will also hide the \"Done\" button) */\r\n hideNext: false,\r\n /* Change the Next button to Done in the last step of the intro? otherwise, it will render a disabled button */\r\n nextToDone: true,\r\n /* Default tooltip box position */\r\n tooltipPosition: \"bottom\",\r\n /* Next CSS class for tooltip boxes */\r\n tooltipClass: \"\",\r\n /* Start intro for a group of elements */\r\n group: \"\",\r\n /* CSS class that is added to the helperLayer */\r\n highlightClass: \"\",\r\n /* Close introduction when pressing Escape button? */\r\n exitOnEsc: true,\r\n /* Close introduction when clicking on overlay layer? */\r\n exitOnOverlayClick: true,\r\n /* Display the pagination detail */\r\n showStepNumbers: false,\r\n /* Pagination \"of\" label */\r\n stepNumbersOfLabel: \"of\",\r\n /* Let user use keyboard to navigate the tour? */\r\n keyboardNavigation: true,\r\n /* Show tour control buttons? */\r\n showButtons: true,\r\n /* Show tour bullets? */\r\n showBullets: true,\r\n /* Show tour progress? */\r\n showProgress: false,\r\n /* Scroll to highlighted element? */\r\n scrollToElement: true,\r\n /*\r\n * Should we scroll the tooltip or target element?\r\n *\r\n * Options are: 'element' or 'tooltip'\r\n */\r\n scrollTo: \"element\",\r\n /* Reference Element to manage scroll */\r\n scrollElRef: null,\r\n /* Padding to add after scrolling when element is not in the viewport (in pixels) */\r\n scrollPadding: 30,\r\n /* Set the overlay opacity */\r\n overlayOpacity: 0.5,\r\n /* To determine the tooltip position automatically based on the window.width/height */\r\n autoPosition: true,\r\n /* Precedence of positions, when auto is enabled */\r\n positionPrecedence: [\"bottom\", \"top\", \"right\", \"left\"],\r\n /* Disable an interaction with element? */\r\n disableInteraction: false,\r\n /* To display the \"Don't show again\" checkbox in the tour */\r\n dontShowAgain: false,\r\n dontShowAgainLabel: \"Don't show this again\",\r\n /* \"Don't show again\" cookie name and expiry (in days) */\r\n dontShowAgainCookie: \"introjs-dontShowAgain\",\r\n dontShowAgainCookieDays: 365,\r\n /* Set how much padding to be used around helper element */\r\n helperElementPadding: 10,\r\n /* Default hint position */\r\n hintPosition: \"top-middle\",\r\n /* Hint button label */\r\n hintButtonLabel: \"Got it\",\r\n /* Display the \"Got it\" button? */\r\n hintShowButton: true,\r\n /* Hints auto-refresh interval in ms (set to -1 to disable) */\r\n hintAutoRefreshInterval: 10,\r\n /* Adding animation to hints? */\r\n hintAnimation: true,\r\n /* additional classes to put on the buttons */\r\n buttonClass: \"introjs-button\",\r\n /* additional classes to put on progress bar */\r\n progressBarAdditionalClass: false,\r\n };\r\n }\r\n\r\n isActive() {\r\n if (this._options.dontShowAgain && getDontShowAgain.call(this)) {\r\n return false;\r\n }\r\n\r\n return this._options.isActive;\r\n }\r\n\r\n clone() {\r\n return new IntroJs(this._targetElement);\r\n }\r\n\r\n setOption(option, value) {\r\n this._options[option] = value;\r\n return this;\r\n }\r\n\r\n setOptions(options) {\r\n this._options = mergeOptions(this._options, options);\r\n return this;\r\n }\r\n\r\n async start() {\r\n await introForElement.call(this, this._targetElement);\r\n return this;\r\n }\r\n\r\n async goToStep(step: number) {\r\n await goToStep.call(this, step);\r\n return this;\r\n }\r\n\r\n addStep(options) {\r\n if (!this._options.steps) {\r\n this._options.steps = [];\r\n }\r\n\r\n this._options.steps.push(options);\r\n\r\n return this;\r\n }\r\n\r\n addSteps(steps: Step[]) {\r\n if (!steps.length) return this;\r\n\r\n for (let index = 0; index < steps.length; index++) {\r\n this.addStep(steps[index]);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n async goToStepNumber(step: number) {\r\n await goToStepNumber.call(this, step);\r\n return this;\r\n }\r\n\r\n async nextStep() {\r\n await nextStep.call(this);\r\n return this;\r\n }\r\n\r\n async previousStep() {\r\n await previousStep.call(this);\r\n return this;\r\n }\r\n\r\n currentStep() {\r\n return currentStep.call(this);\r\n }\r\n\r\n async exit(force: boolean) {\r\n await exitIntro.call(this, this._targetElement, force);\r\n return this;\r\n }\r\n\r\n refresh(refreshSteps?: boolean) {\r\n refresh.call(this, refreshSteps);\r\n return this;\r\n }\r\n\r\n setDontShowAgain(dontShowAgain: boolean) {\r\n setDontShowAgain.call(this, dontShowAgain);\r\n return this;\r\n }\r\n\r\n onbeforechange(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._introBeforeChangeCallback = providedCallback;\r\n } else {\r\n throw new Error(\r\n \"Provided callback for onbeforechange was not a function\"\r\n );\r\n }\r\n return this;\r\n }\r\n\r\n onchange(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._introChangeCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for onchange was not a function.\");\r\n }\r\n return this;\r\n }\r\n\r\n onafterchange(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._introAfterChangeCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for onafterchange was not a function\");\r\n }\r\n return this;\r\n }\r\n\r\n oncomplete(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._introCompleteCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for oncomplete was not a function.\");\r\n }\r\n return this;\r\n }\r\n\r\n onhintsadded(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._hintsAddedCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for onhintsadded was not a function.\");\r\n }\r\n return this;\r\n }\r\n\r\n onhintclick(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._hintClickCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for onhintclick was not a function.\");\r\n }\r\n return this;\r\n }\r\n\r\n onhintclose(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._hintCloseCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for onhintclose was not a function.\");\r\n }\r\n return this;\r\n }\r\n\r\n onstart(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._introStartCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for onstart was not a function.\");\r\n }\r\n return this;\r\n }\r\n\r\n onexit(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._introExitCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for onexit was not a function.\");\r\n }\r\n return this;\r\n }\r\n\r\n onskip(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._introSkipCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for onskip was not a function.\");\r\n }\r\n return this;\r\n }\r\n\r\n onbeforeexit(providedCallback: Function) {\r\n if (typeof providedCallback === \"function\") {\r\n this._introBeforeExitCallback = providedCallback;\r\n } else {\r\n throw new Error(\"Provided callback for onbeforeexit was not a function.\");\r\n }\r\n return this;\r\n }\r\n\r\n async addHints() {\r\n await populateHints.call(this, this._targetElement);\r\n return this;\r\n }\r\n\r\n async hideHint(stepId: number) {\r\n await hideHint.call(this, stepId);\r\n return this;\r\n }\r\n\r\n async hideHints() {\r\n await hideHints.call(this);\r\n return this;\r\n }\r\n\r\n showHint(stepId: number) {\r\n showHint.call(this, stepId);\r\n return this;\r\n }\r\n\r\n async showHints() {\r\n await showHints.call(this);\r\n return this;\r\n }\r\n\r\n removeHints() {\r\n removeHints.call(this);\r\n return this;\r\n }\r\n\r\n removeHint(stepId: number) {\r\n removeHint.call(this, stepId);\r\n return this;\r\n }\r\n\r\n async showHintDialog(stepId: number) {\r\n await showHintDialog.call(this, stepId);\r\n return this;\r\n }\r\n}\r\n\r\nconst introJs = (targetElm?: string | HTMLElement) => {\r\n let instance: IntroJs;\r\n\r\n if (typeof targetElm === \"object\") {\r\n //Ok, create a new instance\r\n instance = new IntroJs(targetElm);\r\n } else if (typeof targetElm === \"string\") {\r\n //select the target element with query selector\r\n const targetElement = document.querySelector(targetElm);\r\n\r\n if (targetElement) {\r\n instance = new IntroJs(targetElement);\r\n } else {\r\n throw new Error(\"There is no element with given selector.\");\r\n }\r\n } else {\r\n instance = new IntroJs(document.body);\r\n }\r\n // add instance to list of _instances\r\n // passing group to stamp to increment\r\n // from 0 onward somewhat reliably\r\n introJs.instances[stamp(instance, \"introjs-instance\")] = instance;\r\n\r\n return instance;\r\n};\r\n\r\n/**\r\n * Current IntroJs version\r\n *\r\n * @property version\r\n * @type String\r\n */\r\nintroJs.version = version;\r\n\r\n/**\r\n * key-val object helper for introJs instances\r\n *\r\n * @property instances\r\n * @type Object\r\n */\r\nintroJs.instances = {};\r\n\r\nexport default introJs;\r\n","/**\r\n * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1\r\n * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically\r\n *\r\n * @returns obj3 a new object based on obj1 and obj2\r\n */\r\n\r\nexport default function mergeOptions(\r\n obj1: A,\r\n obj2: B\r\n): A & B {\r\n const obj3 = {};\r\n\r\n let attrname;\r\n for (attrname in obj1) {\r\n obj3[attrname] = obj1[attrname];\r\n }\r\n for (attrname in obj2) {\r\n obj3[attrname] = obj2[attrname];\r\n }\r\n\r\n return obj3 as A & B;\r\n}\r\n"],"names":["keys","stamp","obj","key","arguments","length","undefined","forEach","arr","forEachFnc","completeFnc","i","len","DOMEvent","events_key","this","_id","type","listener","context","concat","on","useCapture","id","apply","handler","e","call","window","event","addEventListener","attachEvent","off","removeEventListener","detachEvent","addClass","element","className","SVGElement","pre","getAttribute","match","setAttribute","classList","split","cls","add","getPropValue","propName","propValue","currentStyle","document","defaultView","getComputedStyle","getPropertyValue","toLowerCase","setShowElement","targetElement","currentElementPosition","scrollParentToElement","_options","scrollToElement","parent","style","excludeStaticParent","position","overflowRegex","body","parentElement","test","overflow","overflowY","overflowX","getScrollParent","_introItems","_currentStep","scrollElRef","scrollTop","offsetTop","getWinSize","innerWidth","width","height","innerHeight","D","documentElement","clientWidth","clientHeight","scrollTo","tooltipLayer","rect","getBoundingClientRect","el","top","left","bottom","right","elementInViewport","winHeight","getWindowSize","scrollEl","scrollBy","scrollPadding","setAnchorAsButton","anchor","tabIndex","isFixed","nodeName","getOffset","relativeEl","docEl","pageYOffset","scrollLeft","pageXOffset","x","xr","relativeElPosition","tagName","Object","assign","removeClass","classNameRegex","replace","setStyle","cssText","rule","setHelperLayerPosition","helperLayer","currentElement","elementPosition","_targetElement","widthHeightPadding","helperElementPadding","checkRight","targetOffset","tooltipLayerStyleLeft","tooltipOffset","windowSize","checkLeft","tooltipLayerStyleRight","removeEntry","stringArray","stringToRemove","includes","splice","indexOf","_determineAutoPosition","desiredTooltipPosition","possiblePositions","positionPrecedence","slice","tooltipHeight","tooltipWidth","targetElementRect","calculatedPosition","pos","hyphenIndex","desiredAlignment","substr","offsetLeft","windowWidth","halfTooltipWidth","winWidth","Math","min","screen","possibleAlignments","_determineAutoAlignment","placeTooltip","arrowLayer","hintMode","currentStepObj","currentTooltipPosition","tooltipCssClass","marginLeft","marginTop","display","tooltipClass","filter","Boolean","join","autoPosition","tooltipLayerStyleLeftRight","showStepNumbers","removeShowElement","Array","from","querySelectorAll","elm","_createElement","tagname","attrs","createElement","setAttRegex","k","v","appendChild","animate","existingOpacity","opacity","setTimeout","_getProgress","parseInt","_disableInteraction","disableInteractionLayer","querySelector","_createBullets","self","bulletsLayer","showBullets","ulContainer","anchorClick","goToStep","_ref","step","innerLi","anchorLink","onclick","innerHTML","_recreateBullets","existing","parentNode","replaceChild","_updateBullets","oldReferenceLayer","_createProgressBar","progressLayer","showProgress","progressBar","progressBarAdditionalClass","_updateProgressBar","_showElement","_x","_showElement2","_asyncToGenerator","_regeneratorRuntime","mark","_callee4","oldHelperLayer","highlightClass","nextTooltipButton","prevTooltipButton","skipTooltipButton","oldHelperNumberLayer","oldtooltipLayer","oldTooltipTitleLayer","oldArrowLayer","oldtooltipContainer","referenceLayer","tooltipTextLayer","tooltipHeaderLayer","tooltipTitleLayer","buttonsLayer","dontShowAgainWrapper","dontShowAgainCheckbox","dontShowAgainCheckboxLabel","helperNumberLayer","_this","wrap","_context4","prev","next","_introChangeCallback","_lastShowElementTimer","clearTimeout","stepNumbersOfLabel","intro","title","focus","overlayOpacity","toString","showButtons","dontShowAgain","name","onchange","setDontShowAgain","target","checked","htmlFor","innerText","dontShowAgainLabel","_callee","_context","nextStep","_introCompleteCallback","exitIntro","stop","nextLabel","_callee2","_context2","previousStep","prevLabel","skipLabel","_callee3","_context3","_introSkipCallback","removeChild","disableInteraction","buttonClass","hidePrev","hideNext","nextToDone","doneLabel","_introAfterChangeCallback","_goToStep","goToStepNumber","_x2","_goToStepNumber","_currentStepNumber","_nextStep","continueStep","_direction","_introBeforeChangeCallback","sent","abrupt","showElement","_previousStep","currentStep","onKeyDown","_onKeyDown","code","which","charCode","keyCode","exitOnEsc","srcElement","click","preventDefault","returnValue","cloneObject","source","_typeof","temp","jQuery","debounce","func","timeout","timer","_len","args","_key","hintQuerySelectorAll","selector","hintsWrapper","hideHint","_hideHint","stepId","hint","removeHintTooltip","_hintCloseCallback","hideHints","showHints","_showHints","hints","_this4","showHint","populateHints","removeHints","_this2","removeHint","reAlignHints","_hintsAutoRefreshFunction","addHints","_addHints","getHintClick","_this5","evt","stopPropagation","cancelBubble","showHintDialog","item","hintAnimation","hintDot","hintPulse","alignHintPosition","hintPosition","_hintsAddedCallback","hintAutoRefreshInterval","hintElement","offset","iconWidth","iconHeight","_x3","_showHintDialog","_callee5","removedStep","tooltipWrapper","closeButton","_context5","_hintClickCallback","hintShowButton","hintButtonLabel","bind","tooltip","_x4","_populateHints","_callee6","targetElm","_this6","_context6","currentItem","push","tooltipPosition","_this3","_ref2","fetchIntroSteps","allIntroSteps","introItems","steps","floatingElementQuery","group","hasAttribute","tempIntroItems","z","sort","a","b","refresh","refreshSteps","onResize","_exitIntro","force","continueExit","overlayLayers","_introBeforeExitCallback","overlayLayer","_introExitCallback","addOverlayLayer","exitOnOverlayClick","cursor","introForElement","_introForElement","isActive","_introStartCallback","keyboardNavigation","setCookie","value","days","_cookie","cookie","_defineProperty","date","Date","setTime","getTime","expires","toUTCString","getCookie","_el$split2","_slicedToArray","trim","dontShowAgainCookieValue","dontShowAgainCookie","dontShowAgainCookieDays","getDontShowAgain","dontShowCookie","IntroJs","_classCallCheck","_showHintDialog2","_showHints2","_hideHints2","_hideHint2","_exit","_previousStep2","_nextStep2","_goToStepNumber2","_goToStep2","_start","option","options","obj1","obj2","attrname","obj3","mergeOptions","index","addStep","providedCallback","Error","_callee7","_context7","_callee8","_context8","_callee9","_context9","_callee10","_context10","_callee11","_context11","_x5","introJs","instance","instances","version"],"mappings":"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"}