dinocollab-core 2.2.19 → 2.2.21

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{slicedToArray as n,asyncToGenerator as e,regenerator as i,objectSpread2 as a}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as o}from"react/jsx-runtime";import{styled as r,Box as l}from"@mui/material";import{useState as u,useMemo as g,useCallback as d,useEffect as s,useRef as v}from"react";import{LoadingModeRule as c}from"./types.js";import{createViewList as p,createViewListLoading as f}from"./view-list/index.js";import{createViewGrid as h,createViewGridLoading as m}from"./view-grid/index.js";import{createViewSwitchTransition as C}from"./view-switch-transition.js";import{PanelLoading as P,PanelNoData as S,PanelLoadMore as w,PanelInfiniteScrollFooter as x,PanelPaginationFooter as z}from"./ui.units.js";function N(r){if(!r.GridComponent){var N=r.gridConfig||{getterId:function(n,e){return e}};r.gridConfig=N,r.GridComponent=h(N)}if(!r.ListComponent){var y=r.listConfig||{getterId:function(n,e){return e}};r.listConfig=y,r.ListComponent=p(y)}var M=r.defaultViewMode,j=void 0===M?"grid":M,k=r.defaultLoadMode,L=void 0===k?"pagination":k,T=r.featureMode,I=void 0===T?"client":T,V=C({}),B=m(r.GridComponent),G=f(r.ListComponent);return function(p){var f,h,m,C,N,y=p.slots||{},M=null!==(f=null!==(h=null===(m=p.pagination)||void 0===m?void 0:m.pageSize)&&void 0!==h?h:r.defaultPageSize)&&void 0!==f?f:20,k=u({page:0,pageSize:M}),T=n(k,2),D=T[0],H=T[1],A=g(function(){var n,e,i,a,t,o=null!==(n=p.pagination)&&void 0!==n?n:D;return{page:null!==(e=o.page)&&void 0!==e?e:0,pageSize:null!==(i=o.pageSize)&&void 0!==i?i:M,hasNext:null!==(a=o.hasNext)&&void 0!==a&&a,hasPrev:null!==(t=o.hasPrev)&&void 0!==t&&t,total:o.total}},[p.pagination,D]),R=null!==(C=p.viewMode)&&void 0!==C?C:j,_=null!==(N=p.loadMode)&&void 0!==N?N:L,J=g(function(){var n,e,i,a;return"grid"===R?null!==(i=null===(a=r.gridConfig)||void 0===a?void 0:a.renderStrategy)&&void 0!==i?i:"normal":null!==(n=null===(e=r.listConfig)||void 0===e?void 0:e.renderStrategy)&&void 0!==n?n:"normal"},[R]),q=d(e(i().m(function n(){var e,t,o,r,l;return i().w(function(n){for(;;)switch(n.n){case 0:if(!((r=null!==(e=A.page)&&void 0!==e?e:0)<=0)){n.n=1;break}return n.a(2);case 1:return l=r-1,p.pagination||H(function(n){return a(a({},n),{},{page:l})}),n.n=2,null===(t=p.onPageChange)||void 0===t?void 0:t.call(p,l,null!==(o=A.pageSize)&&void 0!==o?o:M);case 2:return n.a(2)}},n)})),[A.page,A.pageSize,p.pagination,p.onPageChange]),E=d(e(i().m(function n(){var e,t,o,r,l;return i().w(function(n){for(;;)switch(n.n){case 0:if(A.hasNext){n.n=1;break}return n.a(2);case 1:return r=null!==(e=A.page)&&void 0!==e?e:0,l=r+1,p.pagination||H(function(n){return a(a({},n),{},{page:l})}),n.n=2,null===(t=p.onPageChange)||void 0===t?void 0:t.call(p,l,null!==(o=A.pageSize)&&void 0!==o?o:M);case 2:return n.a(2)}},n)})),[A.hasNext,A.page,A.pageSize,p.pagination,p.onPageChange]),F=d(function(){var n=e(i().m(function n(e){var t,o;return i().w(function(n){for(;;)switch(n.n){case 0:if(!(e<0)){n.n=1;break}return n.a(2);case 1:return p.pagination||H(function(n){return a(a({},n),{},{page:e})}),n.n=2,null===(t=p.onPageChange)||void 0===t?void 0:t.call(p,e,null!==(o=A.pageSize)&&void 0!==o?o:M);case 2:return n.a(2)}},n)}));return function(e){return n.apply(this,arguments)}}(),[A.pageSize,p.pagination,p.onPageChange]),K=p.value||[],O="client"===I?p.value:void 0;s(function(){"client"!==I||p.pagination||H(function(n){return a(a({},n),{},{page:0})})},[p.value]);var Q=g(function(){var n,e,i=null!==(n=A.page)&&void 0!==n?n:0,a=null!==(e=A.pageSize)&&void 0!==e?e:M;if("client"===I){var t=K.length;return{page:i,pageSize:a,hasNext:a*(i+1)<t,hasPrev:i>0,total:t}}return A},[A,K.length,I,M]),U=g(function(){if("client"===I){var n,e,i=null!==(n=Q.page)&&void 0!==n?n:0,a=null!==(e=Q.pageSize)&&void 0!==e?e:M;if("infiniteScroll"===_)return K.slice(0,(i+1)*a);var t=i*a;return K.slice(t,t+a)}return K},[K,Q,I,_,M]),W=0===K.length,X=Boolean(p.loading&&W),Y=!p.loading&&W,Z=Boolean(p.loading)&&!W,$=d(function(){var n=e(i().m(function n(e,a){var t;return i().w(function(n){for(;;)switch(n.n){case 0:return p.pagination||H({page:e,pageSize:a}),n.n=1,null===(t=p.onPageChange)||void 0===t?void 0:t.call(p,e,a);case 1:return n.a(2)}},n)}));return function(e,i){return n.apply(this,arguments)}}(),[p.pagination,p.onPageChange]),nn=g(function(){return a({value:U,loadMode:_,loading:p.loading,pagination:Q,onPageChange:$,scrollResetToken:O},y.gridViewProps)},[U,_,p.loading,Q,$,O,y.gridViewProps]),en=v(nn);en.current=nn;var an=g(function(){var n,e;return a({value:U,loadMode:_,loading:p.loading,pagination:Q,onPageChange:$,renderStrategy:J,selectable:null!==(n=p.selectable)&&void 0!==n?n:null===(e=r.listConfig)||void 0===e?void 0:e.selectable,selectedIds:p.selectedIds,onSelectionChange:p.onSelectionChange,scrollResetToken:O},y.listViewProps)},[U,_,p.loading,Q,J,$,p.selectable,p.selectedIds,p.onSelectionChange,O,y.listViewProps]),tn=v(an);tn.current=an;var on=g(function(){return function(){return o(G,a({},tn.current))}},[G]),rn=g(function(){return function(){return o(B,a({},en.current))}},[B]),ln=g(function(){return y.PanelLoading||P},[y.PanelLoading,R]),un=g(function(){return y.PanelNoData||S},[y.PanelNoData,R]);return t(b,{sx:p.sx,children:[t(l,{sx:{flex:1,minHeight:0,position:"relative"},children:[X&&o(ln,{viewMode:R}),Y&&o(un,{viewMode:R}),!X&&!Y&&o(V,{value:R,viewA:{value:"list",Content:on},viewB:{value:"grid",Content:rn}}),Z&&o(w,{})]}),function(){var n,e,i;if(_===c.infiniteScroll){var a,t=null===(a=p.slots)||void 0===a?void 0:a.footer;return o(x,{loading:p.loading,hasNext:Q.hasNext,currentCount:U.length,total:Q.total,slots:{statusText:null==t?void 0:t.status,rangeText:null==t?void 0:t.range}})}return o(z,{page:null!==(n=Q.page)&&void 0!==n?n:0,pageSize:null!==(e=Q.pageSize)&&void 0!==e?e:M,total:Q.total,hasNext:Q.hasNext,hasPrev:(null!==(i=Q.page)&&void 0!==i?i:0)>0,loading:p.loading,onPrevPage:q,onNextPage:E,onPageJump:F})}()]})}}var b=r(l)(function(n){return{display:"flex",flexDirection:"column",width:"100%",height:"100%",position:"relative",flex:1,minHeight:0,backgroundColor:n.theme.palette.background.default}});export{N as createDataSurface,N as default};
1
+ import{slicedToArray as n,asyncToGenerator as e,regenerator as i,objectSpread2 as a}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as o,jsx as t}from"react/jsx-runtime";import{styled as r,Box as l}from"@mui/material";import{useState as u,useMemo as g,useCallback as d,useEffect as v,useRef as s}from"react";import{LoadingModeRule as c}from"./types.js";import{createViewList as p,createViewListLoading as f}from"./view-list/index.js";import{createViewGrid as h,createViewGridLoading as m}from"./view-grid/index.js";import{createViewSwitchTransition as P}from"./view-switch-transition.js";import{PanelLoading as C,PanelNoData as S,PanelLoadMore as w,PanelInfiniteScrollFooter as x,PanelPaginationFooter as z}from"./ui.units.js";function N(r){if(!r.GridComponent){var N=r.gridConfig||{getterId:function(n,e){return e}};r.gridConfig=N,r.GridComponent=h(N)}if(!r.ListComponent){var L=r.listConfig||{getterId:function(n,e){return e}};r.listConfig=L,r.ListComponent=p(L)}var b=r.defaultViewMode,y=void 0===b?"grid":b,j=r.defaultLoadMode,k=void 0===j?"pagination":j,T=r.featureMode,D=void 0===T?"client":T,I=P({}),V=m(r.GridComponent),B=f(r.ListComponent);return function(p){var f,h,m,P,N,L=p.slots||{},b=null!==(f=null!==(h=null===(m=p.pagination)||void 0===m?void 0:m.pageSize)&&void 0!==h?h:r.defaultPageSize)&&void 0!==f?f:20,j=u({page:0,pageSize:b}),T=n(j,2),G=T[0],H=T[1],A=g(function(){var n,e,i,a,o,t=null!==(n=p.pagination)&&void 0!==n?n:G;return{page:null!==(e=t.page)&&void 0!==e?e:0,pageSize:null!==(i=t.pageSize)&&void 0!==i?i:b,hasNext:null!==(a=t.hasNext)&&void 0!==a&&a,hasPrev:null!==(o=t.hasPrev)&&void 0!==o&&o,total:t.total}},[p.pagination,G]),R=null!==(P=p.viewMode)&&void 0!==P?P:y,_=null!==(N=p.loadMode)&&void 0!==N?N:k,J=g(function(){var n,e,i,a;return"grid"===R?null!==(i=null===(a=r.gridConfig)||void 0===a?void 0:a.renderStrategy)&&void 0!==i?i:"normal":null!==(n=null===(e=r.listConfig)||void 0===e?void 0:e.renderStrategy)&&void 0!==n?n:"normal"},[R]),q=d(e(i().m(function n(){var e,o,t,r,l;return i().w(function(n){for(;;)switch(n.n){case 0:if(!((r=null!==(e=A.page)&&void 0!==e?e:0)<=0)){n.n=1;break}return n.a(2);case 1:return l=r-1,p.pagination||H(function(n){return a(a({},n),{},{page:l})}),n.n=2,null===(o=p.onPageChange)||void 0===o?void 0:o.call(p,l,null!==(t=A.pageSize)&&void 0!==t?t:b);case 2:return n.a(2)}},n)})),[A.page,A.pageSize,p.pagination,p.onPageChange]),E=d(e(i().m(function n(){var e,o,t,r,l;return i().w(function(n){for(;;)switch(n.n){case 0:if(A.hasNext){n.n=1;break}return n.a(2);case 1:return r=null!==(e=A.page)&&void 0!==e?e:0,l=r+1,p.pagination||H(function(n){return a(a({},n),{},{page:l})}),n.n=2,null===(o=p.onPageChange)||void 0===o?void 0:o.call(p,l,null!==(t=A.pageSize)&&void 0!==t?t:b);case 2:return n.a(2)}},n)})),[A.hasNext,A.page,A.pageSize,p.pagination,p.onPageChange]),F=d(function(){var n=e(i().m(function n(e){var o,t;return i().w(function(n){for(;;)switch(n.n){case 0:if(!(e<0)){n.n=1;break}return n.a(2);case 1:return p.pagination||H(function(n){return a(a({},n),{},{page:e})}),n.n=2,null===(o=p.onPageChange)||void 0===o?void 0:o.call(p,e,null!==(t=A.pageSize)&&void 0!==t?t:b);case 2:return n.a(2)}},n)}));return function(e){return n.apply(this,arguments)}}(),[A.pageSize,p.pagination,p.onPageChange]),K=p.value||[],O="client"===D?p.value:void 0;v(function(){"client"!==D||p.pagination||H(function(n){return a(a({},n),{},{page:0})})},[p.value]);var Q=g(function(){var n,e,i=null!==(n=A.page)&&void 0!==n?n:0,a=null!==(e=A.pageSize)&&void 0!==e?e:b;if("client"===D){var o=K.length;return{page:i,pageSize:a,hasNext:a*(i+1)<o,hasPrev:i>0,total:o}}return A},[A,K.length,D,b]),U=g(function(){if("client"===D){var n,e,i=null!==(n=Q.page)&&void 0!==n?n:0,a=null!==(e=Q.pageSize)&&void 0!==e?e:b;if("infiniteScroll"===_)return K.slice(0,(i+1)*a);var o=i*a;return K.slice(o,o+a)}return K},[K,Q,D,_,b]),W=0===K.length,X=Boolean(p.loading&&W),Y=!p.loading&&W,Z=Boolean(p.loading)&&!W,$=d(function(){var n=e(i().m(function n(e,a){var o;return i().w(function(n){for(;;)switch(n.n){case 0:return p.pagination||H({page:e,pageSize:a}),n.n=1,null===(o=p.onPageChange)||void 0===o?void 0:o.call(p,e,a);case 1:return n.a(2)}},n)}));return function(e,i){return n.apply(this,arguments)}}(),[p.pagination,p.onPageChange]),nn=g(function(){return a({value:U,loadMode:_,loading:p.loading,pagination:Q,onPageChange:$,scrollResetToken:O},L.gridViewProps)},[U,_,p.loading,Q,$,O,L.gridViewProps]),en=s(nn);en.current=nn;var an=g(function(){var n,e;return a({value:U,loadMode:_,loading:p.loading,pagination:Q,onPageChange:$,renderStrategy:J,selectable:null!==(n=p.selectable)&&void 0!==n?n:null===(e=r.listConfig)||void 0===e?void 0:e.selectable,selectedIds:p.selectedIds,onSelectionChange:p.onSelectionChange,scrollResetToken:O},L.listViewProps)},[U,_,p.loading,Q,J,$,p.selectable,p.selectedIds,p.onSelectionChange,O,L.listViewProps]),on=s(an);on.current=an;var tn=g(function(){return function(){return t(B,a({},on.current))}},[B]),rn=g(function(){return function(){return t(V,a({},en.current))}},[V]),ln=g(function(){return L.PanelLoading||(null==r?void 0:r.PanelLoading)||C},[L.PanelLoading,r.PanelLoading,R]),un=g(function(){return L.PanelNoData||(null==r?void 0:r.PanelNoData)||S},[L.PanelNoData,r.PanelNoData,R]),gn=g(function(){return L.PanelLoadMore||(null==r?void 0:r.PanelLoadMore)||w},[L.PanelLoadMore,r.PanelLoadMore]);return o(M,{sx:p.sx,children:[o(l,{sx:{flex:1,minHeight:0,position:"relative"},children:[X&&t(ln,{viewMode:R}),Y&&t(un,{viewMode:R}),!X&&!Y&&t(I,{value:R,viewA:{value:"list",Content:tn},viewB:{value:"grid",Content:rn}}),Z&&t(gn,{})]}),function(){var n,e,i;if(_===c.infiniteScroll){var a,o=null===(a=p.slots)||void 0===a?void 0:a.footer;return t(x,{loading:p.loading,hasNext:Q.hasNext,currentCount:U.length,total:Q.total,slots:{statusText:null==o?void 0:o.status,rangeText:null==o?void 0:o.range}})}return t(z,{page:null!==(n=Q.page)&&void 0!==n?n:0,pageSize:null!==(e=Q.pageSize)&&void 0!==e?e:b,total:Q.total,hasNext:Q.hasNext,hasPrev:(null!==(i=Q.page)&&void 0!==i?i:0)>0,loading:p.loading,onPrevPage:q,onNextPage:E,onPageJump:F})}()]})}}var M=r(l)(function(n){return{display:"flex",flexDirection:"column",width:"100%",height:"100%",position:"relative",flex:1,minHeight:0,backgroundColor:n.theme.palette.background.default}});export{N as createDataSurface,N as default};
2
2
  //# sourceMappingURL=index.create.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.create.js","sources":["../../../src/data-surface/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Box, styled } from '@mui/material'\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\nimport { DataSurfaceViewMode, LoadingModeRule, DataSurfaceFeatureMode } from './types'\r\nimport { createViewList, createViewListLoading } from './view-list'\r\nimport { createViewGrid, createViewGridLoading } from './view-grid'\r\nimport { createViewSwitchTransition } from './view-switch-transition'\r\nimport { PanelInfiniteScrollFooter, PanelLoadMore, PanelLoading, PanelNoData, PanelPaginationFooter } from './ui.units'\r\n// types\r\nimport type { BoxProps } from '@mui/material'\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { IViewGridLoadingProps } from './view-grid'\r\nimport type { IViewGridConfig, IViewGridProps } from './view-grid/types'\r\nimport type { TPagination, TDataSurfaceState, TRenderableNode } from './types'\r\nimport type { IViewListConfig, IViewListLoadingProps, IViewListProps } from './view-list'\r\n\r\nexport interface IDataSurfaceSlots<T> {\r\n listViewProps?: IViewListProps<T>\r\n gridViewProps?: IViewGridProps<T>\r\n PanelLoading?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n PanelNoData?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n footer?: {\r\n status?: TRenderableNode\r\n range?: TRenderableNode\r\n }\r\n}\r\n\r\nexport interface IDataSurfaceProps<T> {\r\n value?: T[]\r\n /**\r\n * @deprecated No longer used. Use `viewMode` and `loadMode` props directly instead.\r\n * Controlled state. When provided, DataSurface becomes fully controlled.\r\n */\r\n state?: TDataSurfaceState\r\n /**\r\n * @deprecated No longer used. Component now uses uncontrolled mode with props.\r\n * Called on any state change (viewMode, loadMode, page, pageSize).\r\n */\r\n onStateChange?: (state: TDataSurfaceState) => void\r\n viewMode?: DataSurfaceViewMode\r\n /** Pagination metadata shared by both modes. */\r\n pagination?: TPagination\r\n /** Default page size. @default 20 */\r\n defaultPageSize?: number\r\n /** True while a page fetch is in flight (shows loading indicator). */\r\n loading?: boolean\r\n /**\r\n * Called when the component needs a new page of data.\r\n * - pagination mode: triggered by user clicking page control\r\n * - infiniteScroll mode: triggered automatically when scrolling near the bottom\r\n * Supports async operations - return a Promise to indicate loading state.\r\n */\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n /** Load orchestration mode. @default 'pagination' */\r\n loadMode?: LoadingModeRule\r\n sx?: BoxProps['sx']\r\n slots?: IDataSurfaceSlots<T>\r\n /** Enable row selection with checkboxes (List view only). */\r\n selectable?: boolean\r\n /** Array of selected row IDs (List view only). */\r\n selectedIds?: (string | number)[]\r\n /** Callback when selection changes (List view only). */\r\n onSelectionChange?: (selectedIds: (string | number)[]) => void\r\n}\r\n\r\nexport interface IDataSurfaceConfig<T> {\r\n /** Feature mode determines the internal optimizations and rendering strategies. @default 'client' */\r\n featureMode?: DataSurfaceFeatureMode\r\n /** Default view mode when not provided via props. @default 'grid' */\r\n defaultViewMode?: DataSurfaceViewMode\r\n /** Default load mode when not provided via props. @default 'pagination' */\r\n defaultLoadMode?: LoadingModeRule\r\n /** Default page size. @default 20 */\r\n defaultPageSize?: number\r\n /** Configuration for List view. If not provided, List view will use default settings. */\r\n listConfig?: IViewListConfig<T>\r\n /** Custom List component. If not provided, a default List component will be used. */\r\n ListComponent?: ComponentType<IViewListProps<T>>\r\n /** Configuration for Grid view. If not provided, Grid view will use default settings. */\r\n gridConfig?: IViewGridConfig<T>\r\n /** Custom Grid component. If not provided, a default Grid component will be used. */\r\n GridComponent?: ComponentType<IViewGridProps<T>>\r\n}\r\n\r\nexport function createDataSurface<T>(config: IDataSurfaceConfig<T>) {\r\n if (!config.GridComponent) {\r\n const configInput: IViewGridConfig<T> = config.gridConfig || { getterId: (item: T, index: number) => index }\r\n config.gridConfig = configInput\r\n config.GridComponent = createViewGrid<T>(configInput)\r\n }\r\n\r\n if (!config.ListComponent) {\r\n const configInput: IViewListConfig<T> = config.listConfig || { getterId: (item: T, index: number) => index }\r\n config.listConfig = configInput\r\n config.ListComponent = createViewList<T>(configInput)\r\n }\r\n\r\n const { defaultViewMode = 'grid', defaultLoadMode = 'pagination', featureMode = 'client' } = config\r\n const ViewSwitchTranstionInstance = createViewSwitchTransition<DataSurfaceViewMode>({})\r\n const GridLoadingComponent = createViewGridLoading<T>(config.GridComponent as ComponentType<IViewGridProps<T>>)\r\n const ListLoadingComponent = createViewListLoading<T>(config.ListComponent as ComponentType<IViewListProps<T>>)\r\n\r\n const DataSurface: FC<IDataSurfaceProps<T>> = (props) => {\r\n const slots = props.slots || {}\r\n const defaultPageSize = props.pagination?.pageSize ?? config.defaultPageSize ?? 20\r\n // separate pagination state\r\n const [internalPagination, setInternalPagination] = useState<TPagination>({ page: 0, pageSize: defaultPageSize })\r\n\r\n // resolved pagination: external takes priority over internal\r\n const paginationState = useMemo<TPagination>(() => {\r\n const p = props.pagination ?? internalPagination\r\n return {\r\n page: p.page ?? 0,\r\n pageSize: p.pageSize ?? defaultPageSize,\r\n hasNext: p.hasNext ?? false,\r\n hasPrev: p.hasPrev ?? false,\r\n total: p.total\r\n }\r\n }, [props.pagination, internalPagination])\r\n\r\n const viewMode = props.viewMode ?? defaultViewMode\r\n const loadMode = props.loadMode ?? defaultLoadMode\r\n\r\n // Determine renderStrategy based on current viewMode\r\n const renderStrategy = useMemo(() => {\r\n if (viewMode === 'grid') {\r\n return config.gridConfig?.renderStrategy ?? 'normal'\r\n }\r\n return config.listConfig?.renderStrategy ?? 'normal'\r\n }, [viewMode])\r\n\r\n const handlePrevPage = useCallback(async () => {\r\n const currentPage = paginationState.page ?? 0\r\n if (currentPage <= 0) return\r\n const prevPage = currentPage - 1\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: prevPage }))\r\n }\r\n await props.onPageChange?.(prevPage, paginationState.pageSize ?? defaultPageSize)\r\n }, [paginationState.page, paginationState.pageSize, props.pagination, props.onPageChange])\r\n\r\n const handleNextPage = useCallback(async () => {\r\n if (!paginationState.hasNext) return\r\n const currentPage = paginationState.page ?? 0\r\n const nextPage = currentPage + 1\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: nextPage }))\r\n }\r\n await props.onPageChange?.(nextPage, paginationState.pageSize ?? defaultPageSize)\r\n }, [paginationState.hasNext, paginationState.page, paginationState.pageSize, props.pagination, props.onPageChange])\r\n\r\n const handlePageJump = useCallback(\r\n async (targetPage: number) => {\r\n if (targetPage < 0) return\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: targetPage }))\r\n }\r\n await props.onPageChange?.(targetPage, paginationState.pageSize ?? defaultPageSize)\r\n },\r\n [paginationState.pageSize, props.pagination, props.onPageChange]\r\n )\r\n\r\n const finalValue = props.value || []\r\n\r\n // Token changes whenever props.value reference changes — used to reset scroll in views (client mode only)\r\n const scrollResetToken = featureMode === 'client' ? props.value : undefined\r\n\r\n // Reset page to 0 when the data source changes (e.g. new filtered array passed in) — client mode only\r\n useEffect(() => {\r\n if (featureMode === 'client' && !props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: 0 }))\r\n }\r\n }, [props.value])\r\n\r\n // When running in client feature mode, derive pagination metadata from the full value\r\n const derivedPagination = useMemo<TPagination>(() => {\r\n const page = paginationState.page ?? 0\r\n const pageSize = paginationState.pageSize ?? defaultPageSize\r\n if (featureMode === 'client') {\r\n const total = finalValue.length\r\n const hasNext = pageSize * (page + 1) < total\r\n const hasPrev = page > 0\r\n return { page, pageSize, hasNext, hasPrev, total }\r\n }\r\n return paginationState\r\n }, [paginationState, finalValue.length, featureMode, defaultPageSize])\r\n\r\n // Slice the input value when client-side pagination is enabled\r\n const paginatedValue = useMemo(() => {\r\n if (featureMode === 'client') {\r\n const page = derivedPagination.page ?? 0\r\n const pageSize = derivedPagination.pageSize ?? defaultPageSize\r\n if (loadMode === 'infiniteScroll') {\r\n // accumulate all items from page 0 → current page\r\n return finalValue.slice(0, (page + 1) * pageSize)\r\n }\r\n const start = page * pageSize\r\n return finalValue.slice(start, start + pageSize)\r\n }\r\n return finalValue\r\n }, [finalValue, derivedPagination, featureMode, loadMode, defaultPageSize])\r\n\r\n const isEmptyData = finalValue.length === 0\r\n const isInitialLoading = Boolean(props.loading && isEmptyData)\r\n const isNoData = !props.loading && isEmptyData\r\n const showLoadingOverlay = Boolean(props.loading) && !isEmptyData\r\n\r\n const handleGridPageChange = useCallback(\r\n async (page: number, pageSize: number) => {\r\n if (!props.pagination) {\r\n setInternalPagination({ page, pageSize })\r\n }\r\n await props.onPageChange?.(page, pageSize)\r\n },\r\n [props.pagination, props.onPageChange]\r\n )\r\n\r\n const gridPayload = useMemo<IViewGridLoadingProps<T>>(\r\n () => ({\r\n value: paginatedValue,\r\n loadMode,\r\n loading: props.loading,\r\n pagination: derivedPagination,\r\n onPageChange: handleGridPageChange,\r\n scrollResetToken,\r\n ...slots.gridViewProps\r\n }),\r\n [paginatedValue, loadMode, props.loading, derivedPagination, handleGridPageChange, scrollResetToken, slots.gridViewProps]\r\n )\r\n\r\n const gridPayloadRef = useRef<IViewGridLoadingProps<T>>(gridPayload)\r\n gridPayloadRef.current = gridPayload\r\n\r\n const listPayload = useMemo<IViewListLoadingProps<T>>(\r\n () => ({\r\n value: paginatedValue,\r\n loadMode,\r\n loading: props.loading,\r\n pagination: derivedPagination,\r\n onPageChange: handleGridPageChange,\r\n renderStrategy: renderStrategy,\r\n selectable: props.selectable ?? config.listConfig?.selectable,\r\n selectedIds: props.selectedIds,\r\n onSelectionChange: props.onSelectionChange,\r\n scrollResetToken,\r\n ...slots.listViewProps\r\n }),\r\n [\r\n paginatedValue,\r\n loadMode,\r\n props.loading,\r\n derivedPagination,\r\n renderStrategy,\r\n handleGridPageChange,\r\n props.selectable,\r\n props.selectedIds,\r\n props.onSelectionChange,\r\n scrollResetToken,\r\n slots.listViewProps\r\n ]\r\n )\r\n\r\n const listPayloadRef = useRef<IViewListLoadingProps<T>>(listPayload)\r\n listPayloadRef.current = listPayload\r\n\r\n const ListViewContent = useMemo<ComponentType<{ value: DataSurfaceViewMode }>>(() => {\r\n const ViewListContent: FC<{ value: DataSurfaceViewMode }> = () => {\r\n return <ListLoadingComponent {...listPayloadRef.current} />\r\n }\r\n return ViewListContent\r\n }, [ListLoadingComponent])\r\n\r\n const GridViewContent = useMemo<ComponentType<{ value: DataSurfaceViewMode }>>(() => {\r\n const ViewGridContent: FC<{ value: DataSurfaceViewMode }> = () => {\r\n return <GridLoadingComponent {...gridPayloadRef.current} />\r\n }\r\n return ViewGridContent\r\n }, [GridLoadingComponent])\r\n\r\n const PanelLoadingComponent = useMemo(() => {\r\n return slots.PanelLoading || PanelLoading\r\n }, [slots.PanelLoading, viewMode])\r\n\r\n const PanelNoDataComponent = useMemo(() => {\r\n return slots.PanelNoData || PanelNoData\r\n }, [slots.PanelNoData, viewMode])\r\n\r\n const renderFooter = () => {\r\n if (loadMode === LoadingModeRule.infiniteScroll) {\r\n const footerSlots = props.slots?.footer\r\n return (\r\n <PanelInfiniteScrollFooter\r\n loading={props.loading}\r\n hasNext={derivedPagination.hasNext}\r\n currentCount={paginatedValue.length}\r\n total={derivedPagination.total}\r\n slots={{\r\n statusText: footerSlots?.status,\r\n rangeText: footerSlots?.range\r\n }}\r\n />\r\n )\r\n }\r\n\r\n // pagination mode\r\n return (\r\n <PanelPaginationFooter\r\n page={derivedPagination.page ?? 0}\r\n pageSize={derivedPagination.pageSize ?? defaultPageSize}\r\n total={derivedPagination.total}\r\n hasNext={derivedPagination.hasNext}\r\n hasPrev={(derivedPagination.page ?? 0) > 0}\r\n loading={props.loading}\r\n onPrevPage={handlePrevPage}\r\n onNextPage={handleNextPage}\r\n onPageJump={handlePageJump}\r\n />\r\n )\r\n }\r\n return (\r\n <DataSurfaceStyled sx={props.sx}>\r\n <Box sx={{ flex: 1, minHeight: 0, position: 'relative' }}>\r\n {isInitialLoading && <PanelLoadingComponent viewMode={viewMode} />}\r\n {isNoData && <PanelNoDataComponent viewMode={viewMode} />}\r\n {!isInitialLoading && !isNoData && (\r\n <ViewSwitchTranstionInstance\r\n value={viewMode}\r\n viewA={{ value: 'list', Content: ListViewContent }}\r\n viewB={{ value: 'grid', Content: GridViewContent }}\r\n />\r\n )}\r\n {showLoadingOverlay && <PanelLoadMore />}\r\n </Box>\r\n {renderFooter()}\r\n </DataSurfaceStyled>\r\n )\r\n }\r\n return DataSurface\r\n}\r\n\r\nexport default createDataSurface\r\n\r\nconst DataSurfaceStyled = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n position: 'relative',\r\n flex: 1,\r\n minHeight: 0,\r\n backgroundColor: theme.palette.background.default\r\n}))\r\n"],"names":["createDataSurface","config","GridComponent","configInput","gridConfig","getterId","item","index","createViewGrid","ListComponent","listConfig","createViewList","_config$defaultViewMo","defaultViewMode","_config$defaultLoadMo","defaultLoadMode","_config$featureMode","featureMode","ViewSwitchTranstionInstance","createViewSwitchTransition","GridLoadingComponent","createViewGridLoading","ListLoadingComponent","createViewListLoading","props","_ref","_props$pagination$pag","_props$pagination","_props$viewMode","_props$loadMode","slots","defaultPageSize","pagination","pageSize","_useState","useState","page","_useState2","_slicedToArray","internalPagination","setInternalPagination","paginationState","useMemo","_props$pagination2","_p$page","_p$pageSize","_p$hasNext","_p$hasPrev","p","hasNext","hasPrev","total","viewMode","loadMode","renderStrategy","_config$listConfig$re","_config$listConfig","_config$gridConfig$re","_config$gridConfig","handlePrevPage","useCallback","_asyncToGenerator","_regenerator","m","_callee","_paginationState$page","_props$onPageChange","_paginationState$page2","currentPage","prevPage","w","_context","n","a","prev","_objectSpread","onPageChange","call","handleNextPage","_callee2","_paginationState$page3","_props$onPageChange2","_paginationState$page4","nextPage","_context2","handlePageJump","_ref4","_callee3","targetPage","_props$onPageChange3","_paginationState$page5","_context3","_x","apply","this","arguments","finalValue","value","scrollResetToken","undefined","useEffect","derivedPagination","_paginationState$page6","_paginationState$page7","length","paginatedValue","_derivedPagination$pa","_derivedPagination$pa2","slice","start","isEmptyData","isInitialLoading","Boolean","loading","isNoData","showLoadingOverlay","handleGridPageChange","_ref5","_callee4","_props$onPageChange4","_context4","_x2","_x3","gridPayload","gridViewProps","gridPayloadRef","useRef","current","listPayload","_props$selectable","_config$listConfig2","selectable","selectedIds","onSelectionChange","listViewProps","listPayloadRef","ListViewContent","_jsx","GridViewContent","PanelLoadingComponent","PanelLoading","PanelNoDataComponent","PanelNoData","_jsxs","DataSurfaceStyled","sx","children","Box","flex","minHeight","position","viewA","Content","viewB","PanelLoadMore","_derivedPagination$pa3","_derivedPagination$pa4","_derivedPagination$pa5","LoadingModeRule","infiniteScroll","_props$slots","footerSlots","footer","PanelInfiniteScrollFooter","currentCount","statusText","status","rangeText","range","PanelPaginationFooter","onPrevPage","onNextPage","onPageJump","renderFooter","styled","_ref6","display","flexDirection","width","height","backgroundColor","theme","palette","background"],"mappings":"quBAsFM,SAAUA,EAAqBC,GACnC,IAAKA,EAAOC,cAAe,CACzB,IAAMC,EAAkCF,EAAOG,YAAc,CAAEC,SAAU,SAACC,EAASC,GAAa,OAAKA,CAAK,GAC1GN,EAAOG,WAAaD,EACpBF,EAAOC,cAAgBM,EAAkBL,EAC1C,CAED,IAAKF,EAAOQ,cAAe,CACzB,IAAMN,EAAkCF,EAAOS,YAAc,CAAEL,SAAU,SAACC,EAASC,GAAa,OAAKA,CAAK,GAC1GN,EAAOS,WAAaP,EACpBF,EAAOQ,cAAgBE,EAAkBR,EAC1C,CAED,IAAAS,EAA6FX,EAArFY,gBAAAA,OAAkB,IAAHD,EAAG,OAAMA,EAAAE,EAA6Db,EAA3Dc,gBAAAA,OAAkB,IAAHD,EAAG,aAAYA,EAAAE,EAA6Bf,EAA3BgB,YAAAA,OAAc,IAAHD,EAAG,SAAQA,EAClFE,EAA8BC,EAAgD,IAC9EC,EAAuBC,EAAyBpB,EAAOC,eACvDoB,EAAuBC,EAAyBtB,EAAOQ,eA6O7D,OA3O8C,SAACe,GAAS,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAChDC,EAAQN,EAAMM,OAAS,CAAE,EACzBC,EAAsEN,QAAvDA,EAA6BC,QAA7BA,EAAmB,QAAnBC,EAAGH,EAAMQ,kBAANL,IAAgBA,OAAhBA,EAAAA,EAAkBM,gBAAQP,IAAAA,EAAAA,EAAIzB,EAAO8B,uBAAeN,IAAAA,EAAAA,EAAI,GAEhFS,EAAoDC,EAAsB,CAAEC,KAAM,EAAGH,SAAUF,IAAkBM,EAAAC,EAAAJ,EAAA,GAA1GK,EAAkBF,EAAA,GAAEG,EAAqBH,EAAA,GAG1CI,EAAkBC,EAAqB,WAAK,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAC1CC,EAAoB,QAAnBL,EAAGnB,EAAMQ,kBAAU,IAAAW,EAAAA,EAAIJ,EAC9B,MAAO,CACLH,KAAY,QAARQ,EAAEI,EAAEZ,YAAI,IAAAQ,EAAAA,EAAI,EAChBX,SAAoB,QAAZY,EAAEG,EAAEf,gBAAQ,IAAAY,EAAAA,EAAId,EACxBkB,QAAkB,QAAXH,EAAEE,EAAEC,eAAO,IAAAH,GAAAA,EAClBI,QAAkB,QAAXH,EAAEC,EAAEE,eAAO,IAAAH,GAAAA,EAClBI,MAAOH,EAAEG,MAEZ,EAAE,CAAC3B,EAAMQ,WAAYO,IAEhBa,EAAyB,QAAjBxB,EAAGJ,EAAM4B,gBAAQ,IAAAxB,EAAAA,EAAIf,EAC7BwC,EAAyB,QAAjBxB,EAAGL,EAAM6B,gBAAQ,IAAAxB,EAAAA,EAAId,EAG7BuC,EAAiBZ,EAAQ,WAAK,IAAAa,EAAAC,EACTC,EAAAC,EAAzB,MAAiB,SAAbN,EACsC,QAAxCK,EAAwBC,QAAxBA,EAAOzD,EAAOG,kBAAPsD,IAAiBA,OAAjBA,EAAAA,EAAmBJ,sBAAcG,IAAAA,EAAAA,EAAI,SAEN,QAAxCF,EAAwBC,QAAxBA,EAAOvD,EAAOS,kBAAP8C,IAAiBA,OAAjBA,EAAAA,EAAmBF,sBAAcC,IAAAA,EAAAA,EAAI,QAC9C,EAAG,CAACH,IAEEO,EAAiBC,EAAWC,EAAAC,IAAAC,EAAC,SAAAC,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAP,IAAAQ,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EACY,MAAvCJ,EAAkC,QAAvBH,EAAGxB,EAAgBL,YAAI,IAAA6B,EAAAA,EAAI,IACzB,GAAC,CAAAM,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAE,EAAA,GAAA,KAAA,EAInB,OAHKJ,EAAWD,EAAc,EAC1B5C,EAAMQ,YACTQ,EAAsB,SAACkC,GAAI,OAAAC,EAAAA,EAAA,CAAA,EAAWD,GAAI,CAAA,EAAA,CAAEtC,KAAMiC,GAAQ,GAC3DE,EAAAC,EAAA,EACuBN,QADvBA,EACK1C,EAAMoD,oBAANV,IAAkBA,OAAlBA,EAAAA,EAAAW,KAAArD,EAAqB6C,EAAkCF,QAA1BA,EAAE1B,EAAgBR,gBAAQkC,IAAAA,EAAAA,EAAIpC,GAAgB,KAAA,EAAA,OAAAwC,EAAAE,EAAA,GAAA,EAAAT,EAClF,IAAE,CAACvB,EAAgBL,KAAMK,EAAgBR,SAAUT,EAAMQ,WAAYR,EAAMoD,eAEtEE,EAAiBlB,EAAWC,EAAAC,IAAAC,EAAC,SAAAgB,IAAA,IAAAC,EAAAC,EAAAC,EAAAd,EAAAe,EAAA,OAAArB,IAAAQ,EAAA,SAAAc,GAAA,cAAAA,EAAAZ,GAAA,KAAA,EAAA,GAC5B/B,EAAgBQ,QAAO,CAAAmC,EAAAZ,EAAA,EAAA,KAAA,CAAA,OAAAY,EAAAX,EAAA,GAAA,KAAA,EAK3B,OAJKL,EAAkC,QAAvBY,EAAGvC,EAAgBL,YAAI,IAAA4C,EAAAA,EAAI,EACtCG,EAAWf,EAAc,EAC1B5C,EAAMQ,YACTQ,EAAsB,SAACkC,GAAI,OAAAC,EAAAA,EAAA,CAAA,EAAWD,GAAI,CAAA,EAAA,CAAEtC,KAAM+C,GAAQ,GAC3DC,EAAAZ,EAAA,EACuBS,QADvBA,EACKzD,EAAMoD,oBAANK,IAAkBA,OAAlBA,EAAAA,EAAAJ,KAAArD,EAAqB2D,EAAkCD,QAA1BA,EAAEzC,EAAgBR,gBAAQiD,IAAAA,EAAAA,EAAInD,GAAgB,KAAA,EAAA,OAAAqD,EAAAX,EAAA,GAAA,EAAAM,EAClF,IAAE,CAACtC,EAAgBQ,QAASR,EAAgBL,KAAMK,EAAgBR,SAAUT,EAAMQ,WAAYR,EAAMoD,eAE/FS,EAAiBzB,EAAW,WAAA,IAAA0B,EAAAzB,EAAAC,IAAAC,EAChC,SAAAwB,EAAOC,GAAkB,IAAAC,EAAAC,EAAA,OAAA5B,IAAAQ,EAAA,SAAAqB,GAAA,cAAAA,EAAAnB,GAAA,KAAA,EAAA,KACnBgB,EAAa,GAAC,CAAAG,EAAAnB,EAAA,EAAA,KAAA,CAAA,OAAAmB,EAAAlB,EAAA,GAAA,KAAA,EAGjB,OAFIjD,EAAMQ,YACTQ,EAAsB,SAACkC,GAAI,OAAAC,EAAAA,EAAA,CAAA,EAAWD,GAAI,CAAA,EAAA,CAAEtC,KAAMoD,GAAU,GAC7DG,EAAAnB,EAAA,EACuBiB,QADvBA,EACKjE,EAAMoD,oBAANa,IAAkBA,OAAlBA,EAAAA,EAAAZ,KAAArD,EAAqBgE,EAAoCE,QAA1BA,EAAEjD,EAAgBR,gBAAQyD,IAAAA,EAAAA,EAAI3D,GAAgB,KAAA,EAAA,OAAA4D,EAAAlB,EAAA,GAAA,EAAAc,MACpF,OAAA,SAAAK,GAAA,OAAAN,EAAAO,MAAAC,KAAAC,UAAA,CAAA,CAP+B,GAQhC,CAACtD,EAAgBR,SAAUT,EAAMQ,WAAYR,EAAMoD,eAG/CoB,EAAaxE,EAAMyE,OAAS,GAG5BC,EAAmC,WAAhBjF,EAA2BO,EAAMyE,WAAQE,EAGlEC,EAAU,WACY,WAAhBnF,GAA6BO,EAAMQ,YACrCQ,EAAsB,SAACkC,GAAI,OAAAC,EAAAA,EAAA,CAAA,EAAWD,GAAI,CAAA,EAAA,CAAEtC,KAAM,GAAC,EAEvD,EAAG,CAACZ,EAAMyE,QAGV,IAAMI,EAAoB3D,EAAqB,WAAK,IAAA4D,EAAAC,EAC5CnE,EAA2B,QAAvBkE,EAAG7D,EAAgBL,YAAI,IAAAkE,EAAAA,EAAI,EAC/BrE,EAAmC,QAA3BsE,EAAG9D,EAAgBR,gBAAQ,IAAAsE,EAAAA,EAAIxE,EAC7C,GAAoB,WAAhBd,EAA0B,CAC5B,IAAMkC,EAAQ6C,EAAWQ,OAGzB,MAAO,CAAEpE,KAAAA,EAAMH,SAAAA,EAAUgB,QAFThB,GAAYG,EAAO,GAAKe,EAEND,QADlBd,EAAO,EACoBe,MAAAA,EAC5C,CACD,OAAOV,CACT,EAAG,CAACA,EAAiBuD,EAAWQ,OAAQvF,EAAac,IAG/C0E,EAAiB/D,EAAQ,WAC7B,GAAoB,WAAhBzB,EAA0B,CAAA,IAAAyF,EAAAC,EACtBvE,EAA6B,QAAzBsE,EAAGL,EAAkBjE,YAAI,IAAAsE,EAAAA,EAAI,EACjCzE,EAAqC,QAA7B0E,EAAGN,EAAkBpE,gBAAQ,IAAA0E,EAAAA,EAAI5E,EAC/C,GAAiB,mBAAbsB,EAEF,OAAO2C,EAAWY,MAAM,GAAIxE,EAAO,GAAKH,GAE1C,IAAM4E,EAAQzE,EAAOH,EACrB,OAAO+D,EAAWY,MAAMC,EAAOA,EAAQ5E,EACxC,CACD,OAAO+D,CACT,EAAG,CAACA,EAAYK,EAAmBpF,EAAaoC,EAAUtB,IAEpD+E,EAAoC,IAAtBd,EAAWQ,OACzBO,EAAmBC,QAAQxF,EAAMyF,SAAWH,GAC5CI,GAAY1F,EAAMyF,SAAWH,EAC7BK,EAAqBH,QAAQxF,EAAMyF,WAAaH,EAEhDM,EAAuBxD,EAAW,WAAA,IAAAyD,EAAAxD,EAAAC,IAAAC,EACtC,SAAAuD,EAAOlF,EAAcH,GAAgB,IAAAsF,EAAA,OAAAzD,IAAAQ,EAAA,SAAAkD,GAAA,cAAAA,EAAAhD,GAAA,KAAA,EAGlC,OAFIhD,EAAMQ,YACTQ,EAAsB,CAAEJ,KAAAA,EAAMH,SAAAA,IAC/BuF,EAAAhD,EAAA,UAAA+C,EACK/F,EAAMoD,oBAAY,IAAA2C,OAAA,EAAlBA,EAAA1C,KAAArD,EAAqBY,EAAMH,GAAS,KAAA,EAAA,OAAAuF,EAAA/C,EAAA,GAAA,EAAA6C,MAC3C,OAAAG,SAAAA,EAAAC,GAAA,OAAAL,EAAAxB,MAAAC,KAAAC,UAAA,CACD,CAPsC,GAOtC,CAACvE,EAAMQ,WAAYR,EAAMoD,eAGrB+C,GAAcjF,EAClB,WAAA,OAAAiC,EAAA,CACEsB,MAAOQ,EACPpD,SAAAA,EACA4D,QAASzF,EAAMyF,QACfjF,WAAYqE,EACZzB,aAAcwC,EACdlB,iBAAAA,GACGpE,EAAM8F,cACT,EACF,CAACnB,EAAgBpD,EAAU7B,EAAMyF,QAASZ,EAAmBe,EAAsBlB,EAAkBpE,EAAM8F,gBAGvGC,GAAiBC,EAAiCH,IACxDE,GAAeE,QAAUJ,GAEzB,IAAMK,GAActF,EAClB,WAAA,IAAAuF,EAAAC,EAAA,OAAAvD,EAAA,CACEsB,MAAOQ,EACPpD,SAAAA,EACA4D,QAASzF,EAAMyF,QACfjF,WAAYqE,EACZzB,aAAcwC,EACd9D,eAAgBA,EAChB6E,WAA4B,QAAlBF,EAAEzG,EAAM2G,kBAAUF,IAAAA,EAAAA,UAAAC,EAAIjI,EAAOS,kBAAU,IAAAwH,OAAA,EAAjBA,EAAmBC,WACnDC,YAAa5G,EAAM4G,YACnBC,kBAAmB7G,EAAM6G,kBACzBnC,iBAAAA,GACGpE,EAAMwG,cAAa,EAExB,CACE7B,EACApD,EACA7B,EAAMyF,QACNZ,EACA/C,EACA8D,EACA5F,EAAM2G,WACN3G,EAAM4G,YACN5G,EAAM6G,kBACNnC,EACApE,EAAMwG,gBAIJC,GAAiBT,EAAiCE,IACxDO,GAAeR,QAAUC,GAEzB,IAAMQ,GAAkB9F,EAAuD,WAI7E,OAH4D,WAC1D,OAAO+F,EAACnH,EAAoBqD,KAAK4D,GAAeR,SACjD,CAEH,EAAG,CAACzG,IAEEoH,GAAkBhG,EAAuD,WAI7E,OAH4D,WAC1D,OAAO+F,EAACrH,EAAoBuD,KAAKkD,GAAeE,SACjD,CAEH,EAAG,CAAC3G,IAEEuH,GAAwBjG,EAAQ,WACpC,OAAOZ,EAAM8G,cAAgBA,CAC9B,EAAE,CAAC9G,EAAM8G,aAAcxF,IAElByF,GAAuBnG,EAAQ,WACnC,OAAOZ,EAAMgH,aAAeA,CAC7B,EAAE,CAAChH,EAAMgH,YAAa1F,IAkCvB,OACE2F,EAACC,EAAiB,CAACC,GAAIzH,EAAMyH,GAC3BC,SAAA,CAAAH,EAACI,EAAI,CAAAF,GAAI,CAAEG,KAAM,EAAGC,UAAW,EAAGC,SAAU,YACzCJ,SAAA,CAAAnC,GAAoB0B,EAACE,GAAsB,CAAAvF,SAAUA,IACrD8D,GAAYuB,EAACI,IAAqBzF,SAAUA,KAC3C2D,IAAqBG,GACrBuB,EAACvH,EAA2B,CAC1B+E,MAAO7C,EACPmG,MAAO,CAAEtD,MAAO,OAAQuD,QAAShB,IACjCiB,MAAO,CAAExD,MAAO,OAAQuD,QAASd,MAGpCvB,GAAsBsB,EAACiB,EAAgB,CAAA,MA5CzB,WAAK,IAAAC,EAAAC,EAAAC,EACxB,GAAIxG,IAAayG,EAAgBC,eAAgB,CAAA,IAAAC,EACzCC,EAAyB,QAAdD,EAAGxI,EAAMM,aAAK,IAAAkI,OAAA,EAAXA,EAAaE,OACjC,OACEzB,EAAC0B,EAAyB,CACxBlD,QAASzF,EAAMyF,QACfhE,QAASoD,EAAkBpD,QAC3BmH,aAAc3D,EAAeD,OAC7BrD,MAAOkD,EAAkBlD,MACzBrB,MAAO,CACLuI,WAAYJ,aAAAA,EAAAA,EAAaK,OACzBC,UAAWN,aAAW,EAAXA,EAAaO,QAI/B,CAGD,OACE/B,EAACgC,EAAqB,CACpBrI,KAA4B,QAAxBuH,EAAEtD,EAAkBjE,YAAI,IAAAuH,EAAAA,EAAI,EAChC1H,SAAoC,QAA5B2H,EAAEvD,EAAkBpE,gBAAQ,IAAA2H,EAAAA,EAAI7H,EACxCoB,MAAOkD,EAAkBlD,MACzBF,QAASoD,EAAkBpD,QAC3BC,SAAgC2G,QAAvBA,EAACxD,EAAkBjE,YAAIyH,IAAAA,EAAAA,EAAI,GAAK,EACzC5C,QAASzF,EAAMyF,QACfyD,WAAY/G,EACZgH,WAAY7F,EACZ8F,WAAYvF,GAGjB,CAeIwF,KAGN,CAEH,CAIA,IAAM7B,EAAoB8B,EAAO3B,EAAP2B,CAAY,SAAAC,GAAQ,MAAQ,CACpDC,QAAS,OACTC,cAAe,SACfC,MAAO,OACPC,OAAQ,OACR7B,SAAU,WACVF,KAAM,EACNC,UAAW,EACX+B,gBAR4CL,EAALM,MAQhBC,QAAQC,WAAU,QAC1C"}
