From bd615c447e7010aa948c3b2d04dd5e8660bfdc5b Mon Sep 17 00:00:00 2001 From: texpert Date: Tue, 27 Aug 2024 23:12:30 +0300 Subject: [PATCH 1/3] Upgrade IntroJS to 7.2.0 --- .../camaleon_cms/admin/introjs/_intro.min.js | 1324 +---------------- .../camaleon_cms/admin/_custom_admin.css.scss | 28 +- .../admin/introjs/_introjs.min.css | 3 +- spec/support/common.rb | 1 - 4 files changed, 32 insertions(+), 1324 deletions(-) diff --git a/app/assets/javascripts/camaleon_cms/admin/introjs/_intro.min.js b/app/assets/javascripts/camaleon_cms/admin/introjs/_intro.min.js index 43b552fc0..5e7493473 100644 --- a/app/assets/javascripts/camaleon_cms/admin/introjs/_intro.min.js +++ b/app/assets/javascripts/camaleon_cms/admin/introjs/_intro.min.js @@ -1,1317 +1,11 @@ -/** - * Intro.js v1.1.1 - * https://github.com/usablica/intro.js - * MIT licensed +/*! + * Intro.js v7.2.0 + * https://introjs.com * - * Copyright (C) 2013 usabli.ca - A weekend project by Afshin Mehrabani (@afshinmeh) + * Copyright (C) 2012-2023 Afshin Mehrabani (@afshinmeh). + * https://introjs.com + * + * Date: Mon, 14 Aug 2023 19:47:14 GMT */ - -(function (root, factory) { - if (typeof exports === 'object') { - // CommonJS - factory(exports); - } else if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['exports'], factory); - } else { - // Browser globals - factory(root); - } -} (this, function (exports) { - //Default config/variables - var VERSION = '1.1.1'; - - /** - * IntroJs main class - * - * @class IntroJs - */ - function IntroJs(obj) { - this._targetElement = obj; - - this._options = { - /* Next button label in tooltip box */ - nextLabel: 'Next →', - /* Previous button label in tooltip box */ - prevLabel: '← Back', - /* Skip button label in tooltip box */ - skipLabel: 'Skip', - /* Done button label in tooltip box */ - doneLabel: 'Done', - /* Default tooltip box position */ - tooltipPosition: 'bottom', - /* Next CSS class for tooltip boxes */ - tooltipClass: '', - /* CSS class that is added to the helperLayer */ - highlightClass: '', - /* Close introduction when pressing Escape button? */ - exitOnEsc: true, - /* Close introduction when clicking on overlay layer? */ - exitOnOverlayClick: true, - /* Show step numbers in introduction? */ - showStepNumbers: true, - /* Let user use keyboard to navigate the tour? */ - keyboardNavigation: true, - /* Show tour control buttons? */ - showButtons: true, - /* Show tour bullets? */ - showBullets: true, - /* Show tour progress? */ - showProgress: false, - /* Scroll to highlighted element? */ - scrollToElement: true, - /* Set the overlay opacity */ - overlayOpacity: 0.8, - /* Precedence of positions, when auto is enabled */ - positionPrecedence: ["bottom", "top", "right", "left"], - /* Disable an interaction with element? */ - disableInteraction: false - }; - } - - /** - * Initiate a new introduction/guide from an element in the page - * - * @api private - * @method _introForElement - * @param {Object} targetElm - * @returns {Boolean} Success or not? - */ - function _introForElement(targetElm) { - var introItems = [], - self = this; - - if (this._options.steps) { - //use steps passed programmatically - for (var i = 0, stepsLength = this._options.steps.length; i < stepsLength; i++) { - var currentItem = _cloneObject(this._options.steps[i]); - //set the step - currentItem.step = introItems.length + 1; - //use querySelector function only when developer used CSS selector - if (typeof(currentItem.element) === 'string') { - //grab the element with given selector from the page - currentItem.element = document.querySelector(currentItem.element); - } - - //intro without element - if (typeof(currentItem.element) === 'undefined' || currentItem.element == null) { - var floatingElementQuery = document.querySelector(".introjsFloatingElement"); - - if (floatingElementQuery == null) { - floatingElementQuery = document.createElement('div'); - floatingElementQuery.className = 'introjsFloatingElement'; - - document.body.appendChild(floatingElementQuery); - } - - currentItem.element = floatingElementQuery; - currentItem.position = 'floating'; - } - - if (currentItem.element != null) { - introItems.push(currentItem); - } - } - - } else { - //use steps from data-* annotations - var allIntroSteps = targetElm.querySelectorAll('*[data-intro]'); - //if there's no element to intro - if (allIntroSteps.length < 1) { - return false; - } - - //first add intro items with data-step - for (var i = 0, elmsLength = allIntroSteps.length; i < elmsLength; i++) { - var currentElement = allIntroSteps[i]; - var step = parseInt(currentElement.getAttribute('data-step'), 10); - - if (step > 0) { - introItems[step - 1] = { - element: currentElement, - intro: currentElement.getAttribute('data-intro'), - step: parseInt(currentElement.getAttribute('data-step'), 10), - tooltipClass: currentElement.getAttribute('data-tooltipClass'), - highlightClass: currentElement.getAttribute('data-highlightClass'), - position: currentElement.getAttribute('data-position') || this._options.tooltipPosition - }; - } - } - - //next add intro items without data-step - //todo: we need a cleanup here, two loops are redundant - var nextStep = 0; - for (var i = 0, elmsLength = allIntroSteps.length; i < elmsLength; i++) { - var currentElement = allIntroSteps[i]; - - if (currentElement.getAttribute('data-step') == null) { - - while (true) { - if (typeof introItems[nextStep] == 'undefined') { - break; - } else { - nextStep++; - } - } - - introItems[nextStep] = { - element: currentElement, - intro: currentElement.getAttribute('data-intro'), - step: nextStep + 1, - tooltipClass: currentElement.getAttribute('data-tooltipClass'), - highlightClass: currentElement.getAttribute('data-highlightClass'), - position: currentElement.getAttribute('data-position') || this._options.tooltipPosition - }; - } - } - } - - //removing undefined/null elements - var tempIntroItems = []; - for (var z = 0; z < introItems.length; z++) { - introItems[z] && tempIntroItems.push(introItems[z]); // copy non-empty values to the end of the array - } - - introItems = tempIntroItems; - - //Ok, sort all items with given steps - introItems.sort(function (a, b) { - return a.step - b.step; - }); - - //set it to the introJs object - self._introItems = introItems; - - //add overlay layer to the page - if(_addOverlayLayer.call(self, targetElm)) { - //then, start the show - _nextStep.call(self); - - var skipButton = targetElm.querySelector('.introjs-skipbutton'), - nextStepButton = targetElm.querySelector('.introjs-nextbutton'); - - self._onKeyDown = function(e) { - if (e.keyCode === 27 && self._options.exitOnEsc == true) { - //escape key pressed, exit the intro - //check if exit callback is defined - if (self._introExitCallback != undefined) { - self._introExitCallback.call(self); - } - _exitIntro.call(self, targetElm); - } else if(e.keyCode === 37) { - //left arrow - _previousStep.call(self); - } else if (e.keyCode === 39) { - //right arrow - _nextStep.call(self); - } else if (e.keyCode === 13) { - //srcElement === ie - var target = e.target || e.srcElement; - if (target && target.className.indexOf('introjs-prevbutton') > 0) { - //user hit enter while focusing on previous button - _previousStep.call(self); - } else if (target && target.className.indexOf('introjs-skipbutton') > 0) { - //user hit enter while focusing on skip button - if (self._introItems.length - 1 == self._currentStep && typeof (self._introCompleteCallback) === 'function') { - self._introCompleteCallback.call(self); - } - //check if any callback is defined - if (self._introExitCallback != undefined) { - self._introExitCallback.call(self); - } - _exitIntro.call(self, targetElm); - } else { - //default behavior for responding to enter - _nextStep.call(self); - } - - //prevent default behaviour on hitting Enter, to prevent steps being skipped in some browsers - if(e.preventDefault) { - e.preventDefault(); - } else { - e.returnValue = false; - } - } - }; - - self._onResize = function(e) { - _setHelperLayerPosition.call(self, document.querySelector('.introjs-helperLayer')); - _setHelperLayerPosition.call(self, document.querySelector('.introjs-tooltipReferenceLayer')); - }; - - if (window.addEventListener) { - if (this._options.keyboardNavigation) { - window.addEventListener('keydown', self._onKeyDown, true); - } - //for window resize - window.addEventListener('resize', self._onResize, true); - } else if (document.attachEvent) { //IE - if (this._options.keyboardNavigation) { - document.attachEvent('onkeydown', self._onKeyDown); - } - //for window resize - document.attachEvent('onresize', self._onResize); - } - } - return false; - } - - /* - * makes a copy of the object - * @api private - * @method _cloneObject - */ - function _cloneObject(object) { - if (object == null || typeof (object) != 'object' || typeof (object.nodeType) != 'undefined') { - return object; - } - var temp = {}; - for (var key in object) { - if (typeof (jQuery) != 'undefined' && object[key] instanceof jQuery) { - temp[key] = object[key]; - } else { - temp[key] = _cloneObject(object[key]); - } - } - return temp; - } - /** - * Go to specific step of introduction - * - * @api private - * @method _goToStep - */ - function _goToStep(step) { - //because steps starts with zero - this._currentStep = step - 2; - if (typeof (this._introItems) !== 'undefined') { - _nextStep.call(this); - } - } - - /** - * Go to next step on intro - * - * @api private - * @method _nextStep - */ - function _nextStep() { - this._direction = 'forward'; - - if (typeof (this._currentStep) === 'undefined') { - this._currentStep = 0; - } else { - ++this._currentStep; - } - - if ((this._introItems.length) <= this._currentStep) { - //end of the intro - //check if any callback is defined - if (typeof (this._introCompleteCallback) === 'function') { - this._introCompleteCallback.call(this); - } - _exitIntro.call(this, this._targetElement); - return; - } - - var nextStep = this._introItems[this._currentStep]; - if (typeof (this._introBeforeChangeCallback) !== 'undefined') { - this._introBeforeChangeCallback.call(this, nextStep.element); - } - - //_showElement.call(this, nextStep); - var w = $(nextStep.element).attr("data-wait"); - var thiss = this; - var _f = function(){ _showElement.call(thiss, nextStep); }; - if(w) setTimeout(_f, w); else _f(); - } - - /** - * Go to previous step on intro - * - * @api private - * @method _nextStep - */ - function _previousStep() { - this._direction = 'backward'; - - if (this._currentStep === 0) { - return false; - } - - var nextStep = this._introItems[--this._currentStep]; - if (typeof (this._introBeforeChangeCallback) !== 'undefined') { - this._introBeforeChangeCallback.call(this, nextStep.element); - } - - //_showElement.call(this, nextStep); - var w = $(nextStep.element).attr("data-wait"); - var thiss = this; - var _f = function(){ _showElement.call(thiss, nextStep); }; - if(w) setTimeout(_f, w); else _f(); - } - - /** - * Exit from intro - * - * @api private - * @method _exitIntro - * @param {Object} targetElement - */ - function _exitIntro(targetElement) { - //remove overlay layer from the page - var overlayLayer = targetElement.querySelector('.introjs-overlay'); - - //return if intro already completed or skipped - if (overlayLayer == null) { - return; - } - - //for fade-out animation - overlayLayer.style.opacity = 0; - setTimeout(function () { - if (overlayLayer.parentNode) { - overlayLayer.parentNode.removeChild(overlayLayer); - } - }, 500); - - //remove all helper layers - var helperLayer = targetElement.querySelector('.introjs-helperLayer'); - if (helperLayer) { - helperLayer.parentNode.removeChild(helperLayer); - } - - var referenceLayer = targetElement.querySelector('.introjs-tooltipReferenceLayer'); - if (referenceLayer) { - referenceLayer.parentNode.removeChild(referenceLayer); - } - //remove disableInteractionLayer - var disableInteractionLayer = targetElement.querySelector('.introjs-disableInteraction'); - if (disableInteractionLayer) { - disableInteractionLayer.parentNode.removeChild(disableInteractionLayer); - } - - //remove intro floating element - var floatingElement = document.querySelector('.introjsFloatingElement'); - if (floatingElement) { - floatingElement.parentNode.removeChild(floatingElement); - } - - //remove `introjs-showElement` class from the element - var showElement = document.querySelector('.introjs-showElement'); - if (showElement) { - showElement.className = showElement.className.replace(/introjs-[a-zA-Z]+/g, '').replace(/^\s+|\s+$/g, ''); // This is a manual trim. - } - - //remove `introjs-fixParent` class from the elements - var fixParents = document.querySelectorAll('.introjs-fixParent'); - if (fixParents && fixParents.length > 0) { - for (var i = fixParents.length - 1; i >= 0; i--) { - fixParents[i].className = fixParents[i].className.replace(/introjs-fixParent/g, '').replace(/^\s+|\s+$/g, ''); - } - } - - //clean listeners - if (window.removeEventListener) { - window.removeEventListener('keydown', this._onKeyDown, true); - } else if (document.detachEvent) { //IE - document.detachEvent('onkeydown', this._onKeyDown); - } - - //set the step to zero - this._currentStep = undefined; - } - - /** - * Render tooltip box in the page - * - * @api private - * @method _placeTooltip - * @param {HTMLElement} targetElement - * @param {HTMLElement} tooltipLayer - * @param {HTMLElement} arrowLayer - * @param {HTMLElement} helperNumberLayer - */ - function _placeTooltip(targetElement, tooltipLayer, arrowLayer, helperNumberLayer) { - var tooltipCssClass = '', - currentStepObj, - tooltipOffset, - targetOffset, - windowSize, - currentTooltipPosition; - - //reset the old style - tooltipLayer.style.top = null; - tooltipLayer.style.right = null; - tooltipLayer.style.bottom = null; - tooltipLayer.style.left = null; - tooltipLayer.style.marginLeft = null; - tooltipLayer.style.marginTop = null; - - arrowLayer.style.display = 'inherit'; - - if (typeof(helperNumberLayer) != 'undefined' && helperNumberLayer != null) { - helperNumberLayer.style.top = null; - helperNumberLayer.style.left = null; - } - - //prevent error when `this._currentStep` is undefined - if (!this._introItems[this._currentStep]) return; - - //if we have a custom css class for each step - currentStepObj = this._introItems[this._currentStep]; - if (typeof (currentStepObj.tooltipClass) === 'string') { - tooltipCssClass = currentStepObj.tooltipClass; - } else { - tooltipCssClass = this._options.tooltipClass; - } - - tooltipLayer.className = ('introjs-tooltip ' + tooltipCssClass).replace(/^\s+|\s+$/g, ''); - - currentTooltipPosition = this._introItems[this._currentStep].position; - if ((currentTooltipPosition == "auto" || this._options.tooltipPosition == "auto")) { - if (currentTooltipPosition != "floating") { // Floating is always valid, no point in calculating - currentTooltipPosition = _determineAutoPosition.call(this, targetElement, tooltipLayer, currentTooltipPosition); - } - } - targetOffset = _getOffset(targetElement); - tooltipOffset = _getOffset(tooltipLayer); - windowSize = _getWinSize(); - switch (currentTooltipPosition) { - case 'top': - arrowLayer.className = 'introjs-arrow bottom'; - - var tooltipLayerStyleLeft = 15; - _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer); - tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px'; - break; - case 'right': - tooltipLayer.style.left = (targetOffset.width + 20) + 'px'; - if (targetOffset.top + tooltipOffset.height > windowSize.height) { - // In this case, right would have fallen below the bottom of the screen. - // Modify so that the bottom of the tooltip connects with the target - arrowLayer.className = "introjs-arrow left-bottom"; - tooltipLayer.style.top = "-" + (tooltipOffset.height - targetOffset.height - 20) + "px"; - } else { - arrowLayer.className = 'introjs-arrow left'; - } - break; - case 'left': - if (this._options.showStepNumbers == true) { - tooltipLayer.style.top = '15px'; - } - - if (targetOffset.top + tooltipOffset.height > windowSize.height) { - // In this case, left would have fallen below the bottom of the screen. - // Modify so that the bottom of the tooltip connects with the target - tooltipLayer.style.top = "-" + (tooltipOffset.height - targetOffset.height - 20) + "px"; - arrowLayer.className = 'introjs-arrow right-bottom'; - } else { - arrowLayer.className = 'introjs-arrow right'; - } - tooltipLayer.style.right = (targetOffset.width + 20) + 'px'; - - break; - case 'floating': - arrowLayer.style.display = 'none'; - - //we have to adjust the top and left of layer manually for intro items without element - tooltipLayer.style.left = '50%'; - tooltipLayer.style.top = '50%'; - tooltipLayer.style.marginLeft = '-' + (tooltipOffset.width / 2) + 'px'; - tooltipLayer.style.marginTop = '-' + (tooltipOffset.height / 2) + 'px'; - - if (typeof(helperNumberLayer) != 'undefined' && helperNumberLayer != null) { - helperNumberLayer.style.left = '-' + ((tooltipOffset.width / 2) + 18) + 'px'; - helperNumberLayer.style.top = '-' + ((tooltipOffset.height / 2) + 18) + 'px'; - } - - break; - case 'bottom-right-aligned': - arrowLayer.className = 'introjs-arrow top-right'; - - var tooltipLayerStyleRight = 0; - _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer); - tooltipLayer.style.top = (targetOffset.height + 20) + 'px'; - break; - - case 'bottom-middle-aligned': - arrowLayer.className = 'introjs-arrow top-middle'; - - var tooltipLayerStyleLeftRight = targetOffset.width / 2 - tooltipOffset.width / 2; - if (_checkLeft(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, tooltipLayer)) { - tooltipLayer.style.right = null; - _checkRight(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, windowSize, tooltipLayer); - } - tooltipLayer.style.top = (targetOffset.height + 20) + 'px'; - break; - - case 'bottom-left-aligned': - // Bottom-left-aligned is the same as the default bottom - case 'bottom': - // Bottom going to follow the default behavior - default: - arrowLayer.className = 'introjs-arrow top'; - - var tooltipLayerStyleLeft = 0; - _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer); - tooltipLayer.style.top = (targetOffset.height + 20) + 'px'; - break; - } - } - - /** - * Set tooltip left so it doesn't go off the right side of the window - * - * @return boolean true, if tooltipLayerStyleLeft is ok. false, otherwise. - */ - function _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer) { - if (targetOffset.left + tooltipLayerStyleLeft + tooltipOffset.width > windowSize.width) { - // off the right side of the window - tooltipLayer.style.left = (windowSize.width - tooltipOffset.width - targetOffset.left) + 'px'; - return false; - } - tooltipLayer.style.left = tooltipLayerStyleLeft + 'px'; - return true; - } - - /** - * Set tooltip right so it doesn't go off the left side of the window - * - * @return boolean true, if tooltipLayerStyleRight is ok. false, otherwise. - */ - function _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer) { - if (targetOffset.left + targetOffset.width - tooltipLayerStyleRight - tooltipOffset.width < 0) { - // off the left side of the window - tooltipLayer.style.left = (-targetOffset.left) + 'px'; - return false; - } - tooltipLayer.style.right = tooltipLayerStyleRight + 'px'; - return true; - } - - /** - * Determines the position of the tooltip based on the position precedence and availability - * of screen space. - * - * @param {Object} targetElement - * @param {Object} tooltipLayer - * @param {Object} desiredTooltipPosition - * - */ - function _determineAutoPosition(targetElement, tooltipLayer, desiredTooltipPosition) { - - // Take a clone of position precedence. These will be the available - var possiblePositions = this._options.positionPrecedence.slice(); - - var windowSize = _getWinSize(); - var tooltipHeight = _getOffset(tooltipLayer).height + 10; - var tooltipWidth = _getOffset(tooltipLayer).width + 20; - var targetOffset = _getOffset(targetElement); - - // If we check all the possible areas, and there are no valid places for the tooltip, the element - // must take up most of the screen real estate. Show the tooltip floating in the middle of the screen. - var calculatedPosition = "floating"; - - // Check if the width of the tooltip + the starting point would spill off the right side of the screen - // If no, neither bottom or top are valid - if (targetOffset.left + tooltipWidth > windowSize.width || ((targetOffset.left + (targetOffset.width / 2)) - tooltipWidth) < 0) { - _removeEntry(possiblePositions, "bottom"); - _removeEntry(possiblePositions, "top"); - } else { - // Check for space below - if ((targetOffset.height + targetOffset.top + tooltipHeight) > windowSize.height) { - _removeEntry(possiblePositions, "bottom"); - } - - // Check for space above - if (targetOffset.top - tooltipHeight < 0) { - _removeEntry(possiblePositions, "top"); - } - } - - // Check for space to the right - if (targetOffset.width + targetOffset.left + tooltipWidth > windowSize.width) { - _removeEntry(possiblePositions, "right"); - } - - // Check for space to the left - if (targetOffset.left - tooltipWidth < 0) { - _removeEntry(possiblePositions, "left"); - } - - // At this point, our array only has positions that are valid. Pick the first one, as it remains in order - if (possiblePositions.length > 0) { - calculatedPosition = possiblePositions[0]; - } - - // If the requested position is in the list, replace our calculated choice with that - if (desiredTooltipPosition && desiredTooltipPosition != "auto") { - if (possiblePositions.indexOf(desiredTooltipPosition) > -1) { - calculatedPosition = desiredTooltipPosition; - } - } - - return calculatedPosition; - } - - /** - * Remove an entry from a string array if it's there, does nothing if it isn't there. - * - * @param {Array} stringArray - * @param {String} stringToRemove - */ - function _removeEntry(stringArray, stringToRemove) { - if (stringArray.indexOf(stringToRemove) > -1) { - stringArray.splice(stringArray.indexOf(stringToRemove), 1); - } - } - - /** - * Update the position of the helper layer on the screen - * - * @api private - * @method _setHelperLayerPosition - * @param {Object} helperLayer - */ - function _setHelperLayerPosition(helperLayer) { - if (helperLayer) { - //prevent error when `this._currentStep` in undefined - if (!this._introItems[this._currentStep]) return; - - var currentElement = this._introItems[this._currentStep], - elementPosition = _getOffset(currentElement.element), - widthHeightPadding = 10; - - if (currentElement.position == 'floating') { - widthHeightPadding = 0; - } - - //set new position to helper layer - helperLayer.setAttribute('style', 'width: ' + (elementPosition.width + widthHeightPadding) + 'px; ' + - 'height:' + (elementPosition.height + widthHeightPadding) + 'px; ' + - 'top:' + (elementPosition.top - 5) + 'px;' + - 'left: ' + (elementPosition.left - 5) + 'px;'); - - } - } - - /** - * Add disableinteraction layer and adjust the size and position of the layer - * - * @api private - * @method _disableInteraction - */ - function _disableInteraction () { - var disableInteractionLayer = document.querySelector('.introjs-disableInteraction'); - if (disableInteractionLayer === null) { - disableInteractionLayer = document.createElement('div'); - disableInteractionLayer.className = 'introjs-disableInteraction'; - this._targetElement.appendChild(disableInteractionLayer); - } - - _setHelperLayerPosition.call(this, disableInteractionLayer); - } - - /** - * Show an element on the page - * - * @api private - * @method _showElement - * @param {Object} targetElement - */ - function _showElement(targetElement) { - - if (typeof (this._introChangeCallback) !== 'undefined') { - this._introChangeCallback.call(this, targetElement.element); - } - - var self = this, - oldHelperLayer = document.querySelector('.introjs-helperLayer'), - oldReferenceLayer = document.querySelector('.introjs-tooltipReferenceLayer'), - highlightClass = 'introjs-helperLayer', - elementPosition = _getOffset(targetElement.element); - - //check for a current step highlight class - if (typeof (targetElement.highlightClass) === 'string') { - highlightClass += (' ' + targetElement.highlightClass); - } - //check for options highlight class - if (typeof (this._options.highlightClass) === 'string') { - highlightClass += (' ' + this._options.highlightClass); - } - - if (oldHelperLayer != null) { - var oldHelperNumberLayer = oldReferenceLayer.querySelector('.introjs-helperNumberLayer'), - oldtooltipLayer = oldReferenceLayer.querySelector('.introjs-tooltiptext'), - oldArrowLayer = oldReferenceLayer.querySelector('.introjs-arrow'), - oldtooltipContainer = oldReferenceLayer.querySelector('.introjs-tooltip'), - skipTooltipButton = oldReferenceLayer.querySelector('.introjs-skipbutton'), - prevTooltipButton = oldReferenceLayer.querySelector('.introjs-prevbutton'), - nextTooltipButton = oldReferenceLayer.querySelector('.introjs-nextbutton'); - - //update or reset the helper highlight class - oldHelperLayer.className = highlightClass; - //hide the tooltip - oldtooltipContainer.style.opacity = 0; - oldtooltipContainer.style.display = "none"; - - if (oldHelperNumberLayer != null) { - var lastIntroItem = this._introItems[(targetElement.step - 2 >= 0 ? targetElement.step - 2 : 0)]; - - if (lastIntroItem != null && (this._direction == 'forward' && lastIntroItem.position == 'floating') || (this._direction == 'backward' && targetElement.position == 'floating')) { - oldHelperNumberLayer.style.opacity = 0; - } - } - - //set new position to helper layer - _setHelperLayerPosition.call(self, oldHelperLayer); - _setHelperLayerPosition.call(self, oldReferenceLayer); - - //remove `introjs-fixParent` class from the elements - var fixParents = document.querySelectorAll('.introjs-fixParent'); - if (fixParents && fixParents.length > 0) { - for (var i = fixParents.length - 1; i >= 0; i--) { - fixParents[i].className = fixParents[i].className.replace(/introjs-fixParent/g, '').replace(/^\s+|\s+$/g, ''); - }; - } - - //remove old classes - var oldShowElement = document.querySelector('.introjs-showElement'); - oldShowElement.className = oldShowElement.className.replace(/introjs-[a-zA-Z]+/g, '').replace(/^\s+|\s+$/g, ''); - - //we should wait until the CSS3 transition is competed (it's 0.3 sec) to prevent incorrect `height` and `width` calculation - if (self._lastShowElementTimer) { - clearTimeout(self._lastShowElementTimer); - } - self._lastShowElementTimer = setTimeout(function() { - //set current step to the label - if (oldHelperNumberLayer != null) { - oldHelperNumberLayer.innerHTML = targetElement.step; - } - //set current tooltip text - oldtooltipLayer.innerHTML = targetElement.intro; - //set the tooltip position - oldtooltipContainer.style.display = "block"; - _placeTooltip.call(self, targetElement.element, oldtooltipContainer, oldArrowLayer, oldHelperNumberLayer); - - //change active bullet - oldReferenceLayer.querySelector('.introjs-bullets li > a.active').className = ''; - oldReferenceLayer.querySelector('.introjs-bullets li > a[data-stepnumber="' + targetElement.step + '"]').className = 'active'; - - oldReferenceLayer.querySelector('.introjs-progress .introjs-progressbar').setAttribute('style', 'width:' + _getProgress.call(self) + '%;'); - - //show the tooltip - oldtooltipContainer.style.opacity = 1; - if (oldHelperNumberLayer) oldHelperNumberLayer.style.opacity = 1; - - //reset button focus - if (nextTooltipButton.tabIndex === -1) { - //tabindex of -1 means we are at the end of the tour - focus on skip / done - skipTooltipButton.focus(); - } else { - //still in the tour, focus on next - nextTooltipButton.focus(); - } - }, 350); - - } else { - var helperLayer = document.createElement('div'), - referenceLayer = document.createElement('div'), - arrowLayer = document.createElement('div'), - tooltipLayer = document.createElement('div'), - tooltipTextLayer = document.createElement('div'), - bulletsLayer = document.createElement('div'), - progressLayer = document.createElement('div'), - buttonsLayer = document.createElement('div'); - - helperLayer.className = highlightClass; - referenceLayer.className = 'introjs-tooltipReferenceLayer'; - - //set new position to helper layer - _setHelperLayerPosition.call(self, helperLayer); - _setHelperLayerPosition.call(self, referenceLayer); - - //add helper layer to target element - this._targetElement.appendChild(helperLayer); - this._targetElement.appendChild(referenceLayer); - - arrowLayer.className = 'introjs-arrow'; - - tooltipTextLayer.className = 'introjs-tooltiptext'; - tooltipTextLayer.innerHTML = targetElement.intro; - - bulletsLayer.className = 'introjs-bullets'; - - if (this._options.showBullets === false) { - bulletsLayer.style.display = 'none'; - } - - var ulContainer = document.createElement('ul'); - - for (var i = 0, stepsLength = this._introItems.length; i < stepsLength; i++) { - var innerLi = document.createElement('li'); - var anchorLink = document.createElement('a'); - - anchorLink.onclick = function() { - self.goToStep(this.getAttribute('data-stepnumber')); - }; - - if (i === (targetElement.step-1)) anchorLink.className = 'active'; - - anchorLink.href = 'javascript:void(0);'; - anchorLink.innerHTML = " "; - anchorLink.setAttribute('data-stepnumber', this._introItems[i].step); - - innerLi.appendChild(anchorLink); - ulContainer.appendChild(innerLi); - } - - bulletsLayer.appendChild(ulContainer); - - progressLayer.className = 'introjs-progress'; - - if (this._options.showProgress === false) { - progressLayer.style.display = 'none'; - } - var progressBar = document.createElement('div'); - progressBar.className = 'introjs-progressbar'; - progressBar.setAttribute('style', 'width:' + _getProgress.call(this) + '%;'); - - progressLayer.appendChild(progressBar); - - buttonsLayer.className = 'introjs-tooltipbuttons'; - if (this._options.showButtons === false) { - buttonsLayer.style.display = 'none'; - } - - tooltipLayer.className = 'introjs-tooltip'; - tooltipLayer.appendChild(tooltipTextLayer); - tooltipLayer.appendChild(bulletsLayer); - tooltipLayer.appendChild(progressLayer); - - //add helper layer number - if (this._options.showStepNumbers == true) { - var helperNumberLayer = document.createElement('span'); - helperNumberLayer.className = 'introjs-helperNumberLayer'; - helperNumberLayer.innerHTML = targetElement.step; - referenceLayer.appendChild(helperNumberLayer); - } - - tooltipLayer.appendChild(arrowLayer); - referenceLayer.appendChild(tooltipLayer); - - //next button - var nextTooltipButton = document.createElement('a'); - - nextTooltipButton.onclick = function() { - if (self._introItems.length - 1 != self._currentStep) { - _nextStep.call(self); - } - }; - - nextTooltipButton.href = 'javascript:void(0);'; - nextTooltipButton.innerHTML = this._options.nextLabel; - - //previous button - var prevTooltipButton = document.createElement('a'); - - prevTooltipButton.onclick = function() { - if (self._currentStep != 0) { - _previousStep.call(self); - } - }; - - prevTooltipButton.href = 'javascript:void(0);'; - prevTooltipButton.innerHTML = this._options.prevLabel; - - //skip button - var skipTooltipButton = document.createElement('a'); - skipTooltipButton.className = 'introjs-button introjs-skipbutton btn'; - skipTooltipButton.id = 'introjs_skipbutton'; - skipTooltipButton.href = 'javascript:void(0);'; - skipTooltipButton.innerHTML = this._options.skipLabel; - - skipTooltipButton.onclick = function() { - if (self._introItems.length - 1 == self._currentStep && typeof (self._introCompleteCallback) === 'function') { - self._introCompleteCallback.call(self); - } - - if (self._introItems.length - 1 != self._currentStep && typeof (self._introExitCallback) === 'function') { - self._introExitCallback.call(self); - } - - _exitIntro.call(self, self._targetElement); - }; - - buttonsLayer.appendChild(skipTooltipButton); - - //in order to prevent displaying next/previous button always - if (this._introItems.length > 1) { - buttonsLayer.appendChild(prevTooltipButton); - buttonsLayer.appendChild(nextTooltipButton); - } - - tooltipLayer.appendChild(buttonsLayer); - - //set proper position - _placeTooltip.call(self, targetElement.element, tooltipLayer, arrowLayer, helperNumberLayer); - } - - //disable interaction - if (this._options.disableInteraction === true) { - _disableInteraction.call(self); - } - - prevTooltipButton.removeAttribute('tabIndex'); - nextTooltipButton.removeAttribute('tabIndex'); - - if (this._currentStep == 0 && this._introItems.length > 1) { - prevTooltipButton.className = 'introjs-button introjs-prevbutton introjs-disabled disabled btn btn-success'; - prevTooltipButton.tabIndex = '-1'; - nextTooltipButton.className = 'introjs-button introjs-nextbutton btn btn-primary'; - skipTooltipButton.innerHTML = this._options.skipLabel; - } else if (this._introItems.length - 1 == this._currentStep || this._introItems.length == 1) { - skipTooltipButton.innerHTML = this._options.doneLabel; - prevTooltipButton.className = 'introjs-button introjs-prevbutton btn btn-success'; - nextTooltipButton.className = 'introjs-button introjs-nextbutton introjs-disabled disabled btn btn-primary'; - nextTooltipButton.tabIndex = '-1'; - } else { - prevTooltipButton.className = 'introjs-button introjs-prevbutton btn btn-success'; - nextTooltipButton.className = 'introjs-button introjs-nextbutton btn btn-primary'; - skipTooltipButton.innerHTML = this._options.skipLabel; - } - - //Set focus on "next" button, so that hitting Enter always moves you onto the next step - nextTooltipButton.focus(); - - //add target element position style - targetElement.element.className += ' introjs-showElement'; - - var currentElementPosition = _getPropValue(targetElement.element, 'position'); - if (currentElementPosition !== 'absolute' && - currentElementPosition !== 'relative') { - //change to new intro item - targetElement.element.className += ' introjs-relativePosition'; - } - - var parentElm = targetElement.element.parentNode; - while (parentElm != null) { - if (parentElm.tagName.toLowerCase() === 'body') break; - - //fix The Stacking Contenxt problem. - //More detail: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context - var zIndex = _getPropValue(parentElm, 'z-index'); - var opacity = parseFloat(_getPropValue(parentElm, 'opacity')); - var transform = _getPropValue(parentElm, 'transform') || _getPropValue(parentElm, '-webkit-transform') || _getPropValue(parentElm, '-moz-transform') || _getPropValue(parentElm, '-ms-transform') || _getPropValue(parentElm, '-o-transform'); - if (/[0-9]+/.test(zIndex) || opacity < 1 || (transform !== 'none' && transform !== undefined)) { - parentElm.className += ' introjs-fixParent'; - } - - parentElm = parentElm.parentNode; - } - - if (!_elementInViewport(targetElement.element) && this._options.scrollToElement === true) { - var rect = targetElement.element.getBoundingClientRect(), - winHeight = _getWinSize().height, - top = rect.bottom - (rect.bottom - rect.top), - bottom = rect.bottom - winHeight; - - //Scroll up - if (top < 0 || targetElement.element.clientHeight > winHeight) { - window.scrollBy(0, top - 30); // 30px padding from edge to look nice - - //Scroll down - } else { - window.scrollBy(0, bottom + 100); // 70px + 30px padding from edge to look nice - } - } - - if (typeof (this._introAfterChangeCallback) !== 'undefined') { - this._introAfterChangeCallback.call(this, targetElement.element); - } - } - - /** - * Get an element CSS property on the page - * Thanks to JavaScript Kit: http://www.javascriptkit.com/dhtmltutors/dhtmlcascade4.shtml - * - * @api private - * @method _getPropValue - * @param {Object} element - * @param {String} propName - * @returns Element's property value - */ - function _getPropValue (element, propName) { - var propValue = ''; - if (element.currentStyle) { //IE - propValue = element.currentStyle[propName]; - } else if (document.defaultView && document.defaultView.getComputedStyle) { //Others - propValue = document.defaultView.getComputedStyle(element, null).getPropertyValue(propName); - } - - //Prevent exception in IE - if (propValue && propValue.toLowerCase) { - return propValue.toLowerCase(); - } else { - return propValue; - } - } - - /** - * Provides a cross-browser way to get the screen dimensions - * via: http://stackoverflow.com/questions/5864467/internet-explorer-innerheight - * - * @api private - * @method _getWinSize - * @returns {Object} width and height attributes - */ - function _getWinSize() { - if (window.innerWidth != undefined) { - return { width: window.innerWidth, height: window.innerHeight }; - } else { - var D = document.documentElement; - return { width: D.clientWidth, height: D.clientHeight }; - } - } - - /** - * Add overlay layer to the page - * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport - * - * @api private - * @method _elementInViewport - * @param {Object} el - */ - function _elementInViewport(el) { - var rect = el.getBoundingClientRect(); - - return ( - rect.top >= 0 && - rect.left >= 0 && - (rect.bottom+80) <= window.innerHeight && // add 80 to get the text right - rect.right <= window.innerWidth - ); - } - - /** - * Add overlay layer to the page - * - * @api private - * @method _addOverlayLayer - * @param {Object} targetElm - */ - function _addOverlayLayer(targetElm) { - var overlayLayer = document.createElement('div'), - styleText = '', - self = this; - - //set css class name - overlayLayer.className = 'introjs-overlay'; - - //check if the target element is body, we should calculate the size of overlay layer in a better way - if (targetElm.tagName.toLowerCase() === 'body') { - styleText += 'top: 0;bottom: 0; left: 0;right: 0;position: fixed;'; - overlayLayer.setAttribute('style', styleText); - } else { - //set overlay layer position - var elementPosition = _getOffset(targetElm); - if (elementPosition) { - styleText += 'width: ' + elementPosition.width + 'px; height:' + elementPosition.height + 'px; top:' + elementPosition.top + 'px;left: ' + elementPosition.left + 'px;'; - overlayLayer.setAttribute('style', styleText); - } - } - - targetElm.appendChild(overlayLayer); - - overlayLayer.onclick = function() { - if (self._options.exitOnOverlayClick == true) { - - //check if any callback is defined - if (self._introExitCallback != undefined) { - self._introExitCallback.call(self); - } - _exitIntro.call(self, targetElm); - } - }; - - setTimeout(function() { - styleText += 'opacity: ' + self._options.overlayOpacity.toString() + ';'; - overlayLayer.setAttribute('style', styleText); - }, 10); - - return true; - } - - /** - * Get an element position on the page - * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966 - * - * @api private - * @method _getOffset - * @param {Object} element - * @returns Element's position info - */ - function _getOffset(element) { - var elementPosition = {}; - - //set width - elementPosition.width = element.offsetWidth; - - //set height - elementPosition.height = element.offsetHeight; - - //calculate element top and left - var _x = 0; - var _y = 0; - while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) { - _x += element.offsetLeft; - _y += element.offsetTop; - element = element.offsetParent; - } - //set top - elementPosition.top = _y; - //set left - elementPosition.left = _x; - - return elementPosition; - } - - /** - * Gets the current progress percentage - * - * @api private - * @method _getProgress - * @returns current progress percentage - */ - function _getProgress() { - // Steps are 0 indexed - var currentStep = parseInt((this._currentStep + 1), 10); - return ((currentStep / this._introItems.length) * 100); - } - - /** - * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1 - * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically - * - * @param obj1 - * @param obj2 - * @returns obj3 a new object based on obj1 and obj2 - */ - function _mergeOptions(obj1,obj2) { - var obj3 = {}; - for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; } - for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; } - return obj3; - } - - var introJs = function (targetElm) { - if (typeof (targetElm) === 'object') { - //Ok, create a new instance - return new IntroJs(targetElm); - - } else if (typeof (targetElm) === 'string') { - //select the target element with query selector - var targetElement = document.querySelector(targetElm); - - if (targetElement) { - return new IntroJs(targetElement); - } else { - throw new Error('There is no element with given selector.'); - } - } else { - return new IntroJs(document.body); - } - }; - - /** - * Current IntroJs version - * - * @property version - * @type String - */ - introJs.version = VERSION; - - //Prototype - introJs.fn = IntroJs.prototype = { - clone: function () { - return new IntroJs(this); - }, - setOption: function(option, value) { - this._options[option] = value; - return this; - }, - setOptions: function(options) { - this._options = _mergeOptions(this._options, options); - return this; - }, - start: function () { - _introForElement.call(this, this._targetElement); - return this; - }, - goToStep: function(step) { - _goToStep.call(this, step); - return this; - }, - nextStep: function() { - _nextStep.call(this); - return this; - }, - previousStep: function() { - _previousStep.call(this); - return this; - }, - exit: function() { - _exitIntro.call(this, this._targetElement); - return this; - }, - refresh: function() { - _setHelperLayerPosition.call(this, document.querySelector('.introjs-helperLayer')); - _setHelperLayerPosition.call(this, document.querySelector('.introjs-tooltipReferenceLayer')); - return this; - }, - onbeforechange: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._introBeforeChangeCallback = providedCallback; - } else { - throw new Error('Provided callback for onbeforechange was not a function'); - } - return this; - }, - onchange: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._introChangeCallback = providedCallback; - } else { - throw new Error('Provided callback for onchange was not a function.'); - } - return this; - }, - onafterchange: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._introAfterChangeCallback = providedCallback; - } else { - throw new Error('Provided callback for onafterchange was not a function'); - } - return this; - }, - oncomplete: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._introCompleteCallback = providedCallback; - } else { - throw new Error('Provided callback for oncomplete was not a function.'); - } - return this; - }, - onexit: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._introExitCallback = providedCallback; - } else { - throw new Error('Provided callback for onexit was not a function.'); - } - return this; - } - }; - - exports.introJs = introJs; - return introJs; -})); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).introJs=e()}(this,(function(){"use strict";function t(){t=function(){return e};var e={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(t,e,n){t[e]=n.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,n){return t[e]=n}}function u(t,e,n,r){var i=e&&e.prototype instanceof f?e:f,a=Object.create(i.prototype),s=new j(r||[]);return o(a,"_invoke",{value:k(t,n,s)}),a}function p(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}e.wrap=u;var h={};function f(){}function d(){}function m(){}var v={};c(v,a,(function(){return this}));var b=Object.getPrototypeOf,y=b&&b(b(A([])));y&&y!==n&&r.call(y,a)&&(v=y);var g=m.prototype=f.prototype=Object.create(v);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function _(t,e){function n(o,i,a,s){var l=p(t[o],t,i);if("throw"!==l.type){var c=l.arg,u=c.value;return u&&"object"==typeof u&&r.call(u,"__await")?e.resolve(u.__await).then((function(t){n("next",t,a,s)}),(function(t){n("throw",t,a,s)})):e.resolve(u).then((function(t){c.value=t,a(c)}),(function(t){return n("throw",t,a,s)}))}s(l.arg)}var i;o(this,"_invoke",{value:function(t,r){function o(){return new e((function(e,o){n(t,r,e,o)}))}return i=i?i.then(o,o):o()}})}function k(t,e,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return E()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var s=x(a,n);if(s){if(s===h)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var l=p(t,e,n);if("normal"===l.type){if(r=n.done?"completed":"suspendedYield",l.arg===h)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(r="completed",n.method="throw",n.arg=l.arg)}}}function x(t,e){var n=e.method,r=t.iterator[n];if(void 0===r)return e.delegate=null,"throw"===n&&t.iterator.return&&(e.method="return",e.arg=void 0,x(t,e),"throw"===e.method)||"return"!==n&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+n+"' method")),h;var o=p(r,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,h;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,h):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,h)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function j(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(C,this),this.reset(!0)}function A(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),l=r.call(i,"finallyLoc");if(s&&l){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),S(n),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;S(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:A(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),h}},e}function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function n(t,e,n,r,o,i,a){try{var s=t[i](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(r,o)}function r(t){return function(){var e=this,r=arguments;return new Promise((function(o,i){var a=t.apply(e,r);function s(t){n(a,o,i,s,l,"next",t)}function l(t){n(a,o,i,s,l,"throw",t)}s(void 0)}))}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,i=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function h(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}function f(t,e,n){var r,o=(s(r={},t,e),s(r,"path","/"),s(r,"expires",void 0),r);if(n){var i=new Date;i.setTime(i.getTime()+24*n*60*60*1e3),o.expires=i.toUTCString()}var a=[];for(var l in o)a.push("".concat(l,"=").concat(o[l]));return document.cookie=a.join("; "),d(t)}function d(t){return(e={},document.cookie.split(";").forEach((function(t){var n=l(t.split("="),2),r=n[0],o=n[1];e[r.trim()]=o})),e)[t];var e}var m="true";function v(t,e){e?f(t._options.dontShowAgainCookie,m,t._options.dontShowAgainCookieDays):f(t._options.dontShowAgainCookie,"",-1)}var b,y=(b={},function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"introjs-stamp";return b[e]=b[e]||0,void 0===t[e]&&(t[e]=b[e]++),t[e]}),g=new(function(){function t(){o(this,t),s(this,"events_key","introjs_event")}return a(t,[{key:"_id",value:function(t,e,n){return t+y(e)+(n?"_".concat(y(n)):"")}},{key:"on",value:function(t,e,n,r,o){var i=this._id(e,n,r),a=function(e){return n(r||t,e||window.event)};"addEventListener"in t?t.addEventListener(e,a,o):"attachEvent"in t&&t.attachEvent("on".concat(e),a),t[this.events_key]=t[this.events_key]||{},t[this.events_key][i]=a}},{key:"off",value:function(t,e,n,r,o){var i=this._id(e,n,r),a=t[this.events_key]&&t[this.events_key][i];a&&("removeEventListener"in t?t.removeEventListener(e,a,o):"detachEvent"in t&&t.detachEvent("on".concat(e),a),t[this.events_key][i]=null)}}]),t}()),w=function(t){return"function"==typeof t};function _(t,e){if(t instanceof SVGElement){var n=t.getAttribute("class")||"";n.match(e)||t.setAttribute("class","".concat(n," ").concat(e))}else if(void 0!==t.classList){var r,o=p(e.split(" "));try{for(o.s();!(r=o.n()).done;){var i=r.value;t.classList.add(i)}}catch(t){o.e(t)}finally{o.f()}}else t.className.match(e)||(t.className+=" ".concat(e))}function k(t,e){var n="";return"currentStyle"in t?n=t.currentStyle[e]:document.defaultView&&document.defaultView.getComputedStyle&&(n=document.defaultView.getComputedStyle(t,null).getPropertyValue(e)),n&&n.toLowerCase?n.toLowerCase():n}function x(t){_(t,"introjs-showElement");var e=k(t,"position");"absolute"!==e&&"relative"!==e&&"sticky"!==e&&"fixed"!==e&&_(t,"introjs-relativePosition")}function C(t,e){if(t){var n=function(t){var e=window.getComputedStyle(t),n="absolute"===e.position,r=/(auto|scroll)/;if("fixed"===e.position)return document.body;for(var o=t;o=o.parentElement;)if(e=window.getComputedStyle(o),(!n||"static"!==e.position)&&r.test(e.overflow+e.overflowY+e.overflowX))return o;return document.body}(e);n!==document.body&&(n.scrollTop=e.offsetTop-n.offsetTop)}}function S(){if(void 0!==window.innerWidth)return{width:window.innerWidth,height:window.innerHeight};var t=document.documentElement;return{width:t.clientWidth,height:t.clientHeight}}function j(t,e,n,r,o){var i;if("off"!==e&&(t&&(i="tooltip"===e?o.getBoundingClientRect():r.getBoundingClientRect(),!function(t){var e=t.getBoundingClientRect();return e.top>=0&&e.left>=0&&e.bottom+80<=window.innerHeight&&e.right<=window.innerWidth}(r)))){var a=S().height;i.bottom-(i.bottom-i.top)<0||r.clientHeight>a?window.scrollBy(0,i.top-(a/2-i.height/2)-n):window.scrollBy(0,i.top-(a/2-i.height/2)+n)}}function A(t){t.setAttribute("role","button"),t.tabIndex=0}function E(t){var e=t.parentElement;return!(!e||"HTML"===e.nodeName)&&("fixed"===k(t,"position")||E(e))}function N(t,e){var n=document.body,r=document.documentElement,o=window.pageYOffset||r.scrollTop||n.scrollTop,i=window.pageXOffset||r.scrollLeft||n.scrollLeft;e=e||n;var a=t.getBoundingClientRect(),s=e.getBoundingClientRect(),l=k(e,"position"),c={width:a.width,height:a.height};return"body"!==e.tagName.toLowerCase()&&"relative"===l||"sticky"===l?Object.assign(c,{top:a.top-s.top,left:a.left-s.left}):E(t)?Object.assign(c,{top:a.top,left:a.left}):Object.assign(c,{top:a.top+o,left:a.left+i})}function L(t,e){if(t instanceof SVGElement){var n=t.getAttribute("class")||"";t.setAttribute("class",n.replace(e,"").replace(/^\s+|\s+$/g,""))}else t.className=t.className.replace(e,"").replace(/^\s+|\s+$/g,"")}function T(t,e){var n="";if(t.style.cssText&&(n+=t.style.cssText),"string"==typeof e)n+=e;else for(var r in e)n+="".concat(r,":").concat(e[r],";");t.style.cssText=n}function I(t,e,n){if(n&&e){var r=N(e.element,t._targetElement),o=t._options.helperElementPadding;e.element instanceof Element&&E(e.element)?_(n,"introjs-fixedTooltip"):L(n,"introjs-fixedTooltip"),"floating"===e.position&&(o=0),T(n,{width:"".concat(r.width+o,"px"),height:"".concat(r.height+o,"px"),top:"".concat(r.top-o/2,"px"),left:"".concat(r.left-o/2,"px")})}}function P(t,e,n,r,o){return t.left+e+n.width>r.width?(o.style.left="".concat(r.width-n.width-t.left,"px"),!1):(o.style.left="".concat(e,"px"),!0)}function O(t,e,n,r){return t.left+t.width-e-n.width<0?(r.style.left="".concat(-t.left,"px"),!1):(r.style.right="".concat(e,"px"),!0)}function q(t,e){t.includes(e)&&t.splice(t.indexOf(e),1)}function B(t,e,n,r){var o=t.slice(),i=S(),a=N(n).height+10,s=N(n).width+20,l=e.getBoundingClientRect(),c="floating";if(l.bottom+a>i.height&&q(o,"bottom"),l.top-a<0&&q(o,"top"),l.right+s>i.width&&q(o,"right"),l.left-s<0&&q(o,"left"),r&&(r=r.split("-")[0]),o.length&&(c=o[0],o.includes(r)&&(c=r)),"top"===c||"bottom"===c){var u,p=[];"top"===c?(u="top-middle-aligned",p=["top-left-aligned","top-middle-aligned","top-right-aligned"]):(u="bottom-middle-aligned",p=["bottom-left-aligned","bottom-middle-aligned","bottom-right-aligned"]),c=function(t,e,n,r){var o=e/2,i=Math.min(n,window.screen.width);return i-t4&&void 0!==arguments[4]&&arguments[4];if(e){var i,a,s,l,c="";n.style.top="",n.style.right="",n.style.bottom="",n.style.left="",n.style.marginLeft="",n.style.marginTop="",r.style.display="inherit",c="string"==typeof e.tooltipClass?e.tooltipClass:t._options.tooltipClass,n.className=["introjs-tooltip",c].filter(Boolean).join(" "),n.setAttribute("role","dialog"),"floating"!==(l=e.position)&&t._options.autoPosition&&(l=B(t._options.positionPrecedence,e.element,n,l)),a=N(e.element),i=N(n),s=S(),_(n,"introjs-".concat(l));var u=a.width/2-i.width/2;switch(l){case"top-right-aligned":r.className="introjs-arrow bottom-right";var p=0;O(a,p,i,n),n.style.bottom="".concat(a.height+20,"px");break;case"top-middle-aligned":r.className="introjs-arrow bottom-middle",o&&(u+=5),O(a,u,i,n)&&(n.style.right="",P(a,u,i,s,n)),n.style.bottom="".concat(a.height+20,"px");break;case"top-left-aligned":case"top":r.className="introjs-arrow bottom",P(a,o?0:15,i,s,n),n.style.bottom="".concat(a.height+20,"px");break;case"right":n.style.left="".concat(a.width+20,"px"),a.top+i.height>s.height?(r.className="introjs-arrow left-bottom",n.style.top="-".concat(i.height-a.height-20,"px")):r.className="introjs-arrow left";break;case"left":o||!0!==t._options.showStepNumbers||(n.style.top="15px"),a.top+i.height>s.height?(n.style.top="-".concat(i.height-a.height-20,"px"),r.className="introjs-arrow right-bottom"):r.className="introjs-arrow right",n.style.right="".concat(a.width+20,"px");break;case"floating":r.style.display="none",n.style.left="50%",n.style.top="50%",n.style.marginLeft="-".concat(i.width/2,"px"),n.style.marginTop="-".concat(i.height/2,"px");break;case"bottom-right-aligned":r.className="introjs-arrow top-right",O(a,p=0,i,n),n.style.top="".concat(a.height+20,"px");break;case"bottom-middle-aligned":r.className="introjs-arrow top-middle",o&&(u+=5),O(a,u,i,n)&&(n.style.right="",P(a,u,i,s,n)),n.style.top="".concat(a.height+20,"px");break;default:r.className="introjs-arrow top",P(a,0,i,s,n),n.style.top="".concat(a.height+20,"px")}}}function R(){for(var t=0,e=Array.from(document.querySelectorAll(".introjs-showElement"));t2&&void 0!==arguments[2]&&arguments[2];if(n){var r=e.style.opacity||"1";T(e,{opacity:"0"}),window.setTimeout((function(){T(e,{opacity:r})}),10)}t.appendChild(e)}function D(t,e){return(t+1)/e*100}function G(t,e){var n=document.querySelector(".introjs-disableInteraction");null===n&&(n=M("div",{className:"introjs-disableInteraction"}),t._targetElement.appendChild(n)),I(t,e,n)}function V(t,e){var n=M("div",{className:"introjs-bullets"});!1===t._options.showBullets&&(n.style.display="none");var r=M("ul");r.setAttribute("role","tablist");for(var o=function(){var e=this.getAttribute("data-step-number");null!=e&&t.goToStep(parseInt(e,10))},i=0;i a.active"),o=e.querySelector('.introjs-bullets li > a[data-step-number="'.concat(n.step,'"]'));r&&o&&(r.className="",o.className="active")}}function W(t){var e=M("div");e.className="introjs-progress",!1===t._options.showProgress&&(e.style.display="none");var n=M("div",{className:"introjs-progressbar"});t._options.progressBarAdditionalClass&&(n.className+=" "+t._options.progressBarAdditionalClass);var r=D(t._currentStep,t._introItems.length);return n.setAttribute("role","progress"),n.setAttribute("aria-valuemin","0"),n.setAttribute("aria-valuemax","100"),n.setAttribute("aria-valuenow",r.toString()),n.style.cssText="width:".concat(r,"%;"),e.appendChild(n),e}function Y(t,e,n){var r=t.querySelector(".introjs-progress .introjs-progressbar");if(r){var o=D(e,n);r.style.cssText="width:".concat(o,"%;"),r.setAttribute("aria-valuenow",o.toString())}}function $(t,e){return Q.apply(this,arguments)}function Q(){return(Q=r(t().mark((function e(n,o){var i,a,s,l,c,u,p,h,f,d,m,v,b,y,g,k,S,E,N,L,P,O,q,B;return t().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!w(n._introChangeCallback)){e.next=3;break}return e.next=3,n._introChangeCallback.call(n,o.element);case 3:if(i=document.querySelector(".introjs-helperLayer"),a=document.querySelector(".introjs-tooltipReferenceLayer"),s="introjs-helperLayer","string"==typeof o.highlightClass&&(s+=" ".concat(o.highlightClass)),"string"==typeof n._options.highlightClass&&(s+=" ".concat(n._options.highlightClass)),null!==i&&null!==a?(p=a.querySelector(".introjs-helperNumberLayer"),h=a.querySelector(".introjs-tooltiptext"),f=a.querySelector(".introjs-tooltip-title"),d=a.querySelector(".introjs-arrow"),m=a.querySelector(".introjs-tooltip"),u=a.querySelector(".introjs-skipbutton"),c=a.querySelector(".introjs-prevbutton"),l=a.querySelector(".introjs-nextbutton"),i.className=s,m.style.opacity="0",m.style.display="none",C(n._options.scrollToElement,o.element),I(n,o,i),I(n,o,a),R(),n._lastShowElementTimer&&window.clearTimeout(n._lastShowElementTimer),n._lastShowElementTimer=window.setTimeout((function(){null!==p&&(p.innerHTML="".concat(o.step," ").concat(n._options.stepNumbersOfLabel," ").concat(n._introItems.length)),h.innerHTML=o.intro||"",f.innerHTML=o.title||"",m.style.display="block",H(n,o,m,d),z(n._options.showBullets,a,o),Y(a,n._currentStep,n._introItems.length),m.style.opacity="1",(null!=l&&/introjs-donebutton/gi.test(l.className)||null!=l)&&l.focus(),j(n._options.scrollToElement,o.scrollTo,n._options.scrollPadding,o.element,h)}),350)):(v=M("div",{className:s}),b=M("div",{className:"introjs-tooltipReferenceLayer"}),y=M("div",{className:"introjs-arrow"}),g=M("div",{className:"introjs-tooltip"}),k=M("div",{className:"introjs-tooltiptext"}),S=M("div",{className:"introjs-tooltip-header"}),E=M("h1",{className:"introjs-tooltip-title"}),N=M("div"),T(v,{"box-shadow":"0 0 1px 2px rgba(33, 33, 33, 0.8), rgba(33, 33, 33, ".concat(n._options.overlayOpacity.toString(),") 0 0 0 5000px")}),C(n._options.scrollToElement,o.element),I(n,o,v),I(n,o,b),F(n._targetElement,v,!0),F(n._targetElement,b),k.innerHTML=o.intro,E.innerHTML=o.title,N.className="introjs-tooltipbuttons",!1===n._options.showButtons&&(N.style.display="none"),S.appendChild(E),g.appendChild(S),g.appendChild(k),n._options.dontShowAgain&&(L=M("div",{className:"introjs-dontShowAgain"}),(P=M("input",{type:"checkbox",id:"introjs-dontShowAgain",name:"introjs-dontShowAgain"})).onchange=function(t){n.setDontShowAgain(t.target.checked)},(O=M("label",{htmlFor:"introjs-dontShowAgain"})).innerText=n._options.dontShowAgainLabel,L.appendChild(P),L.appendChild(O),g.appendChild(L)),g.appendChild(V(n,o)),g.appendChild(W(n)),q=M("div"),!0===n._options.showStepNumbers&&(q.className="introjs-helperNumberLayer",q.innerHTML="".concat(o.step," ").concat(n._options.stepNumbersOfLabel," ").concat(n._introItems.length),g.appendChild(q)),g.appendChild(y),b.appendChild(g),(l=M("a")).onclick=r(t().mark((function e(){return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n._introItems.length-1===n._currentStep){t.next=5;break}return t.next=3,K(n);case 3:t.next=11;break;case 5:if(!/introjs-donebutton/gi.test(l.className)){t.next=11;break}if(!w(n._introCompleteCallback)){t.next=9;break}return t.next=9,n._introCompleteCallback.call(n,n._currentStep,"done");case 9:return t.next=11,Nt(n,n._targetElement);case 11:case"end":return t.stop()}}),e)}))),A(l),l.innerHTML=n._options.nextLabel,(c=M("a")).onclick=r(t().mark((function e(){return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(n._currentStep>0)){t.next=3;break}return t.next=3,et(n);case 3:case"end":return t.stop()}}),e)}))),A(c),c.innerHTML=n._options.prevLabel,A(u=M("a",{className:"introjs-skipbutton"})),u.innerHTML=n._options.skipLabel,u.onclick=r(t().mark((function e(){return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n._introItems.length-1!==n._currentStep||!w(n._introCompleteCallback)){t.next=3;break}return t.next=3,n._introCompleteCallback.call(n,n._currentStep,"skip");case 3:if(!w(n._introSkipCallback)){t.next=6;break}return t.next=6,n._introSkipCallback.call(n,n._currentStep);case 6:return t.next=8,Nt(n,n._targetElement);case 8:case"end":return t.stop()}}),e)}))),S.appendChild(u),n._introItems.length>1&&N.appendChild(c),N.appendChild(l),g.appendChild(N),H(n,o,g,y),j(n._options.scrollToElement,o.scrollTo,n._options.scrollPadding,o.element,g)),(B=n._targetElement.querySelector(".introjs-disableInteraction"))&&B.parentNode&&B.parentNode.removeChild(B),o.disableInteraction&&G(n,o),0===n._currentStep&&n._introItems.length>1?(null!=l&&(l.className="".concat(n._options.buttonClass," introjs-nextbutton"),l.innerHTML=n._options.nextLabel),!0===n._options.hidePrev?(null!=c&&(c.className="".concat(n._options.buttonClass," introjs-prevbutton introjs-hidden")),null!=l&&_(l,"introjs-fullbutton")):null!=c&&(c.className="".concat(n._options.buttonClass," introjs-prevbutton introjs-disabled"))):n._introItems.length-1===n._currentStep||1===n._introItems.length?(null!=c&&(c.className="".concat(n._options.buttonClass," introjs-prevbutton")),!0===n._options.hideNext?(null!=l&&(l.className="".concat(n._options.buttonClass," introjs-nextbutton introjs-hidden")),null!=c&&_(c,"introjs-fullbutton")):null!=l&&(!0===n._options.nextToDone?(l.innerHTML=n._options.doneLabel,_(l,"".concat(n._options.buttonClass," introjs-nextbutton introjs-donebutton"))):l.className="".concat(n._options.buttonClass," introjs-nextbutton introjs-disabled"))):(null!=c&&(c.className="".concat(n._options.buttonClass," introjs-prevbutton")),null!=l&&(l.className="".concat(n._options.buttonClass," introjs-nextbutton"),l.innerHTML=n._options.nextLabel)),null!=c&&c.setAttribute("role","button"),null!=l&&l.setAttribute("role","button"),null!=u&&u.setAttribute("role","button"),null!=l&&l.focus(),x(o.element),!w(n._introAfterChangeCallback)){e.next=21;break}return e.next=21,n._introAfterChangeCallback.call(n,o.element);case 21:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function U(t,e){return X.apply(this,arguments)}function X(){return(X=r(t().mark((function e(n,r){return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n._currentStep=r-2,void 0===n._introItems){t.next=4;break}return t.next=4,K(n);case 4:case"end":return t.stop()}}),e)})))).apply(this,arguments)}function J(t,e){return Z.apply(this,arguments)}function Z(){return(Z=r(t().mark((function e(n,r){return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n._currentStepNumber=r,void 0===n._introItems){t.next=4;break}return t.next=4,K(n);case 4:case"end":return t.stop()}}),e)})))).apply(this,arguments)}function K(t){return tt.apply(this,arguments)}function tt(){return tt=r(t().mark((function e(n){var r,o,i;return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n._direction="forward",void 0!==n._currentStepNumber)for(r=0;r=0&&(n._hintsAutoRefreshFunction=at((function(){return Ct(n)}),n._options.hintAutoRefreshInterval),g.on(window,"scroll",n._hintsAutoRefreshFunction,n,!0));case 30:case"end":return t.stop()}}),e)})))).apply(this,arguments)}function yt(t,e,n){if(void 0!==n){var r=N(n),o=20,i=20;switch(t){default:case"top-left":e.style.left="".concat(r.left,"px"),e.style.top="".concat(r.top,"px");break;case"top-right":e.style.left="".concat(r.left+r.width-o,"px"),e.style.top="".concat(r.top,"px");break;case"bottom-left":e.style.left="".concat(r.left,"px"),e.style.top="".concat(r.top+r.height-i,"px");break;case"bottom-right":e.style.left="".concat(r.left+r.width-o,"px"),e.style.top="".concat(r.top+r.height-i,"px");break;case"middle-left":e.style.left="".concat(r.left,"px"),e.style.top="".concat(r.top+(r.height-i)/2,"px");break;case"middle-right":e.style.left="".concat(r.left+r.width-o,"px"),e.style.top="".concat(r.top+(r.height-i)/2,"px");break;case"middle-middle":e.style.left="".concat(r.left+(r.width-o)/2,"px"),e.style.top="".concat(r.top+(r.height-i)/2,"px");break;case"bottom-middle":e.style.left="".concat(r.left+(r.width-o)/2,"px"),e.style.top="".concat(r.top+r.height-i,"px");break;case"top-middle":e.style.left="".concat(r.left+(r.width-o)/2,"px"),e.style.top="".concat(r.top,"px")}}}function gt(t,e){return wt.apply(this,arguments)}function wt(){return(wt=r(t().mark((function e(n,r){var o,i,a,s,l,c,u,p,h,f,d;return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(o=document.querySelector('.introjs-hint[data-step="'.concat(r,'"]')),i=n._hintItems[r],!w(n._hintClickCallback)){t.next=5;break}return t.next=5,n._hintClickCallback.call(n,o,i,r);case 5:if(void 0===(a=_t())||parseInt(a,10)!==r){t.next=8;break}return t.abrupt("return");case 8:s=M("div",{className:"introjs-tooltip"}),l=M("div"),c=M("div"),u=M("div"),s.onclick=function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0},l.className="introjs-tooltiptext",(p=M("p")).innerHTML=i.hint||"",l.appendChild(p),n._options.hintShowButton&&((h=M("a")).className=n._options.buttonClass,h.setAttribute("role","button"),h.innerHTML=n._options.hintButtonLabel,h.onclick=function(){return lt(n,r)},l.appendChild(h)),c.className="introjs-arrow",s.appendChild(c),s.appendChild(l),f=o.getAttribute("data-step")||"",n._currentStep=parseInt(f,10),d=n._hintItems[n._currentStep],u.className="introjs-tooltipReferenceLayer introjs-hintReference",u.setAttribute("data-step",f),I(n,d,u),u.appendChild(s),document.body.appendChild(u),H(n,d,s,c,!0);case 30:case"end":return t.stop()}}),e)})))).apply(this,arguments)}function _t(){var t=document.querySelector(".introjs-hintReference");if(t&&t.parentNode){var e=t.getAttribute("data-step");if(!e)return;return t.parentNode.removeChild(t),e}}function kt(t,e){return xt.apply(this,arguments)}function xt(){return(xt=r(t().mark((function e(n,r){var o,i,a,s,l,c,u,h,f,d;return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n._hintItems=[],!(n._options.hints&&n._options.hints.length>0)){t.next=6;break}o=p(n._options.hints);try{for(o.s();!(i=o.n()).done;)a=i.value,"string"==typeof(s=it(a)).element&&(s.element=document.querySelector(s.element)),s.hintPosition=s.hintPosition||n._options.hintPosition,s.hintAnimation=s.hintAnimation||n._options.hintAnimation,null!==s.element&&n._hintItems.push(s)}catch(t){o.e(t)}finally{o.f()}t.next=10;break;case 6:if((l=Array.from(r.querySelectorAll("*[data-hint]")))&&l.length){t.next=9;break}return t.abrupt("return",!1);case 9:for(c=0,u=l;c0&&(r[f-1]={step:f,element:h,title:h.getAttribute("data-title")||"",intro:h.getAttribute("data-intro")||"",tooltipClass:h.getAttribute("data-tooltip-class")||void 0,highlightClass:h.getAttribute("data-highlight-class")||void 0,position:h.getAttribute("data-position")||t._options.tooltipPosition,scrollTo:h.getAttribute("data-scroll-to")||t._options.scrollTo,disableInteraction:l})}}}catch(t){u.e(t)}finally{u.f()}var d,m=0,v=p(n);try{for(v.s();!(d=v.n()).done;){var b=d.value;if((!t._options.group||b.getAttribute("data-intro-group")===t._options.group)&&null===b.getAttribute("data-step")){for(;void 0!==r[m];)m++;l=b.hasAttribute("data-disable-interaction")?!!b.getAttribute("data-disable-interaction"):t._options.disableInteraction,r[m]={element:b,title:b.getAttribute("data-title")||"",intro:b.getAttribute("data-intro")||"",step:m+1,tooltipClass:b.getAttribute("data-tooltip-class")||void 0,highlightClass:b.getAttribute("data-highlight-class")||void 0,position:b.getAttribute("data-position")||t._options.tooltipPosition,scrollTo:b.getAttribute("data-scroll-to")||t._options.scrollTo,disableInteraction:l}}}}catch(t){v.e(t)}finally{v.f()}}for(var y=[],g=0;g1&&void 0!==arguments[1]&&arguments[1];if(t&&t.parentElement){var n=t.parentElement;e?(T(t,{opacity:"0"}),window.setTimeout((function(){try{n.removeChild(t)}catch(t){}}),500)):n.removeChild(t)}}function Nt(t,e){return Lt.apply(this,arguments)}function Lt(){return Lt=r(t().mark((function e(n,r){var o,i,a,s,l,c=arguments;return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(o=c.length>2&&void 0!==c[2]&&c[2],i=!0,void 0===n._introBeforeExitCallback){t.next=6;break}return t.next=5,n._introBeforeExitCallback.call(n,r);case 5:i=t.sent;case 6:if(o||!1!==i){t.next=8;break}return t.abrupt("return");case 8:if((a=Array.from(r.querySelectorAll(".introjs-overlay")))&&a.length){s=p(a);try{for(s.s();!(l=s.n()).done;)Et(l.value)}catch(t){s.e(t)}finally{s.f()}}if(Et(r.querySelector(".introjs-helperLayer"),!0),Et(r.querySelector(".introjs-tooltipReferenceLayer")),Et(r.querySelector(".introjs-disableInteraction")),Et(document.querySelector(".introjsFloatingElement")),R(),g.off(window,"keydown",rt,n,!0),g.off(window,"resize",At,n,!0),!w(n._introExitCallback)){t.next=24;break}return t.next=24,n._introExitCallback.call(n);case 24:n._currentStep=-1;case 25:case"end":return t.stop()}}),e)}))),Lt.apply(this,arguments)}function Tt(e,n){var o=M("div",{className:"introjs-overlay"});return T(o,{top:0,bottom:0,left:0,right:0,position:"fixed"}),n.appendChild(o),!0===e._options.exitOnOverlayClick&&(T(o,{cursor:"pointer"}),o.onclick=r(t().mark((function r(){return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Nt(e,n);case 2:case"end":return t.stop()}}),r)})))),!0}function It(t,e){return Pt.apply(this,arguments)}function Pt(){return(Pt=r(t().mark((function e(n,r){var o;return t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.isActive()){t.next=2;break}return t.abrupt("return",!1);case 2:if(!w(n._introStartCallback)){t.next=5;break}return t.next=5,n._introStartCallback.call(n,r);case 5:if(0!==(o=St(n,r)).length){t.next=8;break}return t.abrupt("return",!1);case 8:return n._introItems=o,Tt(n,r),t.next=12,K(n);case 12:r.addEventListener,n._options.keyboardNavigation&&g.on(window,"keydown",rt,n,!0),g.on(window,"resize",At,n,!0);case 15:return t.abrupt("return",!1);case 16:case"end":return t.stop()}}),e)})))).apply(this,arguments)}function Ot(t,e,n){return t[e]=n,t}var qt=function(){function e(t){o(this,e),s(this,"_currentStep",-1),s(this,"_currentStepNumber",void 0),s(this,"_direction",void 0),s(this,"_targetElement",void 0),s(this,"_introItems",[]),s(this,"_hintItems",[]),s(this,"_options",void 0),s(this,"_introBeforeChangeCallback",void 0),s(this,"_introChangeCallback",void 0),s(this,"_introAfterChangeCallback",void 0),s(this,"_introCompleteCallback",void 0),s(this,"_introStartCallback",void 0),s(this,"_introExitCallback",void 0),s(this,"_introSkipCallback",void 0),s(this,"_introBeforeExitCallback",void 0),s(this,"_hintsAddedCallback",void 0),s(this,"_hintClickCallback",void 0),s(this,"_hintCloseCallback",void 0),s(this,"_lastShowElementTimer",void 0),s(this,"_hintsAutoRefreshFunction",void 0),this._targetElement=t,this._options={steps:[],hints:[],isActive:!0,nextLabel:"Next",prevLabel:"Back",skipLabel:"×",doneLabel:"Done",hidePrev:!1,hideNext:!1,nextToDone:!0,tooltipPosition:"bottom",tooltipClass:"",group:"",highlightClass:"",exitOnEsc:!0,exitOnOverlayClick:!0,showStepNumbers:!1,stepNumbersOfLabel:"of",keyboardNavigation:!0,showButtons:!0,showBullets:!0,showProgress:!1,scrollToElement:!0,scrollTo:"element",scrollPadding:30,overlayOpacity:.5,autoPosition:!0,positionPrecedence:["bottom","top","right","left"],disableInteraction:!1,dontShowAgain:!1,dontShowAgainLabel:"Don't show this again",dontShowAgainCookie:"introjs-dontShowAgain",dontShowAgainCookieDays:365,helperElementPadding:10,hintPosition:"top-middle",hintButtonLabel:"Got it",hintShowButton:!0,hintAutoRefreshInterval:10,hintAnimation:!0,buttonClass:"introjs-button",progressBarAdditionalClass:!1}}var n,i,c,u,h,f,b,y,_,k;return a(e,[{key:"isActive",value:function(){return(!this._options.dontShowAgain||""===(t=d(this._options.dontShowAgainCookie))||t!==m)&&this._options.isActive;var t}},{key:"clone",value:function(){return new e(this._targetElement)}},{key:"setOption",value:function(t,e){return this._options=Ot(this._options,t,e),this}},{key:"setOptions",value:function(t){return this._options=function(t,e){for(var n=0,r=Object.entries(e);ntd,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border:1px solid rgba(0,0,0,.5);border-radius:4px;box-shadow:0 2px 15px rgba(0,0,0,.4);-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:10000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer *:before,.introjs-helperLayer *:after{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:bold;color:white;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid white;border-radius:50%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019',endColorstr='#cf0404',GradientType=0);filter:progid:DXImageTransform.Microsoft.Shadow(direction=135,strength=2,color=ff0000);box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow{border:5px solid white;content:'';position:absolute}.introjs-arrow.top{top:-10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:white;border-left-color:transparent}.introjs-arrow.top-right{top:-10px;right:10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:white;border-left-color:transparent}.introjs-arrow.top-middle{top:-10px;left:50%;margin-left:-5px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:white;border-left-color:transparent}.introjs-arrow.right{right:-10px;top:10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:white}.introjs-arrow.right-bottom{bottom:10px;right:-10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:white}.introjs-arrow.bottom{bottom:-10px;border-top-color:white;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.introjs-arrow.left{left:-10px;top:10px;border-top-color:transparent;border-right-color:white;border-bottom-color:transparent;border-left-color:transparent}.introjs-arrow.left-bottom{left:-10px;bottom:10px;border-top-color:transparent;border-right-color:white;border-bottom-color:transparent;border-left-color:transparent}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:white;min-width:250px;max-width:300px;border-radius:3px;box-shadow:0 1px 10px rgba(0,0,0,.4);-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap; margin-top: 15px;}.introjs-buttonn{position:relative;overflow:visible;display:inline-block;padding:.3em .8em;border:1px solid #d4d4d4;margin:0;text-decoration:none;text-shadow:1px 1px 0 #fff;font:11px/normal sans-serif;color:#333;white-space:nowrap;cursor:pointer;outline:0;background-color:#ececec;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f4f4f4),to(#ececec));background-image:-moz-linear-gradient(#f4f4f4,#ececec);background-image:-o-linear-gradient(#f4f4f4,#ececec);background-image:linear-gradient(#f4f4f4,#ececec);-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em;zoom:1;*display:inline;margin-top:10px}.introjs-bullets{text-align:center}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0;display:inline-block}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none}.introjs-bullets ul li a:hover{background:#999}.introjs-bullets ul li a.active{background:#999}.introjs-progress{overflow:hidden;height:10px;margin:10px 0 5px 0;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.introjs-prevbutton{ margin-right: 3px;} \ No newline at end of file +.introjs-overlay{position:absolute;box-sizing:content-box;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-showElement{z-index:9999999!important}tr.introjs-showElement>td{z-index:9999999!important;position:relative}tr.introjs-showElement>th{z-index:9999999!important;position:relative}.introjs-disableInteraction{z-index:99999999!important;position:absolute;background-color:#fff;opacity:0}.introjs-relativePosition{position:relative}.introjs-helperLayer{box-sizing:content-box;position:absolute;z-index:9999998;border-radius:4px;transition:all .3s ease-out}.introjs-helperLayer *{box-sizing:content-box}.introjs-helperLayer :before{box-sizing:content-box}.introjs-helperLayer :after{box-sizing:content-box}.introjs-tooltipReferenceLayer{font-family:"Helvetica Neue",Inter,ui-sans-serif,"Apple Color Emoji",Helvetica,Arial,sans-serif;box-sizing:content-box;position:absolute;visibility:hidden;z-index:100000000;background-color:transparent;transition:all .3s ease-out}.introjs-tooltipReferenceLayer *{font-family:"Helvetica Neue",Inter,ui-sans-serif,"Apple Color Emoji",Helvetica,Arial,sans-serif}.introjs-helperNumberLayer{font-family:"Helvetica Neue",Inter,ui-sans-serif,"Apple Color Emoji",Helvetica,Arial,sans-serif;color:#9e9e9e;text-align:center;padding-top:10px;padding-bottom:10px}.introjs-arrow{border:5px solid transparent;content:"";position:absolute}.introjs-arrow.top{top:-10px;left:10px;border-bottom-color:#fff}.introjs-arrow.top-right{top:-10px;right:10px;border-bottom-color:#fff}.introjs-arrow.top-middle{top:-10px;left:50%;margin-left:-5px;border-bottom-color:#fff}.introjs-arrow.right{right:-10px;top:10px;border-left-color:#fff}.introjs-arrow.right-bottom{bottom:10px;right:-10px;border-left-color:#fff}.introjs-arrow.bottom{bottom:-10px;left:10px;border-top-color:#fff}.introjs-arrow.bottom-right{bottom:-10px;right:10px;border-top-color:#fff}.introjs-arrow.bottom-middle{bottom:-10px;left:50%;margin-left:-5px;border-top-color:#fff}.introjs-arrow.left{left:-10px;top:10px;border-right-color:#fff}.introjs-arrow.left-bottom{left:-10px;bottom:10px;border-right-color:#fff}.introjs-tooltip{box-sizing:content-box;position:absolute;visibility:visible;background-color:#fff;min-width:250px;max-width:300px;border-radius:5px;box-shadow:0 3px 30px rgba(33,33,33,.3);transition:opacity .1s ease-out}.introjs-tooltiptext{padding:20px}.introjs-dontShowAgain{padding-left:20px;padding-right:20px}.introjs-dontShowAgain input{padding:0;margin:0;margin-bottom:2px;display:inline;width:10px;height:10px}.introjs-dontShowAgain label{font-size:14px;display:inline-block;font-weight:400;margin:0 0 0 5px;padding:0;background-color:#fff;color:#616161;-webkit-user-select:none;user-select:none}.introjs-tooltip-title{font-size:18px;width:90%;min-height:1.5em;margin:0;padding:0;font-weight:700;line-height:1.5}.introjs-tooltip-header{position:relative;padding-left:20px;padding-right:20px;padding-top:10px;min-height:1.5em}.introjs-tooltipbuttons{border-top:1px solid #e0e0e0;padding:10px;text-align:right;white-space:nowrap}.introjs-tooltipbuttons:after{content:"";visibility:hidden;display:block;height:0;clear:both}.introjs-button{box-sizing:content-box;position:relative;overflow:visible;padding:.5rem 1rem;border:1px solid #bdbdbd;text-decoration:none;text-shadow:1px 1px 0 #fff;font-size:14px;color:#424242;white-space:nowrap;cursor:pointer;outline:0;background-color:#f4f4f4;border-radius:.2em;zoom:1;display:inline}.introjs-button:hover{outline:0;text-decoration:none;border-color:#9e9e9e;background-color:#e0e0e0;color:#212121}.introjs-button:focus{outline:0;text-decoration:none;background-color:#eee;box-shadow:0 0 0 .2rem rgba(158,158,158,.5);border:1px solid #616161;color:#212121}.introjs-button:active{outline:0;text-decoration:none;background-color:#e0e0e0;border-color:#9e9e9e;color:#212121}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{position:absolute;top:0;right:0;display:inline-block;width:45px;height:45px;line-height:45px;color:#616161;font-size:22px;cursor:pointer;font-weight:700;text-align:center;text-decoration:none}.introjs-skipbutton:focus,.introjs-skipbutton:hover{color:#212121;outline:0;text-decoration:none}.introjs-prevbutton{float:left}.introjs-nextbutton{float:right}.introjs-disabled{color:#9e9e9e;border-color:#bdbdbd;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-disabled:focus,.introjs-disabled:hover{color:#9e9e9e;border-color:#bdbdbd;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-hidden{display:none}.introjs-bullets{text-align:center;padding-top:10px;padding-bottom:10px}.introjs-bullets ul{box-sizing:content-box;clear:both;margin:0 auto 0;padding:0;display:inline-block}.introjs-bullets ul li{box-sizing:content-box;list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{transition:width .1s ease-in;box-sizing:content-box;display:block;width:6px;height:6px;background:#ccc;border-radius:10px;text-decoration:none;cursor:pointer}.introjs-bullets ul li a:focus,.introjs-bullets ul li a:hover{width:15px;background:#999;text-decoration:none;outline:0}.introjs-bullets ul li a.active{width:15px;background:#999}.introjs-progress{box-sizing:content-box;overflow:hidden;height:10px;margin:10px;border-radius:4px;background-color:#e0e0e0}.introjs-progressbar{box-sizing:content-box;float:left;width:0%;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.introjs-fixedTooltip{position:fixed}.introjs-hint{box-sizing:content-box;position:absolute;background:0 0;width:20px;height:15px;cursor:pointer}.introjs-hint:focus{border:0;outline:0}.introjs-hint:hover>.introjs-hint-pulse{background-color:rgba(60,60,60,.57)}.introjs-hidehint{display:none}.introjs-fixedhint{position:fixed}@keyframes introjspulse{0%{transform:scale(.95);box-shadow:0 0 0 0 rgba(0,0,0,.7)}70%{transform:scale(1);box-shadow:0 0 0 10px transparent}100%{transform:scale(.95);box-shadow:0 0 0 0 transparent}}.introjs-hint-pulse{box-sizing:content-box;width:15px;height:15px;border-radius:30px;background-color:rgba(136,136,136,.24);z-index:10;position:absolute;transition:all .2s ease-out;animation:introjspulse 2s infinite}.introjs-hint-no-anim .introjs-hint-pulse{animation:none}.introjs-hint-dot{box-sizing:content-box;background:0 0;border-radius:60px;height:50px;width:50px;position:absolute;top:-18px;left:-18px;z-index:1;opacity:0} +/*# sourceMappingURL=introjs.min.css.map */ diff --git a/spec/support/common.rb b/spec/support/common.rb index 3f0c91ec4..302d7a435 100644 --- a/spec/support/common.rb +++ b/spec/support/common.rb @@ -27,7 +27,6 @@ def admin_sign_in(user = 'admin', pass = 'admin123') click_button 'Log In' expect(page).to have_content 'Welcome' wait(2) - page.execute_script("$('#introjs_skipbutton').click()") end def cama_root_relative_path From aea8683abead8069f31ba242bf0629a943986030 Mon Sep 17 00:00:00 2001 From: texpert Date: Tue, 27 Aug 2024 23:33:27 +0300 Subject: [PATCH 2/3] Add sourcemaps and rename file correctly --- app/assets/javascripts/camaleon_cms/admin/admin-manifest.js | 2 +- .../camaleon_cms/admin/introjs/{_intro.min.js => intro.min.js} | 0 .../javascripts/camaleon_cms/admin/introjs/intro.min.js.map | 1 + app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css | 2 +- .../admin/introjs/{_introjs.min.css => introjs.min.css} | 0 .../stylesheets/camaleon_cms/admin/introjs/introjs.min.css.map | 1 + 6 files changed, 4 insertions(+), 2 deletions(-) rename app/assets/javascripts/camaleon_cms/admin/introjs/{_intro.min.js => intro.min.js} (100%) create mode 100644 app/assets/javascripts/camaleon_cms/admin/introjs/intro.min.js.map rename app/assets/stylesheets/camaleon_cms/admin/introjs/{_introjs.min.css => introjs.min.css} (100%) create mode 100644 app/assets/stylesheets/camaleon_cms/admin/introjs/introjs.min.css.map diff --git a/app/assets/javascripts/camaleon_cms/admin/admin-manifest.js b/app/assets/javascripts/camaleon_cms/admin/admin-manifest.js index d38eee67a..74bc1fff0 100644 --- a/app/assets/javascripts/camaleon_cms/admin/admin-manifest.js +++ b/app/assets/javascripts/camaleon_cms/admin/admin-manifest.js @@ -30,7 +30,7 @@ //= require camaleon_cms/admin/_libraries //= require camaleon_cms/admin/_actions -//= require camaleon_cms/admin/introjs/_intro.min +//= require camaleon_cms/admin/introjs/intro.min // uploader //= require camaleon_cms/admin/uploader/uploader_manifest diff --git a/app/assets/javascripts/camaleon_cms/admin/introjs/_intro.min.js b/app/assets/javascripts/camaleon_cms/admin/introjs/intro.min.js similarity index 100% rename from app/assets/javascripts/camaleon_cms/admin/introjs/_intro.min.js rename to app/assets/javascripts/camaleon_cms/admin/introjs/intro.min.js diff --git a/app/assets/javascripts/camaleon_cms/admin/introjs/intro.min.js.map b/app/assets/javascripts/camaleon_cms/admin/introjs/intro.min.js.map new file mode 100644 index 000000000..4756f0276 --- /dev/null +++ b/app/assets/javascripts/camaleon_cms/admin/introjs/intro.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"intro.min.js","sources":["../../src/util/cookie.ts","../../src/core/dontShowAgain.ts","../../src/util/stamp.ts","../../src/core/DOMEvent.ts","../../src/util/isFunction.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/option.ts","../../src/intro.ts","../../src/index.ts"],"sourcesContent":["export function setCookie(name: string, value: string, days?: number) {\n const cookie: {\n [name: string]: string | undefined;\n path: string;\n expires: string | undefined;\n } = { [name]: value, path: \"/\", expires: undefined };\n\n if (days) {\n let date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n cookie.expires = date.toUTCString();\n }\n\n let arr = [];\n for (let key in cookie) {\n arr.push(`${key}=${cookie[key]}`);\n }\n\n document.cookie = arr.join(\"; \");\n\n return getCookie(name);\n}\n\nexport function getAllCookies() {\n let cookie: { [name: string]: string } = {};\n\n document.cookie.split(\";\").forEach((el) => {\n let [k, v] = el.split(\"=\");\n cookie[k.trim()] = v;\n });\n\n return cookie;\n}\n\nexport function getCookie(name: string) {\n return getAllCookies()[name];\n}\n\nexport function deleteCookie(name: string) {\n setCookie(name, \"\", -1);\n}\n","import { IntroJs } from \"../intro\";\nimport { deleteCookie, getCookie, setCookie } from \"../util/cookie\";\n\nconst dontShowAgainCookieValue = \"true\";\n\n/**\n * Set the \"Don't show again\" state\n *\n * @api private\n */\nexport function setDontShowAgain(intro: IntroJs, dontShowAgain: boolean) {\n if (dontShowAgain) {\n setCookie(\n intro._options.dontShowAgainCookie,\n dontShowAgainCookieValue,\n intro._options.dontShowAgainCookieDays\n );\n } else {\n deleteCookie(intro._options.dontShowAgainCookie);\n }\n}\n\n/**\n * Get the \"Don't show again\" state from cookies\n *\n * @api private\n */\nexport function getDontShowAgain(intro: IntroJs): boolean {\n const dontShowCookie = getCookie(intro._options.dontShowAgainCookie);\n return dontShowCookie !== \"\" && dontShowCookie === dontShowAgainCookieValue;\n}\n","/**\n * Mark any object with an incrementing number\n * used for keeping track of objects\n *\n * @param Object obj Any object or DOM Element\n * @param String key\n * @return Object\n */\nconst stamp = (() => {\n const keys: {\n [key: string]: number;\n } = {};\n return function stamp(obj: T, key = \"introjs-stamp\"): number {\n // each group increments from 0\n keys[key] = keys[key] || 0;\n\n // stamp only once per object\n // @ts-ignore\n if (obj[key] === undefined) {\n // increment key for each new object\n // @ts-ignore\n obj[key] = keys[key]++;\n }\n\n // @ts-ignore\n return obj[key];\n };\n})();\n\nexport default stamp;\n","import { IntroJs } from \"../intro\";\nimport stamp from \"../util/stamp\";\n\n/**\n * DOMEvent Handles all DOM events\n *\n * methods:\n *\n * on - add event handler\n * off - remove event\n */\n\nclass DOMEvent {\n private readonly events_key: string = \"introjs_event\";\n\n /**\n * Gets a unique ID for an event listener\n */\n private _id(type: string, listener: Function, context: IntroJs) {\n return type + stamp(listener) + (context ? `_${stamp(context)}` : \"\");\n }\n\n /**\n * Adds event listener\n */\n public on(\n obj: EventTarget,\n type: string,\n listener: (\n context: IntroJs | EventTarget,\n e: Event\n ) => void | undefined | string | Promise,\n context: IntroJs,\n useCapture: boolean\n ) {\n const id = this._id(type, listener, context);\n const handler = (e: Event) => listener(context || obj, e || window.event);\n\n if (\"addEventListener\" in obj) {\n obj.addEventListener(type, handler, useCapture);\n } else if (\"attachEvent\" in obj) {\n // @ts-ignore\n obj.attachEvent(`on${type}`, handler);\n }\n\n // @ts-ignore\n obj[this.events_key] = obj[this.events_key] || {};\n // @ts-ignore\n obj[this.events_key][id] = handler;\n }\n\n /**\n * Removes event listener\n */\n public off(\n obj: EventTarget,\n type: string,\n listener: (\n context: IntroJs | EventTarget,\n e: Event\n ) => void | undefined | string | Promise,\n context: IntroJs,\n useCapture: boolean\n ) {\n const id = this._id(type, listener, context);\n // @ts-ignore\n const handler = obj[this.events_key] && obj[this.events_key][id];\n\n if (!handler) {\n return;\n }\n\n if (\"removeEventListener\" in obj) {\n obj.removeEventListener(type, handler, useCapture);\n } else if (\"detachEvent\" in obj) {\n // @ts-ignore\n obj.detachEvent(`on${type}`, handler);\n }\n\n // @ts-ignore\n obj[this.events_key][id] = null;\n }\n}\n\nexport default new DOMEvent();\n","// Returns true if the given parameter is a function\nexport default (x: any): x is Function => typeof x === \"function\";\n","/**\n * Append a class to an element\n * @api private\n */\nexport default function addClass(element: HTMLElement, className: string) {\n if (element instanceof SVGElement) {\n // svg\n const pre = element.getAttribute(\"class\") || \"\";\n\n if (!pre.match(className)) {\n // check if element doesn't already have className\n element.setAttribute(\"class\", `${pre} ${className}`);\n }\n } else {\n if (element.classList !== undefined) {\n // check for modern classList property\n const classes = className.split(\" \");\n for (const cls of classes) {\n element.classList.add(cls);\n }\n } else if (!element.className.match(className)) {\n // check if element doesn't already have className\n element.className += ` ${className}`;\n }\n }\n}\n","/**\n * Get an element CSS property on the page\n * Thanks to JavaScript Kit: http://www.javascriptkit.com/dhtmltutors/dhtmlcascade4.shtml\n *\n * @api private\n * @returns string property value\n */\nexport default function getPropValue(\n element: HTMLElement,\n propName: string\n): string {\n let propValue = \"\";\n if (\"currentStyle\" in element) {\n //IE\n // @ts-ignore\n propValue = element.currentStyle[propName];\n } else if (document.defaultView && document.defaultView.getComputedStyle) {\n //Others\n propValue = document.defaultView\n .getComputedStyle(element, null)\n .getPropertyValue(propName);\n }\n\n //Prevent exception in IE\n if (propValue && propValue.toLowerCase) {\n return propValue.toLowerCase();\n } else {\n return propValue;\n }\n}\n","import addClass from \"./addClass\";\nimport getPropValue from \"./getPropValue\";\n\n/**\n * To set the show element\n * This function set a relative (in most cases) position and changes the z-index\n *\n * @api private\n */\nexport default function setShowElement(targetElement: HTMLElement) {\n addClass(targetElement, \"introjs-showElement\");\n\n const currentElementPosition = getPropValue(targetElement, \"position\");\n if (\n currentElementPosition !== \"absolute\" &&\n currentElementPosition !== \"relative\" &&\n currentElementPosition !== \"sticky\" &&\n currentElementPosition !== \"fixed\"\n ) {\n //change to new intro item\n addClass(targetElement, \"introjs-relativePosition\");\n }\n}\n","import getScrollParent from \"./getScrollParent\";\n\n/**\n * scroll a scrollable element to a child element\n */\nexport default function scrollParentToElement(\n scrollToElement: boolean,\n targetElement: HTMLElement\n) {\n if (!scrollToElement) return;\n\n const parent = getScrollParent(targetElement);\n\n if (parent === document.body) return;\n\n parent.scrollTop = targetElement.offsetTop - parent.offsetTop;\n}\n","/**\n * Find the nearest scrollable parent\n * copied from https://stackoverflow.com/questions/35939886/find-first-scrollable-parent\n */\nexport default function getScrollParent(element: HTMLElement): HTMLElement {\n let style = window.getComputedStyle(element);\n const excludeStaticParent = style.position === \"absolute\";\n const overflowRegex = /(auto|scroll)/;\n\n if (style.position === \"fixed\") return document.body;\n\n for (\n let parent: HTMLElement | null = element;\n (parent = parent.parentElement);\n\n ) {\n style = window.getComputedStyle(parent);\n if (excludeStaticParent && style.position === \"static\") {\n continue;\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX))\n return parent;\n }\n\n return document.body;\n}\n","/**\n * Provides a cross-browser way to get the screen dimensions\n * via: http://stackoverflow.com/questions/5864467/internet-explorer-innerheight\n *\n * @api private\n */\nexport default function getWinSize(): { width: number; height: number } {\n if (window.innerWidth !== undefined) {\n return { width: window.innerWidth, height: window.innerHeight };\n } else {\n const D = document.documentElement;\n return { width: D.clientWidth, height: D.clientHeight };\n }\n}\n","import elementInViewport from \"./elementInViewport\";\nimport getWindowSize from \"./getWindowSize\";\nimport { ScrollTo } from \"../core/steps\";\n\n/**\n * To change the scroll of `window` after highlighting an element\n *\n * @api private\n */\nexport default function scrollTo(\n scrollToElement: boolean,\n scrollTo: ScrollTo,\n scrollPadding: number,\n targetElement: HTMLElement,\n tooltipLayer: HTMLElement\n) {\n if (scrollTo === \"off\") return;\n let rect: DOMRect;\n\n if (!scrollToElement) return;\n\n if (scrollTo === \"tooltip\") {\n rect = tooltipLayer.getBoundingClientRect();\n } else {\n rect = targetElement.getBoundingClientRect();\n }\n\n if (!elementInViewport(targetElement)) {\n const winHeight = getWindowSize().height;\n const top = rect.bottom - (rect.bottom - rect.top);\n\n // TODO (afshinm): do we need scroll padding now?\n // I have changed the scroll option and now it scrolls the window to\n // the center of the target element or tooltip.\n\n if (top < 0 || targetElement.clientHeight > winHeight) {\n window.scrollBy(\n 0,\n rect.top - (winHeight / 2 - rect.height / 2) - scrollPadding\n ); // 30px padding from edge to look nice\n\n //Scroll down\n } else {\n window.scrollBy(\n 0,\n rect.top - (winHeight / 2 - rect.height / 2) + scrollPadding\n ); // 30px padding from edge to look nice\n }\n }\n}\n","/**\n * Check to see if the element is in the viewport or not\n * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport\n *\n * @api private\n */\nexport default function elementInViewport(el: HTMLElement): boolean {\n const rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom + 80 <= window.innerHeight && // add 80 to get the text right\n rect.right <= window.innerWidth\n );\n}\n","/**\n * Setting anchors to behave like buttons\n *\n * @api private\n */\nexport default function setAnchorAsButton(anchor: HTMLElement) {\n anchor.setAttribute(\"role\", \"button\");\n anchor.tabIndex = 0;\n}\n","import getPropValue from \"./getPropValue\";\n\n/**\n * Checks to see if target element (or parents) position is fixed or not\n *\n * @api private\n */\nexport default function isFixed(element: HTMLElement): boolean {\n const parent = element.parentElement;\n\n if (!parent || parent.nodeName === \"HTML\") {\n return false;\n }\n\n if (getPropValue(element, \"position\") === \"fixed\") {\n return true;\n }\n\n return isFixed(parent);\n}\n","import getPropValue from \"./getPropValue\";\nimport isFixed from \"./isFixed\";\n\n/**\n * Get an element position on the page relative to another element (or body)\n * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966\n *\n * @api private\n * @returns Element's position info\n */\nexport default function getOffset(\n element: HTMLElement,\n relativeEl?: HTMLElement\n): { width: number; height: number; left: number; top: number } {\n const body = document.body;\n const docEl = document.documentElement;\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n relativeEl = relativeEl || body;\n\n const x = element.getBoundingClientRect();\n const xr = relativeEl.getBoundingClientRect();\n const relativeElPosition = getPropValue(relativeEl, \"position\");\n\n let obj = {\n width: x.width,\n height: x.height,\n };\n\n if (\n (relativeEl.tagName.toLowerCase() !== \"body\" &&\n relativeElPosition === \"relative\") ||\n relativeElPosition === \"sticky\"\n ) {\n // when the container of our target element is _not_ body and has either \"relative\" or \"sticky\" position, we should not\n // consider the scroll position but we need to include the relative x/y of the container element\n return Object.assign(obj, {\n top: x.top - xr.top,\n left: x.left - xr.left,\n });\n } else {\n if (isFixed(element)) {\n return Object.assign(obj, {\n top: x.top,\n left: x.left,\n });\n } else {\n return Object.assign(obj, {\n top: x.top + scrollTop,\n left: x.left + scrollLeft,\n });\n }\n }\n}\n","/**\n * Remove a class from an element\n *\n * @api private\n */\nexport default function removeClass(\n element: HTMLElement,\n classNameRegex: RegExp | string\n) {\n if (element instanceof SVGElement) {\n const pre = element.getAttribute(\"class\") || \"\";\n\n element.setAttribute(\n \"class\",\n pre.replace(classNameRegex, \"\").replace(/^\\s+|\\s+$/g, \"\")\n );\n } else {\n element.className = element.className\n .replace(classNameRegex, \"\")\n .replace(/^\\s+|\\s+$/g, \"\");\n }\n}\n","/**\n * Sets the style of an DOM element\n */\nexport default function setStyle(\n element: HTMLElement,\n style: string | { [key: string]: string | number }\n) {\n let cssText = \"\";\n\n if (element.style.cssText) {\n cssText += element.style.cssText;\n }\n\n if (typeof style === \"string\") {\n cssText += style;\n } else {\n for (const rule in style) {\n cssText += `${rule}:${style[rule]};`;\n }\n }\n\n element.style.cssText = cssText;\n}\n","import getOffset from \"../util/getOffset\";\nimport isFixed from \"../util/isFixed\";\nimport addClass from \"../util/addClass\";\nimport removeClass from \"../util/removeClass\";\nimport setStyle from \"../util/setStyle\";\nimport { IntroJs } from \"../intro\";\nimport { HintStep, IntroStep } from \"./steps\";\n\n/**\n * Update the position of the helper layer on the screen\n *\n * @api private\n */\nexport default function setHelperLayerPosition(\n intro: IntroJs,\n step: IntroStep | HintStep,\n helperLayer: HTMLElement\n) {\n if (!helperLayer || !step) return;\n\n const elementPosition = getOffset(\n step.element as HTMLElement,\n intro._targetElement\n );\n let widthHeightPadding = intro._options.helperElementPadding;\n\n // If the target element is fixed, the tooltip should be fixed as well.\n // Otherwise, remove a fixed class that may be left over from the previous\n // step.\n if (step.element instanceof Element && isFixed(step.element)) {\n addClass(helperLayer, \"introjs-fixedTooltip\");\n } else {\n removeClass(helperLayer, \"introjs-fixedTooltip\");\n }\n\n if (step.position === \"floating\") {\n widthHeightPadding = 0;\n }\n\n //set new position to helper layer\n setStyle(helperLayer, {\n width: `${elementPosition.width + widthHeightPadding}px`,\n height: `${elementPosition.height + widthHeightPadding}px`,\n top: `${elementPosition.top - widthHeightPadding / 2}px`,\n left: `${elementPosition.left - widthHeightPadding / 2}px`,\n });\n}\n","/**\n * Set tooltip left so it doesn't go off the right side of the window\n *\n * @return boolean true, if tooltipLayerStyleLeft is ok. false, otherwise.\n */\nexport default function checkRight(\n targetOffset: {\n top: number;\n left: number;\n width: number;\n height: number;\n },\n tooltipLayerStyleLeft: number,\n tooltipOffset: {\n top: number;\n left: number;\n width: number;\n height: number;\n },\n windowSize: {\n width: number;\n height: number;\n },\n tooltipLayer: HTMLElement\n): boolean {\n if (\n targetOffset.left + tooltipLayerStyleLeft + tooltipOffset.width >\n windowSize.width\n ) {\n // off the right side of the window\n tooltipLayer.style.left = `${\n windowSize.width - tooltipOffset.width - targetOffset.left\n }px`;\n\n return false;\n }\n\n tooltipLayer.style.left = `${tooltipLayerStyleLeft}px`;\n return true;\n}\n","/**\n * Set tooltip right so it doesn't go off the left side of the window\n *\n * @return boolean true, if tooltipLayerStyleRight is ok. false, otherwise.\n */\nexport default function checkLeft(\n targetOffset: {\n top: number;\n left: number;\n width: number;\n height: number;\n },\n tooltipLayerStyleRight: number,\n tooltipOffset: {\n top: number;\n left: number;\n width: number;\n height: number;\n },\n tooltipLayer: HTMLElement\n): boolean {\n if (\n targetOffset.left +\n targetOffset.width -\n tooltipLayerStyleRight -\n tooltipOffset.width <\n 0\n ) {\n // off the left side of the window\n tooltipLayer.style.left = `${-targetOffset.left}px`;\n return false;\n }\n tooltipLayer.style.right = `${tooltipLayerStyleRight}px`;\n return true;\n}\n","/**\n * Remove an entry from a string array if it's there, does nothing if it isn't there.\n */\nexport default function removeEntry(stringArray: K[], stringToRemove: K) {\n if (stringArray.includes(stringToRemove)) {\n stringArray.splice(stringArray.indexOf(stringToRemove), 1);\n }\n}\n","import getOffset from \"../util/getOffset\";\nimport getWindowSize from \"../util/getWindowSize\";\nimport addClass from \"../util/addClass\";\nimport checkRight from \"../util/checkRight\";\nimport checkLeft from \"../util/checkLeft\";\nimport removeEntry from \"../util/removeEntry\";\nimport { HintStep, IntroStep, TooltipPosition } from \"./steps\";\nimport { IntroJs } from \"../intro\";\n\n/**\n * auto-determine alignment\n */\nfunction _determineAutoAlignment(\n offsetLeft: number,\n tooltipWidth: number,\n windowWidth: number,\n desiredAlignment: TooltipPosition[]\n): TooltipPosition | null {\n const halfTooltipWidth = tooltipWidth / 2;\n const winWidth = Math.min(windowWidth, window.screen.width);\n\n // valid left must be at least a tooltipWidth\n // away from right side\n if (winWidth - offsetLeft < tooltipWidth) {\n removeEntry(desiredAlignment, \"top-left-aligned\");\n removeEntry(desiredAlignment, \"bottom-left-aligned\");\n }\n\n // valid middle must be at least half\n // width away from both sides\n if (\n offsetLeft < halfTooltipWidth ||\n winWidth - offsetLeft < halfTooltipWidth\n ) {\n removeEntry(desiredAlignment, \"top-middle-aligned\");\n removeEntry(desiredAlignment, \"bottom-middle-aligned\");\n }\n\n // valid right must be at least a tooltipWidth\n // width away from left side\n if (offsetLeft < tooltipWidth) {\n removeEntry(desiredAlignment, \"top-right-aligned\");\n removeEntry(desiredAlignment, \"bottom-right-aligned\");\n }\n\n if (desiredAlignment.length) {\n return desiredAlignment[0];\n }\n\n return null;\n}\n\n/**\n * Determines the position of the tooltip based on the position precedence and availability\n * of screen space.\n */\nfunction _determineAutoPosition(\n positionPrecedence: TooltipPosition[],\n targetElement: HTMLElement,\n tooltipLayer: HTMLElement,\n desiredTooltipPosition: TooltipPosition\n): TooltipPosition {\n // Take a clone of position precedence. These will be the available\n const possiblePositions = positionPrecedence.slice();\n\n const windowSize = getWindowSize();\n const tooltipHeight = getOffset(tooltipLayer).height + 10;\n const tooltipWidth = getOffset(tooltipLayer).width + 20;\n const targetElementRect = targetElement.getBoundingClientRect();\n\n // If we check all the possible areas, and there are no valid places for the tooltip, the element\n // must take up most of the screen real estate. Show the tooltip floating in the middle of the screen.\n let calculatedPosition: TooltipPosition = \"floating\";\n\n /*\n * auto determine position\n */\n\n // Check for space below\n if (targetElementRect.bottom + tooltipHeight > windowSize.height) {\n removeEntry(possiblePositions, \"bottom\");\n }\n\n // Check for space above\n if (targetElementRect.top - tooltipHeight < 0) {\n removeEntry(possiblePositions, \"top\");\n }\n\n // Check for space to the right\n if (targetElementRect.right + tooltipWidth > windowSize.width) {\n removeEntry(possiblePositions, \"right\");\n }\n\n // Check for space to the left\n if (targetElementRect.left - tooltipWidth < 0) {\n removeEntry(possiblePositions, \"left\");\n }\n\n // strip alignment from position\n if (desiredTooltipPosition) {\n // ex: \"bottom-right-aligned\"\n // should return 'bottom'\n desiredTooltipPosition = desiredTooltipPosition.split(\n \"-\"\n )[0] as TooltipPosition;\n }\n\n if (possiblePositions.length) {\n // Pick the first valid position, in order\n calculatedPosition = possiblePositions[0];\n\n if (possiblePositions.includes(desiredTooltipPosition)) {\n // If the requested position is in the list, choose that\n calculatedPosition = desiredTooltipPosition;\n }\n }\n\n // only \"top\" and \"bottom\" positions have optional alignments\n if (calculatedPosition === \"top\" || calculatedPosition === \"bottom\") {\n let defaultAlignment: TooltipPosition;\n let desiredAlignment: TooltipPosition[] = [];\n\n if (calculatedPosition === \"top\") {\n // if screen width is too small\n // for ANY alignment, middle is\n // probably the best for visibility\n defaultAlignment = \"top-middle-aligned\";\n\n desiredAlignment = [\n \"top-left-aligned\",\n \"top-middle-aligned\",\n \"top-right-aligned\",\n ];\n } else {\n defaultAlignment = \"bottom-middle-aligned\";\n\n desiredAlignment = [\n \"bottom-left-aligned\",\n \"bottom-middle-aligned\",\n \"bottom-right-aligned\",\n ];\n }\n\n calculatedPosition =\n _determineAutoAlignment(\n targetElementRect.left,\n tooltipWidth,\n windowSize.width,\n desiredAlignment\n ) || defaultAlignment;\n }\n\n return calculatedPosition;\n}\n\n/**\n * Render tooltip box in the page\n *\n * @api private\n */\nexport default function placeTooltip(\n intro: IntroJs,\n currentStep: IntroStep | HintStep,\n tooltipLayer: HTMLElement,\n arrowLayer: HTMLElement,\n hintMode: boolean = false\n) {\n if (!currentStep) return;\n\n let tooltipCssClass = \"\";\n let tooltipOffset: {\n top: number;\n left: number;\n width: number;\n height: number;\n };\n let targetOffset: {\n top: number;\n left: number;\n width: number;\n height: number;\n };\n let windowSize: { width: number; height: number };\n let currentTooltipPosition: TooltipPosition;\n\n //reset the old style\n tooltipLayer.style.top = \"\";\n tooltipLayer.style.right = \"\";\n tooltipLayer.style.bottom = \"\";\n tooltipLayer.style.left = \"\";\n tooltipLayer.style.marginLeft = \"\";\n tooltipLayer.style.marginTop = \"\";\n\n arrowLayer.style.display = \"inherit\";\n\n //if we have a custom css class for each step\n if (typeof currentStep.tooltipClass === \"string\") {\n tooltipCssClass = currentStep.tooltipClass;\n } else {\n tooltipCssClass = intro._options.tooltipClass;\n }\n\n tooltipLayer.className = [\"introjs-tooltip\", tooltipCssClass]\n .filter(Boolean)\n .join(\" \");\n\n tooltipLayer.setAttribute(\"role\", \"dialog\");\n\n currentTooltipPosition = currentStep.position;\n\n // Floating is always valid, no point in calculating\n if (currentTooltipPosition !== \"floating\" && intro._options.autoPosition) {\n currentTooltipPosition = _determineAutoPosition(\n intro._options.positionPrecedence,\n currentStep.element as HTMLElement,\n tooltipLayer,\n currentTooltipPosition\n );\n }\n\n let tooltipLayerStyleLeft: number;\n targetOffset = getOffset(currentStep.element as HTMLElement);\n tooltipOffset = getOffset(tooltipLayer);\n windowSize = getWindowSize();\n\n addClass(tooltipLayer, `introjs-${currentTooltipPosition}`);\n\n let tooltipLayerStyleLeftRight =\n targetOffset.width / 2 - tooltipOffset.width / 2;\n\n switch (currentTooltipPosition) {\n case \"top-right-aligned\":\n arrowLayer.className = \"introjs-arrow bottom-right\";\n\n let tooltipLayerStyleRight = 0;\n checkLeft(\n targetOffset,\n tooltipLayerStyleRight,\n tooltipOffset,\n tooltipLayer\n );\n tooltipLayer.style.bottom = `${targetOffset.height + 20}px`;\n break;\n\n case \"top-middle-aligned\":\n arrowLayer.className = \"introjs-arrow bottom-middle\";\n\n // a fix for middle aligned hints\n if (hintMode) {\n tooltipLayerStyleLeftRight += 5;\n }\n\n if (\n checkLeft(\n targetOffset,\n tooltipLayerStyleLeftRight,\n tooltipOffset,\n tooltipLayer\n )\n ) {\n tooltipLayer.style.right = \"\";\n checkRight(\n targetOffset,\n tooltipLayerStyleLeftRight,\n tooltipOffset,\n windowSize,\n tooltipLayer\n );\n }\n tooltipLayer.style.bottom = `${targetOffset.height + 20}px`;\n break;\n\n case \"top-left-aligned\":\n // top-left-aligned is the same as the default top\n case \"top\":\n arrowLayer.className = \"introjs-arrow bottom\";\n\n tooltipLayerStyleLeft = hintMode ? 0 : 15;\n\n checkRight(\n targetOffset,\n tooltipLayerStyleLeft,\n tooltipOffset,\n windowSize,\n tooltipLayer\n );\n tooltipLayer.style.bottom = `${targetOffset.height + 20}px`;\n break;\n case \"right\":\n tooltipLayer.style.left = `${targetOffset.width + 20}px`;\n if (targetOffset.top + tooltipOffset.height > windowSize.height) {\n // In this case, right would have fallen below the bottom of the screen.\n // Modify so that the bottom of the tooltip connects with the target\n arrowLayer.className = \"introjs-arrow left-bottom\";\n tooltipLayer.style.top = `-${\n tooltipOffset.height - targetOffset.height - 20\n }px`;\n } else {\n arrowLayer.className = \"introjs-arrow left\";\n }\n break;\n case \"left\":\n if (!hintMode && intro._options.showStepNumbers === true) {\n tooltipLayer.style.top = \"15px\";\n }\n\n if (targetOffset.top + tooltipOffset.height > windowSize.height) {\n // In this case, left would have fallen below the bottom of the screen.\n // Modify so that the bottom of the tooltip connects with the target\n tooltipLayer.style.top = `-${\n tooltipOffset.height - targetOffset.height - 20\n }px`;\n arrowLayer.className = \"introjs-arrow right-bottom\";\n } else {\n arrowLayer.className = \"introjs-arrow right\";\n }\n tooltipLayer.style.right = `${targetOffset.width + 20}px`;\n\n break;\n case \"floating\":\n arrowLayer.style.display = \"none\";\n\n //we have to adjust the top and left of layer manually for intro items without element\n tooltipLayer.style.left = \"50%\";\n tooltipLayer.style.top = \"50%\";\n tooltipLayer.style.marginLeft = `-${tooltipOffset.width / 2}px`;\n tooltipLayer.style.marginTop = `-${tooltipOffset.height / 2}px`;\n\n break;\n case \"bottom-right-aligned\":\n arrowLayer.className = \"introjs-arrow top-right\";\n\n tooltipLayerStyleRight = 0;\n checkLeft(\n targetOffset,\n tooltipLayerStyleRight,\n tooltipOffset,\n tooltipLayer\n );\n tooltipLayer.style.top = `${targetOffset.height + 20}px`;\n break;\n\n case \"bottom-middle-aligned\":\n arrowLayer.className = \"introjs-arrow top-middle\";\n\n // a fix for middle aligned hints\n if (hintMode) {\n tooltipLayerStyleLeftRight += 5;\n }\n\n if (\n checkLeft(\n targetOffset,\n tooltipLayerStyleLeftRight,\n tooltipOffset,\n tooltipLayer\n )\n ) {\n tooltipLayer.style.right = \"\";\n checkRight(\n targetOffset,\n tooltipLayerStyleLeftRight,\n tooltipOffset,\n windowSize,\n tooltipLayer\n );\n }\n tooltipLayer.style.top = `${targetOffset.height + 20}px`;\n break;\n\n // case 'bottom-left-aligned':\n // Bottom-left-aligned is the same as the default bottom\n // case 'bottom':\n // Bottom going to follow the default behavior\n default:\n arrowLayer.className = \"introjs-arrow top\";\n\n tooltipLayerStyleLeft = 0;\n checkRight(\n targetOffset,\n tooltipLayerStyleLeft,\n tooltipOffset,\n windowSize,\n tooltipLayer\n );\n tooltipLayer.style.top = `${targetOffset.height + 20}px`;\n }\n}\n","import removeClass from \"../util/removeClass\";\n\n/**\n * To remove all show element(s)\n *\n * @api private\n */\nexport default function removeShowElement() {\n const elms = Array.from(\n document.querySelectorAll(\".introjs-showElement\")\n );\n\n for (const elm of elms) {\n removeClass(elm, /introjs-[a-zA-Z]+/g);\n }\n}\n","import setStyle from \"./setStyle\";\n\n/**\n * Create a DOM element with various attributes\n */\nexport default function _createElement(\n tagName: K,\n attrs?: { [key: string]: string | Function }\n): HTMLElementTagNameMap[K] {\n let element = document.createElement(tagName);\n\n attrs = attrs || {};\n\n // regex for matching attributes that need to be set with setAttribute\n const setAttRegex = /^(?:role|data-|aria-)/;\n\n for (const k in attrs) {\n let v = attrs[k];\n\n if (k === \"style\" && typeof v !== \"function\") {\n setStyle(element, v);\n } else if (typeof v === \"string\" && k.match(setAttRegex)) {\n element.setAttribute(k, v);\n } else {\n // @ts-ignore\n element[k] = v;\n }\n }\n\n return element;\n}\n","import setStyle from \"./setStyle\";\n\n/**\n * Appends `element` to `parentElement`\n */\nexport default function appendChild(\n parentElement: HTMLElement,\n element: HTMLElement,\n animate: boolean = false\n) {\n if (animate) {\n const existingOpacity = element.style.opacity || \"1\";\n\n setStyle(element, {\n opacity: \"0\",\n });\n\n window.setTimeout(() => {\n setStyle(element, {\n opacity: existingOpacity,\n });\n }, 10);\n }\n\n parentElement.appendChild(element);\n}\n","import setShowElement from \"../util/setShowElement\";\nimport scrollParentToElement from \"../util/scrollParentToElement\";\nimport addClass from \"../util/addClass\";\nimport scrollTo from \"../util/scrollTo\";\nimport exitIntro from \"./exitIntro\";\nimport setAnchorAsButton from \"../util/setAnchorAsButton\";\nimport { IntroStep, nextStep, previousStep } from \"./steps\";\nimport setHelperLayerPosition from \"./setHelperLayerPosition\";\nimport placeTooltip from \"./placeTooltip\";\nimport removeShowElement from \"./removeShowElement\";\nimport createElement from \"../util/createElement\";\nimport setStyle from \"../util/setStyle\";\nimport appendChild from \"../util/appendChild\";\nimport { IntroJs } from \"../intro\";\nimport isFunction from \"../util/isFunction\";\n\n/**\n * Gets the current progress percentage\n *\n * @api private\n * @returns current progress percentage\n */\nfunction _getProgress(currentStep: number, introItemsLength: number) {\n // Steps are 0 indexed\n return ((currentStep + 1) / introItemsLength) * 100;\n}\n\n/**\n * Add disableinteraction layer and adjust the size and position of the layer\n *\n * @api private\n */\nfunction _disableInteraction(intro: IntroJs, step: IntroStep) {\n let disableInteractionLayer = document.querySelector(\n \".introjs-disableInteraction\"\n );\n\n if (disableInteractionLayer === null) {\n disableInteractionLayer = createElement(\"div\", {\n className: \"introjs-disableInteraction\",\n });\n\n intro._targetElement.appendChild(disableInteractionLayer);\n }\n\n setHelperLayerPosition(intro, step, disableInteractionLayer);\n}\n\n/**\n * Creates the bullets layer\n * @private\n */\nfunction _createBullets(intro: IntroJs, targetElement: IntroStep): HTMLElement {\n const bulletsLayer = createElement(\"div\", {\n className: \"introjs-bullets\",\n });\n\n if (intro._options.showBullets === false) {\n bulletsLayer.style.display = \"none\";\n }\n\n const ulContainer = createElement(\"ul\");\n ulContainer.setAttribute(\"role\", \"tablist\");\n\n const anchorClick = function (this: HTMLElement) {\n const stepNumber = this.getAttribute(\"data-step-number\");\n if (stepNumber == null) return;\n\n intro.goToStep(parseInt(stepNumber, 10));\n };\n\n for (let i = 0; i < intro._introItems.length; i++) {\n const { step } = intro._introItems[i];\n\n const innerLi = createElement(\"li\");\n const anchorLink = createElement(\"a\");\n\n innerLi.setAttribute(\"role\", \"presentation\");\n anchorLink.setAttribute(\"role\", \"tab\");\n\n anchorLink.onclick = anchorClick;\n\n if (i === targetElement.step - 1) {\n anchorLink.className = \"active\";\n }\n\n setAnchorAsButton(anchorLink);\n anchorLink.innerHTML = \" \";\n anchorLink.setAttribute(\"data-step-number\", step.toString());\n\n innerLi.appendChild(anchorLink);\n ulContainer.appendChild(innerLi);\n }\n\n bulletsLayer.appendChild(ulContainer);\n\n return bulletsLayer;\n}\n\n/**\n * Deletes and recreates the bullets layer\n * @private\n */\nexport function _recreateBullets(intro: IntroJs, targetElement: IntroStep) {\n if (intro._options.showBullets) {\n const existing = document.querySelector(\".introjs-bullets\");\n\n if (existing && existing.parentNode) {\n existing.parentNode.replaceChild(\n _createBullets(intro, targetElement),\n existing\n );\n }\n }\n}\n\n/**\n * Updates the bullets\n */\nfunction _updateBullets(\n showBullets: boolean,\n oldReferenceLayer: HTMLElement,\n targetElement: IntroStep\n) {\n if (showBullets) {\n const oldRefActiveBullet = oldReferenceLayer.querySelector(\n \".introjs-bullets li > a.active\"\n );\n\n const oldRefBulletStepNumber = oldReferenceLayer.querySelector(\n `.introjs-bullets li > a[data-step-number=\"${targetElement.step}\"]`\n );\n\n if (oldRefActiveBullet && oldRefBulletStepNumber) {\n oldRefActiveBullet.className = \"\";\n oldRefBulletStepNumber.className = \"active\";\n }\n }\n}\n\n/**\n * Creates the progress-bar layer and elements\n * @private\n */\nfunction _createProgressBar(intro: IntroJs) {\n const progressLayer = createElement(\"div\");\n\n progressLayer.className = \"introjs-progress\";\n\n if (intro._options.showProgress === false) {\n progressLayer.style.display = \"none\";\n }\n\n const progressBar = createElement(\"div\", {\n className: \"introjs-progressbar\",\n });\n\n if (intro._options.progressBarAdditionalClass) {\n progressBar.className += \" \" + intro._options.progressBarAdditionalClass;\n }\n\n const progress = _getProgress(intro._currentStep, intro._introItems.length);\n progressBar.setAttribute(\"role\", \"progress\");\n progressBar.setAttribute(\"aria-valuemin\", \"0\");\n progressBar.setAttribute(\"aria-valuemax\", \"100\");\n progressBar.setAttribute(\"aria-valuenow\", progress.toString());\n progressBar.style.cssText = `width:${progress}%;`;\n\n progressLayer.appendChild(progressBar);\n\n return progressLayer;\n}\n\n/**\n * Updates an existing progress bar variables\n * @private\n */\nexport function _updateProgressBar(\n oldReferenceLayer: HTMLElement,\n currentStep: number,\n introItemsLength: number\n) {\n const progressBar = oldReferenceLayer.querySelector(\n \".introjs-progress .introjs-progressbar\"\n );\n\n if (!progressBar) return;\n\n const progress = _getProgress(currentStep, introItemsLength);\n\n progressBar.style.cssText = `width:${progress}%;`;\n progressBar.setAttribute(\"aria-valuenow\", progress.toString());\n}\n\n/**\n * Show an element on the page\n *\n * @api private\n */\nexport default async function _showElement(\n intro: IntroJs,\n targetElement: IntroStep\n) {\n if (isFunction(intro._introChangeCallback)) {\n await intro._introChangeCallback.call(intro, targetElement.element);\n }\n\n const oldHelperLayer = document.querySelector(\n \".introjs-helperLayer\"\n );\n const oldReferenceLayer = document.querySelector(\n \".introjs-tooltipReferenceLayer\"\n );\n let highlightClass = \"introjs-helperLayer\";\n let nextTooltipButton: HTMLElement;\n let prevTooltipButton: HTMLElement;\n let skipTooltipButton: HTMLElement;\n\n //check for a current step highlight class\n if (typeof targetElement.highlightClass === \"string\") {\n highlightClass += ` ${targetElement.highlightClass}`;\n }\n //check for options highlight class\n if (typeof intro._options.highlightClass === \"string\") {\n highlightClass += ` ${intro._options.highlightClass}`;\n }\n\n if (oldHelperLayer !== null && oldReferenceLayer !== null) {\n const oldHelperNumberLayer = oldReferenceLayer.querySelector(\n \".introjs-helperNumberLayer\"\n );\n const oldTooltipLayer = oldReferenceLayer.querySelector(\n \".introjs-tooltiptext\"\n ) as HTMLElement;\n const oldTooltipTitleLayer = oldReferenceLayer.querySelector(\n \".introjs-tooltip-title\"\n ) as HTMLElement;\n const oldArrowLayer = oldReferenceLayer.querySelector(\n \".introjs-arrow\"\n ) as HTMLElement;\n const oldTooltipContainer = oldReferenceLayer.querySelector(\n \".introjs-tooltip\"\n ) as HTMLElement;\n\n skipTooltipButton = oldReferenceLayer.querySelector(\n \".introjs-skipbutton\"\n ) as HTMLElement;\n prevTooltipButton = oldReferenceLayer.querySelector(\n \".introjs-prevbutton\"\n ) as HTMLElement;\n nextTooltipButton = oldReferenceLayer.querySelector(\n \".introjs-nextbutton\"\n ) as HTMLElement;\n\n //update or reset the helper highlight class\n oldHelperLayer.className = highlightClass;\n //hide the tooltip\n oldTooltipContainer.style.opacity = \"0\";\n oldTooltipContainer.style.display = \"none\";\n\n // if the target element is within a scrollable element\n scrollParentToElement(\n intro._options.scrollToElement,\n targetElement.element as HTMLElement\n );\n\n // set new position to helper layer\n setHelperLayerPosition(intro, targetElement, oldHelperLayer);\n setHelperLayerPosition(intro, targetElement, oldReferenceLayer);\n\n //remove old classes if the element still exist\n removeShowElement();\n\n //we should wait until the CSS3 transition is competed (it's 0.3 sec) to prevent incorrect `height` and `width` calculation\n if (intro._lastShowElementTimer) {\n window.clearTimeout(intro._lastShowElementTimer);\n }\n\n intro._lastShowElementTimer = window.setTimeout(() => {\n // set current step to the label\n if (oldHelperNumberLayer !== null) {\n oldHelperNumberLayer.innerHTML = `${targetElement.step} ${intro._options.stepNumbersOfLabel} ${intro._introItems.length}`;\n }\n\n // set current tooltip text\n oldTooltipLayer.innerHTML = targetElement.intro || \"\";\n\n // set current tooltip title\n oldTooltipTitleLayer.innerHTML = targetElement.title || \"\";\n\n //set the tooltip position\n oldTooltipContainer.style.display = \"block\";\n placeTooltip(intro, targetElement, oldTooltipContainer, oldArrowLayer);\n\n //change active bullet\n _updateBullets(\n intro._options.showBullets,\n oldReferenceLayer,\n targetElement\n );\n\n _updateProgressBar(\n oldReferenceLayer,\n intro._currentStep,\n intro._introItems.length\n );\n\n //show the tooltip\n oldTooltipContainer.style.opacity = \"1\";\n\n //reset button focus\n if (\n typeof nextTooltipButton !== \"undefined\" &&\n nextTooltipButton !== null &&\n /introjs-donebutton/gi.test(nextTooltipButton.className)\n ) {\n // skip button is now \"done\" button\n nextTooltipButton.focus();\n } else if (\n typeof nextTooltipButton !== \"undefined\" &&\n nextTooltipButton !== null\n ) {\n //still in the tour, focus on next\n nextTooltipButton.focus();\n }\n\n // change the scroll of the window, if needed\n scrollTo(\n intro._options.scrollToElement,\n targetElement.scrollTo,\n intro._options.scrollPadding,\n targetElement.element as HTMLElement,\n oldTooltipLayer\n );\n }, 350);\n\n // end of old element if-else condition\n } else {\n const helperLayer = createElement(\"div\", {\n className: highlightClass,\n });\n const referenceLayer = createElement(\"div\", {\n className: \"introjs-tooltipReferenceLayer\",\n });\n const arrowLayer = createElement(\"div\", {\n className: \"introjs-arrow\",\n });\n const tooltipLayer = createElement(\"div\", {\n className: \"introjs-tooltip\",\n });\n const tooltipTextLayer = createElement(\"div\", {\n className: \"introjs-tooltiptext\",\n });\n const tooltipHeaderLayer = createElement(\"div\", {\n className: \"introjs-tooltip-header\",\n });\n const tooltipTitleLayer = createElement(\"h1\", {\n className: \"introjs-tooltip-title\",\n });\n\n const buttonsLayer = createElement(\"div\");\n\n setStyle(helperLayer, {\n \"box-shadow\": `0 0 1px 2px rgba(33, 33, 33, 0.8), rgba(33, 33, 33, ${intro._options.overlayOpacity.toString()}) 0 0 0 5000px`,\n });\n\n // target is within a scrollable element\n scrollParentToElement(\n intro._options.scrollToElement,\n targetElement.element as HTMLElement\n );\n\n //set new position to helper layer\n setHelperLayerPosition(intro, targetElement, helperLayer);\n setHelperLayerPosition(intro, targetElement, referenceLayer);\n\n //add helper layer to target element\n appendChild(intro._targetElement, helperLayer, true);\n appendChild(intro._targetElement, referenceLayer);\n\n tooltipTextLayer.innerHTML = targetElement.intro;\n tooltipTitleLayer.innerHTML = targetElement.title;\n\n buttonsLayer.className = \"introjs-tooltipbuttons\";\n if (intro._options.showButtons === false) {\n buttonsLayer.style.display = \"none\";\n }\n\n tooltipHeaderLayer.appendChild(tooltipTitleLayer);\n tooltipLayer.appendChild(tooltipHeaderLayer);\n tooltipLayer.appendChild(tooltipTextLayer);\n\n // \"Do not show again\" checkbox\n if (intro._options.dontShowAgain) {\n const dontShowAgainWrapper = createElement(\"div\", {\n className: \"introjs-dontShowAgain\",\n });\n const dontShowAgainCheckbox = createElement(\"input\", {\n type: \"checkbox\",\n id: \"introjs-dontShowAgain\",\n name: \"introjs-dontShowAgain\",\n });\n dontShowAgainCheckbox.onchange = (e) => {\n intro.setDontShowAgain((e.target).checked);\n };\n const dontShowAgainCheckboxLabel = createElement(\"label\", {\n htmlFor: \"introjs-dontShowAgain\",\n });\n dontShowAgainCheckboxLabel.innerText = intro._options.dontShowAgainLabel;\n dontShowAgainWrapper.appendChild(dontShowAgainCheckbox);\n dontShowAgainWrapper.appendChild(dontShowAgainCheckboxLabel);\n\n tooltipLayer.appendChild(dontShowAgainWrapper);\n }\n\n tooltipLayer.appendChild(_createBullets(intro, targetElement));\n tooltipLayer.appendChild(_createProgressBar(intro));\n\n // add helper layer number\n const helperNumberLayer = createElement(\"div\");\n\n if (intro._options.showStepNumbers === true) {\n helperNumberLayer.className = \"introjs-helperNumberLayer\";\n helperNumberLayer.innerHTML = `${targetElement.step} ${intro._options.stepNumbersOfLabel} ${intro._introItems.length}`;\n tooltipLayer.appendChild(helperNumberLayer);\n }\n\n tooltipLayer.appendChild(arrowLayer);\n referenceLayer.appendChild(tooltipLayer);\n\n //next button\n nextTooltipButton = createElement(\"a\");\n\n nextTooltipButton.onclick = async () => {\n if (intro._introItems.length - 1 !== intro._currentStep) {\n await nextStep(intro);\n } else if (/introjs-donebutton/gi.test(nextTooltipButton.className)) {\n if (isFunction(intro._introCompleteCallback)) {\n await intro._introCompleteCallback.call(\n intro,\n intro._currentStep,\n \"done\"\n );\n }\n\n await exitIntro(intro, intro._targetElement);\n }\n };\n\n setAnchorAsButton(nextTooltipButton);\n nextTooltipButton.innerHTML = intro._options.nextLabel;\n\n //previous button\n prevTooltipButton = createElement(\"a\");\n\n prevTooltipButton.onclick = async () => {\n if (intro._currentStep > 0) {\n await previousStep(intro);\n }\n };\n\n setAnchorAsButton(prevTooltipButton);\n prevTooltipButton.innerHTML = intro._options.prevLabel;\n\n //skip button\n skipTooltipButton = createElement(\"a\", {\n className: \"introjs-skipbutton\",\n });\n\n setAnchorAsButton(skipTooltipButton);\n skipTooltipButton.innerHTML = intro._options.skipLabel;\n\n skipTooltipButton.onclick = async () => {\n if (\n intro._introItems.length - 1 === intro._currentStep &&\n isFunction(intro._introCompleteCallback)\n ) {\n await intro._introCompleteCallback.call(\n intro,\n intro._currentStep,\n \"skip\"\n );\n }\n\n if (isFunction(intro._introSkipCallback)) {\n await intro._introSkipCallback.call(intro, intro._currentStep);\n }\n\n await exitIntro(intro, intro._targetElement);\n };\n\n tooltipHeaderLayer.appendChild(skipTooltipButton);\n\n // in order to prevent displaying previous button always\n if (intro._introItems.length > 1) {\n buttonsLayer.appendChild(prevTooltipButton);\n }\n\n // we always need the next button because this\n // button changes to \"Done\" in the last step of the tour\n buttonsLayer.appendChild(nextTooltipButton);\n tooltipLayer.appendChild(buttonsLayer);\n\n // set proper position\n placeTooltip(intro, targetElement, tooltipLayer, arrowLayer);\n\n // change the scroll of the window, if needed\n scrollTo(\n intro._options.scrollToElement,\n targetElement.scrollTo,\n intro._options.scrollPadding,\n targetElement.element as HTMLElement,\n tooltipLayer\n );\n\n //end of new element if-else condition\n }\n\n // removing previous disable interaction layer\n const disableInteractionLayer = intro._targetElement.querySelector(\n \".introjs-disableInteraction\"\n );\n if (disableInteractionLayer && disableInteractionLayer.parentNode) {\n disableInteractionLayer.parentNode.removeChild(disableInteractionLayer);\n }\n\n //disable interaction\n if (targetElement.disableInteraction) {\n _disableInteraction(intro, targetElement);\n }\n\n // when it's the first step of tour\n if (intro._currentStep === 0 && intro._introItems.length > 1) {\n if (\n typeof nextTooltipButton !== \"undefined\" &&\n nextTooltipButton !== null\n ) {\n nextTooltipButton.className = `${intro._options.buttonClass} introjs-nextbutton`;\n nextTooltipButton.innerHTML = intro._options.nextLabel;\n }\n\n if (intro._options.hidePrev === true) {\n if (\n typeof prevTooltipButton !== \"undefined\" &&\n prevTooltipButton !== null\n ) {\n prevTooltipButton.className = `${intro._options.buttonClass} introjs-prevbutton introjs-hidden`;\n }\n if (\n typeof nextTooltipButton !== \"undefined\" &&\n nextTooltipButton !== null\n ) {\n addClass(nextTooltipButton, \"introjs-fullbutton\");\n }\n } else {\n if (\n typeof prevTooltipButton !== \"undefined\" &&\n prevTooltipButton !== null\n ) {\n prevTooltipButton.className = `${intro._options.buttonClass} introjs-prevbutton introjs-disabled`;\n }\n }\n } else if (\n intro._introItems.length - 1 === intro._currentStep ||\n intro._introItems.length === 1\n ) {\n // last step of tour\n if (\n typeof prevTooltipButton !== \"undefined\" &&\n prevTooltipButton !== null\n ) {\n prevTooltipButton.className = `${intro._options.buttonClass} introjs-prevbutton`;\n }\n\n if (intro._options.hideNext === true) {\n if (\n typeof nextTooltipButton !== \"undefined\" &&\n nextTooltipButton !== null\n ) {\n nextTooltipButton.className = `${intro._options.buttonClass} introjs-nextbutton introjs-hidden`;\n }\n if (\n typeof prevTooltipButton !== \"undefined\" &&\n prevTooltipButton !== null\n ) {\n addClass(prevTooltipButton, \"introjs-fullbutton\");\n }\n } else {\n if (\n typeof nextTooltipButton !== \"undefined\" &&\n nextTooltipButton !== null\n ) {\n if (intro._options.nextToDone === true) {\n nextTooltipButton.innerHTML = intro._options.doneLabel;\n addClass(\n nextTooltipButton,\n `${intro._options.buttonClass} introjs-nextbutton introjs-donebutton`\n );\n } else {\n nextTooltipButton.className = `${intro._options.buttonClass} introjs-nextbutton introjs-disabled`;\n }\n }\n }\n } else {\n // steps between start and end\n if (\n typeof prevTooltipButton !== \"undefined\" &&\n prevTooltipButton !== null\n ) {\n prevTooltipButton.className = `${intro._options.buttonClass} introjs-prevbutton`;\n }\n if (\n typeof nextTooltipButton !== \"undefined\" &&\n nextTooltipButton !== null\n ) {\n nextTooltipButton.className = `${intro._options.buttonClass} introjs-nextbutton`;\n nextTooltipButton.innerHTML = intro._options.nextLabel;\n }\n }\n\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n prevTooltipButton.setAttribute(\"role\", \"button\");\n }\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.setAttribute(\"role\", \"button\");\n }\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.setAttribute(\"role\", \"button\");\n }\n\n //Set focus on \"next\" button, so that hitting Enter always moves you onto the next step\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.focus();\n }\n\n setShowElement(targetElement.element as HTMLElement);\n\n if (isFunction(intro._introAfterChangeCallback)) {\n await intro._introAfterChangeCallback.call(intro, targetElement.element);\n }\n}\n","import isFunction from \"../util/isFunction\";\nimport exitIntro from \"./exitIntro\";\nimport showElement from \"./showElement\";\nimport { IntroJs } from \"../intro\";\n\nexport type ScrollTo = \"off\" | \"element\" | \"tooltip\";\n\nexport type TooltipPosition =\n | \"floating\"\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-right-aligned\"\n | \"top-left-aligned\"\n | \"top-middle-aligned\"\n | \"bottom-right-aligned\"\n | \"bottom-left-aligned\"\n | \"bottom-middle-aligned\";\n\nexport type HintPosition =\n | \"top-left\"\n | \"top-right\"\n | \"top-middle\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"bottom-middle\"\n | \"middle-left\"\n | \"middle-right\"\n | \"middle-middle\";\n\nexport type IntroStep = {\n step: number;\n title: string;\n intro: string;\n tooltipClass?: string;\n highlightClass?: string;\n element?: HTMLElement | string | null;\n position: TooltipPosition;\n scrollTo: ScrollTo;\n disableInteraction?: boolean;\n};\n\nexport type HintStep = {\n element?: HTMLElement | string | null;\n tooltipClass?: string;\n position: TooltipPosition;\n hint?: string;\n hintTargetElement?: HTMLElement;\n hintAnimation?: boolean;\n hintPosition: HintPosition;\n};\n\n/**\n * Go to specific step of introduction\n *\n * @api private\n */\nexport async function goToStep(intro: IntroJs, step: number) {\n //because steps starts with zero\n intro._currentStep = step - 2;\n if (typeof intro._introItems !== \"undefined\") {\n await nextStep(intro);\n }\n}\n\n/**\n * Go to the specific step of introduction with the explicit [data-step] number\n *\n * @api private\n */\nexport async function goToStepNumber(intro: IntroJs, step: number) {\n intro._currentStepNumber = step;\n if (typeof intro._introItems !== \"undefined\") {\n await nextStep(intro);\n }\n}\n\n/**\n * Go to next step on intro\n *\n * @api private\n */\nexport async function nextStep(intro: IntroJs) {\n intro._direction = \"forward\";\n\n if (typeof intro._currentStepNumber !== \"undefined\") {\n for (let i = 0; i < intro._introItems.length; i++) {\n const item = intro._introItems[i];\n if (item.step === intro._currentStepNumber) {\n intro._currentStep = i - 1;\n intro._currentStepNumber = undefined;\n }\n }\n }\n\n if (intro._currentStep === -1) {\n intro._currentStep = 0;\n } else {\n ++intro._currentStep;\n }\n\n const nextStep = intro._introItems[intro._currentStep];\n let continueStep = true;\n\n if (isFunction(intro._introBeforeChangeCallback)) {\n continueStep = await intro._introBeforeChangeCallback.call(\n intro,\n nextStep && (nextStep.element as HTMLElement),\n intro._currentStep,\n intro._direction\n );\n }\n\n // if `onbeforechange` returned `false`, stop displaying the element\n if (continueStep === false) {\n --intro._currentStep;\n return false;\n }\n\n if (intro._introItems.length <= intro._currentStep) {\n // end of the intro\n // check if any callback is defined\n if (isFunction(intro._introCompleteCallback)) {\n await intro._introCompleteCallback.call(intro, intro._currentStep, \"end\");\n }\n\n await exitIntro(intro, intro._targetElement);\n\n return false;\n }\n\n await showElement(intro, nextStep);\n\n return true;\n}\n\n/**\n * Go to previous step on intro\n *\n * @api private\n */\nexport async function previousStep(intro: IntroJs) {\n intro._direction = \"backward\";\n\n if (intro._currentStep <= 0) {\n return false;\n }\n\n --intro._currentStep;\n\n const nextStep = intro._introItems[intro._currentStep];\n let continueStep = true;\n\n if (isFunction(intro._introBeforeChangeCallback)) {\n continueStep = await intro._introBeforeChangeCallback.call(\n intro,\n nextStep && (nextStep.element as HTMLElement),\n intro._currentStep,\n intro._direction\n );\n }\n\n // if `onbeforechange` returned `false`, stop displaying the element\n if (continueStep === false) {\n ++intro._currentStep;\n return false;\n }\n\n await showElement(intro, nextStep);\n\n return true;\n}\n","import { nextStep, previousStep } from \"./steps\";\nimport exitIntro from \"./exitIntro\";\nimport { IntroJs } from \"../intro\";\nimport isFunction from \"../util/isFunction\";\n\n/**\n * on keyCode:\n * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\n * This feature has been removed from the Web standards.\n * Though some browsers may still support it, it is in\n * the process of being dropped.\n * Instead, you should use KeyboardEvent.code,\n * if it's implemented.\n *\n * jQuery's approach is to test for\n * (1) e.which, then\n * (2) e.charCode, then\n * (3) e.keyCode\n * https://github.com/jquery/jquery/blob/a6b0705294d336ae2f63f7276de0da1195495363/src/event.js#L638\n */\nexport default async function onKeyDown(intro: IntroJs, e: KeyboardEvent) {\n let code = e.code === undefined ? e.which : e.code;\n\n // if e.which is null\n if (code === null) {\n code = e.charCode === null ? e.keyCode : e.charCode;\n }\n\n if ((code === \"Escape\" || code === 27) && intro._options.exitOnEsc === true) {\n //escape key pressed, exit the intro\n //check if exit callback is defined\n await exitIntro(intro, intro._targetElement);\n } else if (code === \"ArrowLeft\" || code === 37) {\n //left arrow\n await previousStep(intro);\n } else if (code === \"ArrowRight\" || code === 39) {\n //right arrow\n await nextStep(intro);\n } else if (code === \"Enter\" || code === \"NumpadEnter\" || code === 13) {\n //srcElement === ie\n const target = (e.target || e.srcElement) as HTMLElement;\n if (target && target.className.match(\"introjs-prevbutton\")) {\n //user hit enter while focusing on previous button\n await previousStep(intro);\n } else if (target && target.className.match(\"introjs-skipbutton\")) {\n //user hit enter while focusing on skip button\n if (\n intro._introItems.length - 1 === intro._currentStep &&\n isFunction(intro._introCompleteCallback)\n ) {\n await intro._introCompleteCallback.call(\n intro,\n intro._currentStep,\n \"skip\"\n );\n }\n\n await exitIntro(intro, intro._targetElement);\n } else if (target && target.getAttribute(\"data-step-number\")) {\n // user hit enter while focusing on step bullet\n target.click();\n } else {\n //default behavior for responding to enter\n await nextStep(intro);\n }\n\n //prevent default behaviour on hitting Enter, to prevent steps being skipped in some browsers\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n }\n}\n","/**\n * Makes a copy of an object\n * @api private\n */\nexport default function cloneObject(source: T): T {\n if (source === null || typeof source !== \"object\" || \"nodeType\" in source) {\n return source;\n }\n\n const temp = {} as T;\n\n for (const key in source) {\n // @ts-ignore:next-line\n if (\"jQuery\" in window && source[key] instanceof window.jQuery) {\n temp[key] = source[key];\n } else {\n temp[key] = cloneObject(source[key]);\n }\n }\n return temp;\n}\n","export default function debounce(\n func: Function,\n timeout: number\n): (...args: any) => void {\n let timer: number;\n\n return (...args) => {\n window.clearTimeout(timer);\n\n timer = window.setTimeout(() => {\n func(args);\n }, timeout);\n };\n}\n","import addClass from \"../util/addClass\";\nimport removeClass from \"../util/removeClass\";\nimport isFixed from \"../util/isFixed\";\nimport getOffset from \"../util/getOffset\";\nimport cloneObject from \"../util/cloneObject\";\nimport DOMEvent from \"./DOMEvent\";\nimport setAnchorAsButton from \"../util/setAnchorAsButton\";\nimport setHelperLayerPosition from \"./setHelperLayerPosition\";\nimport placeTooltip from \"./placeTooltip\";\nimport createElement from \"../util/createElement\";\nimport debounce from \"../util/debounce\";\nimport { HintPosition, HintStep, TooltipPosition } from \"./steps\";\nimport { IntroJs } from \"../intro\";\nimport isFunction from \"../util/isFunction\";\n\n/**\n * Get a queryselector within the hint wrapper\n */\nexport function hintQuerySelectorAll(selector: string): HTMLElement[] {\n const hintsWrapper = document.querySelector(\".introjs-hints\");\n return hintsWrapper\n ? Array.from(hintsWrapper.querySelectorAll(selector))\n : [];\n}\n\n/**\n * Hide a hint\n *\n * @api private\n */\nexport async function hideHint(intro: IntroJs, stepId: number) {\n const hint = hintQuerySelectorAll(`.introjs-hint[data-step=\"${stepId}\"]`)[0];\n\n removeHintTooltip();\n\n if (hint) {\n addClass(hint, \"introjs-hidehint\");\n }\n\n // call the callback function (if any)\n if (isFunction(intro._hintCloseCallback)) {\n await intro._hintCloseCallback.call(intro, stepId);\n }\n}\n\n/**\n * Hide all hints\n *\n * @api private\n */\nexport async function hideHints(intro: IntroJs) {\n const hints = hintQuerySelectorAll(\".introjs-hint\");\n\n for (const hint of hints) {\n const step = hint.getAttribute(\"data-step\");\n if (!step) continue;\n\n await hideHint(intro, parseInt(step, 10));\n }\n}\n\n/**\n * Show all hints\n *\n * @api private\n */\nexport async function showHints(intro: IntroJs) {\n const hints = hintQuerySelectorAll(\".introjs-hint\");\n\n if (hints && hints.length) {\n for (const hint of hints) {\n const step = hint.getAttribute(\"data-step\");\n if (!step) continue;\n\n showHint(parseInt(step, 10));\n }\n } else {\n await populateHints(intro, intro._targetElement);\n }\n}\n\n/**\n * Show a hint\n *\n * @api private\n */\nexport function showHint(stepId: number) {\n const hint = hintQuerySelectorAll(`.introjs-hint[data-step=\"${stepId}\"]`)[0];\n\n if (hint) {\n removeClass(hint, /introjs-hidehint/g);\n }\n}\n\n/**\n * Removes all hint elements on the page\n * Useful when you want to destroy the elements and add them again (e.g. a modal or popup)\n *\n * @api private\n */\nexport function removeHints(intro: IntroJs) {\n const hints = hintQuerySelectorAll(\".introjs-hint\");\n\n for (const hint of hints) {\n const step = hint.getAttribute(\"data-step\");\n if (!step) continue;\n\n removeHint(parseInt(step, 10));\n }\n\n DOMEvent.off(document, \"click\", removeHintTooltip, intro, false);\n DOMEvent.off(window, \"resize\", reAlignHints, intro, true);\n\n if (intro._hintsAutoRefreshFunction) {\n DOMEvent.off(\n window,\n \"scroll\",\n intro._hintsAutoRefreshFunction,\n intro,\n true\n );\n }\n}\n\n/**\n * Remove one single hint element from the page\n * Useful when you want to destroy the element and add them again (e.g. a modal or popup)\n * Use removeHints if you want to remove all elements.\n *\n * @api private\n */\nexport function removeHint(stepId: number) {\n const hint = hintQuerySelectorAll(`.introjs-hint[data-step=\"${stepId}\"]`)[0];\n\n if (hint && hint.parentNode) {\n hint.parentNode.removeChild(hint);\n }\n}\n\n/**\n * Add all available hints to the page\n *\n * @api private\n */\nexport async function addHints(intro: IntroJs) {\n let hintsWrapper = document.querySelector(\".introjs-hints\");\n\n if (hintsWrapper === null) {\n hintsWrapper = createElement(\"div\", {\n className: \"introjs-hints\",\n });\n }\n\n /**\n * Returns an event handler unique to the hint iteration\n */\n const getHintClick = (i: number) => (e: Event) => {\n const evt = e ? e : window.event;\n\n if (evt && evt.stopPropagation) {\n evt.stopPropagation();\n }\n\n if (evt && evt.cancelBubble !== null) {\n evt.cancelBubble = true;\n }\n\n showHintDialog(intro, i);\n };\n\n for (let i = 0; i < intro._hintItems.length; i++) {\n const item = intro._hintItems[i];\n\n // avoid append a hint twice\n if (document.querySelector(`.introjs-hint[data-step=\"${i}\"]`)) {\n return;\n }\n\n const hint = createElement(\"a\", {\n className: \"introjs-hint\",\n });\n setAnchorAsButton(hint);\n\n hint.onclick = getHintClick(i);\n\n if (!item.hintAnimation) {\n addClass(hint, \"introjs-hint-no-anim\");\n }\n\n // hint's position should be fixed if the target element's position is fixed\n if (isFixed(item.element as HTMLElement)) {\n addClass(hint, \"introjs-fixedhint\");\n }\n\n const hintDot = createElement(\"div\", {\n className: \"introjs-hint-dot\",\n });\n\n const hintPulse = createElement(\"div\", {\n className: \"introjs-hint-pulse\",\n });\n\n hint.appendChild(hintDot);\n hint.appendChild(hintPulse);\n hint.setAttribute(\"data-step\", i.toString());\n\n // we swap the hint element with target element\n // because _setHelperLayerPosition uses `element` property\n item.hintTargetElement = item.element as HTMLElement;\n item.element = hint;\n\n // align the hint position\n alignHintPosition(\n item.hintPosition,\n hint,\n item.hintTargetElement as HTMLElement\n );\n\n hintsWrapper.appendChild(hint);\n }\n\n // adding the hints wrapper\n document.body.appendChild(hintsWrapper);\n\n // call the callback function (if any)\n if (isFunction(intro._hintsAddedCallback)) {\n await intro._hintsAddedCallback.call(intro);\n }\n\n if (intro._options.hintAutoRefreshInterval >= 0) {\n intro._hintsAutoRefreshFunction = debounce(\n () => reAlignHints(intro),\n intro._options.hintAutoRefreshInterval\n );\n DOMEvent.on(window, \"scroll\", intro._hintsAutoRefreshFunction, intro, true);\n }\n}\n\n/**\n * Aligns hint position\n *\n * @api private\n */\nexport function alignHintPosition(\n position: HintPosition,\n hintElement: HTMLElement,\n targetElement?: HTMLElement\n) {\n if (typeof targetElement === \"undefined\") {\n return;\n }\n\n // get/calculate offset of target element\n const offset = getOffset(targetElement);\n const iconWidth = 20;\n const iconHeight = 20;\n\n // align the hint element\n switch (position) {\n default:\n case \"top-left\":\n hintElement.style.left = `${offset.left}px`;\n hintElement.style.top = `${offset.top}px`;\n break;\n case \"top-right\":\n hintElement.style.left = `${offset.left + offset.width - iconWidth}px`;\n hintElement.style.top = `${offset.top}px`;\n break;\n case \"bottom-left\":\n hintElement.style.left = `${offset.left}px`;\n hintElement.style.top = `${offset.top + offset.height - iconHeight}px`;\n break;\n case \"bottom-right\":\n hintElement.style.left = `${offset.left + offset.width - iconWidth}px`;\n hintElement.style.top = `${offset.top + offset.height - iconHeight}px`;\n break;\n case \"middle-left\":\n hintElement.style.left = `${offset.left}px`;\n hintElement.style.top = `${\n offset.top + (offset.height - iconHeight) / 2\n }px`;\n break;\n case \"middle-right\":\n hintElement.style.left = `${offset.left + offset.width - iconWidth}px`;\n hintElement.style.top = `${\n offset.top + (offset.height - iconHeight) / 2\n }px`;\n break;\n case \"middle-middle\":\n hintElement.style.left = `${\n offset.left + (offset.width - iconWidth) / 2\n }px`;\n hintElement.style.top = `${\n offset.top + (offset.height - iconHeight) / 2\n }px`;\n break;\n case \"bottom-middle\":\n hintElement.style.left = `${\n offset.left + (offset.width - iconWidth) / 2\n }px`;\n hintElement.style.top = `${offset.top + offset.height - iconHeight}px`;\n break;\n case \"top-middle\":\n hintElement.style.left = `${\n offset.left + (offset.width - iconWidth) / 2\n }px`;\n hintElement.style.top = `${offset.top}px`;\n break;\n }\n}\n\n/**\n * Triggers when user clicks on the hint element\n *\n * @api private\n */\nexport async function showHintDialog(intro: IntroJs, stepId: number) {\n const hintElement = document.querySelector(\n `.introjs-hint[data-step=\"${stepId}\"]`\n ) as HTMLElement;\n const item = intro._hintItems[stepId];\n\n // call the callback function (if any)\n if (isFunction(intro._hintClickCallback)) {\n await intro._hintClickCallback.call(intro, hintElement, item, stepId);\n }\n\n // remove all open tooltips\n const removedStep = removeHintTooltip();\n\n // to toggle the tooltip\n if (removedStep !== undefined && parseInt(removedStep, 10) === stepId) {\n return;\n }\n\n const tooltipLayer = createElement(\"div\", {\n className: \"introjs-tooltip\",\n });\n const tooltipTextLayer = createElement(\"div\");\n const arrowLayer = createElement(\"div\");\n const referenceLayer = createElement(\"div\");\n\n tooltipLayer.onclick = (e: Event) => {\n //IE9 & Other Browsers\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n //IE8 and Lower\n else {\n e.cancelBubble = true;\n }\n };\n\n tooltipTextLayer.className = \"introjs-tooltiptext\";\n\n const tooltipWrapper = createElement(\"p\");\n tooltipWrapper.innerHTML = item.hint || \"\";\n tooltipTextLayer.appendChild(tooltipWrapper);\n\n if (intro._options.hintShowButton) {\n const closeButton = createElement(\"a\");\n closeButton.className = intro._options.buttonClass;\n closeButton.setAttribute(\"role\", \"button\");\n closeButton.innerHTML = intro._options.hintButtonLabel;\n closeButton.onclick = () => hideHint(intro, stepId);\n tooltipTextLayer.appendChild(closeButton);\n }\n\n arrowLayer.className = \"introjs-arrow\";\n tooltipLayer.appendChild(arrowLayer);\n\n tooltipLayer.appendChild(tooltipTextLayer);\n\n const step = hintElement.getAttribute(\"data-step\") || \"\";\n\n // set current step for _placeTooltip function\n intro._currentStep = parseInt(step, 10);\n const currentStep = intro._hintItems[intro._currentStep];\n\n // align reference layer position\n referenceLayer.className =\n \"introjs-tooltipReferenceLayer introjs-hintReference\";\n referenceLayer.setAttribute(\"data-step\", step);\n setHelperLayerPosition(intro, currentStep, referenceLayer);\n\n referenceLayer.appendChild(tooltipLayer);\n document.body.appendChild(referenceLayer);\n\n // set proper position\n placeTooltip(intro, currentStep, tooltipLayer, arrowLayer, true);\n}\n\n/**\n * Removes open hint (tooltip hint)\n *\n * @api private\n */\nexport function removeHintTooltip(): string | undefined {\n const tooltip = document.querySelector(\".introjs-hintReference\");\n\n if (tooltip && tooltip.parentNode) {\n const step = tooltip.getAttribute(\"data-step\");\n if (!step) return undefined;\n\n tooltip.parentNode.removeChild(tooltip);\n\n return step;\n }\n\n return undefined;\n}\n\n/**\n * Start parsing hint items\n *\n * @api private\n */\nexport async function populateHints(\n intro: IntroJs,\n targetElm: HTMLElement\n): Promise {\n intro._hintItems = [];\n\n if (intro._options.hints && intro._options.hints.length > 0) {\n for (const hint of intro._options.hints) {\n const currentItem = cloneObject(hint);\n\n if (typeof currentItem.element === \"string\") {\n //grab the element with given selector from the page\n currentItem.element = document.querySelector(\n currentItem.element\n ) as HTMLElement;\n }\n\n currentItem.hintPosition =\n currentItem.hintPosition || intro._options.hintPosition;\n currentItem.hintAnimation =\n currentItem.hintAnimation || intro._options.hintAnimation;\n\n if (currentItem.element !== null) {\n intro._hintItems.push(currentItem as HintStep);\n }\n }\n } else {\n const hints = Array.from(\n targetElm.querySelectorAll(\"*[data-hint]\")\n );\n\n if (!hints || !hints.length) {\n return false;\n }\n\n //first add intro items with data-step\n for (const currentElement of hints) {\n // hint animation\n let hintAnimationAttr = currentElement.getAttribute(\n \"data-hint-animation\"\n );\n\n let hintAnimation: boolean = intro._options.hintAnimation;\n if (hintAnimationAttr) {\n hintAnimation = hintAnimationAttr === \"true\";\n }\n\n intro._hintItems.push({\n element: currentElement,\n hint: currentElement.getAttribute(\"data-hint\") || \"\",\n hintPosition: (currentElement.getAttribute(\"data-hint-position\") ||\n intro._options.hintPosition) as HintPosition,\n hintAnimation,\n tooltipClass:\n currentElement.getAttribute(\"data-tooltip-class\") || undefined,\n position: (currentElement.getAttribute(\"data-position\") ||\n intro._options.tooltipPosition) as TooltipPosition,\n });\n }\n }\n\n await addHints(intro);\n\n DOMEvent.on(document, \"click\", removeHintTooltip, intro, false);\n DOMEvent.on(window, \"resize\", reAlignHints, intro, true);\n\n return true;\n}\n\n/**\n * Re-aligns all hint elements\n *\n * @api private\n */\nexport function reAlignHints(intro: IntroJs) {\n for (const { hintTargetElement, hintPosition, element } of intro._hintItems) {\n alignHintPosition(hintPosition, element as HTMLElement, hintTargetElement);\n }\n}\n","import { IntroJs } from \"../intro\";\nimport cloneObject from \"../util/cloneObject\";\nimport createElement from \"../util/createElement\";\nimport { IntroStep, ScrollTo, TooltipPosition } from \"./steps\";\n\n/**\n * Finds all Intro steps from the data-* attributes and the options.steps array\n *\n * @api private\n */\nexport default function fetchIntroSteps(\n intro: IntroJs,\n targetElm: HTMLElement\n) {\n const allIntroSteps: HTMLElement[] = Array.from(\n targetElm.querySelectorAll(\"*[data-intro]\")\n );\n let introItems: IntroStep[] = [];\n\n if (intro._options.steps && intro._options.steps.length) {\n //use steps passed programmatically\n for (const step of intro._options.steps) {\n const currentItem = cloneObject(step);\n\n //set the step\n currentItem.step = introItems.length + 1;\n\n currentItem.title = currentItem.title || \"\";\n\n //use querySelector function only when developer used CSS selector\n if (typeof currentItem.element === \"string\") {\n //grab the element with given selector from the page\n currentItem.element =\n document.querySelector(currentItem.element) || undefined;\n }\n\n //intro without element\n if (\n typeof currentItem.element === \"undefined\" ||\n currentItem.element === null\n ) {\n let floatingElementQuery = document.querySelector(\n \".introjsFloatingElement\"\n );\n\n if (floatingElementQuery === null) {\n floatingElementQuery = createElement(\"div\", {\n className: \"introjsFloatingElement\",\n });\n\n document.body.appendChild(floatingElementQuery);\n }\n\n currentItem.element = floatingElementQuery;\n currentItem.position = \"floating\";\n }\n\n currentItem.position =\n currentItem.position ||\n (intro._options.tooltipPosition as TooltipPosition);\n currentItem.scrollTo = currentItem.scrollTo || intro._options.scrollTo;\n\n if (typeof currentItem.disableInteraction === \"undefined\") {\n currentItem.disableInteraction = intro._options.disableInteraction;\n }\n\n if (currentItem.element !== null) {\n introItems.push(currentItem as IntroStep);\n }\n }\n } else {\n //use steps from data-* annotations\n const elmsLength = allIntroSteps.length;\n let disableInteraction: boolean;\n\n //if there's no element to intro\n if (elmsLength < 1) {\n return [];\n }\n\n for (const currentElement of allIntroSteps) {\n // start intro for groups of elements\n if (\n intro._options.group &&\n currentElement.getAttribute(\"data-intro-group\") !== intro._options.group\n ) {\n continue;\n }\n\n // skip hidden elements\n if (currentElement.style.display === \"none\") {\n continue;\n }\n\n const step = parseInt(currentElement.getAttribute(\"data-step\") || \"\", 10);\n\n disableInteraction = intro._options.disableInteraction;\n if (currentElement.hasAttribute(\"data-disable-interaction\")) {\n disableInteraction = !!currentElement.getAttribute(\n \"data-disable-interaction\"\n );\n }\n\n if (step > 0) {\n introItems[step - 1] = {\n step: step,\n element: currentElement,\n title: currentElement.getAttribute(\"data-title\") || \"\",\n intro: currentElement.getAttribute(\"data-intro\") || \"\",\n tooltipClass:\n currentElement.getAttribute(\"data-tooltip-class\") || undefined,\n highlightClass:\n currentElement.getAttribute(\"data-highlight-class\") || undefined,\n position: (currentElement.getAttribute(\"data-position\") ||\n intro._options.tooltipPosition) as TooltipPosition,\n scrollTo:\n (currentElement.getAttribute(\"data-scroll-to\") as ScrollTo) ||\n intro._options.scrollTo,\n disableInteraction,\n };\n }\n }\n\n //next add intro items without data-step\n //todo: we need a cleanup here, two loops are redundant\n let nextStep = 0;\n\n for (const currentElement of allIntroSteps) {\n // start intro for groups of elements\n if (\n intro._options.group &&\n currentElement.getAttribute(\"data-intro-group\") !== intro._options.group\n ) {\n continue;\n }\n\n if (currentElement.getAttribute(\"data-step\") === null) {\n while (true) {\n if (typeof introItems[nextStep] === \"undefined\") {\n break;\n } else {\n nextStep++;\n }\n }\n\n if (currentElement.hasAttribute(\"data-disable-interaction\")) {\n disableInteraction = !!currentElement.getAttribute(\n \"data-disable-interaction\"\n );\n } else {\n disableInteraction = intro._options.disableInteraction;\n }\n\n introItems[nextStep] = {\n element: currentElement,\n title: currentElement.getAttribute(\"data-title\") || \"\",\n intro: currentElement.getAttribute(\"data-intro\") || \"\",\n step: nextStep + 1,\n tooltipClass:\n currentElement.getAttribute(\"data-tooltip-class\") || undefined,\n highlightClass:\n currentElement.getAttribute(\"data-highlight-class\") || undefined,\n position: (currentElement.getAttribute(\"data-position\") ||\n intro._options.tooltipPosition) as TooltipPosition,\n scrollTo:\n (currentElement.getAttribute(\"data-scroll-to\") as ScrollTo) ||\n intro._options.scrollTo,\n disableInteraction,\n };\n }\n }\n }\n\n //removing undefined/null elements\n const tempIntroItems = [];\n for (let z = 0; z < introItems.length; z++) {\n if (introItems[z]) {\n // copy non-falsy values to the end of the array\n tempIntroItems.push(introItems[z]);\n }\n }\n\n introItems = tempIntroItems;\n\n //Ok, sort all items with given steps\n introItems.sort((a, b) => a.step - b.step);\n\n return introItems;\n}\n","import { reAlignHints } from \"./hint\";\nimport setHelperLayerPosition from \"./setHelperLayerPosition\";\nimport placeTooltip from \"./placeTooltip\";\nimport fetchIntroSteps from \"./fetchIntroSteps\";\nimport { _recreateBullets, _updateProgressBar } from \"./showElement\";\nimport { IntroJs } from \"../intro\";\n\n/**\n * Update placement of the intro objects on the screen\n * @api private\n */\nexport default function refresh(intro: IntroJs, refreshSteps?: boolean) {\n const currentStep = intro._currentStep;\n\n if (currentStep === undefined || currentStep === null || currentStep == -1)\n return;\n\n const step = intro._introItems[currentStep];\n\n const referenceLayer = document.querySelector(\n \".introjs-tooltipReferenceLayer\"\n ) as HTMLElement;\n const helperLayer = document.querySelector(\n \".introjs-helperLayer\"\n ) as HTMLElement;\n const disableInteractionLayer = document.querySelector(\n \".introjs-disableInteraction\"\n ) as HTMLElement;\n\n // re-align intros\n setHelperLayerPosition(intro, step, helperLayer);\n setHelperLayerPosition(intro, step, referenceLayer);\n setHelperLayerPosition(intro, step, disableInteractionLayer);\n\n if (refreshSteps) {\n intro._introItems = fetchIntroSteps(intro, intro._targetElement);\n _recreateBullets(intro, step);\n _updateProgressBar(referenceLayer, currentStep, intro._introItems.length);\n }\n\n // re-align tooltip\n const oldArrowLayer = document.querySelector(\".introjs-arrow\");\n const oldTooltipContainer =\n document.querySelector(\".introjs-tooltip\");\n\n if (oldTooltipContainer && oldArrowLayer) {\n placeTooltip(\n intro,\n intro._introItems[currentStep],\n oldTooltipContainer,\n oldArrowLayer\n );\n }\n\n //re-align hints\n reAlignHints(intro);\n\n return intro;\n}\n","import { IntroJs } from \"../intro\";\nimport refresh from \"./refresh\";\n\nexport default function onResize(intro: IntroJs) {\n refresh(intro);\n}\n","import setStyle from \"./setStyle\";\n\n/**\n * Removes `element` from `parentElement`\n */\nexport default function removeChild(\n element: HTMLElement | null,\n animate = false\n) {\n if (!element || !element.parentElement) return;\n\n const parentElement = element.parentElement;\n\n if (animate) {\n setStyle(element, {\n opacity: \"0\",\n });\n\n window.setTimeout(() => {\n try {\n // removeChild(..) throws an exception if the child has already been removed (https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild)\n // this try-catch is added to make sure this function doesn't throw an exception if the child has been removed\n // this scenario can happen when start()/exit() is called multiple times and the helperLayer is removed by the\n // previous exit() call (note: this is a timeout)\n parentElement.removeChild(element);\n } catch (e) {}\n }, 500);\n } else {\n parentElement.removeChild(element);\n }\n}\n","import DOMEvent from \"./DOMEvent\";\nimport onKeyDown from \"./onKeyDown\";\nimport onResize from \"./onResize\";\nimport removeShowElement from \"./removeShowElement\";\nimport removeChild from \"../util/removeChild\";\nimport { IntroJs } from \"../intro\";\nimport isFunction from \"../util/isFunction\";\n\n/**\n * Exit from intro\n *\n * @api private\n * @param {Boolean} force - Setting to `true` will skip the result of beforeExit callback\n */\nexport default async function exitIntro(\n intro: IntroJs,\n targetElement: HTMLElement,\n force: boolean = false\n) {\n let continueExit = true;\n\n // calling onbeforeexit callback\n //\n // If this callback return `false`, it would halt the process\n if (intro._introBeforeExitCallback !== undefined) {\n continueExit = await intro._introBeforeExitCallback.call(\n intro,\n targetElement\n );\n }\n\n // skip this check if `force` parameter is `true`\n // otherwise, if `onbeforeexit` returned `false`, don't exit the intro\n if (!force && continueExit === false) return;\n\n // remove overlay layers from the page\n const overlayLayers = Array.from(\n targetElement.querySelectorAll(\".introjs-overlay\")\n );\n\n if (overlayLayers && overlayLayers.length) {\n for (const overlayLayer of overlayLayers) {\n removeChild(overlayLayer);\n }\n }\n\n //remove all helper layers\n const helperLayer = targetElement.querySelector(\n \".introjs-helperLayer\"\n );\n removeChild(helperLayer, true);\n\n const referenceLayer = targetElement.querySelector(\n \".introjs-tooltipReferenceLayer\"\n );\n removeChild(referenceLayer);\n\n //remove disableInteractionLayer\n const disableInteractionLayer = targetElement.querySelector(\n \".introjs-disableInteraction\"\n );\n removeChild(disableInteractionLayer);\n\n //remove intro floating element\n const floatingElement = document.querySelector(\n \".introjsFloatingElement\"\n );\n removeChild(floatingElement);\n\n removeShowElement();\n\n //clean listeners\n DOMEvent.off(window, \"keydown\", onKeyDown, intro, true);\n DOMEvent.off(window, \"resize\", onResize, intro, true);\n\n //check if any callback is defined\n if (isFunction(intro._introExitCallback)) {\n await intro._introExitCallback.call(intro);\n }\n\n // set the step to default\n intro._currentStep = -1;\n}\n","import exitIntro from \"./exitIntro\";\nimport createElement from \"../util/createElement\";\nimport setStyle from \"../util/setStyle\";\nimport { IntroJs } from \"../intro\";\n\n/**\n * Add overlay layer to the page\n *\n * @api private\n */\nexport default function addOverlayLayer(\n intro: IntroJs,\n targetElm: HTMLElement\n) {\n const overlayLayer = createElement(\"div\", {\n className: \"introjs-overlay\",\n });\n\n setStyle(overlayLayer, {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n position: \"fixed\",\n });\n\n targetElm.appendChild(overlayLayer);\n\n if (intro._options.exitOnOverlayClick === true) {\n setStyle(overlayLayer, {\n cursor: \"pointer\",\n });\n\n overlayLayer.onclick = async () => {\n await exitIntro(intro, targetElm);\n };\n }\n\n return true;\n}\n","import addOverlayLayer from \"./addOverlayLayer\";\nimport DOMEvent from \"./DOMEvent\";\nimport { nextStep } from \"./steps\";\nimport onKeyDown from \"./onKeyDown\";\nimport onResize from \"./onResize\";\nimport fetchIntroSteps from \"./fetchIntroSteps\";\nimport { IntroJs } from \"../intro\";\nimport isFunction from \"../util/isFunction\";\n\n/**\n * Initiate a new introduction/guide from an element in the page\n *\n * @api private\n */\nexport default async function introForElement(\n intro: IntroJs,\n targetElm: HTMLElement\n): Promise {\n // don't start the tour if the instance is not active\n if (!intro.isActive()) return false;\n\n if (isFunction(intro._introStartCallback)) {\n await intro._introStartCallback.call(intro, targetElm);\n }\n\n //set it to the introJs object\n const steps = fetchIntroSteps(intro, targetElm);\n\n if (steps.length === 0) {\n return false;\n }\n\n intro._introItems = steps;\n\n //add overlay layer to the page\n if (addOverlayLayer(intro, targetElm)) {\n //then, start the show\n await nextStep(intro);\n\n targetElm.addEventListener;\n if (intro._options.keyboardNavigation) {\n DOMEvent.on(window, \"keydown\", onKeyDown, intro, true);\n }\n\n //for window resize\n DOMEvent.on(window, \"resize\", onResize, intro, true);\n }\n\n return false;\n}\n","import {\n HintPosition,\n HintStep,\n IntroStep,\n ScrollTo,\n TooltipPosition,\n} from \"./core/steps\";\n\nexport interface Options {\n steps: Partial[];\n hints: Partial[];\n /* Is this tour instance active? Don't show the tour again if this flag is set to false */\n isActive: boolean;\n /* Next button label in tooltip box */\n nextLabel: string;\n /* Previous button label in tooltip box */\n prevLabel: string;\n /* Skip button label in tooltip box */\n skipLabel: string;\n /* Done button label in tooltip box */\n doneLabel: string;\n /* Hide previous button in the first step? Otherwise, it will be disabled button. */\n hidePrev: boolean;\n /* Hide next button in the last step? Otherwise, it will be disabled button (note: this will also hide the \"Done\" button) */\n hideNext: boolean;\n /* Change the Next button to Done in the last step of the intro? otherwise, it will render a disabled button */\n nextToDone: boolean;\n /* Default tooltip box position */\n tooltipPosition: string;\n /* Next CSS class for tooltip boxes */\n tooltipClass: string;\n /* Start intro for a group of elements */\n group: string;\n /* CSS class that is added to the helperLayer */\n highlightClass: string;\n /* Close introduction when pressing Escape button? */\n exitOnEsc: boolean;\n /* Close introduction when clicking on overlay layer? */\n exitOnOverlayClick: boolean;\n /* Display the pagination detail */\n showStepNumbers: boolean;\n /* Pagination \"of\" label */\n stepNumbersOfLabel: string;\n /* Let user use keyboard to navigate the tour? */\n keyboardNavigation: boolean;\n /* Show tour control buttons? */\n showButtons: boolean;\n /* Show tour bullets? */\n showBullets: boolean;\n /* Show tour progress? */\n showProgress: boolean;\n /* Scroll to highlighted element? */\n scrollToElement: boolean;\n /*\n * Should we scroll the tooltip or target element?\n * Options are: 'element', 'tooltip' or 'off'\n */\n scrollTo: ScrollTo;\n /* Padding to add after scrolling when element is not in the viewport (in pixels) */\n scrollPadding: number;\n /* Set the overlay opacity */\n overlayOpacity: number;\n /* To determine the tooltip position automatically based on the window.width/height */\n autoPosition: boolean;\n /* Precedence of positions, when auto is enabled */\n positionPrecedence: TooltipPosition[];\n /* Disable an interaction with element? */\n disableInteraction: boolean;\n /* To display the \"Don't show again\" checkbox in the tour */\n dontShowAgain: boolean;\n dontShowAgainLabel: string;\n /* \"Don't show again\" cookie name and expiry (in days) */\n dontShowAgainCookie: string;\n dontShowAgainCookieDays: number;\n /* Set how much padding to be used around helper element */\n helperElementPadding: number;\n /* Default hint position */\n hintPosition: HintPosition;\n /* Hint button label */\n hintButtonLabel: string;\n /* Display the \"Got it\" button? */\n hintShowButton: boolean;\n /* Hints auto-refresh interval in ms (set to -1 to disable) */\n hintAutoRefreshInterval: number;\n /* Adding animation to hints? */\n hintAnimation: boolean;\n /* additional classes to put on the buttons */\n buttonClass: string;\n /* additional classes to put on progress bar */\n progressBarAdditionalClass: boolean;\n}\n\nexport function getDefaultOptions(): Options {\n return {\n steps: [],\n hints: [],\n isActive: true,\n nextLabel: \"Next\",\n prevLabel: \"Back\",\n skipLabel: \"×\",\n doneLabel: \"Done\",\n hidePrev: false,\n hideNext: false,\n nextToDone: true,\n tooltipPosition: \"bottom\",\n tooltipClass: \"\",\n group: \"\",\n highlightClass: \"\",\n exitOnEsc: true,\n exitOnOverlayClick: true,\n showStepNumbers: false,\n stepNumbersOfLabel: \"of\",\n keyboardNavigation: true,\n showButtons: true,\n showBullets: true,\n showProgress: false,\n scrollToElement: true,\n scrollTo: \"element\",\n scrollPadding: 30,\n overlayOpacity: 0.5,\n autoPosition: true,\n positionPrecedence: [\"bottom\", \"top\", \"right\", \"left\"],\n disableInteraction: false,\n\n dontShowAgain: false,\n dontShowAgainLabel: \"Don't show this again\",\n dontShowAgainCookie: \"introjs-dontShowAgain\",\n dontShowAgainCookieDays: 365,\n helperElementPadding: 10,\n\n hintPosition: \"top-middle\",\n hintButtonLabel: \"Got it\",\n hintShowButton: true,\n hintAutoRefreshInterval: 10,\n hintAnimation: true,\n buttonClass: \"introjs-button\",\n progressBarAdditionalClass: false,\n };\n}\n\nexport function setOption(\n options: Options,\n key: K,\n value: Options[K]\n): Options {\n options[key] = value;\n return options;\n}\n\nexport function setOptions(\n options: Options,\n partialOptions: Partial\n): Options {\n for (const [key, value] of Object.entries(partialOptions)) {\n options = setOption(options, key as keyof Options, value);\n }\n return options;\n}\n","import { getDontShowAgain, setDontShowAgain } from \"./core/dontShowAgain\";\nimport exitIntro from \"./core/exitIntro\";\nimport {\n hideHint,\n hideHints,\n populateHints,\n removeHint,\n removeHints,\n showHint,\n showHintDialog,\n showHints,\n} from \"./core/hint\";\nimport introForElement from \"./core/introForElement\";\nimport refresh from \"./core/refresh\";\nimport {\n HintStep,\n IntroStep,\n goToStep,\n goToStepNumber,\n nextStep,\n previousStep,\n} from \"./core/steps\";\nimport { Options, getDefaultOptions, setOption, setOptions } from \"./option\";\nimport isFunction from \"./util/isFunction\";\n\ntype introBeforeChangeCallback = (\n this: IntroJs,\n targetElement: HTMLElement,\n currentStep: number,\n direction: \"backward\" | \"forward\"\n) => Promise | boolean;\ntype introChangeCallback = (\n this: IntroJs,\n targetElement: HTMLElement\n) => void | Promise;\ntype introAfterChangeCallback = (\n this: IntroJs,\n targetElement: HTMLElement\n) => void | Promise;\ntype introCompleteCallback = (\n this: IntroJs,\n currentStep: number,\n reason: \"skip\" | \"end\" | \"done\"\n) => void | Promise;\ntype introStartCallback = (\n this: IntroJs,\n targetElement: HTMLElement\n) => void | Promise;\ntype introExitCallback = (this: IntroJs) => void | Promise;\ntype introSkipCallback = (\n this: IntroJs,\n currentStep: number\n) => void | Promise;\ntype introBeforeExitCallback = (\n this: IntroJs,\n targetElement: HTMLElement\n) => boolean | Promise;\ntype hintsAddedCallback = (this: IntroJs) => void | Promise;\ntype hintClickCallback = (\n this: IntroJs,\n hintElement: HTMLElement,\n item: HintStep,\n stepId: number\n) => void | Promise;\ntype hintCloseCallback = (\n this: IntroJs,\n stepId: number\n) => void | Promise;\n\nexport class IntroJs {\n public _currentStep: number = -1;\n public _currentStepNumber: number | undefined;\n public _direction: \"forward\" | \"backward\";\n public _targetElement: HTMLElement;\n public _introItems: IntroStep[] = [];\n public _hintItems: HintStep[] = [];\n public _options: Options;\n public _introBeforeChangeCallback?: introBeforeChangeCallback;\n public _introChangeCallback?: introChangeCallback;\n public _introAfterChangeCallback?: introAfterChangeCallback;\n public _introCompleteCallback?: introCompleteCallback;\n public _introStartCallback?: introStartCallback;\n public _introExitCallback?: introExitCallback;\n public _introSkipCallback?: introSkipCallback;\n public _introBeforeExitCallback?: introBeforeExitCallback;\n\n public _hintsAddedCallback?: hintsAddedCallback;\n public _hintClickCallback?: hintClickCallback;\n public _hintCloseCallback?: hintCloseCallback;\n\n public _lastShowElementTimer: number;\n public _hintsAutoRefreshFunction: (...args: any[]) => void;\n\n public constructor(targetElement: HTMLElement) {\n this._targetElement = targetElement;\n this._options = getDefaultOptions();\n }\n\n isActive() {\n if (this._options.dontShowAgain && getDontShowAgain(this)) {\n return false;\n }\n\n return this._options.isActive;\n }\n\n clone() {\n return new IntroJs(this._targetElement);\n }\n\n setOption(key: K, value: Options[K]) {\n this._options = setOption(this._options, key, value);\n return this;\n }\n\n setOptions(partialOptions: Partial) {\n this._options = setOptions(this._options, partialOptions);\n return this;\n }\n\n async start() {\n await introForElement(this, this._targetElement);\n return this;\n }\n\n async goToStep(step: number) {\n await goToStep(this, step);\n return this;\n }\n\n addStep(step: Partial) {\n if (!this._options.steps) {\n this._options.steps = [];\n }\n\n this._options.steps.push(step);\n\n return this;\n }\n\n addSteps(steps: Partial[]) {\n if (!steps.length) return this;\n\n for (let index = 0; index < steps.length; index++) {\n this.addStep(steps[index]);\n }\n\n return this;\n }\n\n async goToStepNumber(step: number) {\n await goToStepNumber(this, step);\n return this;\n }\n\n async nextStep() {\n await nextStep(this);\n return this;\n }\n\n async previousStep() {\n await previousStep(this);\n return this;\n }\n\n currentStep() {\n return this._currentStep;\n }\n\n async exit(force: boolean) {\n await exitIntro(this, this._targetElement, force);\n return this;\n }\n\n refresh(refreshSteps?: boolean) {\n refresh(this, refreshSteps);\n return this;\n }\n\n setDontShowAgain(dontShowAgain: boolean) {\n setDontShowAgain(this, dontShowAgain);\n return this;\n }\n\n onbeforechange(providedCallback: introBeforeChangeCallback) {\n if (isFunction(providedCallback)) {\n this._introBeforeChangeCallback = providedCallback;\n } else {\n throw new Error(\n \"Provided callback for onbeforechange was not a function\"\n );\n }\n return this;\n }\n\n onchange(providedCallback: introChangeCallback) {\n if (isFunction(providedCallback)) {\n this._introChangeCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for onchange was not a function.\");\n }\n return this;\n }\n\n onafterchange(providedCallback: introAfterChangeCallback) {\n if (isFunction(providedCallback)) {\n this._introAfterChangeCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for onafterchange was not a function\");\n }\n return this;\n }\n\n oncomplete(providedCallback: introCompleteCallback) {\n if (isFunction(providedCallback)) {\n this._introCompleteCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for oncomplete was not a function.\");\n }\n return this;\n }\n\n onhintsadded(providedCallback: hintsAddedCallback) {\n if (isFunction(providedCallback)) {\n this._hintsAddedCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for onhintsadded was not a function.\");\n }\n return this;\n }\n\n onhintclick(providedCallback: hintClickCallback) {\n if (isFunction(providedCallback)) {\n this._hintClickCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for onhintclick was not a function.\");\n }\n return this;\n }\n\n onhintclose(providedCallback: hintCloseCallback) {\n if (isFunction(providedCallback)) {\n this._hintCloseCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for onhintclose was not a function.\");\n }\n return this;\n }\n\n onstart(providedCallback: introStartCallback) {\n if (isFunction(providedCallback)) {\n this._introStartCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for onstart was not a function.\");\n }\n return this;\n }\n\n onexit(providedCallback: introExitCallback) {\n if (isFunction(providedCallback)) {\n this._introExitCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for onexit was not a function.\");\n }\n return this;\n }\n\n onskip(providedCallback: introSkipCallback) {\n if (isFunction(providedCallback)) {\n this._introSkipCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for onskip was not a function.\");\n }\n return this;\n }\n\n onbeforeexit(providedCallback: introBeforeExitCallback) {\n if (isFunction(providedCallback)) {\n this._introBeforeExitCallback = providedCallback;\n } else {\n throw new Error(\"Provided callback for onbeforeexit was not a function.\");\n }\n return this;\n }\n\n async addHints() {\n await populateHints(this, this._targetElement);\n return this;\n }\n\n async hideHint(stepId: number) {\n await hideHint(this, stepId);\n return this;\n }\n\n async hideHints() {\n await hideHints(this);\n return this;\n }\n\n showHint(stepId: number) {\n showHint(stepId);\n return this;\n }\n\n async showHints() {\n await showHints(this);\n return this;\n }\n\n removeHints() {\n removeHints(this);\n return this;\n }\n\n removeHint(stepId: number) {\n removeHint(stepId);\n return this;\n }\n\n async showHintDialog(stepId: number) {\n await showHintDialog(this, stepId);\n return this;\n }\n}\n","import { version } from \"../package.json\";\nimport { IntroJs } from \"./intro\";\nimport stamp from \"./util/stamp\";\n\n/**\n * Create a new IntroJS instance\n *\n * @param targetElm Optional target element to start the tour/hint on\n * @returns\n */\nconst introJs = (targetElm?: string | HTMLElement) => {\n let instance: IntroJs;\n\n if (typeof targetElm === \"object\") {\n instance = new IntroJs(targetElm);\n } else if (typeof targetElm === \"string\") {\n //select the target element with query selector\n const targetElement = document.querySelector(targetElm);\n\n if (targetElement) {\n instance = new IntroJs(targetElement);\n } else {\n throw new Error(\"There is no element with given selector.\");\n }\n } else {\n instance = new IntroJs(document.body);\n }\n // add instance to list of _instances\n // passing group to stamp to increment\n // from 0 onward somewhat reliably\n introJs.instances[stamp(instance, \"introjs-instance\")] = instance;\n\n return instance;\n};\n\n/**\n * Current IntroJs version\n *\n * @property version\n * @type String\n */\nintroJs.version = version;\n\n/**\n * key-val object helper for introJs instances\n *\n * @property instances\n * @type Object\n */\nintroJs.instances = {} as { [key: number]: IntroJs };\n\nexport default introJs;\n"],"names":["setCookie","name","value","days","_cookie","cookie","_defineProperty","undefined","date","Date","setTime","getTime","expires","toUTCString","arr","key","push","concat","document","join","getCookie","split","forEach","el","_el$split2","_slicedToArray","k","v","trim","dontShowAgainCookieValue","setDontShowAgain","intro","dontShowAgain","_options","dontShowAgainCookie","dontShowAgainCookieDays","keys","stamp","obj","arguments","length","DOMEvent$1","DOMEvent","_classCallCheck","_createClass","type","listener","context","useCapture","id","this","_id","handler","e","window","event","addEventListener","attachEvent","events_key","removeEventListener","detachEvent","isFunction","x","addClass","element","className","SVGElement","pre","getAttribute","match","setAttribute","classList","_step","_iterator","_createForOfIteratorHelper","s","n","done","cls","add","err","f","getPropValue","propName","propValue","currentStyle","defaultView","getComputedStyle","getPropertyValue","toLowerCase","setShowElement","targetElement","currentElementPosition","scrollParentToElement","scrollToElement","parent","style","excludeStaticParent","position","overflowRegex","body","parentElement","test","overflow","overflowY","overflowX","getScrollParent","scrollTop","offsetTop","getWinSize","innerWidth","width","height","innerHeight","D","documentElement","clientWidth","clientHeight","scrollTo","scrollPadding","tooltipLayer","rect","getBoundingClientRect","top","left","bottom","right","elementInViewport","winHeight","getWindowSize","scrollBy","setAnchorAsButton","anchor","tabIndex","isFixed","nodeName","getOffset","relativeEl","docEl","pageYOffset","scrollLeft","pageXOffset","xr","relativeElPosition","tagName","Object","assign","removeClass","classNameRegex","replace","setStyle","cssText","rule","setHelperLayerPosition","step","helperLayer","elementPosition","_targetElement","widthHeightPadding","helperElementPadding","Element","checkRight","targetOffset","tooltipLayerStyleLeft","tooltipOffset","windowSize","checkLeft","tooltipLayerStyleRight","removeEntry","stringArray","stringToRemove","includes","splice","indexOf","_determineAutoPosition","positionPrecedence","desiredTooltipPosition","possiblePositions","slice","tooltipHeight","tooltipWidth","targetElementRect","calculatedPosition","defaultAlignment","desiredAlignment","offsetLeft","windowWidth","halfTooltipWidth","winWidth","Math","min","screen","_determineAutoAlignment","placeTooltip","currentStep","arrowLayer","hintMode","currentTooltipPosition","tooltipCssClass","marginLeft","marginTop","display","tooltipClass","filter","Boolean","autoPosition","tooltipLayerStyleLeftRight","showStepNumbers","removeShowElement","_i","_elms","Array","from","querySelectorAll","_createElement","attrs","createElement","setAttRegex","appendChild","animate","existingOpacity","opacity","setTimeout","_getProgress","introItemsLength","_disableInteraction","disableInteractionLayer","querySelector","_createBullets","bulletsLayer","showBullets","ulContainer","anchorClick","stepNumber","goToStep","parseInt","i","_introItems","innerLi","anchorLink","onclick","innerHTML","toString","_updateBullets","oldReferenceLayer","oldRefActiveBullet","oldRefBulletStepNumber","_createProgressBar","progressLayer","showProgress","progressBar","progressBarAdditionalClass","progress","_currentStep","_updateProgressBar","_showElement","_x","_x2","_showElement2","apply","_asyncToGenerator","_regeneratorRuntime","mark","_callee4","oldHelperLayer","highlightClass","nextTooltipButton","prevTooltipButton","skipTooltipButton","oldHelperNumberLayer","oldTooltipLayer","oldTooltipTitleLayer","oldArrowLayer","oldTooltipContainer","referenceLayer","tooltipTextLayer","tooltipHeaderLayer","tooltipTitleLayer","buttonsLayer","dontShowAgainWrapper","dontShowAgainCheckbox","dontShowAgainCheckboxLabel","helperNumberLayer","wrap","_context4","prev","next","_introChangeCallback","call","_lastShowElementTimer","clearTimeout","stepNumbersOfLabel","title","focus","overlayOpacity","showButtons","onchange","target","checked","htmlFor","innerText","dontShowAgainLabel","_callee","_context","nextStep","_introCompleteCallback","exitIntro","stop","nextLabel","_callee2","_context2","previousStep","prevLabel","skipLabel","_callee3","_context3","_introSkipCallback","parentNode","removeChild","disableInteraction","buttonClass","hidePrev","hideNext","nextToDone","doneLabel","_introAfterChangeCallback","_goToStep","goToStepNumber","_x3","_x4","_goToStepNumber","_currentStepNumber","_x5","_nextStep","continueStep","_direction","_introBeforeChangeCallback","sent","abrupt","showElement","_x6","_previousStep","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","_hideHints","hints","_iterator3","_step3","t0","finish","showHints","_showHints","_iterator4","_step4","showHint","populateHints","removeHint","addHints","_addHints","getHintClick","item","hintDot","hintPulse","evt","stopPropagation","cancelBubble","showHintDialog","_hintItems","hintAnimation","hintTargetElement","alignHintPosition","hintPosition","_hintsAddedCallback","hintAutoRefreshInterval","_hintsAutoRefreshFunction","reAlignHints","on","hintElement","offset","iconWidth","iconHeight","_x7","_showHintDialog","_callee5","removedStep","tooltipWrapper","closeButton","_context5","_hintClickCallback","hintShowButton","hintButtonLabel","tooltip","_x8","_x9","_populateHints","_callee6","targetElm","_iterator5","_step5","currentItem","_hints","currentElement","hintAnimationAttr","_context6","tooltipPosition","_step2","_iterator2","_step2$value","fetchIntroSteps","allIntroSteps","introItems","steps","floatingElementQuery","group","hasAttribute","tempIntroItems","z","sort","a","b","refresh","refreshSteps","existing","replaceChild","_recreateBullets","onResize","_exitIntro","force","continueExit","overlayLayers","_args","_introBeforeExitCallback","off","_introExitCallback","addOverlayLayer","overlayLayer","exitOnOverlayClick","cursor","introForElement","_introForElement","isActive","_introStartCallback","keyboardNavigation","setOption","options","IntroJs","_showHintDialog2","_showHints2","_hideHints2","_hideHint2","_exit","_previousStep2","_nextStep2","_goToStepNumber2","_goToStep2","_start","dontShowCookie","partialOptions","_Object$entries","entries","_Object$entries$_i","setOptions","index","addStep","providedCallback","Error","_callee7","_context7","_callee8","_context8","_callee9","_context9","_callee10","_context10","removeHints","_callee11","_context11","introJs","instance","instances","version"],"mappings":"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"} \ No newline at end of file diff --git a/app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css b/app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css index f9cf0878a..6de3ef25f 100644 --- a/app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css +++ b/app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css @@ -16,7 +16,7 @@ *= require ./_custom_admin *= require ./_bootstrap-datepicker - *= require ./introjs/_introjs.min + *= require ./introjs/introjs.min *= require ./tageditor/_jquery.tag-editor *= require ./uploader/uploader_manifest diff --git a/app/assets/stylesheets/camaleon_cms/admin/introjs/_introjs.min.css b/app/assets/stylesheets/camaleon_cms/admin/introjs/introjs.min.css similarity index 100% rename from app/assets/stylesheets/camaleon_cms/admin/introjs/_introjs.min.css rename to app/assets/stylesheets/camaleon_cms/admin/introjs/introjs.min.css diff --git a/app/assets/stylesheets/camaleon_cms/admin/introjs/introjs.min.css.map b/app/assets/stylesheets/camaleon_cms/admin/introjs/introjs.min.css.map new file mode 100644 index 000000000..dff255c31 --- /dev/null +++ b/app/assets/stylesheets/camaleon_cms/admin/introjs/introjs.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["%3Cinput%20css%202%3E"],"names":[],"mappings":"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","file":"introjs.min.css","sourcesContent":[".introjs-overlay{position:absolute;box-sizing:content-box;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-showElement{z-index:9999999!important}tr.introjs-showElement>td{z-index:9999999!important;position:relative}tr.introjs-showElement>th{z-index:9999999!important;position:relative}.introjs-disableInteraction{z-index:99999999!important;position:absolute;background-color:#fff;opacity:0}.introjs-relativePosition{position:relative}.introjs-helperLayer{box-sizing:content-box;position:absolute;z-index:9999998;border-radius:4px;transition:all .3s ease-out}.introjs-helperLayer *{box-sizing:content-box}.introjs-helperLayer :before{box-sizing:content-box}.introjs-helperLayer :after{box-sizing:content-box}.introjs-tooltipReferenceLayer{font-family:\"Helvetica Neue\",Inter,ui-sans-serif,\"Apple Color Emoji\",Helvetica,Arial,sans-serif;box-sizing:content-box;position:absolute;visibility:hidden;z-index:100000000;background-color:transparent;transition:all .3s ease-out}.introjs-tooltipReferenceLayer *{font-family:\"Helvetica Neue\",Inter,ui-sans-serif,\"Apple Color Emoji\",Helvetica,Arial,sans-serif}.introjs-helperNumberLayer{font-family:\"Helvetica Neue\",Inter,ui-sans-serif,\"Apple Color Emoji\",Helvetica,Arial,sans-serif;color:#9e9e9e;text-align:center;padding-top:10px;padding-bottom:10px}.introjs-arrow{border:5px solid transparent;content:\"\";position:absolute}.introjs-arrow.top{top:-10px;left:10px;border-bottom-color:#fff}.introjs-arrow.top-right{top:-10px;right:10px;border-bottom-color:#fff}.introjs-arrow.top-middle{top:-10px;left:50%;margin-left:-5px;border-bottom-color:#fff}.introjs-arrow.right{right:-10px;top:10px;border-left-color:#fff}.introjs-arrow.right-bottom{bottom:10px;right:-10px;border-left-color:#fff}.introjs-arrow.bottom{bottom:-10px;left:10px;border-top-color:#fff}.introjs-arrow.bottom-right{bottom:-10px;right:10px;border-top-color:#fff}.introjs-arrow.bottom-middle{bottom:-10px;left:50%;margin-left:-5px;border-top-color:#fff}.introjs-arrow.left{left:-10px;top:10px;border-right-color:#fff}.introjs-arrow.left-bottom{left:-10px;bottom:10px;border-right-color:#fff}.introjs-tooltip{box-sizing:content-box;position:absolute;visibility:visible;background-color:#fff;min-width:250px;max-width:300px;border-radius:5px;box-shadow:0 3px 30px rgba(33,33,33,.3);transition:opacity .1s ease-out}.introjs-tooltiptext{padding:20px}.introjs-dontShowAgain{padding-left:20px;padding-right:20px}.introjs-dontShowAgain input{padding:0;margin:0;margin-bottom:2px;display:inline;width:10px;height:10px}.introjs-dontShowAgain label{font-size:14px;display:inline-block;font-weight:400;margin:0 0 0 5px;padding:0;background-color:#fff;color:#616161;-webkit-user-select:none;user-select:none}.introjs-tooltip-title{font-size:18px;width:90%;min-height:1.5em;margin:0;padding:0;font-weight:700;line-height:1.5}.introjs-tooltip-header{position:relative;padding-left:20px;padding-right:20px;padding-top:10px;min-height:1.5em}.introjs-tooltipbuttons{border-top:1px solid #e0e0e0;padding:10px;text-align:right;white-space:nowrap}.introjs-tooltipbuttons:after{content:\"\";visibility:hidden;display:block;height:0;clear:both}.introjs-button{box-sizing:content-box;position:relative;overflow:visible;padding:.5rem 1rem;border:1px solid #bdbdbd;text-decoration:none;text-shadow:1px 1px 0 #fff;font-size:14px;color:#424242;white-space:nowrap;cursor:pointer;outline:0;background-color:#f4f4f4;border-radius:.2em;zoom:1;display:inline}.introjs-button:hover{outline:0;text-decoration:none;border-color:#9e9e9e;background-color:#e0e0e0;color:#212121}.introjs-button:focus{outline:0;text-decoration:none;background-color:#eee;box-shadow:0 0 0 .2rem rgba(158,158,158,.5);border:1px solid #616161;color:#212121}.introjs-button:active{outline:0;text-decoration:none;background-color:#e0e0e0;border-color:#9e9e9e;color:#212121}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{position:absolute;top:0;right:0;display:inline-block;width:45px;height:45px;line-height:45px;color:#616161;font-size:22px;cursor:pointer;font-weight:700;text-align:center;text-decoration:none}.introjs-skipbutton:focus,.introjs-skipbutton:hover{color:#212121;outline:0;text-decoration:none}.introjs-prevbutton{float:left}.introjs-nextbutton{float:right}.introjs-disabled{color:#9e9e9e;border-color:#bdbdbd;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-disabled:focus,.introjs-disabled:hover{color:#9e9e9e;border-color:#bdbdbd;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-hidden{display:none}.introjs-bullets{text-align:center;padding-top:10px;padding-bottom:10px}.introjs-bullets ul{box-sizing:content-box;clear:both;margin:0 auto 0;padding:0;display:inline-block}.introjs-bullets ul li{box-sizing:content-box;list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{transition:width .1s ease-in;box-sizing:content-box;display:block;width:6px;height:6px;background:#ccc;border-radius:10px;text-decoration:none;cursor:pointer}.introjs-bullets ul li a:focus,.introjs-bullets ul li a:hover{width:15px;background:#999;text-decoration:none;outline:0}.introjs-bullets ul li a.active{width:15px;background:#999}.introjs-progress{box-sizing:content-box;overflow:hidden;height:10px;margin:10px;border-radius:4px;background-color:#e0e0e0}.introjs-progressbar{box-sizing:content-box;float:left;width:0%;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.introjs-fixedTooltip{position:fixed}.introjs-hint{box-sizing:content-box;position:absolute;background:0 0;width:20px;height:15px;cursor:pointer}.introjs-hint:focus{border:0;outline:0}.introjs-hint:hover>.introjs-hint-pulse{background-color:rgba(60,60,60,.57)}.introjs-hidehint{display:none}.introjs-fixedhint{position:fixed}@keyframes introjspulse{0%{transform:scale(.95);box-shadow:0 0 0 0 rgba(0,0,0,.7)}70%{transform:scale(1);box-shadow:0 0 0 10px transparent}100%{transform:scale(.95);box-shadow:0 0 0 0 transparent}}.introjs-hint-pulse{box-sizing:content-box;width:15px;height:15px;border-radius:30px;background-color:rgba(136,136,136,.24);z-index:10;position:absolute;transition:all .2s ease-out;animation:introjspulse 2s infinite}.introjs-hint-no-anim .introjs-hint-pulse{animation:none}.introjs-hint-dot{box-sizing:content-box;background:0 0;border-radius:60px;height:50px;width:50px;position:absolute;top:-18px;left:-18px;z-index:1;opacity:0}"]} \ No newline at end of file From 26e59a9fc19a1176cae73c02847470009e6de1bd Mon Sep 17 00:00:00 2001 From: texpert Date: Tue, 27 Aug 2024 23:48:05 +0300 Subject: [PATCH 3/3] Let the common `btn` class be set by IntroJS in the `buttonClass` option --- app/assets/javascripts/camaleon_cms/admin/_actions.js | 5 +++-- .../stylesheets/camaleon_cms/admin/_custom_admin.css.scss | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/camaleon_cms/admin/_actions.js b/app/assets/javascripts/camaleon_cms/admin/_actions.js index dae7df7b5..2dee1fe1e 100644 --- a/app/assets/javascripts/camaleon_cms/admin/_actions.js +++ b/app/assets/javascripts/camaleon_cms/admin/_actions.js @@ -22,7 +22,8 @@ function init_intro(){ exitOnOverlayClick: false, showStepNumbers: false, showBullets: false, - disableInteraction: true + disableInteraction: true, + buttonClass: 'btn' }).oncomplete(finish).onexit(finish).onbeforechange(function(ele) { if($(ele).hasClass("treeview") && !$(ele).hasClass("active")) $(ele).children("a").click(); if($(ele).is("li")){ @@ -88,4 +89,4 @@ function modal_fix_multiple(){ activeModal.enforceFocus(); activeModal.handleUpdate(); } -} \ No newline at end of file +} diff --git a/app/assets/stylesheets/camaleon_cms/admin/_custom_admin.css.scss b/app/assets/stylesheets/camaleon_cms/admin/_custom_admin.css.scss index 11f4831f5..8eabe27d7 100644 --- a/app/assets/stylesheets/camaleon_cms/admin/_custom_admin.css.scss +++ b/app/assets/stylesheets/camaleon_cms/admin/_custom_admin.css.scss @@ -215,14 +215,12 @@ } .introjs-prevbutton, { - @extend .btn; color: #fff !important; background-color: #5cb85c !important; border-color: #4cae4c !important } .introjs-nextbutton { - @extend .btn; color: #fff !important; background-color: #337ab7 !important; border-color: #2e6da4 !important