UNPKG

@progress/kendo-react-dropdowns

Version:

React DropDowns offer an interface for users to select different items from a list and more. KendoReact Dropdowns package

9 lines (8 loc) 3.93 kB
/** * @license *------------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the package root for more information *------------------------------------------------------------------------------------------- */ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("@progress/kendo-react-common"),p=require("react");function u(l){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(l){for(const i in l)if(i!=="default"){const e=Object.getOwnPropertyDescriptor(l,i);Object.defineProperty(t,i,e.get?e:{enumerable:!0,get:()=>l[i]})}}return t.default=l,Object.freeze(t)}const S=u(p),m=17895697,c=typeof window!="undefined"&&/Firefox/.test(window.navigator.userAgent);class H{constructor(){this.table=null,this.total=0,this.enabled=!1,this.skip=0,this.pageSize=0,this.PageChange=null,this.scrollElement=null,this.listTransform="",this.itemHeight=0,this.containerHeight=0,this.reactVersion=Number.parseFloat(S.version),this.scrollSyncing=!1,this.lastLoaded=0,this.firstLoaded=0,this.lastScrollTop=0,this.listTranslate=0,this.list=null,this.container=null,this.calcScrollElementHeight=()=>{var h;this.scrollSyncing=!0;let t=!1;this.itemHeight=this.list?this.list.children[0].offsetHeight:this.itemHeight;const i=this.itemHeight*this.total-(((h=this.list)==null?void 0:h.offsetHeight)||0);this.containerHeight=c?Math.min(m,i):i;const e=this.containerHeight;return this.scrollElement&&(t=this.scrollElement.style.height!==e+"px",t&&(this.scrollElement.style.height=e+"px")),this.scrollSyncing=!1,t},this.scrollerRef=t=>{this.container=t,t&&(t.setAttribute("unselectable","on"),window.setTimeout(this.calcScrollElementHeight.bind(this),0))},this.getRowHeightService=n.memoizeOne((t,i)=>new n.RowHeightService(i,t,0)),this.firstLoaded=this.pageSize,this.lastLoaded=this.skip+this.pageSize,this.scrollHandler=this.scrollHandler.bind(this)}get translate(){return this.listTranslate}translateTo(t,i){this.listTranslate=t,this.enabled&&this.list&&(c||this.reactVersion<=17||i?this.list.style.transform="translateY("+t+"px)":this.listTransform="translateY("+t+"px)")}changePage(t,i){const e=Math.min(Math.max(0,t),this.total-this.pageSize);e!==this.skip&&this.PageChange&&this.PageChange({skip:e,take:this.pageSize},i)}reset(){this.container&&(this.calcScrollElementHeight(),this.container.scrollTop=0,this.translateTo(0,!0))}scrollToEnd(){if(this.container&&this.list){this.calcScrollElementHeight();const{scrollHeight:t,offsetHeight:i}=this.container;this.container.scrollTop=t,this.translateTo(t-i,!0)}}scrollHandler(t){if(!this.enabled||!this.container||!this.list)return;if(this.scrollSyncing){this.scrollSyncing=!1;return}this.rowHeightService=this.getRowHeightService(this.itemHeight,this.total);const i=this.container.scrollTop,e=this.lastScrollTop>=i,h=!e,f=Math.abs(i-this.lastScrollTop);this.lastScrollTop=i;let s=this.rowHeightService.index(i),r=this.rowHeightService.offset(s);const{offsetHeight:g}=this.container,d=this.rowHeightService.index(i+g);if(h&&d>=this.lastLoaded&&this.lastLoaded<this.total){const o=s+this.pageSize-this.total;o>0&&(s=s-o,r=this.rowHeightService.offset(s)),this.firstLoaded=s,this.translateTo(r);const a=this.firstLoaded+this.pageSize;this.lastLoaded=Math.min(a,this.total),this.changePage(this.firstLoaded,t)}else if(e&&s-1<=this.firstLoaded){const o=f===this.itemHeight;if(this.skip===0&&o)this.lastScrollTop=0,this.firstLoaded=0,this.lastLoaded=this.pageSize,this.container.scrollTop=0,this.translateTo(0,!0);else{const a=Math.floor(this.pageSize*.3);this.firstLoaded=Math.max(s-a,0),this.translateTo(this.rowHeightService.offset(this.firstLoaded)),this.lastLoaded=Math.min(this.firstLoaded+this.pageSize,this.total),this.changePage(this.firstLoaded,t)}}}}exports.VirtualScroll=H;