import dom from"./../dom.js";import layoutManager from"./../layoutmanager.js";import focusManager from"./../focusmanager.js";require(["css!modules/virtual-scroller/virtual-scroller.css"]);let useSetTimeout=!1,rAF=useSetTimeout?setTimeout:requestAnimationFrame,cAF=useSetTimeout?clearTimeout:cancelAnimationFrame,supportsContentVisibility=CSS.supports("content-visibility","hidden"),displayProp=supportsContentVisibility?"contentVisibility":"display",displayHiddenValue=supportsContentVisibility?"hidden":"none",supportsInsetShorthand=CSS.supports("inset","0 0 0 0"),supportsTransform=CSS.supports("transform","scale(1)"),supportsTranslate=CSS.supports("translate","40px 100px");function Layout1dBase(config){this._physicalMin=0,this._physicalMax=0,this._first=-1,this._last=-1,this._itemSize={width:0,height:0},this._scrollPosition=0,this._viewportSize={width:0,height:0},this._totalItems=0,this._scrollSize=1,this._pendingReflow=!1,Object.assign(this,config)}function Layout1dGrid(config){Layout1dBase.call(this,config),this._rolumns=1}function VirtualScroller(config){this._inlineMultiplier="rtl"===document.dir?-1:1,this._totalItems=0,this._num=1/0,this._first=0,this._last=0,this._prevFirst=0,this._prevLast=0,this._needsReset=!1,this._needsRemeasure=!1,this._pendingRender=null,this._container=null,this._ordered=[],this._keyToChild=[],this._indexToMeasure={},this.requestAnimationFrameCallbackFn=this.requestAnimationFrameCallback.bind(this),this._num=0,this._first=-1,this._last=-1,this._prevFirst=-1,this._prevLast=-1,this._needsUpdateViewSize=!1,this._needsUpdateViewScrollPosition=!1,this._layout=null,this._scrollTarget=null,this._scrollSize=null,this._childrenPos=null,this._container=null,this._containerSize=null,this._containerRO=new ResizeObserver(this._containerSizeChanged.bind(this)),this.boundOnScrollTargetResize=this._scrollTargetSizeChanged.bind(this),this._skipNextChildrenSizeChanged=!1,this.sameSizeChildren=config.sameSizeChildren,this.sameSizeChildren||(this._childrenRO=new ResizeObserver(this._childrenSizeChanged.bind(this))),this.boundHandleScroll=this.handleScroll.bind(this),this.setContainer(config.container),this.setScrollTarget(config.scrollTarget)}function getNewIndex(instance,currentIndex,direction){var instance=instance._layout,isVertical=instance.isVertical,rolumns=instance._rolumns,instance=instance._totalItems,dim1Index=Math.floor(currentIndex/rolumns),dim2Index=currentIndex%rolumns,rowIndex=isVertical?dim1Index:dim2Index,dim2Index=isVertical?dim2Index:dim1Index,dim1Index=isVertical?rolumns?Math.ceil(instance/rolumns):Number.MAX_SAFE_INTEGER:rolumns,rolumns=isVertical?rolumns:rolumns?Math.ceil(instance/rolumns):Number.MAX_SAFE_INTEGER;let newRowIndex=rowIndex,newColIndex=dim2Index;switch(direction){case 0:"rtl"===document.dir?newColIndex++:newColIndex--;break;case 1:"rtl"===document.dir?newColIndex--:newColIndex++;break;case 2:newRowIndex--;break;case 3:newRowIndex++;break;default:throw new Error("Invalid dir param")}if(newRowIndex<0||newColIndex<0)return-1;if(newRowIndex>=dim1Index||newColIndex>=rolumns)return-1;let newIndex=isVertical?newRowIndex*rolumns+newColIndex:newColIndex*dim1Index+newRowIndex;return(newIndex=newIndex>currentIndex?Math.min(newIndex,instance-1):newIndex)===currentIndex?-1:newIndex}function getFocusableElements(newItemToFocus,activeElement,direction){return newItemToFocus||null==(newItemToFocus=getNewIndex(this,activeElement._dataItemIndex,direction))?null:!(newItemToFocus<0)&&(activeElement=this._container.getElement(newItemToFocus))?[activeElement]:[]}function positionChildrenInsets(instance,pos){var layout=instance._layout,rolumns=layout._rolumns,itemDim1=layout._itemDim1(),itemDim2=layout._itemDim2();if(itemDim1&&itemDim2){var kids=instance._ordered,first=instance._first;let secondaryPositionOffset=0;layout.isVertical&&1min)||this._physicalMaxthis._prevLast?{indices:[first],children:kids}:{indices:[],children:[]}):this._ordered.reduce((toMeasure,c,i)=>{i=this._first+i;return(this._needsRemeasure||ithis._prevLast)&&(toMeasure.indices.push(i),toMeasure.children.push(c)),toMeasure},{indices:[],children:[]})},VirtualScroller.prototype._measureChildren=function({indices,children}){var child;return this.sameSizeChildren?!!(child=children[0])&&this._layout.updateItemSizes(this._measureChild(child,!0)):(child=children.map((c,i)=>this._indexToMeasure[indices[i]]||this._measureChild(c)).reduce((out,cur,i)=>(out[indices[i]]=this._indexToMeasure[indices[i]]=cur,out),{}),this._layout.updateItemSizes(child[0]))},VirtualScroller.prototype._baseRender=function(){var _first=this._first,rangeChanged=_first!==this._prevFirst||this._num!==this._prevNum,needsReset=this._needsReset;if((rangeChanged||needsReset)&&(this._last=_first+Math.min(this._num,this._totalItems-_first)-1,this._num||this._prevNum)){var o=this._ordered,_prevFirst=this._prevFirst,elemsToHide=[o.length];let elemToHideIndex=-1;for(let idx=_prevFirst;o.length&&idx<_first;idx++){var elem=o.shift();elemsToHide[++elemToHideIndex]=elem,this._unassignChild(idx,elem)}var _last=this._last;for(let idx=this._prevLast;o.length&&idx>_last;idx--){let elem=o.pop();elemsToHide[++elemToHideIndex]=elem,this._unassignChild(idx,elem)}needsReset?this._reset(_first,_last):(this._addHead(_prevFirst={}),this._addTail(_prevFirst));var style,prop=displayProp,propValue=displayHiddenValue;for(let i=0;i<=elemToHideIndex;i++){let elem=elemsToHide[i];elem._unassigned&&(elem._unassigned=null,style=elem.style)&&(style[prop]=propValue)}}this._needsRemeasure&&(this._indexToMeasure={});needsReset=0=start;idx--){var child=this._assignChild(idx,ordered[0],!0);updateElement(child,idx,null,!0,chunksChecked),ordered.unshift(child)}},VirtualScroller.prototype._addTail=function(chunksChecked){var start=Math.max(this._first,this._prevLast+1),end=this._last,updateElement=this.updateElement,ordered=this._ordered;for(let idx=start;idx<=end;idx++){var child=this._assignChild(idx,null,!0);updateElement(child,idx,null,!0,chunksChecked),ordered.push(child)}},VirtualScroller.prototype._reset=function(first,last){var ordered=this._ordered,currentMarker=ordered[0],updateElement=(ordered.length=0,this.updateElement),chunksChecked={};for(let i=first;i<=last;i++){var child=this._assignChild(i,currentMarker);ordered.push(child),updateElement(child,i,null,!0,chunksChecked)}},VirtualScroller.prototype.updateExistingElement=function(index,item){var child=this._keyToChild[index];child&&this.updateElement(child,index,item)},VirtualScroller.prototype._assignChild=function(idx,insertBefore,insertElement){var container,keyToChild=this._keyToChild;let child=keyToChild[idx];return child?(container=this._container,insertElement&&container.insertBefore(child,insertBefore),child._dataItemIndex=idx):keyToChild[(child=this.createElement(insertBefore))._dataItemIndex=idx]=child,child._unassigned=null,child},VirtualScroller.prototype._unassignChild=function(idx,child){child._unassigned=!0,this._keyToChild[idx]=child._dataItemIndex=null,this.recycleElement(child,idx)},VirtualScroller.prototype._measureChild=function(child,sameSizeChildren){var childSize=this._childSize;return sameSizeChildren&&childSize||(this._childSize=childSize=child.getBoundingClientRect()),childSize},VirtualScroller.prototype._containerSizeChanged=function(entries){this.paused||(this._containerSize=entries[0].contentRect,this._needsUpdateViewSize=!0,this._needsUpdateViewScrollPosition=!0,this.requestRemeasure())},VirtualScroller.prototype._scrollTargetSizeChanged=function(entries){this.paused||(this._needsUpdateViewSize=!0,this._needsUpdateViewScrollPosition=!0,this.requestRemeasure())},VirtualScroller.prototype._childrenSizeChanged=function(){this.paused||(this._skipNextChildrenSizeChanged?this._skipNextChildrenSizeChanged=!1:this.requestRemeasure())},VirtualScroller.prototype.onRangeChange=function(range){var num=range.num;num!==this._num?(this._num=num,this.setFirst(range.first)||this._scheduleRender()):this.setFirst(range.first)},VirtualScroller.prototype.onItemPositionChange=function(event){this._childrenPos=event,this._scheduleRender()},VirtualScroller.prototype.onScrollSizeChange=function(size){this._scrollSize=size,this._scheduleRender()},VirtualScroller.prototype.handleScroll=function(event){this.paused||(this._needsUpdateViewScrollPosition=!0,this._scheduleRender())},VirtualScroller.prototype._updateViewSize=function(){var containerElement=this._container,layout=this._layout,containerElement=containerElement.getBoundingClientRect(),scrollBounds=this._scrollTarget.getScrollContainerBoundingClientRect(),scrollerWidth=scrollBounds.width,scrollerHeight=scrollBounds.height,xMin=Math.max(0,Math.min(scrollerWidth,containerElement.left-scrollBounds.left)),yMin=Math.max(0,Math.min(scrollerHeight,containerElement.top-scrollBounds.top)),directionIsVertical=layout.isVertical,scrollerWidth=directionIsVertical?Math.max(0,Math.min(scrollerWidth,containerElement.right-scrollBounds.left)):scrollerWidth,scrollerHeight=directionIsVertical?scrollerHeight:Math.max(0,Math.min(scrollerHeight,containerElement.bottom-scrollBounds.top)),scrollerWidth=Math.ceil(scrollerWidth-xMin),xMin=Math.ceil(scrollerHeight-yMin),scrollerHeight=directionIsVertical?Math.max(0,containerElement.top-scrollBounds.top):Math.max(0,containerElement.left-scrollBounds.left);layout.setViewportSize({width:scrollerWidth,height:xMin,offset:scrollerHeight})},VirtualScroller.prototype._sizeContainer=function(size){var containerElemStyle,containerElem=this._container,size=size?size+"px":null,layout=this._layout;layout.isVertical?containerElem.lastHeight!==size&&(containerElem.style.height=size,containerElem.lastHeight=size):containerElem.lastMinWidth!==size&&((containerElemStyle=containerElem.style).minWidth=size,containerElem.lastMinWidth=size,containerElem=layout._itemDim2(),size=layout._rolumns,containerElem)&&(containerElemStyle.height=containerElem*size+"px")},VirtualScroller.prototype.destroy=function(){let ro=this._containerRO;ro&&(ro.disconnect(),this._containerRO=null),(ro=this._childrenRO)&&(ro.disconnect(),this._childrenRO=null);var scrollTarget=this._scrollTarget;scrollTarget&&this.boundOnScrollTargetResize&&scrollTarget.removeResizeObserver&&scrollTarget.removeResizeObserver(this.boundOnScrollTargetResize),scrollTarget&&this.boundHandleScroll&&(scrollTarget.removeScrollEventListener?scrollTarget.removeScrollEventListener(this.boundHandleScroll,{passive:!0}):dom.removeEventListener(scrollTarget,"scroll",this.boundHandleScroll,{passive:!0})),this.requestAnimationFrameCallbackFn=null,this.boundHandleScroll=null,this.boundOnScrollTargetResize=null,this._container=null,this._containerSize=null},DataLoader.prototype.destroy=function(){var timeout=this.dataLoadTimeout,timeout=(timeout&&(clearTimeout(timeout),this.dataLoadTimeout=null),this.abortController);timeout&&timeout.abort(),this.abortController=null,this.scroller=null};class VirtualScrollerElement extends HTMLDivElement{constructor(){var self=super();return onInit.call(self),self}addClasses(){this.classList.add("virtual-scroller")}connectedCallback(){onInit.call(this)}disconnectedCallback(){cancelDataLoading(this),this.hasVirtualScrollerInit=null;var scroller=this.scroller;this.scroller=null,scroller&&scroller.destroy(),this.nodePool=null,this.childTemplate=null,this.setItemSourceInternal(null),this.classList.remove("virtual-scroller")}setItemSourceInternal(items){if(this._itemSource=items){var map={};for(let i=0,length=items.length;i