dinocollab-core 2.2.29 → 2.2.31

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.
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as n,asyncToGenerator as e,regenerator as r,slicedToArray as t,createForOfIteratorHelper as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{Box as l,Grid as u}from"@mui/material";import{useCallback as c,useMemo as s,useRef as d,useState as v,useEffect as f,useLayoutEffect as h}from"react";import{useMergedConfig as p}from"./hooks.js";import{ViewGridStyled as g,viewGridClasses as m}from"./styleds.js";import{resolveGridSpacing as x,resolveGridColumnsFromWidth as T,DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE as M}from"./helpers.js";function I(e){var r=function(e){return function(r){var o,a=v(!1),c=t(a,2),h=c[0],x=c[1],T=d(null),M=p(r,e),I=M.Component,S=!0===(null===(o=M.normalOptions)||void 0===o?void 0:o.autoHeight),H="client"===r.featureMode,y=s(function(){return r.value},[r.value]);f(function(){H&&!S&&void 0!==r.scrollResetToken&&T.current&&(T.current.scrollTop=0)},[H,S,r.scrollResetToken]);var b=s(function(){var n=[m.root,m.normal];return h&&n.push(m.scrolling),S&&n.push(m.autoHeight),n.join(" ")},[h,S]);return i(g,{className:b,children:i(l,{className:m.scrollContainer,ref:T,onScroll:function(n){var e,t=n.currentTarget;x(t.scrollTop>M.scrollingThreshold),t.scrollHeight-t.scrollTop-t.clientHeight<=M.nearEndThreshold&&(null===(e=r.onNearEnd)||void 0===e||e.call(r))},children:i(u,{container:!0,spacing:"".concat(M.spacing,"px"),className:m.grid,children:y.map(function(r,t){var o,a=null!==(o=e.getterId(r,t))&&void 0!==o?o:t;return i(u,n(n({className:m.gridItem,item:!0},M.sizes),{},{children:i(I,{value:r,index:t})}),a)})})})})}}(e),I=function(n){return function(e){var r=s(function(){return e.value},[e.value]),u=p(e,n),I=u.sizes,S=u.virtualizedOptions,H=u.Component,y=d(null),b=d(new Map),z=d(null),N=d(!1),R=v(0),k=t(R,2),C=k[0],w=k[1],O=v(0),j=t(O,2),E=j[0],A=j[1],B=v(0),F=t(B,2),P=F[0],_=F[1],q=v(null),G=t(q,2),W=G[0],D=G[1],J=Math.max(1,S.overscan),K=Math.round(x(u.spacing)),L=P>u.scrollingThreshold,Q=null!=W?W:M;f(function(){"client"===e.featureMode&&void 0!==e.scrollResetToken&&(y.current&&(y.current.scrollTop=0),_(0))},[e.featureMode,e.scrollResetToken]),h(function(){if(y.current){var n=function(){var n,e,r,t,o=null!==(n=null===(e=y.current)||void 0===e?void 0:e.clientWidth)&&void 0!==n?n:0,i=null!==(r=null===(t=y.current)||void 0===t?void 0:t.clientHeight)&&void 0!==r?r:0;w(function(n){return n===o?n:o}),A(function(n){return n===i?n:i})};n();var e=new ResizeObserver(function(){return n()});return e.observe(y.current),function(){return e.disconnect()}}},[]);var U=T(C,I),V=Q+K,X=s(function(){var n=r.length;if(0===n)return{startRow:0,endRow:-1,topSpacerHeight:0,bottomSpacerHeight:0,startIndex:0,endIndex:-1};var e=Math.ceil(n/U),t=Math.max(1,E),o=P,i=Math.max(0,Math.floor(o/V)-J),a=Math.ceil(t/V),l=Math.min(e-1,i+a+2*J);l===e-1&&(i=Math.max(0,e-a-2*J));var u=i*U,c=Math.min(n-1,(l+1)*U-1);return{startRow:i,endRow:l,topSpacerHeight:i*V,bottomSpacerHeight:Math.max(0,(e-l-1)*V),startIndex:u,endIndex:c}},[U,r.length,J,V,P,E]),Y=X.endIndex>=X.startIndex?r.slice(X.startIndex,X.endIndex+1):[],Z=X.endIndex,$=s(function(){return{display:"grid",gap:"".concat(K,"px"),gridTemplateColumns:"repeat(".concat(U,", minmax(0, 1fr))")}},[U,K]),nn=c(function(){null!==z.current&&(cancelAnimationFrame(z.current),z.current=null)},[]),en=c(function(){N.current||null!==z.current||(z.current=requestAnimationFrame(function(){if(z.current=null,!N.current){var n=Array.from(b.current.entries()).filter(function(n){var e=t(n,1)[0];return e>=X.startIndex&&e<=Z}).map(function(n){return t(n,2)[1]});if(0!==n.length){var e,r=0,i=o(n);try{for(i.s();!(e=i.n()).done;){var a=e.value;r=Math.max(r,a.getBoundingClientRect().height)}}catch(n){i.e(n)}finally{i.f()}r<=0||(N.current=!0,D(Math.round(r)))}}}))},[Z,X.startIndex]),rn=c(function(n,e){e?b.current.set(n,e):b.current.delete(n)},[]);h(function(){var n=Array.from(b.current.entries()).filter(function(n){var e=t(n,1)[0];return e>=X.startIndex&&e<=Z}).map(function(n){return t(n,2)[1]});if(0!==n.length&&!N.current){en();var e,r=new ResizeObserver(function(){en()}),i=o(n);try{for(i.s();!(e=i.n()).done;){var a=e.value;r.observe(a)}}catch(n){i.e(n)}finally{i.f()}return function(){r.disconnect(),nn()}}},[X.startIndex,Z,en,nn]),h(function(){return function(){nn()}},[nn]);var tn=[m.root,m.virtualized];return L&&tn.push(m.scrolling),i(g,{className:tn.filter(Boolean).join(" "),children:a(l,{ref:y,className:m.scrollContainer,onScroll:function(n){var r,t=n.currentTarget;_(Math.round(t.scrollTop)),t.scrollHeight-t.scrollTop-t.clientHeight<=u.nearEndThreshold&&(null===(r=e.onNearEnd)||void 0===r||r.call(e))},children:[X.topSpacerHeight>0?i(l,{sx:{height:X.topSpacerHeight}}):null,i(l,{sx:$,className:m.grid,children:Y.map(function(e,r){var t,o=X.startIndex+r,a=null!==(t=n.getterId(e,o))&&void 0!==t?t:o;return i(l,{className:m.gridItem,ref:N.current?void 0:function(n){return rn(o,n)},sx:null!==W?{minHeight:Q,height:Q}:void 0,children:i(H,{value:e,index:o})},a)})}),X.bottomSpacerHeight>0?i(l,{sx:{height:X.bottomSpacerHeight}}):null]})})}}(e);return function(t){var o,a,l=null!==(o=null!==(a=t.renderStrategy)&&void 0!==a?a:e.renderStrategy)&&void 0!==o?o:"normal";return i("virtualized"===l?I:r,n({},t))}}function S(n){return function(t){var o,a,l,u=c(e(r().m(function n(){var e,o,i,a,l,u,c,s,d;return r().w(function(n){for(;;)switch(n.n){case 0:if("infiniteScroll"===t.loadMode){n.n=1;break}return n.a(2);case 1:if(null!==(e=t.pagination)&&void 0!==e&&e.hasNext){n.n=2;break}return n.a(2);case 2:if(!t.loading){n.n=3;break}return n.a(2);case 3:return c=null!==(o=null===(i=t.pagination)||void 0===i?void 0:i.page)&&void 0!==o?o:0,s=null!==(a=null===(l=t.pagination)||void 0===l?void 0:l.pageSize)&&void 0!==a?a:20,d=c+1,n.n=4,null===(u=t.onPageChange)||void 0===u?void 0:u.call(t,d,s);case 4:return n.a(2)}},n)})),[t.loadMode,null===(o=t.pagination)||void 0===o?void 0:o.hasNext,null===(a=t.pagination)||void 0===a?void 0:a.page,null===(l=t.pagination)||void 0===l?void 0:l.pageSize,t.loading,t.onPageChange]);return i(n,{value:t.value,spacing:t.spacing,sizes:t.sizes,renderStrategy:t.renderStrategy,Component:t.Component,normalOptions:t.normalOptions,virtualizedOptions:t.virtualizedOptions,onNearEnd:"infiniteScroll"===t.loadMode?u:void 0,nearEndThreshold:t.nearEndThreshold,scrollResetToken:t.scrollResetToken})}}export{I as createViewGrid,S as createViewGridLoading,I as default};
1
+ import{objectSpread2 as n,asyncToGenerator as r,regenerator as e,slicedToArray as t,createForOfIteratorHelper as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a,jsxs as i}from"react/jsx-runtime";import{Box as l,Grid as u}from"@mui/material";import{useCallback as c,useMemo as d,useRef as s,useState as v,useEffect as f,useLayoutEffect as h}from"react";import{useMergedConfig as m}from"./hooks.js";import{ViewGridStyled as p,viewGridClasses as g}from"./styleds.js";import{resolveGridSpacing as x,resolveGridColumnsFromWidth as M,DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE as T}from"./helpers.js";function I(r){var e=function(r){return function(e){var o,i=v(!1),c=t(i,2),h=c[0],x=c[1],M=s(null),T=m(e,r),I=T.Component,S=!0===(null===(o=T.normalOptions)||void 0===o?void 0:o.autoHeight),H="client"===e.featureMode,y=d(function(){return e.value},[e.value]);f(function(){H&&!S&&void 0!==e.scrollResetToken&&M.current&&(M.current.scrollTop=0)},[H,S,e.scrollResetToken]);var b=d(function(){var n=[g.root,g.normal];return h&&n.push(g.scrolling),S&&n.push(g.autoHeight),n.join(" ")},[h,S]);return a(p,{className:b,children:a(l,{className:g.scrollContainer,ref:M,onScroll:function(n){var r,t=n.currentTarget;x(t.scrollTop>T.scrollingThreshold),t.scrollHeight-t.scrollTop-t.clientHeight<=T.nearEndThreshold&&(null===(r=e.onNearEnd)||void 0===r||r.call(e))},children:a(u,{container:!0,spacing:"".concat(T.spacing,"px"),className:g.grid,children:y.map(function(e,t){var o,i=null!==(o=r.getterId(e,t))&&void 0!==o?o:t;return a(u,n(n({className:g.gridItem,item:!0},T.sizes),{},{children:a(I,{value:e,index:t})}),i)})})})})}}(r),I=function(n){return function(r){var e=d(function(){return r.value},[r.value]),u=m(r,n),I=u.sizes,S=u.virtualizedOptions,H=u.Component,y=s(null),b=s(new Map),z=s(null),N=s(null),R=s(0),k=s(!1),C=s({startIndex:0,endIndex:-1}),w=s(-1),O=s(0),j=s(!1),A=v(0),E=t(A,2),F=E[0],B=E[1],P=v(0),q=t(P,2),_=q[0],G=q[1],W=v(0),D=t(W,2),J=D[0],K=D[1],L=v(!1),Q=t(L,2),U=Q[0],V=Q[1],X=v(null),Y=t(X,2),Z=Y[0],$=Y[1],nn=Math.max(1,S.overscan),rn=Math.round(x(u.spacing)),en=null!=Z?Z:T;f(function(){"client"===r.featureMode&&void 0!==r.scrollResetToken&&(null!==N.current&&(cancelAnimationFrame(N.current),N.current=null),y.current&&(y.current.scrollTop=0),R.current=0,O.current=0,K(0),k.current&&(k.current=!1,V(!1)))},[r.featureMode,r.scrollResetToken]),h(function(){if(y.current){var n=function(){var n,r,e,t,o=null!==(n=null===(r=y.current)||void 0===r?void 0:r.clientWidth)&&void 0!==n?n:0,a=null!==(e=null===(t=y.current)||void 0===t?void 0:t.clientHeight)&&void 0!==e?e:0;B(function(n){return n===o?n:o}),G(function(n){return n===a?n:a})};n();var r=new ResizeObserver(function(){return n()});return r.observe(y.current),function(){return r.disconnect()}}},[]);var tn=M(F,I),on=en+rn,an=s(on);an.current=on;var ln=s(nn);ln.current=nn;var un=d(function(){var n=e.length;if(0===n)return{startRow:0,endRow:-1,topSpacerHeight:0,bottomSpacerHeight:0,startIndex:0,endIndex:-1};var r=Math.ceil(n/tn),t=Math.max(1,_),o=J,a=Math.max(0,Math.floor(o/on)-nn),i=Math.ceil(t/on),l=Math.min(r-1,a+i+2*nn),u=a*tn,c=Math.min(n-1,(l+1)*tn-1);return{startRow:a,endRow:l,topSpacerHeight:a*on,bottomSpacerHeight:Math.max(0,(r-l-1)*on),startIndex:u,endIndex:c}},[tn,e.length,nn,on,J,_]);C.current=un,w.current=un.endIndex;var cn=d(function(){return un.endIndex>=un.startIndex?e.slice(un.startIndex,un.endIndex+1):[]},[e,un.startIndex,un.endIndex]),dn=un.endIndex,sn=d(function(){return{display:"grid",gap:"".concat(rn,"px"),gridTemplateColumns:"repeat(".concat(tn,", minmax(0, 1fr))")}},[tn,rn]),vn=d(function(){return null!==Z?{minHeight:en,height:en}:void 0},[Z,en]),fn=c(function(){null!==z.current&&(cancelAnimationFrame(z.current),z.current=null)},[]),hn=c(function(){j.current||null!==z.current||(z.current=requestAnimationFrame(function(){if(z.current=null,!j.current){var n=C.current.startIndex,r=w.current,e=Array.from(b.current.entries()).filter(function(e){var o=t(e,1)[0];return o>=n&&o<=r}).map(function(n){return t(n,2)[1]});if(0!==e.length){var a,i=0,l=o(e);try{for(l.s();!(a=l.n()).done;){var u=a.value;i=Math.max(i,u.getBoundingClientRect().height)}}catch(n){l.e(n)}finally{l.f()}i<=0||(j.current=!0,$(Math.round(i)))}}}))},[]),mn=c(function(n,r){r?b.current.set(n,r):b.current.delete(n)},[]);h(function(){if(!j.current){var n=Array.from(b.current.entries()).filter(function(n){var r=t(n,1)[0];return r>=un.startIndex&&r<=dn}).map(function(n){return t(n,2)[1]});if(0!==n.length){hn();var r,e=new ResizeObserver(function(){hn()}),a=o(n);try{for(a.s();!(r=a.n()).done;){var i=r.value;e.observe(i)}}catch(n){a.e(n)}finally{a.f()}return function(){e.disconnect(),fn()}}}},[un.startIndex,dn,hn,fn]),h(function(){return function(){fn()}},[fn]),f(function(){return function(){null!==N.current&&(cancelAnimationFrame(N.current),N.current=null)}},[]);var pn=[g.root,g.virtualized];return U&&pn.push(g.scrolling),a(p,{className:pn.filter(Boolean).join(" "),children:i(l,{ref:y,className:g.scrollContainer,onScroll:function(n){var e,t=n.currentTarget,o=Math.round(t.scrollTop);R.current=o,t.scrollHeight-t.scrollTop-t.clientHeight<=u.nearEndThreshold&&(null===(e=r.onNearEnd)||void 0===e||e.call(r)),null===N.current&&(N.current=requestAnimationFrame(function(){var n,r;N.current=null;var e=Math.round(null!==(n=null===(r=y.current)||void 0===r?void 0:r.scrollTop)&&void 0!==n?n:R.current);R.current=e;var t=e>u.scrollingThreshold;t!==k.current&&(k.current=t,V(t));var o=Math.max(0,Math.floor(O.current/an.current)-ln.current);Math.max(0,Math.floor(e/an.current)-ln.current)!==o&&(O.current=e,K(e))}))},children:[un.topSpacerHeight>0?a(l,{sx:{height:un.topSpacerHeight}}):null,a(l,{sx:sn,className:g.grid,children:cn.map(function(r,e){var t,o=un.startIndex+e,i=null!==(t=n.getterId(r,o))&&void 0!==t?t:o;return a(l,{className:g.gridItem,ref:j.current?void 0:function(n){return mn(o,n)},sx:vn,children:a(H,{value:r,index:o})},i)})}),un.bottomSpacerHeight>0?a(l,{sx:{height:un.bottomSpacerHeight}}):null]})})}}(r);return function(t){var o,i,l=null!==(o=null!==(i=t.renderStrategy)&&void 0!==i?i:r.renderStrategy)&&void 0!==o?o:"normal";return a("virtualized"===l?I:e,n({},t))}}function S(n){return function(t){var o,i,l,u=c(r(e().m(function n(){var r,o,a,i,l,u,c,d,s;return e().w(function(n){for(;;)switch(n.n){case 0:if("infiniteScroll"===t.loadMode){n.n=1;break}return n.a(2);case 1:if(null!==(r=t.pagination)&&void 0!==r&&r.hasNext){n.n=2;break}return n.a(2);case 2:if(!t.loading){n.n=3;break}return n.a(2);case 3:return c=null!==(o=null===(a=t.pagination)||void 0===a?void 0:a.page)&&void 0!==o?o:0,d=null!==(i=null===(l=t.pagination)||void 0===l?void 0:l.pageSize)&&void 0!==i?i:20,s=c+1,n.n=4,null===(u=t.onPageChange)||void 0===u?void 0:u.call(t,s,d);case 4:return n.a(2)}},n)})),[t.loadMode,null===(o=t.pagination)||void 0===o?void 0:o.hasNext,null===(i=t.pagination)||void 0===i?void 0:i.page,null===(l=t.pagination)||void 0===l?void 0:l.pageSize,t.loading,t.onPageChange]);return a(n,{value:t.value,spacing:t.spacing,sizes:t.sizes,renderStrategy:t.renderStrategy,Component:t.Component,normalOptions:t.normalOptions,virtualizedOptions:t.virtualizedOptions,onNearEnd:"infiniteScroll"===t.loadMode?u:void 0,nearEndThreshold:t.nearEndThreshold,scrollResetToken:t.scrollResetToken})}}export{I as createViewGrid,S as createViewGridLoading,I as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/data-surface/view-grid/index.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Box, Grid } from '@mui/material'\r\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\r\nimport { useMergedConfig } from './hooks'\r\nimport { ViewGridStyled, viewGridClasses as classes } from './styleds'\r\nimport { DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE, resolveGridColumnsFromWidth, resolveGridSpacing } from './helpers'\r\n// types\r\nimport type { BoxProps } from '@mui/material'\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { LoadingModeRule, TPagination } from '../types'\r\nimport type { IViewGridConfig, IViewGridProps } from './types'\r\n// re-exports\r\nexport * from './types'\r\n\r\n//#region Normal\r\n/**\r\n * Creates a Grid view component that renders all items in the DOM. Suitable for small datasets.\r\n * @param config - The configuration object for the grid view, containing default settings and required properties.\r\n * @returns A React functional component that renders a grid view based on the provided configuration and props.\r\n */\r\nfunction createViewGridNormal<T>(config: IViewGridConfig<T>) {\r\n const ViewGridNormal: FC<IViewGridProps<T>> = (props) => {\r\n const [isScrolling, setIsScrolling] = useState(false)\r\n const scrollContainerRef = useRef<HTMLDivElement | null>(null)\r\n\r\n const mergedConfig = useMergedConfig<T>(props, config)\r\n const ItemComponent = mergedConfig.Component\r\n const isAutoHeight = mergedConfig.normalOptions?.autoHeight === true\r\n const isClient = props.featureMode === 'client'\r\n const finalItems = useMemo(() => props.value, [props.value])\r\n\r\n // Reset scroll to top when token changes (client-side filter reset)\r\n useEffect(() => {\r\n if (!isClient || isAutoHeight || props.scrollResetToken === undefined) return\r\n if (scrollContainerRef.current) scrollContainerRef.current.scrollTop = 0\r\n }, [isClient, isAutoHeight, props.scrollResetToken])\r\n\r\n const handleScroll: BoxProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n setIsScrolling(t.scrollTop > mergedConfig.scrollingThreshold)\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n const rootClasses = useMemo(() => {\r\n const l = [classes.root, classes.normal]\r\n if (isScrolling) l.push(classes.scrolling)\r\n if (isAutoHeight) l.push(classes.autoHeight)\r\n return l.join(' ')\r\n }, [isScrolling, isAutoHeight])\r\n\r\n return (\r\n <ViewGridStyled className={rootClasses}>\r\n <Box className={classes.scrollContainer} ref={scrollContainerRef} onScroll={handleScroll}>\r\n <Grid container spacing={`${mergedConfig.spacing}px`} className={classes.grid}>\r\n {finalItems.map((item, index) => {\r\n const key = config.getterId(item, index) ?? index\r\n return (\r\n <Grid key={key} className={classes.gridItem} item {...mergedConfig.sizes}>\r\n <ItemComponent value={item} index={index} />\r\n </Grid>\r\n )\r\n })}\r\n </Grid>\r\n </Box>\r\n </ViewGridStyled>\r\n )\r\n }\r\n return ViewGridNormal\r\n}\r\n//#endregion\r\n//#region Virtualized\r\n/**\r\n * Creates a Grid view component that virtualizes items, rendering only those visible in the viewport. Suitable for large datasets.\r\n * @param config - The configuration object for the grid view, containing default settings and required properties.\r\n * @returns A React functional component that renders a virtualized grid view based on the provided configuration and props.\r\n */\r\nfunction createViewGridVirtualized<T>(config: IViewGridConfig<T>) {\r\n const ViewGridVirtualized: FC<IViewGridProps<T>> = (props) => {\r\n const finalItems = useMemo(() => props.value, [props.value])\r\n\r\n const mergedConfig = useMergedConfig<T>(props, config)\r\n const { sizes, virtualizedOptions } = mergedConfig\r\n const ItemComponent = mergedConfig.Component\r\n\r\n // Track container geometry and the first measured item height used for virtualization math.\r\n const wrapRef = useRef<HTMLDivElement | null>(null)\r\n const measuredItemsRef = useRef(new Map<number, HTMLDivElement>())\r\n const measurementRafRef = useRef<number | null>(null)\r\n const hasMeasuredDatasetRef = useRef(false)\r\n const [containerWidth, setContainerWidth] = useState(0)\r\n const [containerHeight, setContainerHeight] = useState(0)\r\n const [scrollTopState, setScrollTopState] = useState(0)\r\n const [measuredItemHeight, setMeasuredItemHeight] = useState<number | null>(null)\r\n\r\n const overscan = Math.max(1, virtualizedOptions.overscan)\r\n const spacingPx = Math.round(resolveGridSpacing(mergedConfig.spacing))\r\n const isScrolling = scrollTopState > mergedConfig.scrollingThreshold\r\n const effectiveItemHeight = measuredItemHeight ?? DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE\r\n\r\n // Reset scroll to top when token changes (client-side filter reset)\r\n useEffect(() => {\r\n if (props.featureMode !== 'client' || props.scrollResetToken === undefined) return\r\n if (wrapRef.current) wrapRef.current.scrollTop = 0\r\n setScrollTopState(0)\r\n }, [props.featureMode, props.scrollResetToken])\r\n\r\n // Keep viewport dimensions in sync so column count and window size react to container resize.\r\n useLayoutEffect(() => {\r\n if (!wrapRef.current) return\r\n\r\n const updateSize = () => {\r\n const nextWidth = wrapRef.current?.clientWidth ?? 0\r\n const nextHeight = wrapRef.current?.clientHeight ?? 0\r\n setContainerWidth((prev) => (prev === nextWidth ? prev : nextWidth))\r\n setContainerHeight((prev) => (prev === nextHeight ? prev : nextHeight))\r\n }\r\n\r\n updateSize()\r\n\r\n const observer = new ResizeObserver(() => updateSize())\r\n observer.observe(wrapRef.current)\r\n return () => observer.disconnect()\r\n }, [])\r\n\r\n const columns = resolveGridColumnsFromWidth(containerWidth, sizes)\r\n const rowHeight = effectiveItemHeight + spacingPx\r\n\r\n // Convert scroll position into a virtual row window plus spacer heights above and below.\r\n const windowed = useMemo(() => {\r\n const totalItems = finalItems.length\r\n if (totalItems === 0) {\r\n return { startRow: 0, endRow: -1, topSpacerHeight: 0, bottomSpacerHeight: 0, startIndex: 0, endIndex: -1 }\r\n }\r\n\r\n const totalRows = Math.ceil(totalItems / columns)\r\n const safeViewportHeight = Math.max(1, containerHeight)\r\n const effectiveScrollTop = scrollTopState\r\n let startRow = Math.max(0, Math.floor(effectiveScrollTop / rowHeight) - overscan)\r\n const visibleRows = Math.ceil(safeViewportHeight / rowHeight)\r\n let endRow = Math.min(totalRows - 1, startRow + visibleRows + overscan * 2)\r\n // When clamped at the bottom, pin startRow to a fixed value so that topSpacerHeight\r\n // does not change with small scrollTop fluctuations (sub-pixel zoom oscillation fix).\r\n if (endRow === totalRows - 1) {\r\n startRow = Math.max(0, totalRows - visibleRows - overscan * 2)\r\n }\r\n const startIndex = startRow * columns\r\n const endIndex = Math.min(totalItems - 1, (endRow + 1) * columns - 1)\r\n const topSpacerHeight = startRow * rowHeight\r\n const bottomSpacerHeight = Math.max(0, (totalRows - endRow - 1) * rowHeight)\r\n\r\n return { startRow, endRow, topSpacerHeight, bottomSpacerHeight, startIndex, endIndex }\r\n }, [columns, finalItems.length, overscan, rowHeight, scrollTopState, containerHeight])\r\n\r\n const visibleItems = windowed.endIndex >= windowed.startIndex ? finalItems.slice(windowed.startIndex, windowed.endIndex + 1) : []\r\n const measurementEndIndex = windowed.endIndex\r\n const contentSx = useMemo<BoxProps['sx']>(() => {\r\n return {\r\n display: 'grid',\r\n gap: `${spacingPx}px`,\r\n gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`\r\n }\r\n }, [columns, spacingPx])\r\n\r\n const handleScroll: BoxProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n setScrollTopState(Math.round(t.scrollTop))\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n const cancelScheduledMeasurement = useCallback(() => {\r\n if (measurementRafRef.current === null) return\r\n cancelAnimationFrame(measurementRafRef.current)\r\n measurementRafRef.current = null\r\n }, [])\r\n\r\n // Measure the largest item in the first rendered window once, then reuse it permanently.\r\n const scheduleMeasuredHeightUpdate = useCallback(() => {\r\n if (hasMeasuredDatasetRef.current || measurementRafRef.current !== null) return\r\n\r\n measurementRafRef.current = requestAnimationFrame(() => {\r\n measurementRafRef.current = null\r\n if (hasMeasuredDatasetRef.current) return\r\n\r\n const elements = Array.from(measuredItemsRef.current.entries())\r\n .filter(([index]) => index >= windowed.startIndex && index <= measurementEndIndex)\r\n .map(([, element]) => element)\r\n\r\n if (elements.length === 0) return\r\n\r\n let nextHeight = 0\r\n for (const element of elements) {\r\n nextHeight = Math.max(nextHeight, element.getBoundingClientRect().height)\r\n }\r\n\r\n if (nextHeight <= 0) return\r\n\r\n hasMeasuredDatasetRef.current = true\r\n setMeasuredItemHeight(Math.round(nextHeight))\r\n })\r\n }, [measurementEndIndex, windowed.startIndex])\r\n\r\n const setMeasuredItemRef = useCallback((index: number, node: HTMLDivElement | null) => {\r\n if (node) {\r\n measuredItemsRef.current.set(index, node)\r\n return\r\n }\r\n\r\n measuredItemsRef.current.delete(index)\r\n }, [])\r\n\r\n useLayoutEffect(() => {\r\n const elements = Array.from(measuredItemsRef.current.entries())\r\n .filter(([index]) => index >= windowed.startIndex && index <= measurementEndIndex)\r\n .map(([, element]) => element)\r\n\r\n if (elements.length === 0 || hasMeasuredDatasetRef.current) return\r\n\r\n scheduleMeasuredHeightUpdate()\r\n\r\n const observer = new ResizeObserver(() => {\r\n scheduleMeasuredHeightUpdate()\r\n })\r\n\r\n for (const element of elements) {\r\n observer.observe(element)\r\n }\r\n\r\n return () => {\r\n observer.disconnect()\r\n cancelScheduledMeasurement()\r\n }\r\n }, [windowed.startIndex, measurementEndIndex, scheduleMeasuredHeightUpdate, cancelScheduledMeasurement])\r\n\r\n useLayoutEffect(() => {\r\n return () => {\r\n cancelScheduledMeasurement()\r\n }\r\n }, [cancelScheduledMeasurement])\r\n\r\n const rootClasses = [classes.root, classes.virtualized]\r\n if (isScrolling) rootClasses.push(classes.scrolling)\r\n return (\r\n <ViewGridStyled className={rootClasses.filter(Boolean).join(' ')}>\r\n <Box ref={wrapRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n {/* Spacer keeps total scroll height stable for rows rendered before the current window. */}\r\n {windowed.topSpacerHeight > 0 ? <Box sx={{ height: windowed.topSpacerHeight }} /> : null}\r\n\r\n <Box sx={contentSx} className={classes.grid}>\r\n {visibleItems.map((item, offset) => {\r\n const index = windowed.startIndex + offset\r\n const key = config.getterId(item, index) ?? index\r\n return (\r\n <Box\r\n key={key}\r\n className={classes.gridItem}\r\n ref={!hasMeasuredDatasetRef.current ? (node) => setMeasuredItemRef(index, node as HTMLDivElement | null) : undefined}\r\n sx={measuredItemHeight !== null ? { minHeight: effectiveItemHeight, height: effectiveItemHeight } : undefined}\r\n >\r\n <ItemComponent value={item} index={index} />\r\n </Box>\r\n )\r\n })}\r\n </Box>\r\n\r\n {/* Spacer keeps total scroll height stable for rows rendered after the current window. */}\r\n {windowed.bottomSpacerHeight > 0 ? <Box sx={{ height: windowed.bottomSpacerHeight }} /> : null}\r\n </Box>\r\n </ViewGridStyled>\r\n )\r\n }\r\n return ViewGridVirtualized\r\n}\r\n//#endregion\r\n//#region Main\r\n/**\r\n * Factory function to create a Grid view component that can switch between normal and virtualized rendering strategies based on props and configuration.\r\n * @param config - The configuration object for the grid view, containing default settings and required properties.\r\n * @returns A React functional component that renders a grid view based on the provided configuration and props, supporting both normal and virtualized rendering strategies.\r\n */\r\nexport function createViewGrid<T>(config: IViewGridConfig<T>) {\r\n const ViewGridNormal = createViewGridNormal<T>(config)\r\n const ViewGridVirtualized = createViewGridVirtualized<T>(config)\r\n\r\n const ViewGrid: FC<IViewGridProps<T>> = (props) => {\r\n const renderStrategy = props.renderStrategy ?? config.renderStrategy ?? 'normal'\r\n if (renderStrategy === 'virtualized') {\r\n return <ViewGridVirtualized {...props} />\r\n }\r\n return <ViewGridNormal {...props} />\r\n }\r\n return ViewGrid\r\n}\r\n\r\nexport interface IViewGridLoadingProps<T> extends IViewGridProps<T> {\r\n value: T[]\r\n loadMode: LoadingModeRule\r\n loading?: boolean\r\n pagination?: TPagination\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n}\r\n\r\nexport function createViewGridLoading<T>(GridComponent: ComponentType<IViewGridProps<T>>) {\r\n const ViewGridLoading: FC<IViewGridLoadingProps<T>> = (props) => {\r\n const handleNearEnd = useCallback(async () => {\r\n if (props.loadMode !== 'infiniteScroll') return\r\n if (!props.pagination?.hasNext) return\r\n if (props.loading) return\r\n\r\n const currentPage = props.pagination?.page ?? 0\r\n const currentPageSize = props.pagination?.pageSize ?? 20\r\n const nextPage = currentPage + 1\r\n await props.onPageChange?.(nextPage, currentPageSize)\r\n }, [props.loadMode, props.pagination?.hasNext, props.pagination?.page, props.pagination?.pageSize, props.loading, props.onPageChange])\r\n\r\n return (\r\n <GridComponent\r\n value={props.value}\r\n spacing={props.spacing}\r\n sizes={props.sizes}\r\n renderStrategy={props.renderStrategy}\r\n Component={props.Component}\r\n normalOptions={props.normalOptions}\r\n virtualizedOptions={props.virtualizedOptions}\r\n onNearEnd={props.loadMode === 'infiniteScroll' ? handleNearEnd : undefined}\r\n nearEndThreshold={props.nearEndThreshold}\r\n scrollResetToken={props.scrollResetToken}\r\n />\r\n )\r\n }\r\n\r\n return ViewGridLoading\r\n}\r\n\r\nexport default createViewGrid\r\n//#endregion\r\n"],"names":["createViewGrid","config","ViewGridNormal","props","_mergedConfig$normalO","_useState","useState","_useState2","_slicedToArray","isScrolling","setIsScrolling","scrollContainerRef","useRef","mergedConfig","useMergedConfig","ItemComponent","Component","isAutoHeight","normalOptions","autoHeight","isClient","featureMode","finalItems","useMemo","value","useEffect","undefined","scrollResetToken","current","scrollTop","rootClasses","l","classes","root","normal","push","scrolling","join","_jsx","ViewGridStyled","className","children","Box","scrollContainer","ref","onScroll","e","_props$onNearEnd","t","currentTarget","scrollingThreshold","scrollHeight","clientHeight","nearEndThreshold","onNearEnd","call","Grid","container","spacing","concat","grid","map","item","index","_config$getterId","key","getterId","_objectSpread","gridItem","sizes","createViewGridNormal","ViewGridVirtualized","virtualizedOptions","wrapRef","measuredItemsRef","Map","measurementRafRef","hasMeasuredDatasetRef","_useState3","_useState4","containerWidth","setContainerWidth","_useState5","_useState6","containerHeight","setContainerHeight","_useState7","_useState8","scrollTopState","setScrollTopState","_useState9","_useState0","measuredItemHeight","setMeasuredItemHeight","overscan","Math","max","spacingPx","round","resolveGridSpacing","effectiveItemHeight","DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE","useLayoutEffect","updateSize","_wrapRef$current$clie","_wrapRef$current","_wrapRef$current$clie2","_wrapRef$current2","nextWidth","clientWidth","nextHeight","prev","observer","ResizeObserver","observe","disconnect","columns","resolveGridColumnsFromWidth","rowHeight","windowed","totalItems","length","startRow","endRow","topSpacerHeight","bottomSpacerHeight","startIndex","endIndex","totalRows","ceil","safeViewportHeight","effectiveScrollTop","floor","visibleRows","min","visibleItems","slice","measurementEndIndex","contentSx","display","gap","gridTemplateColumns","cancelScheduledMeasurement","useCallback","cancelAnimationFrame","scheduleMeasuredHeightUpdate","requestAnimationFrame","elements","Array","from","entries","filter","_ref","_ref3","_step","_iterator","_createForOfIteratorHelper","s","n","done","element","getBoundingClientRect","height","err","f","setMeasuredItemRef","node","set","_ref5","_ref7","_step2","_iterator2","virtualized","Boolean","_jsxs","_props$onNearEnd2","sx","offset","_config$getterId2","minHeight","createViewGridVirtualized","_ref9","_props$renderStrategy","renderStrategy","createViewGridLoading","GridComponent","_props$pagination4","_props$pagination5","_props$pagination6","handleNearEnd","_asyncToGenerator","_regenerator","m","_callee","_props$pagination","_props$pagination$pag","_props$pagination2","_props$pagination$pag2","_props$pagination3","_props$onPageChange","currentPage","currentPageSize","nextPage","w","_context","loadMode","a","pagination","hasNext","loading","page","pageSize","onPageChange"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/data-surface/view-grid/index.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Box, Grid } from '@mui/material'\r\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\r\nimport { useMergedConfig } from './hooks'\r\nimport { ViewGridStyled, viewGridClasses as classes } from './styleds'\r\nimport { DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE, resolveGridColumnsFromWidth, resolveGridSpacing } from './helpers'\r\n// types\r\nimport type { BoxProps } from '@mui/material'\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { LoadingModeRule, TPagination } from '../types'\r\nimport type { IViewGridConfig, IViewGridProps } from './types'\r\n// re-exports\r\nexport * from './types'\r\n\r\n//#region Normal\r\n/**\r\n * Creates a Grid view component that renders all items in the DOM. Suitable for small datasets.\r\n * @param config - The configuration object for the grid view, containing default settings and required properties.\r\n * @returns A React functional component that renders a grid view based on the provided configuration and props.\r\n */\r\nfunction createViewGridNormal<T>(config: IViewGridConfig<T>) {\r\n const ViewGridNormal: FC<IViewGridProps<T>> = (props) => {\r\n const [isScrolling, setIsScrolling] = useState(false)\r\n const scrollContainerRef = useRef<HTMLDivElement | null>(null)\r\n\r\n const mergedConfig = useMergedConfig<T>(props, config)\r\n const ItemComponent = mergedConfig.Component\r\n const isAutoHeight = mergedConfig.normalOptions?.autoHeight === true\r\n const isClient = props.featureMode === 'client'\r\n const finalItems = useMemo(() => props.value, [props.value])\r\n\r\n // Reset scroll to top when token changes (client-side filter reset)\r\n useEffect(() => {\r\n if (!isClient || isAutoHeight || props.scrollResetToken === undefined) return\r\n if (scrollContainerRef.current) scrollContainerRef.current.scrollTop = 0\r\n }, [isClient, isAutoHeight, props.scrollResetToken])\r\n\r\n const handleScroll: BoxProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n setIsScrolling(t.scrollTop > mergedConfig.scrollingThreshold)\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n const rootClasses = useMemo(() => {\r\n const l = [classes.root, classes.normal]\r\n if (isScrolling) l.push(classes.scrolling)\r\n if (isAutoHeight) l.push(classes.autoHeight)\r\n return l.join(' ')\r\n }, [isScrolling, isAutoHeight])\r\n\r\n return (\r\n <ViewGridStyled className={rootClasses}>\r\n <Box className={classes.scrollContainer} ref={scrollContainerRef} onScroll={handleScroll}>\r\n <Grid container spacing={`${mergedConfig.spacing}px`} className={classes.grid}>\r\n {finalItems.map((item, index) => {\r\n const key = config.getterId(item, index) ?? index\r\n return (\r\n <Grid key={key} className={classes.gridItem} item {...mergedConfig.sizes}>\r\n <ItemComponent value={item} index={index} />\r\n </Grid>\r\n )\r\n })}\r\n </Grid>\r\n </Box>\r\n </ViewGridStyled>\r\n )\r\n }\r\n return ViewGridNormal\r\n}\r\n//#endregion\r\n//#region Virtualized\r\n/**\r\n * Creates a Grid view component that virtualizes items, rendering only those visible in the viewport. Suitable for large datasets.\r\n * @param config - The configuration object for the grid view, containing default settings and required properties.\r\n * @returns A React functional component that renders a virtualized grid view based on the provided configuration and props.\r\n */\r\nfunction createViewGridVirtualized<T>(config: IViewGridConfig<T>) {\r\n const ViewGridVirtualized: FC<IViewGridProps<T>> = (props) => {\r\n const finalItems = useMemo(() => props.value, [props.value])\r\n\r\n const mergedConfig = useMergedConfig<T>(props, config)\r\n const { sizes, virtualizedOptions } = mergedConfig\r\n const ItemComponent = mergedConfig.Component\r\n\r\n // Track container geometry and the first measured item height used for virtualization math.\r\n const wrapRef = useRef<HTMLDivElement | null>(null)\r\n const measuredItemsRef = useRef(new Map<number, HTMLDivElement>())\r\n const measurementRafRef = useRef<number | null>(null)\r\n // Refs for RAF-throttled scroll: scrollRafRef guards duplicate frames, latestScrollTopRef\r\n // always holds the most recent scrollTop so the RAF reads the freshest value even if\r\n // intermediate scroll events were skipped.\r\n const scrollRafRef = useRef<number | null>(null)\r\n const latestScrollTopRef = useRef(0)\r\n const isScrollingRef = useRef(false)\r\n // windowedRef / measurementEndIndexRef let scheduleMeasuredHeightUpdate read the current\r\n // window without capturing it in a closure, so the callback never needs to be recreated.\r\n const windowedRef = useRef({ startIndex: 0, endIndex: -1 })\r\n const measurementEndIndexRef = useRef(-1)\r\n // lastFiredScrollTopRef tracks the DOM scrollTop at the last actual setScrollTopState call.\r\n // The skip check compares both sides in DOM-coordinate space so non-scroll renders (e.g.\r\n // after measurement) cannot reset the reference point into a stale state-coordinate value.\r\n const lastFiredScrollTopRef = useRef(0)\r\n const hasMeasuredDatasetRef = useRef(false)\r\n const [containerWidth, setContainerWidth] = useState(0)\r\n const [containerHeight, setContainerHeight] = useState(0)\r\n const [scrollTopState, setScrollTopState] = useState(0)\r\n const [isScrolling, setIsScrolling] = useState(false)\r\n const [measuredItemHeight, setMeasuredItemHeight] = useState<number | null>(null)\r\n\r\n const overscan = Math.max(1, virtualizedOptions.overscan)\r\n const spacingPx = Math.round(resolveGridSpacing(mergedConfig.spacing))\r\n const effectiveItemHeight = measuredItemHeight ?? DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE\r\n\r\n // Reset scroll to top when token changes (client-side filter reset)\r\n useEffect(() => {\r\n if (props.featureMode !== 'client' || props.scrollResetToken === undefined) return\r\n // Cancel any pending scroll RAF before resetting so it cannot overwrite the reset state.\r\n if (scrollRafRef.current !== null) {\r\n cancelAnimationFrame(scrollRafRef.current)\r\n scrollRafRef.current = null\r\n }\r\n if (wrapRef.current) wrapRef.current.scrollTop = 0\r\n latestScrollTopRef.current = 0\r\n lastFiredScrollTopRef.current = 0\r\n setScrollTopState(0)\r\n if (isScrollingRef.current) {\r\n isScrollingRef.current = false\r\n setIsScrolling(false)\r\n }\r\n }, [props.featureMode, props.scrollResetToken])\r\n\r\n // Keep viewport dimensions in sync so column count and window size react to container resize.\r\n useLayoutEffect(() => {\r\n if (!wrapRef.current) return\r\n\r\n const updateSize = () => {\r\n const nextWidth = wrapRef.current?.clientWidth ?? 0\r\n const nextHeight = wrapRef.current?.clientHeight ?? 0\r\n setContainerWidth((prev) => (prev === nextWidth ? prev : nextWidth))\r\n setContainerHeight((prev) => (prev === nextHeight ? prev : nextHeight))\r\n }\r\n\r\n updateSize()\r\n\r\n const observer = new ResizeObserver(() => updateSize())\r\n observer.observe(wrapRef.current)\r\n return () => observer.disconnect()\r\n }, [])\r\n\r\n const columns = resolveGridColumnsFromWidth(containerWidth, sizes)\r\n const rowHeight = effectiveItemHeight + spacingPx\r\n // Refs for window-change detection — updated on every render so the handleScroll RAF reads fresh values\r\n // without needing to re-create the callback. The initial value is overwritten immediately on first render.\r\n const rowHeightRef = useRef(rowHeight)\r\n rowHeightRef.current = rowHeight\r\n const overscanRef = useRef(overscan)\r\n overscanRef.current = overscan\r\n\r\n // Convert scroll position into a virtual row window plus spacer heights above and below.\r\n const windowed = useMemo(() => {\r\n const totalItems = finalItems.length\r\n if (totalItems === 0) {\r\n return { startRow: 0, endRow: -1, topSpacerHeight: 0, bottomSpacerHeight: 0, startIndex: 0, endIndex: -1 }\r\n }\r\n\r\n const totalRows = Math.ceil(totalItems / columns)\r\n const safeViewportHeight = Math.max(1, containerHeight)\r\n const effectiveScrollTop = scrollTopState\r\n let startRow = Math.max(0, Math.floor(effectiveScrollTop / rowHeight) - overscan)\r\n const visibleRows = Math.ceil(safeViewportHeight / rowHeight)\r\n let endRow = Math.min(totalRows - 1, startRow + visibleRows + overscan * 2)\r\n // NOTE: The bottom-clamp that previously pinned startRow when endRow===totalRows-1\r\n // has been removed. That clamp decoupled startRow from scrollTopState, causing a\r\n // visual jump when loadMore added items (clamp released → startRow changed even\r\n // though scrollTopState was unchanged). Total virtual height equals totalRows*rowHeight\r\n // regardless of startRow, so there is no oscillation feedback loop without the clamp.\r\n const startIndex = startRow * columns\r\n const endIndex = Math.min(totalItems - 1, (endRow + 1) * columns - 1)\r\n const topSpacerHeight = startRow * rowHeight\r\n const bottomSpacerHeight = Math.max(0, (totalRows - endRow - 1) * rowHeight)\r\n\r\n return { startRow, endRow, topSpacerHeight, bottomSpacerHeight, startIndex, endIndex }\r\n }, [columns, finalItems.length, overscan, rowHeight, scrollTopState, containerHeight])\r\n\r\n // Keep refs in sync so RAF callbacks and scheduleMeasuredHeightUpdate read the current\r\n // window without capturing it in a closure (avoids recreating those callbacks on scroll).\r\n windowedRef.current = windowed\r\n measurementEndIndexRef.current = windowed.endIndex\r\n\r\n const visibleItems = useMemo(\r\n () => (windowed.endIndex >= windowed.startIndex ? finalItems.slice(windowed.startIndex, windowed.endIndex + 1) : []),\r\n [finalItems, windowed.startIndex, windowed.endIndex]\r\n )\r\n const measurementEndIndex = windowed.endIndex\r\n const contentSx = useMemo<BoxProps['sx']>(() => {\r\n return {\r\n display: 'grid',\r\n gap: `${spacingPx}px`,\r\n gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`\r\n }\r\n }, [columns, spacingPx])\r\n\r\n // Memoize the item-height sx object so MUI doesn't re-process styles on every render.\r\n const gridItemSx = useMemo<BoxProps['sx']>(\r\n () => (measuredItemHeight !== null ? { minHeight: effectiveItemHeight, height: effectiveItemHeight } : undefined),\r\n [measuredItemHeight, effectiveItemHeight]\r\n )\r\n\r\n const handleScroll: BoxProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n const newScrollTop = Math.round(t.scrollTop)\r\n latestScrollTopRef.current = newScrollTop\r\n\r\n // nearEnd check is urgent — fire immediately outside RAF\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n\r\n // Throttle virtualization state updates to one per animation frame.\r\n // Multiple scroll events in the same frame are collapsed into one RAF.\r\n if (scrollRafRef.current !== null) return\r\n scrollRafRef.current = requestAnimationFrame(() => {\r\n scrollRafRef.current = null\r\n // Always read the real DOM scrollTop inside the RAF — do NOT rely on latestScrollTopRef.\r\n // latestScrollTopRef can be stale if browser scroll-anchoring silently adjusts scrollTop\r\n // (e.g. when bottomSpacer grows after loadMore) without firing a new scroll event.\r\n const domScrollTop = Math.round(wrapRef.current?.scrollTop ?? latestScrollTopRef.current)\r\n latestScrollTopRef.current = domScrollTop\r\n\r\n // Only setState for isScrolling when the boolean value actually flips.\r\n const nextIsScrolling = domScrollTop > mergedConfig.scrollingThreshold\r\n if (nextIsScrolling !== isScrollingRef.current) {\r\n isScrollingRef.current = nextIsScrolling\r\n setIsScrolling(nextIsScrolling)\r\n }\r\n\r\n // Skip scroll state update if the virtual window (startRow) wouldn't change.\r\n // Both sides are computed from DOM-coordinate values (lastFiredScrollTopRef and domScrollTop)\r\n // so non-scroll renders (e.g. after measurement) cannot reset the dead zone into a stale state.\r\n const lastFiredStartRow = Math.max(0, Math.floor(lastFiredScrollTopRef.current / rowHeightRef.current) - overscanRef.current)\r\n const newStartRow = Math.max(0, Math.floor(domScrollTop / rowHeightRef.current) - overscanRef.current)\r\n if (newStartRow === lastFiredStartRow) return\r\n\r\n lastFiredScrollTopRef.current = domScrollTop\r\n setScrollTopState(domScrollTop)\r\n })\r\n }\r\n\r\n const cancelScheduledMeasurement = useCallback(() => {\r\n if (measurementRafRef.current === null) return\r\n cancelAnimationFrame(measurementRafRef.current)\r\n measurementRafRef.current = null\r\n }, [])\r\n\r\n // Measure the largest item in the first rendered window once, then reuse it permanently.\r\n // Reads windowed bounds from refs so this callback is stable (deps=[]) and never recreated.\r\n const scheduleMeasuredHeightUpdate = useCallback(() => {\r\n if (hasMeasuredDatasetRef.current || measurementRafRef.current !== null) return\r\n\r\n measurementRafRef.current = requestAnimationFrame(() => {\r\n measurementRafRef.current = null\r\n if (hasMeasuredDatasetRef.current) return\r\n\r\n const { startIndex } = windowedRef.current\r\n const endIndex = measurementEndIndexRef.current\r\n const elements = Array.from(measuredItemsRef.current.entries())\r\n .filter(([index]) => index >= startIndex && index <= endIndex)\r\n .map(([, element]) => element)\r\n\r\n if (elements.length === 0) return\r\n\r\n let nextHeight = 0\r\n for (const element of elements) {\r\n nextHeight = Math.max(nextHeight, element.getBoundingClientRect().height)\r\n }\r\n\r\n if (nextHeight <= 0) return\r\n\r\n hasMeasuredDatasetRef.current = true\r\n setMeasuredItemHeight(Math.round(nextHeight))\r\n })\r\n }, [])\r\n\r\n const setMeasuredItemRef = useCallback((index: number, node: HTMLDivElement | null) => {\r\n if (node) {\r\n measuredItemsRef.current.set(index, node)\r\n return\r\n }\r\n\r\n measuredItemsRef.current.delete(index)\r\n }, [])\r\n\r\n useLayoutEffect(() => {\r\n // Once measured, the effect is a cheap no-op on every subsequent scroll.\r\n if (hasMeasuredDatasetRef.current) return\r\n\r\n const elements = Array.from(measuredItemsRef.current.entries())\r\n .filter(([index]) => index >= windowed.startIndex && index <= measurementEndIndex)\r\n .map(([, element]) => element)\r\n\r\n if (elements.length === 0) return\r\n\r\n scheduleMeasuredHeightUpdate()\r\n\r\n const observer = new ResizeObserver(() => {\r\n scheduleMeasuredHeightUpdate()\r\n })\r\n\r\n for (const element of elements) {\r\n observer.observe(element)\r\n }\r\n\r\n return () => {\r\n observer.disconnect()\r\n cancelScheduledMeasurement()\r\n }\r\n }, [windowed.startIndex, measurementEndIndex, scheduleMeasuredHeightUpdate, cancelScheduledMeasurement])\r\n\r\n useLayoutEffect(() => {\r\n return () => {\r\n cancelScheduledMeasurement()\r\n }\r\n }, [cancelScheduledMeasurement])\r\n\r\n // Cancel any pending scroll RAF on unmount to prevent setState on an unmounted component.\r\n useEffect(() => {\r\n return () => {\r\n if (scrollRafRef.current !== null) {\r\n cancelAnimationFrame(scrollRafRef.current)\r\n scrollRafRef.current = null\r\n }\r\n }\r\n }, [])\r\n\r\n const rootClasses = [classes.root, classes.virtualized]\r\n if (isScrolling) rootClasses.push(classes.scrolling)\r\n return (\r\n <ViewGridStyled className={rootClasses.filter(Boolean).join(' ')}>\r\n <Box ref={wrapRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n {/* Spacer keeps total scroll height stable for rows rendered before the current window. */}\r\n {windowed.topSpacerHeight > 0 ? <Box sx={{ height: windowed.topSpacerHeight }} /> : null}\r\n\r\n <Box sx={contentSx} className={classes.grid}>\r\n {visibleItems.map((item, offset) => {\r\n const index = windowed.startIndex + offset\r\n const key = config.getterId(item, index) ?? index\r\n return (\r\n <Box\r\n key={key}\r\n className={classes.gridItem}\r\n ref={!hasMeasuredDatasetRef.current ? (node) => setMeasuredItemRef(index, node as HTMLDivElement | null) : undefined}\r\n sx={gridItemSx}\r\n >\r\n <ItemComponent value={item} index={index} />\r\n </Box>\r\n )\r\n })}\r\n </Box>\r\n\r\n {/* Spacer keeps total scroll height stable for rows rendered after the current window. */}\r\n {windowed.bottomSpacerHeight > 0 ? <Box sx={{ height: windowed.bottomSpacerHeight }} /> : null}\r\n </Box>\r\n </ViewGridStyled>\r\n )\r\n }\r\n return ViewGridVirtualized\r\n}\r\n//#endregion\r\n//#region Main\r\n/**\r\n * Factory function to create a Grid view component that can switch between normal and virtualized rendering strategies based on props and configuration.\r\n * @param config - The configuration object for the grid view, containing default settings and required properties.\r\n * @returns A React functional component that renders a grid view based on the provided configuration and props, supporting both normal and virtualized rendering strategies.\r\n */\r\nexport function createViewGrid<T>(config: IViewGridConfig<T>) {\r\n const ViewGridNormal = createViewGridNormal<T>(config)\r\n const ViewGridVirtualized = createViewGridVirtualized<T>(config)\r\n\r\n const ViewGrid: FC<IViewGridProps<T>> = (props) => {\r\n const renderStrategy = props.renderStrategy ?? config.renderStrategy ?? 'normal'\r\n if (renderStrategy === 'virtualized') {\r\n return <ViewGridVirtualized {...props} />\r\n }\r\n return <ViewGridNormal {...props} />\r\n }\r\n return ViewGrid\r\n}\r\n\r\nexport interface IViewGridLoadingProps<T> extends IViewGridProps<T> {\r\n value: T[]\r\n loadMode: LoadingModeRule\r\n loading?: boolean\r\n pagination?: TPagination\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n}\r\n\r\nexport function createViewGridLoading<T>(GridComponent: ComponentType<IViewGridProps<T>>) {\r\n const ViewGridLoading: FC<IViewGridLoadingProps<T>> = (props) => {\r\n const handleNearEnd = useCallback(async () => {\r\n if (props.loadMode !== 'infiniteScroll') return\r\n if (!props.pagination?.hasNext) return\r\n if (props.loading) return\r\n\r\n const currentPage = props.pagination?.page ?? 0\r\n const currentPageSize = props.pagination?.pageSize ?? 20\r\n const nextPage = currentPage + 1\r\n await props.onPageChange?.(nextPage, currentPageSize)\r\n }, [props.loadMode, props.pagination?.hasNext, props.pagination?.page, props.pagination?.pageSize, props.loading, props.onPageChange])\r\n\r\n return (\r\n <GridComponent\r\n value={props.value}\r\n spacing={props.spacing}\r\n sizes={props.sizes}\r\n renderStrategy={props.renderStrategy}\r\n Component={props.Component}\r\n normalOptions={props.normalOptions}\r\n virtualizedOptions={props.virtualizedOptions}\r\n onNearEnd={props.loadMode === 'infiniteScroll' ? handleNearEnd : undefined}\r\n nearEndThreshold={props.nearEndThreshold}\r\n scrollResetToken={props.scrollResetToken}\r\n />\r\n )\r\n }\r\n\r\n return ViewGridLoading\r\n}\r\n\r\nexport default createViewGrid\r\n//#endregion\r\n"],"names":["createViewGrid","config","ViewGridNormal","props","_mergedConfig$normalO","_useState","useState","_useState2","_slicedToArray","isScrolling","setIsScrolling","scrollContainerRef","useRef","mergedConfig","useMergedConfig","ItemComponent","Component","isAutoHeight","normalOptions","autoHeight","isClient","featureMode","finalItems","useMemo","value","useEffect","undefined","scrollResetToken","current","scrollTop","rootClasses","l","classes","root","normal","push","scrolling","join","_jsx","ViewGridStyled","className","children","Box","scrollContainer","ref","onScroll","e","_props$onNearEnd","t","currentTarget","scrollingThreshold","scrollHeight","clientHeight","nearEndThreshold","onNearEnd","call","Grid","container","spacing","concat","grid","map","item","index","_config$getterId","key","getterId","_objectSpread","gridItem","sizes","createViewGridNormal","ViewGridVirtualized","virtualizedOptions","wrapRef","measuredItemsRef","Map","measurementRafRef","scrollRafRef","latestScrollTopRef","isScrollingRef","windowedRef","startIndex","endIndex","measurementEndIndexRef","lastFiredScrollTopRef","hasMeasuredDatasetRef","_useState3","_useState4","containerWidth","setContainerWidth","_useState5","_useState6","containerHeight","setContainerHeight","_useState7","_useState8","scrollTopState","setScrollTopState","_useState9","_useState0","_useState1","_useState10","measuredItemHeight","setMeasuredItemHeight","overscan","Math","max","spacingPx","round","resolveGridSpacing","effectiveItemHeight","DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE","cancelAnimationFrame","useLayoutEffect","updateSize","_wrapRef$current$clie","_wrapRef$current","_wrapRef$current$clie2","_wrapRef$current2","nextWidth","clientWidth","nextHeight","prev","observer","ResizeObserver","observe","disconnect","columns","resolveGridColumnsFromWidth","rowHeight","rowHeightRef","overscanRef","windowed","totalItems","length","startRow","endRow","topSpacerHeight","bottomSpacerHeight","totalRows","ceil","safeViewportHeight","effectiveScrollTop","floor","visibleRows","min","visibleItems","slice","measurementEndIndex","contentSx","display","gap","gridTemplateColumns","gridItemSx","minHeight","height","cancelScheduledMeasurement","useCallback","scheduleMeasuredHeightUpdate","requestAnimationFrame","elements","Array","from","entries","filter","_ref","_ref3","_step","_iterator","_createForOfIteratorHelper","s","n","done","element","getBoundingClientRect","err","f","setMeasuredItemRef","node","set","_ref5","_ref7","_step2","_iterator2","virtualized","Boolean","_jsxs","_props$onNearEnd2","newScrollTop","_wrapRef$current$scro","_wrapRef$current3","domScrollTop","nextIsScrolling","lastFiredStartRow","sx","offset","_config$getterId2","createViewGridVirtualized","_ref9","_props$renderStrategy","renderStrategy","createViewGridLoading","GridComponent","_props$pagination4","_props$pagination5","_props$pagination6","handleNearEnd","_asyncToGenerator","_regenerator","m","_callee","_props$pagination","_props$pagination$pag","_props$pagination2","_props$pagination$pag2","_props$pagination3","_props$onPageChange","currentPage","currentPageSize","nextPage","w","_context","loadMode","a","pagination","hasNext","loading","page","pageSize","onPageChange"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{styled as o,Box as r,alpha as t}from"@mui/material";var e={root:"DinoViewGrid-root",normal:"DinoViewGrid-normal",autoHeight:"DinoViewGrid-autoHeight",virtualized:"DinoViewGrid-virtualized",scrollContainer:"DinoViewGrid-scrollContainer",grid:"DinoViewGrid-grid",gridItem:"DinoViewGrid-item",scrolling:"DinoViewGrid-scrolling"},n=e,a=o(r)(function(o){var r=o.theme;return i(i(i(i({display:"flex",flex:1,minHeight:0,minWidth:0,position:"relative",width:"100%",height:"100%",overflow:"hidden",boxSizing:"border-box"},".".concat(n.scrollContainer),{width:"100%",height:"100%",overflowY:"auto",padding:r.spacing(.5),"&::-webkit-scrollbar":{width:6,height:6},"&::-webkit-scrollbar-thumb":{backgroundColor:r.palette.grey[400]},"&::-webkit-scrollbar-thumb:hover":{backgroundColor:r.palette.grey[600]},"&::-webkit-scrollbar-track":{backgroundColor:r.palette.grey[200],borderRadius:4},"&::-webkit-scrollbar-track:hover":{backgroundColor:r.palette.grey[300]}}),".".concat(n.scrollContainer,"::before"),{content:'""',position:"absolute",top:0,left:0,right:0,height:r.spacing(1.5),background:"linear-gradient(\n to bottom,\n ".concat(r.palette.background.paper," 0%,\n ").concat(t(r.palette.background.paper,.16)," 30%,\n transparent 100%\n )"),pointerEvents:"none",opacity:0,visibility:"hidden",transition:"all 0.3s ease-out",zIndex:r.zIndex.appBar-1}),"&.".concat(n.scrolling," .").concat(n.scrollContainer,"::before"),{opacity:1,visibility:"visible"}),"&.".concat(n.normal,".").concat(n.autoHeight),i({height:"auto",overflow:"visible"},".".concat(n.scrollContainer),{position:"static",inset:"auto",overflowY:"visible"}))});export{a as ViewGridStyled,e as viewGridClasses};
1
+ import{defineProperty as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{styled as i,Box as r,alpha as e}from"@mui/material";var t={root:"DinoViewGrid-root",normal:"DinoViewGrid-normal",autoHeight:"DinoViewGrid-autoHeight",virtualized:"DinoViewGrid-virtualized",scrollContainer:"DinoViewGrid-scrollContainer",grid:"DinoViewGrid-grid",gridItem:"DinoViewGrid-item",scrolling:"DinoViewGrid-scrolling"},n=t,a=i(r)(function(i){var r=i.theme;return o(o(o(o({display:"flex",flex:1,minHeight:0,minWidth:0,position:"relative",width:"100%",height:"100%",overflow:"hidden",boxSizing:"border-box"},".".concat(n.scrollContainer),{width:"100%",height:"100%",overflowY:"auto",overflowAnchor:"none",padding:r.spacing(.5),"&::-webkit-scrollbar":{width:6,height:6},"&::-webkit-scrollbar-thumb":{backgroundColor:r.palette.grey[400]},"&::-webkit-scrollbar-thumb:hover":{backgroundColor:r.palette.grey[600]},"&::-webkit-scrollbar-track":{backgroundColor:r.palette.grey[200],borderRadius:4},"&::-webkit-scrollbar-track:hover":{backgroundColor:r.palette.grey[300]}}),".".concat(n.scrollContainer,"::before"),{content:'""',position:"absolute",top:0,left:0,right:0,height:r.spacing(1.5),background:"linear-gradient(\n to bottom,\n ".concat(r.palette.background.paper," 0%,\n ").concat(e(r.palette.background.paper,.16)," 30%,\n transparent 100%\n )"),pointerEvents:"none",opacity:0,visibility:"hidden",transition:"all 0.3s ease-out",zIndex:r.zIndex.appBar-1}),"&.".concat(n.scrolling," .").concat(n.scrollContainer,"::before"),{opacity:1,visibility:"visible"}),"&.".concat(n.normal,".").concat(n.autoHeight),o({height:"auto",overflow:"visible"},".".concat(n.scrollContainer),{position:"static",inset:"auto",overflowY:"visible"}))});export{a as ViewGridStyled,t as viewGridClasses};
2
2
  //# sourceMappingURL=styleds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styleds.js","sources":["../../../../src/data-surface/view-grid/styleds.tsx"],"sourcesContent":["import { alpha, Box, styled } from '@mui/material'\r\n\r\nexport const viewGridClasses = {\r\n root: 'DinoViewGrid-root',\r\n normal: 'DinoViewGrid-normal',\r\n autoHeight: 'DinoViewGrid-autoHeight',\r\n virtualized: 'DinoViewGrid-virtualized',\r\n scrollContainer: 'DinoViewGrid-scrollContainer',\r\n grid: 'DinoViewGrid-grid',\r\n gridItem: 'DinoViewGrid-item',\r\n // Statuses\r\n scrolling: 'DinoViewGrid-scrolling'\r\n}\r\nconst classes = viewGridClasses\r\n\r\nexport const ViewGridStyled = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flex: 1,\r\n minHeight: 0,\r\n minWidth: 0,\r\n position: 'relative',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden',\r\n boxSizing: 'border-box',\r\n [`.${classes.scrollContainer}`]: {\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto',\r\n padding: theme.spacing(0.5),\r\n // Scrollbar styling\r\n '&::-webkit-scrollbar': { width: 6, height: 6 },\r\n '&::-webkit-scrollbar-thumb': { backgroundColor: theme.palette.grey[400] },\r\n '&::-webkit-scrollbar-thumb:hover': { backgroundColor: theme.palette.grey[600] },\r\n '&::-webkit-scrollbar-track': { backgroundColor: theme.palette.grey[200], borderRadius: 4 },\r\n '&::-webkit-scrollbar-track:hover': { backgroundColor: theme.palette.grey[300] }\r\n },\r\n [`.${classes.scrollContainer}::before`]: {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n height: theme.spacing(1.5),\r\n background: `linear-gradient(\r\n to bottom,\r\n ${theme.palette.background.paper} 0%,\r\n ${alpha(theme.palette.background.paper, 0.16)} 30%,\r\n transparent 100%\r\n )`,\r\n pointerEvents: 'none',\r\n // animation\r\n opacity: 0,\r\n visibility: 'hidden',\r\n transition: 'all 0.3s ease-out',\r\n zIndex: theme.zIndex.appBar - 1\r\n },\r\n [`&.${classes.scrolling} .${classes.scrollContainer}::before`]: {\r\n opacity: 1,\r\n visibility: 'visible'\r\n },\r\n // Auto-height variant: disable the internal scroll container and let the\r\n // component size expand with content. This makes the table render all\r\n // rows and removes the internal scrollbar used in 'normal' modes.\r\n [`&.${classes.normal}.${classes.autoHeight}`]: {\r\n height: 'auto',\r\n overflow: 'visible',\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'static',\r\n inset: 'auto',\r\n overflowY: 'visible'\r\n }\r\n }\r\n}))\r\n"],"names":["viewGridClasses","root","normal","autoHeight","virtualized","scrollContainer","grid","gridItem","scrolling","classes","ViewGridStyled","styled","Box","_ref","theme","_defineProperty","display","flex","minHeight","minWidth","position","width","height","overflow","boxSizing","concat","overflowY","padding","spacing","backgroundColor","palette","grey","borderRadius","content","top","left","right","background","paper","alpha","pointerEvents","opacity","visibility","transition","zIndex","appBar","inset"],"mappings":"2IAEO,IAAMA,EAAkB,CAC7BC,KAAM,oBACNC,OAAQ,sBACRC,WAAY,0BACZC,YAAa,2BACbC,gBAAiB,+BACjBC,KAAM,oBACNC,SAAU,oBAEVC,UAAW,0BAEPC,EAAUT,EAEHU,EAAiBC,EAAOC,EAAPD,CAAY,SAAAE,GAAA,IAAGC,EAAKD,EAALC,MAAK,OAAAC,EAAAA,EAAAA,EAAAA,EAAA,CAChDC,QAAS,OACTC,KAAM,EACNC,UAAW,EACXC,SAAU,EACVC,SAAU,WACVC,MAAO,OACPC,OAAQ,OACRC,SAAU,SACVC,UAAW,cAAY,IAAAC,OAClBhB,EAAQJ,iBAAoB,CAC/BgB,MAAO,OACPC,OAAQ,OACRI,UAAW,OACXC,QAASb,EAAMc,QAAQ,IAEvB,uBAAwB,CAAEP,MAAO,EAAGC,OAAQ,GAC5C,6BAA8B,CAAEO,gBAAiBf,EAAMgB,QAAQC,KAAK,MACpE,mCAAoC,CAAEF,gBAAiBf,EAAMgB,QAAQC,KAAK,MAC1E,6BAA8B,CAAEF,gBAAiBf,EAAMgB,QAAQC,KAAK,KAAMC,aAAc,GACxF,mCAAoC,CAAEH,gBAAiBf,EAAMgB,QAAQC,KAAK,YAC3EN,OACIhB,EAAQJ,gBAA4B,YAAA,CACvC4B,QAAS,KACTb,SAAU,WACVc,IAAK,EACLC,KAAM,EACNC,MAAO,EACPd,OAAQR,EAAMc,QAAQ,KACtBS,WAAU,6CAAAZ,OAENX,EAAMgB,QAAQO,WAAWC,MAAKb,gBAAAA,OAC9Bc,EAAMzB,EAAMgB,QAAQO,WAAWC,MAAO,KAExC,wCACFE,cAAe,OAEfC,QAAS,EACTC,WAAY,SACZC,WAAY,oBACZC,OAAQ9B,EAAM8B,OAAOC,OAAS,IAC/BpB,KAAAA,OACKhB,EAAQD,UAASiB,MAAAA,OAAKhB,EAAQJ,gBAA4B,YAAA,CAC9DoC,QAAS,EACTC,WAAY,YACbjB,KAAAA,OAIKhB,EAAQP,OAAMuB,KAAAA,OAAIhB,EAAQN,YAAUY,EAAA,CACxCO,OAAQ,OACRC,SAAU,WAAS,IAAAE,OACdhB,EAAQJ,iBAAoB,CAC/Be,SAAU,SACV0B,MAAO,OACPpB,UAAW,YACZ"}
1
+ {"version":3,"file":"styleds.js","sources":["../../../../src/data-surface/view-grid/styleds.tsx"],"sourcesContent":["import { alpha, Box, styled } from '@mui/material'\r\n\r\nexport const viewGridClasses = {\r\n root: 'DinoViewGrid-root',\r\n normal: 'DinoViewGrid-normal',\r\n autoHeight: 'DinoViewGrid-autoHeight',\r\n virtualized: 'DinoViewGrid-virtualized',\r\n scrollContainer: 'DinoViewGrid-scrollContainer',\r\n grid: 'DinoViewGrid-grid',\r\n gridItem: 'DinoViewGrid-item',\r\n // Statuses\r\n scrolling: 'DinoViewGrid-scrolling'\r\n}\r\nconst classes = viewGridClasses\r\n\r\nexport const ViewGridStyled = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flex: 1,\r\n minHeight: 0,\r\n minWidth: 0,\r\n position: 'relative',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden',\r\n boxSizing: 'border-box',\r\n [`.${classes.scrollContainer}`]: {\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto',\r\n overflowAnchor: 'none',\r\n padding: theme.spacing(0.5),\r\n // Scrollbar styling\r\n '&::-webkit-scrollbar': { width: 6, height: 6 },\r\n '&::-webkit-scrollbar-thumb': { backgroundColor: theme.palette.grey[400] },\r\n '&::-webkit-scrollbar-thumb:hover': { backgroundColor: theme.palette.grey[600] },\r\n '&::-webkit-scrollbar-track': { backgroundColor: theme.palette.grey[200], borderRadius: 4 },\r\n '&::-webkit-scrollbar-track:hover': { backgroundColor: theme.palette.grey[300] }\r\n },\r\n [`.${classes.scrollContainer}::before`]: {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n height: theme.spacing(1.5),\r\n background: `linear-gradient(\r\n to bottom,\r\n ${theme.palette.background.paper} 0%,\r\n ${alpha(theme.palette.background.paper, 0.16)} 30%,\r\n transparent 100%\r\n )`,\r\n pointerEvents: 'none',\r\n // animation\r\n opacity: 0,\r\n visibility: 'hidden',\r\n transition: 'all 0.3s ease-out',\r\n zIndex: theme.zIndex.appBar - 1\r\n },\r\n [`&.${classes.scrolling} .${classes.scrollContainer}::before`]: {\r\n opacity: 1,\r\n visibility: 'visible'\r\n },\r\n // Auto-height variant: disable the internal scroll container and let the\r\n // component size expand with content. This makes the table render all\r\n // rows and removes the internal scrollbar used in 'normal' modes.\r\n [`&.${classes.normal}.${classes.autoHeight}`]: {\r\n height: 'auto',\r\n overflow: 'visible',\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'static',\r\n inset: 'auto',\r\n overflowY: 'visible'\r\n }\r\n }\r\n}))\r\n"],"names":["viewGridClasses","root","normal","autoHeight","virtualized","scrollContainer","grid","gridItem","scrolling","classes","ViewGridStyled","styled","Box","_ref","theme","_defineProperty","display","flex","minHeight","minWidth","position","width","height","overflow","boxSizing","concat","overflowY","overflowAnchor","padding","spacing","backgroundColor","palette","grey","borderRadius","content","top","left","right","background","paper","alpha","pointerEvents","opacity","visibility","transition","zIndex","appBar","inset"],"mappings":"2IAEO,IAAMA,EAAkB,CAC7BC,KAAM,oBACNC,OAAQ,sBACRC,WAAY,0BACZC,YAAa,2BACbC,gBAAiB,+BACjBC,KAAM,oBACNC,SAAU,oBAEVC,UAAW,0BAEPC,EAAUT,EAEHU,EAAiBC,EAAOC,EAAPD,CAAY,SAAAE,GAAA,IAAGC,EAAKD,EAALC,MAAK,OAAAC,EAAAA,EAAAA,EAAAA,EAAA,CAChDC,QAAS,OACTC,KAAM,EACNC,UAAW,EACXC,SAAU,EACVC,SAAU,WACVC,MAAO,OACPC,OAAQ,OACRC,SAAU,SACVC,UAAW,cAAY,IAAAC,OAClBhB,EAAQJ,iBAAoB,CAC/BgB,MAAO,OACPC,OAAQ,OACRI,UAAW,OACXC,eAAgB,OAChBC,QAASd,EAAMe,QAAQ,IAEvB,uBAAwB,CAAER,MAAO,EAAGC,OAAQ,GAC5C,6BAA8B,CAAEQ,gBAAiBhB,EAAMiB,QAAQC,KAAK,MACpE,mCAAoC,CAAEF,gBAAiBhB,EAAMiB,QAAQC,KAAK,MAC1E,6BAA8B,CAAEF,gBAAiBhB,EAAMiB,QAAQC,KAAK,KAAMC,aAAc,GACxF,mCAAoC,CAAEH,gBAAiBhB,EAAMiB,QAAQC,KAAK,YAC3EP,OACIhB,EAAQJ,gBAA4B,YAAA,CACvC6B,QAAS,KACTd,SAAU,WACVe,IAAK,EACLC,KAAM,EACNC,MAAO,EACPf,OAAQR,EAAMe,QAAQ,KACtBS,WAAU,6CAAAb,OAENX,EAAMiB,QAAQO,WAAWC,MAAKd,gBAAAA,OAC9Be,EAAM1B,EAAMiB,QAAQO,WAAWC,MAAO,KAExC,wCACFE,cAAe,OAEfC,QAAS,EACTC,WAAY,SACZC,WAAY,oBACZC,OAAQ/B,EAAM+B,OAAOC,OAAS,IAC/BrB,KAAAA,OACKhB,EAAQD,UAASiB,MAAAA,OAAKhB,EAAQJ,gBAA4B,YAAA,CAC9DqC,QAAS,EACTC,WAAY,YACblB,KAAAA,OAIKhB,EAAQP,OAAMuB,KAAAA,OAAIhB,EAAQN,YAAUY,EAAA,CACxCO,OAAQ,OACRC,SAAU,WAAS,IAAAE,OACdhB,EAAQJ,iBAAoB,CAC/Be,SAAU,SACV2B,MAAO,OACPrB,UAAW,YACZ"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as t,toConsumableArray as r}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{ListDensity as n}from"./types.js";var e=48,a=4,i=48,o={compact:36,standard:48,comfortable:56},u={compact:"6px 10px",standard:"10px 12px",comfortable:"12px 14px"},f=function(r,n){return n?Object.keys(n).map(function(r){var e,a=null!==(e=n[r])&&void 0!==e?e:{};return t({field:r},a)}):function(t){if(0===t.length)return[];var r=t[0];return Object.keys(r).map(function(t){return{field:t,label:String(t),flex:1}})}(r)};function d(t){if("number"==typeof t&&Number.isFinite(t)&&t>0)return t;var r="number"==typeof t?n.standard:null!=t?t:n.standard;return o[r]}function c(t){if("number"==typeof t)return u[n.standard];var r="number"==typeof t?n.standard:null!=t?t:n.standard;return u[r]}function l(t){return"number"==typeof t&&Number.isFinite(t)&&t>=0?t:4}var m=80;function p(){for(var t=arguments.length,n=new Array(t),e=0;e<t;e++)n[e]=arguments[e];var a=n.filter(function(t){return"number"==typeof t});return 0===a.length?80:Math.max.apply(Math,[0].concat(r(a)))}function v(t,r,n){return t<=0?0:t*r+Math.max(0,t-1)*n}var s=function(t,r,n){if(void 0!==t.width)return t.width;if(t.flex&&t.flex>0&&n>0){var e=t.flex/n;return r>0?"calc((100% - ".concat(r,"px) * ").concat(e,")"):"".concat(100*e,"%")}return void 0!==t.minWidth?t.minWidth:void 0},b=function(r,n,e,a){var i,o=s(r,e,n),u=void 0!==r.width;return t({width:o,minWidth:u?o:r.minWidth,maxWidth:null!==(i=r.maxWidth)&&void 0!==i?i:u?o:void 0},a)};export{i as CHECKBOX_COL_WIDTH,u as LIST_CELL_PADDING_BY_DENSITY,m as LIST_DEFAULT_NEAR_END_THRESHOLD,a as LIST_DEFAULT_ROW_SPACING,e as LIST_HEADER_HEIGHT,o as LIST_ROW_HEIGHT_BY_DENSITY,f as columnsRecordToArray,s as getColumnWidth,b as mapSxTableCell,c as resolveListCellPadding,p as resolveListNearEndThreshold,d as resolveListRowHeight,l as resolveListRowSpacing,v as resolveListSpacerHeight};
1
+ import{createForOfIteratorHelper as r,objectSpread2 as t,toConsumableArray as n}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{ListDensity as e}from"./types.js";var i=48,a=4,f=48,o={compact:36,standard:48,comfortable:56},u={compact:"6px 10px",standard:"10px 12px",comfortable:"12px 14px"},l=function(r,n){return n?Object.keys(n).map(function(r){var e,i=null!==(e=n[r])&&void 0!==e?e:{};return t({field:r},i)}):function(r){if(0===r.length)return[];var t=r[0];return Object.keys(t).map(function(r){return{field:r,label:String(r),flex:1}})}(r)};function d(r){if("number"==typeof r&&Number.isFinite(r)&&r>0)return r;var t="number"==typeof r?e.standard:null!=r?r:e.standard;return o[t]}function m(r){if("number"==typeof r)return u[e.standard];var t="number"==typeof r?e.standard:null!=r?r:e.standard;return u[t]}function h(r){return"number"==typeof r&&Number.isFinite(r)&&r>=0?r:4}var v=80;function c(){for(var r=arguments.length,t=new Array(r),e=0;e<r;e++)t[e]=arguments[e];var i=t.filter(function(r){return"number"==typeof r});return 0===i.length?80:Math.max.apply(Math,[0].concat(n(i)))}function p(r,t,n){return r<=0?0:r*t+Math.max(0,r-1)*n}function s(t,n,e){var i=e-(n?48:0),a=new Array(t.length).fill(void 0);if(e<=0)return t.map(function(r){return void 0!==r.width?r.width:r.minWidth});for(var f=[],o=0;o<t.length;o++){var u=t[o];if(void 0!==u.width)a[o]=u.width,i-="number"==typeof u.width?u.width:0;else if(!u.flex||u.flex<=0){var l,d=null!==(l=u.minWidth)&&void 0!==l?l:0;a[o]=d>0?d:void 0,i-=d}else{var m,h;f.push({i:o,flex:u.flex,min:null!==(m=u.minWidth)&&void 0!==m?m:0,max:null!==(h=u.maxWidth)&&void 0!==h?h:1/0,width:0,frozen:!1})}}if(0===f.length||i<=0)return a;for(var v=0;v<=f.length;v++){var c=f.filter(function(r){return!r.frozen});if(0===c.length)break;var p,s=c.reduce(function(r,t){return r+t.flex},0),x=!1,b=r(c);try{for(b.s();!(p=b.n()).done;){var y=p.value,w=y.flex/s*i;w<y.min?(y.width=y.min,y.frozen=!0,i-=y.min,x=!0):w>y.max&&(y.width=y.max,y.frozen=!0,i-=y.max,x=!0)}}catch(r){b.e(r)}finally{b.f()}if(!x){var g,W=r(c);try{for(W.s();!(g=W.n()).done;){var j=g.value;j.width=Math.round(j.flex/s*i)}}catch(r){W.e(r)}finally{W.f()}break}}for(var k=0,z=f;k<z.length;k++){var M=z[k];a[M.i]=M.width}return a}var x=function(r,n,e){return t({width:n,minWidth:r.minWidth,maxWidth:r.maxWidth},e)};export{f as CHECKBOX_COL_WIDTH,u as LIST_CELL_PADDING_BY_DENSITY,v as LIST_DEFAULT_NEAR_END_THRESHOLD,a as LIST_DEFAULT_ROW_SPACING,i as LIST_HEADER_HEIGHT,o as LIST_ROW_HEIGHT_BY_DENSITY,l as columnsRecordToArray,x as mapSxTableCell,s as resolveFlexColumnWidths,m as resolveListCellPadding,c as resolveListNearEndThreshold,d as resolveListRowHeight,h as resolveListRowSpacing,p as resolveListSpacerHeight};
2
2
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../src/data-surface/view-list/helpers.ts"],"sourcesContent":["import { TableCellProps } from '@mui/material'\r\nimport { ListDensity, TListColumn, TListColumns } from './types'\r\n\r\nexport const LIST_HEADER_HEIGHT = 48\r\nexport const LIST_DEFAULT_ROW_SPACING = 4\r\nexport const CHECKBOX_COL_WIDTH = 48\r\n\r\nexport const LIST_ROW_HEIGHT_BY_DENSITY: Record<ListDensity, number> = {\r\n compact: 36,\r\n standard: 48,\r\n comfortable: 56\r\n}\r\n\r\nexport const LIST_CELL_PADDING_BY_DENSITY: Record<ListDensity, string> = {\r\n compact: '6px 10px',\r\n standard: '10px 12px',\r\n comfortable: '12px 14px'\r\n}\r\n\r\nconst buildDefaultColumns = <T>(data: T[]): TListColumn<T>[] => {\r\n if (data.length === 0) return []\r\n const firstRow = data[0]\r\n return Object.keys(firstRow as object).map((key) => ({\r\n field: key as keyof T,\r\n label: String(key),\r\n flex: 1\r\n }))\r\n}\r\n\r\n/**\r\n * Converts TListColumns<T> Record type to TListColumn<T>[] array for internal use.\r\n */\r\nexport const columnsRecordToArray = <T>(value: T[], columnsRecord?: TListColumns<T>): TListColumn<T>[] => {\r\n if (!columnsRecord) return buildDefaultColumns(value)\r\n const keys = Object.keys(columnsRecord) as (keyof T)[]\r\n return keys.map((key) => {\r\n const colConfig = columnsRecord[key] ?? {}\r\n return { field: key, ...colConfig } as TListColumn<T>\r\n })\r\n}\r\n\r\nexport function resolveListRowHeight(density?: number | ListDensity): number {\r\n if (typeof density === 'number' && Number.isFinite(density) && density > 0) {\r\n return density\r\n }\r\n\r\n const resolvedDensity: ListDensity = typeof density === 'number' ? ListDensity.standard : (density ?? ListDensity.standard)\r\n return LIST_ROW_HEIGHT_BY_DENSITY[resolvedDensity]\r\n}\r\n\r\nexport function resolveListCellPadding(density?: number | ListDensity): string {\r\n if (typeof density === 'number') {\r\n return LIST_CELL_PADDING_BY_DENSITY[ListDensity.standard]\r\n }\r\n\r\n const resolvedDensity: ListDensity = typeof density === 'number' ? ListDensity.standard : (density ?? ListDensity.standard)\r\n return LIST_CELL_PADDING_BY_DENSITY[resolvedDensity]\r\n}\r\n\r\nexport function resolveListRowSpacing(spacing?: number): number {\r\n if (typeof spacing === 'number' && Number.isFinite(spacing) && spacing >= 0) {\r\n return spacing\r\n }\r\n\r\n return LIST_DEFAULT_ROW_SPACING\r\n}\r\n\r\n/** Default near-end threshold in pixels for triggering near-end events. */\r\nexport const LIST_DEFAULT_NEAR_END_THRESHOLD = 80\r\n/** Resolves the final near-end threshold from multiple optional values. */\r\nexport function resolveListNearEndThreshold(...threshold: (number | undefined)[]): number {\r\n const finalThreshold = threshold.filter((value): value is number => typeof value === 'number')\r\n if (finalThreshold.length === 0) return LIST_DEFAULT_NEAR_END_THRESHOLD\r\n return Math.max(0, ...finalThreshold)\r\n}\r\n\r\nexport function resolveListSpacerHeight(count: number, rowHeight: number, rowSpacing: number): number {\r\n if (count <= 0) return 0\r\n return count * rowHeight + Math.max(0, count - 1) * rowSpacing\r\n}\r\n\r\nexport const getColumnWidth = <T>(column: TListColumn<T>, totalFixedPx: number, totalFlex: number): number | string | undefined => {\r\n // Priority 1: Explicit width always wins\r\n if (column.width !== undefined) return column.width\r\n\r\n // Priority 2: Flex-based proportional width.\r\n // Subtract all \"fixed\" columns (explicit width + minWidth-only) so flex columns only share truly remaining space.\r\n if (column.flex && column.flex > 0 && totalFlex > 0) {\r\n const flexRatio = column.flex / totalFlex\r\n if (totalFixedPx > 0) {\r\n return `calc((100% - ${totalFixedPx}px) * ${flexRatio})`\r\n }\r\n return `${flexRatio * 100}%`\r\n }\r\n\r\n // Priority 3: minWidth-only column — use minWidth as the base layout width.\r\n // This ensures totalFixedPx correctly reserves space for this column,\r\n // and the CSS minWidth/maxWidth constraints are still applied via mapSxTableCell.\r\n if (column.minWidth !== undefined) return column.minWidth\r\n\r\n // Priority 4: Auto-width (no width, flex, or minWidth specified)\r\n return undefined\r\n}\r\n\r\nexport const mapSxTableCell = <T>(col: TListColumn<T>, totalFlex: number, totalFixedPx: number, sx?: TableCellProps['sx']): TableCellProps['sx'] => {\r\n const colWidth = getColumnWidth(col, totalFixedPx, totalFlex)\r\n const hasFixedWidth = col.width !== undefined\r\n return {\r\n width: colWidth,\r\n minWidth: hasFixedWidth ? colWidth : col.minWidth,\r\n maxWidth: col.maxWidth ?? (hasFixedWidth ? colWidth : undefined),\r\n ...sx\r\n }\r\n}\r\n"],"names":["LIST_HEADER_HEIGHT","LIST_DEFAULT_ROW_SPACING","CHECKBOX_COL_WIDTH","LIST_ROW_HEIGHT_BY_DENSITY","compact","standard","comfortable","LIST_CELL_PADDING_BY_DENSITY","columnsRecordToArray","value","columnsRecord","Object","keys","map","key","_columnsRecord$key","colConfig","_objectSpread","field","data","length","firstRow","label","String","flex","buildDefaultColumns","resolveListRowHeight","density","Number","isFinite","resolvedDensity","ListDensity","resolveListCellPadding","resolveListRowSpacing","spacing","LIST_DEFAULT_NEAR_END_THRESHOLD","resolveListNearEndThreshold","_len","arguments","threshold","Array","_key","finalThreshold","filter","Math","max","apply","concat","_toConsumableArray","resolveListSpacerHeight","count","rowHeight","rowSpacing","getColumnWidth","column","totalFixedPx","totalFlex","undefined","width","flexRatio","minWidth","mapSxTableCell","col","sx","_col$maxWidth","colWidth","hasFixedWidth","maxWidth"],"mappings":"+IAGO,IAAMA,EAAqB,GACrBC,EAA2B,EAC3BC,EAAqB,GAErBC,EAA0D,CACrEC,QAAS,GACTC,SAAU,GACVC,YAAa,IAGFC,EAA4D,CACvEH,QAAS,WACTC,SAAU,YACVC,YAAa,aAgBFE,EAAuB,SAAIC,EAAYC,GAClD,OAAKA,EACQC,OAAOC,KAAKF,GACbG,IAAI,SAACC,GAAO,IAAAC,EAChBC,EAA8B,QAArBD,EAAGL,EAAcI,UAAI,IAAAC,EAAAA,EAAI,CAAE,EAC1C,OAAAE,EAAA,CAASC,MAAOJ,GAAQE,EAC1B,GAnB0B,SAAIG,GAC9B,GAAoB,IAAhBA,EAAKC,OAAc,MAAO,GAC9B,IAAMC,EAAWF,EAAK,GACtB,OAAOR,OAAOC,KAAKS,GAAoBR,IAAI,SAACC,GAAG,MAAM,CACnDI,MAAOJ,EACPQ,MAAOC,OAAOT,GACdU,KAAM,EACP,EACH,CAM6BC,CAAoBhB,EAMjD,EAEM,SAAUiB,EAAqBC,GACnC,GAAuB,iBAAZA,GAAwBC,OAAOC,SAASF,IAAYA,EAAU,EACvE,OAAOA,EAGT,IAAMG,EAAkD,iBAAZH,EAAuBI,EAAY1B,SAAYsB,QAAAA,EAAWI,EAAY1B,SAClH,OAAOF,EAA2B2B,EACpC,CAEM,SAAUE,EAAuBL,GACrC,GAAuB,iBAAZA,EACT,OAAOpB,EAA6BwB,EAAY1B,UAGlD,IAAMyB,EAAkD,iBAAZH,EAAuBI,EAAY1B,SAAYsB,QAAAA,EAAWI,EAAY1B,SAClH,OAAOE,EAA6BuB,EACtC,CAEM,SAAUG,EAAsBC,GACpC,MAAuB,iBAAZA,GAAwBN,OAAOC,SAASK,IAAYA,GAAW,EACjEA,EAzD6B,CA6DxC,CAGO,IAAMC,EAAkC,GAE/B,SAAAC,IAAgE,IAAA,IAAAC,EAAAC,UAAAlB,OAAjCmB,EAAiCC,IAAAA,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAjCF,EAAiCE,GAAAH,UAAAG,GAC9E,IAAMC,EAAiBH,EAAUI,OAAO,SAAClC,GAAK,MAAuC,iBAAVA,IAC3E,OAA8B,IAA1BiC,EAAetB,OAJ0B,GAKtCwB,KAAKC,IAAGC,MAARF,KAAS,CAAA,GAACG,OAAAC,EAAKN,IACxB,UAEgBO,EAAwBC,EAAeC,EAAmBC,GACxE,OAAIF,GAAS,EAAU,EAChBA,EAAQC,EAAYP,KAAKC,IAAI,EAAGK,EAAQ,GAAKE,CACtD,CAEO,IAAMC,EAAiB,SAAIC,EAAwBC,EAAsBC,GAE9E,QAAqBC,IAAjBH,EAAOI,MAAqB,OAAOJ,EAAOI,MAI9C,GAAIJ,EAAO9B,MAAQ8B,EAAO9B,KAAO,GAAKgC,EAAY,EAAG,CACnD,IAAMG,EAAYL,EAAO9B,KAAOgC,EAChC,OAAID,EAAe,EACjB,gBAAAR,OAAuBQ,EAAYR,UAAAA,OAASY,EAAS,KAEvD,GAAAZ,OAAsB,IAAZY,EAAe,IAC1B,CAKD,YAAwBF,IAApBH,EAAOM,SAA+BN,EAAOM,cAAjD,CAIF,EAEaC,EAAiB,SAAIC,EAAqBN,EAAmBD,EAAsBQ,GAAmD,IAAAC,EAC3IC,EAAWZ,EAAeS,EAAKP,EAAcC,GAC7CU,OAA8BT,IAAdK,EAAIJ,MAC1B,OAAAzC,EAAA,CACEyC,MAAOO,EACPL,SAAUM,EAAgBD,EAAWH,EAAIF,SACzCO,SAAsB,QAAdH,EAAEF,EAAIK,gBAAQ,IAAAH,EAAAA,EAAKE,EAAgBD,OAAWR,GACnDM,EAEP"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../src/data-surface/view-list/helpers.ts"],"sourcesContent":["import { TableCellProps } from '@mui/material'\r\nimport { ListDensity, TListColumn, TListColumns } from './types'\r\n\r\nexport const LIST_HEADER_HEIGHT = 48\r\nexport const LIST_DEFAULT_ROW_SPACING = 4\r\nexport const CHECKBOX_COL_WIDTH = 48\r\n\r\nexport const LIST_ROW_HEIGHT_BY_DENSITY: Record<ListDensity, number> = {\r\n compact: 36,\r\n standard: 48,\r\n comfortable: 56\r\n}\r\n\r\nexport const LIST_CELL_PADDING_BY_DENSITY: Record<ListDensity, string> = {\r\n compact: '6px 10px',\r\n standard: '10px 12px',\r\n comfortable: '12px 14px'\r\n}\r\n\r\nconst buildDefaultColumns = <T>(data: T[]): TListColumn<T>[] => {\r\n if (data.length === 0) return []\r\n const firstRow = data[0]\r\n return Object.keys(firstRow as object).map((key) => ({\r\n field: key as keyof T,\r\n label: String(key),\r\n flex: 1\r\n }))\r\n}\r\n\r\n/**\r\n * Converts TListColumns<T> Record type to TListColumn<T>[] array for internal use.\r\n */\r\nexport const columnsRecordToArray = <T>(value: T[], columnsRecord?: TListColumns<T>): TListColumn<T>[] => {\r\n if (!columnsRecord) return buildDefaultColumns(value)\r\n const keys = Object.keys(columnsRecord) as (keyof T)[]\r\n return keys.map((key) => {\r\n const colConfig = columnsRecord[key] ?? {}\r\n return { field: key, ...colConfig } as TListColumn<T>\r\n })\r\n}\r\n\r\nexport function resolveListRowHeight(density?: number | ListDensity): number {\r\n if (typeof density === 'number' && Number.isFinite(density) && density > 0) {\r\n return density\r\n }\r\n\r\n const resolvedDensity: ListDensity = typeof density === 'number' ? ListDensity.standard : (density ?? ListDensity.standard)\r\n return LIST_ROW_HEIGHT_BY_DENSITY[resolvedDensity]\r\n}\r\n\r\nexport function resolveListCellPadding(density?: number | ListDensity): string {\r\n if (typeof density === 'number') {\r\n return LIST_CELL_PADDING_BY_DENSITY[ListDensity.standard]\r\n }\r\n\r\n const resolvedDensity: ListDensity = typeof density === 'number' ? ListDensity.standard : (density ?? ListDensity.standard)\r\n return LIST_CELL_PADDING_BY_DENSITY[resolvedDensity]\r\n}\r\n\r\nexport function resolveListRowSpacing(spacing?: number): number {\r\n if (typeof spacing === 'number' && Number.isFinite(spacing) && spacing >= 0) {\r\n return spacing\r\n }\r\n\r\n return LIST_DEFAULT_ROW_SPACING\r\n}\r\n\r\n/** Default near-end threshold in pixels for triggering near-end events. */\r\nexport const LIST_DEFAULT_NEAR_END_THRESHOLD = 80\r\n/** Resolves the final near-end threshold from multiple optional values. */\r\nexport function resolveListNearEndThreshold(...threshold: (number | undefined)[]): number {\r\n const finalThreshold = threshold.filter((value): value is number => typeof value === 'number')\r\n if (finalThreshold.length === 0) return LIST_DEFAULT_NEAR_END_THRESHOLD\r\n return Math.max(0, ...finalThreshold)\r\n}\r\n\r\nexport function resolveListSpacerHeight(count: number, rowHeight: number, rowSpacing: number): number {\r\n if (count <= 0) return 0\r\n return count * rowHeight + Math.max(0, count - 1) * rowSpacing\r\n}\r\n\r\n/**\r\n * Resolves pixel widths for all columns using a flex redistribution algorithm.\r\n * Properly handles min/max constraints by iteratively redistributing overflow\r\n * from capped columns to uncapped flex siblings — similar to CSS flexbox.\r\n * Requires the actual container pixel width to compute exact values.\r\n */\r\nexport function resolveFlexColumnWidths<T>(\r\n columns: TListColumn<T>[],\r\n selectable: boolean,\r\n containerWidth: number\r\n): Array<number | string | undefined> {\r\n const checkboxWidth = selectable ? CHECKBOX_COL_WIDTH : 0\r\n let pool = containerWidth - checkboxWidth\r\n const result: Array<number | string | undefined> = new Array(columns.length).fill(undefined)\r\n\r\n if (containerWidth <= 0) {\r\n // Container not yet measured: use minWidth as best-guess for each column\r\n return columns.map((col) => {\r\n if (col.width !== undefined) return col.width\r\n return col.minWidth\r\n })\r\n }\r\n\r\n // Pass 1: allocate fixed and minWidth-only columns, collect flex columns\r\n type FlexItem = { i: number; flex: number; min: number; max: number; width: number; frozen: boolean }\r\n const flexCols: FlexItem[] = []\r\n for (let i = 0; i < columns.length; i++) {\r\n const col = columns[i]\r\n if (col.width !== undefined) {\r\n result[i] = col.width\r\n pool -= typeof col.width === 'number' ? col.width : 0\r\n } else if (!col.flex || col.flex <= 0) {\r\n const w = col.minWidth ?? 0\r\n result[i] = w > 0 ? w : undefined\r\n pool -= w\r\n } else {\r\n flexCols.push({ i, flex: col.flex, min: col.minWidth ?? 0, max: col.maxWidth ?? Infinity, width: 0, frozen: false })\r\n }\r\n }\r\n\r\n if (flexCols.length === 0 || pool <= 0) return result\r\n\r\n // Pass 2: iterative flex distribution respecting min/max constraints.\r\n // Each iteration freezes columns that hit a min/max boundary and\r\n // redistributes the leftover pool among the remaining unfrozen columns.\r\n for (let iter = 0; iter <= flexCols.length; iter++) {\r\n const active = flexCols.filter((f) => !f.frozen)\r\n if (active.length === 0) break\r\n const totalFlex = active.reduce((s, f) => s + f.flex, 0)\r\n let anyFrozen = false\r\n for (const item of active) {\r\n const raw = (item.flex / totalFlex) * pool\r\n if (raw < item.min) {\r\n item.width = item.min\r\n item.frozen = true\r\n pool -= item.min\r\n anyFrozen = true\r\n } else if (raw > item.max) {\r\n item.width = item.max\r\n item.frozen = true\r\n pool -= item.max\r\n anyFrozen = true\r\n }\r\n }\r\n if (!anyFrozen) {\r\n for (const item of active) {\r\n item.width = Math.round((item.flex / totalFlex) * pool)\r\n }\r\n break\r\n }\r\n }\r\n\r\n for (const fc of flexCols) {\r\n result[fc.i] = fc.width\r\n }\r\n return result\r\n}\r\n\r\nexport const getColumnWidth = <T>(column: TListColumn<T>, totalFixedPx: number, totalFlex: number): number | string | undefined => {\r\n // Priority 1: Explicit width always wins\r\n if (column.width !== undefined) return column.width\r\n\r\n // Priority 2: Flex-based proportional width.\r\n // Subtract all \"fixed\" columns (explicit width + minWidth-only) so flex columns only share truly remaining space.\r\n if (column.flex && column.flex > 0 && totalFlex > 0) {\r\n const flexRatio = column.flex / totalFlex\r\n const flexCalc = totalFixedPx > 0 ? `calc((100% - ${totalFixedPx}px) * ${flexRatio})` : `${flexRatio * 100}%`\r\n // When minWidth is also set, use CSS max() so the column never shrinks below minWidth.\r\n // This is necessary because tableLayout:fixed ignores CSS min-width on cells/cols.\r\n if (column.minWidth !== undefined) {\r\n return `max(${column.minWidth}px, ${flexCalc})`\r\n }\r\n return flexCalc\r\n }\r\n\r\n // Priority 3: minWidth-only column — use minWidth as the base layout width.\r\n // This ensures totalFixedPx correctly reserves space for this column,\r\n // and the CSS minWidth/maxWidth constraints are still applied via mapSxTableCell.\r\n if (column.minWidth !== undefined) return column.minWidth\r\n\r\n // Priority 4: Auto-width (no width, flex, or minWidth specified)\r\n return undefined\r\n}\r\n\r\nexport const mapSxTableCell = <T>(\r\n col: TListColumn<T>,\r\n resolvedWidth: number | string | undefined,\r\n sx?: TableCellProps['sx']\r\n): TableCellProps['sx'] => {\r\n return {\r\n width: resolvedWidth,\r\n minWidth: col.minWidth,\r\n maxWidth: col.maxWidth,\r\n ...sx\r\n }\r\n}\r\n"],"names":["LIST_HEADER_HEIGHT","LIST_DEFAULT_ROW_SPACING","CHECKBOX_COL_WIDTH","LIST_ROW_HEIGHT_BY_DENSITY","compact","standard","comfortable","LIST_CELL_PADDING_BY_DENSITY","columnsRecordToArray","value","columnsRecord","Object","keys","map","key","_columnsRecord$key","colConfig","_objectSpread","field","data","length","firstRow","label","String","flex","buildDefaultColumns","resolveListRowHeight","density","Number","isFinite","resolvedDensity","ListDensity","resolveListCellPadding","resolveListRowSpacing","spacing","LIST_DEFAULT_NEAR_END_THRESHOLD","resolveListNearEndThreshold","_len","arguments","threshold","Array","_key","finalThreshold","filter","Math","max","apply","concat","_toConsumableArray","resolveListSpacerHeight","count","rowHeight","rowSpacing","resolveFlexColumnWidths","columns","selectable","containerWidth","pool","result","fill","undefined","col","width","minWidth","flexCols","i","_col$minWidth","w","_col$minWidth2","_col$maxWidth","push","min","maxWidth","Infinity","frozen","iter","active","f","_step","totalFlex","reduce","s","anyFrozen","_iterator","_createForOfIteratorHelper","n","done","item","raw","err","e","_step2","_iterator2","round","_i","_flexCols","fc","mapSxTableCell","resolvedWidth","sx"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as e,asyncToGenerator as n,regenerator as l,slicedToArray as t}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as r,jsxs as a}from"react/jsx-runtime";import{useCallback as i,useRef as o,useState as c,useEffect as d,useLayoutEffect as s,useMemo as u}from"react";import{TableContainer as h,Table as g,TableHead as m,TableRow as v,TableCell as f,Checkbox as p,TableBody as b,Box as S,Typography as x}from"@mui/material";import{useMergedConfig as C,useListSelection as H}from"./hooks.js";import{ViewListStyled as N,viewListClasses as y}from"./styled.js";import{CHECKBOX_COL_WIDTH as T,LIST_HEADER_HEIGHT as w,resolveListSpacerHeight as k,mapSxTableCell as M,getColumnWidth as R}from"./helpers.js";function z(e,n,l){var t=n[e.field],a=e.valueGetter?e.valueGetter(t,n,l):t,i={value:a,row:n,index:l,field:e.field};if(e.renderCell)return e.renderCell(i);var o=String(null!=a?a:"");return r(x,{variant:"body2",noWrap:!0,title:o,children:o})}function I(e,n,l,t){return a("colgroup",{children:[t&&r("col",{style:{width:T}}),e.map(function(e,t){var a=R(e,l,n);return r("col",{style:void 0!==a?{width:a}:void 0},t)})]})}function j(n){var l=function(e){return function(n){var l=C(e,n),t=l.columns.reduce(function(e,n){return e+(n.flex&&n.flex>0?n.flex:0)},0),i=l.columns.reduce(function(e,n){return"number"==typeof n.width?e+n.width:void 0===n.width&&void 0===n.flex&&"number"==typeof n.minWidth?e+n.minWidth:e},0),c=(l.selectable?T:0)+i,s=1==l.normalOptions.autoHeight,x=n.onSelectionChange,w=o(null);d(function(){s||void 0===n.scrollResetToken||w.current&&(w.current.scrollTop=0)},[n.scrollResetToken]);var k=H(n.value,e.getterId,l.selectable,n.selectedIds,x),R=k.selectedIds,j=k.isAllSelected,O=k.isSomeSelected,B=k.handleToggleAll,A=k.handleToggleRow,E=u(function(){var e=[y.root,y.normal];return s&&e.push(y.autoHeight),e.join(" ")},[s]);return r(N,{className:E,style:l.rootStyle,children:r(h,{ref:w,className:y.scrollContainer,onScroll:function(e){if(!s){var t,r=e.currentTarget;r.scrollHeight-r.scrollTop-r.clientHeight<=l.nearEndThreshold&&(null===(t=n.onNearEnd)||void 0===t||t.call(n))}},children:a(g,{size:"small",className:y.table,children:[I(l.columns,t,c,l.selectable),r(m,{className:y.tableHeader,children:a(v,{children:[l.selectable&&r(f,{padding:"checkbox",className:y.tableHeaderCell,children:r(p,{checked:j,indeterminate:O,onChange:B})}),l.columns.map(function(e){var n;return r(f,{className:y.tableHeaderCell,align:e.align,sx:M(e,t,c),children:null!==(n=e.label)&&void 0!==n?n:String(e.field)},String(e.field))})]})}),r(b,{children:n.value.map(function(n,i){var o,d=null!==(o=e.getterId(n,i))&&void 0!==o?o:i,s=R.includes(d),u=l.rowHeight,h=l.cellPadding;return a(v,{hover:!0,sx:{height:u},selected:s,children:[l.selectable&&r(f,{padding:"checkbox",className:y.tableBodyCell,sx:{height:u,padding:h},children:r(p,{checked:s,onChange:function(){return A(d)}})}),l.columns.map(function(e){return r(f,{className:y.tableBodyCell,align:e.align,sx:M(e,t,c,{height:u,padding:h}),children:r(S,{className:y.tableCellContent,children:z(e,n,i)})},"".concat(String(d),"-").concat(String(e.field)))})]},d)})})]})})})}}(n),i=function(e){return function(n){var l=C(e,n),i=l.columns.reduce(function(e,n){return e+(n.flex&&n.flex>0?n.flex:0)},0),x=l.columns.reduce(function(e,n){return"number"==typeof n.width?e+n.width:void 0===n.width&&void 0===n.flex&&"number"==typeof n.minWidth?e+n.minWidth:e},0),R=(l.selectable?T:0)+x,j=n.onSelectionChange,O=H(n.value,e.getterId,l.selectable,n.selectedIds,j),B=O.selectedIds,A=O.isAllSelected,E=O.isSomeSelected,P=O.handleToggleAll,W=O.handleToggleRow,G=o(null),_=o(null),q=o(!1),D=c(0),F=t(D,2),J=F[0],K=F[1],L=c(0),Q=t(L,2),U=Q[0],V=Q[1],X=c(w),Y=t(X,2),Z=Y[0],$=Y[1],ee=Math.max(1,l.virtualizedOptions.overscan);d(function(){void 0!==n.scrollResetToken&&(G.current&&(G.current.scrollTop=0),V(0))},[n.scrollResetToken]),s(function(){if(G.current){var e=G.current.scrollTop;e>0&&V(Math.round(e));var n=function(){var e,n,l=null!==(e=null===(n=G.current)||void 0===n?void 0:n.clientHeight)&&void 0!==e?e:0;K(function(e){return e===l?e:l})};n();var l=new ResizeObserver(function(){return n()});return l.observe(G.current),function(){return l.disconnect()}}},[]),s(function(){q.current=!1},[l.columns.length]),s(function(){var e,n;if(!q.current){var l=null!==(e=null===(n=_.current)||void 0===n?void 0:n.offsetHeight)&&void 0!==e?e:0;l>0&&(q.current=!0,$(l))}},[l.columns.length]);var ne=u(function(){var e=n.value.length;if(0===e)return{start:0,end:-1,topSpacerHeight:0,bottomSpacerHeight:0};if(0===J){var t=2*ee+1;return{start:0,end:Math.min(e-1,t),topSpacerHeight:0,bottomSpacerHeight:0}}var r=l.rowHeight,a=l.rowSpacing,i=Math.round(r),o=Math.round(a),c=i+o,d=U,s=Math.max(1,J-Z),u=Math.max(0,d-Z),h=Math.ceil(s/c),g=Math.max(0,Math.floor(u/c)-ee),m=Math.min(e-1,g+h+2*ee);return m===e-1&&u>0&&(g=Math.max(0,e-h-2*ee)),{start:g,end:m,topSpacerHeight:k(g,i,o),bottomSpacerHeight:k(e-m-1,i,o)}},[n.value.length,Z,ee,l,U,J]),le=ne.end>=ne.start?n.value.slice(ne.start,ne.end+1):[],te=[y.root,y.virtualized].filter(Boolean).join(" ");return r(N,{className:te,style:l.rootStyle,children:r(h,{ref:G,className:y.scrollContainer,onScroll:function(e){var t,r=e.currentTarget;V(Math.round(r.scrollTop)),r.scrollHeight-r.scrollTop-r.clientHeight<=l.nearEndThreshold&&(null===(t=n.onNearEnd)||void 0===t||t.call(n))},children:a(g,{size:"small",className:y.table,children:[I(l.columns,i,R,l.selectable),r(m,{className:y.tableHeader,children:a(v,{ref:_,children:[l.selectable&&r(f,{padding:"checkbox",className:y.tableHeaderCell,children:r(p,{checked:A,indeterminate:E,onChange:P})}),l.columns.map(function(e){var n;return r(f,{className:y.tableHeaderCell,align:e.align,sx:M(e,i,R),children:null!==(n=e.label)&&void 0!==n?n:String(e.field)},String(e.field))})]})}),a(b,{children:[ne.topSpacerHeight>0?r(v,{className:y.tableSpacerRow,children:r(f,{colSpan:l.columns.length+(l.selectable?1:0),className:y.tableSpacerCell,sx:{height:ne.topSpacerHeight,padding:0,border:0}})}):null,le.map(function(n,t){var o,c=ne.start+t,d=null!==(o=e.getterId(n,c))&&void 0!==o?o:c,s=B.includes(d),u=l.rowHeight,h=l.cellPadding;return a(v,{hover:!0,sx:{height:u},selected:s,children:[l.selectable&&r(f,{padding:"checkbox",className:y.tableBodyCell,sx:{height:u,padding:h},children:r(p,{checked:s,onChange:function(){return W(d)}})}),l.columns.map(function(e){return r(f,{className:y.tableBodyCell,align:e.align,sx:M(e,i,R,{height:u,padding:h}),children:r(S,{className:y.tableCellContent,children:z(e,n,c)})},"".concat(String(d),"-").concat(String(e.field)))})]},d)}),ne.bottomSpacerHeight>0?r(v,{className:y.tableSpacerRow,children:r(f,{colSpan:l.columns.length+(l.selectable?1:0),className:y.tableSpacerCell,sx:{height:ne.bottomSpacerHeight,padding:0,border:0}})}):null]})]})})})}}(n);return function(t){var a,o,c=null!==(a=null!==(o=t.renderStrategy)&&void 0!==o?o:n.renderStrategy)&&void 0!==a?a:"normal";return r("virtualized"===c?i:l,e({},t))}}function O(e){return function(t){var a,o,c,d=i(n(l().m(function e(){var n,r,a,i,o,c,d,s,u;return l().w(function(e){for(;;)switch(e.n){case 0:if("infiniteScroll"===t.loadMode){e.n=1;break}return e.a(2);case 1:if(null!==(n=t.pagination)&&void 0!==n&&n.hasNext){e.n=2;break}return e.a(2);case 2:if(!t.loading){e.n=3;break}return e.a(2);case 3:return d=null!==(r=null===(a=t.pagination)||void 0===a?void 0:a.page)&&void 0!==r?r:0,s=null!==(i=null===(o=t.pagination)||void 0===o?void 0:o.pageSize)&&void 0!==i?i:20,u=d+1,e.n=4,null===(c=t.onPageChange)||void 0===c?void 0:c.call(t,u,s);case 4:return e.a(2)}},e)})),[t.loadMode,null===(a=t.pagination)||void 0===a?void 0:a.hasNext,null===(o=t.pagination)||void 0===o?void 0:o.page,null===(c=t.pagination)||void 0===c?void 0:c.pageSize,t.loading,t.onPageChange]);return r(e,{value:t.value,columns:t.columns,density:t.density,spacing:t.spacing,renderStrategy:t.renderStrategy,normalOptions:t.normalOptions,virtualizedOptions:t.virtualizedOptions,onNearEnd:"infiniteScroll"===t.loadMode?d:void 0,selectable:t.selectable,selectedIds:t.selectedIds,onSelectionChange:t.onSelectionChange,scrollResetToken:t.scrollResetToken})}}export{j as createViewList,O as createViewListLoading,j as default};
1
+ import{objectSpread2 as e,asyncToGenerator as n,regenerator as r,slicedToArray as t}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l,jsxs as a}from"react/jsx-runtime";import{useCallback as i,useRef as o,useState as c,useEffect as u,useLayoutEffect as d,useMemo as s}from"react";import{TableContainer as h,Table as g,TableHead as v,TableRow as m,TableCell as f,Checkbox as p,TableBody as b,Box as S,Typography as x}from"@mui/material";import{useMergedConfig as H,useListSelection as C}from"./hooks.js";import{ViewListStyled as N,viewListClasses as M}from"./styled.js";import{CHECKBOX_COL_WIDTH as w,LIST_HEADER_HEIGHT as T,resolveListSpacerHeight as y,resolveFlexColumnWidths as k,mapSxTableCell as R}from"./helpers.js";function z(e,n,r){var t=n[e.field],a=e.valueGetter?e.valueGetter(t,n,r):t,i={value:a,row:n,index:r,field:e.field};if(e.renderCell)return e.renderCell(i);var o=String(null!=a?a:"");return l(x,{variant:"body2",noWrap:!0,title:o,children:o})}function I(e,n){return a("colgroup",{children:[n&&l("col",{style:{width:w}}),e.map(function(e,n){return l("col",{style:void 0!==e?{width:e}:void 0},n)})]})}function j(n){var r=function(e){return function(n){var r=H(e,n),i=(r.selectable?w:0)+r.columns.reduce(function(e,n){var r;return void 0!==n.width?e+("number"==typeof n.width?n.width:0):e+(null!==(r=n.minWidth)&&void 0!==r?r:0)},0),x=1==r.normalOptions.autoHeight,T=n.onSelectionChange,y=o(null),j=c(0),A=t(j,2),O=A[0],W=A[1];d(function(){if(y.current){var e=y.current,n=function(){return W(function(n){var r=e.clientWidth;return n===r?n:r})};n();var r=new ResizeObserver(n);return r.observe(e),function(){return r.disconnect()}}},[]);var B=s(function(){return k(r.columns,r.selectable,O)},[r.columns,r.selectable,O]);u(function(){x||void 0===n.scrollResetToken||y.current&&(y.current.scrollTop=0)},[n.scrollResetToken]);var E=C(n.value,e.getterId,r.selectable,n.selectedIds,T),P=E.selectedIds,F=E.isAllSelected,G=E.isSomeSelected,_=E.handleToggleAll,q=E.handleToggleRow,D=s(function(){var e=[M.root,M.normal];return x&&e.push(M.autoHeight),e.join(" ")},[x]);return l(N,{className:D,style:r.rootStyle,children:l(h,{ref:y,className:M.scrollContainer,onScroll:function(e){if(!x){var t,l=e.currentTarget;l.scrollHeight-l.scrollTop-l.clientHeight<=r.nearEndThreshold&&(null===(t=n.onNearEnd)||void 0===t||t.call(n))}},children:a(g,{size:"small",className:M.table,sx:{minWidth:i},children:[I(B,r.selectable),l(v,{className:M.tableHeader,children:a(m,{children:[r.selectable&&l(f,{padding:"checkbox",className:M.tableHeaderCell,children:l(p,{checked:F,indeterminate:G,onChange:_})}),r.columns.map(function(e,n){var r;return l(f,{className:M.tableHeaderCell,align:e.align,sx:R(e,B[n]),children:null!==(r=e.label)&&void 0!==r?r:String(e.field)},String(e.field))})]})}),l(b,{children:n.value.map(function(n,t){var i,o=null!==(i=e.getterId(n,t))&&void 0!==i?i:t,c=P.includes(o),u=r.rowHeight,d=r.cellPadding;return a(m,{hover:!0,sx:{height:u},selected:c,children:[r.selectable&&l(f,{padding:"checkbox",className:M.tableBodyCell,sx:{height:u,padding:d},children:l(p,{checked:c,onChange:function(){return q(o)}})}),r.columns.map(function(e,r){return l(f,{className:M.tableBodyCell,align:e.align,sx:R(e,B[r],{height:u,padding:d}),children:l(S,{className:M.tableCellContent,children:z(e,n,t)})},"".concat(String(o),"-").concat(String(e.field)))})]},o)})})]})})})}}(n),i=function(e){return function(n){var r=H(e,n),i=(r.selectable?w:0)+r.columns.reduce(function(e,n){var r;return void 0!==n.width?e+("number"==typeof n.width?n.width:0):e+(null!==(r=n.minWidth)&&void 0!==r?r:0)},0),x=n.onSelectionChange,j=C(n.value,e.getterId,r.selectable,n.selectedIds,x),A=j.selectedIds,O=j.isAllSelected,W=j.isSomeSelected,B=j.handleToggleAll,E=j.handleToggleRow,P=o(null),F=o(null),G=o(!1),_=o(null),q=o(0),D=c(0),J=t(D,2),K=J[0],L=J[1],Q=c(0),U=t(Q,2),V=U[0],X=U[1],Y=c(0),Z=t(Y,2),$=Z[0],ee=Z[1],ne=c(T),re=t(ne,2),te=re[0],le=re[1],ae=Math.max(1,r.virtualizedOptions.overscan),ie=o(0),oe=o(T),ce=o(ae),ue=o(0);u(function(){void 0!==n.scrollResetToken&&(P.current&&(P.current.scrollTop=0),q.current=0,ue.current=0,null!==_.current&&(cancelAnimationFrame(_.current),_.current=null),ee(0))},[n.scrollResetToken]),u(function(){return function(){null!==_.current&&(cancelAnimationFrame(_.current),_.current=null)}},[]),d(function(){if(P.current){var e=P.current.scrollTop;if(e>0){var n=Math.round(e);ue.current=n,ee(n)}var r=function(){var e=P.current;if(e){var n=e.clientHeight,r=e.clientWidth;L(function(e){return e===n?e:n}),X(function(e){return e===r?e:r})}};r();var t=new ResizeObserver(function(){return r()});return t.observe(P.current),function(){return t.disconnect()}}},[]),d(function(){G.current=!1},[r.columns.length]),d(function(){var e,n;if(!G.current){var r=null!==(e=null===(n=F.current)||void 0===n?void 0:n.offsetHeight)&&void 0!==e?e:0;r>0&&(G.current=!0,le(r))}},[r.columns.length]);var de=s(function(){var e=n.value.length;if(0===e)return{start:0,end:-1,topSpacerHeight:0,bottomSpacerHeight:0};if(0===K){var t=2*ae+1;return{start:0,end:Math.min(e-1,t),topSpacerHeight:0,bottomSpacerHeight:0}}var l=r.rowHeight,a=r.rowSpacing,i=Math.round(l),o=Math.round(a),c=i+o,u=$,d=Math.max(1,K-te),s=Math.max(0,u-te),h=Math.ceil(d/c),g=Math.max(0,Math.floor(s/c)-ae),v=Math.min(e-1,g+h+2*ae);return{start:g,end:v,topSpacerHeight:y(g,i,o),bottomSpacerHeight:y(e-v-1,i,o)}},[n.value.length,te,ae,r,$,K]);ie.current=Math.round(r.rowHeight)+Math.round(r.rowSpacing),oe.current=te,ce.current=ae;var se=s(function(){return k(r.columns,r.selectable,V)},[r.columns,r.selectable,V]),he=s(function(){return de.end>=de.start?n.value.slice(de.start,de.end+1):[]},[n.value,de.start,de.end]),ge=[M.root,M.virtualized].filter(Boolean).join(" ");return l(N,{className:ge,style:r.rootStyle,children:l(h,{ref:P,className:M.scrollContainer,onScroll:function(e){var t,l=e.currentTarget,a=Math.round(l.scrollTop);q.current=a,l.scrollHeight-l.scrollTop-l.clientHeight<=r.nearEndThreshold&&(null===(t=n.onNearEnd)||void 0===t||t.call(n)),null===_.current&&(_.current=requestAnimationFrame(function(){var e,n;_.current=null;var r=Math.round(null!==(e=null===(n=P.current)||void 0===n?void 0:n.scrollTop)&&void 0!==e?e:q.current);q.current=r;var t=ie.current,l=Math.max(0,ue.current-oe.current),a=t>0?Math.max(0,Math.floor(l/t)-ce.current):0,i=Math.max(0,r-oe.current);(t>0?Math.max(0,Math.floor(i/t)-ce.current):0)!==a&&(ue.current=r,ee(r))}))},children:a(g,{size:"small",className:M.table,sx:{minWidth:i},children:[I(se,r.selectable),l(v,{className:M.tableHeader,children:a(m,{ref:F,children:[r.selectable&&l(f,{padding:"checkbox",className:M.tableHeaderCell,children:l(p,{checked:O,indeterminate:W,onChange:B})}),r.columns.map(function(e,n){var r;return l(f,{className:M.tableHeaderCell,align:e.align,sx:R(e,se[n]),children:null!==(r=e.label)&&void 0!==r?r:String(e.field)},String(e.field))})]})}),a(b,{children:[de.topSpacerHeight>0?l(m,{className:M.tableSpacerRow,children:l(f,{colSpan:r.columns.length+(r.selectable?1:0),className:M.tableSpacerCell,sx:{height:de.topSpacerHeight,padding:0,border:0}})}):null,he.map(function(n,t){var i,o=de.start+t,c=null!==(i=e.getterId(n,o))&&void 0!==i?i:o,u=A.includes(c),d=r.rowHeight,s=r.cellPadding;return a(m,{hover:!0,sx:{height:d},selected:u,children:[r.selectable&&l(f,{padding:"checkbox",className:M.tableBodyCell,sx:{height:d,padding:s},children:l(p,{checked:u,onChange:function(){return E(c)}})}),r.columns.map(function(e,r){return l(f,{className:M.tableBodyCell,align:e.align,sx:R(e,se[r],{height:d,padding:s}),children:l(S,{className:M.tableCellContent,children:z(e,n,o)})},"".concat(String(c),"-").concat(String(e.field)))})]},c)}),de.bottomSpacerHeight>0?l(m,{className:M.tableSpacerRow,children:l(f,{colSpan:r.columns.length+(r.selectable?1:0),className:M.tableSpacerCell,sx:{height:de.bottomSpacerHeight,padding:0,border:0}})}):null]})]})})})}}(n);return function(t){var a,o,c=null!==(a=null!==(o=t.renderStrategy)&&void 0!==o?o:n.renderStrategy)&&void 0!==a?a:"normal";return l("virtualized"===c?i:r,e({},t))}}function A(e){return function(t){var a,o,c,u=i(n(r().m(function e(){var n,l,a,i,o,c,u,d,s;return r().w(function(e){for(;;)switch(e.n){case 0:if("infiniteScroll"===t.loadMode){e.n=1;break}return e.a(2);case 1:if(null!==(n=t.pagination)&&void 0!==n&&n.hasNext){e.n=2;break}return e.a(2);case 2:if(!t.loading){e.n=3;break}return e.a(2);case 3:return u=null!==(l=null===(a=t.pagination)||void 0===a?void 0:a.page)&&void 0!==l?l:0,d=null!==(i=null===(o=t.pagination)||void 0===o?void 0:o.pageSize)&&void 0!==i?i:20,s=u+1,e.n=4,null===(c=t.onPageChange)||void 0===c?void 0:c.call(t,s,d);case 4:return e.a(2)}},e)})),[t.loadMode,null===(a=t.pagination)||void 0===a?void 0:a.hasNext,null===(o=t.pagination)||void 0===o?void 0:o.page,null===(c=t.pagination)||void 0===c?void 0:c.pageSize,t.loading,t.onPageChange]);return l(e,{value:t.value,columns:t.columns,density:t.density,spacing:t.spacing,renderStrategy:t.renderStrategy,normalOptions:t.normalOptions,virtualizedOptions:t.virtualizedOptions,onNearEnd:"infiniteScroll"===t.loadMode?u:void 0,selectable:t.selectable,selectedIds:t.selectedIds,onSelectionChange:t.onSelectionChange,scrollResetToken:t.scrollResetToken})}}export{j as createViewList,A as createViewListLoading,j as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/data-surface/view-list/index.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\r\nimport { Box, Checkbox, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography } from '@mui/material'\r\nimport { useListSelection, useMergedConfig } from './hooks'\r\nimport { ViewListStyled, viewListClasses as classes } from './styled'\r\nimport { LIST_HEADER_HEIGHT, CHECKBOX_COL_WIDTH, getColumnWidth, mapSxTableCell, resolveListSpacerHeight } from './helpers'\r\n// types\r\nimport type { TableContainerProps } from '@mui/material'\r\nimport type { ComponentType, FC, ReactNode } from 'react'\r\nimport type { LoadingModeRule, TPagination } from '../types'\r\nimport type { IListCellParams, IViewListConfig, IViewListProps, TListColumn } from './types'\r\n\r\nexport * from './types'\r\n\r\n//#region Helpers\r\nfunction renderCellValue<T>(column: TListColumn<T>, row: T, index: number): ReactNode {\r\n const currentValue = (row as any)[column.field]\r\n const value = column.valueGetter ? column.valueGetter(currentValue, row, index) : currentValue\r\n const params: IListCellParams<T> = { value, row, index, field: column.field }\r\n if (column.renderCell) return column.renderCell(params)\r\n const valueLabel = String(value ?? '')\r\n return (\r\n <Typography variant='body2' noWrap title={valueLabel}>\r\n {valueLabel}\r\n </Typography>\r\n )\r\n}\r\n\r\nfunction renderColGroup<T>(cols: TListColumn<T>[], totalFlex: number, totalFixedPx: number, selectable: boolean) {\r\n return (\r\n <colgroup>\r\n {selectable && <col style={{ width: CHECKBOX_COL_WIDTH }} />}\r\n {cols.map((col, i) => {\r\n const w = getColumnWidth(col, totalFixedPx, totalFlex)\r\n return <col key={i} style={w !== undefined ? { width: w as any } : undefined} />\r\n })}\r\n </colgroup>\r\n )\r\n}\r\n\r\n//#endregion\r\n//#region Normal List\r\nfunction createViewListNormal<T>(config: IViewListConfig<T>) {\r\n const ViewListNormal: FC<IViewListProps<T>> = (props) => {\r\n const mergedConfig = useMergedConfig(config, props)\r\n const totalFlex = mergedConfig.columns.reduce((sum, col) => sum + (col.flex && col.flex > 0 ? col.flex : 0), 0)\r\n const totalFixedPxRaw = mergedConfig.columns.reduce((sum, col) => {\r\n if (typeof col.width === 'number') return sum + col.width\r\n if (col.width === undefined && col.flex === undefined && typeof col.minWidth === 'number') return sum + col.minWidth\r\n return sum\r\n }, 0)\r\n const totalFixedPx = (mergedConfig.selectable ? CHECKBOX_COL_WIDTH : 0) + totalFixedPxRaw\r\n\r\n const { normalOptions } = mergedConfig\r\n const isAutoHeight = normalOptions.autoHeight == true\r\n\r\n const onSelectionChange = props.onSelectionChange\r\n const scrollContainerRef = useRef<HTMLDivElement | null>(null)\r\n\r\n // Reset scroll to top when token changes\r\n useEffect(() => {\r\n if (isAutoHeight || props.scrollResetToken === undefined) return\r\n if (scrollContainerRef.current) scrollContainerRef.current.scrollTop = 0\r\n }, [props.scrollResetToken])\r\n\r\n const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n if (isAutoHeight) return\r\n const t = e.currentTarget\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n // Use selection hook to manage checkbox state and handlers\r\n const selection = useListSelection(props.value, config.getterId, mergedConfig.selectable, props.selectedIds, onSelectionChange)\r\n const { selectedIds, isAllSelected, isSomeSelected, handleToggleAll, handleToggleRow } = selection\r\n\r\n const rootClasses = useMemo(() => {\r\n const l = [classes.root, classes.normal]\r\n if (isAutoHeight) l.push(classes.autoHeight)\r\n return l.join(' ')\r\n }, [isAutoHeight])\r\n\r\n return (\r\n <ViewListStyled className={rootClasses} style={mergedConfig.rootStyle}>\r\n <TableContainer ref={scrollContainerRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n <Table size='small' className={classes.table}>\r\n {renderColGroup(mergedConfig.columns, totalFlex, totalFixedPx, mergedConfig.selectable)}\r\n <TableHead className={classes.tableHeader}>\r\n <TableRow>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell\r\n key={String(col.field)}\r\n className={classes.tableHeaderCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, totalFlex, totalFixedPx)}\r\n >\r\n {col.label ?? String(col.field)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {props.value.map((row, index) => {\r\n const rowKey = config.getterId(row, index) ?? index\r\n const isSelected = selectedIds.includes(rowKey)\r\n const { rowHeight, cellPadding } = mergedConfig\r\n return (\r\n <TableRow key={rowKey} hover sx={{ height: rowHeight }} selected={isSelected}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableBodyCell} sx={{ height: rowHeight, padding: cellPadding }}>\r\n <Checkbox checked={isSelected} onChange={() => handleToggleRow(rowKey)} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell\r\n key={`${String(rowKey)}-${String(col.field)}`}\r\n className={classes.tableBodyCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, totalFlex, totalFixedPx, { height: rowHeight, padding: cellPadding })}\r\n >\r\n <Box className={classes.tableCellContent}>{renderCellValue(col, row, index)}</Box>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n )\r\n })}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </ViewListStyled>\r\n )\r\n }\r\n return ViewListNormal\r\n}\r\n//#endregion\r\n//#region Virtualized List\r\nfunction createViewListVirtualized<T>(config: IViewListConfig<T>) {\r\n const ViewListVirtualized: FC<IViewListProps<T>> = (props) => {\r\n const mergedConfig = useMergedConfig(config, props)\r\n const totalFlex = mergedConfig.columns.reduce((sum, col) => sum + (col.flex && col.flex > 0 ? col.flex : 0), 0)\r\n const totalFixedPxRaw = mergedConfig.columns.reduce((sum, col) => {\r\n if (typeof col.width === 'number') return sum + col.width\r\n if (col.width === undefined && col.flex === undefined && typeof col.minWidth === 'number') return sum + col.minWidth\r\n return sum\r\n }, 0)\r\n const totalFixedPx = (mergedConfig.selectable ? CHECKBOX_COL_WIDTH : 0) + totalFixedPxRaw\r\n\r\n const onSelectionChange = props.onSelectionChange\r\n\r\n // Use selection hook to manage checkbox state and handlers\r\n const selection = useListSelection(props.value, config.getterId, mergedConfig.selectable, props.selectedIds, onSelectionChange)\r\n const { selectedIds, isAllSelected, isSomeSelected, handleToggleAll, handleToggleRow } = selection\r\n\r\n const wrapRef = useRef<HTMLDivElement | null>(null)\r\n const headerRowRef = useRef<HTMLTableRowElement | null>(null)\r\n const hasHeaderMeasuredRef = useRef(false)\r\n const [containerHeight, setContainerHeight] = useState(0)\r\n const [scrollTopState, setScrollTopState] = useState(0)\r\n const [headerHeight, setHeaderHeight] = useState(LIST_HEADER_HEIGHT)\r\n\r\n const overscan = Math.max(1, mergedConfig.virtualizedOptions.overscan)\r\n\r\n // Reset scroll to top when token changes\r\n useEffect(() => {\r\n if (props.scrollResetToken === undefined) return\r\n if (wrapRef.current) wrapRef.current.scrollTop = 0\r\n setScrollTopState(0)\r\n }, [props.scrollResetToken])\r\n\r\n const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n setScrollTopState(Math.round(t.scrollTop))\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n useLayoutEffect(() => {\r\n if (!wrapRef.current) return\r\n\r\n // Sync scrollTopState from actual DOM scroll position on mount.\r\n // Guards against stale state when the component is reused across navigations\r\n // (browser may have preserved a non-zero scrollTop while React state reset to 0).\r\n const domScrollTop = wrapRef.current.scrollTop\r\n if (domScrollTop > 0) setScrollTopState(Math.round(domScrollTop))\r\n\r\n const updateSize = () => {\r\n const nextHeight = wrapRef.current?.clientHeight ?? 0\r\n setContainerHeight((prev) => (prev === nextHeight ? prev : nextHeight))\r\n }\r\n\r\n updateSize()\r\n\r\n const observer = new ResizeObserver(() => updateSize())\r\n observer.observe(wrapRef.current)\r\n return () => observer.disconnect()\r\n }, [])\r\n\r\n useLayoutEffect(() => {\r\n hasHeaderMeasuredRef.current = false\r\n }, [mergedConfig.columns.length])\r\n\r\n useLayoutEffect(() => {\r\n if (hasHeaderMeasuredRef.current) return\r\n const measured = headerRowRef.current?.offsetHeight ?? 0\r\n if (measured > 0) {\r\n hasHeaderMeasuredRef.current = true\r\n setHeaderHeight(measured)\r\n }\r\n }, [mergedConfig.columns.length])\r\n\r\n const windowed = useMemo(() => {\r\n const totalItems = props.value.length\r\n if (totalItems === 0) {\r\n return { start: 0, end: -1, topSpacerHeight: 0, bottomSpacerHeight: 0 }\r\n }\r\n // Container not yet measured — render from start with no spacers to avoid\r\n // the bottom-clamp formula producing start > 0 with a stale visibleCount of 1.\r\n if (containerHeight === 0) {\r\n const defaultVisible = overscan * 2 + 1\r\n return { start: 0, end: Math.min(totalItems - 1, defaultVisible), topSpacerHeight: 0, bottomSpacerHeight: 0 }\r\n }\r\n const { rowHeight, rowSpacing } = mergedConfig\r\n const intRowHeight = Math.round(rowHeight)\r\n const intRowSpacing = Math.round(rowSpacing)\r\n const rowStride = intRowHeight + intRowSpacing\r\n const effectiveScrollTop = scrollTopState\r\n const safeViewportHeight = Math.max(1, containerHeight - headerHeight)\r\n const adjustedScrollTop = Math.max(0, effectiveScrollTop - headerHeight)\r\n const visibleCount = Math.ceil(safeViewportHeight / rowStride)\r\n let start = Math.max(0, Math.floor(adjustedScrollTop / rowStride) - overscan)\r\n let end = Math.min(totalItems - 1, start + visibleCount + overscan * 2)\r\n\r\n // When clamped at the bottom, pin start to a fixed value so that topSpacerHeight\r\n // does not change with small scrollTop fluctuations (sub-pixel zoom oscillation fix).\r\n // Guard: only apply when user has actually scrolled (adjustedScrollTop > 0).\r\n // Without this guard the clamp incorrectly sets start > 0 when scrollTop = 0\r\n // and totalItems is just enough to trigger end === totalItems-1 (e.g. 24 items, 11 visible).\r\n if (end === totalItems - 1 && adjustedScrollTop > 0) {\r\n start = Math.max(0, totalItems - visibleCount - overscan * 2)\r\n }\r\n\r\n const topSpacerHeight = resolveListSpacerHeight(start, intRowHeight, intRowSpacing)\r\n const bottomSpacerHeight = resolveListSpacerHeight(totalItems - end - 1, intRowHeight, intRowSpacing)\r\n\r\n return { start, end, topSpacerHeight, bottomSpacerHeight }\r\n }, [props.value.length, headerHeight, overscan, mergedConfig, scrollTopState, containerHeight])\r\n\r\n const rowsToRender = windowed.end >= windowed.start ? props.value.slice(windowed.start, windowed.end + 1) : []\r\n const rootClasses = [classes.root, classes.virtualized].filter(Boolean).join(' ')\r\n return (\r\n <ViewListStyled className={rootClasses} style={mergedConfig.rootStyle}>\r\n <TableContainer ref={wrapRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n <Table size='small' className={classes.table}>\r\n {renderColGroup(mergedConfig.columns, totalFlex, totalFixedPx, mergedConfig.selectable)}\r\n <TableHead className={classes.tableHeader}>\r\n <TableRow ref={headerRowRef}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell\r\n key={String(col.field)}\r\n className={classes.tableHeaderCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, totalFlex, totalFixedPx)}\r\n >\r\n {col.label ?? String(col.field)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {windowed.topSpacerHeight > 0 ? (\r\n <TableRow className={classes.tableSpacerRow}>\r\n <TableCell\r\n colSpan={mergedConfig.columns.length + (mergedConfig.selectable ? 1 : 0)}\r\n className={classes.tableSpacerCell}\r\n sx={{ height: windowed.topSpacerHeight, padding: 0, border: 0 }}\r\n />\r\n </TableRow>\r\n ) : null}\r\n\r\n {rowsToRender.map((row, offset) => {\r\n const index = windowed.start + offset\r\n const rowKey = config.getterId(row, index) ?? index\r\n const isSelected = selectedIds.includes(rowKey)\r\n const { rowHeight, cellPadding } = mergedConfig\r\n return (\r\n <TableRow key={rowKey} hover sx={{ height: rowHeight }} selected={isSelected}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableBodyCell} sx={{ height: rowHeight, padding: cellPadding }}>\r\n <Checkbox checked={isSelected} onChange={() => handleToggleRow(rowKey)} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell\r\n key={`${String(rowKey)}-${String(col.field)}`}\r\n className={classes.tableBodyCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, totalFlex, totalFixedPx, { height: rowHeight, padding: cellPadding })}\r\n >\r\n <Box className={classes.tableCellContent}>{renderCellValue(col, row, index)}</Box>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n )\r\n })}\r\n\r\n {windowed.bottomSpacerHeight > 0 ? (\r\n <TableRow className={classes.tableSpacerRow}>\r\n <TableCell\r\n colSpan={mergedConfig.columns.length + (mergedConfig.selectable ? 1 : 0)}\r\n className={classes.tableSpacerCell}\r\n sx={{ height: windowed.bottomSpacerHeight, padding: 0, border: 0 }}\r\n />\r\n </TableRow>\r\n ) : null}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </ViewListStyled>\r\n )\r\n }\r\n return ViewListVirtualized\r\n}\r\n//#endregion\r\n//#region Main\r\nexport function createViewList<T>(config: IViewListConfig<T>) {\r\n const ViewListNormal = createViewListNormal<T>(config)\r\n const ViewListVirtualized = createViewListVirtualized<T>(config)\r\n\r\n const ViewList: FC<IViewListProps<T>> = (props) => {\r\n const renderStrategy = props.renderStrategy ?? config.renderStrategy ?? 'normal'\r\n if (renderStrategy === 'virtualized') {\r\n return <ViewListVirtualized {...props} />\r\n }\r\n return <ViewListNormal {...props} />\r\n }\r\n return ViewList\r\n}\r\n\r\nexport interface IViewListLoadingProps<T> extends IViewListProps<T> {\r\n loadMode: LoadingModeRule\r\n loading?: boolean\r\n pagination?: TPagination\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n}\r\n\r\nexport function createViewListLoading<T>(ListComponent: ComponentType<IViewListProps<T>>) {\r\n const ViewListLoading: FC<IViewListLoadingProps<T>> = (props) => {\r\n const handleNearEnd = useCallback(async () => {\r\n if (props.loadMode !== 'infiniteScroll') return\r\n if (!props.pagination?.hasNext) return\r\n if (props.loading) return\r\n\r\n const currentPage = props.pagination?.page ?? 0\r\n const currentPageSize = props.pagination?.pageSize ?? 20\r\n const nextPage = currentPage + 1\r\n await props.onPageChange?.(nextPage, currentPageSize)\r\n }, [props.loadMode, props.pagination?.hasNext, props.pagination?.page, props.pagination?.pageSize, props.loading, props.onPageChange])\r\n\r\n return (\r\n <ListComponent\r\n value={props.value}\r\n columns={props.columns}\r\n density={props.density}\r\n spacing={props.spacing}\r\n renderStrategy={props.renderStrategy}\r\n normalOptions={props.normalOptions}\r\n virtualizedOptions={props.virtualizedOptions}\r\n onNearEnd={props.loadMode === 'infiniteScroll' ? handleNearEnd : undefined}\r\n selectable={props.selectable}\r\n selectedIds={props.selectedIds}\r\n onSelectionChange={props.onSelectionChange}\r\n scrollResetToken={props.scrollResetToken}\r\n />\r\n )\r\n }\r\n\r\n return ViewListLoading\r\n}\r\n\r\nexport default createViewList\r\n//#endregion\r\n"],"names":["renderCellValue","column","row","index","currentValue","field","value","valueGetter","params","renderCell","valueLabel","String","_jsx","Typography","variant","noWrap","title","renderColGroup","cols","totalFlex","totalFixedPx","selectable","_jsxs","style","width","CHECKBOX_COL_WIDTH","map","col","i","w","getColumnWidth","undefined","createViewList","config","ViewListNormal","props","mergedConfig","useMergedConfig","columns","reduce","sum","flex","totalFixedPxRaw","minWidth","isAutoHeight","normalOptions","autoHeight","onSelectionChange","scrollContainerRef","useRef","useEffect","scrollResetToken","current","scrollTop","selection","useListSelection","getterId","selectedIds","isAllSelected","isSomeSelected","handleToggleAll","handleToggleRow","rootClasses","useMemo","l","classes","root","normal","push","join","ViewListStyled","className","rootStyle","children","TableContainer","ref","scrollContainer","onScroll","e","_props$onNearEnd","t","currentTarget","scrollHeight","clientHeight","nearEndThreshold","onNearEnd","call","Table","size","table","TableHead","tableHeader","TableRow","TableCell","padding","tableHeaderCell","Checkbox","checked","indeterminate","onChange","_col$label","align","sx","mapSxTableCell","label","TableBody","_config$getterId","rowKey","isSelected","includes","rowHeight","cellPadding","hover","height","selected","tableBodyCell","Box","tableCellContent","concat","createViewListNormal","ViewListVirtualized","wrapRef","headerRowRef","hasHeaderMeasuredRef","_useState","useState","_useState2","_slicedToArray","containerHeight","setContainerHeight","_useState3","_useState4","scrollTopState","setScrollTopState","_useState5","LIST_HEADER_HEIGHT","_useState6","headerHeight","setHeaderHeight","overscan","Math","max","virtualizedOptions","useLayoutEffect","domScrollTop","round","updateSize","_wrapRef$current$clie","_wrapRef$current","nextHeight","prev","observer","ResizeObserver","observe","disconnect","length","_headerRowRef$current","_headerRowRef$current2","measured","offsetHeight","windowed","totalItems","start","end","topSpacerHeight","bottomSpacerHeight","defaultVisible","min","rowSpacing","intRowHeight","intRowSpacing","rowStride","effectiveScrollTop","safeViewportHeight","adjustedScrollTop","visibleCount","ceil","floor","resolveListSpacerHeight","rowsToRender","slice","virtualized","filter","Boolean","_props$onNearEnd2","_col$label2","tableSpacerRow","colSpan","tableSpacerCell","border","offset","_config$getterId2","createViewListVirtualized","_ref","_props$renderStrategy","renderStrategy","_objectSpread","createViewListLoading","ListComponent","_props$pagination4","_props$pagination5","_props$pagination6","handleNearEnd","useCallback","_asyncToGenerator","_regenerator","m","_callee","_props$pagination","_props$pagination$pag","_props$pagination2","_props$pagination$pag2","_props$pagination3","_props$onPageChange","currentPage","currentPageSize","nextPage","_context","n","loadMode","a","pagination","hasNext","loading","page","pageSize","onPageChange","density","spacing"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/data-surface/view-list/index.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\r\nimport { Box, Checkbox, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography } from '@mui/material'\r\nimport { useListSelection, useMergedConfig } from './hooks'\r\nimport { ViewListStyled, viewListClasses as classes } from './styled'\r\nimport { LIST_HEADER_HEIGHT, CHECKBOX_COL_WIDTH, mapSxTableCell, resolveFlexColumnWidths, resolveListSpacerHeight } from './helpers'\r\n// types\r\nimport type { TableContainerProps } from '@mui/material'\r\nimport type { ComponentType, FC, ReactNode } from 'react'\r\nimport type { LoadingModeRule, TPagination } from '../types'\r\nimport type { IListCellParams, IViewListConfig, IViewListProps, TListColumn } from './types'\r\n\r\nexport * from './types'\r\n\r\n//#region Helpers\r\nfunction renderCellValue<T>(column: TListColumn<T>, row: T, index: number): ReactNode {\r\n const currentValue = (row as any)[column.field]\r\n const value = column.valueGetter ? column.valueGetter(currentValue, row, index) : currentValue\r\n const params: IListCellParams<T> = { value, row, index, field: column.field }\r\n if (column.renderCell) return column.renderCell(params)\r\n const valueLabel = String(value ?? '')\r\n return (\r\n <Typography variant='body2' noWrap title={valueLabel}>\r\n {valueLabel}\r\n </Typography>\r\n )\r\n}\r\n\r\nfunction renderColGroup(resolvedWidths: Array<number | string | undefined>, selectable: boolean) {\r\n return (\r\n <colgroup>\r\n {selectable && <col style={{ width: CHECKBOX_COL_WIDTH }} />}\r\n {resolvedWidths.map((w, i) => (\r\n <col key={i} style={w !== undefined ? { width: w as any } : undefined} />\r\n ))}\r\n </colgroup>\r\n )\r\n}\r\n\r\n//#endregion\r\n//#region Normal List\r\nfunction createViewListNormal<T>(config: IViewListConfig<T>) {\r\n const ViewListNormal: FC<IViewListProps<T>> = (props) => {\r\n const mergedConfig = useMergedConfig(config, props)\r\n const tableMinWidth =\r\n (mergedConfig.selectable ? CHECKBOX_COL_WIDTH : 0) +\r\n mergedConfig.columns.reduce((sum, col) => {\r\n if (col.width !== undefined) return sum + (typeof col.width === 'number' ? col.width : 0)\r\n return sum + (col.minWidth ?? 0)\r\n }, 0)\r\n\r\n const { normalOptions } = mergedConfig\r\n const isAutoHeight = normalOptions.autoHeight == true\r\n\r\n const onSelectionChange = props.onSelectionChange\r\n const scrollContainerRef = useRef<HTMLDivElement | null>(null)\r\n const [containerWidth, setContainerWidth] = useState(0)\r\n\r\n useLayoutEffect(() => {\r\n if (!scrollContainerRef.current) return\r\n const el = scrollContainerRef.current\r\n const update = () =>\r\n setContainerWidth((prev) => {\r\n const next = el.clientWidth\r\n return prev === next ? prev : next\r\n })\r\n update()\r\n const observer = new ResizeObserver(update)\r\n observer.observe(el)\r\n return () => observer.disconnect()\r\n }, [])\r\n\r\n const resolvedWidths = useMemo(\r\n () => resolveFlexColumnWidths(mergedConfig.columns, mergedConfig.selectable, containerWidth),\r\n [mergedConfig.columns, mergedConfig.selectable, containerWidth]\r\n )\r\n\r\n // Reset scroll to top when token changes\r\n useEffect(() => {\r\n if (isAutoHeight || props.scrollResetToken === undefined) return\r\n if (scrollContainerRef.current) scrollContainerRef.current.scrollTop = 0\r\n }, [props.scrollResetToken])\r\n\r\n const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n if (isAutoHeight) return\r\n const t = e.currentTarget\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n // Use selection hook to manage checkbox state and handlers\r\n const selection = useListSelection(props.value, config.getterId, mergedConfig.selectable, props.selectedIds, onSelectionChange)\r\n const { selectedIds, isAllSelected, isSomeSelected, handleToggleAll, handleToggleRow } = selection\r\n\r\n const rootClasses = useMemo(() => {\r\n const l = [classes.root, classes.normal]\r\n if (isAutoHeight) l.push(classes.autoHeight)\r\n return l.join(' ')\r\n }, [isAutoHeight])\r\n\r\n return (\r\n <ViewListStyled className={rootClasses} style={mergedConfig.rootStyle}>\r\n <TableContainer ref={scrollContainerRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n <Table size='small' className={classes.table} sx={{ minWidth: tableMinWidth }}>\r\n {renderColGroup(resolvedWidths, mergedConfig.selectable)}\r\n <TableHead className={classes.tableHeader}>\r\n <TableRow>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col, colIndex) => (\r\n <TableCell\r\n key={String(col.field)}\r\n className={classes.tableHeaderCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, resolvedWidths[colIndex])}\r\n >\r\n {col.label ?? String(col.field)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {props.value.map((row, index) => {\r\n const rowKey = config.getterId(row, index) ?? index\r\n const isSelected = selectedIds.includes(rowKey)\r\n const { rowHeight, cellPadding } = mergedConfig\r\n return (\r\n <TableRow key={rowKey} hover sx={{ height: rowHeight }} selected={isSelected}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableBodyCell} sx={{ height: rowHeight, padding: cellPadding }}>\r\n <Checkbox checked={isSelected} onChange={() => handleToggleRow(rowKey)} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col, colIndex) => (\r\n <TableCell\r\n key={`${String(rowKey)}-${String(col.field)}`}\r\n className={classes.tableBodyCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, resolvedWidths[colIndex], { height: rowHeight, padding: cellPadding })}\r\n >\r\n <Box className={classes.tableCellContent}>{renderCellValue(col, row, index)}</Box>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n )\r\n })}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </ViewListStyled>\r\n )\r\n }\r\n return ViewListNormal\r\n}\r\n//#endregion\r\n//#region Virtualized List\r\nfunction createViewListVirtualized<T>(config: IViewListConfig<T>) {\r\n const ViewListVirtualized: FC<IViewListProps<T>> = (props) => {\r\n const mergedConfig = useMergedConfig(config, props)\r\n const tableMinWidth =\r\n (mergedConfig.selectable ? CHECKBOX_COL_WIDTH : 0) +\r\n mergedConfig.columns.reduce((sum, col) => {\r\n if (col.width !== undefined) return sum + (typeof col.width === 'number' ? col.width : 0)\r\n return sum + (col.minWidth ?? 0)\r\n }, 0)\r\n\r\n const onSelectionChange = props.onSelectionChange\r\n\r\n // Use selection hook to manage checkbox state and handlers\r\n const selection = useListSelection(props.value, config.getterId, mergedConfig.selectable, props.selectedIds, onSelectionChange)\r\n const { selectedIds, isAllSelected, isSomeSelected, handleToggleAll, handleToggleRow } = selection\r\n\r\n const wrapRef = useRef<HTMLDivElement | null>(null)\r\n const headerRowRef = useRef<HTMLTableRowElement | null>(null)\r\n const hasHeaderMeasuredRef = useRef(false)\r\n // Refs for RAF-throttled scroll: scrollRafRef guards duplicate frames, latestScrollTopRef\r\n // always holds the most recent scrollTop so the RAF reads the freshest value even if\r\n // intermediate scroll events were skipped.\r\n const scrollRafRef = useRef<number | null>(null)\r\n const latestScrollTopRef = useRef(0)\r\n const [containerHeight, setContainerHeight] = useState(0)\r\n const [containerWidth, setContainerWidth] = useState(0)\r\n const [scrollTopState, setScrollTopState] = useState(0)\r\n const [headerHeight, setHeaderHeight] = useState(LIST_HEADER_HEIGHT)\r\n\r\n const overscan = Math.max(1, mergedConfig.virtualizedOptions.overscan)\r\n // Refs for window-change detection — updated on every render so the handleScroll RAF reads fresh values\r\n // without needing to re-create the callback. The initial value is overwritten immediately on first render.\r\n const rowStrideRef = useRef(0)\r\n const headerHeightScrollRef = useRef(LIST_HEADER_HEIGHT)\r\n const overscanScrollRef = useRef(overscan)\r\n // lastFiredScrollTopRef tracks the DOM scrollTop at the last actual setScrollTopState call.\r\n // The skip check compares both sides in DOM-coordinate space so non-scroll renders cannot\r\n // reset the reference point into a stale state-coordinate value (causing a stuck dead zone).\r\n const lastFiredScrollTopRef = useRef(0)\r\n\r\n // Reset scroll to top when token changes\r\n useEffect(() => {\r\n if (props.scrollResetToken === undefined) return\r\n if (wrapRef.current) wrapRef.current.scrollTop = 0\r\n latestScrollTopRef.current = 0\r\n lastFiredScrollTopRef.current = 0\r\n if (scrollRafRef.current !== null) {\r\n cancelAnimationFrame(scrollRafRef.current)\r\n scrollRafRef.current = null\r\n }\r\n setScrollTopState(0)\r\n }, [props.scrollResetToken])\r\n\r\n const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n const newScrollTop = Math.round(t.scrollTop)\r\n latestScrollTopRef.current = newScrollTop\r\n\r\n // nearEnd check is urgent — fire immediately outside RAF\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n\r\n // Throttle virtualization state updates to one per animation frame.\r\n if (scrollRafRef.current !== null) return\r\n scrollRafRef.current = requestAnimationFrame(() => {\r\n scrollRafRef.current = null\r\n // Always read the real DOM scrollTop inside the RAF — do NOT rely on latestScrollTopRef.\r\n // latestScrollTopRef can be stale if browser scroll-anchoring silently adjusts scrollTop\r\n // (e.g. when bottomSpacer grows after loadMore) without firing a new scroll event.\r\n const domScrollTop = Math.round(wrapRef.current?.scrollTop ?? latestScrollTopRef.current)\r\n latestScrollTopRef.current = domScrollTop\r\n\r\n // Skip scroll state update if the virtual window (start row) wouldn't change.\r\n // Both sides are computed from DOM-coordinate values (lastFiredScrollTopRef and domScrollTop)\r\n // so non-scroll renders cannot reset the dead zone into a stale state-coordinate value.\r\n const rs = rowStrideRef.current\r\n const lastFiredAdj = Math.max(0, lastFiredScrollTopRef.current - headerHeightScrollRef.current)\r\n const lastFiredStart = rs > 0 ? Math.max(0, Math.floor(lastFiredAdj / rs) - overscanScrollRef.current) : 0\r\n const adjustedScrollTop = Math.max(0, domScrollTop - headerHeightScrollRef.current)\r\n const newStart = rs > 0 ? Math.max(0, Math.floor(adjustedScrollTop / rs) - overscanScrollRef.current) : 0\r\n if (newStart === lastFiredStart) return\r\n\r\n lastFiredScrollTopRef.current = domScrollTop\r\n setScrollTopState(domScrollTop)\r\n })\r\n }\r\n\r\n // Cancel any pending scroll RAF on unmount to prevent setState on an unmounted component.\r\n useEffect(() => {\r\n return () => {\r\n if (scrollRafRef.current !== null) {\r\n cancelAnimationFrame(scrollRafRef.current)\r\n scrollRafRef.current = null\r\n }\r\n }\r\n }, [])\r\n\r\n useLayoutEffect(() => {\r\n if (!wrapRef.current) return\r\n\r\n // Sync scrollTopState from actual DOM scroll position on mount.\r\n // Guards against stale state when the component is reused across navigations\r\n // (browser may have preserved a non-zero scrollTop while React state reset to 0).\r\n const domScrollTop = wrapRef.current.scrollTop\r\n if (domScrollTop > 0) {\r\n const rounded = Math.round(domScrollTop)\r\n lastFiredScrollTopRef.current = rounded\r\n setScrollTopState(rounded)\r\n }\r\n\r\n const updateSize = () => {\r\n const el = wrapRef.current\r\n if (!el) return\r\n const nextHeight = el.clientHeight\r\n const nextWidth = el.clientWidth\r\n setContainerHeight((prev) => (prev === nextHeight ? prev : nextHeight))\r\n setContainerWidth((prev) => (prev === nextWidth ? prev : nextWidth))\r\n }\r\n\r\n updateSize()\r\n\r\n const observer = new ResizeObserver(() => updateSize())\r\n observer.observe(wrapRef.current)\r\n return () => observer.disconnect()\r\n }, [])\r\n\r\n useLayoutEffect(() => {\r\n hasHeaderMeasuredRef.current = false\r\n }, [mergedConfig.columns.length])\r\n\r\n useLayoutEffect(() => {\r\n if (hasHeaderMeasuredRef.current) return\r\n const measured = headerRowRef.current?.offsetHeight ?? 0\r\n if (measured > 0) {\r\n hasHeaderMeasuredRef.current = true\r\n setHeaderHeight(measured)\r\n }\r\n }, [mergedConfig.columns.length])\r\n\r\n const windowed = useMemo(() => {\r\n const totalItems = props.value.length\r\n if (totalItems === 0) {\r\n return { start: 0, end: -1, topSpacerHeight: 0, bottomSpacerHeight: 0 }\r\n }\r\n // Container not yet measured — render from start with no spacers to avoid\r\n // the bottom-clamp formula producing start > 0 with a stale visibleCount of 1.\r\n if (containerHeight === 0) {\r\n const defaultVisible = overscan * 2 + 1\r\n return { start: 0, end: Math.min(totalItems - 1, defaultVisible), topSpacerHeight: 0, bottomSpacerHeight: 0 }\r\n }\r\n const { rowHeight, rowSpacing } = mergedConfig\r\n const intRowHeight = Math.round(rowHeight)\r\n const intRowSpacing = Math.round(rowSpacing)\r\n const rowStride = intRowHeight + intRowSpacing\r\n const effectiveScrollTop = scrollTopState\r\n const safeViewportHeight = Math.max(1, containerHeight - headerHeight)\r\n const adjustedScrollTop = Math.max(0, effectiveScrollTop - headerHeight)\r\n const visibleCount = Math.ceil(safeViewportHeight / rowStride)\r\n let start = Math.max(0, Math.floor(adjustedScrollTop / rowStride) - overscan)\r\n let end = Math.min(totalItems - 1, start + visibleCount + overscan * 2)\r\n\r\n // NOTE: The bottom-clamp that previously pinned start when end===totalItems-1\r\n // has been removed. That clamp decoupled start from scrollTopState, causing a\r\n // visual jump when loadMore added items (clamp released → start changed even\r\n // though scrollTopState was unchanged).\r\n\r\n const topSpacerHeight = resolveListSpacerHeight(start, intRowHeight, intRowSpacing)\r\n const bottomSpacerHeight = resolveListSpacerHeight(totalItems - end - 1, intRowHeight, intRowSpacing)\r\n\r\n return { start, end, topSpacerHeight, bottomSpacerHeight }\r\n }, [props.value.length, headerHeight, overscan, mergedConfig, scrollTopState, containerHeight])\r\n\r\n // Keep refs in sync for RAF window-change detection (read in handleScroll, never during render).\r\n rowStrideRef.current = Math.round(mergedConfig.rowHeight) + Math.round(mergedConfig.rowSpacing)\r\n headerHeightScrollRef.current = headerHeight\r\n overscanScrollRef.current = overscan\r\n\r\n const resolvedWidths = useMemo(\r\n () => resolveFlexColumnWidths(mergedConfig.columns, mergedConfig.selectable, containerWidth),\r\n [mergedConfig.columns, mergedConfig.selectable, containerWidth]\r\n )\r\n\r\n const rowsToRender = useMemo(\r\n () => (windowed.end >= windowed.start ? props.value.slice(windowed.start, windowed.end + 1) : []),\r\n [props.value, windowed.start, windowed.end]\r\n )\r\n const rootClasses = [classes.root, classes.virtualized].filter(Boolean).join(' ')\r\n return (\r\n <ViewListStyled className={rootClasses} style={mergedConfig.rootStyle}>\r\n <TableContainer ref={wrapRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n <Table size='small' className={classes.table} sx={{ minWidth: tableMinWidth }}>\r\n {renderColGroup(resolvedWidths, mergedConfig.selectable)}\r\n <TableHead className={classes.tableHeader}>\r\n <TableRow ref={headerRowRef}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col, colIndex) => (\r\n <TableCell\r\n key={String(col.field)}\r\n className={classes.tableHeaderCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, resolvedWidths[colIndex])}\r\n >\r\n {col.label ?? String(col.field)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {windowed.topSpacerHeight > 0 ? (\r\n <TableRow className={classes.tableSpacerRow}>\r\n <TableCell\r\n colSpan={mergedConfig.columns.length + (mergedConfig.selectable ? 1 : 0)}\r\n className={classes.tableSpacerCell}\r\n sx={{ height: windowed.topSpacerHeight, padding: 0, border: 0 }}\r\n />\r\n </TableRow>\r\n ) : null}\r\n\r\n {rowsToRender.map((row, offset) => {\r\n const index = windowed.start + offset\r\n const rowKey = config.getterId(row, index) ?? index\r\n const isSelected = selectedIds.includes(rowKey)\r\n const { rowHeight, cellPadding } = mergedConfig\r\n return (\r\n <TableRow key={rowKey} hover sx={{ height: rowHeight }} selected={isSelected}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableBodyCell} sx={{ height: rowHeight, padding: cellPadding }}>\r\n <Checkbox checked={isSelected} onChange={() => handleToggleRow(rowKey)} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col, colIndex) => (\r\n <TableCell\r\n key={`${String(rowKey)}-${String(col.field)}`}\r\n className={classes.tableBodyCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, resolvedWidths[colIndex], { height: rowHeight, padding: cellPadding })}\r\n >\r\n <Box className={classes.tableCellContent}>{renderCellValue(col, row, index)}</Box>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n )\r\n })}\r\n\r\n {windowed.bottomSpacerHeight > 0 ? (\r\n <TableRow className={classes.tableSpacerRow}>\r\n <TableCell\r\n colSpan={mergedConfig.columns.length + (mergedConfig.selectable ? 1 : 0)}\r\n className={classes.tableSpacerCell}\r\n sx={{ height: windowed.bottomSpacerHeight, padding: 0, border: 0 }}\r\n />\r\n </TableRow>\r\n ) : null}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </ViewListStyled>\r\n )\r\n }\r\n return ViewListVirtualized\r\n}\r\n//#endregion\r\n//#region Main\r\nexport function createViewList<T>(config: IViewListConfig<T>) {\r\n const ViewListNormal = createViewListNormal<T>(config)\r\n const ViewListVirtualized = createViewListVirtualized<T>(config)\r\n\r\n const ViewList: FC<IViewListProps<T>> = (props) => {\r\n const renderStrategy = props.renderStrategy ?? config.renderStrategy ?? 'normal'\r\n if (renderStrategy === 'virtualized') {\r\n return <ViewListVirtualized {...props} />\r\n }\r\n return <ViewListNormal {...props} />\r\n }\r\n return ViewList\r\n}\r\n\r\nexport interface IViewListLoadingProps<T> extends IViewListProps<T> {\r\n loadMode: LoadingModeRule\r\n loading?: boolean\r\n pagination?: TPagination\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n}\r\n\r\nexport function createViewListLoading<T>(ListComponent: ComponentType<IViewListProps<T>>) {\r\n const ViewListLoading: FC<IViewListLoadingProps<T>> = (props) => {\r\n const handleNearEnd = useCallback(async () => {\r\n if (props.loadMode !== 'infiniteScroll') return\r\n if (!props.pagination?.hasNext) return\r\n if (props.loading) return\r\n\r\n const currentPage = props.pagination?.page ?? 0\r\n const currentPageSize = props.pagination?.pageSize ?? 20\r\n const nextPage = currentPage + 1\r\n await props.onPageChange?.(nextPage, currentPageSize)\r\n }, [props.loadMode, props.pagination?.hasNext, props.pagination?.page, props.pagination?.pageSize, props.loading, props.onPageChange])\r\n\r\n return (\r\n <ListComponent\r\n value={props.value}\r\n columns={props.columns}\r\n density={props.density}\r\n spacing={props.spacing}\r\n renderStrategy={props.renderStrategy}\r\n normalOptions={props.normalOptions}\r\n virtualizedOptions={props.virtualizedOptions}\r\n onNearEnd={props.loadMode === 'infiniteScroll' ? handleNearEnd : undefined}\r\n selectable={props.selectable}\r\n selectedIds={props.selectedIds}\r\n onSelectionChange={props.onSelectionChange}\r\n scrollResetToken={props.scrollResetToken}\r\n />\r\n )\r\n }\r\n\r\n return ViewListLoading\r\n}\r\n\r\nexport default createViewList\r\n//#endregion\r\n"],"names":["renderCellValue","column","row","index","currentValue","field","value","valueGetter","params","renderCell","valueLabel","String","_jsx","Typography","variant","noWrap","title","renderColGroup","resolvedWidths","selectable","_jsxs","style","width","CHECKBOX_COL_WIDTH","map","w","i","undefined","createViewList","config","ViewListNormal","props","mergedConfig","useMergedConfig","tableMinWidth","columns","reduce","sum","col","_col$minWidth","minWidth","isAutoHeight","normalOptions","autoHeight","onSelectionChange","scrollContainerRef","useRef","_useState","useState","_useState2","_slicedToArray","containerWidth","setContainerWidth","useLayoutEffect","current","el","update","prev","next","clientWidth","observer","ResizeObserver","observe","disconnect","useMemo","resolveFlexColumnWidths","useEffect","scrollResetToken","scrollTop","selection","useListSelection","getterId","selectedIds","isAllSelected","isSomeSelected","handleToggleAll","handleToggleRow","rootClasses","l","classes","root","normal","push","join","ViewListStyled","className","rootStyle","children","TableContainer","ref","scrollContainer","onScroll","e","_props$onNearEnd","t","currentTarget","scrollHeight","clientHeight","nearEndThreshold","onNearEnd","call","Table","size","table","sx","TableHead","tableHeader","TableRow","TableCell","padding","tableHeaderCell","Checkbox","checked","indeterminate","onChange","colIndex","_col$label","align","mapSxTableCell","label","TableBody","_config$getterId","rowKey","isSelected","includes","rowHeight","cellPadding","hover","height","selected","tableBodyCell","Box","tableCellContent","concat","createViewListNormal","ViewListVirtualized","_col$minWidth2","wrapRef","headerRowRef","hasHeaderMeasuredRef","scrollRafRef","latestScrollTopRef","_useState3","_useState4","containerHeight","setContainerHeight","_useState5","_useState6","_useState7","_useState8","scrollTopState","setScrollTopState","_useState9","LIST_HEADER_HEIGHT","_useState0","headerHeight","setHeaderHeight","overscan","Math","max","virtualizedOptions","rowStrideRef","headerHeightScrollRef","overscanScrollRef","lastFiredScrollTopRef","cancelAnimationFrame","domScrollTop","rounded","round","updateSize","nextHeight","nextWidth","length","_headerRowRef$current","_headerRowRef$current2","measured","offsetHeight","windowed","totalItems","start","end","topSpacerHeight","bottomSpacerHeight","defaultVisible","min","rowSpacing","intRowHeight","intRowSpacing","rowStride","effectiveScrollTop","safeViewportHeight","adjustedScrollTop","visibleCount","ceil","floor","resolveListSpacerHeight","rowsToRender","slice","virtualized","filter","Boolean","_props$onNearEnd2","newScrollTop","requestAnimationFrame","_wrapRef$current$scro","_wrapRef$current","rs","lastFiredAdj","lastFiredStart","_col$label2","tableSpacerRow","colSpan","tableSpacerCell","border","offset","_config$getterId2","createViewListVirtualized","_ref","_props$renderStrategy","renderStrategy","_objectSpread","createViewListLoading","ListComponent","_props$pagination4","_props$pagination5","_props$pagination6","handleNearEnd","useCallback","_asyncToGenerator","_regenerator","m","_callee","_props$pagination","_props$pagination$pag","_props$pagination2","_props$pagination$pag2","_props$pagination3","_props$onPageChange","currentPage","currentPageSize","nextPage","_context","n","loadMode","a","pagination","hasNext","loading","page","pageSize","onPageChange","density","spacing"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{styled as t,Box as o,alpha as a}from"@mui/material";var i="--DinoViewList-rowSpacing",r={root:"DinoViewList-root",normal:"DinoViewList-normal",virtualized:"DinoViewList-virtualized",autoHeight:"DinoViewList-autoHeight",scrollContainer:"DinoViewList-scrollContainer",table:"DinoViewList-table",tableHeader:"DinoViewList-tableHeader",tableHeaderCell:"DinoViewList-tableHeaderCell",tableBodyCell:"DinoViewList-tableBodyCell",tableSpacerRow:"DinoViewList-tableSpacerRow",tableSpacerCell:"DinoViewList-tableSpacerCell",tableCellContent:"DinoViewList-tableCellContent"},l=r,n=t(o)(function(t){var o=t.theme,r=o.palette.mode,n=a(o.palette.common.black,"dark"===r?.24:.08),c="dark"===r?o.palette.grey[800]:o.palette.grey[50];return e(e(e(e(e(e(e(e(e({},"&.".concat(l.root),{position:"relative",width:"100%",height:"100%",overflow:"hidden"}),".".concat(l.scrollContainer),{position:"absolute",inset:0,overflowY:"auto",padding:o.spacing(0,.5),margin:o.spacing(0,-.5),"&::-webkit-scrollbar":{width:6,height:6},"&::-webkit-scrollbar-thumb":{backgroundColor:o.palette.grey[400]},"&::-webkit-scrollbar-thumb:hover":{backgroundColor:o.palette.grey[600]},"&::-webkit-scrollbar-track":{backgroundColor:o.palette.grey[200],borderRadius:4},"&::-webkit-scrollbar-track:hover":{backgroundColor:o.palette.grey[300]}}),".".concat(l.table),{tableLayout:"fixed",width:"100%",borderCollapse:"separate",borderSpacing:"0 var(".concat(i,", ").concat(o.spacing(.5),")"),marginTop:"calc(var(".concat(i,", ").concat(o.spacing(.5),") * -1)")}),".".concat(l.tableHeader),{position:"sticky",top:0,zIndex:2,backgroundColor:c}),".".concat(l.tableHeaderCell),{fontWeight:500,paddingTop:o.spacing(1.5),paddingBottom:o.spacing(1.5),overflow:"hidden",borderBottom:"unset"}),".".concat(l.tableBodyCell),{overflow:"hidden",borderTop:"0.5px dashed ".concat(n),borderBottom:"0.5px dashed ".concat(n),"&:first-of-type":{borderLeft:"0.5px dashed ".concat(n),borderRadius:o.spacing(.5,0,0,.5)},"&:last-of-type":{borderRight:"0.5px dashed ".concat(n),borderRadius:o.spacing(0,.5,.5,0)}}),".".concat(l.tableCellContent),{minWidth:0,width:"100%"}),"&.".concat(l.virtualized),{boxSizing:"border-box"}),"&.".concat(l.normal,".").concat(l.autoHeight),e({height:"auto",overflow:"visible"},".".concat(l.scrollContainer),{position:"static",inset:"auto",overflowY:"visible"}))});export{i as VIEW_LIST_ROW_SPACING_VAR,n as ViewListStyled,r as viewListClasses};
1
+ import{defineProperty as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{styled as o,Box as t,alpha as a}from"@mui/material";var i="--DinoViewList-rowSpacing",r={root:"DinoViewList-root",normal:"DinoViewList-normal",virtualized:"DinoViewList-virtualized",autoHeight:"DinoViewList-autoHeight",scrollContainer:"DinoViewList-scrollContainer",table:"DinoViewList-table",tableHeader:"DinoViewList-tableHeader",tableHeaderCell:"DinoViewList-tableHeaderCell",tableBodyCell:"DinoViewList-tableBodyCell",tableSpacerRow:"DinoViewList-tableSpacerRow",tableSpacerCell:"DinoViewList-tableSpacerCell",tableCellContent:"DinoViewList-tableCellContent"},l=r,n=o(t)(function(o){var t=o.theme,r=t.palette.mode,n=a(t.palette.common.black,"dark"===r?.24:.08),c="dark"===r?t.palette.grey[800]:t.palette.grey[50];return e(e(e(e(e(e(e(e(e({},"&.".concat(l.root),{position:"relative",width:"100%",height:"100%",overflow:"hidden"}),".".concat(l.scrollContainer),{position:"absolute",inset:0,overflowY:"auto",overflowX:"auto",overflowAnchor:"none","&::-webkit-scrollbar":{width:6,height:6},"&::-webkit-scrollbar-thumb":{backgroundColor:t.palette.grey[400]},"&::-webkit-scrollbar-thumb:hover":{backgroundColor:t.palette.grey[600]},"&::-webkit-scrollbar-track":{backgroundColor:t.palette.grey[200],borderRadius:4},"&::-webkit-scrollbar-track:hover":{backgroundColor:t.palette.grey[300]}}),".".concat(l.table),{tableLayout:"fixed",width:"100%",borderCollapse:"separate",borderSpacing:"0 var(".concat(i,", ").concat(t.spacing(.5),")"),marginTop:"calc(var(".concat(i,", ").concat(t.spacing(.5),") * -1)")}),".".concat(l.tableHeader),{position:"sticky",top:0,zIndex:2,backgroundColor:c}),".".concat(l.tableHeaderCell),{fontWeight:500,paddingTop:t.spacing(1.5),paddingBottom:t.spacing(1.5),overflow:"hidden",borderBottom:"unset"}),".".concat(l.tableBodyCell),{overflow:"hidden",borderTop:"0.5px dashed ".concat(n),borderBottom:"0.5px dashed ".concat(n),"&:first-of-type":{borderLeft:"0.5px dashed ".concat(n),borderRadius:t.spacing(.5,0,0,.5)},"&:last-of-type":{borderRight:"0.5px dashed ".concat(n),borderRadius:t.spacing(0,.5,.5,0)}}),".".concat(l.tableCellContent),{minWidth:0,width:"100%"}),"&.".concat(l.virtualized),{boxSizing:"border-box"}),"&.".concat(l.normal,".").concat(l.autoHeight),e({height:"auto",overflow:"visible"},".".concat(l.scrollContainer),{position:"static",inset:"auto",overflowY:"visible"}))});export{i as VIEW_LIST_ROW_SPACING_VAR,n as ViewListStyled,r as viewListClasses};
2
2
  //# sourceMappingURL=styled.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styled.js","sources":["../../../../src/data-surface/view-list/styled.tsx"],"sourcesContent":["import { alpha, Box, styled } from '@mui/material'\r\n\r\nexport const VIEW_LIST_ROW_SPACING_VAR = '--DinoViewList-rowSpacing'\r\n\r\nexport const viewListClasses = {\r\n root: 'DinoViewList-root',\r\n normal: 'DinoViewList-normal',\r\n virtualized: 'DinoViewList-virtualized',\r\n autoHeight: 'DinoViewList-autoHeight',\r\n scrollContainer: 'DinoViewList-scrollContainer',\r\n table: 'DinoViewList-table',\r\n tableHeader: 'DinoViewList-tableHeader',\r\n tableHeaderCell: 'DinoViewList-tableHeaderCell',\r\n tableBodyCell: 'DinoViewList-tableBodyCell',\r\n tableSpacerRow: 'DinoViewList-tableSpacerRow',\r\n tableSpacerCell: 'DinoViewList-tableSpacerCell',\r\n tableCellContent: 'DinoViewList-tableCellContent'\r\n}\r\nconst classes = viewListClasses\r\n\r\nexport const ViewListStyled = styled(Box)(({ theme }) => {\r\n const mode = theme.palette.mode\r\n const borderColor = alpha(theme.palette.common.black, mode === 'dark' ? 0.24 : 0.08)\r\n const bgHeader = mode === 'dark' ? theme.palette.grey[800] : theme.palette.grey[50]\r\n\r\n return {\r\n [`&.${classes.root}`]: {\r\n position: 'relative',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden'\r\n },\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'absolute',\r\n inset: 0, // top: 0, left: 0, right: 0, bottom: 0\r\n overflowY: 'auto',\r\n padding: theme.spacing(0, 0.5),\r\n margin: theme.spacing(0, -0.5),\r\n // Scrollbar styling\r\n '&::-webkit-scrollbar': { width: 6, height: 6 },\r\n '&::-webkit-scrollbar-thumb': { backgroundColor: theme.palette.grey[400] },\r\n '&::-webkit-scrollbar-thumb:hover': { backgroundColor: theme.palette.grey[600] },\r\n '&::-webkit-scrollbar-track': { backgroundColor: theme.palette.grey[200], borderRadius: 4 },\r\n '&::-webkit-scrollbar-track:hover': { backgroundColor: theme.palette.grey[300] }\r\n },\r\n [`.${classes.table}`]: {\r\n tableLayout: 'fixed',\r\n width: '100%',\r\n borderCollapse: 'separate',\r\n borderSpacing: `0 var(${VIEW_LIST_ROW_SPACING_VAR}, ${theme.spacing(0.5)})`,\r\n marginTop: `calc(var(${VIEW_LIST_ROW_SPACING_VAR}, ${theme.spacing(0.5)}) * -1)`\r\n },\r\n [`.${classes.tableHeader}`]: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 2,\r\n backgroundColor: bgHeader\r\n },\r\n [`.${classes.tableHeaderCell}`]: {\r\n fontWeight: 500,\r\n paddingTop: theme.spacing(1.5),\r\n paddingBottom: theme.spacing(1.5),\r\n overflow: 'hidden',\r\n borderBottom: 'unset'\r\n // borderTop: `1px dashed ${borderColor}`,\r\n // borderBottom: `1px dashed ${borderColor}`,\r\n // '&:first-of-type': { borderLeft: `1px dashed ${borderColor}` },\r\n // '&:last-of-type': { borderRight: `1px dashed ${borderColor}` }\r\n },\r\n [`.${classes.tableBodyCell}`]: {\r\n overflow: 'hidden',\r\n borderTop: `0.5px dashed ${borderColor}`,\r\n borderBottom: `0.5px dashed ${borderColor}`,\r\n '&:first-of-type': {\r\n borderLeft: `0.5px dashed ${borderColor}`,\r\n borderRadius: theme.spacing(0.5, 0, 0, 0.5)\r\n },\r\n '&:last-of-type': {\r\n borderRight: `0.5px dashed ${borderColor}`,\r\n borderRadius: theme.spacing(0, 0.5, 0.5, 0)\r\n }\r\n },\r\n [`.${classes.tableCellContent}`]: {\r\n minWidth: 0, // Allow shrinking below content size\r\n width: '100%' // Fill parent TableCell\r\n },\r\n // Virtualized styles\r\n [`&.${classes.virtualized}`]: {\r\n boxSizing: 'border-box'\r\n },\r\n // Auto-height variant: disable the internal scroll container and let the\r\n // component size expand with content. This makes the table render all\r\n // rows and removes the internal scrollbar used in 'normal' modes.\r\n [`&.${classes.normal}.${classes.autoHeight}`]: {\r\n height: 'auto',\r\n overflow: 'visible',\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'static',\r\n inset: 'auto',\r\n overflowY: 'visible'\r\n }\r\n }\r\n }\r\n})\r\n"],"names":["VIEW_LIST_ROW_SPACING_VAR","viewListClasses","root","normal","virtualized","autoHeight","scrollContainer","table","tableHeader","tableHeaderCell","tableBodyCell","tableSpacerRow","tableSpacerCell","tableCellContent","classes","ViewListStyled","styled","Box","_ref","theme","mode","palette","borderColor","alpha","common","black","bgHeader","grey","_defineProperty","concat","position","width","height","overflow","inset","overflowY","padding","spacing","margin","backgroundColor","borderRadius","tableLayout","borderCollapse","borderSpacing","marginTop","top","zIndex","fontWeight","paddingTop","paddingBottom","borderBottom","borderTop","borderLeft","borderRight","minWidth","boxSizing"],"mappings":"2IAEO,IAAMA,EAA4B,4BAE5BC,EAAkB,CAC7BC,KAAM,oBACNC,OAAQ,sBACRC,YAAa,2BACbC,WAAY,0BACZC,gBAAiB,+BACjBC,MAAO,qBACPC,YAAa,2BACbC,gBAAiB,+BACjBC,cAAe,6BACfC,eAAgB,8BAChBC,gBAAiB,+BACjBC,iBAAkB,iCAEdC,EAAUb,EAEHc,EAAiBC,EAAOC,EAAPD,CAAY,SAAAE,GAAc,IAAXC,EAAKD,EAALC,MACrCC,EAAOD,EAAME,QAAQD,KACrBE,EAAcC,EAAMJ,EAAME,QAAQG,OAAOC,MAAgB,SAATL,EAAkB,IAAO,KACzEM,EAAoB,SAATN,EAAkBD,EAAME,QAAQM,KAAK,KAAOR,EAAME,QAAQM,KAAK,IAEhF,OAAAC,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAA,CAAA,EAAA,KAAAC,OACQf,EAAQZ,MAAS,CACrB4B,SAAU,WACVC,MAAO,OACPC,OAAQ,OACRC,SAAU,eACXJ,OACIf,EAAQR,iBAAoB,CAC/BwB,SAAU,WACVI,MAAO,EACPC,UAAW,OACXC,QAASjB,EAAMkB,QAAQ,EAAG,IAC1BC,OAAQnB,EAAMkB,QAAQ,GAAG,IAEzB,uBAAwB,CAAEN,MAAO,EAAGC,OAAQ,GAC5C,6BAA8B,CAAEO,gBAAiBpB,EAAME,QAAQM,KAAK,MACpE,mCAAoC,CAAEY,gBAAiBpB,EAAME,QAAQM,KAAK,MAC1E,6BAA8B,CAAEY,gBAAiBpB,EAAME,QAAQM,KAAK,KAAMa,aAAc,GACxF,mCAAoC,CAAED,gBAAiBpB,EAAME,QAAQM,KAAK,YAC3EE,OACIf,EAAQP,OAAU,CACrBkC,YAAa,QACbV,MAAO,OACPW,eAAgB,WAChBC,cAAad,SAAAA,OAAW7B,EAAyB6B,MAAAA,OAAKV,EAAMkB,QAAQ,IAAO,KAC3EO,UAASf,YAAAA,OAAc7B,EAAyB6B,MAAAA,OAAKV,EAAMkB,QAAQ,IAAI,iBACxER,OACIf,EAAQN,aAAgB,CAC3BsB,SAAU,SACVe,IAAK,EACLC,OAAQ,EACRP,gBAAiBb,QAClBG,OACIf,EAAQL,iBAAoB,CAC/BsC,WAAY,IACZC,WAAY7B,EAAMkB,QAAQ,KAC1BY,cAAe9B,EAAMkB,QAAQ,KAC7BJ,SAAU,SACViB,aAAc,cAKfrB,OACIf,EAAQJ,eAAkB,CAC7BuB,SAAU,SACVkB,UAAStB,gBAAAA,OAAkBP,GAC3B4B,aAAYrB,gBAAAA,OAAkBP,GAC9B,kBAAmB,CACjB8B,WAAUvB,gBAAAA,OAAkBP,GAC5BkB,aAAcrB,EAAMkB,QAAQ,GAAK,EAAG,EAAG,KAEzC,iBAAkB,CAChBgB,YAAWxB,gBAAAA,OAAkBP,GAC7BkB,aAAcrB,EAAMkB,QAAQ,EAAG,GAAK,GAAK,UAE5CR,OACIf,EAAQD,kBAAqB,CAChCyC,SAAU,EACVvB,MAAO,cACRF,OAEKf,EAAQV,aAAgB,CAC5BmD,UAAW,eACZ1B,KAAAA,OAIKf,EAAQX,OAAM0B,KAAAA,OAAIf,EAAQT,YAAUuB,EAAA,CACxCI,OAAQ,OACRC,SAAU,WAAS,IAAAJ,OACdf,EAAQR,iBAAoB,CAC/BwB,SAAU,SACVI,MAAO,OACPC,UAAW,YAInB"}
1
+ {"version":3,"file":"styled.js","sources":["../../../../src/data-surface/view-list/styled.tsx"],"sourcesContent":["import { alpha, Box, styled } from '@mui/material'\r\n\r\nexport const VIEW_LIST_ROW_SPACING_VAR = '--DinoViewList-rowSpacing'\r\n\r\nexport const viewListClasses = {\r\n root: 'DinoViewList-root',\r\n normal: 'DinoViewList-normal',\r\n virtualized: 'DinoViewList-virtualized',\r\n autoHeight: 'DinoViewList-autoHeight',\r\n scrollContainer: 'DinoViewList-scrollContainer',\r\n table: 'DinoViewList-table',\r\n tableHeader: 'DinoViewList-tableHeader',\r\n tableHeaderCell: 'DinoViewList-tableHeaderCell',\r\n tableBodyCell: 'DinoViewList-tableBodyCell',\r\n tableSpacerRow: 'DinoViewList-tableSpacerRow',\r\n tableSpacerCell: 'DinoViewList-tableSpacerCell',\r\n tableCellContent: 'DinoViewList-tableCellContent'\r\n}\r\nconst classes = viewListClasses\r\n\r\nexport const ViewListStyled = styled(Box)(({ theme }) => {\r\n const mode = theme.palette.mode\r\n const borderColor = alpha(theme.palette.common.black, mode === 'dark' ? 0.24 : 0.08)\r\n const bgHeader = mode === 'dark' ? theme.palette.grey[800] : theme.palette.grey[50]\r\n\r\n return {\r\n [`&.${classes.root}`]: {\r\n position: 'relative',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden'\r\n },\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'absolute',\r\n inset: 0, // top: 0, left: 0, right: 0, bottom: 0\r\n overflowY: 'auto',\r\n overflowX: 'auto',\r\n overflowAnchor: 'none',\r\n // Scrollbar styling\r\n '&::-webkit-scrollbar': { width: 6, height: 6 },\r\n '&::-webkit-scrollbar-thumb': { backgroundColor: theme.palette.grey[400] },\r\n '&::-webkit-scrollbar-thumb:hover': { backgroundColor: theme.palette.grey[600] },\r\n '&::-webkit-scrollbar-track': { backgroundColor: theme.palette.grey[200], borderRadius: 4 },\r\n '&::-webkit-scrollbar-track:hover': { backgroundColor: theme.palette.grey[300] }\r\n },\r\n [`.${classes.table}`]: {\r\n tableLayout: 'fixed',\r\n width: '100%',\r\n borderCollapse: 'separate',\r\n borderSpacing: `0 var(${VIEW_LIST_ROW_SPACING_VAR}, ${theme.spacing(0.5)})`,\r\n marginTop: `calc(var(${VIEW_LIST_ROW_SPACING_VAR}, ${theme.spacing(0.5)}) * -1)`\r\n },\r\n [`.${classes.tableHeader}`]: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 2,\r\n backgroundColor: bgHeader\r\n },\r\n [`.${classes.tableHeaderCell}`]: {\r\n fontWeight: 500,\r\n paddingTop: theme.spacing(1.5),\r\n paddingBottom: theme.spacing(1.5),\r\n overflow: 'hidden',\r\n borderBottom: 'unset'\r\n // borderTop: `1px dashed ${borderColor}`,\r\n // borderBottom: `1px dashed ${borderColor}`,\r\n // '&:first-of-type': { borderLeft: `1px dashed ${borderColor}` },\r\n // '&:last-of-type': { borderRight: `1px dashed ${borderColor}` }\r\n },\r\n [`.${classes.tableBodyCell}`]: {\r\n overflow: 'hidden',\r\n borderTop: `0.5px dashed ${borderColor}`,\r\n borderBottom: `0.5px dashed ${borderColor}`,\r\n '&:first-of-type': {\r\n borderLeft: `0.5px dashed ${borderColor}`,\r\n borderRadius: theme.spacing(0.5, 0, 0, 0.5)\r\n },\r\n '&:last-of-type': {\r\n borderRight: `0.5px dashed ${borderColor}`,\r\n borderRadius: theme.spacing(0, 0.5, 0.5, 0)\r\n }\r\n },\r\n [`.${classes.tableCellContent}`]: {\r\n minWidth: 0, // Allow shrinking below content size\r\n width: '100%' // Fill parent TableCell\r\n },\r\n // Virtualized styles\r\n [`&.${classes.virtualized}`]: {\r\n boxSizing: 'border-box'\r\n },\r\n // Auto-height variant: disable the internal scroll container and let the\r\n // component size expand with content. This makes the table render all\r\n // rows and removes the internal scrollbar used in 'normal' modes.\r\n [`&.${classes.normal}.${classes.autoHeight}`]: {\r\n height: 'auto',\r\n overflow: 'visible',\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'static',\r\n inset: 'auto',\r\n overflowY: 'visible'\r\n }\r\n }\r\n }\r\n})\r\n"],"names":["VIEW_LIST_ROW_SPACING_VAR","viewListClasses","root","normal","virtualized","autoHeight","scrollContainer","table","tableHeader","tableHeaderCell","tableBodyCell","tableSpacerRow","tableSpacerCell","tableCellContent","classes","ViewListStyled","styled","Box","_ref","theme","mode","palette","borderColor","alpha","common","black","bgHeader","grey","_defineProperty","concat","position","width","height","overflow","inset","overflowY","overflowX","overflowAnchor","backgroundColor","borderRadius","tableLayout","borderCollapse","borderSpacing","spacing","marginTop","top","zIndex","fontWeight","paddingTop","paddingBottom","borderBottom","borderTop","borderLeft","borderRight","minWidth","boxSizing"],"mappings":"2IAEO,IAAMA,EAA4B,4BAE5BC,EAAkB,CAC7BC,KAAM,oBACNC,OAAQ,sBACRC,YAAa,2BACbC,WAAY,0BACZC,gBAAiB,+BACjBC,MAAO,qBACPC,YAAa,2BACbC,gBAAiB,+BACjBC,cAAe,6BACfC,eAAgB,8BAChBC,gBAAiB,+BACjBC,iBAAkB,iCAEdC,EAAUb,EAEHc,EAAiBC,EAAOC,EAAPD,CAAY,SAAAE,GAAc,IAAXC,EAAKD,EAALC,MACrCC,EAAOD,EAAME,QAAQD,KACrBE,EAAcC,EAAMJ,EAAME,QAAQG,OAAOC,MAAgB,SAATL,EAAkB,IAAO,KACzEM,EAAoB,SAATN,EAAkBD,EAAME,QAAQM,KAAK,KAAOR,EAAME,QAAQM,KAAK,IAEhF,OAAAC,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAA,CAAA,EAAA,KAAAC,OACQf,EAAQZ,MAAS,CACrB4B,SAAU,WACVC,MAAO,OACPC,OAAQ,OACRC,SAAU,eACXJ,OACIf,EAAQR,iBAAoB,CAC/BwB,SAAU,WACVI,MAAO,EACPC,UAAW,OACXC,UAAW,OACXC,eAAgB,OAEhB,uBAAwB,CAAEN,MAAO,EAAGC,OAAQ,GAC5C,6BAA8B,CAAEM,gBAAiBnB,EAAME,QAAQM,KAAK,MACpE,mCAAoC,CAAEW,gBAAiBnB,EAAME,QAAQM,KAAK,MAC1E,6BAA8B,CAAEW,gBAAiBnB,EAAME,QAAQM,KAAK,KAAMY,aAAc,GACxF,mCAAoC,CAAED,gBAAiBnB,EAAME,QAAQM,KAAK,YAC3EE,OACIf,EAAQP,OAAU,CACrBiC,YAAa,QACbT,MAAO,OACPU,eAAgB,WAChBC,cAAab,SAAAA,OAAW7B,EAAyB6B,MAAAA,OAAKV,EAAMwB,QAAQ,IAAO,KAC3EC,UAASf,YAAAA,OAAc7B,EAAyB6B,MAAAA,OAAKV,EAAMwB,QAAQ,IAAI,iBACxEd,OACIf,EAAQN,aAAgB,CAC3BsB,SAAU,SACVe,IAAK,EACLC,OAAQ,EACRR,gBAAiBZ,QAClBG,OACIf,EAAQL,iBAAoB,CAC/BsC,WAAY,IACZC,WAAY7B,EAAMwB,QAAQ,KAC1BM,cAAe9B,EAAMwB,QAAQ,KAC7BV,SAAU,SACViB,aAAc,cAKfrB,OACIf,EAAQJ,eAAkB,CAC7BuB,SAAU,SACVkB,UAAStB,gBAAAA,OAAkBP,GAC3B4B,aAAYrB,gBAAAA,OAAkBP,GAC9B,kBAAmB,CACjB8B,WAAUvB,gBAAAA,OAAkBP,GAC5BiB,aAAcpB,EAAMwB,QAAQ,GAAK,EAAG,EAAG,KAEzC,iBAAkB,CAChBU,YAAWxB,gBAAAA,OAAkBP,GAC7BiB,aAAcpB,EAAMwB,QAAQ,EAAG,GAAK,GAAK,UAE5Cd,OACIf,EAAQD,kBAAqB,CAChCyC,SAAU,EACVvB,MAAO,cACRF,OAEKf,EAAQV,aAAgB,CAC5BmD,UAAW,eACZ1B,KAAAA,OAIKf,EAAQX,OAAM0B,KAAAA,OAAIf,EAAQT,YAAUuB,EAAA,CACxCI,OAAQ,OACRC,SAAU,WAAS,IAAAJ,OACdf,EAAQR,iBAAoB,CAC/BwB,SAAU,SACVI,MAAO,OACPC,UAAW,YAInB"}
@@ -17,5 +17,12 @@ export declare const LIST_DEFAULT_NEAR_END_THRESHOLD = 80;
17
17
  /** Resolves the final near-end threshold from multiple optional values. */
18
18
  export declare function resolveListNearEndThreshold(...threshold: (number | undefined)[]): number;
19
19
  export declare function resolveListSpacerHeight(count: number, rowHeight: number, rowSpacing: number): number;
20
+ /**
21
+ * Resolves pixel widths for all columns using a flex redistribution algorithm.
22
+ * Properly handles min/max constraints by iteratively redistributing overflow
23
+ * from capped columns to uncapped flex siblings — similar to CSS flexbox.
24
+ * Requires the actual container pixel width to compute exact values.
25
+ */
26
+ export declare function resolveFlexColumnWidths<T>(columns: TListColumn<T>[], selectable: boolean, containerWidth: number): Array<number | string | undefined>;
20
27
  export declare const getColumnWidth: <T>(column: TListColumn<T>, totalFixedPx: number, totalFlex: number) => number | string | undefined;
21
- export declare const mapSxTableCell: <T>(col: TListColumn<T>, totalFlex: number, totalFixedPx: number, sx?: TableCellProps['sx']) => TableCellProps['sx'];
28
+ export declare const mapSxTableCell: <T>(col: TListColumn<T>, resolvedWidth: number | string | undefined, sx?: TableCellProps['sx']) => TableCellProps['sx'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dinocollab-core",
3
- "version": "2.2.29",
3
+ "version": "2.2.31",
4
4
  "description": "Dinocollab core - libraries for building collaborative applications with React 18",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",