1
+ {"version":3,"file":"index.create.js","sources":["../../../src/data-surface/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Box, styled } from '@mui/material'\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\nimport { DataSurfaceViewMode, LoadingModeRule, DataSurfaceFeatureMode } from './types'\r\nimport { createViewList, createViewListLoading } from './view-list'\r\nimport { createViewGrid, createViewGridLoading } from './view-grid'\r\nimport { createViewSwitchTransition } from './view-switch-transition'\r\nimport { PanelInfiniteScrollFooter, PanelLoadMore, PanelLoading, PanelNoData, PanelPaginationFooter } from './ui.units'\r\n// types\r\nimport type { BoxProps } from '@mui/material'\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { IViewGridLoadingProps } from './view-grid'\r\nimport type { IViewGridConfig, IViewGridProps } from './view-grid/types'\r\nimport type { TPagination, TDataSurfaceState, TRenderableNode } from './types'\r\nimport type { IViewListConfig, IViewListLoadingProps, IViewListProps } from './view-list'\r\n\r\nexport interface IDataSurfaceSlots<T> {\r\n listViewProps?: IViewListProps<T>\r\n gridViewProps?: IViewGridProps<T>\r\n /** Custom loading component. If not provided, a default loading component will be used. */\r\n PanelLoading?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom no data component. If not provided, a default no data component will be used. */\r\n PanelNoData?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */\r\n PanelLoadMore?: ComponentType\r\n footer?: {\r\n status?: TRenderableNode\r\n range?: TRenderableNode\r\n }\r\n}\r\n\r\nexport interface IDataSurfaceProps<T> {\r\n value?: T[]\r\n /**\r\n * @deprecated No longer used. Use `viewMode` and `loadMode` props directly instead.\r\n * Controlled state. When provided, DataSurface becomes fully controlled.\r\n */\r\n state?: TDataSurfaceState\r\n /**\r\n * @deprecated No longer used. Component now uses uncontrolled mode with props.\r\n * Called on any state change (viewMode, loadMode, page, pageSize).\r\n */\r\n onStateChange?: (state: TDataSurfaceState) => void\r\n viewMode?: DataSurfaceViewMode\r\n /** Pagination metadata shared by both modes. */\r\n pagination?: TPagination\r\n /** Default page size. @default 20 */\r\n defaultPageSize?: number\r\n /** True while a page fetch is in flight (shows loading indicator). */\r\n loading?: boolean\r\n /**\r\n * Called when the component needs a new page of data.\r\n * - pagination mode: triggered by user clicking page control\r\n * - infiniteScroll mode: triggered automatically when scrolling near the bottom\r\n * Supports async operations - return a Promise to indicate loading state.\r\n */\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n /** Load orchestration mode. @default 'pagination' */\r\n loadMode?: LoadingModeRule\r\n sx?: BoxProps['sx']\r\n slots?: IDataSurfaceSlots<T>\r\n /** Enable row selection with checkboxes (List view only). */\r\n selectable?: boolean\r\n /** Array of selected row IDs (List view only). */\r\n selectedIds?: (string | number)[]\r\n /** Callback when selection changes (List view only). */\r\n onSelectionChange?: (selectedIds: (string | number)[]) => void\r\n}\r\n\r\nexport interface IDataSurfaceConfig<T> {\r\n /** Feature mode determines the internal optimizations and rendering strategies. @default 'client' */\r\n featureMode?: DataSurfaceFeatureMode\r\n /** Default view mode when not provided via props. @default 'grid' */\r\n defaultViewMode?: DataSurfaceViewMode\r\n /** Default load mode when not provided via props. @default 'pagination' */\r\n defaultLoadMode?: LoadingModeRule\r\n /** Default page size. @default 20 */\r\n defaultPageSize?: number\r\n /** Configuration for List view. If not provided, List view will use default settings. */\r\n listConfig?: IViewListConfig<T>\r\n /** Custom List component. If not provided, a default List component will be used. */\r\n ListComponent?: ComponentType<IViewListProps<T>>\r\n /** Configuration for Grid view. If not provided, Grid view will use default settings. */\r\n gridConfig?: IViewGridConfig<T>\r\n /** Custom Grid component. If not provided, a default Grid component will be used. */\r\n GridComponent?: ComponentType<IViewGridProps<T>>\r\n /** Custom loading component. If not provided, a default loading component will be used. */\r\n PanelLoading?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom no data component. If not provided, a default no data component will be used. */\r\n PanelNoData?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */\r\n PanelLoadMore?: ComponentType\r\n}\r\n\r\nexport function createDataSurface<T>(config: IDataSurfaceConfig<T>) {\r\n if (!config.GridComponent) {\r\n const configInput: IViewGridConfig<T> = config.gridConfig || { getterId: (item: T, index: number) => index }\r\n config.gridConfig = configInput\r\n config.GridComponent = createViewGrid<T>(configInput)\r\n }\r\n\r\n if (!config.ListComponent) {\r\n const configInput: IViewListConfig<T> = config.listConfig || { getterId: (item: T, index: number) => index }\r\n config.listConfig = configInput\r\n config.ListComponent = createViewList<T>(configInput)\r\n }\r\n\r\n const { defaultViewMode = 'grid', defaultLoadMode = 'pagination', featureMode = 'client' } = config\r\n const ViewSwitchTranstionInstance = createViewSwitchTransition<DataSurfaceViewMode>({})\r\n const GridLoadingComponent = createViewGridLoading<T>(config.GridComponent as ComponentType<IViewGridProps<T>>)\r\n const ListLoadingComponent = createViewListLoading<T>(config.ListComponent as ComponentType<IViewListProps<T>>)\r\n\r\n const DataSurface: FC<IDataSurfaceProps<T>> = (props) => {\r\n const slots = props.slots || {}\r\n const defaultPageSize = props.pagination?.pageSize ?? config.defaultPageSize ?? 20\r\n // separate pagination state\r\n const [internalPagination, setInternalPagination] = useState<TPagination>({ page: 0, pageSize: defaultPageSize })\r\n\r\n // resolved pagination: external takes priority over internal\r\n const paginationState = useMemo<TPagination>(() => {\r\n const p = props.pagination ?? internalPagination\r\n return {\r\n page: p.page ?? 0,\r\n pageSize: p.pageSize ?? defaultPageSize,\r\n hasNext: p.hasNext ?? false,\r\n hasPrev: p.hasPrev ?? false,\r\n total: p.total\r\n }\r\n }, [props.pagination, internalPagination])\r\n\r\n const viewMode = props.viewMode ?? defaultViewMode\r\n const loadMode = props.loadMode ?? defaultLoadMode\r\n\r\n // Determine renderStrategy based on current viewMode\r\n const renderStrategy = useMemo(() => {\r\n if (viewMode === 'grid') {\r\n return config.gridConfig?.renderStrategy ?? 'normal'\r\n }\r\n return config.listConfig?.renderStrategy ?? 'normal'\r\n }, [viewMode])\r\n\r\n const handlePrevPage = useCallback(async () => {\r\n const currentPage = paginationState.page ?? 0\r\n if (currentPage <= 0) return\r\n const prevPage = currentPage - 1\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: prevPage }))\r\n }\r\n await props.onPageChange?.(prevPage, paginationState.pageSize ?? defaultPageSize)\r\n }, [paginationState.page, paginationState.pageSize, props.pagination, props.onPageChange])\r\n\r\n const handleNextPage = useCallback(async () => {\r\n if (!paginationState.hasNext) return\r\n const currentPage = paginationState.page ?? 0\r\n const nextPage = currentPage + 1\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: nextPage }))\r\n }\r\n await props.onPageChange?.(nextPage, paginationState.pageSize ?? defaultPageSize)\r\n }, [paginationState.hasNext, paginationState.page, paginationState.pageSize, props.pagination, props.onPageChange])\r\n\r\n const handlePageJump = useCallback(\r\n async (targetPage: number) => {\r\n if (targetPage < 0) return\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: targetPage }))\r\n }\r\n await props.onPageChange?.(targetPage, paginationState.pageSize ?? defaultPageSize)\r\n },\r\n [paginationState.pageSize, props.pagination, props.onPageChange]\r\n )\r\n\r\n const finalValue = props.value || []\r\n\r\n // Token changes whenever props.value reference changes — used to reset scroll in views (client mode only)\r\n const scrollResetToken = featureMode === 'client' ? props.value : undefined\r\n\r\n // Reset page to 0 when the data source changes (e.g. new filtered array passed in) — client mode only\r\n useEffect(() => {\r\n if (featureMode === 'client' && !props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: 0 }))\r\n }\r\n }, [props.value])\r\n\r\n // When running in client feature mode, derive pagination metadata from the full value\r\n const derivedPagination = useMemo<TPagination>(() => {\r\n const page = paginationState.page ?? 0\r\n const pageSize = paginationState.pageSize ?? defaultPageSize\r\n if (featureMode === 'client') {\r\n const total = finalValue.length\r\n const hasNext = pageSize * (page + 1) < total\r\n const hasPrev = page > 0\r\n return { page, pageSize, hasNext, hasPrev, total }\r\n }\r\n return paginationState\r\n }, [paginationState, finalValue.length, featureMode, defaultPageSize])\r\n\r\n // Slice the input value when client-side pagination is enabled\r\n const paginatedValue = useMemo(() => {\r\n if (featureMode === 'client') {\r\n const page = derivedPagination.page ?? 0\r\n const pageSize = derivedPagination.pageSize ?? defaultPageSize\r\n if (loadMode === 'infiniteScroll') {\r\n // accumulate all items from page 0 → current page\r\n return finalValue.slice(0, (page + 1) * pageSize)\r\n }\r\n const start = page * pageSize\r\n return finalValue.slice(start, start + pageSize)\r\n }\r\n return finalValue\r\n }, [finalValue, derivedPagination, featureMode, loadMode, defaultPageSize])\r\n\r\n const isEmptyData = finalValue.length === 0\r\n const isInitialLoading = Boolean(props.loading && isEmptyData)\r\n const isNoData = !props.loading && isEmptyData\r\n const showLoadingOverlay = Boolean(props.loading) && !isEmptyData\r\n\r\n const handleGridPageChange = useCallback(\r\n async (page: number, pageSize: number) => {\r\n if (!props.pagination) {\r\n setInternalPagination({ page, pageSize })\r\n }\r\n await props.onPageChange?.(page, pageSize)\r\n },\r\n [props.pagination, props.onPageChange]\r\n )\r\n\r\n const gridPayload = useMemo<IViewGridLoadingProps<T>>(\r\n () => ({\r\n value: paginatedValue,\r\n loadMode,\r\n loading: props.loading,\r\n pagination: derivedPagination,\r\n onPageChange: handleGridPageChange,\r\n scrollResetToken,\r\n ...slots.gridViewProps\r\n }),\r\n [paginatedValue, loadMode, props.loading, derivedPagination, handleGridPageChange, scrollResetToken, slots.gridViewProps]\r\n )\r\n\r\n const gridPayloadRef = useRef<IViewGridLoadingProps<T>>(gridPayload)\r\n gridPayloadRef.current = gridPayload\r\n\r\n const listPayload = useMemo<IViewListLoadingProps<T>>(\r\n () => ({\r\n value: paginatedValue,\r\n loadMode,\r\n loading: props.loading,\r\n pagination: derivedPagination,\r\n onPageChange: handleGridPageChange,\r\n renderStrategy: renderStrategy,\r\n selectable: props.selectable ?? config.listConfig?.selectable,\r\n selectedIds: props.selectedIds,\r\n onSelectionChange: props.onSelectionChange,\r\n scrollResetToken,\r\n ...slots.listViewProps\r\n }),\r\n [\r\n paginatedValue,\r\n loadMode,\r\n props.loading,\r\n derivedPagination,\r\n renderStrategy,\r\n handleGridPageChange,\r\n props.selectable,\r\n props.selectedIds,\r\n props.onSelectionChange,\r\n scrollResetToken,\r\n slots.listViewProps\r\n ]\r\n )\r\n\r\n const listPayloadRef = useRef<IViewListLoadingProps<T>>(listPayload)\r\n listPayloadRef.current = listPayload\r\n\r\n const ListViewContent = useMemo<ComponentType<{ value: DataSurfaceViewMode }>>(() => {\r\n const ViewListContent: FC<{ value: DataSurfaceViewMode }> = () => {\r\n return <ListLoadingComponent {...listPayloadRef.current} />\r\n }\r\n return ViewListContent\r\n }, [ListLoadingComponent])\r\n\r\n const GridViewContent = useMemo<ComponentType<{ value: DataSurfaceViewMode }>>(() => {\r\n const ViewGridContent: FC<{ value: DataSurfaceViewMode }> = () => {\r\n return <GridLoadingComponent {...gridPayloadRef.current} />\r\n }\r\n return ViewGridContent\r\n }, [GridLoadingComponent])\r\n\r\n const PanelLoadingComponent = useMemo(() => {\r\n return slots.PanelLoading || config?.PanelLoading || PanelLoading\r\n }, [slots.PanelLoading, config.PanelLoading, viewMode])\r\n\r\n const PanelNoDataComponent = useMemo(() => {\r\n return slots.PanelNoData || config?.PanelNoData || PanelNoData\r\n }, [slots.PanelNoData, config.PanelNoData, viewMode])\r\n\r\n const PanelLoadMoreComponent = useMemo(() => {\r\n return slots.PanelLoadMore || config?.PanelLoadMore || PanelLoadMore\r\n }, [slots.PanelLoadMore, config.PanelLoadMore])\r\n\r\n const renderFooter = () => {\r\n if (loadMode === LoadingModeRule.infiniteScroll) {\r\n const footerSlots = props.slots?.footer\r\n return (\r\n <PanelInfiniteScrollFooter\r\n loading={props.loading}\r\n hasNext={derivedPagination.hasNext}\r\n currentCount={paginatedValue.length}\r\n total={derivedPagination.total}\r\n slots={{\r\n statusText: footerSlots?.status,\r\n rangeText: footerSlots?.range\r\n }}\r\n />\r\n )\r\n }\r\n\r\n // pagination mode\r\n return (\r\n <PanelPaginationFooter\r\n page={derivedPagination.page ?? 0}\r\n pageSize={derivedPagination.pageSize ?? defaultPageSize}\r\n total={derivedPagination.total}\r\n hasNext={derivedPagination.hasNext}\r\n hasPrev={(derivedPagination.page ?? 0) > 0}\r\n loading={props.loading}\r\n onPrevPage={handlePrevPage}\r\n onNextPage={handleNextPage}\r\n onPageJump={handlePageJump}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <DataSurfaceStyled sx={props.sx}>\r\n <Box sx={{ flex: 1, minHeight: 0, position: 'relative' }}>\r\n {isInitialLoading && <PanelLoadingComponent viewMode={viewMode} />}\r\n {isNoData && <PanelNoDataComponent viewMode={viewMode} />}\r\n {!isInitialLoading && !isNoData && (\r\n <ViewSwitchTranstionInstance\r\n value={viewMode}\r\n viewA={{ value: 'list', Content: ListViewContent }}\r\n viewB={{ value: 'grid', Content: GridViewContent }}\r\n />\r\n )}\r\n {showLoadingOverlay && <PanelLoadMoreComponent />}\r\n </Box>\r\n {renderFooter()}\r\n </DataSurfaceStyled>\r\n )\r\n }\r\n return DataSurface\r\n}\r\n\r\nexport default createDataSurface\r\n\r\nconst DataSurfaceStyled = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n position: 'relative',\r\n flex: 1,\r\n minHeight: 0,\r\n backgroundColor: theme.palette.background.default\r\n}))\r\n"],"names":["createDataSurface","config","GridComponent","configInput","gridConfig","getterId","item","index","createViewGrid","ListComponent","listConfig","createViewList","_config$defaultViewMo","defaultViewMode","_config$defaultLoadMo","defaultLoadMode","_config$featureMode","featureMode","ViewSwitchTranstionInstance","createViewSwitchTransition","GridLoadingComponent","createViewGridLoading","ListLoadingComponent","createViewListLoading","props","_ref","_props$pagination$pag","_props$pagination","_props$viewMode","_props$loadMode","slots","defaultPageSize","pagination","pageSize","_useState","useState","page","_useState2","_slicedToArray","internalPagination","setInternalPagination","paginationState","useMemo","_props$pagination2","_p$page","_p$pageSize","_p$hasNext","_p$hasPrev","p","hasNext","hasPrev","total","viewMode","loadMode","renderStrategy","_config$listConfig$re","_config$listConfig","_config$gridConfig$re","_config$gridConfig","handlePrevPage","useCallback","_asyncToGenerator","_regenerator","m","_callee","_paginationState$page","_props$onPageChange","_paginationState$page2","currentPage","prevPage","w","_context","n","a","prev","_objectSpread","onPageChange","call","handleNextPage","_callee2","_paginationState$page3","_props$onPageChange2","_paginationState$page4","nextPage","_context2","handlePageJump","_ref4","_callee3","targetPage","_props$onPageChange3","_paginationState$page5","_context3","_x","apply","this","arguments","finalValue","value","scrollResetToken","undefined","useEffect","derivedPagination","_paginationState$page6","_paginationState$page7","length","paginatedValue","_derivedPagination$pa","_derivedPagination$pa2","slice","start","isEmptyData","isInitialLoading","Boolean","loading","isNoData","showLoadingOverlay","handleGridPageChange","_ref5","_callee4","_props$onPageChange4","_context4","_x2","_x3","gridPayload","gridViewProps","gridPayloadRef","useRef","current","listPayload","_props$selectable","_config$listConfig2","selectable","selectedIds","onSelectionChange","listViewProps","listPayloadRef","ListViewContent","_jsx","GridViewContent","PanelLoadingComponent","PanelLoading","PanelNoDataComponent","PanelNoData","PanelLoadMoreComponent","PanelLoadMore","_jsxs","DataSurfaceStyled","sx","children","Box","flex","minHeight","position","viewA","Content","viewB","_derivedPagination$pa3","_derivedPagination$pa4","_derivedPagination$pa5","LoadingModeRule","infiniteScroll","_props$slots","footerSlots","footer","PanelInfiniteScrollFooter","currentCount","statusText","status","rangeText","range","PanelPaginationFooter","onPrevPage","onNextPage","onPageJump","renderFooter","styled","_ref6","display","flexDirection","width","height","backgroundColor","theme","palette","background"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as e,objectWithoutProperties as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as n,jsx as t}from"react/jsx-runtime";import{colors as o,styled as i,Box as a,alpha as l,Typography as c,Pagination as d,CircularProgress as u,Stack as s}from"@mui/material";var g=["viewMode"],p={padding:"8px",height:"100%",minHeight:180,width:"100%","& > .inner":{width:"100%",height:"100%",padding:"24px 16px",border:"1px dashed ".concat(o.grey[400]),borderRadius:6,display:"flex",alignItems:"center",justifyContent:"center",textAlign:"center"}},h=function(o){o.viewMode;var i=r(o,g);return t(b,e(e({},i),{},{children:n("div",{className:"inner",children:[t(u,{size:24}),t(c,{variant:"body2",color:"primary",children:"Loading..."})]})}))},b=i(a)(e(e({},p),{},{"& > div":{gap:8,borderColor:o.blue[400],backgroundColor:o.blue[50]}}));i(a)(e(e({},p),{},{"& > div":{borderColor:o.red[400],backgroundColor:o.red[50],color:o.red[900],flexDirection:"column"}}));var m=function(){return t(x,{children:n("div",{className:"inner",children:[t(c,{variant:"h6",gutterBottom:!0,children:"No data available"}),t(c,{variant:"body2",children:"Try changing the filter or search keyword"})]})})},x=i(a)(e(e({},p),{},{"& > div":{borderColor:o.grey[400],backgroundColor:o.grey[50],color:o.grey[700],flexDirection:"column"}}));i(a)(e(e({},p),{},{"& > div":{borderColor:o.blue[400],backgroundColor:o.blue[50],color:o.blue[900],flexDirection:"column"}})),i(a)(e(e({},p),{},{"& > div":{borderColor:o.red[700],backgroundColor:o.red[50],color:o.red[900],flexDirection:"column"}}));var v=function(){return t(f,{children:n("div",{children:[t(u,{size:24,thickness:4}),t(c,{variant:"body2",color:"text.primary",children:"Loading more..."})]})})},f=i(a)(function(e){return{position:"absolute",inset:0,bgcolor:"dark"===e.theme.palette.mode?"rgba(0,0,0,0.12)":"rgba(255,255,255,0.12)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:10,backdropFilter:"blur(1px)",transition:"opacity 0.2s","& > div":{display:"flex",alignItems:"center",gap:10}}}),y=function(e){var r,o=e.slots,i=e.loading,a=e.hasNext,l=e.currentCount,d=e.total,g=function(e){return"string"!=typeof e?e:t(c,{variant:"caption",color:"text.secondary",children:e})},p=function(e,r){var o="Loading more...",i="Scroll for more",a="No more items";return e?{currentNode:n(s,{flexDirection:"row",alignItems:"center",gap:1,children:[t(u,{color:"primary",size:12,thickness:3}),t(c,{variant:"caption",color:"primary.main",children:o})]}),rawText:o}:r?{currentNode:i,rawText:i}:{currentNode:a,rawText:a}}(i,a),h=p.currentNode;"function"==typeof(null==o?void 0:o.statusText)?h=o.statusText(g(p.currentNode),p.rawText):null!=o&&o.statusText&&(h=o.statusText);var b=l>0?null!=d?"1–".concat(l," of ").concat(d):"1–".concat(l):"—",m="function"==typeof(null==o?void 0:o.rangeText)?o.rangeText(b,b):null!==(r=null==o?void 0:o.rangeText)&&void 0!==r?r:b;return t(C,{children:n("div",{children:[g(h),g(m)]})})},C=i(a)(function(e){var r=e.theme;return{"& > div":{display:"flex",alignItems:"center",justifyContent:"space-between",padding:r.spacing(1,1.5),backgroundColor:l(r.palette.grey[500],.08),borderTop:"1px solid ".concat(l(r.palette.common.black,.08))},".MuiTypography-root":{lineHeight:1}}}),k=function(e){var r=e.page,o=e.pageSize,i=e.total,a=e.hasNext,l=e.loading,u=e.onPrevPage,s=e.onNextPage,g=e.onPageJump,p=r*o+1,h=null!=i?Math.min(p+o-1,i):p+o-1,b=null!=i?Math.ceil(i/o):void 0;return n(T,{children:[t(c,{variant:"caption",color:"text.secondary",children:null!=i?"".concat(p,"–").concat(h," / ").concat(i):"Page ".concat(r+1)}),t(d,{count:b,page:r+1,onChange:function(e,n){var t=n-1;g?g(t):t<r?null==u||u():t>r&&(null==s||s())},disabled:l,size:"small",showFirstButton:null!=b&&b>5,showLastButton:null!=b&&b>5,siblingCount:0,boundaryCount:1,hidePrevButton:null==b&&!a,hideNextButton:null==b&&!a})]})},T=i(a)(function(e){var r=e.theme;return{padding:"8px 16px",display:"flex",alignItems:"center",justifyContent:"space-between",backgroundColor:r.palette.background.paper,borderTop:"1px solid ".concat("dark"===r.palette.mode?"rgba(255, 255, 255, 0.12)":"rgba(0, 0, 0, 0.12)")}});export{y as PanelInfiniteScrollFooter,v as PanelLoadMore,h as PanelLoading,m as PanelNoData,k as PanelPaginationFooter};
1
+ import{objectSpread2 as e,defineProperty as r,objectWithoutProperties as n}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as o}from"react/jsx-runtime";import{colors as i,styled as a,Box as l,alpha as c,typographyClasses as d,Typography as u,Pagination as s,CircularProgress as g,Stack as p}from"@mui/material";var h=["viewMode"],b={padding:"8px",height:"100%",minHeight:180,width:"100%","& > .inner":{width:"100%",height:"100%",padding:"24px 16px",border:"1px dashed ".concat(i.grey[400]),borderRadius:6,display:"flex",alignItems:"center",justifyContent:"center",textAlign:"center"}},m=function(r){r.viewMode;var i=n(r,h);return o(x,e(e({},i),{},{children:t("div",{className:"inner",children:[o(g,{size:24}),o(u,{variant:"body2",color:"primary",children:"Loading..."})]})}))},x=a(l)(e(e({},b),{},{"& > div":{gap:8,borderColor:i.blue[400],backgroundColor:c(i.blue[50],.12)}}));a(l)(e(e({},b),{},{"& > div":{borderColor:i.red[400],backgroundColor:i.red[50],color:i.red[900],flexDirection:"column"}}));var v=function(){return o(f,{children:t("div",{className:"inner",children:[o(u,{variant:"h6",gutterBottom:!0,children:"No data available"}),o(u,{variant:"body2",children:"Try changing the filter or search keyword"})]})})},f=a(l)(e(e({},b),{},{"& > div":{borderColor:i.grey[400],backgroundColor:i.grey[50],color:i.grey[700],flexDirection:"column"}}));a(l)(e(e({},b),{},{"& > div":{borderColor:i.blue[400],backgroundColor:i.blue[50],color:i.blue[900],flexDirection:"column"}})),a(l)(e(e({},b),{},{"& > div":{borderColor:i.red[700],backgroundColor:i.red[50],color:i.red[900],flexDirection:"column"}}));var y=function(){return o(C,{children:o("div",{children:o(g,{size:28,thickness:4})})})},C=a(l)(function(e){return{position:"absolute",inset:0,backgroundColor:"dark"===e.theme.palette.mode?"rgba(0,0,0,0.24)":"rgba(255,255,255,0.24)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:10,backdropFilter:"blur(1.5px)",transition:"opacity 0.2s","& > div":{display:"flex",alignItems:"center",gap:10}}}),k=function(e){var r,n=e.slots,i=e.loading,a=e.hasNext,l=e.currentCount,c=e.total,d=function(e){return"string"!=typeof e?e:o(u,{variant:"caption",color:"text.secondary",children:e})},s=function(e,r){var n="Loading more...",i="Scroll for more",a="No more items";return e?{currentNode:t(p,{flexDirection:"row",alignItems:"center",gap:1,children:[o(g,{color:"primary",size:12,thickness:3}),o(u,{variant:"caption",color:"primary.main",children:n})]}),rawText:n}:r?{currentNode:i,rawText:i}:{currentNode:a,rawText:a}}(i,a),h=s.currentNode;"function"==typeof(null==n?void 0:n.statusText)?h=n.statusText(d(s.currentNode),s.rawText):null!=n&&n.statusText&&(h=n.statusText);var b=l>0?null!=c?"1–".concat(l," of ").concat(c):"1–".concat(l):"—",m="function"==typeof(null==n?void 0:n.rangeText)?n.rangeText(b,b):null!==(r=null==n?void 0:n.rangeText)&&void 0!==r?r:b;return o(w,{children:t("div",{children:[d(h),d(m)]})})},w=a(l)(function(e){var n=e.theme;return r({"& > div":{display:"flex",alignItems:"center",justifyContent:"space-between",padding:n.spacing(1,1.5),backgroundColor:c(n.palette.grey[500],.08),borderTop:"1px solid ".concat(c(n.palette.common.black,.08))}},".".concat(d.root),{lineHeight:1,fontWeight:500})}),T=function(e){var r=e.page,n=e.pageSize,i=e.total,a=e.hasNext,l=e.loading,c=e.onPrevPage,d=e.onNextPage,g=e.onPageJump,p=r*n+1,h=null!=i?Math.min(p+n-1,i):p+n-1,b=null!=i?Math.ceil(i/n):void 0;return t(N,{children:[o(u,{variant:"caption",color:"text.secondary",children:null!=i?"".concat(p,"–").concat(h," / ").concat(i):"Page ".concat(r+1)}),o(s,{count:b,page:r+1,onChange:function(e,n){var t=n-1;g?g(t):t<r?null==c||c():t>r&&(null==d||d())},disabled:l,size:"small",showFirstButton:null!=b&&b>5,showLastButton:null!=b&&b>5,siblingCount:0,boundaryCount:1,hidePrevButton:null==b&&!a,hideNextButton:null==b&&!a})]})},N=a(l)(function(e){var r=e.theme;return{padding:"8px 16px",display:"flex",alignItems:"center",justifyContent:"space-between",backgroundColor:r.palette.background.paper,borderTop:"1px solid ".concat("dark"===r.palette.mode?"rgba(255, 255, 255, 0.12)":"rgba(0, 0, 0, 0.12)")}});export{k as PanelInfiniteScrollFooter,y as PanelLoadMore,m as PanelLoading,v as PanelNoData,T as PanelPaginationFooter};
2
2
  //# sourceMappingURL=ui.units.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.units.js","sources":["../../../src/data-surface/ui.units.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Box, CircularProgress, Pagination, Typography, colors, styled, alpha, Stack } from '@mui/material'\r\n// types\r\nimport type { FC, ReactNode } from 'react'\r\nimport type { BoxProps } from '@mui/material'\r\nimport { DataSurfaceViewMode, TRenderableNode } from './types'\r\n\r\nconst stateWrapBase = {\r\n padding: '8px',\r\n height: '100%',\r\n minHeight: 180,\r\n width: '100%',\r\n '& > .inner': {\r\n width: '100%',\r\n height: '100%',\r\n padding: '24px 16px',\r\n border: `1px dashed ${colors.grey[400]}`,\r\n borderRadius: 6,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n textAlign: 'center'\r\n }\r\n} as const\r\n\r\nexport const PanelLoading: FC<BoxProps & { viewMode: DataSurfaceViewMode }> = (props) => {\r\n const { viewMode, ...rest } = props\r\n return (\r\n <PanelLoadingStyled {...rest}>\r\n <div className='inner'>\r\n <CircularProgress size={24} />\r\n <Typography variant='body2' color='primary'>\r\n Loading...\r\n </Typography>\r\n </div>\r\n </PanelLoadingStyled>\r\n )\r\n}\r\n\r\nconst PanelLoadingStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n gap: 8,\r\n borderColor: colors.blue[400],\r\n backgroundColor: colors.blue[50]\r\n }\r\n})\r\n\r\nexport const PanelError: FC<{ error: string }> = ({ error }) => (\r\n <PanelErrorStyled>\r\n <div className='inner'>\r\n <Typography variant='h6' gutterBottom>\r\n An error occurred\r\n </Typography>\r\n {error && <Typography variant='body2'>{error}</Typography>}\r\n </div>\r\n </PanelErrorStyled>\r\n)\r\n\r\nconst PanelErrorStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n borderColor: colors.red[400],\r\n backgroundColor: colors.red[50],\r\n color: colors.red[900],\r\n flexDirection: 'column'\r\n }\r\n})\r\n\r\nexport const PanelNoData: FC = () => (\r\n <PanelNoDataStyled>\r\n <div className='inner'>\r\n <Typography variant='h6' gutterBottom>\r\n No data available\r\n </Typography>\r\n <Typography variant='body2'>Try changing the filter or search keyword</Typography>\r\n </div>\r\n </PanelNoDataStyled>\r\n)\r\n\r\nconst PanelNoDataStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n borderColor: colors.grey[400],\r\n backgroundColor: colors.grey[50],\r\n color: colors.grey[700],\r\n flexDirection: 'column'\r\n }\r\n})\r\n\r\nexport const PanelWaiting: FC = () => (\r\n <PanelWaitingStyled>\r\n <div className='inner'>\r\n <Typography variant='h6' color='text.primary' sx={{ fontWeight: 'bold' }}>\r\n Waiting for data...\r\n </Typography>\r\n <Typography variant='body2' color='text.secondary'>\r\n Please wait while we fetch the data.\r\n </Typography>\r\n </div>\r\n </PanelWaitingStyled>\r\n)\r\n\r\nconst PanelWaitingStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n borderColor: colors.blue[400],\r\n backgroundColor: colors.blue[50],\r\n color: colors.blue[900],\r\n flexDirection: 'column'\r\n }\r\n})\r\n\r\nexport const PanelMissingConfig: FC = () => (\r\n <PanelMissingConfigStyled>\r\n <div className='inner'>\r\n <Typography variant='h6' sx={{ fontWeight: 'bold' }}>\r\n Missing Configuration\r\n </Typography>\r\n <Typography variant='body2'>A required configuration is missing for this view to work correctly.</Typography>\r\n </div>\r\n </PanelMissingConfigStyled>\r\n)\r\n\r\nconst PanelMissingConfigStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n borderColor: colors.red[700],\r\n backgroundColor: colors.red[50],\r\n color: colors.red[900],\r\n flexDirection: 'column'\r\n }\r\n})\r\n\r\nexport const PanelLoadMore: FC = () => (\r\n <PanelLoadMoreStyled>\r\n <div>\r\n <CircularProgress size={24} thickness={4} />\r\n <Typography variant='body2' color='text.primary'>\r\n Loading more...\r\n </Typography>\r\n </div>\r\n </PanelLoadMoreStyled>\r\n)\r\n\r\nconst PanelLoadMoreStyled = styled(Box)(({ theme }) => ({\r\n position: 'absolute',\r\n inset: 0,\r\n bgcolor: theme.palette.mode === 'dark' ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 10,\r\n backdropFilter: 'blur(1px)',\r\n transition: 'opacity 0.2s',\r\n '& > div': { display: 'flex', alignItems: 'center', gap: 10 }\r\n}))\r\n\r\nexport interface IPanelInfiniteScrollFooterSlots {\r\n statusText?: TRenderableNode\r\n rangeText?: TRenderableNode\r\n}\r\n\r\nexport interface IPanelInfiniteScrollFooterProps {\r\n loading?: boolean\r\n hasNext?: boolean\r\n currentCount: number\r\n total?: number\r\n slots?: IPanelInfiniteScrollFooterSlots\r\n}\r\n\r\nconst mapStatusText = (loading?: boolean, hasNext?: boolean): { currentNode: ReactNode; rawText: string } => {\r\n const mapRawText: Record<string, string> = { loading: 'Loading more...', hasNext: 'Scroll for more', noMore: 'No more items' }\r\n if (loading) {\r\n return {\r\n currentNode: (\r\n <Stack flexDirection='row' alignItems='center' gap={1}>\r\n <CircularProgress color='primary' size={12} thickness={3} />\r\n <Typography variant='caption' color='primary.main'>\r\n {mapRawText.loading}\r\n </Typography>\r\n </Stack>\r\n ),\r\n rawText: mapRawText.loading\r\n }\r\n } else if (hasNext) {\r\n return { currentNode: mapRawText.hasNext, rawText: mapRawText.hasNext }\r\n } else {\r\n return { currentNode: mapRawText.noMore, rawText: mapRawText.noMore }\r\n }\r\n}\r\n\r\nexport const PanelInfiniteScrollFooter: FC<IPanelInfiniteScrollFooterProps> = (props) => {\r\n const { slots, loading, hasNext, currentCount, total } = props\r\n\r\n const renderText = (value: ReactNode) => {\r\n if (typeof value !== 'string') return value\r\n return (\r\n <Typography variant='caption' color='text.secondary'>\r\n {value}\r\n </Typography>\r\n )\r\n }\r\n\r\n // Status text on the left\r\n let obj = mapStatusText(loading, hasNext)\r\n let finalStatusText: ReactNode = obj.currentNode\r\n if (typeof slots?.statusText === 'function') {\r\n finalStatusText = slots.statusText(renderText(obj.currentNode), obj.rawText)\r\n } else if (slots?.statusText) {\r\n finalStatusText = slots.statusText\r\n }\r\n\r\n // Range text on the right\r\n const rangeText = currentCount > 0 ? (total != null ? `1–${currentCount} of ${total}` : `1–${currentCount}`) : '—'\r\n const finalRangeText = typeof slots?.rangeText === 'function' ? slots.rangeText(rangeText, rangeText) : (slots?.rangeText ?? rangeText)\r\n\r\n return (\r\n <PanelInfiniteScrollFooterStyled>\r\n <div>\r\n {renderText(finalStatusText)}\r\n {renderText(finalRangeText)}\r\n </div>\r\n </PanelInfiniteScrollFooterStyled>\r\n )\r\n}\r\n\r\nconst PanelInfiniteScrollFooterStyled = styled(Box)(({ theme }) => ({\r\n // padding: theme.spacing(0, 1),\r\n '& > div': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: theme.spacing(1, 1.5),\r\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\r\n borderTop: `1px solid ${alpha(theme.palette.common.black, 0.08)}`\r\n },\r\n '.MuiTypography-root': { lineHeight: 1 }\r\n}))\r\n\r\nexport interface IPanelPaginationFooterProps {\r\n page: number\r\n pageSize: number\r\n total?: number\r\n hasNext?: boolean\r\n hasPrev?: boolean\r\n loading?: boolean\r\n onPrevPage?: () => void\r\n onNextPage?: () => void\r\n onPageJump?: (page: number) => void\r\n}\r\n\r\nexport const PanelPaginationFooter: FC<IPanelPaginationFooterProps> = (props) => {\r\n const { page, pageSize, total, hasNext, loading, onPrevPage, onNextPage, onPageJump } = props\r\n const from = page * pageSize + 1\r\n const to = total != null ? Math.min(from + pageSize - 1, total) : from + pageSize - 1\r\n\r\n // Calculate page count for MUI Pagination (1-indexed)\r\n const pageCount = total != null ? Math.ceil(total / pageSize) : undefined\r\n\r\n const handlePageChange = (_event: any, value: number) => {\r\n // MUI Pagination uses 1-indexed, convert to 0-indexed\r\n const targetPage = value - 1\r\n\r\n if (onPageJump) {\r\n // Use direct page jump if available\r\n onPageJump(targetPage)\r\n } else {\r\n // Fallback to prev/next if no jump handler\r\n if (targetPage < page) {\r\n onPrevPage?.()\r\n } else if (targetPage > page) {\r\n onNextPage?.()\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <PanelPaginationFooterStyled>\r\n <Typography variant='caption' color='text.secondary'>\r\n {total != null ? `${from}–${to} / ${total}` : `Page ${page + 1}`}\r\n </Typography>\r\n <Pagination\r\n count={pageCount}\r\n page={page + 1}\r\n onChange={handlePageChange}\r\n disabled={loading}\r\n size='small'\r\n showFirstButton={pageCount != null && pageCount > 5}\r\n showLastButton={pageCount != null && pageCount > 5}\r\n siblingCount={0}\r\n boundaryCount={1}\r\n hidePrevButton={pageCount == null && !hasNext}\r\n hideNextButton={pageCount == null && !hasNext}\r\n />\r\n </PanelPaginationFooterStyled>\r\n )\r\n}\r\n\r\nconst PanelPaginationFooterStyled = styled(Box)(({ theme }) => ({\r\n padding: '8px 16px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n backgroundColor: theme.palette.background.paper,\r\n borderTop: `1px solid ${theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.12)' : 'rgba(0, 0, 0, 0.12)'}`\r\n}))\r\n"],"names":["stateWrapBase","padding","height","minHeight","width","border","concat","colors","grey","borderRadius","display","alignItems","justifyContent","textAlign","PanelLoading","props","viewMode","rest","_objectWithoutProperties","_excluded","_jsx","PanelLoadingStyled","_objectSpread","children","_jsxs","className","CircularProgress","size","Typography","variant","color","styled","Box","gap","borderColor","blue","backgroundColor","red","flexDirection","PanelNoData","PanelNoDataStyled","gutterBottom","PanelLoadMore","PanelLoadMoreStyled","thickness","_ref2","position","inset","bgcolor","theme","palette","mode","zIndex","backdropFilter","transition","PanelInfiniteScrollFooter","_slots$rangeText","slots","loading","hasNext","currentCount","total","renderText","value","obj","mapRawText","currentNode","Stack","rawText","mapStatusText","finalStatusText","statusText","rangeText","finalRangeText","PanelInfiniteScrollFooterStyled","_ref3","spacing","alpha","borderTop","common","black","lineHeight","PanelPaginationFooter","page","pageSize","onPrevPage","onNextPage","onPageJump","from","to","Math","min","pageCount","ceil","undefined","PanelPaginationFooterStyled","Pagination","count","onChange","_event","targetPage","disabled","showFirstButton","showLastButton","siblingCount","boundaryCount","hidePrevButton","hideNextButton","_ref4","background","paper"],"mappings":"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"}
1
+ {"version":3,"file":"ui.units.js","sources":["../../../src/data-surface/ui.units.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Box, CircularProgress, Pagination, Typography, colors, styled, alpha, Stack, typographyClasses } from '@mui/material'\r\n// types\r\nimport type { FC, ReactNode } from 'react'\r\nimport type { BoxProps } from '@mui/material'\r\nimport { DataSurfaceViewMode, TRenderableNode } from './types'\r\n\r\nconst stateWrapBase = {\r\n padding: '8px',\r\n height: '100%',\r\n minHeight: 180,\r\n width: '100%',\r\n '& > .inner': {\r\n width: '100%',\r\n height: '100%',\r\n padding: '24px 16px',\r\n border: `1px dashed ${colors.grey[400]}`,\r\n borderRadius: 6,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n textAlign: 'center'\r\n }\r\n} as const\r\n\r\nexport const PanelLoading: FC<BoxProps & { viewMode: DataSurfaceViewMode }> = (props) => {\r\n const { viewMode, ...rest } = props\r\n return (\r\n <PanelLoadingStyled {...rest}>\r\n <div className='inner'>\r\n <CircularProgress size={24} />\r\n <Typography variant='body2' color='primary'>\r\n Loading...\r\n </Typography>\r\n </div>\r\n </PanelLoadingStyled>\r\n )\r\n}\r\n\r\nconst PanelLoadingStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n gap: 8,\r\n borderColor: colors.blue[400],\r\n backgroundColor: alpha(colors.blue[50], 0.12)\r\n }\r\n})\r\n\r\nexport const PanelError: FC<{ error: string }> = ({ error }) => (\r\n <PanelErrorStyled>\r\n <div className='inner'>\r\n <Typography variant='h6' gutterBottom>\r\n An error occurred\r\n </Typography>\r\n {error && <Typography variant='body2'>{error}</Typography>}\r\n </div>\r\n </PanelErrorStyled>\r\n)\r\n\r\nconst PanelErrorStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n borderColor: colors.red[400],\r\n backgroundColor: colors.red[50],\r\n color: colors.red[900],\r\n flexDirection: 'column'\r\n }\r\n})\r\n\r\nexport const PanelNoData: FC = () => (\r\n <PanelNoDataStyled>\r\n <div className='inner'>\r\n <Typography variant='h6' gutterBottom>\r\n No data available\r\n </Typography>\r\n <Typography variant='body2'>Try changing the filter or search keyword</Typography>\r\n </div>\r\n </PanelNoDataStyled>\r\n)\r\n\r\nconst PanelNoDataStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n borderColor: colors.grey[400],\r\n backgroundColor: colors.grey[50],\r\n color: colors.grey[700],\r\n flexDirection: 'column'\r\n }\r\n})\r\n\r\nexport const PanelWaiting: FC = () => (\r\n <PanelWaitingStyled>\r\n <div className='inner'>\r\n <Typography variant='h6' color='text.primary' sx={{ fontWeight: 'bold' }}>\r\n Waiting for data...\r\n </Typography>\r\n <Typography variant='body2' color='text.secondary'>\r\n Please wait while we fetch the data.\r\n </Typography>\r\n </div>\r\n </PanelWaitingStyled>\r\n)\r\n\r\nconst PanelWaitingStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n borderColor: colors.blue[400],\r\n backgroundColor: colors.blue[50],\r\n color: colors.blue[900],\r\n flexDirection: 'column'\r\n }\r\n})\r\n\r\nexport const PanelMissingConfig: FC = () => (\r\n <PanelMissingConfigStyled>\r\n <div className='inner'>\r\n <Typography variant='h6' sx={{ fontWeight: 'bold' }}>\r\n Missing Configuration\r\n </Typography>\r\n <Typography variant='body2'>A required configuration is missing for this view to work correctly.</Typography>\r\n </div>\r\n </PanelMissingConfigStyled>\r\n)\r\n\r\nconst PanelMissingConfigStyled = styled(Box)({\r\n ...stateWrapBase,\r\n '& > div': {\r\n borderColor: colors.red[700],\r\n backgroundColor: colors.red[50],\r\n color: colors.red[900],\r\n flexDirection: 'column'\r\n }\r\n})\r\n\r\nexport const PanelLoadMore: FC = () => (\r\n <PanelLoadMoreStyled>\r\n <div>\r\n <CircularProgress size={28} thickness={4} />\r\n {/* <Typography variant='body2'>Loading more...</Typography> */}\r\n </div>\r\n </PanelLoadMoreStyled>\r\n)\r\n\r\nconst PanelLoadMoreStyled = styled(Box)(({ theme }) => {\r\n const isDark = theme.palette.mode === 'dark'\r\n const bgColor = isDark ? 'rgba(0,0,0,0.24)' : 'rgba(255,255,255,0.24)'\r\n // const textColor = theme.palette.text.primary\r\n return {\r\n position: 'absolute',\r\n inset: 0,\r\n backgroundColor: bgColor,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 10,\r\n backdropFilter: 'blur(1.5px)',\r\n transition: 'opacity 0.2s',\r\n '& > div': { display: 'flex', alignItems: 'center', gap: 10 }\r\n // [`.${typographyClasses.root}`]: { color: textColor }\r\n }\r\n})\r\n\r\nexport interface IPanelInfiniteScrollFooterSlots {\r\n statusText?: TRenderableNode\r\n rangeText?: TRenderableNode\r\n}\r\n\r\nexport interface IPanelInfiniteScrollFooterProps {\r\n loading?: boolean\r\n hasNext?: boolean\r\n currentCount: number\r\n total?: number\r\n slots?: IPanelInfiniteScrollFooterSlots\r\n}\r\n\r\nconst mapStatusText = (loading?: boolean, hasNext?: boolean): { currentNode: ReactNode; rawText: string } => {\r\n const mapRawText: Record<string, string> = { loading: 'Loading more...', hasNext: 'Scroll for more', noMore: 'No more items' }\r\n if (loading) {\r\n return {\r\n currentNode: (\r\n <Stack flexDirection='row' alignItems='center' gap={1}>\r\n <CircularProgress color='primary' size={12} thickness={3} />\r\n <Typography variant='caption' color='primary.main'>\r\n {mapRawText.loading}\r\n </Typography>\r\n </Stack>\r\n ),\r\n rawText: mapRawText.loading\r\n }\r\n } else if (hasNext) {\r\n return { currentNode: mapRawText.hasNext, rawText: mapRawText.hasNext }\r\n } else {\r\n return { currentNode: mapRawText.noMore, rawText: mapRawText.noMore }\r\n }\r\n}\r\n\r\nexport const PanelInfiniteScrollFooter: FC<IPanelInfiniteScrollFooterProps> = (props) => {\r\n const { slots, loading, hasNext, currentCount, total } = props\r\n\r\n const renderText = (value: ReactNode) => {\r\n if (typeof value !== 'string') return value\r\n return (\r\n <Typography variant='caption' color='text.secondary'>\r\n {value}\r\n </Typography>\r\n )\r\n }\r\n\r\n // Status text on the left\r\n let obj = mapStatusText(loading, hasNext)\r\n let finalStatusText: ReactNode = obj.currentNode\r\n if (typeof slots?.statusText === 'function') {\r\n finalStatusText = slots.statusText(renderText(obj.currentNode), obj.rawText)\r\n } else if (slots?.statusText) {\r\n finalStatusText = slots.statusText\r\n }\r\n\r\n // Range text on the right\r\n const rangeText = currentCount > 0 ? (total != null ? `1–${currentCount} of ${total}` : `1–${currentCount}`) : '—'\r\n const finalRangeText = typeof slots?.rangeText === 'function' ? slots.rangeText(rangeText, rangeText) : (slots?.rangeText ?? rangeText)\r\n\r\n return (\r\n <PanelInfiniteScrollFooterStyled>\r\n <div>\r\n {renderText(finalStatusText)}\r\n {renderText(finalRangeText)}\r\n </div>\r\n </PanelInfiniteScrollFooterStyled>\r\n )\r\n}\r\n\r\nconst PanelInfiniteScrollFooterStyled = styled(Box)(({ theme }) => ({\r\n '& > div': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: theme.spacing(1, 1.5),\r\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\r\n borderTop: `1px solid ${alpha(theme.palette.common.black, 0.08)}`\r\n },\r\n [`.${typographyClasses.root}`]: { lineHeight: 1, fontWeight: 500 }\r\n}))\r\n\r\nexport interface IPanelPaginationFooterProps {\r\n page: number\r\n pageSize: number\r\n total?: number\r\n hasNext?: boolean\r\n hasPrev?: boolean\r\n loading?: boolean\r\n onPrevPage?: () => void\r\n onNextPage?: () => void\r\n onPageJump?: (page: number) => void\r\n}\r\n\r\nexport const PanelPaginationFooter: FC<IPanelPaginationFooterProps> = (props) => {\r\n const { page, pageSize, total, hasNext, loading, onPrevPage, onNextPage, onPageJump } = props\r\n const from = page * pageSize + 1\r\n const to = total != null ? Math.min(from + pageSize - 1, total) : from + pageSize - 1\r\n\r\n // Calculate page count for MUI Pagination (1-indexed)\r\n const pageCount = total != null ? Math.ceil(total / pageSize) : undefined\r\n\r\n const handlePageChange = (_event: any, value: number) => {\r\n // MUI Pagination uses 1-indexed, convert to 0-indexed\r\n const targetPage = value - 1\r\n\r\n if (onPageJump) {\r\n // Use direct page jump if available\r\n onPageJump(targetPage)\r\n } else {\r\n // Fallback to prev/next if no jump handler\r\n if (targetPage < page) {\r\n onPrevPage?.()\r\n } else if (targetPage > page) {\r\n onNextPage?.()\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <PanelPaginationFooterStyled>\r\n <Typography variant='caption' color='text.secondary'>\r\n {total != null ? `${from}–${to} / ${total}` : `Page ${page + 1}`}\r\n </Typography>\r\n <Pagination\r\n count={pageCount}\r\n page={page + 1}\r\n onChange={handlePageChange}\r\n disabled={loading}\r\n size='small'\r\n showFirstButton={pageCount != null && pageCount > 5}\r\n showLastButton={pageCount != null && pageCount > 5}\r\n siblingCount={0}\r\n boundaryCount={1}\r\n hidePrevButton={pageCount == null && !hasNext}\r\n hideNextButton={pageCount == null && !hasNext}\r\n />\r\n </PanelPaginationFooterStyled>\r\n )\r\n}\r\n\r\nconst PanelPaginationFooterStyled = styled(Box)(({ theme }) => ({\r\n padding: '8px 16px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n backgroundColor: theme.palette.background.paper,\r\n borderTop: `1px solid ${theme.palette.mode === 'dark' ? 'rgba(255, 255, 255, 0.12)' : 'rgba(0, 0, 0, 0.12)'}`\r\n}))\r\n"],"names":["stateWrapBase","padding","height","minHeight","width","border","concat","colors","grey","borderRadius","display","alignItems","justifyContent","textAlign","PanelLoading","props","viewMode","rest","_objectWithoutProperties","_excluded","_jsx","PanelLoadingStyled","_objectSpread","children","_jsxs","className","CircularProgress","size","Typography","variant","color","styled","Box","gap","borderColor","blue","backgroundColor","alpha","red","flexDirection","PanelNoData","PanelNoDataStyled","gutterBottom","PanelLoadMore","PanelLoadMoreStyled","thickness","_ref2","position","inset","theme","palette","mode","zIndex","backdropFilter","transition","PanelInfiniteScrollFooter","_slots$rangeText","slots","loading","hasNext","currentCount","total","renderText","value","obj","mapRawText","currentNode","Stack","rawText","mapStatusText","finalStatusText","statusText","rangeText","finalRangeText","PanelInfiniteScrollFooterStyled","_ref3","_defineProperty","spacing","borderTop","common","black","typographyClasses","root","lineHeight","fontWeight","PanelPaginationFooter","page","pageSize","onPrevPage","onNextPage","onPageJump","from","to","Math","min","pageCount","ceil","undefined","PanelPaginationFooterStyled","Pagination","count","onChange","_event","targetPage","disabled","showFirstButton","showLastButton","siblingCount","boundaryCount","hidePrevButton","hideNextButton","_ref5","background","paper"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../src/data-surface/view-grid/helpers.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// types\r\nimport type { TGridSizes } from './types'\r\n\r\n/** Default spacing between grid items in pixels. */\r\nexport const DEFAULT_GRID_SPACING_PX = 8\r\n/** Resolves the final grid spacing from multiple optional values. */\r\nexport const resolveGridSpacing = (...spacing: (number | undefined)[]) => {\r\n const finalSpacing = spacing.filter((value) => typeof value === 'number')\r\n if (finalSpacing.length === 0) return DEFAULT_GRID_SPACING_PX\r\n return Math.max(0, ...finalSpacing.map((value) => value ?? DEFAULT_GRID_SPACING_PX))\r\n}\r\n/** Default scrolling threshold in pixels for triggering near-end events. */\r\nexport const DEFAULT_GRID_SCROLLING_THRESHOLD_PX = 80\r\n/** Resolves the final scrolling threshold from multiple optional values. */\r\nexport const resolveGridScrollingThreshold = (...threshold: (number | undefined)[]) => {\r\n const finalThreshold = threshold.filter((value) => typeof value === 'number')\r\n if (finalThreshold.length === 0) return DEFAULT_GRID_SCROLLING_THRESHOLD_PX\r\n return Math.max(0, ...finalThreshold.map((value) => value ?? DEFAULT_GRID_SCROLLING_THRESHOLD_PX))\r\n}\r\n/** Default near-end threshold in pixels for triggering near-end events. */\r\nexport const DEFAULT_GRID_NEAR_END_THRESHOLD_PX = 80\r\n/** Resolves the final near-end threshold from multiple optional values. */\r\nexport const resolveGridNearEndThreshold = (...threshold: (number | undefined)[]) => {\r\n const finalThreshold = threshold.filter((value) => typeof value === 'number')\r\n if (finalThreshold.length === 0) return DEFAULT_GRID_NEAR_END_THRESHOLD_PX\r\n return Math.max(0, ...finalThreshold.map((value) => value ?? DEFAULT_GRID_NEAR_END_THRESHOLD_PX))\r\n}\r\n/** Default grid item height estimate in pixels, used for virtualization calculations. */\r\nexport const DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE = 120\r\n/** Default grid item sizes for each breakpoint. */\r\nexport const DEFAULT_GRID_ITEM_SIZES: TGridSizes = { xs: 12, sm: 6, md: 4, lg: 3 }\r\n/** Returns the grid item sizes, falling back to defaults if not provided. */\r\nexport const getGridItemSizes = (sizes?: TGridSizes): TGridSizes => {\r\n return sizes ?? DEFAULT_GRID_ITEM_SIZES\r\n}\r\n/** Normalizes grid item sizes, ensuring all breakpoints have a value. */\r\nexport const normalizeGridSizes = (sizes?: TGridSizes): Required<TGridSizes> => {\r\n const { xs, sm, md, lg, xl } = sizes ?? {}\r\n return {\r\n xs: xs ?? DEFAULT_GRID_ITEM_SIZES.xs ?? 12,\r\n sm: sm ?? xs ?? DEFAULT_GRID_ITEM_SIZES.sm ?? 6,\r\n md: md ?? sm ?? xs ?? DEFAULT_GRID_ITEM_SIZES.md ?? 4,\r\n lg: lg ?? md ?? sm ?? xs ?? DEFAULT_GRID_ITEM_SIZES.lg ?? 3,\r\n xl: xl ?? lg ?? md ?? sm ?? xs ?? DEFAULT_GRID_ITEM_SIZES.xl ?? 3\r\n }\r\n}\r\n/** Resolves the active breakpoint based on the container width. */\r\nconst resolveActiveBreakpoint = (width: number): keyof TGridSizes => {\r\n if (width >= 1536) return 'xl'\r\n if (width >= 1200) return 'lg'\r\n if (width >= 900) return 'md'\r\n if (width >= 600) return 'sm'\r\n return 'xs'\r\n}\r\n/** Resolves the number of grid columns based on the container width and item sizes. */\r\nexport const resolveGridColumnsFromWidth = (width: number, sizes?: TGridSizes): number => {\r\n const normalized = normalizeGridSizes(sizes)\r\n const breakpoint = resolveActiveBreakpoint(width)\r\n const span = normalized[breakpoint] ?? 12\r\n const safeSpan = Math.min(12, Math.max(1, span))\r\n return Math.max(1, Math.floor(12 / safeSpan))\r\n}\r\n"],"names":["DEFAULT_GRID_SPACING_PX","resolveGridSpacing","_len","arguments","length","spacing","Array","_key","finalSpacing","filter","value","Math","max","apply","concat","_toConsumableArray","map","DEFAULT_GRID_SCROLLING_THRESHOLD_PX","resolveGridScrollingThreshold","_len2","threshold","_key2","finalThreshold","DEFAULT_GRID_NEAR_END_THRESHOLD_PX","resolveGridNearEndThreshold","_len3","_key3","DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE","DEFAULT_GRID_ITEM_SIZES","xs","sm","md","lg","getGridItemSizes","sizes","normalizeGridSizes","_ref2","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","_ref9","_ref0","_ref1","_ref10","_ref11","_ref12","_ref13","_ref14","_ref","xl","resolveGridColumnsFromWidth","width","_normalized$breakpoin","normalized","breakpoint","resolveActiveBreakpoint","span","safeSpan","min","floor"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../src/data-surface/view-grid/helpers.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// types\r\nimport type { TGridSizes } from './types'\r\n\r\n/** Default spacing between grid items in pixels. */\r\nexport const DEFAULT_GRID_SPACING_PX = 8\r\n\r\n/** Resolves the final grid spacing from multiple optional values. */\r\nexport const resolveGridSpacing = (...spacing: (number | undefined)[]) => {\r\n const finalSpacing = spacing.filter((value) => typeof value === 'number')\r\n if (finalSpacing.length === 0) return DEFAULT_GRID_SPACING_PX\r\n return Math.max(0, ...finalSpacing.map((value) => value ?? DEFAULT_GRID_SPACING_PX))\r\n}\r\n\r\n/** Default scrolling threshold in pixels for triggering near-end events. */\r\nexport const DEFAULT_GRID_SCROLLING_THRESHOLD_PX = 80\r\n\r\n/** Resolves the final scrolling threshold from multiple optional values. */\r\nexport const resolveGridScrollingThreshold = (...threshold: (number | undefined)[]) => {\r\n const finalThreshold = threshold.filter((value) => typeof value === 'number')\r\n if (finalThreshold.length === 0) return DEFAULT_GRID_SCROLLING_THRESHOLD_PX\r\n return Math.max(0, ...finalThreshold.map((value) => value ?? DEFAULT_GRID_SCROLLING_THRESHOLD_PX))\r\n}\r\n\r\n/** Default near-end threshold in pixels for triggering near-end events. */\r\nexport const DEFAULT_GRID_NEAR_END_THRESHOLD_PX = 80\r\n\r\n/** Resolves the final near-end threshold from multiple optional values. */\r\nexport const resolveGridNearEndThreshold = (...threshold: (number | undefined)[]) => {\r\n const finalThreshold = threshold.filter((value) => typeof value === 'number')\r\n if (finalThreshold.length === 0) return DEFAULT_GRID_NEAR_END_THRESHOLD_PX\r\n return Math.max(0, ...finalThreshold.map((value) => value ?? DEFAULT_GRID_NEAR_END_THRESHOLD_PX))\r\n}\r\n\r\n/** Default grid item height estimate in pixels, used for virtualization calculations. */\r\nexport const DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE = 120\r\n\r\n/** Default grid item sizes for each breakpoint. */\r\nexport const DEFAULT_GRID_ITEM_SIZES: TGridSizes = { xs: 12, sm: 6, md: 4, lg: 3 }\r\n\r\n/** Returns the grid item sizes, falling back to defaults if not provided. */\r\nexport const getGridItemSizes = (sizes?: TGridSizes): TGridSizes => {\r\n return sizes ?? DEFAULT_GRID_ITEM_SIZES\r\n}\r\n\r\n/** Normalizes grid item sizes, ensuring all breakpoints have a value. */\r\nexport const normalizeGridSizes = (sizes?: TGridSizes): Required<TGridSizes> => {\r\n const { xs, sm, md, lg, xl } = sizes ?? {}\r\n return {\r\n xs: xs ?? DEFAULT_GRID_ITEM_SIZES.xs ?? 12,\r\n sm: sm ?? xs ?? DEFAULT_GRID_ITEM_SIZES.sm ?? 6,\r\n md: md ?? sm ?? xs ?? DEFAULT_GRID_ITEM_SIZES.md ?? 4,\r\n lg: lg ?? md ?? sm ?? xs ?? DEFAULT_GRID_ITEM_SIZES.lg ?? 3,\r\n xl: xl ?? lg ?? md ?? sm ?? xs ?? DEFAULT_GRID_ITEM_SIZES.xl ?? 3\r\n }\r\n}\r\n\r\n/** Resolves the active breakpoint based on the container width. */\r\nconst resolveActiveBreakpoint = (width: number): keyof TGridSizes => {\r\n if (width >= 1536) return 'xl'\r\n if (width >= 1200) return 'lg'\r\n if (width >= 900) return 'md'\r\n if (width >= 600) return 'sm'\r\n return 'xs'\r\n}\r\n\r\n/** Resolves the number of grid columns based on the container width and item sizes. */\r\nexport const resolveGridColumnsFromWidth = (width: number, sizes?: TGridSizes): number => {\r\n const normalized = normalizeGridSizes(sizes)\r\n const breakpoint = resolveActiveBreakpoint(width)\r\n const span = normalized[breakpoint] ?? 12\r\n const safeSpan = Math.min(12, Math.max(1, span))\r\n return Math.max(1, Math.floor(12 / safeSpan))\r\n}\r\n"],"names":["DEFAULT_GRID_SPACING_PX","resolveGridSpacing","_len","arguments","length","spacing","Array","_key","finalSpacing","filter","value","Math","max","apply","concat","_toConsumableArray","map","DEFAULT_GRID_SCROLLING_THRESHOLD_PX","resolveGridScrollingThreshold","_len2","threshold","_key2","finalThreshold","DEFAULT_GRID_NEAR_END_THRESHOLD_PX","resolveGridNearEndThreshold","_len3","_key3","DEFAULT_GRID_ITEM_HEIGHT_ESTIMATE","DEFAULT_GRID_ITEM_SIZES","xs","sm","md","lg","getGridItemSizes","sizes","normalizeGridSizes","_ref2","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","_ref9","_ref0","_ref1","_ref10","_ref11","_ref12","_ref13","_ref14","_ref","xl","resolveGridColumnsFromWidth","width","_normalized$breakpoin","normalized","breakpoint","resolveActiveBreakpoint","span","safeSpan","min","floor"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as r}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{ListDensity as t}from"./types.js";var n=48,e=4,i={compact:36,standard:48,comfortable:56},a={compact:"6px 10px",standard:"10px 12px",comfortable:"12px 14px"},u=function(t,n){return n?Object.keys(n).map(function(t){var e,i=null!==(e=n[t])&&void 0!==e?e:{};return r({field:t},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}})}(t)};function o(r){if("number"==typeof r&&Number.isFinite(r)&&r>0)return r;var n="number"==typeof r?t.standard:null!=r?r:t.standard;return i[n]}function f(r){if("number"==typeof r)return a[t.standard];var n="number"==typeof r?t.standard:null!=r?r:t.standard;return a[n]}function d(r){return"number"==typeof r&&Number.isFinite(r)&&r>=0?r:4}function l(r,t,n){return r<=0?0:r*t+Math.max(0,r-1)*n}var m=function(t,n,e){var i,a=function(r,t){if(void 0!==r.width)return r.width;if(r.flex&&r.flex>0&&t>0){var n=r.flex/t*100;return"".concat(n,"%")}}(t,n),u=void 0!==t.width;return r({width:a,minWidth:u?a:t.minWidth,maxWidth:null!==(i=t.maxWidth)&&void 0!==i?i:a},e)};export{a as LIST_CELL_PADDING_BY_DENSITY,e as LIST_DEFAULT_ROW_SPACING,n as LIST_HEADER_HEIGHT,i as LIST_ROW_HEIGHT_BY_DENSITY,u as columnsRecordToArray,m as mapSxTableCell,f as resolveListCellPadding,o as resolveListRowHeight,d as resolveListRowSpacing,l as resolveListSpacerHeight};
1
+ import{objectSpread2 as r,toConsumableArray as t}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{ListDensity as n}from"./types.js";var e=48,a=4,i={compact:36,standard:48,comfortable:56},u={compact:"6px 10px",standard:"10px 12px",comfortable:"12px 14px"},o=function(t,n){return n?Object.keys(n).map(function(t){var e,a=null!==(e=n[t])&&void 0!==e?e:{};return r({field:t},a)}):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}})}(t)};function f(r){if("number"==typeof r&&Number.isFinite(r)&&r>0)return r;var t="number"==typeof r?n.standard:null!=r?r:n.standard;return i[t]}function l(r){if("number"==typeof r)return u[n.standard];var t="number"==typeof r?n.standard:null!=r?r:n.standard;return u[t]}function d(r){return"number"==typeof r&&Number.isFinite(r)&&r>=0?r:4}var c=80;function m(){for(var r=arguments.length,n=new Array(r),e=0;e<r;e++)n[e]=arguments[e];var a=n.filter(function(r){return"number"==typeof r});return 0===a.length?80:Math.max.apply(Math,[0].concat(t(a)))}function p(r,t,n){return r<=0?0:r*t+Math.max(0,r-1)*n}var s=function(t,n,e){var a,i=function(r,t){if(void 0!==r.width)return r.width;if(r.flex&&r.flex>0&&t>0){var n=r.flex/t*100;return"".concat(n,"%")}}(t,n),u=void 0!==t.width;return r({width:i,minWidth:u?i:t.minWidth,maxWidth:null!==(a=t.maxWidth)&&void 0!==a?a:i},e)};export{u as LIST_CELL_PADDING_BY_DENSITY,c as LIST_DEFAULT_NEAR_END_THRESHOLD,a as LIST_DEFAULT_ROW_SPACING,e as LIST_HEADER_HEIGHT,i as LIST_ROW_HEIGHT_BY_DENSITY,o as columnsRecordToArray,s as mapSxTableCell,l as resolveListCellPadding,m as resolveListNearEndThreshold,f as resolveListRowHeight,d 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 { IViewListConfig, IViewListProps, ListDensity, TListColumn, TListColumns } from './types'\r\nimport { VIEW_LIST_ROW_SPACING_VAR } from './styled'\r\nimport { CSSProperties } from 'react'\r\n\r\nexport const LIST_HEADER_HEIGHT = 48\r\nexport const LIST_DEFAULT_ROW_SPACING = 4\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\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\nconst getColumnWidth = <T>(column: TListColumn<T>, 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 if (column.flex && column.flex > 0 && totalFlex > 0) {\r\n const percent = (column.flex / totalFlex) * 100\r\n return `${percent}%`\r\n }\r\n\r\n // Priority 3: Auto-width (no width or flex specified)\r\n // Let the table auto-calculate based on content\r\n return undefined\r\n}\r\n\r\nexport const mapSxTableCell = <T>(col: TListColumn<T>, totalFlex: number, sx?: TableCellProps['sx']): TableCellProps['sx'] => {\r\n const colWidth = getColumnWidth(col, totalFlex)\r\n const hasFixedWidth = col.width !== undefined\r\n return {\r\n width: colWidth,\r\n // For fixed-width columns, enforce minWidth = width to prevent shrinking\r\n minWidth: hasFixedWidth ? colWidth : col.minWidth,\r\n // Lock all columns with maxWidth to prevent text overflow expansion\r\n maxWidth: col.maxWidth ?? colWidth,\r\n ...sx\r\n }\r\n}\r\n"],"names":["LIST_HEADER_HEIGHT","LIST_DEFAULT_ROW_SPACING","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","resolveListSpacerHeight","count","rowHeight","rowSpacing","Math","max","mapSxTableCell","col","totalFlex","sx","_col$maxWidth","colWidth","column","undefined","width","percent","concat","getColumnWidth","hasFixedWidth","minWidth","maxWidth"],"mappings":"wHAKO,IAAMA,EAAqB,GACrBC,EAA2B,EAE3BC,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,EAxD6B,CA4DxC,UAEgBC,EAAwBC,EAAeC,EAAmBC,GACxE,OAAIF,GAAS,EAAU,EAChBA,EAAQC,EAAYE,KAAKC,IAAI,EAAGJ,EAAQ,GAAKE,CACtD,CAGA,IAeaG,EAAiB,SAAIC,EAAqBC,EAAmBC,GAAmD,IAAAC,EACrHC,EAhBe,SAAIC,EAAwBJ,GAEjD,QAAqBK,IAAjBD,EAAOE,MAAqB,OAAOF,EAAOE,MAG9C,GAAIF,EAAOvB,MAAQuB,EAAOvB,KAAO,GAAKmB,EAAY,EAAG,CACnD,IAAMO,EAAWH,EAAOvB,KAAOmB,EAAa,IAC5C,MAAAQ,GAAAA,OAAUD,EAAO,IAClB,CAKH,CAGmBE,CAAeV,EAAKC,GAC/BU,OAA8BL,IAAdN,EAAIO,MAC1B,OAAAhC,EAAA,CACEgC,MAAOH,EAEPQ,SAAUD,EAAgBP,EAAWJ,EAAIY,SAEzCC,SAAsBV,QAAdA,EAAEH,EAAIa,gBAAQV,IAAAA,EAAAA,EAAIC,GACvBF,EAEP"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../src/data-surface/view-list/helpers.ts"],"sourcesContent":["import { TableCellProps } from '@mui/material'\r\nimport { IViewListConfig, IViewListProps, ListDensity, TListColumn, TListColumns } from './types'\r\nimport { VIEW_LIST_ROW_SPACING_VAR } from './styled'\r\nimport { CSSProperties } from 'react'\r\n\r\nexport const LIST_HEADER_HEIGHT = 48\r\nexport const LIST_DEFAULT_ROW_SPACING = 4\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\nconst getColumnWidth = <T>(column: TListColumn<T>, 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 if (column.flex && column.flex > 0 && totalFlex > 0) {\r\n const percent = (column.flex / totalFlex) * 100\r\n return `${percent}%`\r\n }\r\n\r\n // Priority 3: Auto-width (no width or flex specified)\r\n // Let the table auto-calculate based on content\r\n return undefined\r\n}\r\n\r\nexport const mapSxTableCell = <T>(col: TListColumn<T>, totalFlex: number, sx?: TableCellProps['sx']): TableCellProps['sx'] => {\r\n const colWidth = getColumnWidth(col, totalFlex)\r\n const hasFixedWidth = col.width !== undefined\r\n return {\r\n width: colWidth,\r\n // For fixed-width columns, enforce minWidth = width to prevent shrinking\r\n minWidth: hasFixedWidth ? colWidth : col.minWidth,\r\n // Lock all columns with maxWidth to prevent text overflow expansion\r\n maxWidth: col.maxWidth ?? colWidth,\r\n ...sx\r\n }\r\n}\r\n"],"names":["LIST_HEADER_HEIGHT","LIST_DEFAULT_ROW_SPACING","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","mapSxTableCell","col","totalFlex","sx","_col$maxWidth","colWidth","column","undefined","width","percent","getColumnWidth","hasFixedWidth","minWidth","maxWidth"],"mappings":"+IAKO,IAAMA,EAAqB,GACrBC,EAA2B,EAE3BC,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,EAxD6B,CA4DxC,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,CAGA,IAeaC,EAAiB,SAAIC,EAAqBC,EAAmBC,GAAmD,IAAAC,EACrHC,EAhBe,SAAIC,EAAwBJ,GAEjD,QAAqBK,IAAjBD,EAAOE,MAAqB,OAAOF,EAAOE,MAG9C,GAAIF,EAAOnC,MAAQmC,EAAOnC,KAAO,GAAK+B,EAAY,EAAG,CACnD,IAAMO,EAAWH,EAAOnC,KAAO+B,EAAa,IAC5C,MAAAR,GAAAA,OAAUe,EAAO,IAClB,CAKH,CAGmBC,CAAeT,EAAKC,GAC/BS,OAA8BJ,IAAdN,EAAIO,MAC1B,OAAA5C,EAAA,CACE4C,MAAOH,EAEPO,SAAUD,EAAgBN,EAAWJ,EAAIW,SAEzCC,SAAsBT,QAAdA,EAAEH,EAAIY,gBAAQT,IAAAA,EAAAA,EAAIC,GACvBF,EAEP"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as n,toConsumableArray as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{useMemo as l}from"react";import{VIEW_LIST_ROW_SPACING_VAR as t}from"./styled.js";import{resolveListRowSpacing as o,resolveListCellPadding as r,resolveListRowHeight as i,columnsRecordToArray as s}from"./helpers.js";function u(e,u){return l(function(){var l,a,c,d,p,f=null!==(l=u.density)&&void 0!==l?l:e.density,m=o(null!==(a=u.spacing)&&void 0!==a?a:e.spacing),v=Object.assign({autoHeight:!1},e.normalOptions,u.normalOptions),g=Object.assign({overscan:6},e.virtualizedOptions,u.virtualizedOptions);return{columns:s(u.value,null!==(c=u.columns)&&void 0!==c?c:e.columns),selectable:null!==(d=null!==(p=u.selectable)&&void 0!==p?p:e.selectable)&&void 0!==d&&d,rowHeight:i(f),cellPadding:r(f),rowSpacing:m,normalOptions:v,virtualizedOptions:g,rootStyle:n({},t,"".concat(m,"px"))}},[u,e])}function a(n,t,o,r,i){var s=null!=r?r:[],u=l(function(){var e=new Map;return n.forEach(function(n,l){var o=t(n,l);null!=o&&e.set(o,n)}),e},[n,t]),a=l(function(){return Array.from(u.keys())},[u]),c=a.length>0&&a.every(function(n){return s.includes(n)}),d=s.length>0&&!c;return{selectedIds:s,isAllSelected:c,isSomeSelected:d,handleToggleAll:function(){o&&i&&i(c?[]:a)},handleToggleRow:function(n){if(o&&i){var l=s.includes(n)?s.filter(function(e){return e!==n}):[].concat(e(s),[n]);i(l)}}}}export{a as useListSelection,u as useMergedConfig};
1
+ import{defineProperty as n,toConsumableArray as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{useMemo as l}from"react";import{VIEW_LIST_ROW_SPACING_VAR as r}from"./styled.js";import{resolveListRowSpacing as o,resolveListNearEndThreshold as t,resolveListCellPadding as i,resolveListRowHeight as s,columnsRecordToArray as a}from"./helpers.js";function u(e,u){return l(function(){var l,c,d,p,f,m=null!==(l=u.density)&&void 0!==l?l:e.density,v=o(null!==(c=u.spacing)&&void 0!==c?c:e.spacing),g=Object.assign({autoHeight:!1},e.normalOptions,u.normalOptions),h=Object.assign({overscan:6},e.virtualizedOptions,u.virtualizedOptions);return{columns:a(u.value,null!==(d=u.columns)&&void 0!==d?d:e.columns),selectable:null!==(p=null!==(f=u.selectable)&&void 0!==f?f:e.selectable)&&void 0!==p&&p,rowHeight:s(m),cellPadding:i(m),rowSpacing:v,nearEndThreshold:t(u.nearEndThreshold,e.nearEndThreshold),normalOptions:g,virtualizedOptions:h,rootStyle:n({},r,"".concat(v,"px"))}},[u,e])}function c(n,r,o,t,i){var s=null!=t?t:[],a=l(function(){var e=new Map;return n.forEach(function(n,l){var o=r(n,l);null!=o&&e.set(o,n)}),e},[n,r]),u=l(function(){return Array.from(a.keys())},[a]),c=u.length>0&&u.every(function(n){return s.includes(n)}),d=s.length>0&&!c;return{selectedIds:s,isAllSelected:c,isSomeSelected:d,handleToggleAll:function(){o&&i&&i(c?[]:u)},handleToggleRow:function(n){if(o&&i){var l=s.includes(n)?s.filter(function(e){return e!==n}):[].concat(e(s),[n]);i(l)}}}}export{c as useListSelection,u as useMergedConfig};
2
2
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":["../../../../src/data-surface/view-list/hooks.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\nimport { CSSProperties, useMemo } from 'react'\r\nimport { VIEW_LIST_ROW_SPACING_VAR } from './styled'\r\nimport { columnsRecordToArray, resolveListCellPadding, resolveListRowHeight, resolveListRowSpacing } from './helpers'\r\nimport type { TGetterId } from '../types'\r\nimport type { IViewListConfig, IViewListProps } from './types'\r\n\r\nexport function useMergedConfig<T>(config: IViewListConfig<T>, props: IViewListProps<T>) {\r\n return useMemo(() => {\r\n const density = props.density ?? config.density\r\n const rowSpacing = resolveListRowSpacing(props.spacing ?? config.spacing)\r\n const normalOptions = Object.assign({ autoHeight: false }, config.normalOptions, props.normalOptions)\r\n const virtualizedOptions = Object.assign({ overscan: 6 }, config.virtualizedOptions, props.virtualizedOptions)\r\n return {\r\n columns: columnsRecordToArray(props.value, props.columns ?? config.columns),\r\n selectable: props.selectable ?? config.selectable ?? false,\r\n rowHeight: resolveListRowHeight(density),\r\n cellPadding: resolveListCellPadding(density),\r\n rowSpacing,\r\n normalOptions,\r\n virtualizedOptions,\r\n rootStyle: { [VIEW_LIST_ROW_SPACING_VAR]: `${rowSpacing}px` } as CSSProperties\r\n }\r\n }, [props, config])\r\n}\r\n\r\n/**\r\n * Custom hook to manage list row selection logic.\r\n * Handles select all, individual row selection, and indeterminate state.\r\n *\r\n * @param value - The array of data items\r\n * @param getterId - Function to extract unique ID from each row\r\n * @param selectable - Whether selection is enabled\r\n * @param selectedIds - Controlled array of selected row IDs\r\n * @param onSelectionChange - Callback when selection changes\r\n * @returns Selection state and handlers\r\n */\r\nexport function useListSelection<T>(\r\n value: T[],\r\n getterId: TGetterId<T>,\r\n selectable: boolean,\r\n selectedIds?: (string | number)[],\r\n onSelectionChange?: (selectedIds: (string | number)[]) => void\r\n) {\r\n const safeSelectedIds = selectedIds ?? []\r\n\r\n // Build map of row IDs for quick lookup\r\n const rowIdMap = useMemo(() => {\r\n const map = new Map<string | number, T>()\r\n value.forEach((row, index) => {\r\n const id = getterId(row, index)\r\n if (id !== null && id !== undefined) {\r\n map.set(id, row)\r\n }\r\n })\r\n return map\r\n }, [value, getterId])\r\n\r\n const allRowIds = useMemo(() => Array.from(rowIdMap.keys()), [rowIdMap])\r\n\r\n const isAllSelected = allRowIds.length > 0 && allRowIds.every((id) => safeSelectedIds.includes(id))\r\n const isSomeSelected = safeSelectedIds.length > 0 && !isAllSelected\r\n\r\n const handleToggleAll = () => {\r\n if (!selectable || !onSelectionChange) return\r\n if (isAllSelected) {\r\n onSelectionChange([])\r\n } else {\r\n onSelectionChange(allRowIds)\r\n }\r\n }\r\n\r\n const handleToggleRow = (rowId: string | number) => {\r\n if (!selectable || !onSelectionChange) return\r\n const newSelected = safeSelectedIds.includes(rowId) ? safeSelectedIds.filter((id) => id !== rowId) : [...safeSelectedIds, rowId]\r\n onSelectionChange(newSelected)\r\n }\r\n\r\n return {\r\n selectedIds: safeSelectedIds,\r\n isAllSelected,\r\n isSomeSelected,\r\n handleToggleAll,\r\n handleToggleRow\r\n }\r\n}\r\n"],"names":["useMergedConfig","config","props","useMemo","_props$density","_props$spacing","_props$columns","_ref","_props$selectable","density","rowSpacing","resolveListRowSpacing","spacing","normalOptions","Object","assign","autoHeight","virtualizedOptions","overscan","columns","columnsRecordToArray","value","selectable","rowHeight","resolveListRowHeight","cellPadding","resolveListCellPadding","rootStyle","_defineProperty","VIEW_LIST_ROW_SPACING_VAR","concat","useListSelection","getterId","selectedIds","onSelectionChange","safeSelectedIds","rowIdMap","map","Map","forEach","row","index","id","set","allRowIds","Array","from","keys","isAllSelected","length","every","includes","isSomeSelected","handleToggleAll","handleToggleRow","rowId","newSelected","filter","_toConsumableArray"],"mappings":"oUAQgB,SAAAA,EAAmBC,EAA4BC,GAC7D,OAAOC,EAAQ,WAAK,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACZC,EAAuBL,QAAhBA,EAAGF,EAAMO,eAAOL,IAAAA,EAAAA,EAAIH,EAAOQ,QAClCC,EAAaC,EAAmC,QAAdN,EAACH,EAAMU,eAAOP,IAAAA,EAAAA,EAAIJ,EAAOW,SAC3DC,EAAgBC,OAAOC,OAAO,CAAEC,YAAY,GAASf,EAAOY,cAAeX,EAAMW,eACjFI,EAAqBH,OAAOC,OAAO,CAAEG,SAAU,GAAKjB,EAAOgB,mBAAoBf,EAAMe,oBAC3F,MAAO,CACLE,QAASC,EAAqBlB,EAAMmB,MAAoB,QAAff,EAAEJ,EAAMiB,eAAOb,IAAAA,EAAAA,EAAIL,EAAOkB,SACnEG,mBAAUf,EAAkBC,QAAlBA,EAAEN,EAAMoB,sBAAUd,EAAAA,EAAIP,EAAOqB,kBAAU,IAAAf,GAAAA,EACjDgB,UAAWC,EAAqBf,GAChCgB,YAAaC,EAAuBjB,GACpCC,WAAAA,EACAG,cAAAA,EACAI,mBAAAA,EACAU,UAASC,EAAA,GAAKC,EAAyBC,GAAAA,OAAMpB,EAAU,OAE3D,EAAG,CAACR,EAAOD,GACb,CAaM,SAAU8B,EACdV,EACAW,EACAV,EACAW,EACAC,GAEA,IAAMC,EAAkBF,QAAAA,EAAe,GAGjCG,EAAWjC,EAAQ,WACvB,IAAMkC,EAAM,IAAIC,IAOhB,OANAjB,EAAMkB,QAAQ,SAACC,EAAKC,GAClB,IAAMC,EAAKV,EAASQ,EAAKC,GACrBC,SACFL,EAAIM,IAAID,EAAIF,EAEhB,GACOH,CACT,EAAG,CAAChB,EAAOW,IAELY,EAAYzC,EAAQ,WAAA,OAAM0C,MAAMC,KAAKV,EAASW,SAAS,CAACX,IAExDY,EAAgBJ,EAAUK,OAAS,GAAKL,EAAUM,MAAM,SAACR,GAAE,OAAKP,EAAgBgB,SAAST,KACzFU,EAAiBjB,EAAgBc,OAAS,IAAMD,EAiBtD,MAAO,CACLf,YAAaE,EACba,cAAAA,EACAI,eAAAA,EACAC,gBAnBsB,WACjB/B,GAAeY,GAElBA,EADEc,EACgB,GAEAJ,EAErB,EAaCU,gBAXsB,SAACC,GACvB,GAAKjC,GAAeY,EAApB,CACA,IAAMsB,EAAcrB,EAAgBgB,SAASI,GAASpB,EAAgBsB,OAAO,SAACf,GAAE,OAAKA,IAAOa,IAAM,GAAAzB,OAAA4B,EAAOvB,GAAe,CAAEoB,IAC1HrB,EAAkBsB,EAFqB,CAGxC,EASH"}
1
+ {"version":3,"file":"hooks.js","sources":["../../../../src/data-surface/view-list/hooks.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\nimport { CSSProperties, useMemo } from 'react'\r\nimport { VIEW_LIST_ROW_SPACING_VAR } from './styled'\r\nimport { columnsRecordToArray, resolveListCellPadding, resolveListNearEndThreshold, resolveListRowHeight, resolveListRowSpacing } from './helpers'\r\nimport type { TGetterId } from '../types'\r\nimport type { IViewListConfig, IViewListProps } from './types'\r\n\r\nexport function useMergedConfig<T>(config: IViewListConfig<T>, props: IViewListProps<T>) {\r\n return useMemo(() => {\r\n const density = props.density ?? config.density\r\n const rowSpacing = resolveListRowSpacing(props.spacing ?? config.spacing)\r\n const normalOptions = Object.assign({ autoHeight: false }, config.normalOptions, props.normalOptions)\r\n const virtualizedOptions = Object.assign({ overscan: 6 }, config.virtualizedOptions, props.virtualizedOptions)\r\n return {\r\n columns: columnsRecordToArray(props.value, props.columns ?? config.columns),\r\n selectable: props.selectable ?? config.selectable ?? false,\r\n rowHeight: resolveListRowHeight(density),\r\n cellPadding: resolveListCellPadding(density),\r\n rowSpacing,\r\n nearEndThreshold: resolveListNearEndThreshold(props.nearEndThreshold, config.nearEndThreshold),\r\n normalOptions,\r\n virtualizedOptions,\r\n rootStyle: { [VIEW_LIST_ROW_SPACING_VAR]: `${rowSpacing}px` } as CSSProperties\r\n }\r\n }, [props, config])\r\n}\r\n\r\n/**\r\n * Custom hook to manage list row selection logic.\r\n * Handles select all, individual row selection, and indeterminate state.\r\n *\r\n * @param value - The array of data items\r\n * @param getterId - Function to extract unique ID from each row\r\n * @param selectable - Whether selection is enabled\r\n * @param selectedIds - Controlled array of selected row IDs\r\n * @param onSelectionChange - Callback when selection changes\r\n * @returns Selection state and handlers\r\n */\r\nexport function useListSelection<T>(\r\n value: T[],\r\n getterId: TGetterId<T>,\r\n selectable: boolean,\r\n selectedIds?: (string | number)[],\r\n onSelectionChange?: (selectedIds: (string | number)[]) => void\r\n) {\r\n const safeSelectedIds = selectedIds ?? []\r\n\r\n // Build map of row IDs for quick lookup\r\n const rowIdMap = useMemo(() => {\r\n const map = new Map<string | number, T>()\r\n value.forEach((row, index) => {\r\n const id = getterId(row, index)\r\n if (id !== null && id !== undefined) {\r\n map.set(id, row)\r\n }\r\n })\r\n return map\r\n }, [value, getterId])\r\n\r\n const allRowIds = useMemo(() => Array.from(rowIdMap.keys()), [rowIdMap])\r\n\r\n const isAllSelected = allRowIds.length > 0 && allRowIds.every((id) => safeSelectedIds.includes(id))\r\n const isSomeSelected = safeSelectedIds.length > 0 && !isAllSelected\r\n\r\n const handleToggleAll = () => {\r\n if (!selectable || !onSelectionChange) return\r\n if (isAllSelected) {\r\n onSelectionChange([])\r\n } else {\r\n onSelectionChange(allRowIds)\r\n }\r\n }\r\n\r\n const handleToggleRow = (rowId: string | number) => {\r\n if (!selectable || !onSelectionChange) return\r\n const newSelected = safeSelectedIds.includes(rowId) ? safeSelectedIds.filter((id) => id !== rowId) : [...safeSelectedIds, rowId]\r\n onSelectionChange(newSelected)\r\n }\r\n\r\n return {\r\n selectedIds: safeSelectedIds,\r\n isAllSelected,\r\n isSomeSelected,\r\n handleToggleAll,\r\n handleToggleRow\r\n }\r\n}\r\n"],"names":["useMergedConfig","config","props","useMemo","_props$density","_props$spacing","_props$columns","_ref","_props$selectable","density","rowSpacing","resolveListRowSpacing","spacing","normalOptions","Object","assign","autoHeight","virtualizedOptions","overscan","columns","columnsRecordToArray","value","selectable","rowHeight","resolveListRowHeight","cellPadding","resolveListCellPadding","nearEndThreshold","resolveListNearEndThreshold","rootStyle","_defineProperty","VIEW_LIST_ROW_SPACING_VAR","concat","useListSelection","getterId","selectedIds","onSelectionChange","safeSelectedIds","rowIdMap","map","Map","forEach","row","index","id","set","allRowIds","Array","from","keys","isAllSelected","length","every","includes","isSomeSelected","handleToggleAll","handleToggleRow","rowId","newSelected","filter","_toConsumableArray"],"mappings":"qWAQgB,SAAAA,EAAmBC,EAA4BC,GAC7D,OAAOC,EAAQ,WAAK,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACZC,EAAuBL,QAAhBA,EAAGF,EAAMO,eAAOL,IAAAA,EAAAA,EAAIH,EAAOQ,QAClCC,EAAaC,EAAmC,QAAdN,EAACH,EAAMU,eAAOP,IAAAA,EAAAA,EAAIJ,EAAOW,SAC3DC,EAAgBC,OAAOC,OAAO,CAAEC,YAAY,GAASf,EAAOY,cAAeX,EAAMW,eACjFI,EAAqBH,OAAOC,OAAO,CAAEG,SAAU,GAAKjB,EAAOgB,mBAAoBf,EAAMe,oBAC3F,MAAO,CACLE,QAASC,EAAqBlB,EAAMmB,MAAoB,QAAff,EAAEJ,EAAMiB,eAAOb,IAAAA,EAAAA,EAAIL,EAAOkB,SACnEG,mBAAUf,EAAkBC,QAAlBA,EAAEN,EAAMoB,sBAAUd,EAAAA,EAAIP,EAAOqB,kBAAU,IAAAf,GAAAA,EACjDgB,UAAWC,EAAqBf,GAChCgB,YAAaC,EAAuBjB,GACpCC,WAAAA,EACAiB,iBAAkBC,EAA4B1B,EAAMyB,iBAAkB1B,EAAO0B,kBAC7Ed,cAAAA,EACAI,mBAAAA,EACAY,UAASC,EAAA,GAAKC,EAAyBC,GAAAA,OAAMtB,EAAU,OAE3D,EAAG,CAACR,EAAOD,GACb,CAaM,SAAUgC,EACdZ,EACAa,EACAZ,EACAa,EACAC,GAEA,IAAMC,EAAkBF,QAAAA,EAAe,GAGjCG,EAAWnC,EAAQ,WACvB,IAAMoC,EAAM,IAAIC,IAOhB,OANAnB,EAAMoB,QAAQ,SAACC,EAAKC,GAClB,IAAMC,EAAKV,EAASQ,EAAKC,GACrBC,SACFL,EAAIM,IAAID,EAAIF,EAEhB,GACOH,CACT,EAAG,CAAClB,EAAOa,IAELY,EAAY3C,EAAQ,WAAA,OAAM4C,MAAMC,KAAKV,EAASW,SAAS,CAACX,IAExDY,EAAgBJ,EAAUK,OAAS,GAAKL,EAAUM,MAAM,SAACR,GAAE,OAAKP,EAAgBgB,SAAST,KACzFU,EAAiBjB,EAAgBc,OAAS,IAAMD,EAiBtD,MAAO,CACLf,YAAaE,EACba,cAAAA,EACAI,eAAAA,EACAC,gBAnBsB,WACjBjC,GAAec,GAElBA,EADEc,EACgB,GAEAJ,EAErB,EAaCU,gBAXsB,SAACC,GACvB,GAAKnC,GAAec,EAApB,CACA,IAAMsB,EAAcrB,EAAgBgB,SAASI,GAASpB,EAAgBsB,OAAO,SAACf,GAAE,OAAKA,IAAOa,IAAM,GAAAzB,OAAA4B,EAAOvB,GAAe,CAAEoB,IAC1HrB,EAAkBsB,EAFqB,CAGxC,EASH"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as e,asyncToGenerator as l,regenerator as n,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 g,Table as h,TableHead as v,TableRow as f,TableCell as m,Checkbox as p,TableBody as b,Box as S,Typography as x}from"@mui/material";import{useMergedConfig as C,useListSelection as N}from"./hooks.js";import{ViewListStyled as H,viewListClasses as T}from"./styled.js";import{LIST_HEADER_HEIGHT as k,resolveListSpacerHeight as y,mapSxTableCell as w}from"./helpers.js";function M(e,l,n){var t=l[e.field],a=e.valueGetter?e.valueGetter(t,l,n):t,i={value:a,row:l,index:n,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 R(l){var n=function(e){return function(l){var n=C(e,l),t=1==n.normalOptions.autoHeight,i=n.columns.reduce(function(e,l){return e+(l.flex&&l.flex>0?l.flex:0)},0),c=l.onSelectionChange,s=o(null);d(function(){"client"===l.featureMode&&!t&&void 0!==l.scrollResetToken&&s.current&&(s.current.scrollTop=0)},[l.featureMode,l.scrollResetToken]);var x=N(l.value,e.getterId,n.selectable,l.selectedIds,c),k=x.selectedIds,y=x.isAllSelected,R=x.isSomeSelected,z=x.handleToggleAll,I=x.handleToggleRow,j=u(function(){var e=[T.root,T.normal];return t&&e.push(T.autoHeight),e.join(" ")},[t]);return r(H,{className:j,style:n.rootStyle,children:r(g,{ref:s,className:T.scrollContainer,onScroll:function(e){if(!t){var n,r=e.currentTarget;r.scrollHeight-r.scrollTop-r.clientHeight<=80&&(null===(n=l.onNearEnd)||void 0===n||n.call(l))}},children:a(h,{size:"small",className:T.table,children:[r(v,{className:T.tableHeader,children:a(f,{children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableHeaderCell,sx:{width:48},children:r(p,{checked:y,indeterminate:R,onChange:z})}),n.columns.map(function(e){var l;return r(m,{className:T.tableHeaderCell,align:e.align,sx:w(e,i),children:null!==(l=e.label)&&void 0!==l?l:String(e.field)},String(e.field))})]})}),r(b,{children:l.value.map(function(l,t){var o,c=null!==(o=e.getterId(l,t))&&void 0!==o?o:t,d=k.includes(c),s=n.rowHeight,u=n.cellPadding;return a(f,{hover:!0,sx:{height:s},selected:d,children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableBodyCell,sx:{height:s,padding:u},children:r(p,{checked:d,onChange:function(){return I(c)}})}),n.columns.map(function(e){return r(m,{className:T.tableBodyCell,align:e.align,sx:w(e,i,{height:s,padding:u}),children:r(S,{className:T.tableCellContent,children:M(e,l,t)})},"".concat(String(c),"-").concat(String(e.field)))})]},c)})})]})})})}}(l),i=function(e){return function(l){var n=C(e,l),i=n.columns.reduce(function(e,l){return e+(l.flex&&l.flex>0?l.flex:0)},0),x=l.onSelectionChange,R=N(l.value,e.getterId,n.selectable,l.selectedIds,x),z=R.selectedIds,I=R.isAllSelected,j=R.isSomeSelected,O=R.handleToggleAll,B=R.handleToggleRow,A=o(null),P=o(null),E=c(0),G=t(E,2),_=G[0],W=G[1],q=c(0),D=t(q,2),F=D[0],J=D[1],K=c(k),L=t(K,2),Q=L[0],U=L[1],V=Math.max(1,n.virtualizedOptions.overscan);d(function(){"client"===l.featureMode&&void 0!==l.scrollResetToken&&(A.current&&(A.current.scrollTop=0),J(0))},[l.featureMode,l.scrollResetToken]),s(function(){if(A.current){var e=function(){var e,l,n=null!==(e=null===(l=A.current)||void 0===l?void 0:l.clientHeight)&&void 0!==e?e:0;W(function(e){return e===n?e:n})};e();var l=new ResizeObserver(function(){return e()});return l.observe(A.current),function(){return l.disconnect()}}},[]),s(function(){var e,l,n=null!==(e=null===(l=P.current)||void 0===l?void 0:l.offsetHeight)&&void 0!==e?e:0;n>0&&n!==Q&&U(n)},[n.columns.length,Q]);var X=u(function(){var e=l.value.length;if(0===e)return{start:0,end:-1,topSpacerHeight:0,bottomSpacerHeight:0};var t=n.rowHeight,r=n.rowSpacing,a=t+r,i=F,o=Math.max(1,_-Q),c=Math.max(0,i-Q),d=Math.max(0,Math.floor(c/a)-V),s=Math.ceil(o/a),u=Math.min(e-1,d+s+2*V);return{start:d,end:u,topSpacerHeight:y(d,t,r),bottomSpacerHeight:y(e-u-1,t,r)}},[l.value.length,Q,V,n,F,_]),Y=X.end>=X.start?l.value.slice(X.start,X.end+1):[],Z=[T.root,T.virtualized].filter(Boolean).join(" ");return r(H,{className:Z,style:n.rootStyle,children:r(g,{ref:A,className:T.scrollContainer,onScroll:function(e){var n,t=e.currentTarget;J(t.scrollTop),t.scrollHeight-t.scrollTop-t.clientHeight<=80&&(null===(n=l.onNearEnd)||void 0===n||n.call(l))},children:a(h,{size:"small",className:T.table,children:[r(v,{className:T.tableHeader,children:a(f,{ref:P,children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableHeaderCell,sx:{width:48},children:r(p,{checked:I,indeterminate:j,onChange:O})}),n.columns.map(function(e){var l;return r(m,{className:T.tableHeaderCell,align:e.align,sx:w(e,i),children:null!==(l=e.label)&&void 0!==l?l:String(e.field)},String(e.field))})]})}),a(b,{children:[X.topSpacerHeight>0?r(f,{className:T.tableSpacerRow,children:r(m,{colSpan:n.columns.length+(n.selectable?1:0),className:T.tableSpacerCell,sx:{height:X.topSpacerHeight,padding:0,border:0}})}):null,Y.map(function(l,t){var o,c=X.start+t,d=null!==(o=e.getterId(l,c))&&void 0!==o?o:c,s=z.includes(d),u=n.rowHeight,g=n.cellPadding;return a(f,{hover:!0,sx:{height:u},selected:s,children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableBodyCell,sx:{height:u,padding:g},children:r(p,{checked:s,onChange:function(){return B(d)}})}),n.columns.map(function(e){return r(m,{className:T.tableBodyCell,align:e.align,sx:w(e,i,{height:u,padding:g}),children:r(S,{className:T.tableCellContent,children:M(e,l,c)})},"".concat(String(d),"-").concat(String(e.field)))})]},d)}),X.bottomSpacerHeight>0?r(f,{className:T.tableSpacerRow,children:r(m,{colSpan:n.columns.length+(n.selectable?1:0),className:T.tableSpacerCell,sx:{height:X.bottomSpacerHeight,padding:0,border:0}})}):null]})]})})})}}(l);return function(t){var a,o,c=null!==(a=null!==(o=t.renderStrategy)&&void 0!==o?o:l.renderStrategy)&&void 0!==a?a:"normal";return r("virtualized"===c?i:n,e({},t))}}function z(e){return function(t){var a,o,c,d=i(l(n().m(function e(){var l,r,a,i,o,c,d,s,u;return n().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!==(l=t.pagination)&&void 0!==l&&l.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{R as createViewList,z as createViewListLoading,R as default};
1
+ import{objectSpread2 as e,asyncToGenerator as l,regenerator as n,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 v,TableRow as f,TableCell as m,Checkbox as p,TableBody as b,Box as S,Typography as x}from"@mui/material";import{useMergedConfig as C,useListSelection as N}from"./hooks.js";import{ViewListStyled as H,viewListClasses as T}from"./styled.js";import{LIST_HEADER_HEIGHT as k,resolveListSpacerHeight as y,mapSxTableCell as w}from"./helpers.js";function M(e,l,n){var t=l[e.field],a=e.valueGetter?e.valueGetter(t,l,n):t,i={value:a,row:l,index:n,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 R(l){var n=function(e){return function(l){var n=C(e,l),t=1==n.normalOptions.autoHeight,i=n.columns.reduce(function(e,l){return e+(l.flex&&l.flex>0?l.flex:0)},0),c=l.onSelectionChange,s=o(null);d(function(){"client"===l.featureMode&&!t&&void 0!==l.scrollResetToken&&s.current&&(s.current.scrollTop=0)},[l.featureMode,l.scrollResetToken]);var x=N(l.value,e.getterId,n.selectable,l.selectedIds,c),k=x.selectedIds,y=x.isAllSelected,R=x.isSomeSelected,z=x.handleToggleAll,I=x.handleToggleRow,j=u(function(){var e=[T.root,T.normal];return t&&e.push(T.autoHeight),e.join(" ")},[t]);return r(H,{className:j,style:n.rootStyle,children:r(h,{ref:s,className:T.scrollContainer,onScroll:function(e){if(!t){var r,a=e.currentTarget;a.scrollHeight-a.scrollTop-a.clientHeight<=n.nearEndThreshold&&(null===(r=l.onNearEnd)||void 0===r||r.call(l))}},children:a(g,{size:"small",className:T.table,children:[r(v,{className:T.tableHeader,children:a(f,{children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableHeaderCell,sx:{width:48},children:r(p,{checked:y,indeterminate:R,onChange:z})}),n.columns.map(function(e){var l;return r(m,{className:T.tableHeaderCell,align:e.align,sx:w(e,i),children:null!==(l=e.label)&&void 0!==l?l:String(e.field)},String(e.field))})]})}),r(b,{children:l.value.map(function(l,t){var o,c=null!==(o=e.getterId(l,t))&&void 0!==o?o:t,d=k.includes(c),s=n.rowHeight,u=n.cellPadding;return a(f,{hover:!0,sx:{height:s},selected:d,children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableBodyCell,sx:{height:s,padding:u},children:r(p,{checked:d,onChange:function(){return I(c)}})}),n.columns.map(function(e){return r(m,{className:T.tableBodyCell,align:e.align,sx:w(e,i,{height:s,padding:u}),children:r(S,{className:T.tableCellContent,children:M(e,l,t)})},"".concat(String(c),"-").concat(String(e.field)))})]},c)})})]})})})}}(l),i=function(e){return function(l){var n=C(e,l),i=n.columns.reduce(function(e,l){return e+(l.flex&&l.flex>0?l.flex:0)},0),x=l.onSelectionChange,R=N(l.value,e.getterId,n.selectable,l.selectedIds,x),z=R.selectedIds,I=R.isAllSelected,j=R.isSomeSelected,O=R.handleToggleAll,B=R.handleToggleRow,A=o(null),E=o(null),P=c(0),G=t(P,2),_=G[0],W=G[1],q=c(0),D=t(q,2),F=D[0],J=D[1],K=c(k),L=t(K,2),Q=L[0],U=L[1],V=Math.max(1,n.virtualizedOptions.overscan);d(function(){"client"===l.featureMode&&void 0!==l.scrollResetToken&&(A.current&&(A.current.scrollTop=0),J(0))},[l.featureMode,l.scrollResetToken]),s(function(){if(A.current){var e=function(){var e,l,n=null!==(e=null===(l=A.current)||void 0===l?void 0:l.clientHeight)&&void 0!==e?e:0;W(function(e){return e===n?e:n})};e();var l=new ResizeObserver(function(){return e()});return l.observe(A.current),function(){return l.disconnect()}}},[]),s(function(){var e,l,n=null!==(e=null===(l=E.current)||void 0===l?void 0:l.offsetHeight)&&void 0!==e?e:0;n>0&&n!==Q&&U(n)},[n.columns.length,Q]);var X=u(function(){var e=l.value.length;if(0===e)return{start:0,end:-1,topSpacerHeight:0,bottomSpacerHeight:0};var t=n.rowHeight,r=n.rowSpacing,a=t+r,i=F,o=Math.max(1,_-Q),c=Math.max(0,i-Q),d=Math.max(0,Math.floor(c/a)-V),s=Math.ceil(o/a),u=Math.min(e-1,d+s+2*V);return{start:d,end:u,topSpacerHeight:y(d,t,r),bottomSpacerHeight:y(e-u-1,t,r)}},[l.value.length,Q,V,n,F,_]),Y=X.end>=X.start?l.value.slice(X.start,X.end+1):[],Z=[T.root,T.virtualized].filter(Boolean).join(" ");return r(H,{className:Z,style:n.rootStyle,children:r(h,{ref:A,className:T.scrollContainer,onScroll:function(e){var t,r=e.currentTarget;J(r.scrollTop),r.scrollHeight-r.scrollTop-r.clientHeight<=n.nearEndThreshold&&(null===(t=l.onNearEnd)||void 0===t||t.call(l))},children:a(g,{size:"small",className:T.table,children:[r(v,{className:T.tableHeader,children:a(f,{ref:E,children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableHeaderCell,sx:{width:48},children:r(p,{checked:I,indeterminate:j,onChange:O})}),n.columns.map(function(e){var l;return r(m,{className:T.tableHeaderCell,align:e.align,sx:w(e,i),children:null!==(l=e.label)&&void 0!==l?l:String(e.field)},String(e.field))})]})}),a(b,{children:[X.topSpacerHeight>0?r(f,{className:T.tableSpacerRow,children:r(m,{colSpan:n.columns.length+(n.selectable?1:0),className:T.tableSpacerCell,sx:{height:X.topSpacerHeight,padding:0,border:0}})}):null,Y.map(function(l,t){var o,c=X.start+t,d=null!==(o=e.getterId(l,c))&&void 0!==o?o:c,s=z.includes(d),u=n.rowHeight,h=n.cellPadding;return a(f,{hover:!0,sx:{height:u},selected:s,children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableBodyCell,sx:{height:u,padding:h},children:r(p,{checked:s,onChange:function(){return B(d)}})}),n.columns.map(function(e){return r(m,{className:T.tableBodyCell,align:e.align,sx:w(e,i,{height:u,padding:h}),children:r(S,{className:T.tableCellContent,children:M(e,l,c)})},"".concat(String(d),"-").concat(String(e.field)))})]},d)}),X.bottomSpacerHeight>0?r(f,{className:T.tableSpacerRow,children:r(m,{colSpan:n.columns.length+(n.selectable?1:0),className:T.tableSpacerCell,sx:{height:X.bottomSpacerHeight,padding:0,border:0}})}):null]})]})})})}}(l);return function(t){var a,o,c=null!==(a=null!==(o=t.renderStrategy)&&void 0!==o?o:l.renderStrategy)&&void 0!==a?a:"normal";return r("virtualized"===c?i:n,e({},t))}}function z(e){return function(t){var a,o,c,d=i(l(n().m(function e(){var l,r,a,i,o,c,d,s,u;return n().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!==(l=t.pagination)&&void 0!==l&&l.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{R as createViewList,z as createViewListLoading,R 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, 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\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 { normalOptions } = mergedConfig\r\n const isAutoHeight = normalOptions.autoHeight == true\r\n const totalFlex = mergedConfig.columns.reduce((sum, col) => sum + (col.flex && col.flex > 0 ? col.flex : 0), 0)\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 (client-side filter reset)\r\n useEffect(() => {\r\n const isClient = props.featureMode === 'client'\r\n if (!isClient || isAutoHeight || props.scrollResetToken === undefined) return\r\n if (scrollContainerRef.current) scrollContainerRef.current.scrollTop = 0\r\n }, [props.featureMode, 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 <= 80) {\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 <TableHead className={classes.tableHeader}>\r\n <TableRow>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell} sx={{ width: 48 }}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell key={String(col.field)} className={classes.tableHeaderCell} align={col.align} sx={mapSxTableCell(col, totalFlex)}>\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, { 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\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 [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 (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 const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n setScrollTopState(t.scrollTop)\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= 80) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n useLayoutEffect(() => {\r\n if (!wrapRef.current) return\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 const measured = headerRowRef.current?.offsetHeight ?? 0\r\n if (measured > 0 && measured !== headerHeight) {\r\n setHeaderHeight(measured)\r\n }\r\n }, [mergedConfig.columns.length, headerHeight])\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 const { rowHeight, rowSpacing } = mergedConfig\r\n const rowStride = rowHeight + rowSpacing\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 start = Math.max(0, Math.floor(adjustedScrollTop / rowStride) - overscan)\r\n const visibleCount = Math.ceil(safeViewportHeight / rowStride)\r\n const end = Math.min(totalItems - 1, start + visibleCount + overscan * 2)\r\n\r\n const topSpacerHeight = resolveListSpacerHeight(start, rowHeight, rowSpacing)\r\n const bottomSpacerHeight = resolveListSpacerHeight(totalItems - end - 1, rowHeight, rowSpacing)\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 <TableHead className={classes.tableHeader}>\r\n <TableRow ref={headerRowRef}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell} sx={{ width: 48 }}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell key={String(col.field)} className={classes.tableHeaderCell} align={col.align} sx={mapSxTableCell(col, totalFlex)}>\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, { 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","createViewList","config","ViewListNormal","props","mergedConfig","useMergedConfig","isAutoHeight","normalOptions","autoHeight","totalFlex","columns","reduce","sum","col","flex","onSelectionChange","scrollContainerRef","useRef","useEffect","featureMode","undefined","scrollResetToken","current","scrollTop","selection","useListSelection","getterId","selectable","selectedIds","isAllSelected","isSomeSelected","handleToggleAll","handleToggleRow","rootClasses","useMemo","l","classes","root","normal","push","join","ViewListStyled","className","style","rootStyle","children","TableContainer","ref","scrollContainer","onScroll","e","_props$onNearEnd","t","currentTarget","scrollHeight","clientHeight","onNearEnd","call","_jsxs","Table","size","table","TableHead","tableHeader","TableRow","TableCell","padding","tableHeaderCell","sx","width","Checkbox","checked","indeterminate","onChange","map","_col$label","align","mapSxTableCell","label","TableBody","_config$getterId","rowKey","isSelected","includes","rowHeight","cellPadding","hover","height","selected","tableBodyCell","Box","tableCellContent","concat","createViewListNormal","ViewListVirtualized","wrapRef","headerRowRef","_useState","useState","_useState2","_slicedToArray","containerHeight","setContainerHeight","_useState3","_useState4","scrollTopState","setScrollTopState","_useState5","LIST_HEADER_HEIGHT","_useState6","headerHeight","setHeaderHeight","overscan","Math","max","virtualizedOptions","useLayoutEffect","updateSize","_wrapRef$current$clie","_wrapRef$current","nextHeight","prev","observer","ResizeObserver","observe","disconnect","_headerRowRef$current","_headerRowRef$current2","measured","offsetHeight","length","windowed","totalItems","start","end","topSpacerHeight","bottomSpacerHeight","rowSpacing","rowStride","effectiveScrollTop","safeViewportHeight","adjustedScrollTop","floor","visibleCount","ceil","min","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","w","_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, 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\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 { normalOptions } = mergedConfig\r\n const isAutoHeight = normalOptions.autoHeight == true\r\n const totalFlex = mergedConfig.columns.reduce((sum, col) => sum + (col.flex && col.flex > 0 ? col.flex : 0), 0)\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 (client-side filter reset)\r\n useEffect(() => {\r\n const isClient = props.featureMode === 'client'\r\n if (!isClient || isAutoHeight || props.scrollResetToken === undefined) return\r\n if (scrollContainerRef.current) scrollContainerRef.current.scrollTop = 0\r\n }, [props.featureMode, 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 <TableHead className={classes.tableHeader}>\r\n <TableRow>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell} sx={{ width: 48 }}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell key={String(col.field)} className={classes.tableHeaderCell} align={col.align} sx={mapSxTableCell(col, totalFlex)}>\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, { 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\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 [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 (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 const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n setScrollTopState(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 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 const measured = headerRowRef.current?.offsetHeight ?? 0\r\n if (measured > 0 && measured !== headerHeight) {\r\n setHeaderHeight(measured)\r\n }\r\n }, [mergedConfig.columns.length, headerHeight])\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 const { rowHeight, rowSpacing } = mergedConfig\r\n const rowStride = rowHeight + rowSpacing\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 start = Math.max(0, Math.floor(adjustedScrollTop / rowStride) - overscan)\r\n const visibleCount = Math.ceil(safeViewportHeight / rowStride)\r\n const end = Math.min(totalItems - 1, start + visibleCount + overscan * 2)\r\n\r\n const topSpacerHeight = resolveListSpacerHeight(start, rowHeight, rowSpacing)\r\n const bottomSpacerHeight = resolveListSpacerHeight(totalItems - end - 1, rowHeight, rowSpacing)\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 <TableHead className={classes.tableHeader}>\r\n <TableRow ref={headerRowRef}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell} sx={{ width: 48 }}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell key={String(col.field)} className={classes.tableHeaderCell} align={col.align} sx={mapSxTableCell(col, totalFlex)}>\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, { 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","createViewList","config","ViewListNormal","props","mergedConfig","useMergedConfig","isAutoHeight","normalOptions","autoHeight","totalFlex","columns","reduce","sum","col","flex","onSelectionChange","scrollContainerRef","useRef","useEffect","featureMode","undefined","scrollResetToken","current","scrollTop","selection","useListSelection","getterId","selectable","selectedIds","isAllSelected","isSomeSelected","handleToggleAll","handleToggleRow","rootClasses","useMemo","l","classes","root","normal","push","join","ViewListStyled","className","style","rootStyle","children","TableContainer","ref","scrollContainer","onScroll","e","_props$onNearEnd","t","currentTarget","scrollHeight","clientHeight","nearEndThreshold","onNearEnd","call","_jsxs","Table","size","table","TableHead","tableHeader","TableRow","TableCell","padding","tableHeaderCell","sx","width","Checkbox","checked","indeterminate","onChange","map","_col$label","align","mapSxTableCell","label","TableBody","_config$getterId","rowKey","isSelected","includes","rowHeight","cellPadding","hover","height","selected","tableBodyCell","Box","tableCellContent","concat","createViewListNormal","ViewListVirtualized","wrapRef","headerRowRef","_useState","useState","_useState2","_slicedToArray","containerHeight","setContainerHeight","_useState3","_useState4","scrollTopState","setScrollTopState","_useState5","LIST_HEADER_HEIGHT","_useState6","headerHeight","setHeaderHeight","overscan","Math","max","virtualizedOptions","useLayoutEffect","updateSize","_wrapRef$current$clie","_wrapRef$current","nextHeight","prev","observer","ResizeObserver","observe","disconnect","_headerRowRef$current","_headerRowRef$current2","measured","offsetHeight","length","windowed","totalItems","start","end","topSpacerHeight","bottomSpacerHeight","rowSpacing","rowStride","effectiveScrollTop","safeViewportHeight","adjustedScrollTop","floor","visibleCount","ceil","min","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","w","_context","n","loadMode","a","pagination","hasNext","loading","page","pageSize","onPageChange","density","spacing"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../src/data-surface/view-list/types.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\nimport type { ReactNode } from 'react'\r\nimport { DataSurfaceFeatureMode, RenderStrategyRule, TGetterId } from '../types'\r\n\r\n/**\r\n * Props received by the custom render function for each row in List view.\r\n * @template T - The shape of a single data row object.\r\n */\r\nexport interface IViewListItemProps<T> {\r\n /** The data object for this list row. */\r\n value: T\r\n /** Zero-based position of this item in the data array. */\r\n index: number\r\n /** Whether this row is currently selected. */\r\n selected?: boolean\r\n}\r\n\r\n/** Horizontal alignment for list cell content. */\r\nexport type TListAlign = 'left' | 'right' | 'center'\r\n\r\n/**\r\n * Context passed to a column's render callback.\r\n * @template T - The shape of a single data row object.\r\n */\r\nexport interface IListCellParams<T> {\r\n /** Resolved cell value (after valueGetter if provided). */\r\n value: any\r\n /** The full row object. */\r\n row: T\r\n /** Zero-based row index. */\r\n index: number\r\n /** The column field key this cell belongs to. */\r\n field: keyof T\r\n}\r\n\r\n/**\r\n * Definition of a single column in List view.\r\n * @template T - The shape of a single data row object.\r\n */\r\nexport interface TListColumn<T> {\r\n /** Key of the row object this column maps to. */\r\n field: keyof T\r\n /** Column header label shown in the header. */\r\n label?: string\r\n /** Explicit column width. Accepts px number or CSS string (e.g. '120px', '20%'). */\r\n width?: number | string\r\n /** Minimum column width in pixels. */\r\n minWidth?: number\r\n /** Maximum column width in pixels. */\r\n maxWidth?: number\r\n /** Flex grow ratio used when no explicit width is set. */\r\n flex?: number\r\n /** Horizontal alignment of the cell content. */\r\n align?: TListAlign\r\n /** Custom cell render function - receives CellParams, returns ReactNode. */\r\n renderCell?: (params: IListCellParams<T>) => ReactNode\r\n /** Derives a value from the row before it is passed to the render step. */\r\n valueGetter?: (value: string, row: T, index: number) => any\r\n}\r\n/** Columns configuration for List view. */\r\nexport type TListColumns<T> = Partial<Record<keyof T, Omit<TListColumn<T>, 'field'>>>\r\n\r\n/**\r\n * Row density preset for List view.\r\n * Controls the row height and cell padding.\r\n */\r\nexport const ListDensity = {\r\n compact: 'compact',\r\n standard: 'standard',\r\n comfortable: 'comfortable'\r\n} as const\r\nexport type ListDensity = keyof typeof ListDensity\r\n\r\nexport interface IViewListNormalOptions {\r\n /** When true, the list will automatically adjust its height to fit all items. @default false */\r\n autoHeight?: boolean\r\n}\r\n\r\nexport interface IViewListVirtualizedOptions {\r\n /** Number of extra rows rendered outside the viewport as a buffer when using virtualized rendering. @default 6 */\r\n overscan?: number\r\n}\r\n\r\n/** Base configuration for List view. */\r\nexport interface IViewListBase<T> {\r\n /** Custom render function for list rows. If not provided, a default row layout will be used. */\r\n columns?: TListColumns<T>\r\n /** Row height preset or an explicit row height in pixels. @default 'standard' */\r\n density?: number | ListDensity\r\n /** Spacing between rows in pixels. @default 4 */\r\n spacing?: number\r\n /**\r\n * Controls how the list is rendered into the DOM.\r\n * - `normal` — all rows are mounted (suitable for small datasets)\r\n * - `virtualized` — only visible rows are mounted (optimized for large datasets)\r\n * @default 'normal'\r\n */\r\n renderStrategy?: RenderStrategyRule\r\n /** Enable row selection with checkboxes. */\r\n selectable?: boolean\r\n /** Options specific to normal rendering strategy. */\r\n normalOptions?: IViewListNormalOptions\r\n /** Options specific to virtualized rendering strategy. */\r\n virtualizedOptions?: IViewListVirtualizedOptions\r\n}\r\n\r\n/** Configuration for List view. */\r\nexport interface IViewListConfig<T> extends IViewListBase<T> {\r\n /** Function to extract unique row ID from a data item. Required for selection and virtualization. */\r\n getterId: TGetterId<T>\r\n}\r\n\r\n/** Props for List view component. */\r\nexport interface IViewListProps<T> extends IViewListBase<T> {\r\n /** The array of data items to display in the list. */\r\n value: T[]\r\n /** Called when user scrolls near the bottom of the list. Use this to trigger pagination or infinity load. */\r\n onNearEnd?: () => void\r\n /** Array of selected row IDs (controlled). */\r\n selectedIds?: (string | number)[]\r\n /** Callback when selection changes. */\r\n onSelectionChange?: (selectedIds: (string | number)[]) => void\r\n /** Feature mode for the data surface. */\r\n featureMode?: DataSurfaceFeatureMode\r\n /** When this value changes, the scroll position resets to top (virtualized mode only). */\r\n scrollResetToken?: unknown\r\n}\r\n"],"names":["ListDensity","compact","standard","comfortable"],"mappings":"AAmEO,IAAMA,EAAc,CACzBC,QAAS,UACTC,SAAU,WACVC,YAAa"}
1
+ {"version":3,"file":"types.js","sources":["../../../../src/data-surface/view-list/types.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\nimport type { ReactNode } from 'react'\r\nimport { DataSurfaceFeatureMode, RenderStrategyRule, TGetterId } from '../types'\r\n\r\n/**\r\n * Props received by the custom render function for each row in List view.\r\n * @template T - The shape of a single data row object.\r\n */\r\nexport interface IViewListItemProps<T> {\r\n /** The data object for this list row. */\r\n value: T\r\n /** Zero-based position of this item in the data array. */\r\n index: number\r\n /** Whether this row is currently selected. */\r\n selected?: boolean\r\n}\r\n\r\n/** Horizontal alignment for list cell content. */\r\nexport type TListAlign = 'left' | 'right' | 'center'\r\n\r\n/**\r\n * Context passed to a column's render callback.\r\n * @template T - The shape of a single data row object.\r\n */\r\nexport interface IListCellParams<T> {\r\n /** Resolved cell value (after valueGetter if provided). */\r\n value: any\r\n /** The full row object. */\r\n row: T\r\n /** Zero-based row index. */\r\n index: number\r\n /** The column field key this cell belongs to. */\r\n field: keyof T\r\n}\r\n\r\n/**\r\n * Definition of a single column in List view.\r\n * @template T - The shape of a single data row object.\r\n */\r\nexport interface TListColumn<T> {\r\n /** Key of the row object this column maps to. */\r\n field: keyof T\r\n /** Column header label shown in the header. */\r\n label?: string\r\n /** Explicit column width. Accepts px number or CSS string (e.g. '120px', '20%'). */\r\n width?: number | string\r\n /** Minimum column width in pixels. */\r\n minWidth?: number\r\n /** Maximum column width in pixels. */\r\n maxWidth?: number\r\n /** Flex grow ratio used when no explicit width is set. */\r\n flex?: number\r\n /** Horizontal alignment of the cell content. */\r\n align?: TListAlign\r\n /** Custom cell render function - receives CellParams, returns ReactNode. */\r\n renderCell?: (params: IListCellParams<T>) => ReactNode\r\n /** Derives a value from the row before it is passed to the render step. */\r\n valueGetter?: (value: string, row: T, index: number) => any\r\n}\r\n/** Columns configuration for List view. */\r\nexport type TListColumns<T> = Partial<Record<keyof T, Omit<TListColumn<T>, 'field'>>>\r\n\r\n/**\r\n * Row density preset for List view.\r\n * Controls the row height and cell padding.\r\n */\r\nexport const ListDensity = {\r\n compact: 'compact',\r\n standard: 'standard',\r\n comfortable: 'comfortable'\r\n} as const\r\nexport type ListDensity = keyof typeof ListDensity\r\n\r\nexport interface IViewListNormalOptions {\r\n /** When true, the list will automatically adjust its height to fit all items. @default false */\r\n autoHeight?: boolean\r\n}\r\n\r\nexport interface IViewListVirtualizedOptions {\r\n /** Number of extra rows rendered outside the viewport as a buffer when using virtualized rendering. @default 6 */\r\n overscan?: number\r\n}\r\n\r\n/** Base configuration for List view. */\r\nexport interface IViewListBase<T> {\r\n /** Custom render function for list rows. If not provided, a default row layout will be used. */\r\n columns?: TListColumns<T>\r\n /** Row height preset or an explicit row height in pixels. @default 'standard' */\r\n density?: number | ListDensity\r\n /** Spacing between rows in pixels. @default 4 */\r\n spacing?: number\r\n /**\r\n * Controls how the list is rendered into the DOM.\r\n * - `normal` — all rows are mounted (suitable for small datasets)\r\n * - `virtualized` — only visible rows are mounted (optimized for large datasets)\r\n * @default 'normal'\r\n */\r\n renderStrategy?: RenderStrategyRule\r\n /** Enable row selection with checkboxes. */\r\n selectable?: boolean\r\n /** Options specific to normal rendering strategy. */\r\n normalOptions?: IViewListNormalOptions\r\n /** Distance in pixels from the bottom of the scroll container at which `onNearEnd` is triggered. @default 80 */\r\n nearEndThreshold?: number\r\n /** Options specific to virtualized rendering strategy. */\r\n virtualizedOptions?: IViewListVirtualizedOptions\r\n}\r\n\r\n/** Configuration for List view. */\r\nexport interface IViewListConfig<T> extends IViewListBase<T> {\r\n /** Function to extract unique row ID from a data item. Required for selection and virtualization. */\r\n getterId: TGetterId<T>\r\n}\r\n\r\n/** Props for List view component. */\r\nexport interface IViewListProps<T> extends IViewListBase<T> {\r\n /** The array of data items to display in the list. */\r\n value: T[]\r\n /** Called when user scrolls near the bottom of the list. Use this to trigger pagination or infinity load. */\r\n onNearEnd?: () => void\r\n /** Array of selected row IDs (controlled). */\r\n selectedIds?: (string | number)[]\r\n /** Callback when selection changes. */\r\n onSelectionChange?: (selectedIds: (string | number)[]) => void\r\n /** Feature mode for the data surface. */\r\n featureMode?: DataSurfaceFeatureMode\r\n /** When this value changes, the scroll position resets to top (virtualized mode only). */\r\n scrollResetToken?: unknown\r\n}\r\n"],"names":["ListDensity","compact","standard","comfortable"],"mappings":"AAmEO,IAAMA,EAAc,CACzBC,QAAS,UACTC,SAAU,WACVC,YAAa"}
@@ -7,12 +7,16 @@ import type { IViewListConfig, IViewListProps } from './view-list';
7
7
  export interface IDataSurfaceSlots<T> {
8
8
  listViewProps?: IViewListProps<T>;
9
9
  gridViewProps?: IViewGridProps<T>;
10
+ /** Custom loading component. If not provided, a default loading component will be used. */
10
11
  PanelLoading?: ComponentType<{
11
12
  viewMode: DataSurfaceViewMode;
12
13
  }>;
14
+ /** Custom no data component. If not provided, a default no data component will be used. */
13
15
  PanelNoData?: ComponentType<{
14
16
  viewMode: DataSurfaceViewMode;
15
17
  }>;
18
+ /** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */
19
+ PanelLoadMore?: ComponentType;
16
20
  footer?: {
17
21
  status?: TRenderableNode;
18
22
  range?: TRenderableNode;
@@ -72,6 +76,16 @@ export interface IDataSurfaceConfig<T> {
72
76
  gridConfig?: IViewGridConfig<T>;
73
77
  /** Custom Grid component. If not provided, a default Grid component will be used. */
74
78
  GridComponent?: ComponentType<IViewGridProps<T>>;
79
+ /** Custom loading component. If not provided, a default loading component will be used. */
80
+ PanelLoading?: ComponentType<{
81
+ viewMode: DataSurfaceViewMode;
82
+ }>;
83
+ /** Custom no data component. If not provided, a default no data component will be used. */
84
+ PanelNoData?: ComponentType<{
85
+ viewMode: DataSurfaceViewMode;
86
+ }>;
87
+ /** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */
88
+ PanelLoadMore?: ComponentType;
75
89
  }
76
90
  export declare function createDataSurface<T>(config: IDataSurfaceConfig<T>): FC<IDataSurfaceProps<T>>;
77
91
  export default createDataSurface;
@@ -27,6 +27,7 @@ export interface IViewGridBase<T> {
27
27
  scrollingThreshold?: number;
28
28
  /** Distance in pixels from the bottom of the scroll container at which `onNearEnd` is triggered. @default 80 */
29
29
  nearEndThreshold?: number;
30
+ /** Defines the number of columns for different screen sizes. */
30
31
  sizes?: TGridSizes;
31
32
  /**
32
33
  * Controls how the list is rendered into the DOM.
@@ -11,5 +11,9 @@ export declare const columnsRecordToArray: <T>(value: T[], columnsRecord?: Parti
11
11
  export declare function resolveListRowHeight(density?: number | ListDensity): number;
12
12
  export declare function resolveListCellPadding(density?: number | ListDensity): string;
13
13
  export declare function resolveListRowSpacing(spacing?: number): number;
14
+ /** Default near-end threshold in pixels for triggering near-end events. */
15
+ export declare const LIST_DEFAULT_NEAR_END_THRESHOLD = 80;
16
+ /** Resolves the final near-end threshold from multiple optional values. */
17
+ export declare function resolveListNearEndThreshold(...threshold: (number | undefined)[]): number;
14
18
  export declare function resolveListSpacerHeight(count: number, rowHeight: number, rowSpacing: number): number;
15
19
  export declare const mapSxTableCell: <T>(col: TListColumn<T>, totalFlex: number, sx?: TableCellProps['sx']) => TableCellProps['sx'];
@@ -7,6 +7,7 @@ export declare function useMergedConfig<T>(config: IViewListConfig<T>, props: IV
7
7
  rowHeight: number;
8
8
  cellPadding: string;
9
9
  rowSpacing: number;
10
+ nearEndThreshold: number;
10
11
  normalOptions: {
11
12
  autoHeight: boolean;
12
13
  } & import("./types").IViewListNormalOptions;
@@ -91,6 +91,8 @@ export interface IViewListBase<T> {
91
91
  selectable?: boolean;
92
92
  /** Options specific to normal rendering strategy. */
93
93
  normalOptions?: IViewListNormalOptions;
94
+ /** Distance in pixels from the bottom of the scroll container at which `onNearEnd` is triggered. @default 80 */
95
+ nearEndThreshold?: number;
94
96
  /** Options specific to virtualized rendering strategy. */
95
97
  virtualizedOptions?: IViewListVirtualizedOptions;
96
98
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dinocollab-core",
3
- "version": "2.2.19",
3
+ "version": "2.2.21",
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",