{"version":3,"sources":["webpack:///./includes/assets/js/modules/DpitColor.js","webpack:///./includes/assets/js/modules/dpitHidden.js","webpack:///./includes/assets/js/modules/DpitColorAnalyze.js","webpack:///./includes/assets/js/modules/BulletsAnimation.js","webpack:///./public/assets/js/modules/core/EventListeners.js","webpack:///./public/assets/js/modules/core/ExclusiveClickListener.js","webpack:///./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///./public/assets/js/modules/core/DpitTarget.js","webpack:///./public/assets/js/modules/core/DpitStickyEvents.js","webpack:///./public/assets/js/modules/core/DpitTargetParent.js","webpack:///./public/assets/js/modules/core/DpitCore.js","webpack:///./public/assets/js/modules/core/dpitGoldenRatioPosAlg.js","webpack:///./public/assets/js/modules/core/DpitTargetBranch.js","webpack:///./public/assets/js/modules/core/DpitUserInteraction.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js"],"names":["DpitColor","constructor","src","this","rgbObj","r","g","b","startsWith","hexStringToRgbObj","rgbStringToRgbObj","Error","colorDefinition","toRgbStringCommaSeparated","rgbString","match","parseInt","hex","replace","m","result","exec","contrast","color2","lum1","luminosity","lum2","lum","Object","keys","forEach","key","chan","Math","pow","red","green","blue","isDark","isLight","mix","colorToMixIn","weight","color1","w1","undefined","w2","fromRgb","max","min","round","setAsCssVariable","varName","arguments","length","document","documentElement","style","setProperty","hideElement","element","byOpacity","noSpace","noTransition","transitionBkp","transition","classList","add","setTimeout","showElement","remove","DpitColorAnalyze","config","dpDebugEn","console","log","srcColor","preferWhiteText","colorRangeArray","fallBackContrastThreshold","fallbackColor","contrasts","srcColorObj","color","colorObj","push","sort","a","fallbackColorObj","dpitColors","rgbIdx","res","Array","isArray","dpitColorsToSort","compareColorsByRgbHue","_defineProperty","rgbKey","getRgbHueFeature","BulletsAnimation","rootSelectorOrElement","additionalClasses","tickMs","totalSize","visibleSize","activeSize","symmetrical","id","activeBulletClass","bemRoot","classNames","inactiveClass","getModifiedClass","activeClass","activeHalfSize","floor","getRootElement","HTMLElement","querySelector","modifier","start","backward","loops","loopsPassedCb","rootElement","focus","preventScroll","isRunning","bulletsLayer","createBullets","startReloadingSpinnerBack","startReloadingSpinner","getLoopTimeMs","count","createElement","className","setAttribute","opacity","display","bulletElements","containerEl","i","bulletEl","appendChild","activateBullet","activeIdx","idx","distanceFromActive","distanceFromActiveAbs","abs","stopAfterLoopEnd","loopEndCallback","finishAfterLoopEnd","finishAfterLoopEndCallback","stop","_this$bulletsLayer","_this$rootElement","clearBulletActiveStates","stopReloadSpinner","blur","_this$bulletElements","spinnerInterval","clearInterval","bulletHideTimeout","clearTimeout","setInterval","checkAfterLoopEnd","finishLoop","Function","EventListeners","listeners","getEventId","type","eventId","Date","getTime","random","toString","functionRef","addEventListener","_this$listeners$event","removeEventListener","removeAll","ExclusiveClickListener","stopPropagationEnabled","disableAllPointerEvents","suppressParentsLinkElements","excludeTargetBlank","leftButtonOnly","data","noEventTimeoutAfterVeryFirstClickMs","addElements","elements","addElement","dataItem","noEventsData","event","handleVeryFirstClickEvent","handleFollowingClickEvents","clear","clearNoEvents","bind","dataBkp","activateAfterClear","isLeftClickEvent","button","stopImmediatePropagation","activateNoEvents","preventDefault","startNoEventTimeout","onCleared","noEventsTimeout","noEventElements","getParentsLinkElements","addElementNoEvents","pointerEventsProp","getPropertyValue","pointerEventsBkp","clearNoEventsOnNoEventsItem","noEventsDataItem","removeProperty","_slicedToArray","arr","_i","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","call","next","done","value","err","unsupportedIterableToArray","TypeError","DpitTarget","contains","$element","$","beforeOffset","offset","afterOffset","setOffset","top","attrsBkp","left","cssPosition","getComputedStyle","analysis","isSticky","isFixed","hasAltPosition","includes","process","CLASSES_CORE","target","addClassSafe","relativePosition","destroy","removeClassSafe","propName","ClassName","DpitStickyEvents","_ref","_ref$container","container","_ref$enabled","enabled","observers","stickyElements","state","Map","headerSentinels","footerSentinels","enableEvents","setState","sticky","get","headerSentinel","addSentinel","set","footerSentinel","window","self","header","createHeaderObserver","footer","createFooterObserver","warn","disableEvents","fire","values","observer","disconnect","addStickies","stickies","addSticky","sentinel","stickyParent","parentElement","cssText","assign","position","right","visibility","insertBefore","getSentinelPosition","observe","IntersectionObserver","_ref2","record","boundingClientRect","isIntersecting","rootBounds","stickyTarget","bottom","POSITION_TOP","threshold","HTMLDocument","root","_ref4","POSITION_BOTTOM","isSticking","dispatchEvent","CustomEvent","CHANGE","detail","bubbles","STUCK","UNSTUCK","stickyElement","stickyStyle","parentStyle","height","parentPadding","paddingTop","getBoundingClientRect","topSentinel","previousElementSibling","stickyOffset","topSentinelOffset","isSomeSticky","DpitTargetParent","super","computedStyle","zIndex","getComputedCssValFloat","hasFilter","hasCssPropertyPrefixed","hasTransform","hasDecreasedOpacity","hasZIndex","test","isScrollable","isElementScrollable","isZIdxFixParent","targetParent","needsZIndexFix","doesNeedZIndexFix","MODIFIERS","zIdxFix","DpitCore","wrapEl","mainCfg","tourCfg","_this","insensitivityFirst","insensitivity","isDummyModeActive","isDummyMode","followTargetInterval","options","followTargetEn","stepItem","targetDummyBkpEl","isDummyBkpActive","currentTargetEl","tooltipRefEl","lastTargetBB","DpitBB","fromElement","lastRefBB","lastRefDiffBB","diff","isFollowTargetEnabled","processing","hidden","hasClass","insensitivityFinal","isFollowTargetInAction","newTargetBB","newRefBB","newRefDiffBB","refDiffAbsDiffBB","diffAbs","width","stepIdx","softRefresh","REFRESH_REASONS","followTarget","followTargetIntervalInActionMs","followTargetIntervalStandbyMs","option","stepLabel","stepNumLabel","Number","isNaN","goToStep","cbEnd","overlayContainer","above","overlayContainerTransitionDelayMs","_len","args","_key","layer","_len2","_key2","leaveActiveOverlay","force","reason","isRedirect","disableAnimation","ending","leaveOverlayAlways","doAction","EVENTS","onBeforeEnd","continueExit","onBeforeEndCallback","disablePointerEvents","disableKeyboardNavig","showBackgroundOverlay","bringOverlayAboveIntroLayers","properties","disableStartAnimation","exitingProcess","startFullScreenAnimation","stopFullScreenAnimationAfterLoopEnd","object","nodeType","temp","jQuery","deepCloneObject","isDocumentSize","margin","docMargin","windowMargin","docBB","winBB","maxROI","supplyWidthHeight","useLastTooltipPos","useLastNumberPos","placeTooltipIterations","isCrowdedPos","prevIterationTooltipPos","tooltipPos","actualizeTooltipBB","tooltipClass","tooltipEl","isProgressBarEnabled","tooltip","_this$placeTooltipCor","placeTooltipCore","isNeededNextIteration","desiredNumberPos","placeTooltip","actualizeBulletScrollBar","showStepNumbers","placeNumber","targetBB","numberEl","tooltipWidth","desiredAlignment","maxArea","calculateTooltipAlignmentScore","tooltipLeft","tooltipRight","overLeft","overRight","possibleXAlignments","score","indexOf","tooltipHeight","tooltipTop","tooltipBottom","overTop","overBottom","possibleYAlignments","isFixedPos","fixedPosition","toElement","isInit","isTargetInMobileMenu","isTargetMobileAlt","isStepMobileAlt","documentQuerySelectorSafe","alt_mobile_selector","selector","isStepItemInMobileMenu","userInteraction","update","isFirstStep","isLastStep","controlsAutoFocusEnable","elementToFocusOn","isBackward","buttonPrevEl","buttonNextEl","buttonCancelEl","stepItems","activeElement","focusVisible","$buttonTextEl","children","CLASSES_CHILD","buttonText","text","targetBranch","stickyPosElements","onStickyEvent","stickyEvents","targetElement","targetElForSticky","containsFixedPosRes","containsFixedPos","setFixedMode","containsSticky","stickyDetLabel","stickyDetector","toUpperCase","prevIsFixedPos","printDebugMessage","tourId","prevStepItem","tooltipPadding","isPortraitOrientation","finalizeRefreshCounter","highlightExtensionPx","empty","tooltipRadius","hookBaseArgs","currentUrl","URL","location","labeling","nextLabel","prevLabel","skipLabel","doneLabel","button_arrows","skipForFutureVisitsLabel","hide_previous_step_button","disable_navigation_by_bullets","hide_skip_button","highlightClass","exitOnEsc","exitOnOverlayClick","keyboardNavigation","showBullets","showProgress","tooltipDistanceFromTarget","defaultBoardMarginPx","x","y","targetExtendPaddingPercent","targetExtendPaddingMaxPx","scrollTo","scrollSpeed","scrollSpeedPerPageMs","maxScrollSpeedPerPageMs","positionPrecedence","enable_interaction","buttonClass","overlayOpacityFull","overlayOpacityLight","defaultWinBoardMarginMobSizeCoef","centerTopBottomPosOffset","max_tooltip_width","customTextStylesEn","FEATURES","initOverlayOpacity","eventListeners","resumeFullOverlayOpacity","initDebugVisualizer","actualizeDocAndScreenAreas","initUserInteraction","DpitUserInteraction","inHighlightLayerAnimation","onUserInteractionIterateStep","onUserInteractionIterateStepInProgress","onBeforeUnloadByLinkClick","getOnBeforeUnloadByLinkClickConfirmMessage","i18n","started","enablePointerEvents","disableStepChanging","goToNextStep","resetUserInteraction","enableUserInteraction","enable","disableUserInteraction","userInteractionTryWhenDisabledFce","disable","VERSION","IS_DEBUG","VISUALIZE_BB","then","module","debugVisualizer","default","tag","isThisInRun","DpitHooks","currentStepObj","stepObject4Hooks","_stepItem$enable_inte","index","step","tooltipContent","intro","tooltipPosition","isEnabledInteraction","val","url","altMobileSelector","isInMobileMenu","is_in_mobile_menu","skipOnBigScreen","skip_on_big_screen","skipOnMobile","skip_on_mobile","pauseFollowTarget","wasFollowTargetEnabled","stopFollowTarget","restoreFollowTarget","startFollowTarget","pauseResizeRefresh","isResizeRefreshPaused","restoreResizeRefresh","restartFollowTarget","showArrowEl","arrowPosId","arrowPos","base","ceil","hideArrowEl","arrowEl","arrow","align","removeAttribute","actualizeArrowEl","targetDummyEl","actualizeDummyMode","shouldSwitchToDummyMode","targetElementIsNotVisibleAndNotSkipped","skip_absent_ref_el","backupDummy","activateDummyMode","deactivateDummyMode","createDummyLayer","updateIndexOfStepItem","newZeroBasedIdx","initSteps","steps","stepConfig","actualizeTargetItem","startCore","startStep","isVisitCountAffectedTrigger","isAllowFutureVisitsCheckboxEnabled","startCoreBasic","enableKeyboardNavig","init","actualizeScrollSpeedOptions","isScreenPortraitOrientation","startStepNum","onOverlayClick","exitCoreWithHiddenOverlay","setOptions","getOption","name","processBeforeStepChange","newStepItem","beforeChangeRes","RES_PROCESS_ASYNC","continue","beforeStepChangeCallback","stepIdxZeroBased","_this$prevStepItem","isStepChangingDisabled","asyncWait","beforeStepChange","nextStepObj","skip","abort","disconnectListeners","resetCoreOnStepChanged","actualizeCurrentStep","showStep","removeClass","stepSpecifier","addClass","goToPrevStep","onSkipButtonClick","hideIntroLayers","_this$userInteraction","hideLayers","disableInteractionLayer","highlightEl","highlight","hideIntroLayersWithShownBgOverlay","showIntroLayers","_this$userInteraction2","hideBackgroundOverlay","showLayers","connectListeners","listenersConnected","overlayEl","onKeyDown","onResize","stopAutoScrollWhenUserAction","finalizeExit","arrowIcoWrapData","cancelButtonIcoWrapEl","initialized","parentNode","removeChild","resetCore","hideShadowOverlay","TIMING","ended","exitCore","pointerEvents","isInRun","tourInRun","keyboardNavigEnabled","softenOverlayOpacity","lightOverlayOpacity","updateCssVar","actualizeHighlightBorder","targetPureBB","numberElBB","minExtensionSize","tb","lr","maxExtensionSize","highlightExtensionSizeBase","highlightExtensionSizeTbLr","borderWidthCoef","highlightBorderWidth","calculateTargetBBs","numberElBBSizeStandard","extend","intersectionBB","intersect","actualizeBoardSizes","visualizeBoards","docBoardBB","winBoardBB","unsubscribeEvent","providedCallback","subscribeEvent","unsubscribe","join","removeAction","addAction","pauseRefreshers","all","restoreRefreshers","startRefreshers","getTourIdPostfix","didOrientationChanged","currentNumberPos","hardReset","forceHideLayers","doNotHideIntroLayers","clearFixedMode","resetTargetElement","actualizeTheme","clearMobileMenuTarget","clearStepVisualizers","unplugTheme","pauseTour","addDocumentClass","pause","isPaused","restoreTour","removeDocumentClass","restore","hardRefresh","setInRunClasses","clearInRunClasses","showShadowOverlay","noOverlay","actualizeShadowOverlay","hasTargetItemHiddenOverlay","dummy","wrap","hiddenKeepEvents","initBGOverlayLayer","bulletsAnimation","finishCallback","stopFullScreenAnimation","setAsRunningTour","callbacksFromSecLayer","DpitApi","disableApi","COMMANDS","goToNext","goToPrev","goToStepByStepLabel","exit","setAccent","actualizeAccentColor","getScrollSpeed","_this$tourCfg","_this$tourCfg$propert","setScrollSpeed","scrollSpeedOption","setCoreOptions","getCoreOptions","resetAsRunningTour","setRadiuses","tooltip_radius","highlight_radius","button_radius","accentColorDefinition","accentColor","accentContrastColor","getContrastColor","accentContrastInvColor","lightAccent","theme","themeSpecifier","actualizeThemeSpecifier","newTheme","currentTheme","getThemeClassName","initThemeOptions","themeOverride","accentColorOverride","_this$tourCfg2","_this$mainCfg","_this$mainCfg$mobile_","setTextStyles","text_styles","mobile_break_points","mobile","getCssValFloat","isStickyTheme","actualizeWrapperSize","_this$tourCfg3","_this$mainCfg2","_this$mainCfg2$mobile","getDocBB","getWinBB","oldDocBB","isMobileSize","getIsMobileSize","round1dec","sqrt","BrowserSupport","vHFix","setMobileSizeCoef","actualizeBulletsAnimationSize","getBoardMargin","getBoardBB","actualizeScreenArea","actualizeTooltipMinWidth","isResizeWithOrientationToggle","currentWinBB","oldWinBB","isResizeWithMajorAreaChange","relativeThreshold","currentArea","area","oldArea","getResizeReactionAndType","isOrientationToggle","reaction","RESIZE_REACTION","hard","RESIZE_TYPE","orientationToggle","majorAreaChange","none","mobUrlBarVisibilityToggle","soft","minorAreaChange","_this$tourCfg4","_this$tourCfg4$proper","bulletAnimSize","size1Bullet","round3dec","bulletAnimBorderRadius","resizeRefresh","sizes","_this$getResizeReacti","currentWinSize","oldWinSize","resize","resizeType","resizeRefreshEn","_this$getResizeReacti2","resizeTimeout","restartResizeTimeout","disableOnResize","shouldHideIntroLayers","oldSize","currentSize","resizeReaction","e","_e$key","code","keyCode","charCode","isHideNextByCurrentStepMeta","srcElement","getAttribute","click","returnValue","extendBoardMarginByTarget","containerBB","extendedMargin","filterWinBoardMargin","filterMarginEn","mobileSizeCoef","getDesiredNumberPos","onTooltip","getArrowData","arrowHalfSizes","arrowSizes","arrowElRelPos","getReverseBasePos","tooltipBB","actualizeTooltipRadiusPadding","radiusPaddingFix","fixArrowInTooltipRadius","tooltipElRelPos","arrowRight","arrowBottom","actualizeTooltipPosition","relativeLeft","relativeTop","actualizeTooltipSizeAndPos","isOverLeft","isOverRight","newLeft","filterTooltipElRelPos","elRelPos","useLastPosition","offsetWidth","offsetHeight","determineTooltipPosition","ceil1dec","floor1dec","stepContent","getStepContent","arrowWidthMinusTargetWidth","arrowHeightMinusTargetHeight","_this$getArrowData","goldenRatioPosAlgEn","filter","dpitGoldenRatioPosAlg","minTooltipWidth","fixPositionOutOfTheWindow","initTooltip","_this$numberEl","_this$stepItem","_this$stepItem$hidden","_this$stepItem$hidden2","tooltipTextEl","hasScrollBar","actualizeTooltipMaxWidth","maxHeight","marginLeft","marginTop","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","number","hidden_meta","ext","build_with_wp_editor","tooltipText","whiteSpacingNormal","customStyle","actualizeStepNumber","actualizeStepNumberEl","stepNumber","firstChild","innerHTML","actualizeNumberBB","actualizeLayer","isEnabled","layerElement","hideByDisp","classWhenLayerShown","takeNumberBBSizeStandardSnapShot","numberBB","getActualNumberPosY","lastPositionKey","lastPositionData","bbNumberDest","indention","lastPositionKeyBase","lastPositionParts","split","lastPositionBase","numberPosCoef","numberLayerHalfSize","scrollTop","getActualNumberPosX","scrollLeft","placeNumberFast","lastPosition","newPosition","getIsPossibleNumberPositionsInBoardObject","possiblePositionsLT","maxAreaBB","getNumberIntersectionFeature","posX","posY","bbContainerToTest","numBBToTest","fromLeftTopWidthHeight","getNumberDestElSizeFeature","getPlaceNumberRepetitionParams","oldDesiredPosition","iterations","enableIndentation","desiredPosition","maxIterations","numberDestEl","bbOther","numberSizeCoef","numberPosFeatures","leftIndented","rightIndented","topIndented","bottomIndented","isInWindow","allowedPositionKeys","positionKeysY","positionKeysX","finalPositions","idxY","idxX","numberPositionType","intersection","isNumberCloseToTooltip","nextRunParams","tooltipPosBase","isOnTooltip","_tooltipPosBase","adjustTooltipTopAfterHeightChange","oldTop","oldHeight","middleHeightCoef","actualizeTooltipScrollBars","newHeight","heightDiff","newTop","fixOverWinBoardTopForFixedElements","topBkp","tooltipHeightBkp","tooltipTextHeight","textLayerMaxHeight","SIZE_LIMITS_PX","minTooltipContentHeightFixedPos","fixOverWinBoardBottomForFixedElements","isOverBottom","actualizeTextScrollbar","hasElementScrollBarY","fixPositionOutOfTheBoard","boardBB","fixPositionOutOfTheWindowForNotFixedElements","actualizeFlier","flierBB","minTooltipContentHeight","requiredHeightDiff","getDummyTooltipPosition","targetItem","calculatedPosition","desiredTooltipPosition","reversePosition","possiblePositionsScoreInc","disabled","tooltipSizesArrowInc","newTooltipWidthArrowInc","newTooltipWidth","rightWidthArrowInc","rightWidth","leftWidthArrowInc","leftWidth","minTargetCenterHeight","bottomSpaceHardLimit","minTooltipHeight","bottomSpaceSoftLimit","topSpaceHardLimit","topSpaceSoftLimit","possiblePositionsScoreIncArr","pos","possiblePositions","map","hyphenIndex","substr","desiredPosIdx","determineTooltipAlignmentX","determineTooltipAlignmentY","actualizeOverSizeRadiuses","baseLayerClass","placeTargetPosBasedLayers","moveLayer2Target","actualizeUserInteraction","updateDisableInteractionLayer","isUserInteractionEnabled","_this$userInteraction3","skipCurrentStep","visibleLastStepShouldBeEvaluated","visibleFirstStepShouldBeEvaluated","checkTargetElValidity","skipStep","shouldBeStepSkipped","setNotVisibleRefBullet","visibleLastStepIdx","visibleFirstStepIdx","item","_item$enable_interact","hide_overlay","_this$stepItem$enable","hide_next_btn","breakPointOverride","enableStepSkippingWhenNotFoundRefEl","disabledStepSkippingWhenNotFoundRefEl","disableStepSkippingWhenNotFoundRefEl","isElementVisible","isElementInsideDocBoard","bb","getHighlightLayerClassName","getStartStepIdx","getEndStepIdx","intro_proc","setTooltipContent","find","attr","getNotVisibleStepCnt","actualizeProgressBar","progressLayer","progressVal","getProgressInPercent","progressBarLayer","isBulletNavig","actualizeBulletsNavigActiveItem","bullets","isBulletsNavigEnabled","autoScroll","listInBulletsNavigLayer","hasElementScrollBarX","activeEl","scrollIntoView","validTarget","time","actualizeSkipButton","buttonSkipLabel","buttonSkipTextLayer","actualizeButtons","skipTourForFutureVisitsClass","checkboxLabel","hiddenHard","skipTourForFutureVisitsLabelEl","buttonPrevClass","buttonPrev","noTrans","buttonNextClass","buttonNext","full","buttonSkipClass","buttonSkip","buttonDone","actualizeButtonFocus","onNavigBulletClick","closest","createButtonContent","textContent","buttonContentLayer","loadIcons","loadArrowButtonIcons","loadCancelButtonIcons","button_cancel_ico","iconOption","_this$arrowIcoWrapDat","_this$arrowIcoWrapDat2","_this$arrowButtonSpac","_this$arrowButtonSpac2","prev","arrowButtonSpacersData","appendIcoSpacerToPrevNextButtons","buttonIcoWrap","svgLoader","svgStringPrevNext","buttonIco","appendTo","prependTo","textInButtonClass","textIconClass","symbol","_this$arrowIcoWrapDat3","_this$arrowIcoWrapDat4","_this$arrowButtonSpac3","_this$arrowButtonSpac4","buttonSpacer","cancelButtonSpacerEl","appendIcoSpacerToCancelButton","svgStringCancel","spacerClass","buttonSpacers","cancelButtonSpacer","createLayers","onInit","setAsButton","anchor","label","tabIndex","createBullet","roleLinkList","isActive","onClickCallback","innerLi","title","onclick","innerNumber","createNavigBullets","dpitScrollBar","createNumberLayer","numberTextEl","numberText","targetDummy","flierEl","flier","rbAnim","inHighlight","tooltipReference","tooltipRadiusPaddingEl","tooltipRadiusPadding","progress","progressBar","mainControlsEl","mainControls","tooltipButtonsEl","tooltipButtons","buttonPrevNextWrapEl","buttonPrevNextWrap","skipTourForFutureVisitsCheckboxEl","checkbox","checked","TourVisitCounter","isVisitEnabled","processSkipForFutureVisits","createTextNode","disableFutureVisits","reInitLayers","clearFlier","isUserScrolling","userInteractTimeout","userScrolling","getFlierBB","merge","extendByMarginBB","finalizeStepChange","finalizeStepChangeEn","isBoundingBoxInsideViewPort","finalize","processTargetBranchAndFixedPosState","_this$stepItem2","DpitTargetBranch","actualizeFixedAndStickyPos","dbgEnWhenFalse","dbgInfo","disableStickyEvents","containsFixed","overlay","getTransitionDurationMs","initBulletsAnimation","bulletRootElement","omitNumberEl","calculateScrollTimeToTarget","_this$stepItem3","targetOffset","startOffset","getScrollSpeedOptions","scrollSpeedOptionSanitized","SCROLL_SPEED","logCoef","constant","maxCoef","forceScrollTopOffset","getScrollFlierOptions","scrollTimeMs","getFlierPureWidth","getFlierPureHeight","lockX","isElementScrollableX","topOffset","leftOffset","onlyWhenNeeded","defaultFlierScroll","afterStepChanged","scrollOptions","isAutoScrolling","initScrollFlierTime","now","onFlierScrolledInView","getScrollTargetOptions","_this$targetBranch","firstScrollableChildFromClosestFixedParent","getFirstScrollableChildFromClosestFixedParent","scrollTargetIntoView","_this$stepItem4","_this$targetBranch2","defaultTargetScroll","containsScrollable","Promise","resolve","visualizeStepData","fireAfterStepChangeEvent","initScrollTime","willBeRefreshed","afterStepChange","getMinimalTooltipWidth","_this$radiusPaddingFi","_this$radiusPaddingFi2","minWidth","outerWidth","actualizeButtonsTextVisibility","hideText","buttonNoTextClass","noText","getMaximalTooltipWidth","vert","maxTooltipWidth","maxWidth","processFce","processImmediatelyWhenReady","actualizeTargetLock","deferred","processFceToRun","lockActualizeTarget","unlockActualizeTarget","fceBkp","tryUnlockActualizeTarget","processOnBeforeShowStep","onBeforeShowStepCallback","printDbgStepInfo","method","isFlierOnScreen","bbToTest","thresholdRatio","isBoundingBoxInsideContainer","finalizeFollowTarget","finalizeSoftRefresh","mode","startStepIdx","softRefreshTimer","regularStepChange","regular","placeTooltipInSoftRefresh","isInside","unknown","noData","async","doNotScroll","maxParentScrollTimeMs","scrollFlierIntoView","scrollOnlyWhenNeeded","calculateSpaceAroundFeature","maxScreenBB","isLeftOrRight","spaceAroundRatio","determineGoldenIncrement","spaceAroundFeature","isOverHeight","maxDocBB","closerToTargetBB","moveCloserToWinBorder","sign","range","modifyTooltipPosition","increment","tooltipMinWidth","bkpTooltipBB","newWidth","outerHeight","bkpTooltipHeight","bkpTooltipWidth","currentLeft","appliedIncrement","returnResult","wasPosAdjusted","dbgFailedReason","revertLastModificationAndReturn","lastTooltipInlineStyle","lastIsOverHeight","getInlineStyleOfElement","inlineStyle","initTooltipBB","maxWinBB","initIsOverHeight","lastTooltipBB","lastFeatureSpaceAround","featureSpaceAround","isBestPosFound","featureSpaceAroundDerivation","wasPositionChange","_lastIsOverHeight","_lastIsOverHeight2","_lastIsOverHeight3","isEqual","initBranch","initProcessData","closestFixedPosItem","fixedPosElements","scrollableElements","branchItems","distance","tagName","toLowerCase","getTargetItem","_this$fixedPosElement","containsFixedParent","_this$closestFixedPos","getClosestFixedParent","_this$closestFixedPos2","_this$closestFixedPos3","closestFixedPosItemIdx","distanceFromTarget","_this$stickyPosElemen","_this$scrollableEleme","animation","onIterateStep","onIterateStepInProgress","debugEn","isIterateStepInAction","hoverListeners","linkClickListener","processTargetLinkClick","iterateClickListener","iterateStepAfterUserAction","blockClickListener","updateIterateAfterClick","updateIterateAfterHover","updateLinkClick","clearIterateAfterClick","clearIterateAfterHover","clearTargetLinkClickAdjustment","moveLayer2TargetFce","insertDisableInteractionLayer","removeDisableInteractionLayer","disableInteraction","isBlockClicks","isIterateAfterClick","startTargetLinkClickAdjustment","allElementsToBlock","getParentsAndChildrenLinkElements","linkElement","hrefAttribute","isOpenTargetLinkClicksInNewTab","defaultPrevented","open","exception","error","blockClick","_this$stepItem$enable2","_this$stepItem$enable3","delay","iterate_after_click_delay_ms","defaultIterateAfterClick","isInteractionFeatureEnabled","featureId","isIterateAfterHover","hover","_this$stepItem$enable4","iterate_after_hover","_arrayLikeToArray","len","arr2","_unsupportedIterableToArray","o","minLen","n","prototype","slice","from"],"mappings":"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","file":"main/default-DpitBuilderCore-DpitBuilderCoreSticky-DpitCore-DpitCoreSticky-cd57f383.js","sourcesContent":["export default class DpitColor {\r\n\tconstructor(src) {\r\n\r\n\t\tif (src == null) { // eslint-disable-line no-eq-null,eqeqeq\r\n\t\t\tthis.rgbObj = {\r\n\t\t\t\tr: 0,\r\n\t\t\t\tg: 0,\r\n\t\t\t\tb: 0\r\n\t\t\t};\r\n\t\t} else if (src instanceof DpitColor) {\r\n\t\t\tthis.rgbObj = { ...src.rgbObj };\r\n\t\t} else if (typeof src === 'string') {\r\n\t\t\tif (src.startsWith('#')) {\r\n\t\t\t\tthis.rgbObj = DpitColor.hexStringToRgbObj(src);\r\n\t\t\t} else {\r\n\t\t\t\tthis.rgbObj = DpitColor.rgbStringToRgbObj(src);\r\n\t\t\t\tif (!this.rgbObj) {\r\n\t\t\t\t\tthrow new Error('Argument \"src\" isn\\'t valid');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (src) {\r\n\t\t\tthis.rgbObj = { ...src };\r\n\t\t}\r\n\t}\r\n\r\n\tstatic getRgbStringCommaSeparated(colorDefinition) {\r\n\t\tif (colorDefinition) {\r\n\t\t\ttry {\r\n\t\t\t\tconst colorObj = new DpitColor(colorDefinition);\r\n\t\t\t\treturn colorObj.toRgbStringCommaSeparated();\r\n\t\t\t}\r\n\t\t\tcatch {\r\n\t\t\t\treturn '';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tstatic fromRgb(r, g, b) {\r\n\t\treturn new DpitColor({ r, g, b });\r\n\t}\r\n\r\n\tstatic rgbStringToRgbObj(rgbString) {\r\n\t\tconst regex = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/;\r\n\t\tconst match = rgbString.match(regex);\r\n\t\tif (match) {\r\n\t\t\tconst r = parseInt(match[1], 10);\r\n\t\t\tconst g = parseInt(match[2], 10);\r\n\t\t\tconst b = parseInt(match[3], 10);\r\n\t\t\treturn { r, g, b };\r\n\t\t}\r\n\t\treturn null; // Invalid RGB string format\r\n\t}\r\n\r\n\tstatic hexStringToRgbObj(hex) {\r\n\t\t// Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\r\n\t\tvar shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n\t\thex = hex.replace(shorthandRegex, function (m, r, g, b) {\r\n\t\t\treturn r + r + g + g + b + b;\r\n\t\t});\r\n\r\n\t\tvar result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\t\treturn result ? {\r\n\t\t\tr: parseInt(result[1], 16),\r\n\t\t\tg: parseInt(result[2], 16),\r\n\t\t\tb: parseInt(result[3], 16)\r\n\t\t} : null;\r\n\t}\r\n\r\n\tcontrast(color2) {\r\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\r\n\t\tvar lum1 = this.luminosity();\r\n\t\tvar lum2 = color2.luminosity();\r\n\r\n\t\tif (lum1 > lum2) {\r\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\r\n\t\t}\r\n\r\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\r\n\t}\r\n\r\n\tluminosity() {\r\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\r\n\t\tvar lum = {};\r\n\t\tObject.keys(this.rgbObj).forEach(key => {\r\n\t\t\tvar chan = this.rgbObj[key] / 255;\r\n\t\t\tlum[key] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\r\n\t\t});\r\n\t\treturn 0.2126 * lum.r + 0.7152 * lum.g + 0.0722 * lum.b;\r\n\t}\r\n\r\n\tred() { return this.rgbObj.r; }\r\n\tgreen() { return this.rgbObj.g; }\r\n\tblue() { return this.rgbObj.b; }\r\n\tisDark() {\r\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\r\n\t\tvar yiq = (this.rgbObj.r * 299 + this.rgbObj.g * 587 + this.rgbObj.b * 114) / 1000;\r\n\t\treturn yiq < 128;\r\n\t}\r\n\r\n\tisLight() {\r\n\t\treturn !this.isDark();\r\n\t}\r\n\r\n\tmix(colorToMixIn, weight) {\r\n\r\n\t\tif (!(colorToMixIn instanceof DpitColor) || !colorToMixIn.rgbObj) {\r\n\t\t\tthrow new Error('Argument \"mixinColor\" isn\\'t a DpitColor instance, but rather an instance of ' + typeof colorToMixIn);\r\n\t\t}\r\n\t\tvar color1 = colorToMixIn;\r\n\t\tvar color2 = this;\r\n\t\tvar p = weight === undefined ? 0.5 : weight;\r\n\r\n\t\tvar w = 2 * p - 1;\r\n\t\tvar w1 = (w + 1) / 2.0;\r\n\t\tvar w2 = 1 - w1;\r\n\r\n\t\treturn DpitColor.fromRgb(\r\n\t\t\tMath.max(Math.min(255, Math.round(w1 * color1.red() + w2 * color2.red())), 1),\r\n\t\t\tMath.max(Math.min(255, Math.round(w1 * color1.green() + w2 * color2.green())), 1),\r\n\t\t\tMath.max(Math.min(255, Math.round(w1 * color1.blue() + w2 * color2.blue())), 1)\r\n\t\t);\r\n\t}\r\n\r\n\ttoRgbStringCommaSeparated() {\r\n\t\treturn `${this.red()}, ${this.green()}, ${this.blue()}`;\r\n\t}\r\n\r\n\tsetAsCssVariable(varName, element = document.documentElement) {\r\n\t\telement.style.setProperty(varName, this.toRgbStringCommaSeparated());\r\n\t}\r\n\r\n}\r\n","/**\r\n * @param {Element} element element to hide\r\n */\r\nexport const hideElement = (element, byOpacity = true, noSpace = false, noTransition = false) => {\r\n\tif (element) {\r\n\t\tlet transitionBkp = '';\r\n\t\tif (noTransition) {\r\n\t\t\ttransitionBkp = element.style.transition;\r\n\t\t\telement.style.transition = 'unset';\r\n\t\t}\r\n\r\n\t\telement.classList.add('dpit-hidden');\r\n\t\tif (!byOpacity) element.classList.add('dpit-hidden--by-disp');\r\n\t\tif (noSpace) element.classList.add('dpit-hidden--no-space');\r\n\r\n\t\tif (noTransition) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\telement.style.transition = transitionBkp;\r\n\t\t\t}, 50);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/**\r\n * @param {Element} element element to hide\r\n */\r\nexport const hideElementImmediately = (element, byOpacity = true, noSpace = false) => {\r\n\thideElement(element, byOpacity, noSpace, true);\r\n};\r\n\r\n/**\r\n * @param {Element} element element to hide\r\n */\r\nexport const showElement = (element) => {\r\n\tif (element) {\r\n\t\telement.classList.remove('dpit-hidden', 'dpit-hidden--no-space', 'dpit-hidden--by-disp', 'dpit-hidden-keep-events');\r\n\t}\r\n};","\r\nimport DpitColor from './DpitColor';\r\nexport default class DpitColorAnalyze {\r\n\tconstructor(config) {\r\n\t\tif (config.dpDebugEn) console.log('[dpit] INIT DpitColorAnalyze');\r\n\t}\r\n\t// contrast range: 1 - 21\r\n\tstatic getContrastColor(srcColor, preferWhiteText = true, colorRangeArray = ['#fff', '#252525'], fallBackContrastThreshold = 3, fallbackColor = '#222') {\r\n\t\tconst contrasts = [];\r\n\t\tconst srcColorObj = new DpitColor(srcColor);\r\n\t\tcolorRangeArray.forEach((color) => {\r\n\t\t\tconst colorObj = new DpitColor(color);\r\n\t\t\tcontrasts.push({\r\n\t\t\t\tcolor: colorObj,\r\n\t\t\t\tcontrast: srcColorObj.contrast(colorObj)\r\n\t\t\t});\r\n\t\t});\r\n\t\tif (contrasts.length) {\r\n\t\t\tif (preferWhiteText) contrasts[0].contrast *= 3.2;\r\n\t\t\telse contrasts[0].contrast *= 1.5;\r\n\t\t\tcontrasts.sort((a, b) => b.contrast - a.contrast);\r\n\t\t\t//console.log(contrasts.map((element) => element.contrast));\r\n\t\t\tif (contrasts[0].contrast < fallBackContrastThreshold) {\r\n\t\t\t\tconst fallbackColorObj = new DpitColor(fallbackColor);\r\n\t\t\t\tcontrasts.push({\r\n\t\t\t\t\tcolor: fallbackColorObj,\r\n\t\t\t\t\tcontrast: srcColorObj.contrast(fallbackColorObj)\r\n\t\t\t\t});\r\n\t\t\t\tcontrasts.sort((a, b) => b.contrast - a.contrast);\r\n\t\t\t}\r\n\t\t\treturn contrasts[0].color;\r\n\t\t}\r\n\t\treturn colorRangeArray && colorRangeArray[0]\r\n\t\t\t? new DpitColor(colorRangeArray[0])\r\n\t\t\t: new DpitColor(fallbackColor);\r\n\t}\r\n\r\n\tstatic getMostColor(dpitColors, rgbIdx /*r = red*, g = green, b = blue*/) {\r\n\t\tlet res = null;\r\n\t\tif (!Array.isArray(dpitColors)) {\r\n\t\t\tthrow new Error('Argument \"mixinColor\" isn\\'t a DpitColor instance, but rather an instance of ' + typeof colorToMixIn);\r\n\t\t}\r\n\t\tconst dpitColorsToSort = [...dpitColors];\r\n\t\tdpitColorsToSort.sort((a, b) => DpitColorAnalyze.compareColorsByRgbHue(rgbIdx, a, b));\r\n\t\tres = dpitColorsToSort[0];\r\n\r\n\t\treturn res;\r\n\t}\r\n\r\n\tstatic getRgbHueFeature = (rgbIdx, color) => {\r\n\t\tswitch (rgbIdx) {\r\n\t\t\tcase 'r': return color.red() + (color.red() - color.green()) + (color.red() - color.blue());\r\n\t\t\tcase 'g': return color.green() + (color.green() - color.red()) + (color.green() - color.blue());\r\n\t\t\tcase 'b': return color.blue() + (color.blue() - color.red()) + (color.blue() - color.green());\r\n\t\t}\r\n\t};\r\n\r\n\tstatic getRgbHueAdjustedColor = (rgbKey, color) => {\r\n\t\tconst addVal = 100;\r\n\t\tswitch (rgbKey) {\r\n\t\t\tcase 'r': return DpitColor.fromRgb(Math.min(color.red() + addVal, 255), Math.max(color.green() - addVal, 0), Math.max(color.blue() - addVal, 0));\r\n\t\t\tcase 'g': return DpitColor.fromRgb(Math.max(color.red() - addVal, 0), Math.min(color.green() + addVal, 255), Math.max(color.blue() - addVal, 0));\r\n\t\t\tcase 'b': return DpitColor.fromRgb(Math.max(color.red() - addVal, 0), Math.max(color.green() - addVal, 0), Math.min(color.blue() + addVal, 255));\r\n\t\t}\r\n\t};\r\n\r\n\tstatic compareColorsByRgbHue = (rgbKey, a, b) => {\r\n\t\treturn DpitColorAnalyze.getRgbHueFeature(rgbKey, b) - DpitColorAnalyze.getRgbHueFeature(rgbKey, a);\r\n\t};\r\n}","import classNames from 'classnames';\r\n\r\nexport default class BulletsAnimation {\r\n\t/**\r\n\t * Insert animation and highlight class to the element specified by rootSelectorOrElement\r\n\t * @param {Element|String} rootSelectorOrElement\r\n\t * @param {Array|String} additionalClasses\r\n\t * @param {string} removeHighlightClickChildSelector\r\n\t * @param {Number} tickMs\r\n\t * @param {Int} totalSize \r\n\t * @param {Int} visibleSize \r\n\t * @param {Int} activeSize \r\n\t * @param {Bool} symmetrical \r\n\t * @param {string} id\r\n\t * @param {string} activeBulletClass\r\n\t */\r\n\tconstructor(rootSelectorOrElement, additionalClasses = '', tickMs = 70, totalSize = 15, visibleSize = 6, activeSize = 4, symmetrical = true, id = '', activeBulletClass = 'dpit-on') {\r\n\r\n\t\tthis.rootSelectorOrElement = rootSelectorOrElement;\r\n\t\tthis.bemRoot = 'dpit-anim-rb';\r\n\t\tthis.additionalClasses = classNames([additionalClasses, 'dpit-anim-rb']);\r\n\t\tthis.inactiveClass = BulletsAnimation.getModifiedClass(this.bemRoot, 'off');\r\n\t\tthis.activeClass = activeBulletClass;\r\n\t\tthis.id = id;\r\n\t\tthis.visibleSize = visibleSize;\r\n\t\tthis.totalSize = totalSize;\r\n\t\tthis.tickMs = tickMs;\r\n\t\tthis.activeSize = activeSize;\r\n\t\tthis.activeHalfSize = Math.floor(activeSize / 2);\r\n\t\tthis.symmetrical = symmetrical;\r\n\t}\r\n\r\n\tgetRootElement() {\r\n\t\treturn this.rootSelectorOrElement instanceof HTMLElement\r\n\t\t\t? this.rootSelectorOrElement\r\n\t\t\t: document.querySelector(this.rootSelectorOrElement);\r\n\t}\r\n\r\n\tstatic getModifiedClass(bemRoot, modifier) {\r\n\t\tlet res = '';\r\n\t\tif (bemRoot) res = bemRoot + '--';\r\n\t\tres += modifier;\r\n\t\treturn res;\r\n\t}\r\n\r\n\tstart(backward = false, loops = -1, loopsPassedCb = null) {\r\n\t\tthis.backward = backward;\r\n\t\tthis.rootElement = this.getRootElement();\r\n\t\tif (this.rootElement) {\r\n\t\t\tthis.rootElement.focus({ preventScroll: true });\r\n\t\t\tthis.isRunning = true;\r\n\t\t\tif (!this.bulletsLayer) {\r\n\t\t\t\tthis.createBullets(this.visibleSize, this.rootElement);\r\n\t\t\t} else {\r\n\t\t\t\tthis.bulletsLayer.classList.remove(this.inactiveClass);\r\n\t\t\t}\r\n\r\n\t\t\tif (backward) this.startReloadingSpinnerBack(loops, loopsPassedCb);\r\n\t\t\telse this.startReloadingSpinner(loops, loopsPassedCb);\r\n\t\t}\r\n\t}\r\n\r\n\tgetLoopTimeMs() {\r\n\t\treturn this.totalSize * this.tickMs;\r\n\t}\r\n\r\n\tcreateBullets(count, rootElement) {\r\n\r\n\t\tthis.bulletsLayer = document.createElement('div');\r\n\t\tthis.bulletsLayer.className = classNames([this.bemRoot, this.additionalClasses]);\r\n\t\tthis.bulletsLayer.setAttribute('aria-hidden', 'true');\r\n\t\tthis.bulletsLayer.id = this.id;\r\n\t\tthis.bulletsLayer.style.opacity = 0;\r\n\t\tthis.bulletsLayer.style.display = 'block';\r\n\t\tthis.bulletElements = [];\r\n\t\tconst containerEl = document.createElement('div');\r\n\t\tcontainerEl.classList.add(this.bemRoot + '__wrap');\r\n\t\tfor (let i = 0; i < count; i++) {\r\n\t\t\tconst bulletEl = document.createElement('div');\r\n\t\t\tthis.bulletElements.push(bulletEl);\r\n\t\t\tcontainerEl.appendChild(bulletEl);\r\n\t\t}\r\n\t\tthis.bulletsLayer.appendChild(containerEl);\r\n\t\tthis.bulletsLayer.style.opacity = 1;\r\n\t\trootElement.appendChild(this.bulletsLayer);\r\n\t}\r\n\r\n\r\n\r\n\tactivateBullet(activeIdx) {\r\n\t\tthis.bulletElements.forEach((element, idx) => {\r\n\t\t\tlet className = '';\r\n\t\t\tconst distanceFromActive = activeIdx - idx;\r\n\t\t\tif (distanceFromActive === 0) {\r\n\t\t\t\tclassName = this.activeClass;\r\n\t\t\t} else {\r\n\t\t\t\tconst distanceFromActiveAbs = Math.abs(distanceFromActive);\r\n\t\t\t\tif (this.symmetrical) {\r\n\t\t\t\t\tif (distanceFromActiveAbs <= this.activeHalfSize) {\r\n\t\t\t\t\t\tclassName = this.activeClass + '--' + distanceFromActiveAbs;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (distanceFromActiveAbs < this.activeSize) {\r\n\t\t\t\t\tif (distanceFromActive > 0 && !this.backward) {\r\n\t\t\t\t\t\tclassName = this.activeClass + '--' + distanceFromActiveAbs;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (distanceFromActive < 0 && this.backward) {\r\n\t\t\t\t\t\tclassName = this.activeClass + '--' + distanceFromActiveAbs;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telement.className = className;\r\n\t\t});\r\n\t}\r\n\r\n\tstopAfterLoopEnd(loopEndCallback = null) {\r\n\t\tthis.finishAfterLoopEnd = true;\r\n\t\tthis.finishAfterLoopEndCallback = loopEndCallback;\r\n\t}\r\n\r\n\tstop() {\r\n\t\tthis.bulletsLayer?.classList.add(this.inactiveClass);\r\n\t\tthis.clearBulletActiveStates();\r\n\t\tthis.stopReloadSpinner();\r\n\t\tthis.rootElement?.blur();\r\n\t}\r\n\r\n\tclearBulletActiveStates() {\r\n\t\tthis.bulletElements?.forEach(element => {\r\n\t\t\telement.className = '';\r\n\t\t});\r\n\t}\r\n\r\n\tstopReloadSpinner() {\r\n\t\tif (this.spinnerInterval) clearInterval(this.spinnerInterval);\r\n\t\tthis.spinnerInterval = null;\r\n\t\tthis.isRunning = false;\r\n\t}\r\n\r\n\tstartReloadingSpinner(loops, loopsPassedCb) {\r\n\t\tlet idx = this.symmetrical ? - this.activeHalfSize : 0;\r\n\t\tif (this.spinnerInterval) clearInterval(this.spinnerInterval);\r\n\t\tif (this.bulletHideTimeout) clearTimeout(this.bulletHideTimeout);\r\n\t\tthis.spinnerInterval = setInterval(() => {\r\n\t\t\tthis.activateBullet(idx, idx - 1);\r\n\t\t\tidx++;\r\n\t\t\tif (idx > this.totalSize) {\r\n\t\t\t\tidx = this.symmetrical ? - this.activeHalfSize : 0;\r\n\t\t\t\tthis.checkAfterLoopEnd();\r\n\t\t\t\tif (loops > 0) {\r\n\t\t\t\t\tloops = this.finishLoop(loops, loopsPassedCb);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}, this.tickMs);\r\n\t}\r\n\r\n\tstartReloadingSpinnerBack(loops, loopsPassedCb) {\r\n\t\tif (this.spinnerInterval) clearInterval(this.spinnerInterval);\r\n\t\tif (this.bulletHideTimeout) clearTimeout(this.bulletHideTimeout);\r\n\t\tlet idx = this.symmetrical ? this.visibleSize + this.activeHalfSize : this.visibleSize;\r\n\t\tthis.spinnerInterval = setInterval(() => {\r\n\t\t\tthis.activateBullet(idx);\r\n\t\t\tidx--;\r\n\t\t\tif (idx < this.visibleSize - this.totalSize) {\r\n\t\t\t\tidx = this.symmetrical ? this.visibleSize + this.activeHalfSize : this.visibleSize;\r\n\t\t\t\tthis.checkAfterLoopEnd();\r\n\t\t\t\tif (loops > 0) {\r\n\t\t\t\t\tloops = this.finishLoop(loops, loopsPassedCb);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}, this.tickMs);\r\n\t}\r\n\r\n\tcheckAfterLoopEnd() {\r\n\t\tif (this.finishAfterLoopEnd) {\r\n\t\t\tthis.finishAfterLoopEnd = false;\r\n\t\t\tthis.stop();\r\n\t\t\tif (this.finishAfterLoopEndCallback instanceof Function) this.finishAfterLoopEndCallback();\r\n\t\t\tthis.finishAfterLoopEndCallback = null;\r\n\t\t}\r\n\t}\r\n\r\n\tfinishLoop(loops, loopsPassedCb) {\r\n\t\tif (loops > 0) {\r\n\t\t\tloops--;\r\n\t\t\tif (loops === 0) {\r\n\t\t\t\tthis.stop();\r\n\t\t\t\tif (loopsPassedCb && loopsPassedCb instanceof Function) loopsPassedCb();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn loops;\r\n\t}\r\n\r\n}\r\n","\r\nexport default class EventListeners {\r\n\tconstructor() {\r\n\t\tthis.listeners = {};\r\n\t}\r\n\r\n\t/**\r\n\t * If not eventId set, generate generic ID\r\n\t * @param {string} type event type key\r\n\t * @param {string} eventId event id\r\n\t */\r\n\tgetEventId(type, eventId = null) {\r\n\t\treturn eventId ?? type + (new Date()).getTime() + Math.random().toString(36);\r\n\t}\r\n\t/**\r\n\t * Subscribe event on element and store data for unsubscribe\r\n\t *\r\n\t * @param {Element} element element where event occurs\r\n\t * @param {string} type event type key\r\n\t * @param {Function} functionRef to run while event occurs\r\n\t * @param {string} eventId event id\r\n\t */\r\n\tadd(element, type, functionRef, eventId = null) {\r\n\t\tif (element && type && functionRef) {\r\n\t\t\tthis.listeners[this.getEventId(type, eventId)] = {\r\n\t\t\t\ttype: type,\r\n\t\t\t\tfunctionRef: functionRef,\r\n\t\t\t\telement: element,\r\n\t\t\t};\r\n\t\t\telement.addEventListener(type, functionRef);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Unsubscribe event on element and delete stored data\r\n\t * @param {string} eventId event id\r\n\t*/\r\n\tremove(eventId) {\r\n\t\tif (this.listeners[eventId] && this.listeners[eventId]) {\r\n\t\t\tconst { element, type, functionRef } = this.listeners[eventId];\r\n\t\t\tif (element && type && functionRef) {\r\n\t\t\t\telement.removeEventListener(type, functionRef);\r\n\t\t\t\tdelete this.listeners[eventId];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Unsubscribe all stored events and delete stored data\r\n\t*/\r\n\tremoveAll() {\r\n\t\tObject.keys(this.listeners).forEach(eventId => {\r\n\t\t\tthis.remove(eventId);\r\n\t\t});\r\n\t}\r\n}","import { getParentsLinkElements } from '../dpitUtilsPublic';\r\nimport EventListeners from './EventListeners';\r\n\r\nexport default class ExclusiveClickListener {\r\n\t/**\r\n\t * Init module for adjusting a click events, so only first event is captured and rest possibly registered events are suppressed \r\n\t *\r\n\t * @param {Function} functionRef to run while event occurs\r\n\t * @param {Boolean} stopPropagationEnabled should be propagation of click events stopped\r\n\t * @param {Boolean} leftButtonOnly only left mouse button is captured\r\n\t */\r\n\tconstructor(functionRef, stopPropagationEnabled = true, disableAllPointerEvents = true, suppressParentsLinkElements = false, excludeTargetBlank = false, leftButtonOnly = true) {\r\n\t\tthis.data = [];\r\n\t\tthis.noEventTimeoutAfterVeryFirstClickMs = 1000;\r\n\t\tthis.stopPropagationEnabled = stopPropagationEnabled;\r\n\t\tthis.leftButtonOnly = leftButtonOnly;\r\n\t\tthis.excludeTargetBlank = excludeTargetBlank;\r\n\t\tthis.disableAllPointerEvents = disableAllPointerEvents;\r\n\t\tthis.suppressParentsLinkElements = suppressParentsLinkElements;\r\n\t\tthis.listeners = new EventListeners();\r\n\t\tthis.functionRef = functionRef;\r\n\t}\r\n\t/**\r\n\t * Subscribe element click events so only first event is captured and rest possibly registered events are suppressed \r\n\t *\r\n\t * @param {HTMLCollection|Array} elements element or elements, where subscribe exclusive click\r\n\t*/\r\n\taddElements(elements) {\r\n\t\tif (elements) {\r\n\t\t\telements.forEach((element) => this.addElement(element));\r\n\t\t}\r\n\t}\r\n\r\n\taddElement(element) {\r\n\t\tif (element) {\r\n\t\t\tconst dataItem = {\r\n\t\t\t\telement: element,\r\n\t\t\t\tnoEventsData: null\r\n\t\t\t};\r\n\t\t\tthis.data.push = dataItem;\r\n\t\t\tthis.listeners.add(element, 'mousedown', (event) => this.handleVeryFirstClickEvent(event, dataItem));\r\n\t\t\tthis.listeners.add(element, 'touchstart', (event) => this.handleVeryFirstClickEvent(event, dataItem));\r\n\t\t\tthis.listeners.add(element, 'click', (event) => this.handleFollowingClickEvents(event, dataItem));\r\n\t\t\tthis.listeners.add(element, 'mouseup', (event) => this.handleFollowingClickEvents(event, dataItem));\r\n\t\t\tthis.listeners.add(element, 'touchend', (event) => this.handleFollowingClickEvents(event, dataItem));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Unsubscribe all subscribed events and clear pointer-events modification\r\n\t * @param {Element} element element to unsubscribe\r\n\t*/\r\n\tclear(immediate = false) {\r\n\r\n\t\tif (immediate) {\r\n\t\t\tthis.data.forEach(this.clearNoEvents.bind(this));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tconst dataBkp = [...this.data];\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tdataBkp.forEach(this.clearNoEvents.bind(this));\r\n\t\t\t}, this.noEventTimeoutAfterVeryFirstClickMs);\r\n\t\t}\r\n\r\n\t\tthis.data = [];\r\n\t\tthis.listeners.removeAll();\r\n\t}\r\n\r\n\tactivateAfterClear() {\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.clear(true);\r\n\t\t}, this.noEventTimeoutAfterVeryFirstClickMs);\r\n\t}\r\n\r\n\tisLeftClickEvent(event) {\r\n\t\tif (!this.leftButtonOnly) return true;\r\n\t\treturn event.button === 0;\r\n\t}\r\n\r\n\thandleVeryFirstClickEvent(event, dataItem) {\r\n\t\tlet res = true;\r\n\t\tif (this.isLeftClickEvent(event)) {\r\n\t\t\tres = false;\r\n\t\t\t//console.log('handleFollowingClickEvents sssssssssssssssssssssssssssssssssssssssssssssssssssssss', event.type, event);\r\n\t\t\tif (this.functionRef instanceof Function) {\r\n\t\t\t\tres = this.functionRef(event, dataItem.element);\r\n\t\t\t}\r\n\t\t\tif (!res) {\r\n\t\t\t\tif (this.stopPropagationEnabled) event.stopImmediatePropagation();\r\n\t\t\t\tthis.activateNoEvents(dataItem);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\thandleFollowingClickEvents(event, dataItem) {\r\n\t\t//console.log('handleFollowingClickEvents sssssssssssssssssssssssssssssssssssssssssssssssssssssss', event.type, event);\r\n\t\tif (this.isLeftClickEvent(event)) {\r\n\t\t\tif (event.type === 'click') event.preventDefault();\r\n\t\t\tif (this.stopPropagationEnabled) {\r\n\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t}\r\n\t\t\tthis.activateNoEvents(dataItem);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tstartNoEventTimeout(dataItem, onCleared) {\r\n\t\tif (dataItem.noEventsTimeout) clearTimeout(dataItem.noEventsTimeout);\r\n\t\tdataItem.noEventsTimeout = setTimeout(() => {\r\n\t\t\tthis.clearNoEvents(dataItem);\r\n\t\t\tif (onCleared instanceof Function) onCleared(dataItem.element);\r\n\t\t}, this.noEventTimeoutAfterVeryFirstClickMs);\r\n\t}\r\n\r\n\tactivateNoEvents(dataItem) {\r\n\t\tif (this.disableAllPointerEvents) {\r\n\t\t\tif (!dataItem.noEventsData) {\r\n\t\t\t\tlet noEventElements = [dataItem.element];\r\n\t\t\t\tif (this.suppressParentsLinkElements) {\r\n\t\t\t\t\tnoEventElements = getParentsLinkElements(dataItem.element, true, this.excludeTargetBlank);\r\n\t\t\t\t}\r\n\t\t\t\tnoEventElements.forEach((element) => this.addElementNoEvents(dataItem, element));\r\n\t\t\t\tthis.startNoEventTimeout(dataItem);\r\n\t\t\t} else {\r\n\t\t\t\tthis.startNoEventTimeout(dataItem);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\taddElementNoEvents(dataItem, element) {\r\n\t\tif (dataItem && element) {\r\n\t\t\tconst pointerEventsProp = element.style.getPropertyValue('pointer-events');\r\n\t\t\telement.style.setProperty('pointer-events', 'none', 'important');\r\n\t\t\tif (!dataItem.noEventsData) dataItem.noEventsData = [];\r\n\t\t\tdataItem.noEventsData.push({\r\n\t\t\t\telement,\r\n\t\t\t\tpointerEventsBkp: pointerEventsProp\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tclearNoEvents(dataItem) {\r\n\t\tif (dataItem.noEventsData) {\r\n\t\t\tdataItem.noEventsData.forEach(this.clearNoEventsOnNoEventsItem.bind(this));\r\n\t\t\tif (dataItem.noEventsTimeout) clearTimeout(dataItem.noEventsTimeout);\r\n\t\t\tdataItem.noEventsTimeout = null;\r\n\t\t}\r\n\t\tdataItem.noEventsData = null;\r\n\t}\r\n\r\n\tclearNoEventsOnNoEventsItem(noEventsDataItem) {\r\n\t\tif (noEventsDataItem?.element) {\r\n\t\t\tif (noEventsDataItem.pointerEventsBkp) {\r\n\t\t\t\tnoEventsDataItem.element.style.setProperty('pointer-events', noEventsDataItem.pointerEventsBkp);\r\n\t\t\t}\r\n\t\t\telse noEventsDataItem.element.style.removeProperty('pointer-events');\r\n\t\t}\r\n\t}\r\n\r\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import { CLASSES_CORE } from './constants';\r\n\r\nexport default class DpitTarget {\r\n\r\n\t/**\r\n\t * Initialize target object\r\n\t *\r\n\t * @param {Element} element\r\n\t*/\r\n\tconstructor(element) {\r\n\t\tthis.element = element;\r\n\t\tconst computedStyle = getComputedStyle(element);\r\n\t\tconst cssPosition = computedStyle.getPropertyValue('position');\r\n\t\tthis.analysis = {\r\n\t\t\tisSticky: cssPosition === 'sticky',\r\n\t\t\tisFixed: cssPosition === 'fixed',\r\n\t\t\thasAltPosition: ['fixed', 'sticky', 'absolute'].includes(cssPosition),\r\n\t\t\t//isSvg: element.tagName.toLowerCase() === 'svg',\r\n\t\t};\r\n\t}\r\n\r\n\tprocess() {\r\n\t\tthis.attrsBkp = {};\r\n\t\tthis.element.classList.add(CLASSES_CORE.target);\r\n\t\tif (this.analysis.hasAltPosition) {\r\n\t\t\tthis.addClassSafe(CLASSES_CORE.relativePosition);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tdestroy() {\r\n\t\tthis.element.classList.remove(CLASSES_CORE.target);\r\n\t\tthis.removeClassSafe(CLASSES_CORE.relativePosition);\r\n\t}\r\n\r\n\r\n\taddClassSafe = (className) => {\r\n\t\tif (!this.element.classList.contains(className)) {\r\n\t\t\tconst $element = $(this.element);\r\n\t\t\tconst beforeOffset = $element.offset();\r\n\t\t\tthis.element.classList.add(className);\r\n\t\t\tconst afterOffset = $element.offset();\r\n\r\n\t\t\tlet setOffset = false;\r\n\t\t\tif (Math.abs(afterOffset.top - beforeOffset.top) > 1) {\r\n\t\t\t\tthis.attrsBkp.top = this.element.style.top;\r\n\t\t\t\tsetOffset = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (Math.abs(afterOffset.left - beforeOffset.left) > 1) {\r\n\t\t\t\tthis.attrsBkp.left = this.element.style.left;\r\n\t\t\t\tsetOffset = true;\r\n\t\t\t}\r\n\t\t\tif (setOffset) {\r\n\t\t\t\t$element.offset(beforeOffset);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tremoveClassSafe(className) {\r\n\t\tif (this.element.classList.contains(className)) {\r\n\t\t\tthis.element.classList.remove(className);\r\n\t\t}\r\n\t\tif (this.attrsBkp) {\r\n\t\t\tObject.keys(this.attrsBkp).forEach(propName => {\r\n\t\t\t\tthis.element.setAttribute(propName, this.attrsBkp[propName]);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}","\r\nconst ClassName = {\r\n\tSENTINEL: 'sticky-events--sentinel',\r\n\tSENTINEL_TOP: 'sticky-events--sentinel-top',\r\n\tSENTINEL_BOTTOM: 'sticky-events--sentinel-bottom',\r\n};\r\n\r\n\r\n// DpitStickyEvents class\r\n\r\nexport default class DpitStickyEvents {\r\n\t/**\r\n\t * Initialize a set of sticky elements with events\r\n\t *\r\n\t * @param {Element|Document} container\r\n\t * @param {boolean} enabled\r\n\t * @param {string} stickySelector\r\n\t */\r\n\r\n\tconstructor({ container = document, enabled = true } = {}) {\r\n\t\tthis.container = container;\r\n\t\tthis.observers = {};\r\n\t\tthis.stickyElements = [];\r\n\t\tthis.state = new Map();\r\n\t\tthis.headerSentinels = new Map();\r\n\t\tthis.footerSentinels = new Map();\r\n\r\n\t\tif (enabled) {\r\n\t\t\tthis.enableEvents();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Initialize the state for a sticky:\r\n\t * 1. Default isSticky to false\r\n\t * 2. Create and observe a header sentinel\r\n\t * 3. Create and observe a footer sentinel\r\n\t *\r\n\t * @param {HTMLElement|Node} sticky\r\n\t */\r\n\r\n\tsetState(sticky) {\r\n\t\tif (this.state.get(sticky)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst headerSentinel = this.addSentinel(sticky, ClassName.SENTINEL_TOP);\r\n\t\tthis.headerSentinels.set(headerSentinel, sticky);\r\n\r\n\t\tconst footerSentinel = this.addSentinel(sticky, ClassName.SENTINEL_BOTTOM);\r\n\t\tthis.footerSentinels.set(footerSentinel, sticky);\r\n\r\n\t\tthis.state.set(sticky, {\r\n\t\t\tisSticky: false,\r\n\t\t\theaderSentinel: headerSentinel,\r\n\t\t\tfooterSentinel: footerSentinel,\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Initialize the intersection observers on `.sticky` elements within the specified container.\r\n\t * Container defaults to `document`.\r\n\t */\r\n\r\n\tenableEvents() {\r\n\t\tif (window.self !== window.top) {\r\n\t\t\tconsole.warn('StickyEvents: There are issues with using IntersectionObservers in an iframe, canceling initialization. Please see https://github.com/w3c/IntersectionObserver/issues/183');\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Create IntersectionObservers for header and footer sentinels\r\n\r\n\t\tthis.observers = {\r\n\t\t\theader: this.createHeaderObserver(),\r\n\t\t\tfooter: this.createFooterObserver(),\r\n\t\t};\r\n\r\n\t\t// Then, initialize the sticky's state\r\n\r\n\t\tthis.stickyElements.forEach((sticky) => {\r\n\t\t\tthis.setState(sticky);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Reset the DOM to it's pre-sticky state.\r\n\t * 1. (Optionally) Fire a sticky-unstuck event on all stickies to reset them to their original unstuck state\r\n\t * 2. Disconnect and remove IntersectionObservers\r\n\t * 3. Clear out the global state\r\n\t *\r\n\t * @param {boolean} resetStickies\r\n\t */\r\n\r\n\tdisableEvents(resetStickies = true) {\r\n\t\tif (resetStickies) {\r\n\t\t\tthis.stickyElements.forEach(sticky => this.fire(false, sticky));\r\n\t\t}\r\n\r\n\t\tObject.values(this.observers).forEach(observer => observer.disconnect());\r\n\r\n\t\tthis.observers = null;\r\n\r\n\t\tthis.state.clear();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Add a list of stickies to the existing set\r\n\t *\r\n\t * @param {NodeList} stickies\r\n\t */\r\n\r\n\taddStickies(stickies) {\r\n\t\tthis.stickyElements.push(...stickies);\r\n\t\tthis.stickyElements.forEach(sticky => this.setState(sticky));\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Add a single sticky to the existing set\r\n\t *\r\n\t * @param {Node} sticky\r\n\t */\r\n\r\n\taddSticky(sticky) {\r\n\t\tthis.stickyElements.push(sticky);\r\n\t\tthis.setState(sticky);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Create and observe a sentinel for given sticky. Type of sentinel is determined by className.\r\n\t *\r\n\t * @param {HTMLElement} sticky\r\n\t * @param {string} className\r\n\t * @returns {Element}\r\n\t */\r\n\r\n\taddSentinel(sticky, className) {\r\n\t\tconst sentinel = document.createElement('div');\r\n\t\tconst stickyParent = sticky.parentElement;\r\n\r\n\t\t// Apply styles to the sticky element\r\n\r\n\t\tsticky.style.cssText = `\r\n\t\tposition: -webkit-sticky;\r\n\t\tposition: sticky;\r\n\t `;\r\n\r\n\t\t// Apply default sentinel styles\r\n\r\n\t\tsentinel.classList.add(ClassName.SENTINEL, className);\r\n\r\n\t\tObject.assign(sentinel.style, {\r\n\t\t\tleft: 0,\r\n\t\t\tposition: 'absolute',\r\n\t\t\tright: 0,\r\n\t\t\tvisibility: 'hidden',\r\n\t\t});\r\n\r\n\t\tswitch (className) {\r\n\t\t\tcase ClassName.SENTINEL_TOP: {\r\n\t\t\t\tstickyParent.insertBefore(sentinel, sticky);\r\n\r\n\t\t\t\t// Apply styles specific to the top sentinel\r\n\r\n\t\t\t\tObject.assign(\r\n\t\t\t\t\tsentinel.style,\r\n\t\t\t\t\tthis.getSentinelPosition(sticky, sentinel, className),\r\n\t\t\t\t\t{ position: 'relative' },\r\n\t\t\t\t);\r\n\r\n\t\t\t\t// Observe the sentinel\r\n\r\n\t\t\t\tthis.observers.header.observe(sentinel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tcase ClassName.SENTINEL_BOTTOM: {\r\n\t\t\t\tstickyParent.appendChild(sentinel);\r\n\r\n\t\t\t\t// Apply styles specific to the bottom sentinel\r\n\r\n\t\t\t\tObject.assign(sentinel.style, this.getSentinelPosition(sticky, sentinel, className));\r\n\r\n\t\t\t\t// Observe the sentinel\r\n\r\n\t\t\t\tthis.observers.footer.observe(sentinel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn sentinel;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets up an intersection observer to notify `document` when elements with the `ClassName.SENTINEL_TOP` become\r\n\t * visible/hidden at the top of the sticky container.\r\n\t *\r\n\t * @returns {IntersectionObserver}\r\n\t */\r\n\r\n\tcreateHeaderObserver() {\r\n\t\treturn new IntersectionObserver(([record]) => {\r\n\t\t\tconst { boundingClientRect, isIntersecting, rootBounds } = record;\r\n\t\t\tconst stickyParent = record.target.parentElement;\r\n\t\t\tconst stickyTarget = this.headerSentinels.get(record.target);\r\n\r\n\t\t\tstickyParent.style.position = 'relative';\r\n\r\n\t\t\tif (boundingClientRect.bottom < rootBounds.bottom && isIntersecting) {\r\n\t\t\t\tthis.fire(false, stickyTarget, DpitStickyEvents.POSITION_TOP);\r\n\t\t\t}\r\n\r\n\t\t\telse if (boundingClientRect.bottom <= rootBounds.top && !isIntersecting) {\r\n\t\t\t\tthis.fire(true, stickyTarget, DpitStickyEvents.POSITION_TOP);\r\n\t\t\t}\r\n\t\t}, Object.assign({\r\n\t\t\tthreshold: 0,\r\n\t\t}, !(this.container instanceof HTMLDocument) && {\r\n\t\t\troot: this.container\r\n\t\t}));\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets up an intersection observer to notify `document` when elements with the `ClassName.SENTINEL_BOTTOM` become\r\n\t * visible/hidden at the bottom of the sticky container.\r\n\t *\r\n\t * @returns {IntersectionObserver}\r\n\t */\r\n\r\n\tcreateFooterObserver() {\r\n\t\treturn new IntersectionObserver(([record]) => {\r\n\t\t\tconst { boundingClientRect, isIntersecting, rootBounds } = record;\r\n\t\t\tconst stickyTarget = this.footerSentinels.get(record.target);\r\n\t\t\tif (boundingClientRect.top < rootBounds.top && boundingClientRect.bottom < rootBounds.bottom && !isIntersecting) {\r\n\t\t\t\tthis.fire(false, stickyTarget, DpitStickyEvents.POSITION_BOTTOM);\r\n\t\t\t}\r\n\r\n\t\t\telse if (boundingClientRect.bottom > rootBounds.top && this.isSticking(stickyTarget) && isIntersecting) {\r\n\t\t\t\tthis.fire(true, stickyTarget, DpitStickyEvents.POSITION_BOTTOM);\r\n\t\t\t}\r\n\t\t}, Object.assign({\r\n\t\t\tthreshold: 1,\r\n\t\t}, !(this.container instanceof HTMLDocument) && {\r\n\t\t\troot: this.container\r\n\t\t}));\r\n\t}\r\n\r\n\r\n\r\n\r\n\t/**\r\n\t * Dispatch the following events:\r\n\t * - `sticky-change`\r\n\t * - `sticky-stuck` or `sticky-unstuck`\r\n\t *\r\n\t * @param {Boolean} isSticky\r\n\t * @param {Element} stickyTarget\r\n\t * @param {DpitStickyEvents.POSITION_BOTTOM|DpitStickyEvents.POSITION_TOP} position\r\n\t */\r\n\r\n\tfire(isSticky, stickyTarget, position) {\r\n\t\tif (!stickyTarget) return;\r\n\t\tconst { isSticky: previouslySticky } = this.state.get(stickyTarget);\r\n\r\n\t\t// Don't fire any events if the new state is the same as the previous state\r\n\r\n\t\tif (previouslySticky === isSticky) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Update the sticky state\r\n\r\n\t\tthis.state.set(stickyTarget, { isSticky });\r\n\r\n\t\t// Fire some events if the state is changing\r\n\r\n\t\tstickyTarget.dispatchEvent(new CustomEvent(DpitStickyEvents.CHANGE, { detail: { isSticky, position }, bubbles: true }));\r\n\t\tstickyTarget.dispatchEvent(new CustomEvent(isSticky ? DpitStickyEvents.STUCK : DpitStickyEvents.UNSTUCK, { detail: { isSticky, position }, bubbles: true }));\r\n\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Determine the position of the sentinel\r\n\t *\r\n\t * @param {Element|Node} stickyElement\r\n\t * @param {Element|Node} sentinel\r\n\t * @param {String} className\r\n\t * @returns {Object}\r\n\t */\r\n\r\n\tgetSentinelPosition(stickyElement, sentinel, className) {\r\n\t\tconst stickyStyle = window.getComputedStyle(stickyElement);\r\n\t\tconst parentStyle = window.getComputedStyle(stickyElement.parentElement);\r\n\r\n\t\tswitch (className) {\r\n\t\t\tcase ClassName.SENTINEL_TOP:\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttop: `calc(${stickyStyle.getPropertyValue('top')} * -1)`,\r\n\t\t\t\t\theight: 1,\r\n\t\t\t\t};\r\n\r\n\t\t\tcase ClassName.SENTINEL_BOTTOM: {\r\n\t\t\t\tconst parentPadding = parseInt(parentStyle.paddingTop);\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tbottom: stickyStyle.top,\r\n\t\t\t\t\theight: `${stickyElement.getBoundingClientRect().height + parentPadding}px`,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Determine if the sticky element is currently sticking in the browser\r\n\t *\r\n\t * @param {Element} stickyElement\r\n\t * @returns {boolean}\r\n\t */\r\n\r\n\tisSticking(stickyElement) {\r\n\t\tif (!stickyElement) return false;\r\n\t\tconst topSentinel = stickyElement.previousElementSibling;\r\n\r\n\t\tconst stickyOffset = stickyElement.getBoundingClientRect().top;\r\n\t\tconst topSentinelOffset = topSentinel.getBoundingClientRect().top;\r\n\t\tconst difference = Math.round(Math.abs(stickyOffset - topSentinelOffset));\r\n\r\n\t\tconst topSentinelTopPosition = Math.abs(parseInt(window.getComputedStyle(topSentinel).getPropertyValue('top')));\r\n\r\n\t\treturn difference !== topSentinelTopPosition;\r\n\t}\r\n\r\n\r\n\tisSomeSticky() {\r\n\t\tlet res = false;\r\n\t\tthis.state.forEach((value) => {\r\n\t\t\tif (value.isSticky) {\r\n\t\t\t\tres = true;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn res;\r\n\t}\r\n}\r\n\r\n// Events\r\n\r\nDpitStickyEvents.CHANGE = 'sticky-change';\r\nDpitStickyEvents.STUCK = 'sticky-stuck';\r\nDpitStickyEvents.UNSTUCK = 'sticky-unstuck';\r\n\r\n// Position\r\n\r\nDpitStickyEvents.POSITION_BOTTOM = 'bottom';\r\nDpitStickyEvents.POSITION_TOP = 'top';","\r\nimport { getComputedCssValFloat, hasCssPropertyPrefixed, isElementScrollable } from '../dpitUtilsPublic';\r\nimport DpitTarget from './DpitTarget';\r\nimport { CLASSES_CORE, MODIFIERS } from './constants';\r\n\r\n\r\n\r\nexport default class DpitTargetParent extends DpitTarget {\r\n\t/**\r\n\t * Initialize target object\r\n\t *\r\n\t * @param {Element} element\r\n\t*/\r\n\tconstructor(element) {\r\n\t\tsuper(element);\r\n\t\tconst computedStyle = getComputedStyle(element);\r\n\t\tconst zIndex = computedStyle.getPropertyValue('z-index');\r\n\t\tconst opacity = getComputedCssValFloat(element, 'opacity', 1, computedStyle);\r\n\t\tthis.analysis = {\r\n\t\t\t...this.analysis,\r\n\t\t\thasFilter: hasCssPropertyPrefixed(computedStyle, 'filter'),\r\n\t\t\thasTransform: hasCssPropertyPrefixed(computedStyle, 'transform'),\r\n\t\t\thasDecreasedOpacity: opacity < 1,\r\n\t\t\thasZIndex: /[0-9]+/.test(zIndex),\r\n\t\t\tisScrollable: isElementScrollable(element, computedStyle)\r\n\t\t};\r\n\t}\r\n\r\n\tprocess(isZIdxFixParent) {\r\n\t\tthis.element.classList.add(CLASSES_CORE.targetParent);\r\n\t\tthis.needsZIndexFix = this.doesNeedZIndexFix(isZIdxFixParent, this.analysis);\r\n\t\tif (this.needsZIndexFix) {\r\n\t\t\tthis.addClassSafe(CLASSES_CORE.targetParent + MODIFIERS.zIdxFix);\r\n\t\t}\r\n\t}\r\n\r\n\tdoesNeedZIndexFix(isZIdxFixParent, analysis) {\r\n\t\treturn isZIdxFixParent || analysis.hasTransform || analysis.hasFilter || analysis.hasDecreasedOpacity || analysis.hasZIndex || analysis.hasAltPosition;\r\n\t}\r\n\r\n\tdestroy() {\r\n\t\tthis.element.classList.remove(CLASSES_CORE.targetParent);\r\n\t\tthis.removeClassSafe(CLASSES_CORE.targetParent + MODIFIERS.zIdxFix);\r\n\t}\r\n}","\r\nimport classNames from 'classnames';\r\n\r\nimport {\r\n\ti18n, getWinBB, getDocBB, getTransitionDurationMs,\r\n\tgetCssValFloat, getReverseBasePos, hasElementScrollBarX, documentQuerySelectorSafe,\r\n\tisElementScrollableX, isBoundingBoxInsideContainer, hasElementScrollBarY\r\n} from '../dpitUtilsPublic';\r\n\r\nimport {\r\n\tVERSION,\r\n\tIS_DEBUG,\r\n\tVISUALIZE_BB,\r\n\tCLASSES_CORE,\r\n\tMODIFIERS,\r\n\tEVENTS,\r\n\tCOMMANDS,\r\n\tRESIZE_REACTION,\r\n\tREFRESH_REASONS,\r\n\tRES_PROCESS_ASYNC,\r\n\tCLASSES_CHILD,\r\n\tSCROLL_SPEED,\r\n\tTIMING,\r\n\tSIZE_LIMITS_PX,\r\n\tRESIZE_TYPE,\r\n\tFEATURES\r\n} from './constants';\r\n\r\nimport {\r\n\tupdateCssVar,\r\n\tround1dec,\r\n\tsetTextStyles,\r\n\tscrollIntoView,\r\n\tsetMobileSizeCoef,\r\n\tround3dec,\r\n\tfloor1dec,\r\n\tceil1dec,\r\n\tasyncWait,\r\n} from '../../../../../includes/assets/js/modules/dpitUtilsInc';\r\n\r\nimport {\r\n\thideElement,\r\n\tshowElement\r\n} from '../../../../../includes/assets/js/modules/dpitHidden';\r\n\r\nimport DpitBB from './DpitBB';\r\nimport dpitGoldenRatioPosAlg from './dpitGoldenRatioPosAlg';\r\n\r\nimport BulletsAnimation from '../../../../../includes/assets/js/modules/BulletsAnimation';\r\nimport DpitHooks from '../../../../../includes/assets/js/modules/DpitHooks';\r\nimport DpitStickyEvents from './DpitStickyEvents';\r\nimport DpitColor from '../../../../../includes/assets/js/modules/DpitColor';\r\nimport DpitColorAnalyze from '../../../../../includes/assets/js/modules/DpitColorAnalyze';\r\nimport DpitTargetBranch from './DpitTargetBranch';\r\nimport BrowserSupport from '../../../../../includes/assets/js/modules/BrowserSupport';\r\nimport DpitUserInteraction from './DpitUserInteraction';\r\nimport EventListeners from './EventListeners';\r\nimport TourVisitCounter from '../TourVisitCounter';\r\n\r\nexport default class DpitCore {\r\n\tconstructor(wrapEl, mainCfg, tourCfg) {\r\n\t\tif (mainCfg.dpDebugEn) this.printDebugMessage();\r\n\t\tthis.mainCfg = mainCfg;\r\n\t\tthis.tourCfg = tourCfg;\r\n\t\tthis.wrapEl = wrapEl;\r\n\t\tthis.tourId = tourCfg.tourId;\r\n\r\n\t\tthis.stepItems = [];\r\n\t\tthis.stepItem = null;\r\n\t\tthis.prevStepItem = null;\r\n\t\tthis.tooltipPadding = {\r\n\t\t\tleft: 20,\r\n\t\t\tright: 20\r\n\t\t};\r\n\r\n\t\tthis.isPortraitOrientation = null;\r\n\t\tthis.finalizeRefreshCounter = 0;\r\n\t\tthis.highlightExtensionPx = 8;\r\n\t\tthis.windowMargin = DpitBB.empty(true, false);\r\n\t\tthis.docMargin = DpitBB.empty(true, false);\r\n\t\tthis.tooltipRadius = 0;\r\n\r\n\t\tthis.hookBaseArgs = {\r\n\t\t\ttourId: this.tourId,\r\n\t\t\tcurrentUrl: new URL(window.location)\r\n\t\t};\r\n\r\n\t\tthis.options = {\r\n\t\t\tdpDebugEn: mainCfg.dpDebugEn,\r\n\t\t\tlabeling: {\r\n\t\t\t\t/* Next button label in tooltip box */\r\n\t\t\t\tnextLabel: 'Next',\r\n\t\t\t\t/* Previous button label in tooltip box */\r\n\t\t\t\tprevLabel: 'Back',\r\n\t\t\t\t/* Cancel button label in tooltip box */\r\n\t\t\t\tskipLabel: 'Cancel',\r\n\t\t\t\t/* Done button label in tooltip box */\r\n\t\t\t\tdoneLabel: 'Done',\r\n\t\t\t\tbutton_arrows: 'vector',\r\n\t\t\t\tskipForFutureVisitsLabel: 'Skip for future visits',\r\n\t\t\t},\r\n\t\t\t/* Hide previous button always. */\r\n\t\t\thide_previous_step_button: false,\r\n\t\t\t/* Disable navigation to step by click to bullet. */\r\n\t\t\tdisable_navigation_by_bullets: false,\r\n\t\t\t/* Hide skip button if it is not DONE - in the last step? */\r\n\t\t\thide_skip_button: false,\r\n\t\t\t/* Next CSS class for tooltip box */\r\n\t\t\ttooltipClass: '',\r\n\t\t\t/* CSS class that is added to the highlight el */\r\n\t\t\thighlightClass: '',\r\n\t\t\t/* Close introduction when pressing Escape button? */\r\n\t\t\texitOnEsc: true,\r\n\t\t\t/* Close introduction when clicking on overlay el? */\r\n\t\t\texitOnOverlayClick: true,\r\n\t\t\t/* Show step numbers in introduction? */\r\n\t\t\tshowStepNumbers: true,\r\n\t\t\t/* Let user use keyboard to navigate the tour? */\r\n\t\t\tkeyboardNavigation: true,\r\n\t\t\t/* Show tour bullets? */\r\n\t\t\tshowBullets: true,\r\n\t\t\t/* Show tour progress? */\r\n\t\t\tshowProgress: false,\r\n\t\t\t/* Distance of tooltip ... resp tooltip arrow from highlighted box on targeted element */\r\n\t\t\ttooltipDistanceFromTarget: 8,\r\n\r\n\t\t\tdefaultBoardMarginPx: { x: 10, y: 10 },\r\n\r\n\t\t\ttargetExtendPaddingPercent: 10,// percents from the target\r\n\t\t\ttargetExtendPaddingMaxPx: 12,\r\n\r\n\t\t\t//Should we scroll the tooltip target element or both? Options are: 'element', 'tooltip' or all\r\n\t\t\tscrollTo: 'all',\r\n\t\t\tscrollSpeed: 20, // %\r\n\t\t\tscrollSpeedPerPageMs: 300,\r\n\t\t\tmaxScrollSpeedPerPageMs: 1200,\r\n\r\n\t\t\t/* Precedence of positions, when auto is enabled */\r\n\t\t\tpositionPrecedence: ['bottom', 'top', 'right', 'left', 'center'],\r\n\t\t\t/* Disable an interaction with element? */\r\n\t\t\tenable_interaction: '1',\r\n\r\n\t\t\t/* additional classes to put on the buttons */\r\n\t\t\tbuttonClass: CLASSES_CORE.button,\r\n\r\n\t\t\toverlayOpacityFull: 0.8,\r\n\t\t\toverlayOpacityLight: 0.65,\r\n\t\t\tdefaultWinBoardMarginMobSizeCoef: 1,\r\n\r\n\t\t\tcenterTopBottomPosOffset: 80,\r\n\r\n\t\t\tmax_tooltip_width: 0,\r\n\r\n\t\t\tfollowTargetIntervalInActionMs: 10,\r\n\t\t\tfollowTargetIntervalStandbyMs: 100,\r\n\t\t\tleaveOverlayAlways: false,\r\n\t\t\tcustomTextStylesEn: true,\r\n\t\t\t...FEATURES\r\n\t\t};\r\n\t\tthis.initOverlayOpacity = this.options.overlayOpacityFull;\r\n\t\tthis.eventListeners = new EventListeners();\r\n\t\tthis.resumeFullOverlayOpacity();\r\n\t\tthis.initDebugVisualizer();\r\n\t\tthis.actualizeDocAndScreenAreas();\r\n\t}\r\n\r\n\tinitUserInteraction() {\r\n\t\tif (FEATURES.userInteraction) {\r\n\t\t\tthis.userInteraction = new DpitUserInteraction(\r\n\t\t\t\tthis.options,\r\n\t\t\t\tthis.tooltipRefEl,\r\n\t\t\t\tthis.inHighlightLayerAnimation,\r\n\t\t\t\tthis.onUserInteractionIterateStep.bind(this),\r\n\t\t\t\tthis.onUserInteractionIterateStepInProgress.bind(this),\r\n\t\t\t\tthis.onBeforeUnloadByLinkClick.bind(this)\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tgetOnBeforeUnloadByLinkClickConfirmMessage() {\r\n\t\treturn i18n('end-a-tour-q', this.mainCfg.i18n);\r\n\t}\r\n\r\n\tonBeforeUnloadByLinkClick(/*href*/) {\r\n\t\t/*if (window.confirm(this.getOnBeforeUnloadByLinkClickConfirmMessage())) {\r\n\t\t\twindow.location.href = href;\r\n\t\t}*/\r\n\t}\r\n\r\n\tonUserInteractionIterateStepInProgress(started) {\r\n\t\tstarted ? this.disablePointerEvents() : this.enablePointerEvents();\r\n\t\tthis.disableStepChanging(started);\r\n\t}\r\n\r\n\tonUserInteractionIterateStep() {\r\n\t\tif (this.isLastStep() && this.userInteraction) {\r\n\t\t\tthis.userInteraction.update(this.stepItem);\r\n\t\t} else {\r\n\t\t\tthis.goToNextStep();\r\n\t\t}\r\n\t}\r\n\r\n\tresetUserInteraction() {\r\n\t\tif (this.userInteraction) {\r\n\t\t\tthis.userInteraction.destroy();\r\n\t\t}\r\n\t}\r\n\r\n\tenableUserInteraction() {\r\n\t\tif (this.userInteraction) {\r\n\t\t\tthis.userInteraction.enable();\r\n\t\t}\r\n\t}\r\n\r\n\tdisableUserInteraction(userInteractionTryWhenDisabledFce) {\r\n\t\tif (this.userInteraction) {\r\n\t\t\tthis.userInteraction.disable(userInteractionTryWhenDisabledFce);\r\n\t\t}\r\n\t}\r\n\r\n\tprintDebugMessage() {\r\n\t\tconsole.log('[dpit] INIT DpitCore: v' + VERSION);\r\n\t}\r\n\r\n\tinitDebugVisualizer() {\r\n\t\tif (IS_DEBUG && VISUALIZE_BB) {\r\n\t\t\timport(/* webpackChunkName: \"DpitDebugVisualizer\" */ './DpitDebugVisualizer').then(module => {\r\n\t\t\t\tthis.debugVisualizer = new module.default(this.wrapEl);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tdoAction(tag, args = {}) {\r\n\t\tif (this.isThisInRun()) {\r\n\t\t\tDpitHooks.doAction(tag, {\r\n\t\t\t\t...this.hookBaseArgs,\r\n\t\t\t\tcurrentStepObj: this.stepObject4Hooks(this.stepItem),\r\n\t\t\t\t...args,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tstepObject4Hooks(stepItem) {\r\n\t\tif (!stepItem) return null;\r\n\t\tlet res = {\r\n\t\t\tindex: stepItem.step,\r\n\t\t\ttooltipContent: stepItem.intro,\r\n\t\t\ttooltipPosition: stepItem.position || 'auto',\r\n\t\t\telement: this.isDummyMode() ? null : stepItem.element,\r\n\t\t\tselector: stepItem.selector,\r\n\t\t\tisEnabledInteraction: stepItem.enable_interaction?.val == 1,\r\n\t\t};\r\n\t\t// PRO features\r\n\t\tif (typeof stepItem.url !== 'undefined') {\r\n\t\t\tres = {\r\n\t\t\t\t...res,\r\n\t\t\t\turl: stepItem.url,\r\n\t\t\t\taltMobileSelector: stepItem.alt_mobile_selector,\r\n\t\t\t\tisInMobileMenu: stepItem.is_in_mobile_menu === '1',\r\n\t\t\t\tskipOnBigScreen: stepItem.skip_on_big_screen === '1',\r\n\t\t\t\tskipOnMobile: stepItem.skip_on_mobile == 1\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\tstartFollowTarget = (insensitivityFirst = 2, insensitivity = 1) => {\r\n\t\tconst isDummyModeActive = this.isDummyMode();\r\n\t\tif (/*this.isFixedPos ||*/ this.followTargetInterval || !this.options.followTargetEn || !this.stepItem || (isDummyModeActive && !this.targetDummyBkpEl)) return;\r\n\t\tconst isDummyBkpActive = isDummyModeActive && this.targetDummyBkpEl;\r\n\t\tconst currentTargetEl = isDummyBkpActive ? this.targetDummyBkpEl : this.stepItem.element;\r\n\t\tif (!currentTargetEl || !this.tooltipRefEl) return;\r\n\r\n\t\tlet lastTargetBB = DpitBB.fromElement(currentTargetEl);\r\n\t\tconst lastRefBB = DpitBB.fromElement(this.tooltipRefEl);\r\n\t\tlet lastRefDiffBB = DpitBB.diff(lastTargetBB, lastRefBB);\r\n\r\n\r\n\t\tthis.isFollowTargetEnabled = true;\r\n\t\tlet processing = false;\r\n\r\n\r\n\r\n\t\tthis.followTargetInterval = setInterval(() => {\r\n\t\t\tif (!processing && document.hidden /* active tab */\r\n\t\t\t\t|| !currentTargetEl\r\n\t\t\t\t|| !this.tooltipRefEl\r\n\t\t\t\t|| (!$(currentTargetEl).hasClass(CLASSES_CORE.target) && !isDummyBkpActive)\r\n\t\t\t) return;\r\n\t\t\tprocessing = true;\r\n\t\t\tconst insensitivityFinal = !this.isFollowTargetInAction ? insensitivityFirst : insensitivity;\r\n\r\n\t\t\tconst newTargetBB = DpitBB.fromElement(currentTargetEl);\r\n\t\t\tconst newRefBB = DpitBB.fromElement(this.tooltipRefEl);\r\n\t\t\tconst newRefDiffBB = DpitBB.diff(newTargetBB, newRefBB);\r\n\t\t\tconst refDiffAbsDiffBB = DpitBB.diffAbs(lastRefDiffBB, newRefDiffBB);\r\n\t\t\tif (refDiffAbsDiffBB.top > insensitivityFinal\r\n\t\t\t\t|| refDiffAbsDiffBB.left > insensitivityFinal\r\n\t\t\t\t|| refDiffAbsDiffBB.width > insensitivityFinal\r\n\t\t\t\t|| refDiffAbsDiffBB.height > insensitivityFinal\r\n\t\t\t) {\r\n\r\n\t\t\t\tif (!this.isFollowTargetInAction) {\r\n\t\t\t\t\t// first follow change\r\n\t\t\t\t\tif (this.options.dpDebugEn) console.log(`[dpit] STEP ${this.stepIdx} FOLLOW TARGET: STARTED - init target BB:`, lastTargetBB);\r\n\t\t\t\t\tthis.isFollowTargetInAction = true;\r\n\t\t\t\t}\r\n\t\t\t\tthis.softRefresh(REFRESH_REASONS.followTarget);\r\n\t\t\t\tlastRefDiffBB = newRefDiffBB;\r\n\t\t\t\tlastTargetBB = newTargetBB;\r\n\r\n\t\t\t}\r\n\t\t\tprocessing = false;\r\n\t\t}, this.isFollowTargetInAction ? this.options.followTargetIntervalInActionMs : this.options.followTargetIntervalStandbyMs);\r\n\t};\r\n\r\n\tpauseFollowTarget() {\r\n\t\tif (this.isFollowTargetEnabled) {\r\n\t\t\tthis.wasFollowTargetEnabled = true;\r\n\t\t\tthis.stopFollowTarget();\r\n\t\t}\r\n\t}\r\n\r\n\trestoreFollowTarget() {\r\n\t\tif (!this.isFollowTargetEnabled && this.wasFollowTargetEnabled) {\r\n\t\t\tthis.startFollowTarget();\r\n\t\t}\r\n\t}\r\n\r\n\tpauseResizeRefresh() {\r\n\t\tthis.isResizeRefreshPaused = true;\r\n\t}\r\n\r\n\trestoreResizeRefresh() {\r\n\t\tthis.isResizeRefreshPaused = false;\r\n\t}\r\n\r\n\tstopFollowTarget() {\r\n\t\tthis.isFollowTargetEnabled = false;\r\n\t\tclearInterval(this.followTargetInterval);\r\n\t\tthis.followTargetInterval = null;\r\n\t}\r\n\r\n\trestartFollowTarget() {\r\n\t\tthis.stopFollowTarget();\r\n\t\tthis.startFollowTarget();\r\n\t}\r\n\r\n\r\n\tshowArrowEl(left, top, tooltipPos, arrowPosId) {\r\n\t\tconst arrowPos = { left, top };\r\n\t\tswitch (tooltipPos.base) {\r\n\t\t\tcase 'left':\r\n\t\t\t\tarrowPos.left = Math.floor(left);\r\n\t\t\t\tarrowPos.top = Math.round(top);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'right':\r\n\t\t\t\tarrowPos.left = Math.ceil(left);\r\n\t\t\t\tarrowPos.top = Math.round(top);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'top':\r\n\t\t\t\tarrowPos.top = Math.floor(top);\r\n\t\t\t\tarrowPos.left = Math.round(left);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'bottom':\r\n\t\t\t\tarrowPos.top = Math.ceil(top);\r\n\t\t\t\tarrowPos.left = Math.round(left);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthis.hideArrowEl();\r\n\t\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.arrowEl.style.left = arrowPos.left + 'px';\r\n\t\tthis.arrowEl.style.top = arrowPos.top + 'px';\r\n\t\tthis.arrowEl.classList.add(\r\n\t\t\t`${CLASSES_CORE.arrow}--${arrowPosId}`,\r\n\t\t\t`${CLASSES_CORE.arrow}--${tooltipPos.align}-aligned`\r\n\t\t);\r\n\t\tshowElement(this.arrowEl);\r\n\t}\r\n\r\n\thideArrowEl() {\r\n\t\thideElement(this.arrowEl);\r\n\t\tthis.arrowEl.removeAttribute('style');\r\n\t}\r\n\r\n\tactualizeArrowEl(left, top, tooltipPos, arrowPos) {\r\n\t\tif (!this.isDummyMode()) this.showArrowEl(left, top, tooltipPos, arrowPos);\r\n\t\telse this.hideArrowEl();\r\n\t}\r\n\r\n\r\n\tisDummyMode() {\r\n\t\treturn this.targetDummyEl && this.targetDummyEl === this.stepItem.element;\r\n\t}\r\n\r\n\r\n\r\n\tactualizeDummyMode() {\r\n\t\tconst shouldSwitchToDummyMode = this.isDummyMode();\r\n\t\tconst targetElementIsNotVisibleAndNotSkipped = this.stepItem.element\r\n\t\t\t&& !this.options.skip_absent_ref_el\r\n\t\t\t&& shouldSwitchToDummyMode\r\n\t\t\t&& !this.isTargetInMobileMenu;\r\n\t\tif (!this.stepItem.element || targetElementIsNotVisibleAndNotSkipped) {\r\n\t\t\tthis.backupDummy(targetElementIsNotVisibleAndNotSkipped);\r\n\t\t\tthis.activateDummyMode();\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.deactivateDummyMode();\r\n\t\t}\r\n\t}\r\n\r\n\tbackupDummy(targetElementIsNotVisibleAndNotSkipped) {\r\n\t\tthis.targetDummyBkpEl = targetElementIsNotVisibleAndNotSkipped ? this.stepItem.element : null;\r\n\t}\r\n\r\n\r\n\tactivateDummyMode() {\r\n\t\tif (this.stepItem) {\r\n\t\t\tif (!this.targetDummyEl) {\r\n\t\t\t\tthis.targetDummyEl = this.createDummyLayer();\r\n\t\t\t\tthis.wrapEl.appendChild(this.targetDummyEl);\r\n\t\t\t} else {\r\n\t\t\t\tshowElement(this.targetDummyEl);\r\n\t\t\t}\r\n\t\t\tthis.stepItem.element = this.targetDummyEl;\r\n\t\t}\r\n\t}\r\n\r\n\tdeactivateDummyMode() {\r\n\t\thideElement(this.targetDummyEl, false);\r\n\t\tthis.targetDummyBkpEl = null;\r\n\t}\r\n\r\n\r\n\tupdateIndexOfStepItem(stepItem, newZeroBasedIdx) {\r\n\t\tstepItem.step = newZeroBasedIdx + 1;\r\n\t\tstepItem.idx = newZeroBasedIdx;\r\n\t}\r\n\r\n\tinitSteps() {\r\n\t\tlet stepItems = [];\r\n\t\tif (this.options.steps && Array.isArray(this.options.steps)) {\r\n\t\t\tthis.options.steps.forEach((stepConfig, stepIdx) => {\r\n\t\t\t\tconst stepItem = this.deepCloneObject(stepConfig);\r\n\r\n\t\t\t\t//set the step\r\n\t\t\t\tstepItem.step = stepIdx + 1;\r\n\t\t\t\tstepItem.idx = stepIdx;\r\n\t\t\t\tthis.updateIndexOfStepItem(stepItem, stepIdx);\r\n\t\t\t\tstepItem.selector = stepItem.element;\r\n\r\n\t\t\t\tthis.actualizeTargetItem(stepItem, true);\r\n\r\n\t\t\t\tif (typeof (stepItem.enable_interaction) === 'undefined') {\r\n\t\t\t\t\tstepItem.enable_interaction = { val: this.options.enable_interaction };\r\n\t\t\t\t}\r\n\t\t\t\tstepItems.push(stepItem);\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.stepItems = stepItems;\r\n\t\treturn this.stepItems.length > 0;\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n * Starts the core functionality of the DpitCore module.\r\n *\r\n * @param {boolean} isBackward - Indicates whether the navigation is in backward direction.\r\n * @param {number} startStep - The zero-based index of the step to start from.\r\n * @param {boolean} isVisitCountAffectedTrigger - Indicates whether the step change will affect the visit count.\r\n * @param {boolean} isAllowFutureVisitsCheckboxEnabled - Indicates whether the \"Allow Future Visits\" checkbox is enabled.\r\n * @returns {void}\r\n */\r\n\tstartCore(isBackward, startStep, isVisitCountAffectedTrigger, isAllowFutureVisitsCheckboxEnabled) {\r\n\t\t//set it to the DpitCore object\r\n\t\tif (this.initSteps()) {\r\n\t\t\tthis.isVisitCountAffectedTrigger = isVisitCountAffectedTrigger;\r\n\t\t\tthis.isAllowFutureVisitsCheckboxEnabled = isAllowFutureVisitsCheckboxEnabled;\r\n\t\t\tthis.startCoreBasic(isBackward, startStep);\r\n\t\t}\r\n\t}\r\n\r\n\tstartCoreBasic(isBackward, startStep) {\r\n\t\tthis.ending = false;\r\n\t\tthis.enableKeyboardNavig();\r\n\t\tthis.init();\r\n\t\tthis.actualizeScrollSpeedOptions(this.options.scrollSpeed);\r\n\t\tthis.actualizeDocAndScreenAreas();\r\n\t\tthis.doAction(EVENTS.started);\r\n\t\tthis.isPortraitOrientation = this.isScreenPortraitOrientation(this.winBB);\r\n\t\tconst startStepNum = Number(startStep);\r\n\t\tif (!this.goToStep(isNaN(startStepNum) ? 0 : startStepNum, isBackward)) {\r\n\t\t\tthis.showBackgroundOverlay();\r\n\t\t}\r\n\t}\r\n\r\n\tonOverlayClick() {\r\n\t\tif (this.options.exitOnOverlayClick === true && this.isRunning) {\r\n\t\t\tthis.exitCoreWithHiddenOverlay('skip');\r\n\t\t}\r\n\t\tthis.doAction(EVENTS.onOverlayClick);\r\n\t}\r\n\r\n\tsetOption = (option, value) => {\r\n\t\tthis.options[option] = value;\r\n\t};\r\n\r\n\tsetOptions(options) {\r\n\t\tthis.options = {\r\n\t\t\t...this.options,\r\n\t\t\t...options\r\n\t\t};\r\n\t}\r\n\r\n\tgetOption(name) {\r\n\t\treturn this.options[name];\r\n\t}\r\n\r\n\tprocessBeforeStepChange(newStepItem, prevStepItem) {\r\n\t\tlet beforeChangeRes = RES_PROCESS_ASYNC.continue;\r\n\t\tthis.finalizeRefreshCounter = 0;\r\n\t\tif (this.beforeStepChangeCallback instanceof Function) {\r\n\t\t\tbeforeChangeRes = this.beforeStepChangeCallback(newStepItem, this.isBackward, prevStepItem);\r\n\t\t}\r\n\r\n\t\treturn beforeChangeRes;\r\n\t}\r\n\r\n\r\n\tasync goToStep(stepIdxZeroBased, isBackward = false) {\r\n\t\tif (this.isStepChangingDisabled\r\n\t\t\t|| !this.stepItems\r\n\t\t\t|| stepIdxZeroBased < 0\r\n\t\t\t|| stepIdxZeroBased >= this.stepItems.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tawait asyncWait(50);\r\n\r\n\t\tthis.prevStepItem = this.stepItem;\r\n\t\tthis.isBackward = isBackward;\r\n\r\n\t\tconst newStepItem = this.stepItems[stepIdxZeroBased];\r\n\t\tif (this.prevStepItem?.step) {\r\n\t\t\tthis.isBackward = newStepItem.step < this.prevStepItem.step;\r\n\t\t}\r\n\t\tconst beforeChangeRes = this.processBeforeStepChange(newStepItem, this.prevStepItem);\r\n\r\n\t\tswitch (beforeChangeRes) {\r\n\t\t\tcase RES_PROCESS_ASYNC.continue:\r\n\t\t\t\tthis.doAction(EVENTS.beforeStepChange, {\r\n\t\t\t\t\tnextStepObj: this.stepObject4Hooks(newStepItem),\r\n\t\t\t\t\tbackward: this.isBackward,\r\n\t\t\t\t\tcurrentStepObj: this.stepObject4Hooks(this.prevStepItem)\r\n\t\t\t\t}); break;\r\n\t\t\tcase RES_PROCESS_ASYNC.skip: return this.goToStep(stepIdxZeroBased + (this.isBackward ? -1 : 1));\r\n\t\t\tcase RES_PROCESS_ASYNC.abort:\r\n\t\t\t\tthis.disconnectListeners();\r\n\t\t\t\tthis.ending = true;\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t\tthis.resetCoreOnStepChanged();\r\n\t\tthis.actualizeCurrentStep(newStepItem);\r\n\t\t$(document.documentElement).stop(true, false);\r\n\t\tthis.showStep();\r\n\t\treturn true;\r\n\t}\r\n\r\n\tactualizeCurrentStep(newStepItem) {\r\n\t\tif (this.stepItem) $(document.documentElement).removeClass(CLASSES_CORE.stepSpecifier + '-' + this.stepItem.step);\r\n\t\tif (newStepItem) {\r\n\t\t\t$(document.documentElement).addClass(CLASSES_CORE.stepSpecifier + '-' + newStepItem.step);\r\n\t\t\tthis.stepItem = newStepItem;\r\n\t\t\tthis.stepIdx = newStepItem.idx;\r\n\t\t}\r\n\t}\r\n\r\n\tgoToStepByStepLabel = (stepLabel) => {\r\n\t\tconst stepNumLabel = Number(stepLabel);\r\n\t\tif (!Number.isNaN(stepNumLabel)) {\r\n\t\t\tthis.goToStep(stepLabel - 1);\r\n\t\t}\r\n\t};\r\n\r\n\tgoToPrevStep() {\r\n\t\treturn this.goToStep(this.stepIdx - 1);\r\n\t}\r\n\r\n\tgoToNextStep() {\r\n\t\treturn this.goToStep(this.stepIdx + 1);\r\n\t}\r\n\r\n\r\n\tonSkipButtonClick() {\r\n\t\tthis.exitCoreWithHiddenOverlay('skip');\r\n\t}\r\n\r\n\r\n\r\n\tbringOverlayAboveIntroLayers = (cbEnd) => {\r\n\t\tif (this.overlayContainer) this.overlayContainer.classList.add(CLASSES_CORE.overlayContainer + MODIFIERS.above);\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (cbEnd) cbEnd();\r\n\t\t}, this.overlayContainerTransitionDelayMs);\r\n\t};\r\n\r\n\thideLayers = (byOpacity, noSpace, noTransition, ...args) => {\r\n\t\tif (args.length) {\r\n\t\t\targs.forEach(layer => {\r\n\t\t\t\thideElement(layer, byOpacity, noSpace, noTransition);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tshowLayers = (...args) => {\r\n\t\tif (args.length) {\r\n\t\t\targs.forEach(layer => { showElement(layer); });\r\n\t\t}\r\n\t};\r\n\r\n\thideIntroLayers(noSpace = false, byOpacity = true, noTransition = false) {\r\n\t\t//if (IS_DEBUG) return;\r\n\t\tthis.hideLayers(byOpacity, noSpace, noTransition, this.userInteraction?.disableInteractionLayer, this.tooltipRefEl);\r\n\t\tif (this.highlightEl) {\r\n\t\t\tthis.highlightEl.classList.add(CLASSES_CORE.highlight + MODIFIERS.hidden);\r\n\t\t\tthis.highlightEl.removeAttribute('style');\r\n\t\t}\r\n\t}\r\n\r\n\thideIntroLayersWithShownBgOverlay(noSpace = false, byOpacity = true, noTransition = false) {\r\n\t\tthis.showBackgroundOverlay();\r\n\t\tthis.hideIntroLayers(noSpace, byOpacity, noTransition);\r\n\t}\r\n\r\n\tshowIntroLayers() {\r\n\t\tif (!this.ending) this.hideBackgroundOverlay();\r\n\t\tif (this.highlightEl) {\r\n\t\t\thideElement(this.highlightEl, true, true, true);\r\n\t\t\tthis.highlightEl.classList.remove(CLASSES_CORE.highlight + MODIFIERS.hidden);\r\n\t\t}\r\n\t\tthis.showLayers(this.tooltipRefEl, this.highlightEl, this.userInteraction?.disableInteractionLayer, this.wrapEl);\r\n\t}\r\n\r\n\tconnectListeners() {\r\n\t\tif (!this.listenersConnected) {\r\n\t\t\tthis.listenersConnected = true;\r\n\t\t\tthis.eventListeners.add(this.overlayEl, 'click', this.onOverlayClick.bind(this));\r\n\r\n\t\t\tthis.eventListeners.add(window, 'keydown', this.onKeyDown.bind(this));\r\n\t\t\tthis.eventListeners.add(window, 'resize', this.onResize.bind(this));\r\n\r\n\r\n\t\t\t//this.eventListeners.add(document.documentElement, 'scroll wheel DOMMouseScroll mousewheel touchmove', this.stopAutoScrollWhenUserAction.bind(this));\r\n\t\t\tthis.eventListeners.add(document.documentElement, 'scroll', this.stopAutoScrollWhenUserAction.bind(this));\r\n\t\t\tthis.eventListeners.add(document.documentElement, 'wheel', this.stopAutoScrollWhenUserAction.bind(this));\r\n\t\t\tthis.eventListeners.add(document.documentElement, 'DOMMouseScroll', this.stopAutoScrollWhenUserAction.bind(this));\r\n\t\t\tthis.eventListeners.add(document.documentElement, 'mousewheel', this.stopAutoScrollWhenUserAction.bind(this));\r\n\t\t\tthis.eventListeners.add(document.documentElement, 'touchmove', this.stopAutoScrollWhenUserAction.bind(this));\r\n\r\n\t\t\tif (this.buttonCancelEl) this.eventListeners.add(this.buttonCancelEl, 'click', this.onSkipButtonClick.bind(this));\r\n\t\t\tif (this.buttonPrevEl) this.eventListeners.add(this.buttonPrevEl, 'click', this.goToPrevStep.bind(this));\r\n\t\t\tif (this.buttonNextEl) this.eventListeners.add(this.buttonNextEl, 'click', this.goToNextStep.bind(this));\r\n\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tdisconnectListeners() {\r\n\t\tif (this.listenersConnected) {\r\n\t\t\tthis.listenersConnected = false;\r\n\t\t\tthis.eventListeners.removeAll();\r\n\t\t}\r\n\t}\r\n\r\n\tfinalizeExit() {\r\n\t\t$(this.wrapEl).empty();\r\n\t\tthis.highlightEl = null;\r\n\t\tthis.arrowIcoWrapData = null;\r\n\t\tthis.cancelButtonIcoWrapEl = null;\r\n\t\tthis.overlayContainer = null;\r\n\t\tthis.stepIdx = undefined;\r\n\t\tthis.initialized = false;\r\n\r\n\t}\r\n\r\n\tasync exitingProcess(leaveActiveOverlay, reason, isRedirect) {\r\n\t\tif (this.targetDummyEl) {\r\n\t\t\tthis.targetDummyEl.parentNode.removeChild(this.targetDummyEl);\r\n\t\t\tthis.targetDummyEl = null;\r\n\t\t}\r\n\t\tthis.resetCore(false, false, true);\r\n\t\tthis.disableKeyboardNavig();\r\n\r\n\t\tif (isRedirect) return;\r\n\t\tthis.hideShadowOverlay();\r\n\t\tthis.resetCore(true);\r\n\t\tawait asyncWait(TIMING.finalizeExit);\r\n\r\n\t\tthis.doAction(EVENTS.ended, { reason });\r\n\t\tthis.finalizeExit();\r\n\t}\r\n\r\n\texitCoreWithHiddenOverlay(reason) {\r\n\t\tthis.exitCore(false, false, reason);\r\n\t}\r\n\r\n\tenablePointerEvents() {\r\n\t\tif (this.wrapEl) this.wrapEl.style.pointerEvents = '';\r\n\t\tif (this.tooltipEl) this.tooltipEl.style.pointerEvents = '';\r\n\t}\r\n\r\n\tdisablePointerEvents() {\r\n\t\tif (this.wrapEl) this.wrapEl.style.pointerEvents = 'none';\r\n\t\tif (this.tooltipEl) this.tooltipEl.style.pointerEvents = 'none';\r\n\t}\r\n\r\n\texitCore = (leaveActiveOverlay = false, force = false, reason = '', isRedirect = false, disableAnimation = false) => {\r\n\t\tthis.ending = true;\r\n\t\tif (this.options.leaveOverlayAlways) leaveActiveOverlay = true;\r\n\r\n\t\tthis.doAction(EVENTS.onBeforeEnd, { reason });\r\n\r\n\t\t// calling onBeforeEnd callback\r\n\t\t// If this callback return `false`, it would halt the process\r\n\t\tlet continueExit = true;\r\n\t\tif (this.onBeforeEndCallback instanceof Function) {\r\n\t\t\tcontinueExit = this.onBeforeEndCallback(this);\r\n\t\t}\r\n\t\t// skip this check if `force` parameter is `true`\r\n\t\t// otherwise, if `onBeforeEnd` returned `false`, don't exit the intro\r\n\t\tif (!force && continueExit === false) return;\r\n\r\n\t\tthis.disablePointerEvents();\r\n\t\tthis.disableKeyboardNavig();\r\n\t\tthis.showBackgroundOverlay();\r\n\t\tthis.bringOverlayAboveIntroLayers(() => {\r\n\r\n\t\t\tif (!this.tourCfg.properties.disableStartAnimation && !disableAnimation) {\r\n\r\n\t\t\t\tthis.startFullScreenAnimation(true);\r\n\t\t\t\tif (!isRedirect) {\r\n\t\t\t\t\tthis.stopFullScreenAnimationAfterLoopEnd(() => {\r\n\t\t\t\t\t\tthis.exitingProcess(leaveActiveOverlay, reason, isRedirect);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.exitingProcess(leaveActiveOverlay, reason, isRedirect);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\r\n\r\n\tisInRun() {\r\n\t\treturn document.documentElement.classList.contains(CLASSES_CORE.tourInRun);\r\n\t}\r\n\r\n\tisThisInRun() {\r\n\t\treturn this.isRunning;\r\n\t}\r\n\r\n\tenableKeyboardNavig() {\r\n\t\tthis.keyboardNavigEnabled = true;\r\n\t}\r\n\r\n\tdisableKeyboardNavig() {\r\n\t\tthis.keyboardNavigEnabled = false;\r\n\t}\r\n\r\n\tdisableStepChanging(disable) {\r\n\t\tthis.isStepChangingDisabled = disable;\r\n\t}\r\n\r\n\tsoftenOverlayOpacity(lightOverlayOpacity = this.options.overlayOpacityLight) {\r\n\t\tupdateCssVar('--overlay-opacity', lightOverlayOpacity);\r\n\t}\r\n\r\n\tresumeFullOverlayOpacity() {\r\n\t\tupdateCssVar('--overlay-opacity', this.options.overlayOpacityFull);\r\n\t}\r\n\r\n\tactualizeHighlightBorder(targetPureBB, numberElBB) {\r\n\r\n\t\tlet minExtensionSize = { tb: 4, lr: 4 };\r\n\t\tlet maxExtensionSize = {\r\n\t\t\ttb: this.options.targetExtendPaddingMaxPx,\r\n\t\t\tlr: this.options.targetExtendPaddingMaxPx\r\n\t\t};\r\n\r\n\t\tif (numberElBB) {\r\n\t\t\tminExtensionSize = {\r\n\t\t\t\ttb: numberElBB.height / 4,\r\n\t\t\t\tlr: numberElBB.width / 4\r\n\t\t\t};\r\n\t\t\tmaxExtensionSize = {\r\n\t\t\t\ttb: numberElBB.height / 3,\r\n\t\t\t\tlr: numberElBB.width / 3\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tconst highlightExtensionSizeBase = {\r\n\t\t\ttb: Math.ceil(targetPureBB.height * this.options.targetExtendPaddingPercent / 100),\r\n\t\t\tlr: Math.ceil(targetPureBB.width * this.options.targetExtendPaddingPercent / 100)\r\n\t\t};\r\n\r\n\t\tconst highlightExtensionSizeTbLr = {\r\n\t\t\ttb: Math.max(Math.min(highlightExtensionSizeBase.tb, maxExtensionSize.tb), minExtensionSize.tb),\r\n\t\t\tlr: Math.max(Math.min(highlightExtensionSizeBase.lr, maxExtensionSize.lr), minExtensionSize.lr)\r\n\t\t};\r\n\r\n\t\tthis.highlightExtensionPx = Math.min(highlightExtensionSizeTbLr.tb, highlightExtensionSizeTbLr.lr);\r\n\r\n\t\tconst borderWidthCoef = this.stepItem.highlight === 'full_border' ? 1 : 0.5;\r\n\t\tconst highlightBorderWidth = Math.ceil(borderWidthCoef * this.highlightExtensionPx);\r\n\t\tupdateCssVar('--highlight-border-width', highlightBorderWidth + 'px');\r\n\t}\r\n\r\n\tcalculateTargetBBs(actualizeHighlightBorder = true) {\r\n\r\n\t\tif (this.stepItem && this.stepItem.element) {\r\n\r\n\t\t\t//const targetPureBox = TheBox.getBox(this.stepItem.element);\r\n\t\t\tthis.targetPureBB = DpitBB.fromElement(this.stepItem.element, this.isFixedPos);\r\n\t\t\t//console.log(targetPureBox, this.targetPureBB);\r\n\t\t\tif (actualizeHighlightBorder) {\r\n\t\t\t\tthis.actualizeHighlightBorder(this.targetPureBB, this.numberElBBSizeStandard);\r\n\t\t\t}\r\n\t\t\tthis.targetBB = DpitBB.extend(this.targetPureBB, this.highlightExtensionPx);\r\n\t\t\tif (this.docBB) {\r\n\t\t\t\tconst intersectionBB = DpitBB.intersect(this.targetBB, this.docBB);\r\n\t\t\t\tif (intersectionBB) this.targetBB = intersectionBB;\r\n\t\t\t}\r\n\t\t\tthis.actualizeBoardSizes();\r\n\t\t\tif (this.debugVisualizer) this.debugVisualizer.visualizeBoards(/*this.docBoardBB*/this.docBoardBB, this.winBoardBB, this.docBB, this.winBB);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tunsubscribeEvent(eventId, providedCallback) {\r\n\t\tthis.subscribeEvent(eventId, providedCallback, true);\r\n\t}\r\n\r\n\tsubscribeEvent(eventId, providedCallback, unsubscribe = false) {\r\n\r\n\t\tif (typeof (providedCallback) === 'function') {\r\n\t\t\tif (eventId in EVENTS) {\r\n\t\t\t\tif (unsubscribe) DpitHooks.removeAction(eventId, providedCallback);\r\n\t\t\t\telse DpitHooks.addAction(eventId, providedCallback);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthrow new Error(`Provided event name ${eventId} was not recognized. Choose from: ${EVENTS.values().join(',')}`);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthrow new Error(`Provided callback for ${eventId} was not a function.`);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tpauseRefreshers(all = true) {\r\n\t\tthis.pauseFollowTarget();\r\n\t\tif (all) this.pauseResizeRefresh();\r\n\t}\r\n\r\n\trestoreRefreshers() {\r\n\t\tthis.restoreFollowTarget();\r\n\t\tthis.restoreResizeRefresh();\r\n\t}\r\n\r\n\tstartRefreshers() {\r\n\t\tthis.startFollowTarget();\r\n\t\tthis.restoreResizeRefresh();\r\n\t}\r\n\r\n\tgetTourIdPostfix(prefix = CLASSES_CORE.tourInRun) {\r\n\t\treturn `${prefix}-${this.tourId}`;\r\n\t}\r\n\r\n\r\n\tresetCoreOnStepChanged() {\r\n\t\tthis.didOrientationChanged = false;\r\n\t\tthis.currentNumberPos = null;\r\n\t}\r\n\r\n\tresetCore(hardReset = true, forceHideLayers = false, doNotHideIntroLayers = false) {\r\n\t\tif ((!IS_DEBUG || forceHideLayers) && !doNotHideIntroLayers) this.hideIntroLayers(hardReset);\r\n\t\tthis.clearFixedMode();\r\n\t\t//this.insertDisableInteractionLayer();\r\n\t\tthis.pauseRefreshers(hardReset);\r\n\r\n\t\tif (hardReset) {\r\n\t\t\tthis.resetUserInteraction();\r\n\t\t\tthis.resetTargetElement();\r\n\t\t\tthis.actualizeCurrentStep(null);\r\n\t\t\tthis.actualizeTheme(null);\r\n\t\t\tthis.disableKeyboardNavig();\r\n\t\t\tthis.disconnectListeners();\r\n\t\t\tthis.clearMobileMenuTarget();\r\n\t\t}\r\n\t\tif (this.debugVisualizer) {\r\n\t\t\tif (hardReset) this.debugVisualizer.destroy();\r\n\t\t\telse this.debugVisualizer.clearStepVisualizers();\r\n\t\t}\r\n\t}\r\n\r\n\tunplugTheme() {\r\n\r\n\t}\r\n\r\n\tpauseTour(addDocumentClass = '') {\r\n\t\tthis.resetCore(true, true);\r\n\t\tdocument.documentElement.classList.remove(CLASSES_CORE.tourInRun);\r\n\t\tdocument.documentElement.classList.add(CLASSES_CORE.pause);\r\n\t\tif (addDocumentClass) document.documentElement.classList.add(addDocumentClass);\r\n\t}\r\n\r\n\tisPaused() {\r\n\t\treturn document.documentElement.classList.contains(CLASSES_CORE.pause);\r\n\t}\r\n\r\n\trestoreTour(removeDocumentClass = '', reason = REFRESH_REASONS.restore) {\r\n\t\tdocument.documentElement.classList.add(CLASSES_CORE.tourInRun);\r\n\t\tdocument.documentElement.classList.remove(CLASSES_CORE.pause);\r\n\t\tif (removeDocumentClass) document.documentElement.classList.remove(removeDocumentClass);\r\n\t\tthis.enableKeyboardNavig();\r\n\t\tthis.connectListeners();\r\n\t\tthis.restoreRefreshers();\r\n\t\tthis.hardRefresh(reason);\r\n\t}\r\n\r\n\r\n\tsetInRunClasses() {\r\n\t\tdocument.documentElement.classList.add(CLASSES_CORE.tourInRun, this.getTourIdPostfix());\r\n\t}\r\n\r\n\tclearInRunClasses() {\r\n\t\tdocument.documentElement.classList.remove(CLASSES_CORE.tourInRun, this.getTourIdPostfix());\r\n\t}\r\n\r\n\t/*switchTheme(theme, disableAnimation = false) {\r\n\r\n\t\tif (!this.tourCfg.properties.disableStartAnimation && !disableAnimation) {\r\n\t\t\tthis.resetCore(false);\r\n\t\t\tthis.startFullScreenAnimation(true, 1, () => {\r\n\t\t\t\t\r\n\t\t\r\n\t\t\t\tthis.actualizeTheme(theme);\r\n\t\t\t\tthis.startFullScreenAnimation(false, 1, () => {\r\n\t\t\t\t\tthis.restoreTour();\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.actualizeTheme(theme);\r\n\t\t}\r\n\t}*/\r\n\r\n\r\n\tshowShadowOverlay() {\r\n\t\tif (this.highlightEl) this.highlightEl.classList.remove(CLASSES_CORE.highlight + MODIFIERS.noOverlay);\r\n\t}\r\n\r\n\thideShadowOverlay() {\r\n\t\tif (this.highlightEl) this.highlightEl.classList.add(CLASSES_CORE.highlight + MODIFIERS.noOverlay);\r\n\t}\r\n\r\n\tactualizeShadowOverlay() {\r\n\t\tif (this.hasTargetItemHiddenOverlay(this.stepItem)) {\r\n\t\t\tthis.hideShadowOverlay();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.showShadowOverlay();\r\n\t\t}\r\n\r\n\t\tif (this.isDummyMode()) {\r\n\t\t\tthis.highlightEl.classList.add(CLASSES_CORE.highlight + MODIFIERS.dummy);\r\n\t\t\tthis.wrapEl.classList.add(CLASSES_CORE.wrap + MODIFIERS.dummy);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.highlightEl.classList.remove(CLASSES_CORE.highlight + MODIFIERS.dummy);\r\n\t\t\tthis.wrapEl.classList.remove(CLASSES_CORE.wrap + MODIFIERS.dummy);\r\n\t\t}\r\n\t}\r\n\r\n\tshowBackgroundOverlay() {\r\n\t\tif (this.overlayContainer) this.overlayContainer.classList.remove(CLASSES_CORE.hiddenKeepEvents);\r\n\t\t//showElement(this.overlayContainer);\r\n\t\t//this.overlayContainer.classList.add(CLASSES_CORE.overlayContainer + MODIFIERS.anim);\r\n\t}\r\n\r\n\thideBackgroundOverlay() {\r\n\t\tif (this.overlayContainer) this.overlayContainer.classList.add(CLASSES_CORE.hiddenKeepEvents);\r\n\t\t//hideElement(this.overlayContainer, true);\r\n\t\t//this.overlayContainer.classList.remove(CLASSES_CORE.overlayContainer + MODIFIERS.anim);\r\n\t}\r\n\r\n\tstartFullScreenAnimation(backward = false, loops = -1, loopsPassedCb = null) {\r\n\t\tthis.initBGOverlayLayer();\r\n\t\tthis.showBackgroundOverlay();\r\n\t\tthis.bulletsAnimation.start(backward, loops, () => {\r\n\t\t\tif (loopsPassedCb instanceof Function) loopsPassedCb();\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tstopFullScreenAnimationAfterLoopEnd(finishCallback = null, hideBackgroundOverlay = true) {\r\n\t\tthis.bulletsAnimation.stopAfterLoopEnd(() => {\r\n\t\t\tif (finishCallback instanceof Function) finishCallback();\r\n\t\t\tif (hideBackgroundOverlay) this.hideBackgroundOverlay();\r\n\t\t});\r\n\t}\r\n\r\n\tstopFullScreenAnimation() {\r\n\t\tthis.bulletsAnimation.stop();\r\n\t\tthis.hideBackgroundOverlay();\r\n\t}\r\n\r\n\r\n\tsetAsRunningTour(callbacksFromSecLayer = {}) {\r\n\t\tif (!window.DpitApi && !this.options.disableApi) window.DpitApi = {\r\n\t\t\t...callbacksFromSecLayer,\r\n\t\t\t[COMMANDS.goToNext]: () => this.goToNextStep(),\r\n\t\t\t[COMMANDS.goToPrev]: () => this.goToPrevStep(),\r\n\t\t\t[COMMANDS.goToStep]: (stepLabel) => this.goToStepByStepLabel(stepLabel),\r\n\t\t\t[COMMANDS.exit]: () => this.exitCoreWithHiddenOverlay('skip'),\r\n\t\t\t[COMMANDS.setAccent]: (color) => this.actualizeAccentColor(color),\r\n\t\t\t[COMMANDS.getScrollSpeed]: () => this.tourCfg?.properties?.scrollSpeed,\r\n\t\t\t[COMMANDS.setScrollSpeed]: (scrollSpeedOption) => this.actualizeScrollSpeedOptions(scrollSpeedOption),\r\n\t\t\t[COMMANDS.setCoreOptions]: (options) => this.setOptions(options),\r\n\t\t\t[COMMANDS.getCoreOptions]: (key) => this.getOption(key)\r\n\t\t};\r\n\t\tthis.setInRunClasses();\r\n\r\n\t\tthis.isRunning = true;\r\n\t}\r\n\r\n\tresetAsRunningTour() {\r\n\t\tthis.clearInRunClasses();\r\n\t\twindow.DpitApi = null;\r\n\t\tthis.isRunning = false;\r\n\t}\r\n\r\n\r\n\r\n\tsetRadiuses() {\r\n\t\tif (this.tourCfg.tooltip_radius !== '' && this.tourCfg.tooltip_radius >= 0) {\r\n\t\t\tupdateCssVar('--tooltip-border-radius', this.tourCfg.tooltip_radius + 'px');\r\n\t\t}\r\n\t\tif (this.tourCfg.highlight_radius !== '' && this.tourCfg.highlight_radius >= 0) {\r\n\t\t\tupdateCssVar('--highlight-border-radius', this.tourCfg.highlight_radius + 'px');\r\n\t\t}\r\n\t\tif (this.tourCfg.button_radius !== '' && this.tourCfg.button_radius >= 0) {\r\n\t\t\tupdateCssVar('--button-border-radius', this.tourCfg.button_radius + 'px');\r\n\t\t\tupdateCssVar('--button-border-radius-sm', 0.3 * this.tourCfg.button_radius + 'px');\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Actualize tour accent color \r\n\t *\r\n\t * @param {String|DpitColor} accentColor\r\n\t */\r\n\tactualizeAccentColor(accentColorDefinition) {\r\n\r\n\t\tif (document.documentElement) {\r\n\t\t\tif (accentColorDefinition) {\r\n\r\n\t\t\t\tconst accentColor = new DpitColor(accentColorDefinition);\r\n\t\t\t\taccentColor.setAsCssVariable('--accent-color');\r\n\t\t\t\tconst accentContrastColor = DpitColorAnalyze.getContrastColor(accentColor, false);\r\n\t\t\t\taccentContrastColor.setAsCssVariable('--accent-contrast-color');\r\n\t\t\t\tconst accentContrastInvColor = DpitColorAnalyze.getContrastColor(accentContrastColor, false);\r\n\t\t\t\taccentContrastInvColor.setAsCssVariable('--accent-contrast-inv-color');\r\n\r\n\t\t\t\taccentColor.mix(accentContrastColor, 0.2).setAsCssVariable('--accent-color-gentle');\r\n\t\t\t\taccentContrastColor.mix(accentContrastInvColor, 0.25).setAsCssVariable('--accent-contrast-color-gentle');\r\n\t\t\t\taccentContrastInvColor.mix(accentContrastColor, 0.25).setAsCssVariable('--accent-contrast-inv-color-gentle');\r\n\r\n\r\n\t\t\t\taccentColor.mix(accentContrastColor, 0.7).setAsCssVariable('--accent-color-gentle-x');\r\n\t\t\t\taccentContrastColor.mix(accentContrastInvColor, 0.7).setAsCssVariable('--accent-contrast-color-gentle-x');\r\n\t\t\t\taccentContrastInvColor.mix(accentContrastColor, 0.7).setAsCssVariable('--accent-contrast-inv-color-gentle-x');\r\n\r\n\t\t\t\tif (accentContrastColor.isDark()) document.documentElement.classList.add(CLASSES_CORE.lightAccent);\r\n\t\t\t\telse document.documentElement.classList.remove(CLASSES_CORE.lightAccent);\r\n\t\t\t\tthis.tourCfg.accentColor = accentColor;\r\n\t\t\t} else {\r\n\t\t\t\tdocument.documentElement.style.removeProperty('--accent-color');\r\n\t\t\t\tdocument.documentElement.style.removeProperty('--accent-contrast-color');\r\n\t\t\t\tdocument.documentElement.style.removeProperty('--accent-contrast-inv-color');\r\n\t\t\t\tdocument.documentElement.style.removeProperty('--accent-color-gentle');\r\n\t\t\t\tdocument.documentElement.style.removeProperty('--accent-contrast-color-gentle');\r\n\t\t\t\tdocument.documentElement.style.removeProperty('--accent-contrast-inv-color-gentle');\r\n\t\t\t\tdocument.documentElement.style.removeProperty('--accent-color-gentle-x');\r\n\t\t\t\tdocument.documentElement.style.removeProperty('--accent-contrast-color-gentle-x');\r\n\t\t\t\tdocument.documentElement.style.removeProperty('--accent-contrast-inv-color-gentle-x');\r\n\t\t\t\tdocument.documentElement.classList.remove(CLASSES_CORE.lightAccent);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tstatic getThemeClassName(theme) {\r\n\t\treturn CLASSES_CORE.themeSpecifier + '-' + theme;\r\n\t}\r\n\r\n\tactualizeThemeSpecifier(newTheme, currentTheme) {\r\n\t\tif (document.documentElement) {\r\n\t\t\tif (currentTheme) {\r\n\t\t\t\tdocument.documentElement.classList.remove(DpitCore.getThemeClassName(currentTheme));\r\n\t\t\t}\r\n\t\t\tif (newTheme) {\r\n\t\t\t\tdocument.documentElement.classList.add(DpitCore.getThemeClassName(newTheme));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tinitThemeOptions(themeOverride, accentColorOverride) {\r\n\t\tthis.actualizeTheme(themeOverride ?? this.tourCfg.theme);\r\n\t\tthis.actualizeAccentColor(accentColorOverride ?? this.tourCfg.accentColor);\r\n\t\tthis.setRadiuses(this.tourCfg);\r\n\t\tsetTextStyles(this.tourCfg?.text_styles, this.winBB, this.mainCfg?.mobile_break_points?.mobile);\r\n\t}\r\n\r\n\r\n\r\n\tactualizeTheme(theme, accentColorOverride = null) {\r\n\t\tthis.actualizeThemeSpecifier(theme, this.tourCfg.theme);\r\n\t\tif (theme) this.tourCfg.theme = theme;\r\n\t\tthis.tooltipPadding = {\r\n\t\t\tleft: getCssValFloat(this.tooltipEl, 'padding-left', 20),\r\n\t\t\tright: getCssValFloat(this.tooltipEl, 'padding-right', 20)\r\n\t\t};\r\n\t\tthis.actualizeAccentColor(accentColorOverride ?? this.tourCfg.accentColor);\r\n\t}\r\n\r\n\tisProgressBarEnabled() {\r\n\t\treturn this.options.showProgress && this.stepItems.length > 1;\r\n\t}\r\n\r\n\tisStickyTheme() {\r\n\t\treturn document.documentElement.classList.contains('dpit-theme-sticky');\r\n\t}\r\n\r\n\r\n\tactualizeWrapperSize(docBB) {\r\n\t\tDpitBB.toElement(this.wrapEl, docBB);\r\n\t\t//this.wrapEl.style.bottom = \r\n\t}\r\n\r\n\tactualizeDocAndScreenAreas(actualizeBoardSizes = true) {\r\n\t\tthis.docBB = getDocBB();\r\n\t\tthis.actualizeWrapperSize(this.docBB);\r\n\t\tthis.winBB = getWinBB();\r\n\t\tif (!this.oldDocBB) this.oldDocBB = { ...this.docBB };\r\n\t\tthis.isMobileSize = this.getIsMobileSize();\r\n\t\tupdateCssVar('--highlight-shadow-spread', round1dec(Math.sqrt(Math.pow(this.docBB.width, 2) + Math.pow(this.docBB.height, 2))) + 'px');\r\n\t\tBrowserSupport.vHFix();\r\n\t\tsetMobileSizeCoef(this.tourCfg?.text_styles, this.winBB, this.mainCfg?.mobile_break_points?.mobile);\r\n\t\tthis.actualizeBulletsAnimationSize();\r\n\t\tif (actualizeBoardSizes) this.actualizeBoardSizes();\r\n\t}\r\n\r\n\tactualizeBoardSizes() {\r\n\t\tthis.windowMargin = this.getBoardMargin(this.targetBB, true);\r\n\t\tthis.docMargin = this.getBoardMargin(this.targetBB, false);\r\n\t\tthis.docBoardBB = this.getBoardBB(true);\r\n\t\tthis.actualizeScreenArea();\r\n\t\tthis.actualizeTooltipMinWidth();\r\n\t\tif (this.debugVisualizer) this.debugVisualizer.visualizeBoards(this.docBoardBB, this.winBoardBB, this.docBB, this.winBB);\r\n\t}\r\n\r\n\tactualizeScreenArea() {\r\n\t\tthis.winBoardBB = this.getBoardBB(false);\r\n\t}\r\n\r\n\tisResizeWithOrientationToggle(currentWinBB, oldWinBB) {\r\n\t\treturn this.isScreenPortraitOrientation(currentWinBB) !== this.isScreenPortraitOrientation(oldWinBB);\r\n\t}\r\n\r\n\tisResizeWithMajorAreaChange(currentWinBB, oldWinBB, relativeThreshold = 0.4) {\r\n\t\tconst currentArea = DpitBB.area(currentWinBB);\r\n\t\tconst oldArea = DpitBB.area(oldWinBB);\r\n\t\treturn Math.abs(currentArea - oldArea) > relativeThreshold * currentArea;\r\n\t}\r\n\r\n\tgetResizeReactionAndType(currentWinBB, oldWinBB) {\r\n\t\tconst isOrientationToggle = oldWinBB && this.isResizeWithOrientationToggle(currentWinBB, oldWinBB);\r\n\t\tif (isOrientationToggle) {\r\n\t\t\treturn { reaction: RESIZE_REACTION.hard, type: RESIZE_TYPE.orientationToggle, isOrientationToggle };\r\n\t\t}\r\n\t\tconst isMajorAreaChange = this.isResizeWithMajorAreaChange(currentWinBB, oldWinBB);\r\n\t\tif (isMajorAreaChange) {\r\n\t\t\treturn { reaction: RESIZE_REACTION.hard, type: RESIZE_TYPE.majorAreaChange, isOrientationToggle };\r\n\t\t}\r\n\t\tif (/*currentWinBB.height != this.winBB.height &&*/ currentWinBB.width === this.winBB.width) {\r\n\t\t\t// Android Chrome address bar \r\n\t\t\treturn { reaction: RESIZE_REACTION.none, type: RESIZE_TYPE.mobUrlBarVisibilityToggle, isOrientationToggle };\r\n\t\t\t// TODO getMobileAddressBarHeight\r\n\t\t\t/*\r\n\t\t\tif (currentWinBB.height < this.winBB.height) {\r\n\t\t\t\t// Android Chrome address bar has appeared\r\n\t\t\t} else {\r\n\t\t\t\t// Android Chrome address bar has disappeared\r\n\t\t\t}*/\r\n\t\t}\r\n\t\treturn { reaction: RESIZE_REACTION.soft, type: RESIZE_TYPE.minorAreaChange, isOrientationToggle };\r\n\t}\r\n\r\n\tactualizeBulletsAnimationSize() {\r\n\t\tif (this.tourCfg?.properties?.bulletAnimSize) {\r\n\t\t\tconst isMobileSize = this.getIsMobileSize(600);\r\n\t\t\tconst size1Bullet = isMobileSize ? this.tourCfg.properties.bulletAnimSize / 20 : this.tourCfg.properties.bulletAnimSize / 30; // include gap\r\n\t\t\tupdateCssVar('--bullet-anim-size', `${size1Bullet}vw`);\r\n\t\t\tupdateCssVar('--bullet-anim-gap', `${round3dec(size1Bullet / 1.1)}vw`);\r\n\t\t\tupdateCssVar('--bullet-anim-border-radius', `${this.tourCfg.properties.bulletAnimBorderRadius}%`);\r\n\t\t}\r\n\t}\r\n\r\n\tresizeRefresh(sizes) {\r\n\r\n\t\tconst { reaction, type } = this.getResizeReactionAndType(sizes.currentWinSize, sizes.oldWinSize);\r\n\t\tthis.winBB = { ...sizes.currentWinSize };\r\n\t\tthis.actualizeDocAndScreenAreas();\r\n\t\tif (this.options.dpDebugEn) console.log('[dpit] RESIZE - Sizes:', sizes, 'Reaction:', reaction, 'Type:', type);\r\n\r\n\r\n\t\tswitch (reaction) {\r\n\t\t\tcase RESIZE_REACTION.hard:\r\n\t\t\t\tthis.doAction(EVENTS.onResize, sizes);\r\n\t\t\t\t/*if (target changed due mobile alt target => regularStepChange)\r\n\t\t\t\t\telse */\r\n\t\t\t\t//this.regularStepChange(REFRESH_REASONS.resize, { resizeType: type }); break;\r\n\t\t\t\tthis.hardRefresh(REFRESH_REASONS.resize, { resizeType: type }); break;\r\n\r\n\r\n\r\n\t\t\tcase RESIZE_REACTION.soft:\r\n\t\t\t\tthis.doAction(EVENTS.onResize, sizes);\r\n\t\t\t\tthis.softRefresh(REFRESH_REASONS.resize, { resizeType: type });\r\n\t\t\t\tbreak;\r\n\t\t\tdefault: this.showIntroLayers();\r\n\t\t}\r\n\t}\r\n\r\n\tisScreenPortraitOrientation(winBB) {\r\n\t\treturn winBB ? winBB.height > winBB.width : false;\r\n\t}\r\n\r\n\tonResize() {\r\n\t\tif (this.options.resizeRefreshEn && !this.isResizeRefreshPaused) {\r\n\t\t\t//if (this.debugVisualizer) this.debugVisualizer.clearVisualizers();\r\n\t\t\tconst currentWinSize = getWinBB();\r\n\t\t\tthis.actualizeWrapperSize(getDocBB());\r\n\t\t\tconst { reaction, isOrientationToggle } = this.getResizeReactionAndType(currentWinSize, this.oldDocBB);\r\n\t\t\tif (this.resizeTimeout) {\r\n\t\t\t\tthis.restartResizeTimeout(reaction, isOrientationToggle, currentWinSize);\r\n\t\t\t}\r\n\t\t\telse if (!this.disableOnResize) {\r\n\t\t\t\t// First resize event after not resizing\r\n\t\t\t\tthis.disableOnResize = true;\r\n\t\t\t\tthis.oldWinBB = { ...this.winBB };\r\n\t\t\t\tthis.oldDocBB = { ...this.docBB };\r\n\t\t\t\tthis.restartResizeTimeout(reaction, isOrientationToggle, currentWinSize);\r\n\t\t\t\tthis.disableOnResize = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trestartResizeTimeout(reaction, isOrientationToggle, currentWinSize) {\r\n\t\t/*if (reaction === RESIZE_REACTION.none) {\r\n\t\t\tif (this.resizeTimeout) clearTimeout(this.resizeTimeout);\r\n\t\t\tthis.resizeTimeout = null;\r\n\t\t\tthis.showIntroLayers();\r\n\t\t\treturn;\r\n\t\t}*/\r\n\t\t//const isOrientationToggle = this.isResizeWithOrientationToggle(currentWinSize, this.oldWinBB);\r\n\t\tconst shouldHideIntroLayers = isOrientationToggle || currentWinSize.width !== this.oldWinBB.width;\r\n\t\tthis.pauseFollowTarget();\r\n\t\tif (shouldHideIntroLayers/* && !this.resizeTimeout*/) {\r\n\t\t\tthis.hideIntroLayers();\r\n\t\t}\r\n\t\tif (isOrientationToggle) {\r\n\t\t\tthis.didOrientationChanged = true;\r\n\t\t}\r\n\r\n\t\tif (this.resizeTimeout) clearTimeout(this.resizeTimeout);\r\n\t\tthis.resizeTimeout = setTimeout(() => {\r\n\t\t\tthis.resizeRefresh({\r\n\t\t\t\toldWinSize: this.oldWinBB,\r\n\t\t\t\tcurrentWinSize: getWinBB(),\r\n\t\t\t\toldSize: this.oldDocBB,\r\n\t\t\t\tcurrentSize: getDocBB()\r\n\t\t\t});\r\n\t\t\tthis.resizeTimeout = null;\r\n\t\t}, TIMING.resizeReaction);\r\n\t}\r\n\r\n\tisLastStep() {\r\n\t\treturn this.stepItems.length - 1 === this.stepIdx;\r\n\t}\r\n\r\n\tonKeyDown(e) {\r\n\t\tif (this.options.keyboardNavigation && this.keyboardNavigEnabled) {\r\n\t\t\tlet code = e.key ?? e.keyCode ?? e.charCode;\r\n\t\t\tlet isHideNextByCurrentStepMeta = this.isHideNextByCurrentStepMeta();\r\n\r\n\r\n\t\t\tconst isLastStep = this.isLastStep();\r\n\t\t\tif ((code === 'Escape' || code === 27) && this.options.exitOnEsc === true) {\r\n\t\t\t\t//escape key pressed, exit the intro\r\n\t\t\t\t//check if exit callback is defined\r\n\t\t\t\tthis.exitCoreWithHiddenOverlay('skip');\r\n\t\t\t} else if (code === 'ArrowLeft' || code === 37) {\r\n\t\t\t\t//left arrow\r\n\t\t\t\tif (!this.options.hide_previous_step_button) this.goToPrevStep();\r\n\t\t\t} else if (code === 'ArrowRight' || code === 39) {\r\n\t\t\t\t//right arrow\r\n\t\t\t\tif (!isLastStep && !isHideNextByCurrentStepMeta) this.goToNextStep();\r\n\t\t\t} else if (code === 'Enter' || code === 13) {\r\n\t\t\t\t//srcElement === ie\r\n\t\t\t\tconst target = e.target || e.srcElement;\r\n\t\t\t\tif (!this.options.hide_previous_step_button && target === this.buttonPrevEl) {\r\n\t\t\t\t\t//user hit enter while focusing on previous button\r\n\t\t\t\t\tthis.goToPrevStep();\r\n\t\t\t\t} else if (target === this.buttonCancelEl) {\r\n\t\t\t\t\t//user hit enter while focusing on skip button\r\n\t\t\t\t\tthis.exitCoreWithHiddenOverlay('complete');\r\n\t\t\t\t} else if (target && target.getAttribute('data-step-number')) {\r\n\t\t\t\t\t// user hit enter while focusing on step bullet\r\n\t\t\t\t\ttarget.click();\r\n\t\t\t\t} else if (!isLastStep && !isHideNextByCurrentStepMeta) {\r\n\t\t\t\t\t//default behavior for responding to enter\r\n\t\t\t\t\tthis.goToNextStep();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//prevent default behavior on hitting Enter, to prevent steps being skipped in some browsers\r\n\t\t\t\tif (e.preventDefault) {\r\n\t\t\t\t\tthis.preventDefault(e);\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.returnValue = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tpreventDefault(event) {\r\n\t\tif (event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tdeepCloneObject = (object) => {\r\n\t\tif (object === null || typeof (object) !== 'object' || typeof (object.nodeType) !== 'undefined') {\r\n\t\t\treturn object;\r\n\t\t}\r\n\t\tvar temp = {};\r\n\t\tfor (var key in object) {\r\n\t\t\tif (typeof (window.jQuery) !== 'undefined' && object[key] instanceof window.jQuery) {\r\n\t\t\t\ttemp[key] = object[key];\r\n\t\t\t} else {\r\n\t\t\t\ttemp[key] = this.deepCloneObject(object[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn temp;\r\n\t};\r\n\r\n\textendBoardMarginByTarget(margin, containerBB, targetBB, filterMarginEn = false) {\r\n\t\tconst extendedMargin = filterMarginEn ? this.filterWinBoardMargin(margin) : { ...margin };\r\n\t\tif (!this.isDummyMode() && targetBB) {\r\n\t\t\textendedMargin.left = Math.min(extendedMargin.left, targetBB.left);\r\n\t\t\textendedMargin.right = Math.min(extendedMargin.right, containerBB.right - 1 - Math.min(targetBB.right, containerBB.right));\r\n\t\t\textendedMargin.top = Math.min(extendedMargin.top, targetBB.top);\r\n\t\t\textendedMargin.bottom = Math.min(extendedMargin.bottom, containerBB.bottom - 1 - Math.min(targetBB.bottom, containerBB.bottom));\r\n\t\t}\r\n\r\n\t\treturn extendedMargin;\r\n\t}\r\n\r\n\tfilterWinBoardMargin(margin) {\r\n\t\treturn margin;\r\n\t}\r\n\r\n\tgetBoardMargin(targetBB, filterMarginEn) {\r\n\t\tlet mobileSizeCoef = 1;\r\n\t\tif (this.isMobileSize) {\r\n\t\t\tmobileSizeCoef = this.options.defaultWinBoardMarginMobSizeCoef;\r\n\t\t}\r\n\t\tlet margin = {\r\n\t\t\tleft: this.options.defaultBoardMarginPx.x * mobileSizeCoef,\r\n\t\t\tright: this.options.defaultBoardMarginPx.x * mobileSizeCoef,\r\n\t\t\ttop: this.options.defaultBoardMarginPx.y * mobileSizeCoef,\r\n\t\t\tbottom: this.options.defaultBoardMarginPx.y * mobileSizeCoef\r\n\t\t};\r\n\r\n\r\n\t\tmargin = this.extendBoardMarginByTarget(margin, this.isFixedPos ? this.winBB : this.docBB, targetBB, filterMarginEn);\r\n\r\n\r\n\t\treturn margin;\r\n\t}\r\n\r\n\r\n\tgetBoardBB = (isDocumentSize = true) => {\r\n\r\n\t\tconst margin = isDocumentSize ? this.docMargin : this.windowMargin;\r\n\t\tconst container = isDocumentSize ? this.docBB : this.winBB;\r\n\r\n\t\t/*this.windowMargins = {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0\r\n\t\t};*/\r\n\t\tlet maxROI = {\r\n\t\t\ttop: margin.top,\r\n\t\t\tright: container.right - margin.right,\r\n\t\t\tbottom: container.bottom - margin.bottom,\r\n\t\t\tleft: margin.left\r\n\t\t};\r\n\t\treturn DpitBB.supplyWidthHeight(maxROI);\r\n\t};\r\n\r\n\tgetDesiredNumberPos(tooltipPos) {\r\n\t\tif (this.isDummyMode()) return { x: 'right', y: 'top', onTooltip: true };\r\n\t\tconst onTooltip = this.targetBB.height >= this.winBoardBB.height\r\n\t\t\t|| this.targetBB.width >= this.winBoardBB.width\r\n\t\t\t|| tooltipPos.base === 'center';\r\n\t\tlet desiredNumberPos = { x: 'right', y: 'top', onTooltip: onTooltip };\r\n\t\t// basic position\r\n\t\tif (onTooltip) {\r\n\t\t\tswitch (tooltipPos.base) {\r\n\t\t\t\tcase 'top': desiredNumberPos.y = 'top'; break;\r\n\t\t\t\tcase 'right': desiredNumberPos.x = 'right'; break;\r\n\t\t\t\tcase 'bottom': desiredNumberPos.y = 'bottom'; break;\r\n\t\t\t\tcase 'left': desiredNumberPos.x = 'left'; break;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tswitch (tooltipPos.base) {\r\n\t\t\t\tcase 'top': desiredNumberPos.y = 'bottom'; break;\r\n\t\t\t\tcase 'right': desiredNumberPos.x = 'left'; break;\r\n\t\t\t\tcase 'bottom': desiredNumberPos.y = 'top'; break;\r\n\t\t\t\tcase 'left': desiredNumberPos.x = 'right'; break;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// align\r\n\t\tswitch (tooltipPos.align) {\r\n\t\t\tcase 'left': desiredNumberPos.x = 'right'; break;\r\n\t\t\tcase 'right': desiredNumberPos.x = 'left'; break;\r\n\t\t\tcase 'top': desiredNumberPos.y = 'bottom'; break;\r\n\t\t\tcase 'middle': desiredNumberPos.y = 'top'; break;\r\n\t\t\tcase 'bottom': desiredNumberPos.y = 'top'; break;\r\n\t\t\tcase 'center': desiredNumberPos.x = 'right'; break;\r\n\t\t}\r\n\t\treturn desiredNumberPos;\r\n\t}\r\n\r\n\r\n\r\n\tgetArrowData(tooltipPos, arrowHalfSizes, arrowSizes) {\r\n\t\tconst tooltipRadius = this.tooltipRadius;\r\n\t\tconst arrowElRelPos = {\r\n\t\t\ttop: arrowHalfSizes.height - this.options.tooltipDistanceFromTarget,\r\n\t\t\tleft: this.targetBB.width / 2 - arrowHalfSizes.width\r\n\t\t}; // top, center aligned\r\n\r\n\t\tswitch (tooltipPos.base) {\r\n\t\t\tcase 'top': arrowElRelPos.top = - arrowHalfSizes.height - 1 - this.options.tooltipDistanceFromTarget; break;\r\n\t\t\tcase 'left': arrowElRelPos.left = - arrowHalfSizes.width - 1 - this.options.tooltipDistanceFromTarget; break;\r\n\t\t\tcase 'bottom': arrowElRelPos.top = this.targetBB.height + this.options.tooltipDistanceFromTarget - arrowHalfSizes.height; break;\r\n\t\t\tcase 'right': arrowElRelPos.left = this.targetBB.width + this.options.tooltipDistanceFromTarget - arrowHalfSizes.width; break;\r\n\t\t}\r\n\r\n\t\tlet arrowPos = getReverseBasePos(tooltipPos.base);\r\n\t\tif (tooltipPos.base !== 'center') {\r\n\t\t\tconst isLeftOrRight = ['left', 'right'].includes(tooltipPos.base);\r\n\t\t\tif (isLeftOrRight) {\r\n\t\t\t\tarrowElRelPos.top = this.targetBB.height / 2 - arrowHalfSizes.height;\r\n\t\t\t\t/*if (this.targetBB.height > this.tooltipBB.height) {\r\n\t\t\t\t\t//arrowElRelPos.top = this.targetBB.height / 2 - this.tooltipBB.height / 2 - arrowHalfSizes.height;\r\n\t\t\t\t\tthis.tooltipPos.align = 'middle';\r\n\t\t\t\t} else */if (this.tooltipBB.height < 1.8 * this.targetBB.height) {\r\n\t\t\t\t\tswitch (tooltipPos.align) {\r\n\t\t\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t\t\tarrowElRelPos.top = this.targetBB.height - arrowSizes.height - tooltipRadius - this.options.tooltipDistanceFromTarget;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'top':\r\n\t\t\t\t\t\t\tarrowElRelPos.top = arrowSizes.height + tooltipRadius + this.options.tooltipDistanceFromTarget;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (this.targetBB.height > this.tooltipBB.height) {\r\n\t\t\t\t\t//arrowElRelPos.top = this.targetBB.height / 2 - this.tooltipBB.height / 2 - arrowHalfSizes.height;\r\n\t\t\t\t\tthis.tooltipPos.align = 'middle';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tarrowElRelPos.left = this.targetBB.width / 2 - arrowHalfSizes.width;\r\n\t\t\t\tif (this.tooltipBB.width < 1.8 * this.targetBB.width) {\r\n\t\t\t\t\tswitch (tooltipPos.align) {\r\n\t\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\t\tarrowElRelPos.left = this.targetBB.width - arrowSizes.width - tooltipRadius - this.options.tooltipDistanceFromTarget;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\t\tarrowElRelPos.left = arrowSizes.width + tooltipRadius + this.options.tooltipDistanceFromTarget;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (this.targetBB.width > this.tooltipBB.width) {\r\n\t\t\t\t\t//arrowElRelPos.left = this.targetBB.width / 2 - this.tooltipBB.width / 2 - arrowHalfSizes.width;\r\n\t\t\t\t\tthis.tooltipPos.align = 'center';\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*if (this.targetBB.width <= this.tooltipBB.width) {\r\n\t\t\t\t\tarrowElRelPos.left = this.targetBB.width / 2 - arrowHalfSizes.width;\r\n\t\t\t\t}*/\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\r\n\t\treturn {\r\n\t\t\tarrowPos,\r\n\t\t\tarrowElRelPos,\r\n\t\t};\r\n\t}\r\n\r\n\tactualizeTooltipRadiusPadding() {\r\n\r\n\t\tthis.tooltipRadius = getCssValFloat(this.tooltipEl, 'border-top-right-radius', 0);\r\n\t\t//tooltipRadius = 10000;\r\n\t\tthis.radiusPaddingFix = {\r\n\t\t\ttop: round1dec(this.tooltipRadius / 8),\r\n\t\t\tright: round1dec(this.tooltipRadius / 4),\r\n\t\t\tbottom: round1dec(this.tooltipRadius / 8),\r\n\t\t\tleft: round1dec(this.tooltipRadius / 4),\r\n\t\t};\r\n\t}\r\n\r\n\tfixArrowInTooltipRadius(tooltipPos, tooltipElRelPos, arrowPos, arrowElRelPos, arrowSizes) {\r\n\t\tconst tooltipRadius = this.tooltipRadius;\r\n\t\t//let radiusPaddingCompensation = (tooltipRadius / 8) + 'px ' + (tooltipRadius / 2) + 'px';\r\n\t\tif (this.tooltipPos.base != 'center') {\r\n\t\t\t// align\r\n\t\t\tswitch (tooltipPos.align) {\r\n\t\t\t\tcase 'left': if (tooltipRadius > 0 && arrowElRelPos.left < tooltipElRelPos.left + tooltipRadius) {\r\n\t\t\t\t\tthis.tooltipEl.style[`border-${arrowPos}-left-radius`] = (Math.max(Math.min(arrowElRelPos.left, tooltipRadius), 0)) + 'px';\r\n\t\t\t\t} break;\r\n\t\t\t\tcase 'right': {\r\n\t\t\t\t\tconst tooltipRight = tooltipElRelPos.left + this.tooltipBB.width - 1;\r\n\t\t\t\t\tconst arrowRight = arrowElRelPos.left + arrowSizes.width - 1;\r\n\t\t\t\t\tif (arrowRight > tooltipRight - tooltipRadius) {\r\n\t\t\t\t\t\tthis.tooltipEl.style[`border-${arrowPos}-right-radius`] = (Math.max(Math.min(tooltipRight - arrowRight, tooltipRadius), 0)) + 'px';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 'top':\r\n\t\t\t\t\tif (tooltipRadius > 0 && arrowElRelPos.top < tooltipElRelPos.top + tooltipRadius) {\r\n\t\t\t\t\t\tthis.tooltipEl.style[`border-top-${arrowPos}-radius`] = (Math.max(Math.min(arrowElRelPos.top, tooltipRadius), 0)) + 'px';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'bottom': {\r\n\t\t\t\t\tconst tooltipBottom = tooltipElRelPos.top + this.tooltipBB.height - 1;\r\n\t\t\t\t\tconst arrowBottom = arrowElRelPos.top + arrowSizes.height - 1;\r\n\t\t\t\t\tif (arrowBottom > tooltipBottom - tooltipRadius) {\r\n\t\t\t\t\t\tthis.tooltipEl.style[`border-bottom-${arrowPos}-radius`] = (Math.max(Math.min(tooltipBottom - arrowBottom, tooltipRadius), 0)) + 'px';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tactualizeTooltipBB() {\r\n\t\t/*this.tooltipBBRelToTooltipRef = null;\r\n\t\tthis.tooltipRefOffset = { top: 0, left: 0 };*/\r\n\t\tthis.tooltipBB = DpitBB.fromElement(this.tooltipEl, this.isFixedPos);\r\n\t\t/*if (this.tooltipBB) {\r\n\t\t\tthis.tooltipRefOffset = $(this.tooltipRefEl).offset();\r\n\t\t\tthis.tooltipBBRelToTooltipRef = DpitBB.absoluteToRelative(this.tooltipBB, true, this.tooltipRefOffset.top, this.tooltipRefOffset.left);\r\n\t\t}*/\r\n\t}\r\n\r\n\tactualizeTooltipPosition(relativeLeft, relativeTop) {\r\n\t\tthis.tooltipEl.style.left = relativeLeft + 'px';\r\n\t\tthis.tooltipEl.style.top = relativeTop + 'px';\r\n\t\tthis.actualizeTooltipBB();\r\n\t}\r\n\r\n\tactualizeTooltipSizeAndPos(tooltipPos, tooltipElRelPos) {\r\n\r\n\t\tthis.actualizeTooltipPosition(tooltipElRelPos.left, tooltipElRelPos.top);\r\n\t\tif (tooltipPos.base) this.tooltipEl.classList.add(`${CLASSES_CORE.tooltip}--${tooltipPos.base}`);\r\n\t\tif (tooltipPos.align) this.tooltipEl.classList.add(`${CLASSES_CORE.tooltip}--${tooltipPos.align}-aligned`);\r\n\r\n\r\n\r\n\t\tif (this.tooltipBB && ['top', 'bottom'].includes(tooltipPos.base)) {\r\n\r\n\t\t\tconst maxArea = this.isFixedPos ? this.winBoardBB : this.docBoardBB;\r\n\t\t\tlet diff = 0;\r\n\r\n\t\t\tlet isOverLeft = this.tooltipBB.left < maxArea.left;\r\n\t\t\tlet isOverRight = this.tooltipBB.right > maxArea.right;\r\n\r\n\t\t\tif (isOverLeft /*&& this.targetBB.left >maxArea.left*/) {\r\n\t\t\t\tdiff = Math.abs(maxArea.left - this.tooltipBB.left);\r\n\t\t\t\tif (this.options.dpDebugEn) console.log('[dpit] TOOLTIP Pos: Over Left');\r\n\t\t\t\t$(this.tooltipEl).offset({ left: maxArea.left });\r\n\t\t\t\tthis.actualizeTooltipBB();\r\n\t\t\t\tisOverRight = this.tooltipBB.right > maxArea.right;\r\n\t\t\t\tif (isOverRight) {\r\n\r\n\t\t\t\t\tthis.tooltipEl.style.width = (this.tooltipBB.width - (2 * diff)) + 'px';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (isOverRight/* && this.targetBB.right 100 && this.tooltipBB.width < 0.4 * this.winBoardBB.width) {\r\n\t\t\t\t\t\tthis.tooltipEl.style.width = 0.4 * this.winBoardBB.width + 'px';\r\n\t\t\t\t\t\tthis.actualizeTooltipBB();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ttooltipElRelPos.left = (this.targetBB.width - this.tooltipBB.width) / 2;\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\t// align\r\n\t\tswitch (this.tooltipPos.align) {\r\n\t\t\tcase 'center': tooltipElRelPos.left = (this.targetBB.width - this.tooltipBB.width) / 2; break;\r\n\t\t\tcase 'right': {\r\n\t\t\t\tlet arrowWidthMinusTargetWidth = 0;\r\n\t\t\t\tif (arrowSizes.width > this.targetBB.width) {\r\n\t\t\t\t\tarrowWidthMinusTargetWidth = arrowSizes.width - this.targetBB.width;\r\n\t\t\t\t}\r\n\t\t\t\ttooltipElRelPos.left = this.targetBB.width - this.tooltipBB.width + arrowWidthMinusTargetWidth;\r\n\t\t\t} break;\r\n\t\t\tcase 'top':\r\n\t\t\t\tif (this.tooltipPos.base === 'center') {\r\n\t\t\t\t\ttooltipElRelPos.top = this.options.centerTopBottomPosOffset;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'middle': tooltipElRelPos.top = (this.targetBB.height - this.tooltipBB.height) / 2; break;\r\n\t\t\tcase 'bottom': {\r\n\t\t\t\tlet arrowHeightMinusTargetHeight = 0;\r\n\t\t\t\tif (arrowSizes.height > this.targetBB.height) {\r\n\t\t\t\t\tarrowHeightMinusTargetHeight = arrowSizes.height - this.targetBB.height;\r\n\t\t\t\t}\r\n\t\t\t\ttooltipElRelPos.top = this.targetBB.height - this.tooltipBB.height + arrowHeightMinusTargetHeight;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\r\n\t\ttooltipElRelPos = this.filterTooltipElRelPos(tooltipElRelPos);\r\n\r\n\r\n\t\tthis.actualizeTooltipSizeAndPos(this.tooltipPos, tooltipElRelPos);\r\n\r\n\r\n\r\n\r\n\t\tconst { arrowPos, arrowElRelPos } = this.getArrowData(this.tooltipPos, arrowHalfSizes, arrowSizes);\r\n\t\tthis.fixArrowInTooltipRadius(this.tooltipPos, tooltipElRelPos, arrowPos, arrowElRelPos, arrowSizes);\r\n\t\tthis.actualizeArrowEl(arrowElRelPos.left, arrowElRelPos.top, this.tooltipPos, arrowPos);\r\n\r\n\r\n\t\tif (\r\n\t\t\tthis.options.goldenRatioPosAlgEn\r\n\t\t\t&& this.tooltipBB\r\n\t\t\t&& !useLastPosition\r\n\t\t\t&& placeTooltipIterations < 3\r\n\t\t\t&& !(placeTooltipIterations > 0 && prevIterationTooltipPos.base === this.tooltipPos.base && prevIterationTooltipPos.align === this.tooltipPos.align)\r\n\r\n\t\t) {\r\n\t\t\tlet basePositions = ['left', 'right', 'bottom', 'top'].filter(val => !isCrowdedPos[val]);\r\n\t\t\tif (basePositions.includes(this.tooltipPos.base)) {\r\n\t\t\t\t/*const goldenRatioPosAlgRes = */\r\n\t\t\t\tdpitGoldenRatioPosAlg(\r\n\t\t\t\t\tthis.targetBB,\r\n\t\t\t\t\tthis.tooltipBB,\r\n\t\t\t\t\tthis.tooltipEl,\r\n\t\t\t\t\tthis.tooltipPos,\r\n\t\t\t\t\tthis.winBoardBB,\r\n\t\t\t\t\tthis.docBoardBB,\r\n\t\t\t\t\tthis.isFixedPos,\r\n\t\t\t\t\tthis.minTooltipWidth,\r\n\t\t\t\t\tthis.options.dpDebugEn//false\r\n\t\t\t\t);\r\n\t\t\t\tisNeededNextIteration = false;//goldenRatioPosAlgRes.wasPosAdjusted;\r\n\t\t\t\tthis.actualizeTooltipBB();\r\n\t\t\t\t//if (goldenRatioPosAlgRes.isOverHeight) isCrowdedPos[this.tooltipPos.base] = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!isNeededNextIteration) {\r\n\t\t\tconst doesNotFitIn = this.fixPositionOutOfTheWindow();\r\n\t\t\tif (doesNotFitIn) {\r\n\t\t\t\tisNeededNextIteration = true;\r\n\t\t\t\tisCrowdedPos[this.tooltipPos.base] = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tisNeededNextIteration,\r\n\t\t\tdesiredNumberPos: this.getDesiredNumberPos(this.tooltipPos)\r\n\t\t};\r\n\t}\r\n\r\n\r\n\tinitTooltip(hard = false) {\r\n\r\n\r\n\t\t/*if (this.isDummyMode()) {\r\n\t\t\tthis.tooltipEl.classList.add(CLASSES_CORE.tooltip + MODIFIERS.dummy);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.tooltipRefEl.classList.remove(CLASSES_CORE.tooltip + MODIFIERS.dummy);\r\n\t\t}*/\r\n\r\n\r\n\t\tif (hard) {\r\n\t\t\tthis.tooltipTextEl.classList.remove(CLASSES_CORE.hasScrollBar);\r\n\t\t\tthis.tooltipTextEl.style.height = '';\r\n\r\n\t\t\tthis.tooltipEl.className = CLASSES_CORE.tooltip;\r\n\t\t\tthis.tooltipEl.removeAttribute('style');\r\n\r\n\t\t\t//this.tooltipEl.style = '';\r\n\t\t\t/*this.tooltipEl.style.top = '';\r\n\t\t\tthis.tooltipEl.style.right = '';\r\n\t\t\tthis.tooltipEl.style.bottom = '';\r\n\t\t\tthis.tooltipEl.style.left = '';\r\n\t\t\tthis.tooltipEl.style.width = '';\r\n\t\t\tthis.tooltipEl.style.height = '';*/\r\n\t\t\tthis.actualizeScreenArea();\r\n\t\t\tthis.actualizeTooltipMaxWidth();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.tooltipTextEl.style.maxHeight = '';\r\n\t\t\tthis.tooltipEl.style.marginLeft = '';\r\n\t\t\tthis.tooltipEl.style.marginTop = '';\r\n\t\t\tthis.tooltipEl.style.borderTopLeftRadius = '';\r\n\t\t\tthis.tooltipEl.style.borderTopRightRadius = '';\r\n\t\t\tthis.tooltipEl.style.borderBottomLeftRadius = '';\r\n\t\t\tthis.tooltipEl.style.borderBottomRightRadius = '';\r\n\t\t\tthis.tooltipEl.style.width = '';\r\n\t\t}\r\n\r\n\t\tif (this.isDummyMode()) {\r\n\t\t\tthis.tooltipEl.classList.add(CLASSES_CORE.tooltip + MODIFIERS.dummy);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.tooltipEl.classList.remove(CLASSES_CORE.tooltip + MODIFIERS.dummy);\r\n\t\t}\r\n\r\n\r\n\r\n\t\tthis.numberEl?.classList.remove(CLASSES_CORE.number + MODIFIERS.onTooltip);\r\n\r\n\t\tif (this.stepItem?.hidden_meta?.ext?.build_with_wp_editor === '1') {\r\n\t\t\tthis.tooltipTextEl.classList.add(CLASSES_CORE.tooltipText + MODIFIERS.whiteSpacingNormal);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.tooltipTextEl.classList.remove(CLASSES_CORE.tooltipText + MODIFIERS.whiteSpacingNormal);\r\n\t\t}\r\n\r\n\t\tif (this.options.customTextStylesEn) {\r\n\t\t\tthis.tooltipTextEl.classList.add(CLASSES_CORE.tooltipText + MODIFIERS.customStyle);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.tooltipTextEl.classList.remove(CLASSES_CORE.tooltipText + MODIFIERS.customStyle);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Render tooltip box in the page\r\n\t *\r\n\t * @api private\r\n\t * @method placeTooltip\r\n\t * @param {HTMLElement} targetElement\r\n\t */\r\n\tplaceTooltip = (useLastTooltipPos = false, useLastNumberPos = false, placeTooltipIterations = 0, isCrowdedPos = {}) => {\r\n\r\n\t\tlet prevIterationTooltipPos = null;\r\n\r\n\t\tif (placeTooltipIterations > 0) {\r\n\t\t\tprevIterationTooltipPos = { ...this.tooltipPos };\r\n\t\t}\r\n\r\n\t\t//prevent error when `this.stepIdx` is undefined\r\n\t\tif (!this.stepItem) return;\r\n\r\n\t\tthis.actualizeTooltipBB();\r\n\r\n\t\tif (typeof (this.options.tooltipClass) === 'string' && this.options.tooltipClass) {\r\n\t\t\tthis.tooltipEl.classList.add(this.options.tooltipClass);\r\n\t\t}\r\n\t\tif (this.isProgressBarEnabled()) {\r\n\t\t\tthis.tooltipEl.classList.add(CLASSES_CORE.tooltip + '--with-progress-bar');\r\n\t\t}\r\n\r\n\t\tconst { isNeededNextIteration, desiredNumberPos } = this.placeTooltipCore(\r\n\t\t\tplaceTooltipIterations,\r\n\t\t\tuseLastTooltipPos,\r\n\t\t\tprevIterationTooltipPos,\r\n\t\t\tisCrowdedPos\r\n\t\t);\r\n\t\tthis.desiredNumberPos = desiredNumberPos;\r\n\r\n\t\tif (isNeededNextIteration && !useLastTooltipPos && placeTooltipIterations < 2) {\r\n\t\t\tif (this.options.dpDebugEn && placeTooltipIterations > 0) console.log('[dpit] TOOLTIP Pos. re-calc.', placeTooltipIterations);\r\n\t\t\t//this.initTooltip(false);\r\n\t\t\t//this.tooltipEl.style.width = '';\r\n\t\t\tthis.placeTooltip(useLastTooltipPos, false, ++placeTooltipIterations, isCrowdedPos);\r\n\t\t}\r\n\t\telse if (this.actualizeBulletScrollBar()) {\r\n\t\t\tthis.placeTooltip(true, false, ++placeTooltipIterations, isCrowdedPos);\r\n\t\t} else if (this.options.showStepNumbers) {\r\n\t\t\tthis.placeNumber(this.targetBB, this.tooltipPos, desiredNumberPos, useLastNumberPos);\r\n\t\t} else {\r\n\t\t\thideElement(this.numberEl, false);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\r\n\tactualizeStepNumber() {\r\n\t\tthis.actualizeStepNumberEl(this.numberEl);\r\n\t}\r\n\r\n\r\n\t/** \r\n\t* @param {Element} numberEl - Brief description of the parameter here. Note: For other notations of data types, please refer to JSDocs: DataTypes command.\r\n\t*/\r\n\tactualizeStepNumberEl(numberEl) {\r\n\t\tconst stepNumber = this.stepItem ? this.stepItem.step : '';\r\n\t\tnumberEl.firstChild.innerHTML = this.stepItem ? this.stepItem.step : '';\r\n\t\tif (stepNumber > 9) {\r\n\t\t\tnumberEl.classList.add(CLASSES_CORE.number + MODIFIERS['2dig']);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tnumberEl.classList.remove(CLASSES_CORE.number + MODIFIERS['2dig']);\r\n\t\t}\r\n\t\tthis.actualizeNumberBB(true);\r\n\t}\r\n\r\n\tactualizeLayer(isEnabled, layerElement, hideByDisp = true, classWhenLayerShown = null) {\r\n\t\tif (isEnabled) {\r\n\t\t\tshowElement(layerElement);\r\n\t\t\tif (classWhenLayerShown && layerElement) layerElement.classList.add(classWhenLayerShown);\r\n\t\t}\r\n\t\telse {\r\n\t\t\thideElement(layerElement, !hideByDisp);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tactualizeNumberBB(takeNumberBBSizeStandardSnapShot = false) {\r\n\t\tif (this.options.showStepNumbers) {\r\n\t\t\tthis.numberBB = DpitBB.fromElement(this.numberEl, this.isFixedPos);\r\n\t\t\tif (takeNumberBBSizeStandardSnapShot) this.numberElBBSizeStandard = this.takeNumberBBSizeStandardSnapShot();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.numberElBBSizeStandard = null;\r\n\t\t}\r\n\t}\r\n\r\n\ttakeNumberBBSizeStandardSnapShot() {\r\n\t\treturn { ...this.numberBB };\r\n\t}\r\n\r\n\tgetActualNumberPosY(lastPositionKey, lastPositionData, bbNumberDest, indention) {\r\n\t\tlet lastPositionKeyBase = lastPositionKey;\r\n\t\tconst lastPositionParts = lastPositionKey.split(/(?=[A-Z])/);\r\n\t\tif (lastPositionParts.length) {\r\n\t\t\tlastPositionKeyBase = lastPositionParts[0];\r\n\t\t}\r\n\t\tlet lastPositionBase = null;\r\n\t\tswitch (lastPositionKeyBase) {\r\n\t\t\tcase 'top': lastPositionBase = bbNumberDest.top - this.numberBB.height + lastPositionData.numberPosCoef * lastPositionData.numberLayerHalfSize.height; break;\r\n\t\t\tcase 'bottom': lastPositionBase = bbNumberDest.bottom - 1 - lastPositionData.numberPosCoef * lastPositionData.numberLayerHalfSize.height; break;\r\n\t\t}\r\n\t\tswitch (lastPositionKey) {\r\n\t\t\tcase 'topIndented': return lastPositionBase + indention;\r\n\t\t\tcase 'bottomIndented': return lastPositionBase - indention;\r\n\r\n\t\t}\r\n\t\treturn this.isFixedPos ? lastPositionBase + document.documentElement.scrollTop : lastPositionBase;\r\n\t}\r\n\r\n\tgetActualNumberPosX(lastPositionKey, lastPositionData, bbNumberDest, indention) {\r\n\t\tlet lastPositionKeyBase = lastPositionKey;\r\n\t\tconst lastPositionParts = lastPositionKey.split(/(?=[A-Z])/);\r\n\t\tif (lastPositionParts.length) {\r\n\t\t\tlastPositionKeyBase = lastPositionParts[0];\r\n\t\t}\r\n\t\tlet lastPositionBase = null;\r\n\t\tswitch (lastPositionKeyBase) {\r\n\t\t\tcase 'left': lastPositionBase = bbNumberDest.left - this.numberBB.width + lastPositionData.numberPosCoef * lastPositionData.numberLayerHalfSize.width; break;\r\n\t\t\tcase 'right': lastPositionBase = bbNumberDest.right - 1 - lastPositionData.numberPosCoef * lastPositionData.numberLayerHalfSize.width; break;\r\n\t\t}\r\n\r\n\t\tswitch (lastPositionKey) {\r\n\t\t\tcase 'leftIndented': return lastPositionBase + indention;\r\n\t\t\tcase 'rightIndented': return lastPositionBase - indention;\r\n\r\n\t\t}\r\n\r\n\t\treturn this.isFixedPos ? lastPositionBase + document.documentElement.scrollLeft : lastPositionBase;\r\n\t}\r\n\r\n\tplaceNumberFast(lastPosition, bbNumberDest) {\r\n\t\tlet newPosition = {\r\n\t\t\ttype: lastPosition.type,\r\n\t\t\ttop: this.getActualNumberPosY(lastPosition.type.y, lastPosition, bbNumberDest, lastPosition.indention),\r\n\t\t\tleft: this.getActualNumberPosX(lastPosition.type.x, lastPosition, bbNumberDest, lastPosition.indention),\r\n\t\t};\r\n\t\t$(this.numberEl).offset({ top: newPosition.top, left: newPosition.left });\r\n\t}\r\n\r\n\r\n\tgetIsPossibleNumberPositionsInBoardObject(possiblePositionsLT) {\r\n\t\tconst maxAreaBB = this.isFixedPos ? this.winBB : this.docBB;\r\n\t\treturn {\r\n\t\t\tleft: possiblePositionsLT.left >= this.docBB.left && Math.abs(possiblePositionsLT.left - this.tooltipBB.right) < this.winBB.width,\r\n\t\t\ttop: possiblePositionsLT.top >= this.docBB.top && Math.abs(possiblePositionsLT.top - this.tooltipBB.bottom) < this.winBB.height,\r\n\t\t\tright: possiblePositionsLT.right + this.numberBB.width <= maxAreaBB.right\r\n\t\t\t\t&& Math.abs(possiblePositionsLT.right + this.numberBB.width - this.tooltipBB.left) < this.winBB.width,\r\n\t\t\tbottom: possiblePositionsLT.bottom + this.numberBB.height <= maxAreaBB.bottom\r\n\t\t\t\t&& Math.abs(possiblePositionsLT.bottom + this.numberBB.height - this.tooltipBB.top) < this.winBB.height\r\n\t\t};\r\n\t}\r\n\r\n\tgetNumberIntersectionFeature(possiblePositionsLT, posX, posY, bbContainerToTest) {\r\n\t\tconst numBBToTest = DpitBB.extend(DpitBB.fromLeftTopWidthHeight(\r\n\t\t\tpossiblePositionsLT[posX],\r\n\t\t\tpossiblePositionsLT[posY],\r\n\t\t\tthis.numberBB.width,\r\n\t\t\tthis.numberBB.height\r\n\t\t), 4);\r\n\r\n\t\treturn DpitBB.intersect(bbContainerToTest, numBBToTest);\r\n\t}\r\n\r\n\tgetNumberDestElSizeFeature(numberLayerHalfSize, bbContainerToTest) {\r\n\t\treturn { x: numberLayerHalfSize.width / bbContainerToTest.width, y: numberLayerHalfSize.height / bbContainerToTest.height };\r\n\t}\r\n\r\n\r\n\tgetPlaceNumberRepetitionParams(oldDesiredPosition, iterations) {\r\n\t\tlet enableIndentation = iterations >= 2;\r\n\t\tlet desiredPosition = { ...oldDesiredPosition, onTooltip: !oldDesiredPosition.onTooltip };\r\n\t\tlet maxIterations = 3;\r\n\t\tif (this.isDummyMode()) {\r\n\t\t\tenableIndentation = true;\r\n\t\t\tdesiredPosition = { ...oldDesiredPosition, onTooltip: true };\r\n\t\t\tmaxIterations = 1;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tenableIndentation,\r\n\t\t\tdesiredPosition,\r\n\t\t\tmaxIterations\r\n\t\t};\r\n\t}\r\n\r\n\tplaceNumber(\r\n\t\ttargetBB,\r\n\t\ttooltipPos,\r\n\t\tdesiredPosition = { x: 'right', y: 'top', onTooltip: false },\r\n\t\tuseLastPosition = false,\r\n\t\titerations = 1,\r\n\t\tenableIndentation = false) {\r\n\r\n\t\tlet numberPosCoef = 1;\r\n\r\n\t\tlet numberLayerHalfSize = { width: this.numberBB.width / 2, height: this.numberBB.height / 2 };\r\n\r\n\r\n\t\tlet numberDestEl = this.highlightEl;\r\n\t\tlet bbNumberDest = targetBB;\r\n\t\tlet bbOther = this.tooltipBB;\r\n\r\n\t\tif (desiredPosition.onTooltip) {\r\n\t\t\tbbNumberDest = this.tooltipBB;\r\n\t\t\tbbOther = targetBB;\r\n\t\t\tnumberDestEl = this.tooltipEl;\r\n\t\t} else if (!useLastPosition) {\r\n\t\t\t//adjust distance of number and target ... higher dist for small targets\r\n\t\t\tconst numberSizeCoef = this.getNumberDestElSizeFeature(numberLayerHalfSize, bbNumberDest);\r\n\t\t\tconst threshold = 0.3;\r\n\r\n\t\t\tif (numberSizeCoef.x > threshold && numberSizeCoef.x < 1.5 || numberSizeCoef.y > threshold && numberSizeCoef.y < 1.5) {\r\n\t\t\t\t//enableIndentation = false;\r\n\t\t\t\tconst numberPosFeatures = { x: 1 - (numberSizeCoef.x - threshold), y: 1 - (numberSizeCoef.y - threshold) };\r\n\t\t\t\tnumberPosCoef = Math.min(numberPosFeatures.x, numberPosFeatures.y);\r\n\t\t\t\tif (this.options.dpDebugEn) console.log('[dpit] NUMBER POS: adjustment - small ref/tooltip. Coef: ', numberPosCoef, 'Features: ', numberPosFeatures);\r\n\t\t\t\t//numberSizeCoefCssVar = Math.min(Math.max(1.7 * numberPosCoef, 0.8), 1);\r\n\t\t\t\t//this.actualizeNumberBB();\r\n\t\t\t\t//numberLayerHalfSize = { width: this.numberBB.width / 2, height: this.numberBB.height / 2 };\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tif (useLastPosition && this.currentNumberPos) {\r\n\t\t\tthis.placeNumberFast(this.currentNumberPos, bbNumberDest);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.numberEl.classList.remove(CLASSES_CORE.number + MODIFIERS.hidden);\r\n\r\n\r\n\t\tif (desiredPosition.onTooltip) {\r\n\t\t\tthis.numberEl.classList.add(CLASSES_CORE.number + MODIFIERS.onTooltip);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.numberEl.classList.remove(CLASSES_CORE.number + MODIFIERS.onTooltip);\r\n\t\t}\r\n\t\tthis.actualizeNumberBB(true);\r\n\r\n\t\tlet possiblePositionsLT = {\r\n\t\t\tleft: bbNumberDest.left - this.numberBB.width + numberPosCoef * numberLayerHalfSize.width + this.radiusPaddingFix.left / 2,\r\n\t\t\tright: bbNumberDest.right - 1 - numberPosCoef * numberLayerHalfSize.width - this.radiusPaddingFix.right / 2,\r\n\t\t\ttop: bbNumberDest.top - this.numberBB.height + numberPosCoef * numberLayerHalfSize.height + this.radiusPaddingFix.top / 2,\r\n\t\t\tbottom: bbNumberDest.bottom - 1 - numberPosCoef * numberLayerHalfSize.height - this.radiusPaddingFix.bottom / 2,\r\n\t\t};\r\n\r\n\t\tconst layerNumberDestRadius = getCssValFloat(numberDestEl, 'border-top-left-radius', 2);\r\n\t\tconst indention = layerNumberDestRadius + 4 + numberLayerHalfSize.width;\r\n\t\tif (enableIndentation) {\r\n\r\n\t\t\tpossiblePositionsLT = {\r\n\t\t\t\t...possiblePositionsLT,\r\n\t\t\t\tleftIndented: possiblePositionsLT.left + indention,\r\n\t\t\t\trightIndented: possiblePositionsLT.right - indention,\r\n\t\t\t\ttopIndented: possiblePositionsLT.top + indention,\r\n\t\t\t\tbottomIndented: possiblePositionsLT.bottom - indention,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tlet isInWindow = this.getIsPossibleNumberPositionsInBoardObject(possiblePositionsLT);\r\n\t\tconst maxAreaBB = this.isFixedPos ? this.winBB : this.docBB;\r\n\t\tif (enableIndentation) {\r\n\t\t\tisInWindow = {\r\n\t\t\t\t...isInWindow,\r\n\t\t\t\tleftIndented: possiblePositionsLT.leftIndented <= bbNumberDest.right - indention\r\n\t\t\t\t\t&& possiblePositionsLT.leftIndented >= this.winBB.left,\r\n\t\t\t\ttopIndented: possiblePositionsLT.topIndented <= bbNumberDest.bottom - indention\r\n\t\t\t\t\t&& possiblePositionsLT.topIndented >= this.winBB.top,\r\n\t\t\t\trightIndented: possiblePositionsLT.rightIndented + this.numberBB.width >= bbNumberDest.left + indention\r\n\t\t\t\t\t&& possiblePositionsLT.rightIndented <= maxAreaBB.right,\r\n\t\t\t\tbottomIndented: possiblePositionsLT.bottomIndented + this.numberBB.height >= bbNumberDest.top + indention\r\n\t\t\t\t\t&& possiblePositionsLT.bottomIndented <= maxAreaBB.bottom\r\n\t\t\t};\r\n\t\t}\r\n\r\n\r\n\r\n\t\tconst allowedPositionKeys = Object.keys(possiblePositionsLT).filter((position) => {\r\n\t\t\treturn isInWindow[position];\r\n\t\t});\r\n\r\n\r\n\t\tlet positionKeysY = ['top', 'bottom'];\r\n\t\tlet positionKeysX = ['left', 'right'];\r\n\r\n\r\n\t\tif (enableIndentation) {\r\n\t\t\tpositionKeysY = [...positionKeysY, 'topIndented', 'bottomIndented'];\r\n\t\t\tpositionKeysX = [...positionKeysX, 'leftIndented', 'rightIndented'];\r\n\t\t}\r\n\r\n\t\tlet finalPositions = [];\r\n\t\tpositionKeysY.forEach((posY, idxY) => {\r\n\t\t\tif (allowedPositionKeys.includes(posY)) {\r\n\t\t\t\tpositionKeysX.forEach((posX, idxX) => {\r\n\t\t\t\t\tif (allowedPositionKeys.includes(posX)) {\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlet score = 0;\r\n\t\t\t\t\t\t\tconst numberPositionType = { x: posX, y: posY };\r\n\r\n\t\t\t\t\t\t\t// indented\r\n\t\t\t\t\t\t\tif (idxY >= 2) score--;\r\n\t\t\t\t\t\t\tif (idxX >= 2) {\r\n\t\t\t\t\t\t\t\tif (posX === 'rightIndented') score -= 0.5; // prefer right indented\r\n\t\t\t\t\t\t\t\telse score--;\r\n\t\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\t\tconst intersection = this.getNumberIntersectionFeature(possiblePositionsLT, posX, posY, bbOther);\r\n\r\n\t\t\t\t\t\t\tif (intersection) {\r\n\t\t\t\t\t\t\t\tif (iterations === 1) return;\r\n\t\t\t\t\t\t\t\tscore--;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (desiredPosition.x === posX) score++;\r\n\t\t\t\t\t\t\t\tif (desiredPosition.y === posY) score++;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfinalPositions.push({\r\n\t\t\t\t\t\t\t\ttype: numberPositionType,\r\n\t\t\t\t\t\t\t\tleft: possiblePositionsLT[posX],\r\n\t\t\t\t\t\t\t\ttop: possiblePositionsLT[posY],\r\n\t\t\t\t\t\t\t\tscore: score,\r\n\t\t\t\t\t\t\t\tisNumberCloseToTooltip: intersection !== null\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tfinalPositions.sort((a, b) => {\r\n\t\t\treturn b.score - a.score;\r\n\t\t});\r\n\r\n\r\n\t\tif (finalPositions.length) {\r\n\t\t\tthis.currentNumberPos = finalPositions[0];\r\n\t\t\tthis.currentNumberPos.numberPosCoef = numberPosCoef;\r\n\t\t\tthis.currentNumberPos.indention = indention;\r\n\t\t\tthis.currentNumberPos.numberLayerHalfSize = numberLayerHalfSize;\r\n\r\n\t\t\tif (this.isFixedPos) {\r\n\t\t\t\tthis.currentNumberPos.top += document.documentElement.scrollTop;\r\n\t\t\t\tthis.currentNumberPos.left += document.documentElement.scrollLeft;\r\n\t\t\t}\r\n\r\n\t\t\t/*if (numberSizeCoefCssVar >= 1 && this.currentNumberPos.isNumberCloseToTooltip) {\r\n\t\t\t\tnumberSizeCoefCssVar = 0.9;\r\n\t\t\t\tif (this.options.dpDebugEn) console.log('[dpit] NUMBER POS: Too close to tooltip');\r\n\t\t\t\t//updateCssVar('--num-size-coef', numberSizeCoefCssVar);\r\n\t\t\t\tthis.actualizeNumberBB();\r\n\t\t\t}*/\r\n\r\n\t\t\tif (desiredPosition.onTooltip) {\r\n\t\t\t\tthis.numberEl.classList.add(CLASSES_CORE.number + MODIFIERS.onTooltip);\r\n\t\t\t}\r\n\r\n\t\t\t$(this.numberEl).offset({ top: this.currentNumberPos.top, left: this.currentNumberPos.left });\r\n\t\t\tthis.actualizeNumberBB();\r\n\t\t} else {\r\n\t\t\t// was not found\r\n\t\t\tconst nextRunParams = this.getPlaceNumberRepetitionParams(desiredPosition, iterations);\r\n\t\t\tif (iterations <= nextRunParams.maxIterations) {\r\n\t\t\t\tthis.placeNumber(targetBB, tooltipPos, nextRunParams.desiredPosition, useLastPosition, ++iterations, nextRunParams.enableIndentation);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.numberEl.classList.add(CLASSES_CORE.number + MODIFIERS.hidden);\r\n\t\t\t\tthis.currentNumberPos = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\tisNumberCloseToTooltip(numberPositionType, numberBB, tooltipPosBase, isOnTooltip) {\r\n\r\n\t\tconst _tooltipPosBase = isOnTooltip ? getReverseBasePos(tooltipPosBase) : tooltipPosBase;\r\n\t\tif (_tooltipPosBase === numberPositionType.x) {\r\n\t\t\tif (isOnTooltip) {\r\n\t\t\t\tif (this.tooltipBB.top + numberBB.height > this.targetBB.top) return true;\r\n\t\t\t\telse if (this.tooltipBB.bottom - numberBB.height < this.targetBB.bottom) return true;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.tooltipBB.top - numberBB.height < this.targetBB.top) return true;\r\n\t\t\t\telse if (this.tooltipBB.bottom + numberBB.height > this.targetBB.bottom) return true;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (_tooltipPosBase === numberPositionType.y) {\r\n\t\t\tif (isOnTooltip) {\r\n\t\t\t\tif (this.tooltipBB.left + numberBB.width > this.targetBB.left) return true;\r\n\t\t\t\telse if (this.tooltipBB.right - numberBB.width < this.targetBB.right) return true;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.tooltipBB.left - numberBB.width < this.targetBB.left) return true;\r\n\t\t\t\telse if (this.tooltipBB.right + numberBB.width > this.targetBB.right) return true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n\tadjustTooltipTopAfterHeightChange(oldTop, oldHeight, tooltipPos, tooltipEl, middleHeightCoef = 0.5) {\r\n\t\tthis.actualizeTooltipScrollBars();\r\n\t\tconst newHeight = $(tooltipEl).height();\r\n\t\tconst heightDiff = newHeight - oldHeight;\r\n\t\tlet newTop = null;\r\n\t\tif (newHeight !== oldHeight) {\r\n\r\n\t\t\tconst isLeftOrRight = ['left', 'right'].includes(tooltipPos.base);\r\n\t\t\tif (isLeftOrRight) {\r\n\t\t\t\tswitch (tooltipPos.align) {\r\n\t\t\t\t\tcase 'middle': newTop = oldTop - heightDiff * middleHeightCoef; break;\r\n\t\t\t\t\tcase 'bottom': newTop = oldTop - heightDiff; break;\r\n\t\t\t\t}\r\n\t\t\t} else if (['top', 'center'].includes(tooltipPos.base)) {\r\n\t\t\t\tnewTop = oldTop - heightDiff;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn newTop;\r\n\t}\r\n\r\n\r\n\r\n\tfixOverWinBoardTopForFixedElements(containerBB) {\r\n\t\tconst topBkp = getCssValFloat(this.tooltipEl, 'top');\r\n\t\tconst tooltipHeightBkp = $(this.tooltipEl).height();\r\n\t\tlet tooltipTextHeight = $(this.tooltipTextEl).height();\r\n\r\n\t\tconst textLayerMaxHeight = Math.floor(Math.max(tooltipTextHeight - (containerBB.top + 1 - this.tooltipBB.top), SIZE_LIMITS_PX.minTooltipContentHeightFixedPos));\r\n\t\tthis.tooltipTextEl.style.height = textLayerMaxHeight + 'px';\r\n\r\n\t\tconst newTop = this.adjustTooltipTopAfterHeightChange(topBkp, tooltipHeightBkp, this.tooltipPos, this.tooltipEl, 1);\r\n\t\tif (newTop) {\r\n\t\t\tthis.tooltipEl.style.top = newTop + 'px';\r\n\t\t\t//this.tooltipEl.style.top = Math.max(this.docBoardBB.top - this.targetBB.top + 1, newTop) + 'px';\r\n\t\t\tthis.actualizeTooltipScrollBars();\r\n\t\t}\r\n\t\tlet isOverTop = this.tooltipBB.top < containerBB.top;\r\n\t\t/*if (isOverTop) {\r\n\t\t\t$(this.tooltipEl).offset({ top: topBkp });\r\n\t\t\tthis.tooltipTextEl.style.height = '';\r\n\t\t\tthis.actualizeTooltipScrollBars();\r\n\t\t\tisOverTop = this.tooltipBB.top < containerBB.top;\r\n\t\t}*/\r\n\t\treturn isOverTop;\r\n\t}\r\n\r\n\r\n\tfixOverWinBoardBottomForFixedElements(containerBB) {\r\n\t\t//console.log('fix over BOTTOM (tooltip on BOTTOM)');\r\n\t\tconst tooltipTextHeight = $(this.tooltipTextEl).height();\r\n\t\tconst textLayerMaxHeight = Math.floor(Math.max(tooltipTextHeight - (this.tooltipBB.bottom - containerBB.bottom + 1), SIZE_LIMITS_PX.minTooltipContentHeightFixedPos));\r\n\r\n\r\n\r\n\t\tthis.tooltipTextEl.style.height = textLayerMaxHeight + 'px';\r\n\t\tthis.actualizeTooltipScrollBars();\r\n\t\tlet isOverBottom = this.tooltipBB.bottom > containerBB.bottom;\r\n\t\tif (isOverBottom) {\r\n\t\t\tthis.tooltipTextEl.style.height = '';\r\n\t\t\tthis.actualizeTooltipScrollBars();\r\n\t\t\tisOverBottom = this.tooltipBB.bottom > containerBB.bottom;\r\n\t\t}\r\n\t\treturn isOverBottom;\r\n\t}\r\n\r\n\tactualizeTextScrollbar() {\r\n\t\tif (hasElementScrollBarY(this.tooltipTextEl)) {\r\n\t\t\tthis.tooltipTextEl.classList.add(CLASSES_CORE.hasScrollBar);\r\n\t\t} else {\r\n\t\t\tthis.tooltipTextEl.classList.remove(CLASSES_CORE.hasScrollBar);\r\n\t\t}\r\n\t}\r\n\r\n\tactualizeTooltipScrollBars() {\r\n\t\tthis.actualizeBulletScrollBar(false);\r\n\t\tthis.actualizeTextScrollbar();\r\n\t\tthis.actualizeTooltipBB();\r\n\t}\r\n\r\n\tfixPositionOutOfTheBoard(boardBB) {\r\n\t\t//let res = false;\r\n\t\tif (this.tooltipBB.bottom > boardBB.bottom && ['bottom', 'left', 'right', 'center'].includes(this.tooltipPos.base)) { // add center\r\n\t\t\t/*res |= */this.fixOverWinBoardBottomForFixedElements(boardBB);\r\n\t\t}\r\n\t\tif (this.tooltipBB.top < boardBB.top && ['top', 'left', 'right', 'center'].includes(this.tooltipPos.base)) { // add center\r\n\t\t\t/*res |= */this.fixOverWinBoardTopForFixedElements(boardBB);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n\tfixPositionOutOfTheWindowForNotFixedElements() {\r\n\t\tlet res = false;\r\n\t\tthis.actualizeFlier(true);\r\n\t\tif (this.flierBB) {\r\n\t\t\tif (this.flierBB.height > this.winBB.height) {\r\n\t\t\t\tconst topBkp = $(this.tooltipEl).offset().top;\r\n\t\t\t\tconst tooltipHeightBkp = $(this.tooltipEl).height();\r\n\t\t\t\t//console.log('fix over BOTTOM (tooltip on BOTTOM)');\r\n\t\t\t\tconst tooltipTextHeight = $(this.tooltipTextEl).height();\r\n\t\t\t\tif (tooltipTextHeight < SIZE_LIMITS_PX.minTooltipContentHeight) return;\r\n\t\t\t\tconst requiredHeightDiff = this.winBB.height - this.flierBB.height;\r\n\r\n\t\t\t\tconst textLayerMaxHeight = Math.max(tooltipTextHeight + requiredHeightDiff, SIZE_LIMITS_PX.minTooltipContentHeight);\r\n\r\n\t\t\t\tthis.tooltipTextEl.style.height = textLayerMaxHeight + 'px';\r\n\t\t\t\tconst newTop = this.adjustTooltipTopAfterHeightChange(topBkp, tooltipHeightBkp, this.tooltipPos, this.tooltipEl);\r\n\t\t\t\tif (newTop) {\r\n\t\t\t\t\t$(this.tooltipEl).offset({ top: Math.max(this.winBoardBB.top, newTop) });\r\n\t\t\t\t\tthis.actualizeTooltipScrollBars();\r\n\t\t\t\t}\r\n\t\t\t\tthis.actualizeFlier(true);\r\n\t\t\t}\r\n\t\t\tres = this.fixPositionOutOfTheBoard(this.docBoardBB);\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\r\n\tfixPositionOutOfTheWindow() {\r\n\t\tlet res = false;\r\n\t\tif (this.isFixedPos) res = this.fixPositionOutOfTheBoard(this.winBoardBB);\r\n\t\telse res = this.fixPositionOutOfTheWindowForNotFixedElements();\r\n\t\tthis.actualizeTextScrollbar();\r\n\t\treturn res;\r\n\t}\r\n\r\n\tgetDummyTooltipPosition() {\r\n\t\treturn { base: 'center', align: 'middle', width: this.tooltipBB.width };\r\n\t}\r\n\r\n\t/**\r\n\t\t * Determines the position of the tooltip based on the position precedence and availability\r\n\t\t * of screen space.\r\n\t\t *\r\n\t\t */\r\n\tdetermineTooltipPosition(targetItem, arrowSizes, isCrowdedPos) {\r\n\t\tif (this.isDummyMode()) return this.getDummyTooltipPosition();\r\n\t\tlet calculatedPosition = { base: 'bottom', align: 'middle', width: this.tooltipBB.width };\r\n\t\t//if (this.isStickyTheme()) return calculatedPosition;\r\n\t\tlet desiredTooltipPosition = targetItem.position;\r\n\r\n\t\tif (isCrowdedPos[desiredTooltipPosition]) {\r\n\t\t\tconst reversePosition = getReverseBasePos(desiredTooltipPosition);\r\n\t\t\tif (!isCrowdedPos[reversePosition])\r\n\t\t\t\tdesiredTooltipPosition = reversePosition;\r\n\t\t}\r\n\r\n\t\tconst possiblePositionsScoreInc = {};\r\n\t\tthis.options.positionPrecedence.forEach((position) => {\r\n\t\t\tpossiblePositionsScoreInc[position] = {\r\n\t\t\t\tscore: 0,\r\n\t\t\t\tdisabled: false\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\tlet tooltipSizesArrowInc = {\r\n\t\t\twidth: this.tooltipBB.width + arrowSizes.width / 2 + this.options.tooltipDistanceFromTarget,\r\n\t\t\theight: this.tooltipBB.height + arrowSizes.height / 2 + this.options.tooltipDistanceFromTarget\r\n\t\t};\r\n\r\n\t\tlet newTooltipWidthArrowInc = {\r\n\t\t\tleft: tooltipSizesArrowInc.width,\r\n\t\t\tright: tooltipSizesArrowInc.width\r\n\t\t};\r\n\t\tlet newTooltipWidth = {\r\n\t\t\tleft: null,\r\n\t\t\tright: null\r\n\t\t};\r\n\r\n\t\tconst maxArea = this.isFixedPos ? this.winBoardBB : this.docBoardBB;\r\n\r\n\t\tconst rightWidthArrowInc = maxArea.right - this.targetBB.right;\r\n\t\tconst rightWidth = rightWidthArrowInc - arrowSizes.width / 2 - this.options.tooltipDistanceFromTarget;\r\n\t\tif (rightWidth > this.minTooltipWidth && rightWidth < this.tooltipBB.width) {\r\n\t\t\tnewTooltipWidthArrowInc.right = rightWidthArrowInc;\r\n\t\t\tnewTooltipWidth.right = rightWidth;\r\n\t\t}\r\n\r\n\t\tconst leftWidthArrowInc = this.targetBB.left - maxArea.left;\r\n\t\tconst leftWidth = leftWidthArrowInc - arrowSizes.width / 2 - this.options.tooltipDistanceFromTarget;\r\n\t\tif (leftWidth > this.minTooltipWidth && leftWidth < this.tooltipBB.width) {\r\n\t\t\tnewTooltipWidthArrowInc.left = leftWidthArrowInc;\r\n\t\t\tnewTooltipWidth.left = leftWidth;\r\n\t\t}\r\n\r\n\t\tconst minTargetCenterHeight = (desiredTooltipPosition === 'center') ? this.targetBB.height : this.targetBB.height / 2;\r\n\r\n\r\n\t\t// BOTTOM - check for space below\r\n\t\tlet bottomSpaceHardLimit = 0;\r\n\t\tif (this.isFixedPos) {\r\n\t\t\tbottomSpaceHardLimit = this.winBoardBB.bottom - (this.targetBB.bottom + SIZE_LIMITS_PX.minTooltipHeight); // height can be decreased for fixed to minimal height\r\n\t\t}\r\n\t\telse {\r\n\t\t\tbottomSpaceHardLimit = this.docBoardBB.bottom - (this.targetBB.bottom + tooltipSizesArrowInc.height);\r\n\t\t}\r\n\r\n\t\tpossiblePositionsScoreInc['bottom'].disabled = bottomSpaceHardLimit < 0;\r\n\r\n\t\t// Score (soft limit)\r\n\t\tif (isCrowdedPos.bottom) possiblePositionsScoreInc['bottom'].score -= 1;\r\n\t\telse {\r\n\t\t\tlet bottomSpaceSoftLimit = this.isFixedPos\r\n\t\t\t\t? (this.winBoardBB.bottom - (this.targetBB.bottom + tooltipSizesArrowInc.height))\r\n\t\t\t\t: bottomSpaceHardLimit;\r\n\t\t\tpossiblePositionsScoreInc['bottom'].score += bottomSpaceSoftLimit / this.winBoardBB.height;\r\n\t\t}\r\n\r\n\t\t// TOP - check for space above\r\n\t\tlet topSpaceHardLimit = 0;\r\n\t\tif (this.isFixedPos) {\r\n\t\t\ttopSpaceHardLimit = (this.targetBB.top - SIZE_LIMITS_PX.minTooltipHeight) - this.winBoardBB.top; // height can be decreased for fixed to minimal height\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttopSpaceHardLimit = (this.targetBB.top - tooltipSizesArrowInc.height) - this.docBoardBB.top;\r\n\t\t}\r\n\t\tpossiblePositionsScoreInc['top'].disabled = topSpaceHardLimit < 0;\r\n\r\n\t\t// Score (soft limit)\r\n\t\tif (isCrowdedPos.bottom) possiblePositionsScoreInc['top'].score -= 1;\r\n\t\telse {\r\n\t\t\tlet topSpaceSoftLimit = this.isFixedPos\r\n\t\t\t\t? ((this.targetBB.top - tooltipSizesArrowInc.height) - this.winBoardBB.top)\r\n\t\t\t\t: topSpaceHardLimit;\r\n\t\t\tpossiblePositionsScoreInc['top'].score += topSpaceSoftLimit / this.winBoardBB.height;\r\n\t\t}\r\n\r\n\r\n\t\t/*\r\n\t\tpossiblePositionsScoreInc['top'].disabled = ( !this.isFixedPos && this.targetBB.top - tooltipSizesArrowInc.height < maxArea.top);\r\n\t\tif (isCrowdedPos.top) possiblePositionsScoreInc['top'].score -= 1;\r\n\t\telse{\r\n\t\t\tlet topBottomScore = 0;\r\n\t\t\tif (this.isFixedPos){\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\ttopBottomScore = (this.winBB.height - targetWithTooltipHeightTopBottom) / this.winBB.height;\r\n\t\t\t}\r\n\t\t\t\r\n\r\n\t\t\tpossiblePositionsScoreInc['top'].score += topBottomScore;\r\n\t\t}*/\r\n\r\n\t\t// Check for space to the right\r\n\t\tpossiblePositionsScoreInc['right'].disabled = (this.targetBB.right + newTooltipWidthArrowInc.right > maxArea.right + 1); // +1 i don't know why yet\r\n\t\tpossiblePositionsScoreInc['right'].score += (isCrowdedPos.right ? -1 : 1 - (newTooltipWidthArrowInc.right / (this.winBB.width - this.targetBB.right)));\r\n\r\n\t\t// Check for space to the left\r\n\t\tpossiblePositionsScoreInc['left'].disabled = (this.targetBB.left - newTooltipWidthArrowInc.left < maxArea.left);\r\n\t\tpossiblePositionsScoreInc['left'].score += (isCrowdedPos.left ? -1 : 1 - (newTooltipWidthArrowInc.left / this.targetBB.left));\r\n\r\n\t\t// Check for space inside\r\n\t\tpossiblePositionsScoreInc['center'].disabled = this.targetBB.width <= this.tooltipBB.width || minTargetCenterHeight <= this.tooltipBB.height;\r\n\t\tif (this.targetBB.width - this.tooltipBB.width < this.targetBB.height - this.tooltipBB.height) {\r\n\t\t\tpossiblePositionsScoreInc['center'].score += (this.targetBB.width - this.tooltipBB.width) / this.targetBB.width - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpossiblePositionsScoreInc['center'].score += (this.targetBB.height - this.tooltipBB.height) / this.targetBB.height - 0.5;\r\n\t\t}\r\n\r\n\t\tconst possiblePositionsScoreIncArr = [];\r\n\t\tObject.keys(possiblePositionsScoreInc).forEach((pos) => {\r\n\t\t\tif (!possiblePositionsScoreInc[pos].disabled) {\r\n\t\t\t\tpossiblePositionsScoreIncArr.push({\r\n\t\t\t\t\tposition: pos,\r\n\t\t\t\t\tscore: possiblePositionsScoreInc[pos].score\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\tpossiblePositionsScoreIncArr.sort((a, b) => {\r\n\t\t\treturn b.score - a.score;\r\n\t\t});\r\n\t\t//if (this.options.dpDebugEn) console.log(possiblePositionsScoreIncArr);\r\n\r\n\t\tconst possiblePositions = possiblePositionsScoreIncArr.map((val) => {\r\n\t\t\treturn val.position;\r\n\t\t});\r\n\t\t//if (this.options.dpDebugEn) console.log(possiblePositions);\r\n\r\n\t\t// @var {String} ex: 'right-aligned'\r\n\t\tvar desiredAlignment = (function (pos) {\r\n\t\t\tvar hyphenIndex = pos.indexOf('-');\r\n\t\t\tif (hyphenIndex !== -1) {\r\n\t\t\t\t// has alignment\r\n\t\t\t\treturn pos.substr(hyphenIndex);\r\n\t\t\t}\r\n\t\t\treturn '';\r\n\t\t})(desiredTooltipPosition || '');\r\n\r\n\t\t// strip alignment from position\r\n\t\tif (desiredTooltipPosition) {\r\n\t\t\t// ex: \"bottom-right-aligned\"\r\n\t\t\t// should return 'bottom'\r\n\t\t\tdesiredTooltipPosition = desiredTooltipPosition.split('-')[0];\r\n\t\t}\r\n\r\n\r\n\r\n\t\tif (possiblePositions.length) {\r\n\r\n\t\t\tif (desiredTooltipPosition !== 'auto') {\r\n\t\t\t\tconst desiredPosIdx = possiblePositions.indexOf(desiredTooltipPosition);\r\n\t\t\t\tif (desiredPosIdx > -1\r\n\t\t\t\t\t&& (\r\n\t\t\t\t\t\tpossiblePositionsScoreIncArr[desiredPosIdx].score > 0\r\n\t\t\t\t\t\t|| possiblePositionsScoreIncArr[0].score < 0\r\n\t\t\t\t\t\t|| desiredTooltipPosition === 'center')\r\n\t\t\t\t) {\r\n\t\t\t\t\tcalculatedPosition.base = desiredTooltipPosition;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tcalculatedPosition.base = possiblePositions[0];\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// Pick the first valid position, in order\r\n\t\t\t\tcalculatedPosition.base = possiblePositions[0];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// top and bottom alignments\r\n\t\tif (['top', 'bottom'].indexOf(calculatedPosition.base) !== -1) {\r\n\t\t\tcalculatedPosition.align = this.determineTooltipAlignmentX(\r\n\t\t\t\tthis.targetBB,\r\n\t\t\t\ttooltipSizesArrowInc.width,\r\n\t\t\t\tdesiredAlignment,\r\n\t\t\t\tmaxArea\r\n\t\t\t);\r\n\t\t}\r\n\t\t// left and right positions alignments\r\n\t\telse if (['left', 'right'].indexOf(calculatedPosition.base) !== -1) {\r\n\t\t\tif (newTooltipWidth[calculatedPosition.base]) calculatedPosition.width = newTooltipWidth[calculatedPosition.base];\r\n\r\n\t\t\tcalculatedPosition.align = this.determineTooltipAlignmentY(\r\n\t\t\t\tthis.targetBB,\r\n\t\t\t\tMath.min(tooltipSizesArrowInc.height, SIZE_LIMITS_PX.minTooltipHeight),\r\n\t\t\t\tdesiredAlignment,\r\n\t\t\t\tmaxArea\r\n\t\t\t);\r\n\r\n\t\t}\r\n\t\telse if (calculatedPosition.base === 'center') {\r\n\t\t\tcalculatedPosition.align = 'middle';\r\n\t\t}\r\n\r\n\t\t//if (this.options.dpDebugEn) console.log(calculatedPosition);\r\n\r\n\t\treturn calculatedPosition;\r\n\t}\r\n\r\n\r\n\r\n\tdetermineTooltipAlignmentX = (targetBB, tooltipWidth, desiredAlignment, maxArea) => {\r\n\t\tconst calculateTooltipAlignmentScore = (tooltipLeft, tooltipWidth, maxArea) => {\r\n\t\t\tconst tooltipRight = tooltipLeft + tooltipWidth;\r\n\t\t\tconst overLeft = maxArea.left - tooltipLeft;\r\n\t\t\tconst overRight = tooltipRight - maxArea.right;\r\n\t\t\tconst overLeftCoef = overLeft > 0 ? 2 : 0.5;\r\n\t\t\tconst overRightCoef = overRight > 0 ? 2 : 0.5;\r\n\t\t\tconst score = 1 - (overLeft * overLeftCoef + overRight * overRightCoef) / maxArea.width;\r\n\t\t\treturn score;\r\n\t\t};\r\n\r\n\t\tconst targetCenterX = targetBB.left + targetBB.width / 2;\r\n\t\tconst possibleXAlignments = [\r\n\t\t\t{ id: 'center', score: calculateTooltipAlignmentScore(targetCenterX - 0.5 * tooltipWidth, tooltipWidth, maxArea) },\r\n\t\t\t{ id: 'left', score: calculateTooltipAlignmentScore(targetBB.left, tooltipWidth, maxArea) },\r\n\t\t\t{ id: 'right', score: calculateTooltipAlignmentScore(targetBB.right - tooltipWidth, tooltipWidth, maxArea) },\r\n\t\t];\r\n\r\n\t\tpossibleXAlignments.sort((a, b) => {\r\n\t\t\treturn b.score - a.score;\r\n\t\t});\r\n\t\tlet res = 'center';\r\n\t\tif (possibleXAlignments.length) {\r\n\r\n\t\t\tif (possibleXAlignments.indexOf(desiredAlignment) !== -1) {\r\n\t\t\t\t// the desired alignment is valid\r\n\t\t\t\tres = desiredAlignment;\r\n\t\t\t} else {\r\n\t\t\t\t// pick the first valid position, in order\r\n\t\t\t\tres = possibleXAlignments[0].id;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this.options.dpDebugEn) console.log('[dpit] TOOLTIP X ALIGNMENT:', res, 'Data:', possibleXAlignments);\r\n\t\treturn res;\r\n\t};\r\n\r\n\r\n\tdetermineTooltipAlignmentY = (targetBB, tooltipHeight, desiredAlignment, maxArea) => {\r\n\t\tconst calculateTooltipAlignmentScore = (tooltipTop, tooltipHeight, maxArea) => {\r\n\t\t\tconst tooltipBottom = tooltipTop + tooltipHeight;\r\n\t\t\tconst overTop = maxArea.top - tooltipTop;\r\n\t\t\tconst overBottom = tooltipBottom - maxArea.bottom;\r\n\t\t\tconst overTopCoef = overTop > 0 ? 2 : 0.5;\r\n\t\t\tconst overBottomCoef = overBottom > 0 ? 2 : 0.5;\r\n\t\t\tconst score = 1 - (overTop * overTopCoef + overBottom * overBottomCoef) / maxArea.height;\r\n\t\t\treturn score;\r\n\t\t};\r\n\r\n\t\tconst targetCenterY = targetBB.top + targetBB.height / 2;\r\n\t\tconst possibleYAlignments = [\r\n\t\t\t{ id: 'middle', score: calculateTooltipAlignmentScore(targetCenterY - 0.5 * tooltipHeight, tooltipHeight, maxArea) },\r\n\t\t\t{ id: 'top', score: calculateTooltipAlignmentScore(targetBB.top, tooltipHeight, maxArea) },\r\n\t\t\t{ id: 'bottom', score: calculateTooltipAlignmentScore(targetBB.bottom - tooltipHeight, tooltipHeight, maxArea) },\r\n\t\t];\r\n\r\n\t\tpossibleYAlignments.sort((a, b) => {\r\n\t\t\treturn b.score - a.score;\r\n\t\t});\r\n\t\tlet res = 'middle';\r\n\t\tif (possibleYAlignments.length) {\r\n\r\n\t\t\tif (possibleYAlignments.indexOf(desiredAlignment) !== -1) {\r\n\t\t\t\t// the desired alignment is valid\r\n\t\t\t\tres = desiredAlignment;\r\n\t\t\t} else {\r\n\t\t\t\t// pick the first valid position, in order\r\n\t\t\t\tres = possibleYAlignments[0].id;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this.options.dpDebugEn) console.log('[dpit] TOOLTIP Y ALIGNMENT:', res, 'Data:', possibleYAlignments);\r\n\t\treturn res;\r\n\t};\r\n\r\n\r\n\tactualizeOverSizeRadiuses(layerElement, baseLayerClass = CLASSES_CORE.highlight) {\r\n\t\tif (layerElement) {\r\n\t\t\tlayerElement.classList.remove(\r\n\t\t\t\tbaseLayerClass + MODIFIERS.overLeft,\r\n\t\t\t\tbaseLayerClass + MODIFIERS.overTop,\r\n\t\t\t\tbaseLayerClass + MODIFIERS.overRight,\r\n\t\t\t\tbaseLayerClass + MODIFIERS.overBottom,\r\n\t\t\t);\r\n\t\t\tif (this.targetBB.left <= 0) {\r\n\t\t\t\tlayerElement.classList.add(baseLayerClass + MODIFIERS.overLeft);\r\n\t\t\t}\r\n\t\t\tif (this.targetBB.top <= 0) {\r\n\t\t\t\tlayerElement.classList.add(baseLayerClass + MODIFIERS.overTop);\r\n\t\t\t}\r\n\t\t\tif (this.targetBB.right >= this.docBB.right) {\r\n\t\t\t\tlayerElement.classList.add(baseLayerClass + MODIFIERS.overRight);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.targetBB.bottom >= this.docBB.bottom) {\r\n\t\t\t\tlayerElement.classList.add(baseLayerClass + MODIFIERS.overBottom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tmoveLayer2Target = (layer) => {\r\n\t\tif (layer) {\r\n\t\t\tif (this.isFixedPos) {\r\n\t\t\t\tlayer.classList.add(CLASSES_CORE.fixedPosition);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tlayer.classList.remove(CLASSES_CORE.fixedPosition);\r\n\t\t\t}\r\n\t\t\tif (this.targetBB) DpitBB.toElement(layer, this.targetBB);\r\n\t\t}\r\n\t};\r\n\r\n\tplaceTargetPosBasedLayers(actualizeOverSizeRadiuses = true) {\r\n\t\tthis.moveLayer2Target(this.tooltipRefEl);\r\n\t\tthis.moveLayer2Target(this.highlightEl);\r\n\t\tif (actualizeOverSizeRadiuses) this.actualizeOverSizeRadiuses(this.highlightEl, CLASSES_CORE.highlight);\r\n\t}\r\n\r\n\tactualizeUserInteraction(stepItem) {\r\n\t\tif (this.userInteraction) {\r\n\t\t\tthis.userInteraction.updateDisableInteractionLayer(\r\n\t\t\t\tstepItem ? stepItem : this.stepItem, this.wrapEl,\r\n\t\t\t\tthis.moveLayer2Target\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tisUserInteractionEnabled() {\r\n\t\treturn !this.userInteraction?.disableInteractionLayer;\r\n\t}\r\n\r\n\tactualizeTargetItem = (stepItem, isInit = false) => {\r\n\t\tthis.isTargetInMobileMenu = false;\r\n\t\tthis.isTargetMobileAlt = false;\r\n\t\tif (stepItem) {\r\n\r\n\t\t\tthis.isTargetMobileAlt = this.isStepMobileAlt(stepItem);\r\n\t\t\t// Set stepItem.element\r\n\t\t\tif (this.isTargetMobileAlt) {\r\n\t\t\t\tstepItem.element = documentQuerySelectorSafe(stepItem.alt_mobile_selector);\r\n\t\t\t}\r\n\t\t\telse if (stepItem.selector) {\r\n\t\t\t\tstepItem.element = documentQuerySelectorSafe(stepItem.selector);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tstepItem.element = null;\r\n\t\t\t}\r\n\t\t\t// Skip not visible steps\r\n\t\t\tif (!isInit) {\r\n\t\t\t\tthis.isTargetInMobileMenu = this.isStepItemInMobileMenu(stepItem);\r\n\t\t\t\t//this.updateIterateAfter(stepItem);\r\n\t\t\t\tif (this.userInteraction) {\r\n\t\t\t\t\tthis.userInteraction.update(stepItem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tclearMobileMenuTarget() {\r\n\t\tthis.isTargetInMobileMenu = false;\r\n\t\tthis.isTargetMobileAlt = false;\r\n\t}\r\n\r\n\tisStepMobileAlt(stepItem) {\r\n\t\treturn this.isMobileSize && stepItem.alt_mobile_selector;\r\n\t}\r\n\r\n\tisStepItemInMobileMenu(stepItem) {\r\n\t\treturn this.isStepMobileAlt(stepItem) && stepItem.is_in_mobile_menu === '1';\r\n\t}\r\n\r\n\tskipCurrentStep() {\r\n\t\t// skipping step\r\n\t\tif (!this.isBackward) {\r\n\t\t\t// skipping forward\r\n\t\t\tif (this.stepIdx < this.stepItems.length - 1) {\r\n\t\t\t\tif (this.stepIdx === 0) this.visibleFirstStepShouldBeEvaluated = true;\r\n\t\t\t\tthis.goToNextStep();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.visibleLastStepShouldBeEvaluated = true;\r\n\t\t\t\tthis.goToPrevStep();\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// skipping backward\r\n\t\t\tif (this.stepIdx > 0) {\r\n\t\t\t\tif (this.stepIdx === this.stepItems.length - 1) this.visibleLastStepShouldBeEvaluated = true;\r\n\t\t\t\tthis.goToPrevStep();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.visibleFirstStepShouldBeEvaluated = true;\r\n\t\t\t\tthis.goToNextStep();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcheckTargetElValidity() {\r\n\t\t//const isElementVisible = isElementVisibleParentInc(this.stepItem.element);\r\n\r\n\t\tconst skipStep = this.shouldBeStepSkipped(this.stepItem, this.isTargetInMobileMenu, true);\r\n\t\tthis.setNotVisibleRefBullet(this.stepItem.step, skipStep);\r\n\t\tif (skipStep) {\r\n\t\t\tthis.skipCurrentStep();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis.actualizeDummyMode();\r\n\r\n\t\tif (this.visibleLastStepShouldBeEvaluated) {\r\n\t\t\tthis.visibleLastStepIdx = this.stepIdx;\r\n\t\t\tthis.visibleLastStepShouldBeEvaluated = false;\r\n\t\t}\r\n\t\tif (this.visibleFirstStepShouldBeEvaluated) {\r\n\t\t\tthis.visibleFirstStepIdx = this.stepIdx;\r\n\t\t\tthis.visibleFirstStepShouldBeEvaluated = false;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\thasTargetItemHiddenOverlay(item) {\r\n\t\tif (item) {\r\n\t\t\treturn item\r\n\t\t\t\t&& item.element\r\n\t\t\t\t&& item.enable_interaction.val == '1'\r\n\t\t\t\t&& !this.isDummyMode()\r\n\t\t\t\t&& item.enable_interaction.ext?.hide_overlay == '1';\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n\tisHideNextByCurrentStepMeta() {\r\n\t\treturn this.stepItem\r\n\t\t\t&& this.stepItem.element\r\n\t\t\t&& this.stepItem.enable_interaction.val == '1'\r\n\t\t\t//&& !this.this.stepItem.isDummyElement\r\n\t\t\t&& this.stepItem.enable_interaction.ext?.hide_next_btn == '1';\r\n\t}\r\n\r\n\r\n\tgetIsMobileSize(breakPointOverride = null, winBB = this.winBB) {\r\n\t\treturn this.mainCfg.mobile_break_points && (winBB.width <= (breakPointOverride ? breakPointOverride : this.mainCfg.mobile_break_points.mobile));\r\n\t}\r\n\r\n\tenableStepSkippingWhenNotFoundRefEl() {\r\n\t\tthis.disabledStepSkippingWhenNotFoundRefEl = false;\r\n\t}\r\n\r\n\tdisableStepSkippingWhenNotFoundRefEl() {\r\n\t\tthis.disabledStepSkippingWhenNotFoundRefEl = true;\r\n\t}\r\n\r\n\tshouldBeStepSkipped(stepItem, isTargetInMobileMenu, isElementVisible = true) {\r\n\t\tlet skipStep = false;\r\n\t\tif (this.options.skip_absent_ref_el && !this.disabledStepSkippingWhenNotFoundRefEl\r\n\r\n\t\t\t&& (stepItem.selector || isTargetInMobileMenu)\r\n\t\t\t&& (!stepItem.element || (!isElementVisible && !isTargetInMobileMenu))\r\n\t\t) {\r\n\t\t\tskipStep = true;\r\n\t\t}\r\n\t\treturn skipStep;\r\n\r\n\t}\r\n\r\n\tisElementInsideDocBoard(element) {\r\n\t\tif (this.docBB && element) {\r\n\t\t\tconst bb = DpitBB.fromElement(element);\r\n\t\t\treturn DpitBB.intersect(bb, this.docBB) !== null;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tgetHighlightLayerClassName() {\r\n\t\tconst res = [CLASSES_CORE.highlight];\r\n\t\tif (typeof (this.options.highlightClass) === 'string' && this.options.highlightClass) {\r\n\t\t\tres.push(this.options.highlightClass);\r\n\t\t}\r\n\t\treturn res.join(' ');\r\n\t}\r\n\r\n\tgetStartStepIdx() {\r\n\t\tif (this.visibleFirstStepIdx) return this.visibleFirstStepIdx;\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tgetEndStepIdx() {\r\n\t\tif (this.visibleLastStepIdx) return this.visibleLastStepIdx;\r\n\t\treturn this.stepItems.length - 1;\r\n\t}\r\n\r\n\tgetStepContent(stepItem) {\r\n\r\n\t\t/*return this.tooltipTextEl.innerHTML = `What is Lorem Ipsum?\r\n\t\tLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\r\n\t\tWhy do we use it?\r\n\t\tIt is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).\r\n\t\tWhere does it come from?\r\n\t\tContrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of \"de Finibus Bonorum et Malorum\" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, \"Lorem ipsum dolor sit amet..\", comes from a line in section 1.10.32.\r\n\t\tThe standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from \"de Finibus Bonorum et Malorum\" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.\r\n\t\tWhere can I get some?\r\n\t\tThere are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.`;\r\n*/\r\n\t\treturn stepItem ? stepItem.intro_proc || stepItem.intro : '';\r\n\t}\r\n\r\n\tsetTooltipContent(stepItem) {\r\n\t\tthis.tooltipTextEl.innerHTML = this.getStepContent(stepItem);\r\n\t}\r\n\r\n\r\n\tactualizeButtonFocus = (isFirstStep, isLastStep) => {\r\n\t\tif (this.options.controlsAutoFocusEnable) {\r\n\t\t\tlet elementToFocusOn = this.isBackward ? this.buttonPrevEl : this.buttonNextEl;\r\n\t\t\tif (isLastStep) elementToFocusOn = this.buttonCancelEl;\r\n\t\t\telse if (isFirstStep && this.stepItems.length > 1) elementToFocusOn = this.buttonNextEl;\r\n\r\n\t\t\tif (elementToFocusOn && elementToFocusOn !== document.activeElement) {\r\n\t\t\t\telementToFocusOn.focus({ preventScroll: true, focusVisible: false });\r\n\t\t\t\tif (this.options.dpDebugEn) {\r\n\t\t\t\t\tconst $buttonTextEl = $(elementToFocusOn).children('.' + CLASSES_CHILD.buttonText);\r\n\t\t\t\t\tif ($buttonTextEl.length)\r\n\r\n\t\t\t\t\t\tconsole.log('[dpit] AUTO FOCUS: ' + $buttonTextEl.text(), elementToFocusOn);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tactivateBullet(idx) {\r\n\t\t$(this.bulletsLayer).find('li.active').removeClass('active');\r\n\t\t$(this.bulletsLayer).find(`li[data-step-number=\"${idx}\"]`).addClass('active').attr('aria-selected', 'true');\r\n\t}\r\n\r\n\tsetNotVisibleRefBullet(idx, notVisible = true) {\r\n\t\tif (notVisible) $(this.bulletsLayer).find(`li[data-step-number=\"${idx}\"]`).addClass('not-visible-ref');\r\n\t\telse {\r\n\t\t\t$(this.bulletsLayer).find(`li[data-step-number=\"${idx}\"]`).removeClass('not-visible-ref');\r\n\t\t\tif (this.visibleLastStepIdx && idx > this.visibleLastStepIdx) {\r\n\t\t\t\tthis.visibleLastStepIdx = idx;\r\n\t\t\t}\r\n\t\t\tif (this.visibleFirstStepIdx && idx < this.visibleFirstStepIdx) {\r\n\t\t\t\tthis.visibleFirstStepIdx = idx;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetNotVisibleStepCnt() {\r\n\t\treturn $(this.bulletsLayer).find('li.not-visible-ref').length;\r\n\t}\r\n\r\n\tactualizeProgressBar() {\r\n\t\tconst isProgressBarEnabled = this.isProgressBarEnabled();\r\n\t\tif (isProgressBarEnabled) {\r\n\t\t\tshowElement(this.progressLayer);\r\n\t\t\tconst progressVal = this.getProgressInPercent();\r\n\t\t\tthis.progressBarLayer.style.cssText = 'width:' + progressVal + '%;';\r\n\t\t\tthis.progressBarLayer.setAttribute('aria-valuenow', progressVal);\r\n\t\t}\r\n\t\tthis.actualizeLayer(isProgressBarEnabled, this.progressLayer);\r\n\t}\r\n\r\n\tisBulletNavig() {\r\n\t\treturn this.options.showBullets && this.stepItems.length > 1;\r\n\t}\r\n\r\n\tactualizeBulletsNavigActiveItem() {\r\n\r\n\t\tif (this.options.disable_navigation_by_bullets) $(this.bulletsLayer).addClass(CLASSES_CORE.bullets + '--disabled');\r\n\t\telse $(this.bulletsLayer).removeClass(CLASSES_CORE.bullets + '--disabled');\r\n\r\n\t\tconst isBulletsNavigEnabled = this.isBulletNavig();\r\n\t\tif (isBulletsNavigEnabled) {\r\n\t\t\t// Adjusting bullets - skipped steps\r\n\t\t\tif (this.visibleLastStepIdx) {\r\n\t\t\t\tfor (let i = this.visibleLastStepIdx + 1; i < this.stepItems.length; i++) {\r\n\t\t\t\t\tthis.setNotVisibleRefBullet(i + 1, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.visibleFirstStepIdx) {\r\n\t\t\t\tfor (let i = this.visibleFirstStepIdx - 1; i >= 0; i--) {\r\n\t\t\t\t\tthis.setNotVisibleRefBullet(i + 1, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//change active bullet\r\n\t\t\tif (this.stepItem) this.activateBullet(this.stepItem.step);\r\n\t\t}\r\n\t\tthis.actualizeLayer(isBulletsNavigEnabled, this.bulletsLayer);\r\n\t}\r\n\r\n\tactualizeBulletScrollBar(autoScroll = true) {\r\n\t\tlet res = false;\r\n\t\tif (this.listInBulletsNavigLayer) {\r\n\t\t\tif (hasElementScrollBarX(this.listInBulletsNavigLayer)) {\r\n\t\t\t\tif (!this.listInBulletsNavigLayer.classList.contains(CLASSES_CORE.hasScrollBar)) {\r\n\t\t\t\t\tres = true;\r\n\t\t\t\t}\r\n\t\t\t\tthis.listInBulletsNavigLayer.classList.add(CLASSES_CORE.hasScrollBar);\r\n\t\t\t\tif (autoScroll) {\r\n\t\t\t\t\tconst activeEl = this.listInBulletsNavigLayer.querySelector('li.active');\r\n\t\t\t\t\tif (activeEl) {\r\n\t\t\t\t\t\tscrollIntoView(activeEl, {\r\n\t\t\t\t\t\t\tvalidTarget: target => target === this.listInBulletsNavigLayer,\r\n\t\t\t\t\t\t\ttime: 300\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.listInBulletsNavigLayer.classList.contains(CLASSES_CORE.hasScrollBar)) {\r\n\t\t\t\t\tres = true;\r\n\t\t\t\t}\r\n\t\t\t\tthis.listInBulletsNavigLayer.classList.remove(CLASSES_CORE.hasScrollBar);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\tactualizeSkipButton(buttonSkipLabel) {\r\n\t\t//this.buttonCancelEl.setAttribute('title', '');\r\n\t\tthis.buttonSkipTextLayer.innerHTML = buttonSkipLabel;\r\n\t}\r\n\r\n\r\n\r\n\tactualizeButtons() {\r\n\t\t// Buttons\r\n\t\tlet isHideNextByCurrentStepMeta = this.isHideNextByCurrentStepMeta(this.step);\r\n\t\tconst isLastStep = this.stepIdx >= this.getEndStepIdx();\r\n\t\tconst isFirstStep = this.stepIdx <= this.getStartStepIdx();\r\n\r\n\t\tconst skipTourForFutureVisitsClass = classNames({\r\n\t\t\t[CLASSES_CORE.checkboxLabel]: true,\r\n\t\t\t[CLASSES_CORE.hiddenHard]: !this.isAllowFutureVisitsCheckboxEnabled || !this.isVisitCountAffectedTrigger || (!isFirstStep && !isLastStep),\r\n\t\t});\r\n\t\tthis.skipTourForFutureVisitsLabelEl.className = skipTourForFutureVisitsClass;\r\n\r\n\t\tconst buttonPrevClass = classNames({\r\n\t\t\t[this.options.buttonClass]: true,\r\n\t\t\t[CLASSES_CORE.buttonPrev]: true,\r\n\t\t\t[CLASSES_CORE.hiddenHard]: this.options.hide_previous_step_button,\r\n\t\t\t[CLASSES_CORE.disabled]: isFirstStep,\r\n\t\t\t[CLASSES_CORE.noTrans]: true,\r\n\t\t});\r\n\t\tconst buttonNextClass = classNames({\r\n\t\t\t[this.options.buttonClass]: true,\r\n\t\t\t[CLASSES_CORE.buttonNext]: true,\r\n\t\t\t[this.options.buttonClass + MODIFIERS.full]: this.options.hide_previous_step_button,\r\n\t\t\t[CLASSES_CORE.disabled]: isLastStep || isHideNextByCurrentStepMeta,\r\n\t\t\t[CLASSES_CORE.noTrans]: true,\r\n\t\t});\r\n\t\tconst buttonSkipClass = classNames({\r\n\t\t\t[this.options.buttonClass]: true,\r\n\t\t\t[CLASSES_CORE.buttonSkip]: true,\r\n\t\t\t[CLASSES_CORE.hiddenHard]: this.options.hide_skip_button && !isLastStep,\r\n\t\t\t[CLASSES_CORE.buttonDone]: isLastStep,\r\n\t\t\t[CLASSES_CORE.noTrans]: true,\r\n\t\t});\r\n\t\tconst buttonSkipLabel = isLastStep ? this.options.labeling.doneLabel : this.options.labeling.skipLabel;\r\n\r\n\t\tif (this.buttonPrevEl) {\r\n\t\t\tthis.buttonPrevEl.className = buttonPrevClass;\r\n\t\t}\r\n\r\n\t\tif (this.buttonNextEl) {\r\n\t\t\tthis.buttonNextEl.className = buttonNextClass;\r\n\t\t}\r\n\r\n\t\tif (this.buttonCancelEl && this.buttonSkipTextLayer) {\r\n\t\t\tthis.buttonCancelEl.className = buttonSkipClass;\r\n\t\t\tthis.actualizeSkipButton(buttonSkipLabel, isLastStep);\r\n\t\t}\r\n\t\t$(`.${CLASSES_CORE.button}`).removeClass(CLASSES_CORE.noTrans);\r\n\t\tthis.actualizeButtonFocus(isFirstStep, isLastStep);\r\n\t}\r\n\r\n\r\n\tonNavigBulletClick(event) {\r\n\t\tif (event && event.target && !this.options.disable_navigation_by_bullets) {\r\n\t\t\tthis.goToStepByStepLabel(event.target.closest('li').getAttribute('data-step-number'));\r\n\t\t}\r\n\t}\r\n\r\n\tcreateButtonContent(textContent) {\r\n\t\tlet buttonContentLayer = document.createElement('div');\r\n\t\tbuttonContentLayer.className = CLASSES_CHILD.buttonText;\r\n\t\tbuttonContentLayer.innerHTML = textContent;\r\n\t\treturn buttonContentLayer;\r\n\t}\r\n\r\n\tloadIcons() {\r\n\t\tthis.loadArrowButtonIcons(this.options.labeling.button_arrows);\r\n\t\tthis.loadCancelButtonIcons(this.options.labeling.button_cancel_ico);\r\n\t}\r\n\r\n\tloadArrowButtonIcons(iconOption) {\r\n\t\tswitch (iconOption) {\r\n\t\t\tcase 'vector': {\r\n\r\n\t\t\t\tif (!this.arrowIcoWrapData) {\r\n\t\t\t\t\tthis.arrowIcoWrapData = this.appendIcoSpacerToPrevNextButtons(CLASSES_CHILD.buttonIcoWrap);\r\n\t\t\t\t\timport(/* webpackChunkName: \"dpitButtonIcoPrevNext\" */ './dpitButtonIcoPrevNext').then(svgLoader => {\r\n\t\t\t\t\t\tconst svgStringPrevNext = svgLoader.default(CLASSES_CHILD.buttonIco);\r\n\t\t\t\t\t\tif (svgStringPrevNext) {\r\n\t\t\t\t\t\t\t$(svgStringPrevNext).appendTo(this.arrowIcoWrapData.next);\r\n\t\t\t\t\t\t\t$(svgStringPrevNext).prependTo(this.arrowIcoWrapData.prev);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.showLayers(this.arrowIcoWrapData?.prev, this.arrowIcoWrapData?.next);\r\n\t\t\t\t\thideElement(this.arrowButtonSpacersData?.prev, false);\r\n\t\t\t\t\thideElement(this.arrowButtonSpacersData?.next, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'text': {\r\n\t\t\t\tconst textInButtonClass = CLASSES_CHILD.buttonIcoWrap;\r\n\t\t\t\tconst textIconClass = textInButtonClass + ' ' + textInButtonClass + MODIFIERS.symbol;\r\n\t\t\t\t$('').appendTo(this.buttonNextEl);\r\n\t\t\t\t$('').prependTo(this.buttonPrevEl);\r\n\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault: {\r\n\t\t\t\tif (!this.arrowButtonSpacersData) {\r\n\t\t\t\t\tthis.arrowButtonSpacersData = this.appendIcoSpacerToPrevNextButtons(CLASSES_CHILD.buttonSpacer);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.showLayers(this.arrowButtonSpacersData?.prev, this.arrowButtonSpacersData?.next);\r\n\t\t\t\t}\r\n\t\t\t\thideElement(this.arrowIcoWrapData?.prev, false);\r\n\t\t\t\thideElement(this.arrowIcoWrapData?.next, false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tloadCancelButtonIcons(iconOption) {\r\n\t\tswitch (iconOption) {\r\n\t\t\tcase 'vector': {\r\n\t\t\t\thideElement(this.cancelButtonSpacerEl, false);\r\n\t\t\t\tif (!this.cancelButtonIcoWrapEl) {\r\n\t\t\t\t\tthis.cancelButtonIcoWrapEl = this.appendIcoSpacerToCancelButton(CLASSES_CHILD.buttonIcoWrap);\r\n\t\t\t\t\timport(/* webpackChunkName: \"dpitButtonIcoCancel\" */ './dpitButtonIcoCancel').then(svgLoader => {\r\n\t\t\t\t\t\tconst svgStringCancel = svgLoader.default(CLASSES_CHILD.buttonIco);\r\n\t\t\t\t\t\tif (svgStringCancel) {\r\n\t\t\t\t\t\t\t$(svgStringCancel).appendTo(this.cancelButtonIcoWrapEl);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tshowElement(this.cancelButtonIcoWrapEl);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'text': {\r\n\t\t\t\tconst textIconClass = CLASSES_CHILD.buttonIcoWrap + ' ' + CLASSES_CHILD.buttonIcoWrap + MODIFIERS.symbol;\r\n\t\t\t\t$('').prependTo(this.buttonCancelEl);\r\n\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault: {\r\n\t\t\t\thideElement(this.cancelButtonIcoWrapEl, false);\r\n\t\t\t\tif (!this.cancelButtonSpacerEl) {\r\n\t\t\t\t\tthis.cancelButtonSpacerEl = this.appendIcoSpacerToCancelButton(CLASSES_CHILD.buttonSpacer);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tshowElement(this.cancelButtonSpacerEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tappendIcoSpacerToPrevNextButtons(spacerClass) {\r\n\t\tconst buttonSpacers = {\r\n\t\t\tnext: document.createElement('div'),\r\n\t\t\tprev: document.createElement('div')\r\n\t\t};\r\n\t\tbuttonSpacers.next.className = spacerClass;\r\n\t\t$(buttonSpacers.next).appendTo(this.buttonNextEl);\r\n\r\n\t\tbuttonSpacers.prev.className = spacerClass;\r\n\t\t$(buttonSpacers.prev).prependTo(this.buttonPrevEl);\r\n\r\n\t\treturn buttonSpacers;\r\n\t}\r\n\r\n\tappendIcoSpacerToCancelButton(spacerClass) {\r\n\t\tconst cancelButtonSpacer = document.createElement('div');\r\n\t\tcancelButtonSpacer.className = spacerClass;\r\n\t\t$(cancelButtonSpacer).prependTo(this.buttonCancelEl);\r\n\t\treturn cancelButtonSpacer;\r\n\t}\r\n\r\n\r\n\r\n\t// SECTION INIT\r\n\tinit() {\r\n\t\tif (!this.initialized) {\r\n\t\t\tthis.initialized = true;\r\n\t\t\tthis.createLayers();\r\n\t\t\tthis.actualizeNumberBB(true);\r\n\t\t\tthis.actualizeStepNumber();\r\n\t\t\tthis.actualizeProgressBar();\r\n\t\t\tthis.actualizeTooltipMaxWidth();\r\n\t\t\tthis.actualizeBulletsNavigActiveItem();\r\n\t\t\tthis.loadIcons();\r\n\t\t\tthis.initUserInteraction();\r\n\t\t\tthis.connectListeners();\r\n\t\t\tthis.doAction(EVENTS.onInit);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n * Setting anchors to behave like buttons\r\n *\r\n * @api private\r\n * @method _setAsButton\r\n*/\r\n\tsetAsButton(anchor, label, tabIndex = 0) {\r\n\t\tanchor.setAttribute('role', 'button');\r\n\t\tif (label && typeof label === 'string') anchor.setAttribute('aria-label', label);\r\n\t\tif (tabIndex >= 0) {\r\n\t\t\tanchor.tabIndex = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tcreateBullet(step, roleLinkList = true, isActive = false, onClickCallback = null) {\r\n\t\tvar innerLi = document.createElement('li');\r\n\t\tif (roleLinkList) {\r\n\t\t\tinnerLi.setAttribute('role', 'tab');\r\n\t\t\tinnerLi.tabIndex = 0;\r\n\t\t\tinnerLi.title = i18n('step', this.mainCfg.i18n) + ' ' + step;\r\n\t\t}\r\n\r\n\t\tif (onClickCallback) innerLi.onclick = onClickCallback;\r\n\r\n\t\tif (isActive) {\r\n\t\t\tinnerLi.className = 'active';\r\n\t\t\tinnerLi.setAttribute('aria-selected', 'true');\r\n\t\t}\r\n\t\telse {\r\n\t\t\tinnerLi.setAttribute('aria-selected', 'false');\r\n\t\t}\r\n\r\n\t\tif (roleLinkList) {\r\n\t\t\tinnerLi.setAttribute('data-step-number', step);\r\n\t\t}\r\n\r\n\t\tvar innerNumber = document.createElement('div');\r\n\t\tinnerNumber.innerHTML = step;\r\n\t\tinnerLi.appendChild(innerNumber);\r\n\r\n\t\treturn innerLi;\r\n\t}\r\n\r\n\tcreateNavigBullets(className = CLASSES_CORE.bullets, roleLinkList = true, activeIdx = 0, onClickCallback = null) {\r\n\t\tconst bulletsLayer = document.createElement('div');\r\n\t\t$(bulletsLayer).addClass(className);\r\n\t\tthis.listInBulletsNavigLayer = document.createElement('ul');\r\n\t\tthis.listInBulletsNavigLayer.className = classNames([CLASSES_CORE.dpitScrollBar, CLASSES_CORE.dpitScrollBar + '--x']);\r\n\t\tif (roleLinkList) this.listInBulletsNavigLayer.setAttribute('role', 'tablist');\r\n\r\n\r\n\t\tthis.stepItems.forEach((item, i) => {\r\n\t\t\tthis.listInBulletsNavigLayer.appendChild(this.createBullet(item.step, roleLinkList, i === activeIdx, onClickCallback));\r\n\t\t});\r\n\t\tbulletsLayer.appendChild(this.listInBulletsNavigLayer);\r\n\t\treturn bulletsLayer;\r\n\t}\r\n\r\n\tcreateNumberLayer(modifier = '') {\r\n\t\tconst numberEl = document.createElement('div');\r\n\t\tnumberEl.className = CLASSES_CORE.number;\r\n\t\tif (modifier) numberEl.classList.add(CLASSES_CORE.number + modifier);\r\n\r\n\t\tnumberEl.setAttribute('aria-label', i18n('aria-main', this.mainCfg.i18n) + ' - ' + i18n('aria-step-num', this.mainCfg.i18n));\r\n\t\tconst numberTextEl = document.createElement('div');\r\n\t\tnumberTextEl.className = CLASSES_CHILD.numberText;\r\n\t\tnumberEl.appendChild(numberTextEl);\r\n\t\treturn numberEl;\r\n\t}\r\n\r\n\tcreateDummyLayer() {\r\n\t\tconst targetDummyEl = document.createElement('div');\r\n\t\ttargetDummyEl.className = CLASSES_CORE.targetDummy;\r\n\t\ttargetDummyEl.setAttribute('aria-hidden', 'true');\r\n\t\t//$(targetDummyEl).on('click', this.onOverlayClick.bind(this));\r\n\t\treturn targetDummyEl;\r\n\t}\r\n\r\n\tcreateLayers() {\r\n\r\n\t\t// Flier\r\n\t\tthis.flierEl = document.createElement('div');\r\n\t\tthis.flierEl.className = CLASSES_CORE.flier;\r\n\t\tthis.wrapEl.appendChild(this.flierEl);\r\n\r\n\t\t// Highlight\r\n\t\tthis.highlightEl = document.createElement('div');\r\n\r\n\t\tthis.highlightEl.className = classNames(this.getHighlightLayerClassName(), CLASSES_CORE.hidden);\r\n\t\tthis.highlightEl.setAttribute('role', 'presentation');\r\n\t\tthis.inHighlightLayerAnimation = new BulletsAnimation(\r\n\t\t\tthis.highlightEl,\r\n\t\t\tCLASSES_CORE.rbAnim + MODIFIERS.inHighlight,\r\n\t\t\t70,\r\n\t\t\t10,\r\n\t\t\t4,\r\n\t\t\t3\r\n\t\t);\r\n\r\n\t\tthis.wrapEl.appendChild(this.highlightEl);\r\n\r\n\t\t// Tooltip ref.\r\n\t\tthis.tooltipRefEl = document.createElement('div');\r\n\t\tthis.tooltipRefEl.className = classNames(CLASSES_CORE.tooltipReference, CLASSES_CORE.hidden);\r\n\t\tthis.tooltipRefEl.setAttribute('role', 'presentation');\r\n\t\tthis.wrapEl.appendChild(this.tooltipRefEl);\r\n\r\n\t\t// Tooltip\r\n\t\tthis.tooltipEl = document.createElement('div');\r\n\t\tthis.tooltipEl.className = CLASSES_CORE.tooltip;\r\n\t\tthis.tooltipEl.setAttribute('aria-label', i18n('aria-main', this.mainCfg.i18n));\r\n\t\tthis.tooltipEl.setAttribute('aria-hidden', 'false');\r\n\t\tthis.tooltipEl.setAttribute('role', 'dialog');\r\n\t\tthis.tooltipEl.setAttribute('aria-describedby', CLASSES_CORE.tooltipText);\r\n\t\tthis.tooltipRefEl.appendChild(this.tooltipEl);\r\n\r\n\t\t// Tooltip border radius padding compensation\r\n\t\tthis.tooltipRadiusPaddingEl = document.createElement('div');\r\n\t\tthis.tooltipRadiusPaddingEl.className = CLASSES_CORE.tooltipRadiusPadding;\r\n\t\tthis.tooltipEl.appendChild(this.tooltipRadiusPaddingEl);\r\n\r\n\t\t// Tooltip text\r\n\t\tthis.tooltipTextEl = document.createElement('div');\r\n\t\tthis.tooltipTextEl.className = classNames([CLASSES_CORE.tooltipText, CLASSES_CORE.dpitScrollBar]);\r\n\t\tthis.tooltipTextEl.setAttribute('id', CLASSES_CORE.tooltipText);\r\n\t\tthis.tooltipRadiusPaddingEl.appendChild(this.tooltipTextEl);\r\n\r\n\t\t// Tooltip arrow\r\n\t\tthis.arrowEl = document.createElement('div');\r\n\t\tthis.arrowEl.className = CLASSES_CORE.arrow;\r\n\t\tthis.arrowEl.setAttribute('role', 'presentation');\r\n\t\tthis.tooltipRefEl.appendChild(this.arrowEl);\r\n\r\n\t\t// Progress bar\r\n\t\tthis.progressLayer = document.createElement('div');\r\n\t\tthis.progressLayer.className = CLASSES_CORE.progress;\r\n\r\n\t\tthis.progressBarLayer = document.createElement('div');\r\n\t\tthis.progressBarLayer.className = CLASSES_CORE.progressBar;\r\n\t\tthis.progressBarLayer.setAttribute('role', 'progress');\r\n\t\tthis.progressBarLayer.setAttribute('aria-valuemin', 0);\r\n\t\tthis.progressBarLayer.setAttribute('aria-valuemax', 100);\r\n\t\tthis.progressBarLayer.setAttribute('aria-valuenow', this.getProgressInPercent());\r\n\t\tthis.progressBarLayer.style.cssText = 'width:' + this.getProgressInPercent() + '%;';\r\n\t\tthis.progressLayer.appendChild(this.progressBarLayer);\r\n\t\tthis.tooltipRadiusPaddingEl.appendChild(this.progressLayer);\r\n\r\n\t\t// Tooltip bullets\r\n\t\tthis.bulletsLayer = this.createNavigBullets(\r\n\t\t\tCLASSES_CORE.bullets,\r\n\t\t\ttrue,\r\n\t\t\t0,\r\n\t\t\tthis.onNavigBulletClick.bind(this)\r\n\t\t);\r\n\t\tthis.tooltipRadiusPaddingEl.appendChild(this.bulletsLayer);\r\n\r\n\r\n\t\t// Main controls\r\n\t\tthis.mainControlsEl = document.createElement('div');\r\n\t\tthis.mainControlsEl.className = CLASSES_CORE.mainControls;\r\n\t\tthis.tooltipRadiusPaddingEl.appendChild(this.mainControlsEl);\r\n\r\n\t\t// Tooltip buttons\r\n\t\tthis.tooltipButtonsEl = document.createElement('div');\r\n\t\tthis.tooltipButtonsEl.className = CLASSES_CORE.tooltipButtons;\r\n\t\tthis.tooltipButtonsEl.setAttribute('role', 'navigation');\r\n\t\tthis.tooltipButtonsEl.setAttribute('aria-label', i18n('aria-main', this.mainCfg.i18n));\r\n\t\tthis.mainControlsEl.appendChild(this.tooltipButtonsEl);\r\n\r\n\t\t//Tooltip number\r\n\t\tthis.numberEl = this.createNumberLayer();\r\n\t\tthis.tooltipRefEl.appendChild(this.numberEl);\r\n\r\n\t\t// Number on sticky tooltip\r\n\r\n\r\n\r\n\t\t//next button\r\n\t\tthis.buttonNextEl = document.createElement('div');\r\n\t\tthis.buttonNextEl.className = classNames([CLASSES_CORE.button, CLASSES_CORE.buttonNext]);\r\n\t\tthis.setAsButton(this.buttonNextEl, this.options.labeling.nextLabel);\r\n\t\tthis.buttonNextEl.appendChild(this.createButtonContent(this.options.labeling.nextLabel));\r\n\r\n\t\t//previous button\r\n\t\tthis.buttonPrevEl = document.createElement('div');\r\n\t\tthis.buttonPrevEl.className = classNames([CLASSES_CORE.button, CLASSES_CORE.buttonPrev]);\r\n\t\tthis.setAsButton(this.buttonPrevEl, this.options.labeling.prevLabel);\r\n\t\tthis.buttonPrevEl.appendChild(this.createButtonContent(this.options.labeling.prevLabel));\r\n\r\n\t\t//skip button\r\n\t\tthis.buttonCancelEl = document.createElement('div');\r\n\t\tthis.buttonCancelEl.className = classNames([CLASSES_CORE.button, CLASSES_CORE.buttonSkip]);\r\n\t\tthis.setAsButton(this.buttonCancelEl, this.options.labeling.skipLabel);\r\n\t\tthis.buttonSkipTextLayer = this.createButtonContent(this.options.labeling.skipLabel);\r\n\t\tthis.buttonCancelEl.appendChild(this.buttonSkipTextLayer);\r\n\t\tthis.tooltipButtonsEl.appendChild(this.buttonCancelEl);\r\n\r\n\t\t//in order to prevent displaying next/previous button always\r\n\t\tif (this.stepItems.length >= 1) {\r\n\t\t\tthis.buttonPrevNextWrapEl = document.createElement('div');\r\n\t\t\tthis.buttonPrevNextWrapEl.className = CLASSES_CORE.buttonPrevNextWrap;\r\n\t\t\tthis.tooltipButtonsEl.appendChild(this.buttonPrevNextWrapEl);\r\n\t\t\tthis.buttonPrevNextWrapEl.appendChild(this.buttonPrevEl);\r\n\t\t\tthis.buttonPrevNextWrapEl.appendChild(this.buttonNextEl);\r\n\t\t}\r\n\r\n\t\t// Skip next tours checkbox\r\n\t\tthis.skipTourForFutureVisitsCheckboxEl = document.createElement('input');\r\n\t\tthis.skipTourForFutureVisitsCheckboxEl.type = 'checkbox';\r\n\t\tthis.skipTourForFutureVisitsCheckboxEl.className = CLASSES_CORE.checkbox;\r\n\t\tthis.skipTourForFutureVisitsCheckboxEl.checked = !TourVisitCounter.isVisitEnabled(this.tourId);\r\n\t\tthis.skipTourForFutureVisitsCheckboxEl.addEventListener('change', this.processSkipForFutureVisits.bind(this));\r\n\r\n\t\tthis.skipTourForFutureVisitsLabelEl = document.createElement('label');\r\n\t\tthis.skipTourForFutureVisitsLabelEl.className = CLASSES_CORE.checkboxLabel;\r\n\t\tthis.skipTourForFutureVisitsLabelEl.appendChild(this.skipTourForFutureVisitsCheckboxEl);\r\n\t\tthis.skipTourForFutureVisitsLabelEl.appendChild(document.createTextNode(this.options.labeling.skipForFutureVisitsLabel));\r\n\t\tthis.mainControlsEl.appendChild(this.skipTourForFutureVisitsLabelEl);\r\n\r\n\t\tthis.initBGOverlayLayer();\r\n\t}\r\n\r\n\tprocessSkipForFutureVisits() {\r\n\t\tTourVisitCounter.disableFutureVisits(this.mainCfg, this.tourId, !this.skipTourForFutureVisitsCheckboxEl.checked);\r\n\t}\r\n\r\n\r\n\treInitLayers(regularStepChange = true) {\r\n\t\t// Init\r\n\t\tif (regularStepChange) {\r\n\t\t\tthis.highlightEl.className = this.getHighlightLayerClassName();\r\n\r\n\t\t\t// Hide\r\n\t\t\tif (!IS_DEBUG) this.hideIntroLayers();\r\n\t\t}\r\n\t\t//this.numberEl?.classList.remove(CLASSES_CORE.number + MODIFIERS.onTooltip);\r\n\t\tthis.clearFlier();\r\n\t}\r\n\r\n\t// !SECTION INIT\r\n\r\n\r\n\tstopAutoScrollWhenUserAction() {\r\n\t\tthis.isUserScrolling = true;\r\n\t\tif (this.userInteractTimeout) clearTimeout(this.userInteractTimeout);\r\n\t\tthis.userInteractTimeout = setTimeout(() => {\r\n\t\t\tthis.isUserScrolling = false;\r\n\t\t}, TIMING.userScrolling);\r\n\t}\r\n\r\n\r\n\r\n\tgetFlierBB(targetBB, numberBB, tooltipBB) {\r\n\t\tlet res = null;\r\n\r\n\t\tif (this.options.scrollTo === 'element') {\r\n\t\t\tres = DpitBB.merge(targetBB, numberBB);\r\n\t\t}\r\n\t\telse if (this.options.scrollTo === 'tooltip') {\r\n\t\t\tres = tooltipBB;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tres = DpitBB.merge(targetBB, tooltipBB, numberBB);\r\n\t\t}\r\n\t\tif (res) {\r\n\t\t\tif (res.height > this.winBB.height && ['left', 'right', 'center'].includes(this.tooltipPos.base)\r\n\t\t\t/*|| res.width > this.winBB.width && ['top', 'bottom'].includes(this.tooltipPos.base)*/) {\r\n\t\t\t\tres = tooltipBB;\r\n\t\t\t}\r\n\t\t\tres = DpitBB.extendByMarginBB(res, this.isFixedPos ? this.windowMargin : this.docMargin);\r\n\t\t\t//res = DpitBB.intersect(DpitBB.extendByMarginBB(res, this.isFixedPos ? this.windowMargin : this.docMargin), this.docBB);\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tfinalizeStepChange() {\r\n\t\tif (this.options.finalizeStepChangeEn\r\n\t\t\t&& this.finalizeRefreshCounter < 2\r\n\t\t\t&& this.flierBB\r\n\t\t\t&& !this.isFixedPos\r\n\t\t\t&& this.flierBB.height < this.winBoardBB.height\r\n\t\t\t&& this.flierBB.width < this.winBoardBB.width\r\n\t\t) {\r\n\r\n\t\t\tthis.actualizeFlier();\r\n\t\t\tif (!this.isBoundingBoxInsideViewPort(this.flierBB, this.isFixedPos, false, 0.9)) {\r\n\t\t\t\tthis.finalizeRefreshCounter++;\r\n\r\n\t\t\t\tthis.hardRefresh(REFRESH_REASONS.finalize, { useLastTooltipPos: true, useLastNumberPos: false });\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tresetTargetElement = () => {\r\n\t\tif (this.targetBranch) {\r\n\t\t\tthis.targetBranch.stickyPosElements.forEach(stickyElement => {\r\n\t\t\t\tstickyElement.removeEventListener(DpitStickyEvents.CHANGE, this.onStickyEvent);\r\n\t\t\t});\r\n\t\t\tthis.targetBranch.destroy();\r\n\t\t\tthis.targetBranch = null;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tprocessTargetBranchAndFixedPosState() {\r\n\t\tif (this.targetBranch) this.targetBranch.destroy();\r\n\r\n\t\tif (this.stepItem?.element && !this.isDummyMode()) {\r\n\t\t\tthis.targetBranch = new DpitTargetBranch(this.stepItem.element, this.options.dpDebugEn);\r\n\t\t\tthis.targetBranch.process();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.targetBranch = null;\r\n\t\t}\r\n\t\tthis.actualizeFixedAndStickyPos(this.stepItem);\r\n\t}\r\n\r\n\tdisableStickyEvents = () => {\r\n\t\tif (this.stickyEvents) {\r\n\t\t\tthis.stickyEvents.disableEvents(false);\r\n\t\t\tthis.stickyEvents = null;\r\n\t\t}\r\n\t};\r\n\r\n\tsetFixedMode(isFixedPos, dbgEnWhenFalse = false, dbgInfo) {\r\n\t\tthis.isFixedPos = isFixedPos;\r\n\t\tif (this.options.dpDebugEn && (isFixedPos || dbgEnWhenFalse)) console.log('[dpit] Fixed mode:', isFixedPos, dbgInfo);\r\n\t}\r\n\r\n\tclearFixedMode() {\r\n\t\tthis.isFixedPos = false;\r\n\t\tthis.disableStickyEvents();\r\n\t\tthis.targetElForSticky = null;\r\n\t}\r\n\r\n\tcontainsFixedPos() {\r\n\t\tif (this.isDummyMode()) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\telse if (this.targetBranch) {\r\n\t\t\treturn this.targetBranch.containsFixed();\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tactualizeFixedAndStickyPos = (stepItem) => {\r\n\t\tconst targetElement = stepItem.element;\r\n\t\tif (!targetElement || this.targetElForSticky === targetElement) return false;\r\n\t\tconst containsFixedPosRes = this.containsFixedPos();\r\n\t\tthis.setFixedMode(containsFixedPosRes, false, 'Fixed target or it\\'s parent');\r\n\t\tif (!containsFixedPosRes && this.targetBranch && this.targetBranch.containsSticky()) {\r\n\t\t\tconst stickyDetLabel = REFRESH_REASONS.stickyDetector.toUpperCase();\r\n\t\t\tif (this.options.dpDebugEn) console.log(`[dpit] ${stickyDetLabel}: Activated`);\r\n\t\t\tthis.stickyEvents = new DpitStickyEvents();\r\n\t\t\tthis.targetElForSticky = targetElement;\r\n\t\t\tthis.stickyEvents.addStickies(this.targetBranch.stickyPosElements);\r\n\r\n\t\t\tthis.targetBranch.stickyPosElements.forEach(stickyElement => {\r\n\t\t\t\tstickyElement.addEventListener(DpitStickyEvents.CHANGE, this.onStickyEvent);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tonStickyEvent = (event) => {\r\n\t\t//if (stepItem === this.stepItem) {\r\n\t\tconst prevIsFixedPos = this.isFixedPos;\r\n\t\tconst isFixedPos = event.detail.isSticky ? true : this.stickyEvents.isSomeSticky();\r\n\t\tif (prevIsFixedPos !== isFixedPos) {\r\n\t\t\tconst stickyDetLabel = REFRESH_REASONS.stickyDetector.toUpperCase();\r\n\t\t\tthis.setFixedMode(isFixedPos, false, `${stickyDetLabel}: Element > `, this.targetElForSticky, event.detail);\r\n\t\t\tthis.softRefresh(REFRESH_REASONS.stickyDetector);\r\n\t\t}\r\n\t\t//}\r\n\t};\r\n\r\n\r\n\t// targetElm can be body\r\n\tinitBGOverlayLayer(hidden = true) {\r\n\r\n\t\tif (!this.overlayContainer) {\r\n\r\n\t\t\tthis.overlayContainer = document.createElement('div');\r\n\t\t\tthis.overlayContainer.className = CLASSES_CORE.overlayContainer;\r\n\t\t\tif (hidden) this.overlayContainer.classList.add(CLASSES_CORE.hiddenKeepEvents);\r\n\r\n\t\t\tthis.overlayEl = document.createElement('div');\r\n\t\t\tthis.overlayEl.className = CLASSES_CORE.overlay;\r\n\r\n\t\t\tthis.overlayContainer.appendChild(this.overlayEl);\r\n\t\t\tthis.overlayContainer.setAttribute('aria-hidden', 'true');\r\n\t\t\tthis.wrapEl.appendChild(this.overlayContainer);\r\n\r\n\t\t\tthis.overlayContainerTransitionDelayMs = getTransitionDurationMs(this.overlayContainer);\r\n\r\n\t\t\tthis.initBulletsAnimation(this.overlayContainer);\r\n\t\t}\r\n\t}\r\n\r\n\tinitBulletsAnimation(bulletRootElement) {\r\n\t\tthis.bulletsAnimation = new BulletsAnimation(bulletRootElement);\r\n\t}\r\n\r\n\tclearFlier() {\r\n\t\thideElement(this.flierEl, false);\r\n\t\tthis.flierBB = null;\r\n\t}\r\n\r\n\tactualizeFlier(omitNumberEl = false) {\r\n\t\tlet numberBB = null;\r\n\t\tif (this.options.showStepNumbers === true && !omitNumberEl) {\r\n\t\t\tnumberBB = this.numberBB;\r\n\t\t}\r\n\r\n\t\tthis.flierBB = this.getFlierBB(this.targetBB, numberBB, this.tooltipBB);\r\n\t\tif (this.flierBB) {\r\n\t\t\tDpitBB.toElement(this.flierEl, this.flierBB);\r\n\t\t\tshowElement(this.flierEl);\r\n\t\t}\r\n\t}\r\n\r\n\tcalculateScrollTimeToTarget() {\r\n\t\tlet res = 300;\r\n\t\tif (!this.isFixedPos && this.stepItem?.element) {\r\n\t\t\tconst targetOffset = $(this.stepItem.element).offset();\r\n\t\t\tconst startOffset = { left: $(window).scrollLeft(), top: $(window).scrollTop() };\r\n\t\t\tconst diff = Math.max(\r\n\t\t\t\tMath.abs(startOffset.left - targetOffset.left),\r\n\t\t\t\tMath.abs(startOffset.top - targetOffset.top)\r\n\t\t\t);\r\n\t\t\tres = Math.round(Math.min(\r\n\t\t\t\tthis.options.maxScrollSpeedPerPageMs,\r\n\t\t\t\tMath.max(350, (diff / this.winBB.height) * this.options.scrollSpeedPerPageMs)\r\n\t\t\t));\r\n\t\t\tif (this.options.dpDebugEn) console.log('[dpit] SCROLL', {\r\n\t\t\t\t'Scroll time': res + ' ms',\r\n\t\t\t\tmaxScrollSpeedPerPageMs: this.options.maxScrollSpeedPerPageMs,\r\n\t\t\t\tscrollSpeedPerPageMs: this.options.scrollSpeedPerPageMs\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\tgetScrollSpeedOptions(scrollSpeedOption) {\r\n\t\tconst scrollSpeedOptionSanitized = Math.max(Math.min(scrollSpeedOption, 100), 0);\r\n\t\tconst scrollSpeedPerPageMs = scrollSpeedOptionSanitized === 100\r\n\t\t\t? 0\r\n\t\t\t: SCROLL_SPEED.logCoef * Math.log(scrollSpeedOptionSanitized) + SCROLL_SPEED.constant;\r\n\r\n\t\treturn {\r\n\t\t\tscrollSpeedPerPageMs: scrollSpeedPerPageMs,\r\n\t\t\tmaxScrollSpeedPerPageMs: scrollSpeedPerPageMs * SCROLL_SPEED.maxCoef\r\n\t\t};\r\n\t}\r\n\r\n\tactualizeScrollSpeedOptions(scrollSpeedOption) {\r\n\t\tthis.setOptions(this.getScrollSpeedOptions(scrollSpeedOption));\r\n\t}\r\n\r\n\tforceScrollTopOffset() {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetScrollFlierOptions(scrollTimeMs = 500) {\r\n\r\n\t\tconst getFlierPureWidth = () => this.flierBB.width - this.docMargin.left - this.docMargin.right;\r\n\t\tconst getFlierPureHeight = () => this.flierBB.height - this.docMargin.top - this.docMargin.bottom;\r\n\t\tconst res = {\r\n\t\t\talign: {\r\n\t\t\t\ttop: 0.5,\r\n\t\t\t\tleft: 0.5,\r\n\t\t\t\tlockX: !isElementScrollableX(document.documentElement)\r\n\t\t\t},\r\n\t\t\ttime: scrollTimeMs\r\n\t\t};\r\n\r\n\t\tif (this.flierBB) {\r\n\t\t\tif (this.flierBB.height > this.winBoardBB.height || this.forceScrollTopOffset()) {\r\n\t\t\t\tswitch (this.tooltipPos.base) {\r\n\t\t\t\t\tcase 'top': res.align.top = 0; break;\r\n\t\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t\tres.align.top = 0;\r\n\t\t\t\t\t\tres.align.topOffset = this.winBoardBB.height - getFlierPureHeight();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.flierBB.width > this.winBoardBB.width) {\r\n\t\t\t\tswitch (this.tooltipPos.base) {\r\n\t\t\t\t\tcase 'left': res.align.left = 0; break;\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\tres.align.left = 0;\r\n\t\t\t\t\t\tres.align.leftOffset = this.winBoardBB.width - getFlierPureWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\tasync scrollFlierIntoView(backward, onlyWhenNeeded = true, scrollTimeMs = TIMING.defaultFlierScroll) {\r\n\t\tthis.actualizeFlier();\r\n\t\tif (!this.isFixedPos\r\n\t\t\t&& this.flierEl\r\n\t\t\t&& (!onlyWhenNeeded || !this.isBoundingBoxInsideViewPort(this.flierBB, this.isFixedPos, true))) {\r\n\t\t\tconst scrollOptions = this.getScrollFlierOptions(scrollTimeMs);\r\n\t\t\tthis.isAutoScrolling = true;\r\n\t\t\tthis.initScrollFlierTime = Date.now;\r\n\t\t\t/*const res = */await scrollIntoView(this.flierEl, scrollOptions);\r\n\t\t\tthis.isAutoScrolling = false;\r\n\t\t\tthis.onFlierScrolledInView(backward, this.initScrollFlierTime);\r\n\t\t\t//return res;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.afterStepChanged(backward);\r\n\t\t\t//return Promise.resolve(false);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tgetScrollTargetOptions(scrollTimeMs) {\r\n\t\tconst firstScrollableChildFromClosestFixedParent = this.targetBranch?.getFirstScrollableChildFromClosestFixedParent();\r\n\t\treturn {\r\n\t\t\ttime: scrollTimeMs,\r\n\t\t\tvalidTarget: (target) => {\r\n\t\t\t\tconst res = !firstScrollableChildFromClosestFixedParent\r\n\t\t\t\t\t|| firstScrollableChildFromClosestFixedParent === target\r\n\t\t\t\t\t|| $(firstScrollableChildFromClosestFixedParent).find(target).length;\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tscrollTargetIntoView(scrollTimeMs = TIMING.defaultTargetScroll) {\r\n\t\tif (this.stepItem?.element && this.targetBranch?.containsScrollable()) {\r\n\t\t\t//this.softenOverlayOpacity();\r\n\t\t\t//const res = \r\n\t\t\t//this.resumeFullOverlayOpacity();\r\n\t\t\treturn scrollIntoView(this.stepItem.element, this.getScrollTargetOptions(scrollTimeMs));\r\n\t\t}\r\n\t\treturn Promise.resolve(false);\r\n\t}\r\n\r\n\tgetProgressInPercent() {\r\n\t\t// Steps are 0 indexed\r\n\t\tconst currentStep = parseInt((this.stepIdx + 1), 10);\r\n\t\treturn ((currentStep / (this.stepItems.length - this.getNotVisibleStepCnt())) * 100);\r\n\t}\r\n\r\n\tafterStepChanged(backward) {\r\n\t\tif (this.debugVisualizer) {\r\n\t\t\tthis.debugVisualizer.visualizeStepData(this.targetBB, this.flierBB, this.isFixedPos);\r\n\t\t}\r\n\t\tthis.fireAfterStepChangeEvent(backward);\r\n\t}\r\n\r\n\tonFlierScrolledInView(backward, initScrollTime) {\r\n\t\tlet willBeRefreshed = false;\r\n\t\tif (/* is not another step */ initScrollTime === this.initScrollFlierTime) {\r\n\t\t\twillBeRefreshed = this.finalizeStepChange();\r\n\t\t\tthis.initScrollFlierTime = null;\r\n\t\t}\r\n\t\tif (!this.ending && !willBeRefreshed) {\r\n\t\t\tthis.afterStepChanged(backward);\r\n\t\t}\r\n\t}\r\n\r\n\tfireAfterStepChangeEvent(backward) {\r\n\t\tthis.doAction(EVENTS.afterStepChange, {\r\n\t\t\tbackward: backward,\r\n\t\t\tcurrentStepObj: this.stepObject4Hooks(this.stepItem)\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tgetMinimalTooltipWidth() {\r\n\t\tconst minWidth = $(this.buttonCancelEl).outerWidth()\r\n\t\t\t+ $(this.buttonPrevNextWrapEl).outerWidth(true)\r\n\t\t\t+ this.tooltipPadding.left\r\n\t\t\t+ this.tooltipPadding.right\r\n\t\t\t+ this.radiusPaddingFix?.left || 0\r\n\t\t\t+ this.radiusPaddingFix?.right || 0;\r\n\t\treturn isNaN(minWidth) ? 300 /* Default 300px*/ : minWidth;\r\n\t}\r\n\r\n\tactualizeButtonsTextVisibility(hideText = false) {\r\n\t\tconst buttonNoTextClass = CLASSES_CORE.button + MODIFIERS.noText;\r\n\t\tif (!hideText) {\r\n\r\n\t\t\tif (this.buttonPrevEl.classList.contains(buttonNoTextClass)\r\n\t\t\t\t|| this.buttonNextEl.classList.contains(buttonNoTextClass)) {\r\n\t\t\t\tif (this.options.labeling.button_arrows === 'none') {\r\n\t\t\t\t\tthis.loadArrowButtonIcons('none');\r\n\t\t\t\t}\r\n\t\t\t\tthis.buttonNextEl.classList.remove(buttonNoTextClass);\r\n\t\t\t\tthis.buttonPrevEl.classList.remove(buttonNoTextClass);\r\n\t\t\t}\r\n\t\t\tif (this.buttonCancelEl.classList.contains(buttonNoTextClass)) {\r\n\t\t\t\tif (this.options.labeling.button_cancel_ico === 'none') {\r\n\t\t\t\t\tthis.loadCancelButtonIcons('none');\r\n\t\t\t\t}\r\n\t\t\t\tthis.buttonCancelEl.classList.remove(buttonNoTextClass);\r\n\t\t\t}\r\n\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (!this.buttonPrevEl.classList.contains(buttonNoTextClass)) {\r\n\t\t\t\tthis.buttonPrevEl.classList.add(buttonNoTextClass);\r\n\t\t\t\tif (this.options.labeling.button_arrows === 'none') {\r\n\t\t\t\t\tthis.loadArrowButtonIcons('vector');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!this.buttonNextEl.classList.contains(buttonNoTextClass)) {\r\n\t\t\t\tthis.buttonNextEl.classList.add(buttonNoTextClass);\r\n\t\t\t\tif (this.options.labeling.button_arrows === 'none') {\r\n\t\t\t\t\tthis.loadArrowButtonIcons('vector');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!this.buttonCancelEl.classList.contains(buttonNoTextClass)) {\r\n\t\t\t\tthis.buttonCancelEl.classList.add(buttonNoTextClass);\r\n\t\t\t\tif (this.options.labeling.button_cancel_ico === 'none') {\r\n\t\t\t\t\tthis.loadCancelButtonIcons('vector');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tgetMaximalTooltipWidth() {\r\n\t\treturn Math.max(this.winBoardBB.width - 20, 20); // number on tooltip etc.\r\n\t}\r\n\r\n\r\n\tactualizeTooltipMinWidth() {\r\n\t\tif (this.buttonPrevNextWrapEl) {\r\n\t\t\tthis.buttonPrevNextWrapEl.classList.remove(CLASSES_CORE.buttonPrevNextWrap + MODIFIERS.vert);\r\n\t\t\tthis.actualizeButtonsTextVisibility(false);\r\n\r\n\t\t\tthis.minTooltipWidth = this.getMinimalTooltipWidth();\r\n\t\t\tconst maxTooltipWidth = this.getMaximalTooltipWidth();\r\n\t\t\tif (this.minTooltipWidth > maxTooltipWidth) {\r\n\r\n\t\t\t\tthis.actualizeButtonsTextVisibility(true);\r\n\t\t\t\tthis.minTooltipWidth = this.getMinimalTooltipWidth();\r\n\t\t\t\tif (this.minTooltipWidth <= maxTooltipWidth) {\r\n\t\t\t\t\tupdateCssVar('--dpit-min-tooltip-width', round1dec(this.minTooltipWidth) + 'px');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.buttonPrevNextWrapEl.classList.add(CLASSES_CORE.buttonPrevNextWrap + MODIFIERS.vert);\r\n\t\t\t\tthis.minTooltipWidth = this.getMinimalTooltipWidth();\r\n\t\t\t\tupdateCssVar('--dpit-min-tooltip-width', round1dec(Math.min(this.minTooltipWidth, maxTooltipWidth)) + 'px');\r\n\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tupdateCssVar('--dpit-min-tooltip-width', round1dec(this.minTooltipWidth) + 'px');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tactualizeTooltipMaxWidth() {\r\n\t\tif (this.tooltipEl) {\r\n\t\t\tconst maxTooltipWidth = this.getMaximalTooltipWidth();\r\n\t\t\tif (this.options.max_tooltip_width\r\n\t\t\t\t&& !isNaN(this.options.max_tooltip_width)\r\n\t\t\t\t&& (!this.winBoardBB || this.options.max_tooltip_width < maxTooltipWidth)\r\n\t\t\t) {\r\n\t\t\t\tthis.tooltipEl.style.maxWidth = this.options.max_tooltip_width + 'px';\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.tooltipEl.style.maxWidth = '';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tasync tryUnlockActualizeTarget(processFce, processImmediatelyWhenReady = false) {\r\n\t\tlet res = RES_PROCESS_ASYNC.abort;\r\n\t\tif (!this.actualizeTargetLock) {\r\n\t\t\tif (processFce) {\r\n\t\t\t\tthis.lockActualizeTarget();\r\n\t\t\t\tres = await processFce();\r\n\t\t\t\tthis.unlockActualizeTarget();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (processImmediatelyWhenReady) {\r\n\t\t\t\tres = RES_PROCESS_ASYNC.deferred;\r\n\t\t\t\tthis.processFceToRun = processFce;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\tunlockActualizeTarget() {\r\n\t\tthis.actualizeTargetLock = false;\r\n\t\tif (this.processFceToRun) {\r\n\t\t\tconst fceBkp = this.processFceToRun;\r\n\t\t\tthis.processFceToRun = null;\r\n\t\t\tthis.tryUnlockActualizeTarget(fceBkp, false);\r\n\t\t}\r\n\t}\r\n\r\n\tlockActualizeTarget() {\r\n\t\tthis.actualizeTargetLock = true;\r\n\t}\r\n\r\n\tprocessOnBeforeShowStep() {\r\n\t\tif (this.onBeforeShowStepCallback instanceof Function && this.stepItem) {\r\n\t\t\treturn this.onBeforeShowStepCallback(this.stepItem);\r\n\t\t}\r\n\t\treturn Promise.resolve(RES_PROCESS_ASYNC.continue);\r\n\t}\r\n\r\n\tprintDbgStepInfo(reason, dbgInfo, method) {\r\n\t\tif (this.options.dpDebugEn) console.log(`[dpit] ====== STEP ${this.stepItem.step} - ${reason.toUpperCase()}(${method})`, dbgInfo, 'Step item {', this.stepItem, '}');\r\n\t}\r\n\r\n\tisFlierOnScreen() {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\tisBoundingBoxInsideViewPort(bbToTest, isFixed, useBoardSize = false, thresholdRatio = 1) {\r\n\t\tconst containerBB = useBoardSize ? this.winBoardBB : this.winBB;\r\n\t\treturn isBoundingBoxInsideContainer(bbToTest, containerBB, isFixed, thresholdRatio);\r\n\t}\r\n\r\n\tfinalizeFollowTarget(reason = REFRESH_REASONS.followTarget) {\r\n\t\tthis.isFollowTargetInAction = false;\r\n\t\tthis.actualizeNumberBB();\r\n\t\tif (this.options.dpDebugEn) console.log('[dpit] FOLLOW TARGET: Stopped - target BB:', this.targetBB);\r\n\t\tif (this.didOrientationChanged) {\r\n\t\t\t/* Window orientation has changed during follow */\r\n\t\t\t// is refreshed by resize refresh alg\r\n\t\t\t//this.hardRefresh(reason);\r\n\t\t} else if (!this.isBoundingBoxInsideViewPort(this.flierBB, this.isFixedPos, false, 0.98) && !this.isUserScrolling) {\r\n\t\t\tthis.placeTooltip(false, true);\r\n\t\t\tif (!this.isBoundingBoxInsideViewPort(this.flierBB, this.isFixedPos, false, 0.98)) {\r\n\t\t\t\tthis.hardRefresh(reason);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (this.options.showStepNumbers && this.numberBB && !this.isBoundingBoxInsideViewPort(this.numberBB, this.isFixedPos, false, 0.98)) {\r\n\t\t\tthis.initTooltip();\r\n\t\t\tthis.placeTooltip();\r\n\t\t} else {\r\n\t\t\tthis.hardRefresh(reason);\r\n\t\t}\r\n\t\tthis.restartFollowTarget();// restart with lower interval time to avoid high CPU load\r\n\r\n\r\n\r\n\t}\r\n\r\n\r\n\tfinalizeSoftRefresh(reason, mode = {}) {\r\n\t\tconst startStepIdx = this.stepIdx;\r\n\t\tif (this.softRefreshTimer) clearTimeout(this.softRefreshTimer);\r\n\t\tthis.softRefreshTimer = setTimeout(() => {\r\n\t\t\tif (startStepIdx === this.stepIdx) {\r\n\t\t\t\tswitch (reason) {\r\n\t\t\t\t\tcase REFRESH_REASONS.resize:\r\n\t\t\t\t\t\tif (this.options.dpDebugEn) console.log('[dpit] SOFT RESIZE: Ended');\r\n\t\t\t\t\t\tthis.hardRefresh(reason, mode);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase REFRESH_REASONS.followTarget:\r\n\t\t\t\t\t\tif (!this.resizeTimeout) {\r\n\t\t\t\t\t\t\tthis.finalizeFollowTarget();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, TIMING.finalizeSoftRefresh);\r\n\t}\r\n\r\n\tshowStep(mode = {}, dbgInfo = '') {\r\n\t\t//this.resetCore(false);\r\n\t\treturn this.regularStepChange(REFRESH_REASONS.regular, mode, dbgInfo);\r\n\t}\r\n\r\n\tplaceTooltipInSoftRefresh() {\r\n\t\tif (!DpitBB.isInside(this.tooltipBB, this.docBoardBB)) {\r\n\t\t\tthis.placeTooltip();\r\n\t\t} else {\r\n\t\t\tthis.placeTooltip(true, true); // do not iterate tooltip position\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tasync softRefresh(reason = REFRESH_REASONS.unknown, mode = {}) {\r\n\t\tif (!this.stepItem) return RES_PROCESS_ASYNC.noData;\r\n\t\treturn await this.tryUnlockActualizeTarget(() => {\r\n\t\t\tthis.pauseFollowTarget();\r\n\t\t\tthis.calculateTargetBBs();\r\n\t\t\tthis.actualizeUserInteraction(this.stepItem);\r\n\t\t\tthis.placeTargetPosBasedLayers();\r\n\t\t\tif (this.userInteraction) {\r\n\t\t\t\tthis.userInteraction.update(this.stepItem);\r\n\t\t\t}\r\n\t\t\tthis.initTooltip(false);\r\n\t\t\tthis.placeTooltipInSoftRefresh();\r\n\t\t\tthis.finalizeSoftRefresh(reason, mode);\r\n\t\t\tthis.restoreFollowTarget();\r\n\t\t\treturn RES_PROCESS_ASYNC.done;\r\n\t\t}, false);\r\n\t}\r\n\r\n\r\n\r\n\tasync hardRefresh(reason = REFRESH_REASONS.unknown, mode = {}, dbgInfo = '') {\r\n\t\tif (!this.stepItem) return RES_PROCESS_ASYNC.noData;\r\n\r\n\t\treturn await this.tryUnlockActualizeTarget(async () => {\r\n\t\t\t//this.restoreFollowTarget();\r\n\t\t\tconst doNotScroll = mode?.resizeType && [\r\n\t\t\t\tRESIZE_TYPE.minorAreaChange,\r\n\t\t\t\tRESIZE_TYPE.mobUrlBarVisibilityToggle\r\n\t\t\t].includes(mode.resizeType);\r\n\r\n\t\t\tthis.actualizeTargetItem(this.stepItem);\r\n\t\t\tthis.resumeFullOverlayOpacity();\r\n\t\t\tif (await this.processOnBeforeShowStep() === RES_PROCESS_ASYNC.abort) {\r\n\t\t\t\treturn RES_PROCESS_ASYNC.abort;\r\n\t\t\t}\r\n\t\t\tif (!this.checkTargetElValidity()) return RES_PROCESS_ASYNC.skip;\r\n\t\t\tthis.resetCore(false, false, true);\r\n\t\t\t//this.pauseFollowTarget();\r\n\t\t\tthis.printDbgStepInfo(reason, dbgInfo, 'hardRefresh');\r\n\t\t\tthis.processTargetBranchAndFixedPosState();\r\n\t\t\tthis.reInitLayers(false);\r\n\t\t\tlet scrollTimeMs = TIMING.defaultFlierScroll;\r\n\t\t\tif (!doNotScroll) {\r\n\t\t\t\tscrollTimeMs = this.calculateScrollTimeToTarget();\r\n\t\t\t\tawait this.scrollTargetIntoView(Math.min(scrollTimeMs, SCROLL_SPEED.maxParentScrollTimeMs));\r\n\t\t\t}\r\n\r\n\t\t\tthis.actualizeShadowOverlay();\r\n\t\t\tthis.calculateTargetBBs();\r\n\t\t\tthis.actualizeUserInteraction(this.stepItem);\r\n\t\t\tthis.placeTargetPosBasedLayers();\r\n\t\t\tthis.initTooltip(true);\r\n\t\t\tthis.placeTooltip(mode.useLastTooltipPos, mode.useLastNumberPos);\r\n\t\t\tthis.showIntroLayers();\r\n\t\t\tif (!doNotScroll) this.scrollFlierIntoView(this.isBackward, mode.scrollOnlyWhenNeeded, scrollTimeMs);\r\n\t\t\tthis.restoreFollowTarget();\r\n\t\t\t//this.restoreRefreshers();\r\n\t\t\treturn RES_PROCESS_ASYNC.done;\r\n\t\t}, true);\r\n\t}\r\n\r\n\tasync regularStepChange(reason = REFRESH_REASONS.regular, mode = {}, dbgInfo = '') {\r\n\r\n\t\tif (!this.stepItem) return RES_PROCESS_ASYNC.noData;\r\n\t\tmode = { ...mode, scrollOnlyWhenNeeded: false };\r\n\t\tconst stepItem = this.stepItem;\r\n\t\treturn await this.tryUnlockActualizeTarget(async () => {\r\n\t\t\tthis.actualizeDocAndScreenAreas();\r\n\t\t\tthis.resetTargetElement();\r\n\t\t\tthis.actualizeTargetItem(stepItem);\r\n\t\t\tthis.resumeFullOverlayOpacity();\r\n\t\t\tif (await this.processOnBeforeShowStep() === RES_PROCESS_ASYNC.abort) {\r\n\t\t\t\treturn RES_PROCESS_ASYNC.abort;\r\n\t\t\t}\r\n\t\t\tif (!this.checkTargetElValidity()) return RES_PROCESS_ASYNC.skip;\r\n\t\t\tthis.resetCore(false);\r\n\t\t\tthis.printDbgStepInfo(reason, dbgInfo, 'regularStepChange');\r\n\r\n\t\t\tthis.processTargetBranchAndFixedPosState();\r\n\t\t\tthis.reInitLayers();\r\n\t\t\tconst scrollTimeMs = this.calculateScrollTimeToTarget();\r\n\t\t\tawait this.scrollTargetIntoView(Math.min(scrollTimeMs, SCROLL_SPEED.maxParentScrollTimeMs));\r\n\t\t\tthis.actualizeShadowOverlay();\r\n\t\t\tthis.actualizeStepNumber();\r\n\t\t\tthis.calculateTargetBBs();\r\n\t\t\tthis.actualizeUserInteraction(stepItem);\r\n\t\t\tthis.setTooltipContent(stepItem);\r\n\t\t\tthis.placeTargetPosBasedLayers();\r\n\r\n\t\t\tthis.actualizeButtons();\r\n\t\t\tthis.actualizeProgressBar();\r\n\t\t\tthis.actualizeTooltipRadiusPadding();\r\n\t\t\tthis.actualizeTooltipMinWidth();\r\n\r\n\t\t\tthis.actualizeBulletsNavigActiveItem();\r\n\r\n\t\t\t//this.actualizeTooltipBB();\r\n\r\n\t\t\tthis.initTooltip(true);\r\n\t\t\tthis.placeTooltip(mode.useLastTooltipPos, mode.useLastNumberPos);\r\n\r\n\t\t\tthis.showIntroLayers();\r\n\t\t\tthis.scrollFlierIntoView(this.isBackward, mode.scrollOnlyWhenNeeded, scrollTimeMs);\r\n\t\t\t// set intersection observer to check target is on screen\r\n\t\t\t//this.restoreRefreshers();\r\n\t\t\tthis.startRefreshers();\r\n\r\n\t\t\treturn RES_PROCESS_ASYNC.done;\r\n\r\n\t\t}, true);\r\n\r\n\t}\r\n\r\n}\r\n","import { ceil1dec, floor1dec, round1dec } from '../../../../../includes/assets/js/modules/dpitUtilsInc';\r\nimport { getCssValFloat } from '../dpitUtilsPublic';\r\nimport DpitBB from './DpitBB';\r\n\r\n\r\nconst calculateSpaceAroundFeature = (tooltipBB, maxScreenBB, isLeftOrRight) => {\r\n\t// Calculate features\r\n\tlet spaceAroundRatio = {\r\n\t\twidth: tooltipBB.width / maxScreenBB.width,\r\n\t\theight: tooltipBB.height / maxScreenBB.height\r\n\t};\r\n\treturn isLeftOrRight ? spaceAroundRatio.width - spaceAroundRatio.height : spaceAroundRatio.height - spaceAroundRatio.width;\r\n};\r\n\r\nconst determineGoldenIncrement = (spaceAroundFeature, isOverHeight, isLeftOrRight, maxDocBB, tooltipBB, closerToTargetBB, tooltipPos) => {\r\n\tlet moveCloserToWinBorder = Math.sign(spaceAroundFeature) < 0;\r\n\r\n\tif (isOverHeight) moveCloserToWinBorder = isLeftOrRight;\r\n\tlet range = [0, 0];\r\n\tswitch (tooltipPos.base) {\r\n\t\tcase 'left': range = moveCloserToWinBorder ? [maxDocBB.left, tooltipBB.left] : [tooltipBB.left, closerToTargetBB.left]; break;\r\n\t\tcase 'right': range = moveCloserToWinBorder ? [tooltipBB.right, maxDocBB.right] : [closerToTargetBB.right, tooltipBB.right]; break;\r\n\t\tcase 'top': range = moveCloserToWinBorder ? [maxDocBB.top, tooltipBB.top] : [tooltipBB.top, closerToTargetBB.top]; break;\r\n\t\tcase 'bottom': range = moveCloserToWinBorder ? [tooltipBB.bottom, maxDocBB.bottom] : [closerToTargetBB.bottom, tooltipBB.bottom]; break;\r\n\t}\r\n\treturn Math.floor((moveCloserToWinBorder ? -1 : 1) * (range[1] - range[0]) / 2);\r\n};\r\n\r\nconst modifyTooltipPosition = (increment, targetBB, tooltipEl, tooltipBB, tooltipPos, isLeftOrRight, tooltipMinWidth) => {\r\n\tif (isLeftOrRight) {\r\n\t\tif (tooltipBB.width - increment < tooltipMinWidth) return false;\r\n\t\tconst bkpTooltipBB = { ...tooltipBB };\r\n\r\n\t\ttooltipEl.style.width = round1dec(tooltipBB.width - increment) + 'px';\r\n\r\n\t\tif (tooltipPos.base === 'left') {\r\n\r\n\t\t\tconst newWidth = $(tooltipEl).outerWidth(false);\r\n\t\t\tif (newWidth !== bkpTooltipBB.width) {\r\n\t\t\t\ttooltipEl.style.left = ceil1dec(tooltipBB.left - (newWidth - bkpTooltipBB.width) - targetBB.left) + 'px';\r\n\t\t\t}\r\n\t\t}\r\n\t\tswitch (tooltipPos.align) {\r\n\t\t\tcase 'middle': {\r\n\t\t\t\tconst newHeight = $(tooltipEl).outerHeight(false);\r\n\t\t\t\tif (newHeight !== bkpTooltipBB.height) {\r\n\t\t\t\t\ttooltipEl.style.top = floor1dec((targetBB.height - newHeight) / 2) + 'px';\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase 'bottom': {\r\n\t\t\t\tconst newHeight = $(tooltipEl).outerHeight(false);\r\n\t\t\t\tif (newHeight !== bkpTooltipBB.height) {\r\n\t\t\t\t\ttooltipEl.style.top = floor1dec(tooltipBB.bottom - newHeight + 1 - targetBB.top) + 'px';\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\telse {\r\n\t\t// adjusting height doesn't automatically change a width ... so changing width instead\r\n\t\tif (tooltipBB.width + increment < tooltipMinWidth) return false;\r\n\t\tconst bkpTooltipHeight = tooltipBB.height;\r\n\t\tconst bkpTooltipWidth = tooltipBB.width;\r\n\t\tconst currentLeft = getCssValFloat(tooltipEl, 'left', 0);\r\n\t\ttooltipEl.style.width = round1dec(tooltipBB.width + increment) + 'px';\r\n\t\tconst newWidth = $(tooltipEl).outerWidth(false);\r\n\t\tconst appliedIncrement = newWidth - bkpTooltipWidth;\r\n\t\tif (bkpTooltipWidth !== newWidth) {\r\n\t\t\tif (tooltipPos.align === 'center') {\r\n\t\t\t\ttooltipEl.style.left = round1dec(currentLeft - (appliedIncrement / 2)) + 'px';\r\n\t\t\t}\r\n\t\t\telse if (tooltipPos.align === 'right') {\r\n\t\t\t\ttooltipEl.style.left = round1dec(tooltipBB.left - appliedIncrement - targetBB.left) + 'px';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (tooltipPos.base === 'top') {\r\n\t\t\tconst newHeight = $(tooltipEl).outerHeight(false);\r\n\t\t\tif (newHeight !== bkpTooltipHeight) {\r\n\t\t\t\ttooltipEl.style.top = floor1dec(tooltipBB.top - (newHeight - bkpTooltipHeight) - targetBB.top) + 'px';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\treturn true;\r\n};\r\n\r\n\r\nconst returnResult = (isOverHeight, wasPosAdjusted, iterations, dpDebugEn, dbgFailedReason) => {\r\n\tif (dpDebugEn) {\r\n\t\tif (wasPosAdjusted) {\r\n\t\t\tconsole.log('[dpit] GOLDEN RATIO:', `success (by ${iterations} iterations)`);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tconsole.log(`[dpit] GOLDEN RATIO: ${dbgFailedReason}`, `iterations: ${iterations}`);\r\n\t\t}\r\n\t}\r\n\treturn {\r\n\t\twasPosAdjusted,\r\n\t\tisOverHeight\r\n\t};\r\n};\r\n\r\n\r\nconst revertLastModificationAndReturn = (lastTooltipInlineStyle, tooltipEl, lastIsOverHeight, iterations, dpDebugEn, dbgFailedReason) => {\r\n\ttooltipEl.setAttribute('style', lastTooltipInlineStyle);\r\n\titerations--;\r\n\treturn returnResult(lastIsOverHeight, iterations > 0, iterations, dpDebugEn, dbgFailedReason);\r\n};\r\n\r\nconst getInlineStyleOfElement = (tooltipEl) => {\r\n\tlet inlineStyle = tooltipEl.getAttribute('style');\r\n\tif (inlineStyle === null) return false;\r\n\tif (typeof inlineStyle === 'object') inlineStyle = inlineStyle.cssText;\r\n\treturn inlineStyle;\r\n};\r\n\r\n\r\nexport default (targetBB, initTooltipBB, tooltipEl, tooltipPos, maxWinBB, maxDocBB, isFixedPos, tooltipMinWidth, dpDebugEn, maxIterations = 10) => {\r\n\tconst initIsOverHeight = initTooltipBB.height > maxWinBB.height;\r\n\tconst isLeftOrRight = ['left', 'right'].includes(tooltipPos.base);\r\n\r\n\tlet iterations = 0;\r\n\r\n\tlet lastTooltipInlineStyle = getInlineStyleOfElement(tooltipEl);\r\n\r\n\r\n\tlet tooltipBB = { ...initTooltipBB };\r\n\tlet lastTooltipBB = null;\r\n\tlet isOverHeight = initIsOverHeight;\r\n\tlet lastIsOverHeight = null;\r\n\tlet lastFeatureSpaceAround = null;\r\n\r\n\t// Calculate the space around feature\r\n\tlet featureSpaceAround = calculateSpaceAroundFeature(tooltipBB, maxWinBB, isLeftOrRight);\r\n\r\n\twhile (iterations < maxIterations) {\r\n\r\n\t\t// Was algorithm successful so finish ?\r\n\t\tlet isBestPosFound = false;\r\n\t\tif (!isOverHeight) {\r\n\t\t\tif (lastFeatureSpaceAround) {\r\n\t\t\t\tconst featureSpaceAroundDerivation = Math.abs(lastFeatureSpaceAround) - Math.abs(featureSpaceAround);\r\n\t\t\t\tisBestPosFound = Math.abs(featureSpaceAround) <= 0.1 || featureSpaceAroundDerivation <= 0.05;\r\n\t\t\t} else {\r\n\t\t\t\tisBestPosFound = Math.abs(featureSpaceAround) <= 0.03;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (isBestPosFound) return returnResult(isOverHeight, iterations > 0, iterations, dpDebugEn, 'was not needed');\r\n\r\n\t\t// Determine size/position increment by golden ratio\r\n\t\tconst increment = determineGoldenIncrement(\r\n\t\t\tfeatureSpaceAround,\r\n\t\t\tisOverHeight,\r\n\t\t\tisLeftOrRight,\r\n\t\t\tmaxDocBB,\r\n\t\t\ttooltipBB,\r\n\t\t\titerations === 0 ? targetBB : tooltipBB,\r\n\t\t\ttooltipPos\r\n\t\t);\r\n\r\n\t\titerations++;\r\n\t\tlet wasPositionChange = false;\r\n\t\t// Change to new size/position\r\n\t\tif (increment && modifyTooltipPosition(\r\n\t\t\tincrement,\r\n\t\t\ttargetBB,\r\n\t\t\ttooltipEl,\r\n\t\t\ttooltipBB,\r\n\t\t\ttooltipPos,\r\n\t\t\tisLeftOrRight,\r\n\t\t\ttooltipMinWidth,\r\n\t\t\tisFixedPos\r\n\t\t)) {\r\n\t\t\ttooltipBB = DpitBB.fromElement(tooltipEl, isFixedPos);\r\n\t\t\tconst maxArea = maxWinBB;// isFixedPos ? maxWinBB : maxDocBB;\r\n\t\t\tif (tooltipBB && tooltipBB.left >= maxArea.left - 1 && tooltipBB.right <= maxArea.right + 1) {\r\n\t\t\t\twasPositionChange = true;\r\n\t\t\t} else {\r\n\t\t\t\treturn revertLastModificationAndReturn(\r\n\t\t\t\t\tlastTooltipInlineStyle,\r\n\t\t\t\t\ttooltipEl,\r\n\t\t\t\t\tlastIsOverHeight ?? initIsOverHeight,\r\n\t\t\t\t\titerations,\r\n\t\t\t\t\tdpDebugEn,\r\n\t\t\t\t\t'out of win'\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tif (!wasPositionChange || (lastTooltipBB && DpitBB.isEqual(lastTooltipBB, tooltipBB))) {\r\n\t\t\treturn revertLastModificationAndReturn(\r\n\t\t\t\tlastTooltipInlineStyle,\r\n\t\t\t\ttooltipEl,\r\n\t\t\t\tlastIsOverHeight ?? initIsOverHeight,\r\n\t\t\t\titerations,\r\n\t\t\t\tdpDebugEn,\r\n\t\t\t\t'no effect'\r\n\t\t\t);\r\n\t\t}\r\n\t\t// Check over height\r\n\t\tisOverHeight = tooltipBB.height > maxWinBB.height;\r\n\t\tlastFeatureSpaceAround = featureSpaceAround;\r\n\t\tfeatureSpaceAround = calculateSpaceAroundFeature(tooltipBB, maxWinBB, isLeftOrRight);\r\n\t\t// Check not a beneficial golden iteration direction\r\n\t\tif (lastFeatureSpaceAround && !isOverHeight && Math.abs(featureSpaceAround) > Math.abs(lastFeatureSpaceAround)) {\r\n\t\t\treturn revertLastModificationAndReturn(\r\n\t\t\t\tlastTooltipInlineStyle,\r\n\t\t\t\ttooltipEl,\r\n\t\t\t\tlastIsOverHeight ?? initIsOverHeight,\r\n\t\t\t\titerations,\r\n\t\t\t\tdpDebugEn,\r\n\t\t\t\t'worse feature'\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tlastTooltipInlineStyle = getInlineStyleOfElement(tooltipEl);\r\n\t\tlastTooltipBB = { ...tooltipBB };\r\n\t\tlastIsOverHeight = isOverHeight;\r\n\t}\r\n\treturn returnResult(initIsOverHeight, false, iterations, dpDebugEn, 'too many iterations');\r\n};","\r\nimport { } from '../dpitUtilsPublic';\r\nimport DpitTarget from './DpitTarget';\r\nimport DpitTargetParent from './DpitTargetParent';\r\n\r\n\r\nexport default class DpitTargetBranch {\r\n\tconstructor(targetElement, dpDebugEn) {\r\n\t\tthis.dpDebugEn = dpDebugEn;\r\n\t\t//this.initProcessData();\r\n\t\tthis.initBranch(targetElement, dpDebugEn);\r\n\t}\r\n\r\n\tinitProcessData() {\r\n\t\tthis.isZIdxFixParent = false;\r\n\t\tthis.closestFixedPosItem = null;\r\n\t\tthis.fixedPosElements = [];\r\n\t\tthis.stickyPosElements = [];\r\n\t\tthis.scrollableElements = [];\r\n\t}\r\n\r\n\r\n\tinitBranch(targetElement) {\r\n\t\tthis.branchItems = [];\r\n\t\tif (targetElement) {\r\n\t\t\tlet element = targetElement;\r\n\t\t\tlet distance = 0;\r\n\t\t\tdo {\r\n\t\t\t\tswitch (distance) {\r\n\t\t\t\t\tcase 0: this.branchItems.push(new DpitTarget(element)); break;\r\n\t\t\t\t\tdefault: this.branchItems.push(new DpitTargetParent(element)); break;\r\n\t\t\t\t}\r\n\t\t\t\telement = element.parentNode;\r\n\t\t\t\tdistance++;\r\n\t\t\t\tif (!element.tagName || element.tagName.toLowerCase() === 'body') break;\r\n\t\t\t} while (element !== null);\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tgetTargetItem() {\r\n\t\treturn this.branchItems[0];\r\n\t}\r\n\r\n\tcontainsFixed() {\r\n\t\treturn this.fixedPosElements?.length > 0;\r\n\t}\r\n\r\n\tcontainsFixedParent() {\r\n\t\treturn this.closestFixedPosItem?.element !== null;\r\n\t}\r\n\r\n\tgetClosestFixedParent() {\r\n\t\treturn this.closestFixedPosItem?.element;\r\n\t}\r\n\r\n\tgetFirstScrollableChildFromClosestFixedParent() {\r\n\t\tif (!this.closestFixedPosItem?.element || !this.branchItems) return null;\r\n\t\tconst closestFixedPosItemIdx = this.branchItems.indexOf(this.closestFixedPosItem, 1);\r\n\t\tif (closestFixedPosItemIdx > 0) {\r\n\t\t\tfor (let distanceFromTarget = closestFixedPosItemIdx; distanceFromTarget > 0; distanceFromTarget--) {\r\n\t\t\t\tconst item = this.branchItems[distanceFromTarget];\r\n\t\t\t\tif (item.analysis.isScrollable) {\r\n\t\t\t\t\treturn item.element;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcontainsSticky() {\r\n\t\treturn this.stickyPosElements?.length > 0;\r\n\t}\r\n\r\n\tcontainsScrollable() {\r\n\t\treturn this.scrollableElements?.length > 0;\r\n\t}\r\n\r\n\tprocess() {\r\n\t\tthis.initProcessData();\r\n\t\tthis.branchItems.forEach(item => {\r\n\t\t\titem.process(this.isZIdxFixParent);\r\n\t\t\tif (!this.isZIdxFixParent && item.needsZIndexFix) this.isZIdxFixParent = true;\r\n\r\n\t\t\tif (item.analysis.isFixed) {\r\n\t\t\t\tthis.fixedPosElements.push(item.element);\r\n\t\t\t\tif (item !== this.getTargetItem()) {\r\n\t\t\t\t\tthis.closestFixedPosItem = item;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (item.analysis.isSticky) this.stickyPosElements.push(item.element);\r\n\t\t\tif (item.analysis.isScrollable) this.scrollableElements.push(item.element);\r\n\t\t});\r\n\t\tif (this.dpDebugEn) console.log('[dpit] Branch analysis:', this.branchItems, this);\r\n\t}\r\n\r\n\tdestroy() {\r\n\t\tthis.branchItems.forEach(item => {\r\n\t\t\titem.destroy();\r\n\t\t});\r\n\t}\r\n\r\n\r\n}","import { showElement } from '../../../../../includes/assets/js/modules/dpitHidden';\r\nimport { getParentsAndChildrenLinkElements } from '../dpitUtilsPublic';\r\nimport { MODIFIERS, TIMING, CLASSES_CORE } from './constants';\r\nimport EventListeners from './EventListeners';\r\nimport ExclusiveClickListener from './ExclusiveClickListener';\r\n\r\n\r\nexport default class DpitUserInteraction {\r\n\r\n\tconstructor(options, tooltipRefEl, animation, onIterateStep, onIterateStepInProgress, onBeforeUnloadByLinkClick) {\r\n\t\tif (options.debugEn) console.log('[dpit] INIT DpitUserInteraction');\r\n\t\tthis.onBeforeUnloadByLinkClick = onBeforeUnloadByLinkClick;\r\n\t\tthis.tooltipRefEl = tooltipRefEl;\r\n\t\tthis.options = options;\r\n\t\tthis.animation = animation;\r\n\t\tthis.onIterateStep = onIterateStep;\r\n\t\tthis.onIterateStepInProgress = onIterateStepInProgress;\r\n\t\tthis.isIterateStepInAction = false;\r\n\t\tthis.hoverListeners = new EventListeners();\r\n\t\tthis.linkClickListener = new ExclusiveClickListener(this.processTargetLinkClick.bind(this), true, false, false, true);\r\n\t\tthis.iterateClickListener = new ExclusiveClickListener(this.iterateStepAfterUserAction.bind(this));\r\n\t\tthis.blockClickListener = new ExclusiveClickListener();\r\n\t}\r\n\r\n\tupdate(stepItem) {\r\n\t\tthis.destroy();\r\n\t\tthis.stepItem = { ...stepItem };\r\n\t\tthis.element = stepItem?.element;\r\n\t\tthis.updateIterateAfterClick();\r\n\t\tthis.updateIterateAfterHover();\r\n\t\tthis.updateLinkClick();\r\n\t}\r\n\r\n\r\n\tdestroy() {\r\n\t\tthis.clearIterateAfterClick();\r\n\t\tthis.clearIterateAfterHover();\r\n\t\tthis.clearTargetLinkClickAdjustment();\r\n\t\tthis.iterateClickListener.clear(true);\r\n\t\tthis.blockClickListener.clear(true);\r\n\t\tthis.hoverListeners.removeAll();\r\n\t}\r\n\r\n\r\n\r\n\tupdateDisableInteractionLayer(stepItem, wrapEl, moveLayer2TargetFce) {\r\n\t\tif (stepItem && stepItem.enable_interaction.val != '1') {\r\n\t\t\tthis.insertDisableInteractionLayer(wrapEl, moveLayer2TargetFce);\r\n\t\t} else {\r\n\t\t\tthis.removeDisableInteractionLayer();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tinsertDisableInteractionLayer(wrapEl, moveLayer2TargetFce) {\r\n\t\tif (!this.disableInteractionLayer && this.tooltipRefEl) {\r\n\t\t\tthis.disableInteractionLayer = document.createElement('div');\r\n\t\t\tthis.disableInteractionLayer.className = CLASSES_CORE.disableInteraction;\r\n\t\t\twrapEl.insertBefore(this.disableInteractionLayer, this.tooltipRefEl);\r\n\t\t}\r\n\t\tif (moveLayer2TargetFce instanceof Function) moveLayer2TargetFce(this.disableInteractionLayer);\r\n\t}\r\n\r\n\tremoveDisableInteractionLayer() {\r\n\t\tif (this.disableInteractionLayer) {\r\n\t\t\tthis.disableInteractionLayer.parentNode.removeChild(this.disableInteractionLayer);\r\n\t\t\tthis.disableInteractionLayer = null;\r\n\t\t}\r\n\t}\r\n\r\n\tupdateLinkClick() {\r\n\t\tif (this.stepItem?.element && !this.isBlockClicks() && !this.isIterateAfterClick(this.stepItem)) {\r\n\t\t\tthis.startTargetLinkClickAdjustment();\r\n\t\t} else {\r\n\t\t\tthis.clearTargetLinkClickAdjustment();\r\n\t\t}\r\n\t}\r\n\r\n\tstartTargetLinkClickAdjustment() {\r\n\t\tthis.linkClickListener.clear(true);\r\n\t\tconst allElementsToBlock = getParentsAndChildrenLinkElements(this.stepItem?.element, true);\r\n\t\tif (allElementsToBlock) {\r\n\t\t\tthis.linkClickListener.addElements(allElementsToBlock);\r\n\t\t}\r\n\t}\r\n\r\n\tclearTargetLinkClickAdjustment() {\r\n\t\tthis.linkClickListener.clear(true);\r\n\t}\r\n\r\n\t/**\r\n\t * Force to open link element in new tab\r\n\t * @param {Event} event click event\r\n\t * @param {Element} linkElement element where event occurs\r\n\t */\r\n\tprocessTargetLinkClick(event, linkElement) {\r\n\r\n\t\tif (this.disabled && this.userInteractionTryWhenDisabledFce) {\r\n\t\t\tthis.userInteractionTryWhenDisabledFce();\r\n\t\t}\r\n\t\tconst isBlockClicks = this.isBlockClicks();\r\n\r\n\t\tif (!this.isIterateStepInAction && !this.disabled && linkElement && !isBlockClicks && !this.isIterateAfterClick(this.stepItem)) {\r\n\t\t\tconst hrefAttribute = linkElement.getAttribute('href');\r\n\r\n\t\t\tif (hrefAttribute && event) {\r\n\t\t\t\tconst targetAttribute = linkElement.getAttribute('target');\r\n\t\t\t\tif (targetAttribute === '_blank' || this.isOpenTargetLinkClicksInNewTab()) {\r\n\t\t\t\t\tif (this.options.dpDebugEn) console.log('[dpit] TARGET CLICK: element inside a target was clicked and opened in new tab.');\r\n\t\t\t\t\tif (!event.defaultPrevented) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\twindow.open(hrefAttribute, '_blank');\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t} catch (exception) {\r\n\t\t\t\t\t\t\tconsole.error(exception);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (this.onBeforeUnloadByLinkClick instanceof Function) {\r\n\t\t\t\t\tthis.onBeforeUnloadByLinkClick(hrefAttribute);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (event && isBlockClicks) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tclearIterateAfterClick() {\r\n\t\tif (this.element) {\r\n\t\t\tthis.element.classList.remove(\r\n\t\t\t\tCLASSES_CORE.target + MODIFIERS.click,\r\n\t\t\t\tCLASSES_CORE.target + MODIFIERS.blockClick\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tupdateIterateAfterClick() {\r\n\t\tif (this.element) {\r\n\t\t\tthis.iterateClickListener.clear(true);\r\n\t\t\tif (this.isIterateAfterClick(this.stepItem)) {\r\n\t\t\t\tthis.iterateClickListener.addElement(this.element);\r\n\t\t\t\tthis.element.classList.add(CLASSES_CORE.target + MODIFIERS.click);\r\n\t\t\t}\r\n\t\t\telse if (this.isBlockClicks(this.stepItem)) {\r\n\t\t\t\tthis.blockClickListener.addElement(this.element);\r\n\t\t\t\tthis.element.classList.add(CLASSES_CORE.target + MODIFIERS.blockClick);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tdisable(userInteractionTryWhenDisabledFce) {\r\n\t\tthis.disabled = true;\r\n\t\tthis.userInteractionTryWhenDisabledFce = userInteractionTryWhenDisabledFce;\r\n\t}\r\n\r\n\tenable() {\r\n\t\tthis.disabled = false;\r\n\t\tthis.userInteractionTryWhenDisabledFce = null;\r\n\t}\r\n\r\n\r\n\titerateStepAfterUserAction() {\r\n\r\n\t\tif (this.disabled && this.userInteractionTryWhenDisabledFce) this.userInteractionTryWhenDisabledFce();\r\n\r\n\t\tif (!this.isIterateStepInAction && !this.disabled && this.stepItem) {\r\n\t\t\tthis.isIterateStepInAction = true;\r\n\t\t\tlet delay = this.stepItem.enable_interaction?.ext?.iterate_after_click_delay_ms ?? TIMING.defaultIterateAfterClick;\r\n\t\t\tthis.animation.start();\r\n\t\t\t//hideElement(this.stepItem?.element);\r\n\t\t\tif (this.onIterateStepInProgress instanceof Function) {\r\n\t\t\t\tthis.onIterateStepInProgress(true);\r\n\t\t\t}\r\n\t\t\tthis.destroy();\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.animation.stop();\r\n\t\t\t\tshowElement(this.stepItem?.element);\r\n\t\t\t\tif (this.onIterateStepInProgress instanceof Function) {\r\n\t\t\t\t\tthis.onIterateStepInProgress(false);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.onIterateStep instanceof Function) {\r\n\t\t\t\t\tthis.onIterateStep();\r\n\t\t\t\t}\r\n\t\t\t\tthis.isIterateStepInAction = false;\r\n\t\t\t}, delay);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tisInteractionFeatureEnabled(featureId) {\r\n\t\treturn this.stepItem\r\n\t\t\t&& this.stepItem.element\r\n\t\t\t&& this.stepItem.enable_interaction.val == '1'\r\n\t\t\t&& this.stepItem.enable_interaction.ext\r\n\t\t\t&& this.stepItem.enable_interaction.ext[featureId] == '1';\r\n\t}\r\n\r\n\tisIterateAfterClick() {\r\n\t\treturn this.isInteractionFeatureEnabled('iterate_after_click');\r\n\t}\r\n\r\n\tisOpenTargetLinkClicksInNewTab() {\r\n\t\treturn this.isInteractionFeatureEnabled('open_target_link_clicks_in_new_tab');\r\n\t}\r\n\r\n\tisBlockClicks() {\r\n\t\treturn this.isInteractionFeatureEnabled('iterate_after_click_stop_propagation');\r\n\t}\r\n\r\n\r\n\tupdateIterateAfterHover() {\r\n\t\tif (this.element) {\r\n\t\t\tif (this.isIterateAfterHover(this.stepItem)) {\r\n\t\t\t\tthis.hoverListeners.add(this.element, 'mouseenter', this.iterateStepAfterUserAction.bind(this));\r\n\t\t\t\tthis.element.classList.add(CLASSES_CORE.target + MODIFIERS.hover);\r\n\t\t\t} else {\r\n\t\t\t\tthis.clearIterateAfterHover();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclearIterateAfterHover() {\r\n\t\tif (this.element) {\r\n\t\t\tthis.element.classList.remove(CLASSES_CORE.target + MODIFIERS.hover);\r\n\t\t}\r\n\t}\r\n\r\n\tisIterateAfterHover() {\r\n\t\treturn this.stepItem\r\n\t\t\t&& this.stepItem.element\r\n\t\t\t&& this.stepItem.enable_interaction.val == '1'\r\n\t\t\t//&& !this.stepItem.isDummyElement\r\n\t\t\t&& this.stepItem.enable_interaction.ext?.iterate_after_hover == '1';\r\n\t}\r\n\r\n}\r\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}"],"sourceRoot":""}