import layoutManager from"./../layoutmanager.js";import dom from"./../dom.js";import focusManager from"./../focusmanager.js";import appHeaderContent from"./../appheader/appheadercontent.js";import skinViewManager from"./../skinviewmanager.js";require(["scrollStyles"]);let StartLocation="start",CenterLocation="center",EndLocation="end",AdaptiveLocation="adaptive",preventScrollSupported=(()=>{let 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=(()=>{var deviceMemory,platform,cores=navigator.hardwareConcurrency||4;return!(cores<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 onSourceClick(event){var dragging=this.dragging;!dragging.locked&&0abs(touches):abs(pathX)=absScrollPos&&itemOffset+size<=currentEnd,enableNativeScroll=scrollOptions||Math.abs(startOffsetForPositioning)+size>=absScrollPos&&itemOffset<=currentEnd,item=subtractPaddingFromFrameSize(this,horizontal,options),itemOffset=startOffsetForPositioning+slideeOffset-(item/2-size/2)*multiplier-(focusScrollOffset||0),horizontal=startOffsetForPositioning-(item-size)*multiplier-(focusScrollOffset||0);return{start:startOffsetForPositioning,center:itemOffset,end:horizontal,isVisible:scrollOptions,anyVisible:enableNativeScroll}},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=getComputedStyle(frame),this.slideeSize={width:Math.max(frame.offsetWidth,frame.scrollWidth)+parsePxToInt(newFrameSize.getPropertyValue(PaddingInlineStartProp))+parsePxToInt(newFrameSize.getPropertyValue(PaddingInlineEndProp)),height:Math.max(frame.offsetHeight,frame.scrollHeight)+parsePxToInt(newFrameSize.getPropertyValue("padding-top"))+parsePxToInt(newFrameSize.getPropertyValue("padding-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(){if(!this.frameResizeObserver)return addFrameResizeObserver(this),this.nativeScrollElement.getBoundingClientRect();let rect=this._frameRect;return null==rect&&(rect=this.nativeScrollElement.getBoundingClientRect(),this._frameRect=rect),rect},Scroller.prototype.getScrollSlider=function(){return this.slideeElement},Scroller.prototype.addScrollEventListener=function(fn,options){this.listenerCount++,this.options.dispatchScrollEvent=0=scrollPosition?EndLocation:CenterLocation,scrollOptions.skipWhenVisibleX=!0}itemPosX=itemPos,scrollOptions.left=itemPos[location]}if(!horizontal||dualScroll){let location=toLocation,frameSizeForComparison=getFrameSize(this,horizontal=!1),adaptiveBorderStart=(scrollOptions.frameHeightForComparison=frameSizeForComparison,options.adaptiveBorderYStart),adaptiveBorderEnd=(null==adaptiveBorderStart&&(adaptiveBorderStart=Math.max(horizontal?.03*frameSizeForComparison:.08*frameSizeForComparison,30)),options.adaptiveBorderYEnd),itemPos=(null==adaptiveBorderEnd&&(adaptiveBorderEnd=Math.max(horizontal?.03*frameSizeForComparison:.08*frameSizeForComparison,30)),scrollOptions.location=location,scrollOptions.adaptiveBorderYStart=adaptiveBorderStart,scrollOptions.adaptiveBorderYEnd=adaptiveBorderEnd,this.getElementPosition(item,horizontal,scrollOptions));if(adaptiveScroll){let multiplier=horizontal?this.getScrollLeftMultiplier():this.getScrollTopMultiplier(),scrollPosition=(horizontal?this.getScrollLeft():this.getScrollTop())*multiplier,options=this.options,startEdge=(adaptiveBorderStart*=multiplier,adaptiveBorderEnd*=multiplier,itemPos[StartLocation]-=adaptiveBorderStart,itemPos[EndLocation]+=adaptiveBorderEnd,0);options.autoStartEdge&&(startEdge=horizontal?.05*frameSizeForComparison:+appHeaderContent.getHeight()),itemPos[StartLocation]*multiplier=scrollPosition?EndLocation:CenterLocation,scrollOptions.skipWhenVisibleY=!0}itemPosY=itemPos,scrollOptions.top=itemPos[location]}this.slideTo(scrollOptions,itemPosX,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||StartLocation,item,scrollOptions)},Scroller.prototype.toCenter=function(item,scrollOptions){this.to(CenterLocation,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.removeEventListener(frame,"scroll",resetScrollTop,{passive:!0}),dom.removeEventListener(frame,"scroll",resetScrollLeft,{passive:!0}),dom.removeEventListener(frame,"scroll",resetScroll,{passive:!0}),mouseWheelHandler=this.mouseWheelHandler)&&dom.removeEventListener(frame,wheelEvent,mouseWheelHandler,{passive:!0}),this.mouseWheelHandler=null,this.dragStartHandler),dragSourceElement=this.dragSourceElement,dragSourceElement=(mouseWheelHandler&&dragSourceElement&&(dom.removeEventListener(dragSourceElement,"touchstart",mouseWheelHandler,{passive:!0}),dom.removeEventListener(dragSourceElement,"mousedown",mouseWheelHandler,{passive:!0}),dom.removeEventListener(dragSourceElement,"pointerdown",mouseWheelHandler,{passive:!0})),this.dragStartHandler=null,this.dragSourceElement=null,this.focusHandler),mouseWheelHandler=(dragSourceElement&&frame&&dom.removeEventListener(frame,"focus",dragSourceElement,{capture:!0,passive:!0}),this.focusHandler=null,this.boundOnFrameClick);return mouseWheelHandler&&frame&&dom.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._cachedPadding=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)};export default Scroller;