define(["exports","./../layoutmanager.js","./../dom.js","./../focusmanager.js","./../skinviewmanager.js"],function(_exports,_layoutmanager,_dom,_focusmanager,_skinviewmanager){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["scrollStyles"]);var deviceMemory,platform,cores,preventScrollSupported=function(){var supported=!1;try{var focusOptions={};Object.defineProperty(focusOptions,"preventScroll",{get:function(){return supported=!0},enumerable:!0,configurable:!0}),document.createElement("div").focus(focusOptions)}catch(err){console.log("error testing preventScroll support: "+err)}return supported}(),allowAnimatedScroll=!((cores=navigator.hardwareConcurrency||4)<4||(2400<=(screen.width||screen.availWidth||0)||1400<=(screen.height||screen.availHeight||0))&&cores<6||(deviceMemory=navigator.deviceMemory||2)<2||!document.documentElement.animate||!CSS.supports("display","flow-root")||(platform=(navigator.platform||"").toLowerCase(),"android"===globalThis.appMode&&(cores<4||deviceMemory<2||platform.includes("armv7"))));function within(number,start,end){var min=startabs(touches):abs(pathX)=options&&scrollOptions+itemOffset<=currentEnd,options=slideeOffset||Math.abs(enableNativeScroll)+itemOffset>=options&&scrollOptions<=currentEnd,scrollOptions=subtractPaddingFromFrameSize(this,horizontal,scrollOffset);return{start:enableNativeScroll,center:enableNativeScroll+item-(scrollOptions/2-itemOffset/2)*multiplier-(focusScrollOffset||0),end:enableNativeScroll-(scrollOptions-itemOffset)*multiplier-(focusScrollOffset||0),isVisible:slideeOffset,anyVisible:options,size:itemOffset}},Scroller.prototype.ensureSizeInfo=function(){var options,horizontal,dualScroll,frame,newFrameSize;this.requiresReflow&&(this.requiresReflow=!1,frame=this.frame,horizontal=(options=this.options).horizontal,newFrameSize={},dualScroll=options.dualScroll,(horizontal||dualScroll)&&(newFrameSize.width=frame.offsetWidth),horizontal&&!dualScroll||(newFrameSize.height=frame.offsetHeight),this.frameSize=newFrameSize,options.enableNativeScroll||(frame=this.slideeElement,newFrameSize=this.getSlideePadding(),this.slideeSize={width:Math.max(frame.offsetWidth,frame.scrollWidth)+newFrameSize.inlineStart+newFrameSize.inlineEnd,height:Math.max(frame.offsetHeight,frame.scrollHeight)+newFrameSize.top+newFrameSize.bottom},(horizontal||dualScroll)&&(this._pos.endX=Math.max(this.getScrollWidth()-getFrameSize(this,!0,!0),0)*this.getScrollLeftMultiplier()),horizontal&&!dualScroll)||(this._pos.endY=Math.max(this.getScrollHeight()-getFrameSize(this,!1,!0),0)*this.getScrollTopMultiplier()))},Scroller.prototype.getScrollEventName=function(){return this.options.enableNativeScroll?"scroll":"scrollanimate"},Scroller.prototype.getScrollContainerBoundingClientRect=function(){var rect;return this.frameResizeObserver?(null==(rect=this._frameRect)&&(rect=this.nativeScrollElement.getBoundingClientRect(),this._frameRect=rect),rect):(addFrameResizeObserver(this),this.nativeScrollElement.getBoundingClientRect())},Scroller.prototype.getScrollSlider=function(){return this.slideeElement},Scroller.prototype.addScrollEventListener=function(fn,options){this.listenerCount++,this.options.dispatchScrollEvent=0=(horizontal?this._pos.endX:this._pos.endY)-startPadding-2*adaptiveBorderEnd-frameSizeForComparison.size&&(frameSizeForComparison.end+=adaptiveBorderEnd,_options.enableNativeScroll)&&(frameSizeForComparison.end+=adaptiveBorderEnd),adaptiveBorderStart=startPadding),frameSizeForComparison.start*multiplier=scrollPosition?"end":"center",scrollOptions.skipWhenVisibleX=!0),scrollOptions.left=(slideePadding=frameSizeForComparison)[location]),horizontal&&!dualScroll||(_options=toLocation,adaptiveBorderEnd=getFrameSize(this,horizontal=!1),scrollOptions.frameHeightForComparison=adaptiveBorderEnd,null==(startPadding=options.adaptiveBorderYStart)&&(startPadding=Math.max(horizontal?.03*adaptiveBorderEnd:.08*adaptiveBorderEnd,30)),null==(adaptiveBorderStart=options.adaptiveBorderYEnd)&&(adaptiveBorderStart=Math.max(horizontal?.03*adaptiveBorderEnd:.08*adaptiveBorderEnd,30)),scrollOptions.location=_options,scrollOptions.adaptiveBorderYStart=startPadding,scrollOptions.adaptiveBorderYEnd=adaptiveBorderStart,multiplier=this.getElementPosition(item,horizontal,scrollOptions),adaptiveScroll&&(scrollPosition=horizontal?this.getScrollLeftMultiplier():this.getScrollTopMultiplier(),frameSizeForComparison=(horizontal?this.getScrollLeft():this.getScrollTop())*scrollPosition,location=this.options,adaptiveBorderStart*=scrollPosition,multiplier.start-=startPadding*=scrollPosition,multiplier.end+=adaptiveBorderStart,dualScroll=0,location.autoStartEdge&&(toLocation=this.getPadding(),options=this.getSlideePadding(),adaptiveBorderEnd=horizontal?toLocation.inlineStart+options.inlineStart:toLocation.top+options.top,item=horizontal?toLocation.inlineEnd+options.inlineEnd:toLocation.bottom+options.bottom,multiplier.end*scrollPosition>=(horizontal?this._pos.endX:this._pos.endY)-adaptiveBorderEnd-2*item-multiplier.size&&(multiplier.end+=item,location.enableNativeScroll)&&(multiplier.end+=item),dualScroll=adaptiveBorderEnd),multiplier.start*scrollPosition=frameSizeForComparison?"end":"center",scrollOptions.skipWhenVisibleY=!0),scrollOptions.top=(itemPosY=multiplier)[_options]),this.slideTo(scrollOptions,slideePadding,itemPosY)},Scroller.prototype.toStart=function(item,scrollOptions){this.to("start",item,scrollOptions)},Scroller.prototype.toEnd=function(item,scrollOptions){this.to("end",item,scrollOptions)},Scroller.prototype.scrollToElement=function(item,scrollOptions){var options=this.options;return null==(scrollOptions=scrollOptions||{}).offsetLeft&&(scrollOptions.offsetLeft=options.focusScrollOffsetLeft),null==scrollOptions.offsetTop&&(scrollOptions.offsetTop=options.focusScrollOffsetTop),options.enableNativeScroll&&!options.allowNativeSmoothScroll&&(scrollOptions.behavior="instant"),this.to(options.focusScroll||"start",item,scrollOptions)},Scroller.prototype.toCenter=function(item,scrollOptions){this.to("center",item,scrollOptions)},Scroller.prototype.scrollBackwards=function(){this.scrollBy(0-this.options.scrollBy)},Scroller.prototype.scrollForwards=function(){this.scrollBy(this.options.scrollBy)},Scroller.prototype.notifyResized=function(){onResize.call(this,[])},Scroller.prototype.destroy=function(){this.frameResizeObserver&&(this.frameResizeObserver.disconnect(),this.frameResizeObserver=null);var frame=this.frame,mouseWheelHandler=(frame&&(_dom.default.removeEventListener(frame,"scroll",resetScrollTop,{passive:!0}),_dom.default.removeEventListener(frame,"scroll",resetScrollLeft,{passive:!0}),_dom.default.removeEventListener(frame,"scroll",resetScroll,{passive:!0}),mouseWheelHandler=this.mouseWheelHandler)&&_dom.default.removeEventListener(frame,wheelEvent,mouseWheelHandler,{passive:!0}),this.mouseWheelHandler=null,this.dragStartHandler),dragSourceElement=this.dragSourceElement,dragSourceElement=(mouseWheelHandler&&dragSourceElement&&(_dom.default.removeEventListener(dragSourceElement,"touchstart",mouseWheelHandler,{passive:!0}),_dom.default.removeEventListener(dragSourceElement,"mousedown",mouseWheelHandler,{passive:!0}),_dom.default.removeEventListener(dragSourceElement,"pointerdown",mouseWheelHandler,{passive:!0})),this.dragStartHandler=null,this.dragSourceElement=null,this.focusHandler),mouseWheelHandler=(dragSourceElement&&frame&&_dom.default.removeEventListener(frame,"focus",dragSourceElement,{capture:!0,passive:!0}),this.focusHandler=null,this.boundOnFrameClick);return mouseWheelHandler&&frame&&_dom.default.removeEventListener(frame,"click",mouseWheelHandler,{passive:!0,capture:!0}),this.boundOnFrameClick=null,this.removeScrollCacheListener(),this.initialized=null,this.nativeScrollElement=null,this.frame=null,this.options=null,this.slideeSize=null,this._pos=null,this.requiresReflow=null,this.frameSize=null,this.dragging=null,this.contentRects=null,this.dragHandler=null,this.onSourceClickFn=null,this.onScrollForCachingFn=null,this.resizeListeners=null,this._cachedScrollTop=null,this._cachedScrollLeft=null,this._cachedScrollHeight=null,this._cachedScrollWidth=null,this._framePadding=null,this._slideePadding=null,this._frameRect=null,this.slideeElement=null,this.slideeElementStyle=null,this},Scroller.create=function(frame,options){frame=new Scroller(frame,options);return Promise.resolve(frame)};_exports.default=Scroller});