react-virtuoso 3.1.5 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),o=require("react-dom");function n(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const o in e)if("default"!==o){const n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:()=>e[o]})}return t.default=e,Object.freeze(t)}const r=n(t);function i(e,t){return o=>e(t(o))}function l(e,t){return t(e)}function s(e,t){return o=>e(t,o)}function c(e,t){return()=>e(t)}function a(e,t){return t(e),e}function u(...e){return e}function d(e){e()}function f(e){return()=>e}function h(){}function m(e,t){return e(1,t)}function g(e,t){e(0,t)}function p(e){e(2)}function x(e){return e(4)}function v(e,t){return m(e,s(t,0))}function I(e,t){const o=e(1,(e=>{o(),t(e)}));return o}function T(){const e=[];return(t,o)=>{switch(t){case 2:return void e.splice(0,e.length);case 1:return e.push(o),()=>{const t=e.indexOf(o);t>-1&&e.splice(t,1)};case 0:return void e.slice().forEach((e=>{e(o)}));default:throw new Error(`unrecognized action ${t}`)}}}function w(e){let t=e;const o=T();return(e,n)=>{switch(e){case 1:n(t);break;case 0:t=n;break;case 4:return t}return o(e,n)}}function C(e){return a(T(),(t=>v(e,t)))}function S(e,t){return a(w(t),(t=>v(e,t)))}function H(e,...t){const o=function(...e){return t=>e.reduceRight(l,t)}(...t);return(t,n)=>{switch(t){case 1:return m(e,o(n));case 2:return void p(e)}}}function y(e,t){return e===t}function b(e=y){let t;return o=>n=>{e(t,n)||(t=n,o(n))}}function E(e){return t=>o=>{e(o)&&t(o)}}function R(e){return t=>i(t,e)}function z(e){return t=>()=>t(e)}function B(e,t){return o=>n=>o(t=e(t,n))}function k(e){return t=>o=>{e>0?e--:t(o)}}function P(e){let t,o;return n=>r=>{t=r,o||(o=setTimeout((()=>{o=void 0,n(t)}),e))}}function O(e){let t,o;return n=>r=>{t=r,o&&clearTimeout(o),o=setTimeout((()=>{n(t)}),e)}}function L(...e){const t=new Array(e.length);let o=0,n=null;const r=Math.pow(2,e.length)-1;return e.forEach(((e,i)=>{const l=Math.pow(2,i);m(e,(e=>{const s=o;o|=l,t[i]=e,s!==r&&o===r&&n&&(n(),n=null)}))})),e=>i=>{const l=()=>e([i].concat(t));o===r?l():n=l}}function M(...e){return function(t,o){switch(t){case 1:return function(...e){return()=>{e.map(d)}}(...e.map((e=>m(e,o))));case 2:return;default:throw new Error(`unrecognized action ${t}`)}}}function W(e,t=y){return H(e,b(t))}function j(...e){const t=T(),o=new Array(e.length);let n=0;const r=Math.pow(2,e.length)-1;return e.forEach(((e,i)=>{const l=Math.pow(2,i);m(e,(e=>{o[i]=e,n|=l,n===r&&g(t,o)}))})),function(e,i){switch(e){case 1:return n===r&&i(o),m(t,i);case 2:return p(t);default:throw new Error(`unrecognized action ${e}`)}}}function V(e,t=[],{singleton:o}={singleton:!0}){return{id:F(),constructor:e,dependencies:t,singleton:o}}const F=()=>Symbol();const A="undefined"!=typeof document?r.useLayoutEffect:r.useEffect;function D(e,o,n){const i=Object.keys(o.required||{}),l=Object.keys(o.optional||{}),u=Object.keys(o.methods||{}),d=Object.keys(o.events||{}),v=t.createContext({});function I(e,t){e.propsReady&&g(e.propsReady,!1);for(const n of i){g(e[o.required[n]],t[n])}for(const n of l)if(n in t){g(e[o.optional[n]],t[n])}e.propsReady&&g(e.propsReady,!0)}function T(e){return d.reduce(((t,n)=>(t[n]=function(e){let t,o;const n=()=>t&&t();return function(r,i){switch(r){case 1:if(i){if(o===i)return;return n(),o=i,t=m(e,i),t}return n(),h;case 2:return n(),void(o=null);default:throw new Error(`unrecognized action ${r}`)}}}(e[o.events[n]]),t)),{})}const w=t.forwardRef(((r,s)=>{const{children:h,...x}=r,[w]=t.useState((()=>a(function(e){const t=new Map,o=({id:e,constructor:n,dependencies:r,singleton:i})=>{if(i&&t.has(e))return t.get(e);const l=n(r.map((e=>o(e))));return i&&t.set(e,l),l};return o(e)}(e),(e=>I(e,x))))),[C]=t.useState(c(T,w));return A((()=>{for(const e of d)e in x&&m(C[e],x[e]);return()=>{Object.values(C).map(p)}}),[x,C,w]),A((()=>{I(w,x)})),t.useImperativeHandle(s,f(function(e){return u.reduce(((t,n)=>(t[n]=t=>{g(e[o.methods[n]],t)},t)),{})}(w))),t.createElement(v.Provider,{value:w},n?t.createElement(n,function(e,t){const o={},n={};let r=0;const i=e.length;for(;r<i;)n[e[r]]=1,r+=1;for(const l in t)n.hasOwnProperty(l)||(o[l]=t[l]);return o}([...i,...l,...d],x),h):h)}));return{Component:w,usePublisher:e=>t.useCallback(s(g,r.useContext(v)[e]),[e]),useEmitterValue:e=>{const o=t.useContext(v)[e],[n,r]=t.useState(c(x,o));return A((()=>m(o,(e=>{e!==n&&r(f(e))}))),[o,n]),n},useEmitter:(e,o)=>{const n=t.useContext(v)[e];A((()=>m(n,o)),[o,n])}}}const G="undefined"!=typeof document?t.useLayoutEffect:t.useEffect;var N=(e=>(e[e.DEBUG=0]="DEBUG",e[e.INFO=1]="INFO",e[e.WARN=2]="WARN",e[e.ERROR=3]="ERROR",e))(N||{});const _={0:"debug",1:"log",2:"warn",3:"error"},U=V((()=>{const e=w(3);return{log:w(((t,o,n=1)=>{n>=(("undefined"==typeof globalThis?window:globalThis).VIRTUOSO_LOG_LEVEL??x(e))&&console[_[n]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",t,o)})),logLevel:e}}),[],{singleton:!0});function $(e,o=!0){const n=t.useRef(null);let r=e=>{};if("undefined"!=typeof ResizeObserver){const t=new ResizeObserver((t=>{const o=t[0].target;null!==o.offsetParent&&e(o)}));r=e=>{e&&o?(t.observe(e),n.current=e):(n.current&&t.unobserve(n.current),n.current=null)}}return{ref:n,callbackRef:r}}function K(e,t=!0){return $(e,t).callbackRef}function q(e,t,o,n,r,i,l){return $((o=>{const s=function(e,t,o,n){const r=e.length;if(0===r)return null;const i=[];for(let l=0;l<r;l++){const r=e.item(l);if(!r||void 0===r.dataset.index)continue;const s=parseInt(r.dataset.index),c=parseFloat(r.dataset.knownSize),a=t(r,o);if(0===a&&n("Zero-sized element, this should not happen",{child:r},N.ERROR),a===c)continue;const u=i[i.length-1];0===i.length||u.size!==a||u.endIndex!==s-1?i.push({startIndex:s,endIndex:s,size:a}):i[i.length-1].endIndex++}return i}(o.children,t,"offsetHeight",r);let c=o.parentElement;for(;!c.dataset.virtuosoScroller;)c=c.parentElement;const a="window"===c.firstElementChild.dataset.viewportType,u=l?l.scrollTop:a?window.pageYOffset||document.documentElement.scrollTop:c.scrollTop,d=l?l.scrollHeight:a?document.documentElement.scrollHeight:c.scrollHeight,f=l?l.offsetHeight:a?window.innerHeight:c.offsetHeight;n({scrollTop:Math.max(u,0),scrollHeight:d,viewportHeight:f}),null==i||i(function(e,t,o){"normal"===t||(null==t?void 0:t.endsWith("px"))||o(`${e} was not resolved to pixel value correctly`,t,N.WARN);if("normal"===t)return 0;return parseInt(t??"0",10)}("row-gap",getComputedStyle(o).rowGap,r)),null!==s&&e(s)}),o)}function Y(e,t){return Math.round(e.getBoundingClientRect()[t])}function Z(e,t){return Math.abs(e-t)<1.01}function J(e,n,r,i=h,l){const s=t.useRef(null),c=t.useRef(null),a=t.useRef(null),u=t.useCallback((t=>{const r=t.target,i=r===window||r===document,l=i?window.pageYOffset||document.documentElement.scrollTop:r.scrollTop,s=i?document.documentElement.scrollHeight:r.scrollHeight,u=i?window.innerHeight:r.offsetHeight,d=()=>{e({scrollTop:Math.max(l,0),scrollHeight:s,viewportHeight:u})};t.suppressFlushSync?d():o.flushSync(d),null!==c.current&&(l===c.current||l<=0||l===s-u)&&(c.current=null,n(!0),a.current&&(clearTimeout(a.current),a.current=null))}),[e,n]);return t.useEffect((()=>{const e=l||s.current;return i(l||s.current),u({target:e,suppressFlushSync:!0}),e.addEventListener("scroll",u,{passive:!0}),()=>{i(null),e.removeEventListener("scroll",u)}}),[s,u,r,i,l]),{scrollerRef:s,scrollByCallback:function(e){s.current.scrollBy(e)},scrollToCallback:function(t){const o=s.current;if(!o||"offsetHeight"in o&&0===o.offsetHeight)return;const r="smooth"===t.behavior;let i,l,u;o===window?(l=Math.max(Y(document.documentElement,"height"),document.documentElement.scrollHeight),i=window.innerHeight,u=document.documentElement.scrollTop):(l=o.scrollHeight,i=Y(o,"height"),u=o.scrollTop);const d=l-i;if(t.top=Math.ceil(Math.max(Math.min(d,t.top),0)),Z(i,l)||t.top===u)return e({scrollTop:u,scrollHeight:l,viewportHeight:i}),void(r&&n(!0));r?(c.current=t.top,a.current&&clearTimeout(a.current),a.current=setTimeout((()=>{a.current=null,c.current=null,n(!0)}),1e3)):c.current=null,o.scrollTo(t)}}}const Q=V((()=>{const e=T(),t=T(),o=w(0),n=T(),r=w(0),i=T(),l=T(),s=w(0),c=w(0),a=w(0),u=w(0),d=T(),f=T(),h=w(!1);return v(H(e,R((({scrollTop:e})=>e))),t),v(H(e,R((({scrollHeight:e})=>e))),l),v(t,r),{scrollContainerState:e,scrollTop:t,viewportHeight:i,headerHeight:s,fixedHeaderHeight:c,fixedFooterHeight:a,footerHeight:u,scrollHeight:l,smoothScrollTargetReached:n,scrollTo:d,scrollBy:f,statefulScrollTop:r,deviation:o,scrollingInProgress:h}}),[],{singleton:!0}),X={lvl:0};function ee(e,t,o,n=X,r=X){return{k:e,v:t,lvl:o,l:n,r:r}}function te(e){return e===X}function oe(){return X}function ne(e,t){if(te(e))return X;const{k:o,l:n,r:r}=e;if(t===o){if(te(n))return r;if(te(r))return n;{const[t,o]=ce(n);return he(ue(e,{k:t,v:o,l:ae(n)}))}}return he(ue(e,t<o?{l:ne(n,t)}:{r:ne(r,t)}))}function re(e,t,o="k"){if(te(e))return[-1/0,void 0];if(e[o]===t)return[e.k,e.v];if(e[o]<t){const n=re(e.r,t,o);return n[0]===-1/0?[e.k,e.v]:n}return re(e.l,t,o)}function ie(e,t,o){return te(e)?ee(t,o,1):t===e.k?ue(e,{k:t,v:o}):t<e.k?fe(ue(e,{l:ie(e.l,t,o)})):fe(ue(e,{r:ie(e.r,t,o)}))}function le(e,t,o){if(te(e))return[];const{k:n,v:r,l:i,r:l}=e;let s=[];return n>t&&(s=s.concat(le(i,t,o))),n>=t&&n<=o&&s.push({k:n,v:r}),n<=o&&(s=s.concat(le(l,t,o))),s}function se(e){return te(e)?[]:[...se(e.l),{k:e.k,v:e.v},...se(e.r)]}function ce(e){return te(e.r)?[e.k,e.v]:ce(e.r)}function ae(e){return te(e.r)?e.l:he(ue(e,{r:ae(e.r)}))}function ue(e,t){return ee(void 0!==t.k?t.k:e.k,void 0!==t.v?t.v:e.v,void 0!==t.lvl?t.lvl:e.lvl,void 0!==t.l?t.l:e.l,void 0!==t.r?t.r:e.r)}function de(e){return te(e)||e.lvl>e.r.lvl}function fe(e){return pe(xe(e))}function he(e){const{l:t,r:o,lvl:n}=e;if(o.lvl>=n-1&&t.lvl>=n-1)return e;if(n>o.lvl+1){if(de(t))return xe(ue(e,{lvl:n-1}));if(te(t)||te(t.r))throw new Error("Unexpected empty nodes");return ue(t.r,{l:ue(t,{r:t.r.l}),r:ue(e,{l:t.r.r,lvl:n-1}),lvl:n})}if(de(e))return pe(ue(e,{lvl:n-1}));if(te(o)||te(o.l))throw new Error("Unexpected empty nodes");{const t=o.l,r=de(t)?o.lvl-1:o.lvl;return ue(t,{l:ue(e,{r:t.l,lvl:n-1}),r:pe(ue(o,{l:t.r,lvl:r})),lvl:t.lvl+1})}}function me(e,t,o){if(te(e))return[];const n=re(e,t)[0];return ge(le(e,n,o),(({k:e,v:t})=>({index:e,value:t})))}function ge(e,t){const o=e.length;if(0===o)return[];let{index:n,value:r}=t(e[0]);const i=[];for(let l=1;l<o;l++){const{index:o,value:s}=t(e[l]);i.push({start:n,end:o-1,value:r}),n=o,r=s}return i.push({start:n,end:1/0,value:r}),i}function pe(e){const{r:t,lvl:o}=e;return te(t)||te(t.r)||t.lvl!==o||t.r.lvl!==o?e:ue(t,{l:ue(e,{r:t.l}),lvl:o+1})}function xe(e){const{l:t}=e;return te(t)||t.lvl!==e.lvl?e:ue(t,{r:ue(e,{l:t.r})})}function ve(e,t,o,n=0){let r=e.length-1;for(;n<=r;){const i=Math.floor((n+r)/2),l=o(e[i],t);if(0===l)return i;if(-1===l){if(r-n<2)return i-1;r=i-1}else{if(r===n)return i;n=i+1}}throw new Error(`Failed binary finding record in array - ${e.join(",")}, searched for ${t}`)}function Ie(e,t,o){return e[ve(e,t,o)]}const Te=V((()=>({recalcInProgress:w(!1)})),[],{singleton:!0});function we(e){const{size:t,startIndex:o,endIndex:n}=e;return e=>e.start===o&&(e.end===n||e.end===1/0)&&e.value===t}function Ce({index:e},t){return t===e?0:t<e?-1:1}function Se({offset:e},t){return t===e?0:t<e?-1:1}function He(e){return{index:e.index,value:e}}function ye(e,t,o,n=0){return n>0&&(t=Math.max(t,Ie(e,n,Ce).offset)),ge(function(e,t,o,n){const r=ve(e,t,n),i=ve(e,o,n,r);return e.slice(r,i+1)}(e,t,o,Se),He)}function be(e,t,o,n){let r=e,i=0,l=0,s=0,c=0;if(0!==t){c=ve(r,t-1,Ce);s=r[c].offset;const e=re(o,t-1);i=e[0],l=e[1],r.length&&r[c].size===re(o,t)[1]&&(c-=1),r=r.slice(0,c+1)}else r=[];for(const{start:a,value:u}of me(o,t,1/0)){const e=a-i,t=e*l+s+e*n;r.push({offset:t,size:u,index:a}),i=a,s=t,l=u}return{offsetTree:r,lastIndex:i,lastOffset:s,lastSize:l}}function Ee(e,[t,o,n,r]){t.length>0&&n("received item sizes",t,N.DEBUG);const i=e.sizeTree;let l=i,s=0;if(o.length>0&&te(i)&&2===t.length){const e=t[0].size,n=t[1].size;l=o.reduce(((t,o)=>ie(ie(t,o,e),o+1,n)),l)}else[l,s]=function(e,t){let o=te(e)?0:1/0;for(const n of t){const{size:t,startIndex:r,endIndex:i}=n;if(o=Math.min(o,r),te(e)){e=ie(e,0,t);continue}const l=me(e,r-1,i+1);if(l.some(we(n)))continue;let s=!1,c=!1;for(const{start:o,end:n,value:a}of l)s?(i>=o||t===a)&&(e=ne(e,o)):(c=a!==t,s=!0),n>i&&i>=o&&a!==t&&(e=ie(e,i+1,a));c&&(e=ie(e,r,t))}return[e,o]}(l,t);if(l===i)return e;const{offsetTree:c,lastIndex:a,lastSize:u,lastOffset:d}=be(e.offsetTree,s,l,r);return{sizeTree:l,offsetTree:c,lastIndex:a,lastOffset:d,lastSize:u,groupOffsetTree:o.reduce(((e,t)=>ie(e,t,Re(t,c,r))),oe()),groupIndices:o}}function Re(e,t,o){if(0===t.length)return 0;const{offset:n,index:r,size:i}=Ie(t,e,Ce),l=e-r,s=i*l+(l-1)*o+n;return s>0?s+o:s}function ze(e,t,o){if(function(e){return void 0!==e.groupIndex}(e))return t.groupIndices[e.groupIndex]+1;{let n=Be("LAST"===e.index?o:e.index,t);return n=Math.max(0,n,Math.min(o,n)),n}}function Be(e,t){if(!ke(t))return e;let o=0;for(;t.groupIndices[o]<=e+o;)o++;return e+o}function ke(e){return!te(e.groupOffsetTree)}const Pe={offsetHeight:"height",offsetWidth:"width"},Oe=V((([{log:e},{recalcInProgress:t}])=>{const o=T(),n=T(),r=S(n,0),i=T(),l=T(),s=w(0),c=w([]),a=w(void 0),u=w(void 0),d=w(((e,t)=>Y(e,Pe[t]))),f=w(void 0),h=w(0),p={offsetTree:[],sizeTree:oe(),groupOffsetTree:oe(),lastIndex:0,lastOffset:0,lastSize:0,groupIndices:[]},I=S(H(o,L(c,e,h),B(Ee,p),b()),p);v(H(c,E((e=>e.length>0)),L(I,h),R((([e,t,o])=>{const n=e.reduce(((e,n,r)=>ie(e,n,Re(n,t.offsetTree,o)||r)),oe());return{...t,groupIndices:e,groupOffsetTree:n}}))),I),v(H(n,L(I),E((([e,{lastIndex:t}])=>e<t)),R((([e,{lastIndex:t,lastSize:o}])=>[{startIndex:e,endIndex:t,size:o}]))),o),v(a,u);const y=S(H(a,R((e=>void 0===e))),!0);v(H(u,E((e=>void 0!==e&&te(x(I).sizeTree))),R((e=>[{startIndex:0,endIndex:0,size:e}]))),o);const z=C(H(o,L(I),B((({sizes:e},[t,o])=>({changed:o!==e,sizes:o})),{changed:!1,sizes:p}),R((e=>e.changed))));m(H(s,B(((e,t)=>({diff:e.prev-t,prev:t})),{diff:0,prev:0}),R((e=>e.diff))),(e=>{e>0?(g(t,!0),g(i,e)):e<0&&g(l,e)})),m(H(s,L(e)),(([e,t])=>{e<0&&t("`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value",{firstItemIndex:s},N.ERROR)}));const k=C(i);v(H(i,L(I),R((([e,t])=>{if(t.groupIndices.length>0)throw new Error("Virtuoso: prepending items does not work with groups");return se(t.sizeTree).reduce(((t,{k:o,v:n})=>({ranges:[...t.ranges,{startIndex:t.prevIndex,endIndex:o+e-1,size:t.prevSize}],prevIndex:o+e,prevSize:n})),{ranges:[],prevIndex:0,prevSize:t.lastSize}).ranges}))),o);const P=C(H(l,L(I,h),R((([e,{offsetTree:t},o])=>Re(-e,t,o)))));return v(H(l,L(I,h),R((([e,t,o])=>{if(t.groupIndices.length>0)throw new Error("Virtuoso: shifting items does not work with groups");const n=se(t.sizeTree).reduce(((t,{k:o,v:n})=>ie(t,Math.max(0,o+e),n)),oe());return{...t,sizeTree:n,...be(t.offsetTree,0,n,o)}}))),I),{data:f,totalCount:n,sizeRanges:o,groupIndices:c,defaultItemSize:u,fixedItemSize:a,unshiftWith:i,shiftWith:l,shiftWithOffset:P,beforeUnshiftWith:k,firstItemIndex:s,gap:h,sizes:I,listRefresh:z,statefulTotalCount:r,trackItemSizes:y,itemSize:d}}),u(U,Te),{singleton:!0}),Le="undefined"!=typeof document&&"scrollBehavior"in document.documentElement.style;function Me(e){const t="number"==typeof e?{index:e}:e;return t.align||(t.align="start"),t.behavior&&Le||(t.behavior="auto"),t.offset||(t.offset=0),t}const We=V((([{sizes:e,totalCount:t,listRefresh:o,gap:n},{scrollingInProgress:r,viewportHeight:i,scrollTo:l,smoothScrollTargetReached:s,headerHeight:c,footerHeight:a,fixedHeaderHeight:u,fixedFooterHeight:d},{log:f}])=>{const h=T(),p=w(0);let x=null,C=null,S=null;function y(){x&&(x(),x=null),S&&(S(),S=null),C&&(clearTimeout(C),C=null),g(r,!1)}return v(H(h,L(e,i,t,p,c,a,f),L(n,u,d),R((([[e,t,n,i,l,c,a,u],d,f,p])=>{const v=Me(e),{align:T,behavior:w,offset:b}=v,E=i-1,R=ze(v,t,E);let z=Re(R,t.offsetTree,d)+c;"end"===T?(z+=f+re(t.sizeTree,R)[1]-n+p,R===E&&(z+=a)):"center"===T?z+=(f+re(t.sizeTree,R)[1]-n+p)/2:z-=l,b&&(z+=b);const B=t=>{y(),t?(u("retrying to scroll to",{location:e},N.DEBUG),g(h,e)):u("list did not change, scroll successful",{},N.DEBUG)};if(y(),"smooth"===w){let e=!1;S=m(o,(t=>{e=e||t})),x=I(s,(()=>{B(e)}))}else x=I(H(o,(k=150,e=>{const t=setTimeout((()=>{e(!1)}),k);return o=>{o&&(e(!0),clearTimeout(t))}})),B);var k;return C=setTimeout((()=>{y()}),1200),g(r,!0),u("scrolling from index to",{index:R,top:z,behavior:w},N.DEBUG),{top:z,behavior:w}}))),l),{scrollToIndex:h,topListHeight:p}}),u(Oe,Q,U),{singleton:!0});const je="up",Ve="down",Fe={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollTop:0,viewportHeight:0,scrollHeight:0}},Ae=V((([{scrollContainerState:e,scrollTop:t,viewportHeight:o,headerHeight:n,footerHeight:r,scrollBy:i}])=>{const l=w(!1),s=w(!0),c=T(),a=T(),u=w(4),d=w(0),f=S(H(M(H(W(t),k(1),z(!0)),H(W(t),k(1),z(!1),O(100))),b()),!1),h=S(H(M(H(i,z(!0)),H(i,z(!1),O(200))),b()),!1);v(H(j(W(t),W(d)),R((([e,t])=>e<=t)),b()),s),v(H(s,P(50)),a);const m=C(H(j(e,W(o),W(n),W(r),W(u)),B(((e,[{scrollTop:t,scrollHeight:o},n,r,i,l])=>{const s={viewportHeight:n,scrollTop:t,scrollHeight:o};if(t+n-o>-l){let o,n;return t>e.state.scrollTop?(o="SCROLLED_DOWN",n=e.state.scrollTop-t):(o="SIZE_DECREASED",n=e.state.scrollTop-t||e.scrollTopDelta),{atBottom:!0,state:s,atBottomBecause:o,scrollTopDelta:n}}let c;return c=s.scrollHeight>e.state.scrollHeight?"SIZE_INCREASED":n<e.state.viewportHeight?"VIEWPORT_HEIGHT_DECREASING":t<e.state.scrollTop?"SCROLLING_UPWARDS":"NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM",{atBottom:!1,notAtBottomBecause:c,state:s}}),Fe),b(((e,t)=>e&&e.atBottom===t.atBottom)))),g=S(H(e,B(((e,{scrollTop:t,scrollHeight:o,viewportHeight:n})=>{if(Z(e.scrollHeight,o))return{scrollTop:t,scrollHeight:o,jump:0,changed:!1};{const r=o-(t+n)<1;return e.scrollTop!==t&&r?{scrollHeight:o,scrollTop:t,jump:e.scrollTop-t,changed:!0}:{scrollHeight:o,scrollTop:t,jump:0,changed:!0}}}),{scrollHeight:0,jump:0,scrollTop:0,changed:!1}),E((e=>e.changed)),R((e=>e.jump))),0);v(H(m,R((e=>e.atBottom))),l),v(H(l,P(50)),c);const p=w(Ve);v(H(e,R((({scrollTop:e})=>e)),b(),B(((e,t)=>x(h)?{direction:e.direction,prevScrollTop:t}:{direction:t<e.prevScrollTop?je:Ve,prevScrollTop:t}),{direction:Ve,prevScrollTop:0}),R((e=>e.direction))),p),v(H(e,P(50),z("none")),p);const I=w(0);return v(H(f,E((e=>!e)),z(0)),I),v(H(t,P(100),L(f),E((([e,t])=>!!t)),B((([e,t],[o])=>[t,o]),[0,0]),R((([e,t])=>t-e))),I),{isScrolling:f,isAtTop:s,isAtBottom:l,atBottomState:m,atTopStateChange:a,atBottomStateChange:c,scrollDirection:p,atBottomThreshold:u,atTopThreshold:d,scrollVelocity:I,lastJumpDueToItemResize:g}}),u(Q)),De=V((([{log:e}])=>{const t=w(!1),o=C(H(t,E((e=>e)),b()));return m(t,(t=>{t&&x(e)("props updated",{},N.DEBUG)})),{propsReady:t,didMount:o}}),u(U),{singleton:!0});const Ge=V((([{sizes:e,listRefresh:t,defaultItemSize:o},{scrollTop:n},{scrollToIndex:r},{didMount:i}])=>{const l=w(!0),s=w(0);return v(H(i,L(s),E((([e,t])=>!!t)),z(!1)),l),m(H(j(t,i),L(l,e,o),E((([[,e],t,{sizeTree:o},n])=>e&&(!te(o)||void 0!==n)&&!t)),L(s)),(([,e])=>{setTimeout((()=>{I(n,(()=>{g(l,!0)})),g(r,e)}))})),{scrolledToInitialItem:l,initialTopMostItemIndex:s}}),u(Oe,Q,We,De),{singleton:!0});function Ne(e){return!!e&&("smooth"===e?"smooth":"auto")}const _e=V((([{totalCount:e,listRefresh:t},{isAtBottom:o,atBottomState:n},{scrollToIndex:r},{scrolledToInitialItem:i},{propsReady:l,didMount:s},{log:c},{scrollingInProgress:a}])=>{const u=w(!1),d=T();let f=null;function h(e){g(r,{index:"LAST",align:"end",behavior:e})}function p(e){const t=I(n,(t=>{!e||t.atBottom||"SIZE_INCREASED"!==t.notAtBottomBecause||f||(x(c)("scrolling to bottom due to increased size",{},N.DEBUG),h("auto"))}));setTimeout(t,100)}return m(H(j(H(W(e),k(1)),s),L(W(u),o,i,a),R((([[e,t],o,n,r,i])=>{let l=t&&r,s="auto";return l&&(s=((e,t)=>"function"==typeof e?Ne(e(t)):t&&Ne(e))(o,n||i),l=l&&!!s),{totalCount:e,shouldFollow:l,followOutputBehavior:s}})),E((({shouldFollow:e})=>e))),(({totalCount:e,followOutputBehavior:o})=>{f&&(f(),f=null),f=I(t,(()=>{x(c)("following output to ",{totalCount:e},N.DEBUG),h(o),f=null}))})),m(H(j(W(u),e,l),E((([e,,t])=>e&&t)),B((({value:e},[,t])=>({refreshed:e===t,value:t})),{refreshed:!1,value:0}),E((({refreshed:e})=>e)),L(u,e)),(([,e])=>{p(!1!==e)})),m(d,(()=>{p(!1!==x(u))})),m(j(W(u),n),(([e,t])=>{e&&!t.atBottom&&"VIEWPORT_HEIGHT_DECREASING"===t.notAtBottomBecause&&h("auto")})),{followOutput:u,autoscrollToBottom:d}}),u(Oe,Ae,We,Ge,De,U,Q));function Ue(e){return e.reduce(((e,t)=>(e.groupIndices.push(e.totalCount),e.totalCount+=t+1,e)),{totalCount:0,groupIndices:[]})}const $e=V((([{totalCount:e,groupIndices:t,sizes:o},{scrollTop:n,headerHeight:r}])=>{const i=T(),l=T(),s=C(H(i,R(Ue)));return v(H(s,R((e=>e.totalCount))),e),v(H(s,R((e=>e.groupIndices))),t),v(H(j(n,o,r),E((([e,t])=>ke(t))),R((([e,t,o])=>re(t.groupOffsetTree,Math.max(e-o,0),"v")[0])),b(),R((e=>[e]))),l),{groupCounts:i,topItemsIndexes:l}}),u(Oe,Q));function Ke(e,t){return!(!e||e[0]!==t[0]||e[1]!==t[1])}function qe(e,t){return!(!e||e.startIndex!==t.startIndex||e.endIndex!==t.endIndex)}const Ye="top",Ze="bottom",Je="none";function Qe(e,t,o){return"number"==typeof e?o===je&&t===Ye||o===Ve&&t===Ze?e:0:o===je?t===Ye?e.main:e.reverse:t===Ze?e.main:e.reverse}function Xe(e,t){return"number"==typeof e?e:e[t]||0}const et=V((([{scrollTop:e,viewportHeight:t,deviation:o,headerHeight:n,fixedHeaderHeight:r}])=>{const i=T(),l=w(0),s=w(0),c=w(0);return{listBoundary:i,overscan:c,topListHeight:l,increaseViewportBy:s,visibleRange:S(H(j(W(e),W(t),W(n),W(i,Ke),W(c),W(l),W(r),W(o),W(s)),R((([e,t,o,[n,r],i,l,s,c,a])=>{const u=e-c,d=l+s,f=Math.max(o-u,0);let h=Je;const m=Xe(a,Ye),g=Xe(a,Ze);return n-=c,r+=o+s,(n+=o+s)>e+d-m&&(h=je),(r-=c)<e-f+t+g&&(h=Ve),h!==Je?[Math.max(u-o-Qe(i,Ye,h)-m,0),u-f-s+t+Qe(i,Ze,h)+g]:null})),E((e=>null!=e)),b(Ke)),[0,0])}}),u(Q),{singleton:!0});const tt={items:[],topItems:[],offsetTop:0,offsetBottom:0,top:0,bottom:0,topListHeight:0,totalCount:0,firstItemIndex:0};function ot(e,t,o){if(0===e.length)return[];if(!ke(t))return e.map((e=>({...e,index:e.index+o,originalIndex:e.index})));const n=e[0].index,r=e[e.length-1].index,i=[],l=me(t.groupOffsetTree,n,r);let s,c=0;for(const a of e){let e;(!s||s.end<a.index)&&(s=l.shift(),c=t.groupIndices.indexOf(s.start)),e=a.index===s.start?{type:"group",index:c}:{index:a.index-(c+1)+o,groupIndex:c},i.push({...e,size:a.size,offset:a.offset,originalIndex:a.index,data:a.data})}return i}function nt(e,t,o,n,r,i){const{lastSize:l,lastOffset:s,lastIndex:c}=r;let a=0,u=0;if(e.length>0){a=e[0].offset;const t=e[e.length-1];u=t.offset+t.size}const d=o-c,f=a,h=s+d*l+(d-1)*n-u;return{items:ot(e,r,i),topItems:ot(t,r,i),topListHeight:t.reduce(((e,t)=>t.size+e),0),offsetTop:a,offsetBottom:h,top:f,bottom:u,totalCount:o,firstItemIndex:i}}const rt=V((([{sizes:e,totalCount:t,data:o,firstItemIndex:n,gap:r},i,{visibleRange:l,listBoundary:s,topListHeight:c},{scrolledToInitialItem:u,initialTopMostItemIndex:d},{topListHeight:f},h,{didMount:m},{recalcInProgress:g}])=>{const p=w([]),x=T();v(i.topItemsIndexes,p);const I=S(H(j(m,g,W(l,Ke),W(t),W(e),W(d),u,W(p),W(n),W(r),o),E((([e,t])=>e&&!t)),R((([,,[e,t],o,n,r,i,l,s,c,u])=>{const d=n,{sizeTree:f,offsetTree:h}=d;if(0===o||0===e&&0===t)return{...tt,totalCount:o};if(te(f))return nt(function(e,t,o){if(ke(t)){const n=Be(e,t);return[{index:re(t.groupOffsetTree,n)[0],size:0,offset:0},{index:n,size:0,offset:0,data:o&&o[0]}]}return[{index:e,size:0,offset:0,data:o&&o[0]}]}(function(e,t){const o=t-1;return"number"==typeof e?e:"LAST"===e.index?o:e.index}(r,o),d,u),[],o,c,d,s);const m=[];if(l.length>0){const e=l[0],t=l[l.length-1];let o=0;for(const n of me(f,e,t)){const r=n.value,i=Math.max(n.start,e),l=Math.min(n.end,t);for(let e=i;e<=l;e++)m.push({index:e,size:r,offset:o,data:u&&u[e]}),o+=r}}if(!i)return nt([],m,o,c,d,s);const g=l.length>0?l[l.length-1]+1:0,p=ye(h,e,t,g);if(0===p.length)return null;const x=o-1;return nt(a([],(o=>{for(const n of p){const r=n.value;let i=r.offset,l=n.start;const s=r.size;if(r.offset<e){l+=Math.floor((e-r.offset+c)/(s+c));const t=l-n.start;i+=t*s+t*c}l<g&&(i+=(g-l)*s,l=g);const a=Math.min(n.end,x);for(let e=l;e<=a&&!(i>=t);e++)o.push({index:e,size:s,offset:i,data:u&&u[e]}),i+=s+c}})),m,o,c,d,s)})),E((e=>null!==e)),b()),tt);v(H(o,E((e=>void 0!==e)),R((e=>null==e?void 0:e.length))),t),v(H(I,R((e=>e.topListHeight))),f),v(f,c),v(H(I,R((e=>[e.top,e.bottom]))),s),v(H(I,R((e=>e.items))),x);return{listState:I,topItemsIndexes:p,endReached:C(H(I,E((({items:e})=>e.length>0)),L(t,o),E((([{items:e},t])=>e[e.length-1].originalIndex===t-1)),R((([,e,t])=>[e-1,t])),b(Ke),R((([e])=>e)))),startReached:C(H(I,P(200),E((({items:e,topItems:t})=>e.length>0&&e[0].originalIndex===t.length)),R((({items:e})=>e[0].index)),b())),rangeChanged:C(H(I,E((({items:e})=>e.length>0)),R((({items:e})=>{let t=0,o=e.length-1;for(;"group"===e[t].type&&t<o;)t++;for(;"group"===e[o].type&&o>t;)o--;return{startIndex:e[t].index,endIndex:e[o].index}})),b(qe))),itemsRendered:x,...h}}),u(Oe,$e,et,Ge,We,Ae,De,Te),{singleton:!0}),it=V((([{sizes:e,firstItemIndex:t,data:o,gap:n},{listState:r},{didMount:i}])=>{const l=w(0);return v(H(i,L(l),E((([,e])=>0!==e)),L(e,t,n,o),R((([[,e],t,o,n,r=[]])=>{let i=0;if(t.groupIndices.length>0)for(const s of t.groupIndices){if(s-i>=e)break;i++}const l=e+i;return nt(Array.from({length:l}).map(((e,t)=>({index:t,size:0,offset:0,data:r[t]}))),[],l,n,t,o)}))),r),{initialItemCount:l}}),u(Oe,rt,De),{singleton:!0}),lt=V((([{scrollVelocity:e}])=>{const t=w(!1),o=T(),n=w(!1);return v(H(e,L(n,t,o),E((([e,t])=>!!t)),R((([e,t,o,n])=>{const{exit:r,enter:i}=t;if(o){if(r(e,n))return!1}else if(i(e,n))return!0;return o})),b()),t),m(H(j(t,e,o),L(n)),(([[e,t,o],n])=>e&&n&&n.change&&n.change(t,o))),{isSeeking:t,scrollSeekConfiguration:n,scrollVelocity:e,scrollSeekRangeChanged:o}}),u(Ae),{singleton:!0}),st=V((([{topItemsIndexes:e}])=>{const t=w(0);return v(H(t,E((e=>e>0)),R((e=>Array.from({length:e}).map(((e,t)=>t))))),e),{topItemCount:t}}),u(rt)),ct=V((([{footerHeight:e,headerHeight:t,fixedHeaderHeight:o,fixedFooterHeight:n},{listState:r}])=>{const i=T(),l=S(H(j(e,n,t,o,r),R((([e,t,o,n,r])=>e+t+o+n+r.offsetBottom+r.bottom))),0);return v(W(l),i),{totalListHeight:l,totalListHeightChanged:i}}),u(Q,rt),{singleton:!0});function at(e){let t,o=!1;return()=>(o||(o=!0,t=e()),t)}const ut=at((()=>/iP(ad|od|hone)/i.test(navigator.userAgent)&&/WebKit/i.test(navigator.userAgent))),dt=V((([{scrollBy:e,scrollTop:t,deviation:o,scrollingInProgress:n},{isScrolling:r,isAtBottom:i,scrollDirection:l,lastJumpDueToItemResize:s},{listState:c},{beforeUnshiftWith:a,shiftWithOffset:u,sizes:d,gap:f},{log:h},{recalcInProgress:p}])=>{const x=C(H(c,L(s),B((([,e,t,o],[{items:n,totalCount:r,bottom:i,offsetBottom:l},s])=>{const c=i+l;let a=0;if(t===r&&e.length>0&&n.length>0){0===n[0].originalIndex&&0===e[0].originalIndex||(a=c-o,0!==a&&(a+=s))}return[a,n,r,c]}),[0,[],0,0]),E((([e])=>0!==e)),L(t,l,n,i,h),E((([,e,t,o])=>!o&&0!==e&&t===je)),R((([[e],,,,,t])=>(t("Upward scrolling compensation",{amount:e},N.DEBUG),e)))));function I(t){t>0?(g(e,{top:-t,behavior:"auto"}),g(o,0)):(g(o,0),g(e,{top:-t,behavior:"auto"}))}return m(H(x,L(o,r)),(([e,t,n])=>{n&&ut()?g(o,t-e):I(-e)})),m(H(j(S(r,!1),o,p),E((([e,t,o])=>!e&&!o&&0!==t)),R((([e,t])=>t)),P(1)),I),v(H(u,R((e=>({top:-e})))),e),m(H(a,L(d,f),R((([e,{lastSize:t},o])=>e*t+e*o))),(t=>{g(o,t),requestAnimationFrame((()=>{g(e,{top:t}),requestAnimationFrame((()=>{g(o,0),g(p,!1)}))}))})),{deviation:o}}),u(Q,Ae,rt,Oe,U,Te)),ft=V((([{totalListHeight:e},{didMount:t},{scrollTo:o}])=>{const n=w(0);return m(H(t,L(n),E((([,e])=>0!==e)),R((([,e])=>({top:e})))),(t=>{I(H(e,E((e=>0!==e))),(()=>{setTimeout((()=>{g(o,t)}))}))})),{initialScrollTop:n}}),u(ct,De,Q),{singleton:!0}),ht=V((([{viewportHeight:e},{totalListHeight:t}])=>{const o=w(!1);return{alignToBottom:o,paddingTopAddition:S(H(j(o,e,t),E((([e])=>e)),R((([,e,t])=>Math.max(0,e-t))),b()),0)}}),u(Q,ct),{singleton:!0}),mt=V((([{scrollTo:e,scrollContainerState:t}])=>{const o=T(),n=T(),r=T(),i=w(!1),l=w(void 0);return v(H(j(o,n),R((([{viewportHeight:e,scrollTop:t,scrollHeight:o},{offsetTop:n}])=>({scrollTop:Math.max(0,t-n),scrollHeight:o,viewportHeight:e})))),t),v(H(e,L(n),R((([e,{offsetTop:t}])=>({...e,top:e.top+t})))),r),{useWindowScroll:i,customScrollParent:l,windowScrollContainerState:o,windowViewportRect:n,windowScrollTo:r}}),u(Q)),gt=V((([{sizes:e,totalCount:t,gap:o},{scrollTop:n,viewportHeight:r,headerHeight:i,fixedHeaderHeight:l,fixedFooterHeight:s,scrollingInProgress:c},{scrollToIndex:a}])=>{const u=T();return v(H(u,L(e,r,t,i,l,s,n),L(o),R((([[e,t,o,n,r,i,l,s],a])=>{const{done:u,behavior:d,align:f,...h}=e;let m=null;const g=ze(e,t,n-1),p=Re(g,t.offsetTree,a)+r+i;if(p<s+i)m={...h,behavior:d,align:f??"start"};else{p+re(t.sizeTree,g)[1]>s+o-l&&(m={...h,behavior:d,align:f??"end"})}return m?u&&I(H(c,k(1),E((e=>!1===e))),u):u&&u(),m})),E((e=>null!==e))),a),{scrollIntoView:u}}),u(Oe,Q,We,rt,U),{singleton:!0}),pt=V((([e,t,o,n,r,i,l,s,c])=>({...e,...t,...o,...n,...r,...i,...l,...s,...c})),u(et,it,De,lt,ct,ft,ht,mt,gt)),xt=V((([{totalCount:e,sizeRanges:t,fixedItemSize:o,defaultItemSize:n,trackItemSizes:r,itemSize:i,data:l,firstItemIndex:s,groupIndices:c,statefulTotalCount:a,gap:u},{initialTopMostItemIndex:d,scrolledToInitialItem:f},h,m,{listState:g,topItemsIndexes:p,...x},{scrollToIndex:I},T,{topItemCount:w},{groupCounts:C},S,y])=>(v(x.rangeChanged,S.scrollSeekRangeChanged),v(H(S.windowViewportRect,R((e=>e.visibleHeight))),h.viewportHeight),{totalCount:e,data:l,firstItemIndex:s,sizeRanges:t,initialTopMostItemIndex:d,scrolledToInitialItem:f,topItemsIndexes:p,topItemCount:w,groupCounts:C,fixedItemHeight:o,defaultItemHeight:n,gap:u,...m,statefulTotalCount:a,listState:g,scrollToIndex:I,trackItemSizes:r,itemSize:i,groupIndices:c,...x,...S,...h,...y})),u(Oe,Ge,Q,_e,rt,We,dt,st,$e,pt,U)),vt="-webkit-sticky",It="sticky",Tt=at((()=>{if("undefined"==typeof document)return It;const e=document.createElement("div");return e.style.position=vt,e.style.position===vt?vt:It}));function wt(e,o){const n=t.useRef(null),r=t.useCallback((t=>{if(null===t||!t.offsetParent)return;const r=t.getBoundingClientRect(),i=r.width;let l,s;if(o){const e=o.getBoundingClientRect(),t=r.top-e.top;l=e.height-Math.max(0,t),s=t+o.scrollTop}else l=window.innerHeight-Math.max(0,r.top),s=r.top+window.pageYOffset;n.current={offsetTop:s,visibleHeight:l,visibleWidth:i},e(n.current)}),[e,o]),{callbackRef:i,ref:l}=$(r),s=t.useCallback((()=>{r(l.current)}),[r,l]);return t.useEffect((()=>{if(o){o.addEventListener("scroll",s);const e=new ResizeObserver(s);return e.observe(o),()=>{o.removeEventListener("scroll",s),e.unobserve(o)}}return window.addEventListener("scroll",s),window.addEventListener("resize",s),()=>{window.removeEventListener("scroll",s),window.removeEventListener("resize",s)}}),[s,o]),i}const Ct=r.createContext(void 0),St=r.createContext(void 0);function Ht(e){return e}const yt=V((([e,t])=>({...e,...t})),u(xt,V((()=>{const e=w((e=>`Item ${e}`)),t=w(null),o=w((e=>`Group ${e}`)),n=w({}),r=w(Ht),i=w("div"),l=w(h),s=(e,t=null)=>S(H(n,R((t=>t[e])),b()),t);return{context:t,itemContent:e,groupContent:o,components:n,computeItemKey:r,headerFooterTag:i,scrollerRef:l,FooterComponent:s("Footer"),HeaderComponent:s("Header"),TopItemListComponent:s("TopItemList"),ListComponent:s("List","div"),ItemComponent:s("Item","div"),GroupComponent:s("Group","div"),ScrollerComponent:s("Scroller","div"),EmptyPlaceholder:s("EmptyPlaceholder"),ScrollSeekPlaceholder:s("ScrollSeekPlaceholder")}})))),bt=({height:t})=>e.jsx("div",{style:{height:t}}),Et={position:Tt(),zIndex:1,overflowAnchor:"none"},Rt={overflowAnchor:"none"},zt=r.memo((function({showTopList:e=!1}){const o=_t("listState"),n=Nt("sizeRanges"),i=_t("useWindowScroll"),l=_t("customScrollParent"),s=Nt("windowScrollContainerState"),c=Nt("scrollContainerState"),a=l||i?s:c,u=_t("itemContent"),d=_t("context"),f=_t("groupContent"),m=_t("trackItemSizes"),g=_t("itemSize"),p=_t("log"),x=Nt("gap"),{callbackRef:v}=q(n,g,m,e?h:a,p,x,l),[I,T]=r.useState(0);Ut("deviation",(e=>{I!==e&&T(e)}));const w=_t("EmptyPlaceholder"),C=_t("ScrollSeekPlaceholder")||bt,S=_t("ListComponent"),H=_t("ItemComponent"),y=_t("GroupComponent"),b=_t("computeItemKey"),E=_t("isSeeking"),R=_t("groupIndices").length>0,z=_t("paddingTopAddition"),B=e?{}:{boxSizing:"border-box",paddingTop:o.offsetTop+z,paddingBottom:o.offsetBottom,marginTop:I};return!e&&0===o.totalCount&&w?t.createElement(w,Ot(w,d)):t.createElement(S,{...Ot(S,d),ref:v,style:B,"data-test-id":e?"virtuoso-top-item-list":"virtuoso-item-list"},(e?o.topItems:o.items).map((e=>{const n=e.originalIndex,r=b(n+o.firstItemIndex,e.data,d);return E?t.createElement(C,{...Ot(C,d),key:r,index:e.index,height:e.size,type:e.type||"item",..."group"===e.type?{}:{groupIndex:e.groupIndex}}):"group"===e.type?t.createElement(y,{...Ot(y,d),key:r,"data-index":n,"data-known-size":e.size,"data-item-index":e.index,style:Et},f(e.index)):t.createElement(H,{...Ot(H,d),key:r,"data-index":n,"data-known-size":e.size,"data-item-index":e.index,"data-item-group-index":e.groupIndex,item:e.data,style:Rt},R?u(e.index,e.groupIndex,e.data,d):u(e.index,e.data,d))})))})),Bt={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},kt={width:"100%",height:"100%",position:"absolute",top:0},Pt={width:"100%",position:Tt(),top:0,zIndex:1};function Ot(e,t){if("string"!=typeof e)return{context:t}}const Lt=r.memo((function(){const e=_t("HeaderComponent"),o=Nt("headerHeight"),n=_t("headerFooterTag"),r=K((e=>o(Y(e,"height")))),i=_t("context");return e?t.createElement(n,{ref:r},t.createElement(e,Ot(e,i))):null})),Mt=r.memo((function(){const e=_t("FooterComponent"),o=Nt("footerHeight"),n=_t("headerFooterTag"),r=K((e=>o(Y(e,"height")))),i=_t("context");return e?t.createElement(n,{ref:r},t.createElement(e,Ot(e,i))):null}));function Wt({usePublisher:e,useEmitter:o,useEmitterValue:n}){return r.memo((function({style:r,children:i,...l}){const s=e("scrollContainerState"),c=n("ScrollerComponent"),a=e("smoothScrollTargetReached"),u=n("scrollerRef"),d=n("context"),{scrollerRef:f,scrollByCallback:h,scrollToCallback:m}=J(s,a,c,u);return o("scrollTo",m),o("scrollBy",h),t.createElement(c,{ref:f,style:{...Bt,...r},"data-test-id":"virtuoso-scroller","data-virtuoso-scroller":!0,tabIndex:0,...l,...Ot(c,d)},i)}))}function jt({usePublisher:e,useEmitter:o,useEmitterValue:n}){return r.memo((function({style:r,children:i,...l}){const s=e("windowScrollContainerState"),c=n("ScrollerComponent"),a=e("smoothScrollTargetReached"),u=n("totalListHeight"),d=n("deviation"),f=n("customScrollParent"),m=n("context"),{scrollerRef:g,scrollByCallback:p,scrollToCallback:x}=J(s,a,c,h,f);return G((()=>(g.current=f||window,()=>{g.current=null})),[g,f]),o("windowScrollTo",x),o("scrollBy",p),t.createElement(c,{style:{position:"relative",...r,...0!==u?{height:u+d}:{}},"data-virtuoso-scroller":!0,...l,...Ot(c,m)},i)}))}const Vt=({children:o})=>{const n=t.useContext(Ct),l=Nt("viewportHeight"),s=Nt("fixedItemHeight"),c=K(i(l,(e=>Y(e,"height"))));return r.useEffect((()=>{n&&(l(n.viewportHeight),s(n.itemHeight))}),[n,l,s]),e.jsx("div",{style:kt,ref:c,"data-viewport-type":"element",children:o})},Ft=({children:o})=>{const n=t.useContext(Ct),i=Nt("windowViewportRect"),l=Nt("fixedItemHeight"),s=_t("customScrollParent"),c=wt(i,s);return r.useEffect((()=>{n&&(l(n.itemHeight),i({offsetTop:0,visibleHeight:n.viewportHeight,visibleWidth:100}))}),[n,i,l]),e.jsx("div",{ref:c,style:kt,"data-viewport-type":"window",children:o})},At=({children:e})=>{const o=_t("TopItemListComponent"),n=_t("headerHeight"),r={...Pt,marginTop:`${n}px`},i=_t("context");return t.createElement(o||"div",{style:r,context:i},e)},Dt=r.memo((function(t){const o=_t("useWindowScroll"),n=_t("topItemsIndexes").length>0,r=_t("customScrollParent"),i=r||o?Kt:$t,l=r||o?Ft:Vt;return e.jsxs(i,{...t,children:[n&&e.jsx(At,{children:e.jsx(zt,{showTopList:!0})}),e.jsxs(l,{children:[e.jsx(Lt,{}),e.jsx(zt,{}),e.jsx(Mt,{})]})]})})),{Component:Gt,usePublisher:Nt,useEmitterValue:_t,useEmitter:Ut}=D(yt,{required:{},optional:{context:"context",followOutput:"followOutput",firstItemIndex:"firstItemIndex",itemContent:"itemContent",groupContent:"groupContent",overscan:"overscan",increaseViewportBy:"increaseViewportBy",totalCount:"totalCount",topItemCount:"topItemCount",initialTopMostItemIndex:"initialTopMostItemIndex",components:"components",groupCounts:"groupCounts",atBottomThreshold:"atBottomThreshold",atTopThreshold:"atTopThreshold",computeItemKey:"computeItemKey",defaultItemHeight:"defaultItemHeight",fixedItemHeight:"fixedItemHeight",itemSize:"itemSize",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",data:"data",initialItemCount:"initialItemCount",initialScrollTop:"initialScrollTop",alignToBottom:"alignToBottom",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel"},methods:{scrollToIndex:"scrollToIndex",scrollIntoView:"scrollIntoView",scrollTo:"scrollTo",scrollBy:"scrollBy",autoscrollToBottom:"autoscrollToBottom"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",totalListHeightChanged:"totalListHeightChanged",itemsRendered:"itemsRendered",groupIndices:"groupIndices"}},Dt),$t=Wt({usePublisher:Nt,useEmitterValue:_t,useEmitter:Ut}),Kt=jt({usePublisher:Nt,useEmitterValue:_t,useEmitter:Ut}),qt=Gt,Yt=Gt,Zt={items:[],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},Jt={items:[{index:0}],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},{round:Qt,ceil:Xt,floor:eo,min:to,max:oo}=Math;function no(e,t,o){return Array.from({length:t-e+1}).map(((t,n)=>({index:n+e,data:null==o?void 0:o[n+e]})))}function ro(e,t){return e&&e.column===t.column&&e.row===t.row}const io=V((([{overscan:e,visibleRange:t,listBoundary:o},{scrollTop:n,viewportHeight:r,scrollBy:i,scrollTo:l,smoothScrollTargetReached:s,scrollContainerState:c,footerHeight:a,headerHeight:u},d,f,{propsReady:h,didMount:m},{windowViewportRect:g,windowScrollTo:p,useWindowScroll:x,customScrollParent:I,windowScrollContainerState:y},B])=>{const k=w(0),P=w(0),O=w(Zt),M=w({height:0,width:0}),V=w({height:0,width:0}),F=T(),A=T(),D=w(0),G=w(void 0),N=w({row:0,column:0});v(H(j(m,P,G),E((([,e])=>0!==e)),R((([,e,t])=>({items:no(0,e-1,t),top:0,bottom:0,offsetBottom:0,offsetTop:0,itemHeight:0,itemWidth:0})))),O),v(H(j(W(k),t,W(N,ro),W(V,((e,t)=>e&&e.width===t.width&&e.height===t.height)),G),L(M),R((([[e,[t,o],n,r,i],l])=>{const{row:s,column:c}=n,{height:a,width:u}=r,{width:d}=l;if(0===e||0===d)return Zt;if(0===u)return function(e){return{...Jt,items:e}}(no(0,0,i));const f=co(d,u,c);let h=f*eo((t+s)/(a+s)),m=f*Xt((o+s)/(a+s))-1;m=to(e-1,oo(m,f-1)),h=to(m,oo(0,h));const g=no(h,m,i),{top:p,bottom:x}=lo(l,n,r,g),v=Xt(e/f);return{items:g,offsetTop:p,offsetBottom:v*a+(v-1)*s-x,top:p,bottom:x,itemHeight:a,itemWidth:u}}))),O),v(H(G,E((e=>void 0!==e)),R((e=>e.length))),k),v(H(M,R((({height:e})=>e))),r),v(H(j(M,V,O,N),R((([e,t,{items:o},n])=>{const{top:r,bottom:i}=lo(e,n,t,o);return[r,i]})),b(Ke)),o);const _=C(H(W(O),E((({items:e})=>e.length>0)),L(k),E((([{items:e},t])=>e[e.length-1].index===t-1)),R((([,e])=>e-1)),b())),U=C(H(W(O),E((({items:e})=>e.length>0&&0===e[0].index)),z(0),b())),$=C(H(W(O),E((({items:e})=>e.length>0)),R((({items:e})=>({startIndex:e[0].index,endIndex:e[e.length-1].index}))),b(qe)));v($,f.scrollSeekRangeChanged),v(H(F,L(M,V,k,N),R((([e,t,o,n,r])=>{const i=Me(e),{align:l,behavior:s,offset:c}=i;let a=i.index;"LAST"===a&&(a=n-1),a=oo(0,a,to(n-1,a));let u=so(t,r,o,a);return"end"===l?u=Qt(u-t.height+o.height):"center"===l&&(u=Qt(u-t.height/2+o.height/2)),c&&(u+=c),{top:u,behavior:s}}))),l);const K=S(H(O,R((e=>e.offsetBottom+e.bottom))),0);return v(H(g,R((e=>({width:e.visibleWidth,height:e.visibleHeight})))),M),{data:G,totalCount:k,viewportDimensions:M,itemDimensions:V,scrollTop:n,scrollHeight:A,overscan:e,scrollBy:i,scrollTo:l,scrollToIndex:F,smoothScrollTargetReached:s,windowViewportRect:g,windowScrollTo:p,useWindowScroll:x,customScrollParent:I,windowScrollContainerState:y,deviation:D,scrollContainerState:c,footerHeight:a,headerHeight:u,initialItemCount:P,gap:N,...f,gridState:O,totalListHeight:K,...d,startReached:U,endReached:_,rangeChanged:$,propsReady:h,...B}}),u(et,Q,Ae,lt,De,mt,U));function lo(e,t,o,n){const{height:r}=o;if(void 0===r||0===n.length)return{top:0,bottom:0};return{top:so(e,t,o,n[0].index),bottom:so(e,t,o,n[n.length-1].index)+r}}function so(e,t,o,n){const r=co(e.width,o.width,t.column),i=eo(n/r),l=i*o.height+oo(0,i-1)*t.row;return l>0?l+t.row:l}function co(e,t,o){return oo(1,eo((e+o)/(t+o)))}const ao=V((([e,t])=>({...e,...t})),u(io,V((()=>{const e=w((e=>`Item ${e}`)),t=w({}),o=w(null),n=w("virtuoso-grid-item"),r=w("virtuoso-grid-list"),i=w(Ht),l=w("div"),s=w(h),c=(e,o=null)=>S(H(t,R((t=>t[e])),b()),o);return{context:o,itemContent:e,components:t,computeItemKey:i,itemClassName:n,listClassName:r,headerFooterTag:l,scrollerRef:s,FooterComponent:c("Footer"),HeaderComponent:c("Header"),ListComponent:c("List","div"),ItemComponent:c("Item","div"),ScrollerComponent:c("Scroller","div"),ScrollSeekPlaceholder:c("ScrollSeekPlaceholder","div")}})))),uo=r.memo((function(){const e=Io("gridState"),o=Io("listClassName"),n=Io("itemClassName"),r=Io("itemContent"),i=Io("computeItemKey"),l=Io("isSeeking"),s=vo("scrollHeight"),c=Io("ItemComponent"),a=Io("ListComponent"),u=Io("ScrollSeekPlaceholder"),d=Io("context"),f=vo("itemDimensions"),h=vo("gap"),m=Io("log"),g=K((e=>{const t=e.parentElement.parentElement.scrollHeight;s(t);const o=e.firstChild;o&&f(o.getBoundingClientRect()),h({row:So("row-gap",getComputedStyle(e).rowGap,m),column:So("column-gap",getComputedStyle(e).columnGap,m)})}));return t.createElement(a,{ref:g,className:o,...Ot(a,d),style:{paddingTop:e.offsetTop,paddingBottom:e.offsetBottom},"data-test-id":"virtuoso-item-list"},e.items.map((o=>{const s=i(o.index,o.data,d);return l?t.createElement(u,{key:s,...Ot(u,d),index:o.index,height:e.itemHeight,width:e.itemWidth}):t.createElement(c,{...Ot(c,d),className:n,"data-index":o.index,key:s},r(o.index,o.data,d))})))})),fo=r.memo((function(){const e=Io("HeaderComponent"),o=vo("headerHeight"),n=Io("headerFooterTag"),r=K((e=>o(Y(e,"height")))),i=Io("context");return e?t.createElement(n,{ref:r},t.createElement(e,Ot(e,i))):null})),ho=r.memo((function(){const e=Io("FooterComponent"),o=vo("footerHeight"),n=Io("headerFooterTag"),r=K((e=>o(Y(e,"height")))),i=Io("context");return e?t.createElement(n,{ref:r},t.createElement(e,Ot(e,i))):null})),mo=({children:o})=>{const n=t.useContext(St),i=vo("itemDimensions"),l=vo("viewportDimensions"),s=K((e=>{l(e.getBoundingClientRect())}));return r.useEffect((()=>{n&&(l({height:n.viewportHeight,width:n.viewportWidth}),i({height:n.itemHeight,width:n.itemWidth}))}),[n,l,i]),e.jsx("div",{style:kt,ref:s,children:o})},go=({children:o})=>{const n=t.useContext(St),i=vo("windowViewportRect"),l=vo("itemDimensions"),s=Io("customScrollParent"),c=wt(i,s);return r.useEffect((()=>{n&&(l({height:n.itemHeight,width:n.itemWidth}),i({offsetTop:0,visibleHeight:n.viewportHeight,visibleWidth:n.viewportWidth}))}),[n,i,l]),e.jsx("div",{ref:c,style:kt,children:o})},po=r.memo((function({...t}){const o=Io("useWindowScroll"),n=Io("customScrollParent"),r=n||o?Co:wo,i=n||o?go:mo;return e.jsx(r,{...t,children:e.jsxs(i,{children:[e.jsx(fo,{}),e.jsx(uo,{}),e.jsx(ho,{})]})})})),{Component:xo,usePublisher:vo,useEmitterValue:Io,useEmitter:To}=D(ao,{optional:{context:"context",totalCount:"totalCount",overscan:"overscan",itemContent:"itemContent",components:"components",computeItemKey:"computeItemKey",data:"data",initialItemCount:"initialItemCount",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",listClassName:"listClassName",itemClassName:"itemClassName",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef"},methods:{scrollTo:"scrollTo",scrollBy:"scrollBy",scrollToIndex:"scrollToIndex"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange"}},po),wo=Wt({usePublisher:vo,useEmitterValue:Io,useEmitter:To}),Co=jt({usePublisher:vo,useEmitterValue:Io,useEmitter:To});function So(e,t,o){return"normal"===t||(null==t?void 0:t.endsWith("px"))||o(`${e} was not resolved to pixel value correctly`,t,N.WARN),"normal"===t?0:parseInt(t??"0",10)}const Ho=xo,yo=V((([e,t])=>({...e,...t})),u(xt,V((()=>{const t=w((t=>e.jsxs("td",{children:["Item $",t]}))),o=w(null),n=w(null),r=w(null),i=w({}),l=w(Ht),s=w(h),c=(e,t=null)=>S(H(i,R((t=>t[e])),b()),t);return{context:o,itemContent:t,fixedHeaderContent:n,fixedFooterContent:r,components:i,computeItemKey:l,scrollerRef:s,TableComponent:c("Table","table"),TableHeadComponent:c("TableHead","thead"),TableFooterComponent:c("TableFoot","tfoot"),TableBodyComponent:c("TableBody","tbody"),TableRowComponent:c("TableRow","tr"),ScrollerComponent:c("Scroller","div"),EmptyPlaceholder:c("EmptyPlaceholder"),ScrollSeekPlaceholder:c("ScrollSeekPlaceholder"),FillerRow:c("FillerRow")}})))),bo=({height:t})=>e.jsx("tr",{children:e.jsx("td",{style:{height:t}})}),Eo=({height:t})=>e.jsx("tr",{children:e.jsx("td",{style:{height:t,padding:0,border:0}})}),Ro=r.memo((function(){const o=Lo("listState"),n=Oo("sizeRanges"),i=Lo("useWindowScroll"),l=Lo("customScrollParent"),s=Oo("windowScrollContainerState"),c=Oo("scrollContainerState"),a=l||i?s:c,u=Lo("itemContent"),d=Lo("trackItemSizes"),f=Lo("itemSize"),h=Lo("log"),{callbackRef:m,ref:g}=q(n,f,d,a,h,void 0,l),[p,x]=r.useState(0);Mo("deviation",(e=>{p!==e&&(g.current.style.marginTop=`${e}px`,x(e))}));const v=Lo("EmptyPlaceholder"),I=Lo("ScrollSeekPlaceholder")||bo,T=Lo("FillerRow")||Eo,w=Lo("TableBodyComponent"),C=Lo("TableRowComponent"),S=Lo("computeItemKey"),H=Lo("isSeeking"),y=Lo("paddingTopAddition"),b=Lo("firstItemIndex"),E=Lo("statefulTotalCount"),R=Lo("context");if(0===E&&v)return t.createElement(v,Ot(v,R));const z=o.offsetTop+y+p,B=o.offsetBottom,k=z>0?e.jsx(T,{height:z},"padding-top"):null,P=B>0?e.jsx(T,{height:B},"padding-bottom"):null,O=o.items.map((e=>{const o=e.originalIndex,n=S(o+b,e.data,R);return H?t.createElement(I,{...Ot(I,R),key:n,index:e.index,height:e.size,type:e.type||"item"}):t.createElement(C,{...Ot(C,R),key:n,"data-index":o,"data-known-size":e.size,"data-item-index":e.index,item:e.data,style:{overflowAnchor:"none"}},u(e.index,e.data,R))}));return t.createElement(w,{ref:m,"data-test-id":"virtuoso-item-list",...Ot(w,R)},[k,...O,P])})),zo=({children:o})=>{const n=t.useContext(Ct),l=Oo("viewportHeight"),s=Oo("fixedItemHeight"),c=K(i(l,(e=>Y(e,"height"))));return r.useEffect((()=>{n&&(l(n.viewportHeight),s(n.itemHeight))}),[n,l,s]),e.jsx("div",{style:kt,ref:c,"data-viewport-type":"element",children:o})},Bo=({children:o})=>{const n=t.useContext(Ct),i=Oo("windowViewportRect"),l=Oo("fixedItemHeight"),s=Lo("customScrollParent"),c=wt(i,s);return r.useEffect((()=>{n&&(l(n.itemHeight),i({offsetTop:0,visibleHeight:n.viewportHeight,visibleWidth:100}))}),[n,i,l]),e.jsx("div",{ref:c,style:kt,"data-viewport-type":"window",children:o})},ko=r.memo((function(t){const o=Lo("useWindowScroll"),n=Lo("customScrollParent"),l=Oo("fixedHeaderHeight"),s=Oo("fixedFooterHeight"),c=Lo("fixedHeaderContent"),a=Lo("fixedFooterContent"),u=Lo("context"),d=K(i(l,(e=>Y(e,"height")))),f=K(i(s,(e=>Y(e,"height")))),h=n||o?jo:Wo,m=n||o?Bo:zo,g=Lo("TableComponent"),p=Lo("TableHeadComponent"),x=Lo("TableFooterComponent"),v=c?r.createElement(p,{key:"TableHead",style:{zIndex:1,position:"sticky",top:0},ref:d,...Ot(p,u)},c()):null,I=a?r.createElement(x,{key:"TableFoot",style:{zIndex:1,position:"sticky",bottom:0},ref:f,...Ot(x,u)},a()):null;return e.jsx(h,{...t,children:e.jsx(m,{children:r.createElement(g,{style:{borderSpacing:0},...Ot(g,u)},[v,e.jsx(Ro,{},"TableBody"),I])})})})),{Component:Po,usePublisher:Oo,useEmitterValue:Lo,useEmitter:Mo}=D(yo,{required:{},optional:{context:"context",followOutput:"followOutput",firstItemIndex:"firstItemIndex",itemContent:"itemContent",fixedHeaderContent:"fixedHeaderContent",fixedFooterContent:"fixedFooterContent",overscan:"overscan",increaseViewportBy:"increaseViewportBy",totalCount:"totalCount",topItemCount:"topItemCount",initialTopMostItemIndex:"initialTopMostItemIndex",components:"components",groupCounts:"groupCounts",atBottomThreshold:"atBottomThreshold",atTopThreshold:"atTopThreshold",computeItemKey:"computeItemKey",defaultItemHeight:"defaultItemHeight",fixedItemHeight:"fixedItemHeight",itemSize:"itemSize",scrollSeekConfiguration:"scrollSeekConfiguration",data:"data",initialItemCount:"initialItemCount",initialScrollTop:"initialScrollTop",alignToBottom:"alignToBottom",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel"},methods:{scrollToIndex:"scrollToIndex",scrollIntoView:"scrollIntoView",scrollTo:"scrollTo",scrollBy:"scrollBy"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",totalListHeightChanged:"totalListHeightChanged",itemsRendered:"itemsRendered",groupIndices:"groupIndices"}},ko),Wo=Wt({usePublisher:Oo,useEmitterValue:Lo,useEmitter:Mo}),jo=jt({usePublisher:Oo,useEmitterValue:Lo,useEmitter:Mo}),Vo=Po;exports.GroupedVirtuoso=Yt,exports.LogLevel=N,exports.TableVirtuoso=Vo,exports.Virtuoso=qt,exports.VirtuosoGrid=Ho,exports.VirtuosoGridMockContext=St,exports.VirtuosoMockContext=Ct;
package/dist/index.d.ts CHANGED
@@ -5,12 +5,11 @@ import { default as React_2 } from 'react';
5
5
  import * as React_3 from 'react';
6
6
  import { ReactElement } from 'react';
7
7
  import { ReactNode } from 'react';
8
- import { Ref } from 'react';
9
8
 
10
9
  /**
11
10
  * Customize the Virtuoso rendering by passing a set of custom components.
12
11
  */
13
- export declare interface Components<Context = unknown> {
12
+ export declare interface Components<Data = unknown, Context = unknown> {
14
13
  /**
15
14
  * Set to render a component at the top of the list.
16
15
  *
@@ -28,7 +27,7 @@ export declare interface Components<Context = unknown> {
28
27
  /**
29
28
  * Set to customize the item wrapping element. Use only if you would like to render list from elements different than a `div`.
30
29
  */
31
- Item?: ComponentType<ItemProps & {
30
+ Item?: ComponentType<ItemProps<Data> & {
32
31
  context?: Context;
33
32
  }>;
34
33
  /**
@@ -167,7 +166,9 @@ export declare interface GridItemProps {
167
166
  /**
168
167
  * Passed to the Components.List custom component
169
168
  */
170
- export declare type GridListProps = Pick<ComponentPropsWithRef<'div'>, 'style' | 'children' | 'ref' | 'className'>;
169
+ export declare type GridListProps = Pick<ComponentPropsWithRef<'div'>, 'style' | 'children' | 'ref' | 'className'> & {
170
+ 'data-test-id': string;
171
+ };
171
172
 
172
173
  export declare type GridRootProps = Omit<React_2.HTMLProps<HTMLDivElement>, 'ref' | 'data'>;
173
174
 
@@ -189,7 +190,7 @@ export declare interface GroupedScrollIntoViewLocation extends ScrollIntoViewLoc
189
190
  }
190
191
 
191
192
  export declare const GroupedVirtuoso: <ItemData = any, Context = any>(props: GroupedVirtuosoProps<ItemData, Context> & {
192
- ref?: Ref<GroupedVirtuosoHandle> | undefined;
193
+ ref?: React_3.Ref<GroupedVirtuosoHandle> | undefined;
193
194
  }) => ReactElement;
194
195
 
195
196
  export declare interface GroupedVirtuosoHandle {
@@ -251,11 +252,12 @@ export declare interface ItemContent<D, C> {
251
252
  (index: number, data: D, context: C): ReactNode;
252
253
  }
253
254
 
254
- export declare type ItemProps = Pick<ComponentPropsWithRef<'div'>, 'style' | 'children'> & {
255
+ export declare type ItemProps<D> = Pick<ComponentPropsWithRef<'div'>, 'style' | 'children'> & {
255
256
  'data-index': number;
256
257
  'data-item-index': number;
257
258
  'data-item-group-index'?: number;
258
259
  'data-known-size': number;
260
+ item: D;
259
261
  };
260
262
 
261
263
  export declare type ListItem<D> = RecordItem<D> | GroupItem<D>;
@@ -367,7 +369,7 @@ export declare type TableBodyProps = Pick<ComponentPropsWithRef<'tbody'>, 'style
367
369
  /**
368
370
  * Customize the TableVirtuoso rendering by passing a set of custom components.
369
371
  */
370
- export declare interface TableComponents<Context = unknown> {
372
+ export declare interface TableComponents<Data = unknown, Context = unknown> {
371
373
  /**
372
374
  * Set to customize the wrapping `table` element.
373
375
  *
@@ -391,7 +393,7 @@ export declare interface TableComponents<Context = unknown> {
391
393
  /**
392
394
  * Set to customize the item wrapping element. Default is `tr`.
393
395
  */
394
- TableRow?: ComponentType<ItemProps & {
396
+ TableRow?: ComponentType<ItemProps<Data> & {
395
397
  context?: Context;
396
398
  }>;
397
399
  /**
@@ -432,7 +434,7 @@ export declare type TableProps = Pick<ComponentPropsWithRef<'table'>, 'style' |
432
434
  export declare type TableRootProps = Omit<React_2.HTMLProps<HTMLTableElement>, 'ref' | 'data'>;
433
435
 
434
436
  export declare const TableVirtuoso: <ItemData = any, Context = any>(props: TableVirtuosoProps<ItemData, Context> & {
435
- ref?: Ref<TableVirtuosoHandle> | undefined;
437
+ ref?: React_3.Ref<TableVirtuosoHandle> | undefined;
436
438
  }) => ReactElement;
437
439
 
438
440
  export declare interface TableVirtuosoHandle {
@@ -446,15 +448,11 @@ export declare interface TableVirtuosoProps<D, C> extends Omit<VirtuosoProps<D,
446
448
  /**
447
449
  * Use the `components` property for advanced customization of the elements rendered by the table.
448
450
  */
449
- components?: TableComponents<C>;
451
+ components?: TableComponents<D, C>;
450
452
  /**
451
453
  * Set the contents of the table header.
452
454
  */
453
455
  fixedHeaderContent?: FixedHeaderContent;
454
- /**
455
- * Set the contents of the table footer.
456
- */
457
- fixedFooterContent?: FixedFooterContent;
458
456
  /**
459
457
  * The total amount of items to be rendered.
460
458
  */
@@ -617,20 +615,16 @@ export declare interface TableVirtuosoProps<D, C> extends Omit<VirtuosoProps<D,
617
615
  * By default `4`. Redefine to change how much away from the bottom the scroller can be before the list is not considered not at bottom.
618
616
  */
619
617
  atBottomThreshold?: number;
620
- /**
621
- * No longer necessary after 2.10.2. component should work out of the box.
622
- */
623
- react18ConcurrentRendering?: boolean;
624
618
  }
625
619
 
626
620
  export declare type TopItemListProps = Pick<ComponentPropsWithRef<'div'>, 'style' | 'children'>;
627
621
 
628
622
  export declare const Virtuoso: <ItemData = any, Context = any>(props: VirtuosoProps<ItemData, Context> & {
629
- ref?: Ref<VirtuosoHandle> | undefined;
623
+ ref?: React_3.Ref<VirtuosoHandle> | undefined;
630
624
  }) => ReactElement;
631
625
 
632
- export declare const VirtuosoGrid: <ItemData = any, Context = any>(props: VirtuosoGridProps<ItemData, Context> & {
633
- ref?: Ref<VirtuosoGridHandle> | undefined;
626
+ export declare const VirtuosoGrid: <Context = any>(props: VirtuosoGridProps<Context, unknown> & {
627
+ ref?: React_3.Ref<VirtuosoGridHandle> | undefined;
634
628
  }) => ReactElement;
635
629
 
636
630
  export declare interface VirtuosoGridHandle {
@@ -670,10 +664,6 @@ export declare interface VirtuosoGridProps<D, C = unknown> extends GridRootProps
670
664
  * Use the `components` property for advanced customization of the elements rendered by the list.
671
665
  */
672
666
  components?: GridComponents<C>;
673
- /**
674
- * Use the `components` property for advanced customization of the elements rendered by the list.
675
- */
676
- context?: C;
677
667
  /**
678
668
  * Set the overscan property to make the component "chunk" the rendering of new items on scroll.
679
669
  * The property causes the component to render more items than the necessary, but reduces the re-renders on scroll.
@@ -687,10 +677,6 @@ export declare interface VirtuosoGridProps<D, C = unknown> extends GridRootProps
687
677
  * If specified, the component will use the function to generate the `key` property for each list item.
688
678
  */
689
679
  computeItemKey?: GridComputeItemKey<D, C>;
690
- /**
691
- * Set to customize the wrapper tag for the header and footer components (default is `div`).
692
- */
693
- headerFooterTag?: string;
694
680
  /**
695
681
  * Use to display placeholders if the user scrolls fast through the list.
696
682
  *
@@ -839,7 +825,7 @@ export declare interface VirtuosoProps<D, C> extends ListRootProps {
839
825
  /**
840
826
  * Use the `components` property for advanced customization of the elements rendered by the list.
841
827
  */
842
- components?: Components<C>;
828
+ components?: Components<D, C>;
843
829
  /**
844
830
  * Set the callback to specify the contents of the item.
845
831
  */
@@ -968,10 +954,6 @@ export declare interface VirtuosoProps<D, C> extends ListRootProps {
968
954
  * By default `4`. Redefine to change how much away from the bottom the scroller can be before the list is not considered not at bottom.
969
955
  */
970
956
  atBottomThreshold?: number;
971
- /**
972
- * No longer necessary after 2.10.2. component should work out of the box.
973
- */
974
- react18ConcurrentRendering?: boolean;
975
957
  }
976
958
 
977
959
  export declare interface WindowViewportInfo {