dgz-ui-shared 1.2.28 → 1.2.29

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
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),O=require("../../chunks/index-ClQFzqcq.cjs.js"),J=require("dgz-ui/button"),R=require("dgz-ui/dropdown"),h=require("dgz-ui/utils"),u=require("../../chunks/lodash-BjH0kD7j.cjs.js"),b=require("lucide-react"),L=require("react"),Z=require("react-i18next"),X=require("../../chunks/useSortable-B3LF1tg8.cjs.js"),se=require("../../chunks/Actions-bpMDyl5M.cjs.js"),te=require("../../chunks/ExportData-BjS0xAqH.cjs.js"),Q=require("../../chunks/Search-D0G4Mda4.cjs.js"),le=require("dgz-ui"),de=require("../../chunks/Loader-D_jX_Wgx.cjs.js"),H=require("../../chunks/MyPagination-CnF3468f.cjs.js"),U=require("dgz-ui/form"),f=require("dgz-ui/table"),Y=require("../../chunks/SortOrder-81BrXp3i.cjs.js"),xe=require("../../chunks/Empty-BYOOFAab.cjs.js"),ce=L.memo(function({filters:N,params:E,onFilter:n,className:w,...k}){const{t:o}=Z.useTranslation(),d=L.useMemo(()=>Object.fromEntries((N==null?void 0:N.map(x=>{var j;return[x.name,Object.fromEntries(((j=x.options)==null?void 0:j.map(({label:s,value:T})=>[T,s]))||[])]}))||[]),[N]);return e.jsx("div",{...k,className:h.cn("flex flex-wrap gap-2",w),children:Object.entries(E||{}).filter(([x,j])=>!!(d!=null&&d[x])&&!u.lodashExports.isEmpty(j)).map(([x,j])=>{var s;return Array.isArray(j)?e.jsx(le.ButtonGroup,{children:j.filter(T=>{var v;return((v=d==null?void 0:d[x])==null?void 0:v[T])&&T}).map((T,v)=>{var i;return e.jsxs(J.Button,{size:"sm",onClick:()=>{n==null||n({...E,[x]:j.filter(M=>M!==T)})},children:[o(String(((i=d==null?void 0:d[x])==null?void 0:i[T])||""))," ",e.jsx(b.XIcon,{})]},v)})},x):e.jsxs(J.Button,{size:"sm",onClick:()=>{n==null||n(u.lodashExports.omit(E,x))},children:[o(String(((s=d==null?void 0:d[x])==null?void 0:s[j])||""))," ",e.jsx(b.XIcon,{})]})})})}),a=({rows:t=[],columns:N,onRowClick:E,rowKey:n,params:w={page:1,limit:H.DEFAULT_LIMIT},hasNumbers:k=!1,hasCheckbox:o=!1,selectedItems:d,onSelectedItemsChange:x,onSortOrderChange:j,isStickyHeader:s,className:T,...v})=>{const{sortObject:i,handleSort:M}=X.useSortable({sortField:w==null?void 0:w.sortField,sortOrder:w==null?void 0:w.sortOrder,onSortOrderChange:j}),{selectedRows:A,isRowSelected:g,isAllRowsSelected:q,handleSelectAllRows:W,handleSelectRow:z}=X.useDataTable({rows:t,defaultSelectedRows:d});return L.useEffect(()=>{JSON.stringify(d)!==JSON.stringify(A)&&A&&(x==null||x(A))},[A,d,x]),e.jsxs(f.Table,{...v,className:h.cn("relative",T),children:[e.jsx(f.TableHeader,{className:h.cn("bg-bg",s&&"sticky top-0 z-1"),children:e.jsxs(f.TableRow,{children:[o&&e.jsx(f.TableHead,{className:"w-12 p-3",children:e.jsx(U.Checkbox,{className:"mt-1",checked:q(n),onCheckedChange:l=>W(n,!!l),"aria-label":"Select all"})}),k&&e.jsx(f.TableHead,{className:"w-12 p-2",children:"#"}),N.filter(l=>!l.hidden).map(l=>e.jsx(f.TableHead,{style:l.styles,className:h.cn("p-2",l.sortable&&"cursor-pointer"),onClick:()=>l.sortable&&M(l.dataIndex),children:e.jsxs("div",{className:"flex items-center gap-2",children:[l.name," ",l.sortable&&((i==null?void 0:i.sortField)===l.key?e.jsxs(e.Fragment,{children:[(i==null?void 0:i.sortOrder)===Y.SortOrder.DESC&&e.jsx(b.ArrowDownWideNarrow,{size:15}),(i==null?void 0:i.sortOrder)===Y.SortOrder.ASC&&e.jsx(b.ArrowUpWideNarrow,{size:15})]}):e.jsx(b.ArrowUpDown,{size:15}))]})},l.key))]})}),e.jsx(f.TableBody,{className:"[&>tr:nth-child(even)]:bg-bg-secondary",children:t.length?t.map((l,y)=>e.jsxs(f.TableRow,{onClick:()=>E==null?void 0:E(l),className:h.cn(E&&"cursor-pointer"),"data-state":g(l[n])&&"selected",children:[o&&e.jsx(f.TableCell,{className:"w-12 p-3",onClick:r=>r.stopPropagation(),children:e.jsx(U.Checkbox,{className:"mt-1",checked:g(l[n]),onCheckedChange:r=>z(l[n],!!r),"aria-label":"Select row"})}),k&&e.jsx(f.TableCell,{className:"w-12 p-2",children:(w.page-1)*(w.limit||H.DEFAULT_LIMIT)+y+1}),N.filter(r=>!r.hidden).map(r=>e.jsx(f.TableCell,{className:"text-body-xs-medium max-w-xs p-2",style:r.styles,children:r.render?r.render(u.lodashExports.get(l,r.dataIndex),l):u.lodashExports.get(l,r.dataIndex,"")},`${y}-${r.key}`))]},`${l[n]}`)):e.jsx(f.TableRow,{children:e.jsx(f.TableCell,{colSpan:k?o?N.length+2:N.length+1:N.length,children:e.jsx(xe.Empty,{})})})})]})},re=({dataSource:t,columns:N,onRowClick:E,rowKey:n,hasNumbers:w,hasSearch:k,exportOptions:o,hasCheckbox:d,hasPagination:x,isStickyHeader:j,onParamChange:s,dataKey:T="docs",loading:v,tableKey:i,filters:M,actions:A,handleFilterChange:g,params:q,exportLoading:W=!1,onColumnsUpdate:z,hasColumnsVisibilityDropdown:l,showAppliedFilters:y=!1,onSelectedItemsChange:r,actionProps:m,filterWrapperProps:F,exportOptionsProps:K,columnsVisibilityProps:p,paginationProps:S,searchProps:D,...V})=>{var G;const{t:_}=Z.useTranslation(),[B,C]=L.useState([]),{formattedColumns:$,handleColumnsChange:P,resetColumns:ee}=X.useColumns({key:i,columns:N});return L.useEffect(()=>{z==null||z($)},[$,z]),L.useEffect(()=>{r==null||r(B)},[B,r]),e.jsxs("div",{className:"border-border-alpha-light flex grow flex-col overflow-auto rounded-xl border shadow-xs",children:[e.jsxs("div",{className:"space-y-4 p-4",children:[(k||l&&i||!u.lodashExports.isEmpty(o)||!u.lodashExports.isEmpty(M))&&e.jsxs("div",{className:"flex shrink-0 flex-col items-center justify-between gap-3 lg:flex-row",children:[e.jsx("div",{className:"w-full shrink",children:k&&e.jsx(Q.Search,{...D,inputProps:{...D==null?void 0:D.inputProps,className:h.cn("h-8 grow",(G=D==null?void 0:D.inputProps)==null?void 0:G.className)},className:h.cn("max-w-full lg:max-w-78 [&_button]:-top-1",D==null?void 0:D.className),defaultValue:u.lodashExports.get(q,"search",""),onSearchChange:c=>s==null?void 0:s({...q,search:c,page:1})})}),e.jsxs("div",{className:"flex w-full shrink-0 items-center justify-end gap-3 lg:w-auto",children:[o&&e.jsx(te.ExportData,{...K,options:o,loading:W}),l&&i&&e.jsxs(R.DropdownMenu,{children:[e.jsx(R.DropdownMenuTrigger,{asChild:!0,className:"grow",...p==null?void 0:p.triggerProps,children:e.jsx(J.Button,{variant:"secondary",size:"sm",className:"ml-auto rounded-lg px-3",children:(p==null?void 0:p.title)||e.jsxs(e.Fragment,{children:[e.jsx(O.yn,{})," ",e.jsx("span",{className:"hidden md:inline!",children:_("Customize columns")}),e.jsx(O.f1,{})]})})}),e.jsxs(R.DropdownMenuContent,{align:"end",...p==null?void 0:p.contentProps,children:[e.jsxs(R.DropdownMenuItem,{className:"capitalize",onClick:ee,children:[e.jsx(b.RefreshCw,{})," ",(p==null?void 0:p.resetText)||_("Reset columns")]}),e.jsx(R.DropdownMenuSeparator,{}),$.map(c=>e.jsx(R.DropdownMenuCheckboxItem,{className:"capitalize",checked:!c.hidden,onCheckedChange:I=>P(c,!I),children:c.name},c.key))]})]}),A&&e.jsx(se.Actions,{...m,actions:A}),M&&e.jsx(Q.FilterWrapper,{...F,filters:M,params:q,onChange:g,onFilter:c=>{s==null||s({...c,page:1}),g==null||g(c)}})]})]}),y&&!u.lodashExports.isEmpty(M)&&e.jsx(ce,{filters:M,params:q,onFilter:c=>{s==null||s({...c,page:1}),g==null||g(c)}})]}),e.jsx("div",{className:"flex flex-col overflow-auto border-y",children:v?e.jsx(de.Loader,{}):e.jsx(a,{...V,params:{page:(t==null?void 0:t.page)||1,limit:t==null?void 0:t.limit,...q},rows:u.lodashExports.get(t,T,[]),rowKey:n,selectedItems:B,isStickyHeader:j,columns:$,hasCheckbox:d,hasNumbers:w,onRowClick:E,onSelectedItemsChange:C,onSortOrderChange:({sortField:c,sortOrder:I})=>{s==null||s({...q,sortField:c,sortOrder:I})}})}),x&&e.jsxs("div",{className:"flex shrink-0 flex-wrap items-center justify-center gap-3 p-4 lg:justify-between",children:[e.jsx("div",{className:"text-sm",children:e.jsx(H.MyLimitSelect,{onLimitChange:c=>s==null?void 0:s({...q,limit:c,page:1}),defaultValue:t==null?void 0:t.limit})}),e.jsx("div",{className:"text-muted-foreground text-sm",children:_("{{selectedCount}} of {{total}} row(s) selected",{selectedCount:B.length,total:(t==null?void 0:t.total)||0})}),e.jsx("div",{children:e.jsx(H.MyPagination,{...S,onPageChange:c=>s==null?void 0:s({...q,page:c}),currentPage:t==null?void 0:t.page,totalPages:t==null?void 0:t.totalPages})})]})]})};exports.DataTable=re;exports.MyTable=a;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),O=require("../../chunks/index-ClQFzqcq.cjs.js"),J=require("dgz-ui/button"),R=require("dgz-ui/dropdown"),h=require("dgz-ui/utils"),M=require("../../chunks/lodash-BjH0kD7j.cjs.js"),b=require("lucide-react"),L=require("react"),Z=require("react-i18next"),X=require("../../chunks/useSortable-B3LF1tg8.cjs.js"),se=require("../../chunks/Actions-bpMDyl5M.cjs.js"),te=require("../../chunks/ExportData-BjS0xAqH.cjs.js"),Q=require("../../chunks/Search-D0G4Mda4.cjs.js"),le=require("dgz-ui"),de=require("../../chunks/Loader-D_jX_Wgx.cjs.js"),H=require("../../chunks/MyPagination-CnF3468f.cjs.js"),U=require("dgz-ui/form"),f=require("dgz-ui/table"),Y=require("../../chunks/SortOrder-81BrXp3i.cjs.js"),xe=require("../../chunks/Empty-BYOOFAab.cjs.js"),re=L.memo(function({filters:N,params:E,onFilter:n,className:w,...k}){const{t:o}=Z.useTranslation(),d=L.useMemo(()=>Object.fromEntries((N==null?void 0:N.map(x=>{var j;return[x.name,Object.fromEntries(((j=x.options)==null?void 0:j.map(({label:s,value:T})=>[T,s]))||[])]}))||[]),[N]);return e.jsx("div",{...k,className:h.cn("flex flex-wrap gap-2",w),children:Object.entries(E||{}).filter(([x,j])=>!!(d!=null&&d[x])&&!M.lodashExports.isEmpty(j)).map(([x,j])=>{var s;return Array.isArray(j)?e.jsx(le.ButtonGroup,{children:j.filter(T=>{var v;return((v=d==null?void 0:d[x])==null?void 0:v[T])&&T}).map((T,v)=>{var i;return e.jsxs(J.Button,{size:"sm",onClick:()=>{n==null||n({...E,[x]:j.filter(D=>D!==T)})},children:[o(String(((i=d==null?void 0:d[x])==null?void 0:i[T])||""))," ",e.jsx(b.XIcon,{})]},v)})},x):e.jsxs(J.Button,{size:"sm",onClick:()=>{n==null||n(M.lodashExports.omit(E,x))},children:[o(String(((s=d==null?void 0:d[x])==null?void 0:s[j])||""))," ",e.jsx(b.XIcon,{})]})})})}),a=({rows:t=[],columns:N,onRowClick:E,rowKey:n,params:w={page:1,limit:H.DEFAULT_LIMIT},hasNumbers:k=!1,hasCheckbox:o=!1,selectedItems:d,onSelectedItemsChange:x,onSortOrderChange:j,isStickyHeader:s,className:T,...v})=>{const{sortObject:i,handleSort:D}=X.useSortable({sortField:w==null?void 0:w.sortField,sortOrder:w==null?void 0:w.sortOrder,onSortOrderChange:j}),{selectedRows:A,isRowSelected:g,isAllRowsSelected:q,handleSelectAllRows:W,handleSelectRow:z}=X.useDataTable({rows:t,defaultSelectedRows:d});return L.useEffect(()=>{JSON.stringify(d)!==JSON.stringify(A)&&A&&(x==null||x(A))},[A,d,x]),e.jsxs(f.Table,{...v,className:h.cn("relative",T),children:[e.jsx(f.TableHeader,{className:h.cn("bg-bg",s&&"sticky top-0 z-1"),children:e.jsxs(f.TableRow,{children:[o&&e.jsx(f.TableHead,{className:"w-12 p-3",children:e.jsx(U.Checkbox,{className:"mt-1",checked:q(n),onCheckedChange:l=>W(n,!!l),"aria-label":"Select all"})}),k&&e.jsx(f.TableHead,{className:"w-12 p-2",children:"#"}),N.filter(l=>!l.hidden).map(l=>e.jsx(f.TableHead,{style:l.styles,className:h.cn("p-2",l.sortable&&"cursor-pointer"),onClick:()=>l.sortable&&D(l.dataIndex),children:e.jsxs("div",{className:"flex items-center gap-2",children:[l.name," ",l.sortable&&((i==null?void 0:i.sortField)===l.key?e.jsxs(e.Fragment,{children:[(i==null?void 0:i.sortOrder)===Y.SortOrder.DESC&&e.jsx(b.ArrowDownWideNarrow,{size:15}),(i==null?void 0:i.sortOrder)===Y.SortOrder.ASC&&e.jsx(b.ArrowUpWideNarrow,{size:15})]}):e.jsx(b.ArrowUpDown,{size:15}))]})},l.key))]})}),e.jsx(f.TableBody,{className:"[&>tr:nth-child(even)]:bg-bg-secondary",children:t.length?t.map((l,y)=>e.jsxs(f.TableRow,{onClick:()=>E==null?void 0:E(l),className:h.cn(E&&"cursor-pointer"),"data-state":g(l[n])&&"selected",children:[o&&e.jsx(f.TableCell,{className:"w-12 p-3",onClick:c=>c.stopPropagation(),children:e.jsx(U.Checkbox,{className:"mt-1",checked:g(l[n]),onCheckedChange:c=>z(l[n],!!c),"aria-label":"Select row"})}),k&&e.jsx(f.TableCell,{className:"w-12 p-2",children:(w.page-1)*(w.limit||H.DEFAULT_LIMIT)+y+1}),N.filter(c=>!c.hidden).map(c=>e.jsx(f.TableCell,{className:"text-body-xs-medium max-w-xs p-2",style:c.styles,children:c.render?c.render(M.lodashExports.get(l,c.dataIndex),l):M.lodashExports.get(l,c.dataIndex,"")},`${y}-${c.key}`))]},`${l[n]}`)):e.jsx(f.TableRow,{children:e.jsx(f.TableCell,{colSpan:k?o?N.length+2:N.length+1:N.length,children:e.jsx(xe.Empty,{})})})})]})},ce=({dataSource:t,columns:N,onRowClick:E,rowKey:n,hasNumbers:w,hasSearch:k,exportOptions:o,hasCheckbox:d,hasPagination:x,isStickyHeader:j,onParamChange:s,dataKey:T="docs",loading:v,tableKey:i,filters:D,actions:A,handleFilterChange:g,params:q,exportLoading:W=!1,onColumnsUpdate:z,hasColumnsVisibilityDropdown:l,showAppliedFilters:y=!1,onSelectedItemsChange:c,actionProps:m,filterWrapperProps:F,exportOptionsProps:K,columnsVisibilityProps:p,paginationProps:S,searchProps:u,...V})=>{var G;const{t:_}=Z.useTranslation(),[B,C]=L.useState([]),{formattedColumns:$,handleColumnsChange:P,resetColumns:ee}=X.useColumns({key:i,columns:N});return L.useEffect(()=>{z==null||z($)},[$,z]),L.useEffect(()=>{c==null||c(B)},[B,c]),e.jsxs("div",{className:"border-border-alpha-light flex grow flex-col overflow-auto rounded-xl border shadow-xs",children:[e.jsxs("div",{className:"space-y-4 p-4",children:[(k||l&&i||!M.lodashExports.isEmpty(o)||!M.lodashExports.isEmpty(D))&&e.jsxs("div",{className:"flex shrink-0 flex-col items-center justify-between gap-3 lg:flex-row",children:[e.jsx("div",{className:"w-full shrink-0 grow lg:w-auto",children:k&&e.jsx(Q.Search,{...u,inputProps:{...u==null?void 0:u.inputProps,className:h.cn("h-8 grow",(G=u==null?void 0:u.inputProps)==null?void 0:G.className)},className:h.cn("max-w-full lg:max-w-78 [&_button]:-top-1",u==null?void 0:u.className),defaultValue:M.lodashExports.get(q,"search",""),onSearchChange:r=>s==null?void 0:s({...q,search:r,page:1})})}),e.jsxs("div",{className:"flex w-full shrink items-center justify-end gap-3 lg:w-auto",children:[o&&e.jsx(te.ExportData,{...K,options:o,loading:W}),l&&i&&e.jsxs(R.DropdownMenu,{children:[e.jsx(R.DropdownMenuTrigger,{asChild:!0,className:"grow",...p==null?void 0:p.triggerProps,children:e.jsx(J.Button,{variant:"secondary",size:"sm",className:"ml-auto rounded-lg px-3",children:(p==null?void 0:p.title)||e.jsxs(e.Fragment,{children:[e.jsx(O.yn,{})," ",e.jsx("span",{className:"hidden md:inline!",children:_("Customize columns")}),e.jsx(O.f1,{})]})})}),e.jsxs(R.DropdownMenuContent,{align:"end",...p==null?void 0:p.contentProps,children:[e.jsxs(R.DropdownMenuItem,{className:"capitalize",onClick:ee,children:[e.jsx(b.RefreshCw,{})," ",(p==null?void 0:p.resetText)||_("Reset columns")]}),e.jsx(R.DropdownMenuSeparator,{}),$.map(r=>e.jsx(R.DropdownMenuCheckboxItem,{className:"capitalize",checked:!r.hidden,onCheckedChange:I=>P(r,!I),children:r.name},r.key))]})]}),A&&e.jsx(se.Actions,{...m,actions:A}),D&&e.jsx(Q.FilterWrapper,{...F,filters:D,params:q,onChange:g,onFilter:r=>{s==null||s({...r,page:1}),g==null||g(r)}})]})]}),y&&!M.lodashExports.isEmpty(D)&&e.jsx(re,{filters:D,params:q,onFilter:r=>{s==null||s({...r,page:1}),g==null||g(r)}})]}),e.jsx("div",{className:"flex flex-col overflow-auto border-y",children:v?e.jsx(de.Loader,{}):e.jsx(a,{...V,params:{page:(t==null?void 0:t.page)||1,limit:t==null?void 0:t.limit,...q},rows:M.lodashExports.get(t,T,[]),rowKey:n,selectedItems:B,isStickyHeader:j,columns:$,hasCheckbox:d,hasNumbers:w,onRowClick:E,onSelectedItemsChange:C,onSortOrderChange:({sortField:r,sortOrder:I})=>{s==null||s({...q,sortField:r,sortOrder:I})}})}),x&&e.jsxs("div",{className:"flex shrink-0 flex-wrap items-center justify-center gap-3 p-4 lg:justify-between",children:[e.jsx("div",{className:"text-sm",children:e.jsx(H.MyLimitSelect,{onLimitChange:r=>s==null?void 0:s({...q,limit:r,page:1}),defaultValue:t==null?void 0:t.limit})}),e.jsx("div",{className:"text-muted-foreground text-sm",children:_("{{selectedCount}} of {{total}} row(s) selected",{selectedCount:B.length,total:(t==null?void 0:t.total)||0})}),e.jsx("div",{children:e.jsx(H.MyPagination,{...S,onPageChange:r=>s==null?void 0:s({...q,page:r}),currentPage:t==null?void 0:t.page,totalPages:t==null?void 0:t.totalPages})})]})]})};exports.DataTable=ce;exports.MyTable=a;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../src/components/filters/AppliedFilters.tsx","../../../src/components/datatable/MyTable.tsx","../../../src/components/datatable/DataTable.tsx"],"sourcesContent":["import { ButtonGroup } from 'dgz-ui';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { cn } from 'dgz-ui/utils';\nimport { isEmpty, omit } from 'lodash';\nimport { XIcon } from 'lucide-react';\nimport { memo, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { FilterInterface } from './FilterWrapper.tsx';\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface AppliedFiltersProps extends CardProps {\n /** Array of filter definitions to render. */\n filters?: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const AppliedFilters = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n className,\n ...props\n}: AppliedFiltersProps) {\n const { t } = useTranslation();\n\n const filterObject = useMemo(\n () =>\n Object.fromEntries(\n filters?.map((filter) => [\n filter.name,\n Object.fromEntries(\n filter.options?.map(({ label, value }) => [value, label]) || []\n ),\n ]) || []\n ),\n [filters]\n );\n\n return (\n <div {...props} className={cn('flex flex-wrap gap-2', className)}>\n {Object.entries(params || {})\n .filter(([key, value]) => !!filterObject?.[key] && !isEmpty(value))\n .map(([key, value]) =>\n Array.isArray(value) ? (\n <ButtonGroup key={key}>\n {value\n .filter((val) => filterObject?.[key]?.[val] && val)\n .map((val, index) => (\n <Button\n size={'sm'}\n key={index}\n onClick={() => {\n onFilter?.({\n ...params,\n [key]: value.filter((v) => v !== val),\n });\n }}\n >\n {t(String(filterObject?.[key]?.[val] || ''))} <XIcon />\n </Button>\n ))}\n </ButtonGroup>\n ) : (\n <Button\n size={'sm'}\n onClick={() => {\n onFilter?.(omit(params, key));\n }}\n >\n {t(String(filterObject?.[key]?.[value as string] || ''))}{' '}\n <XIcon />\n </Button>\n )\n )}\n </div>\n );\n});\n","import { Checkbox } from 'dgz-ui/form';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from 'dgz-ui/table';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport {\n ArrowDownWideNarrow,\n ArrowUpDown,\n ArrowUpWideNarrow,\n} from 'lucide-react';\nimport { type ComponentProps, useEffect } from 'react';\nimport { SortOrder } from '../../enums';\nimport { useDataTable, useSortable, type UseSortableProps } from '../../hooks';\nimport type { ColumnType } from '../../types';\nimport { Empty } from '../empty';\nimport { DEFAULT_LIMIT } from '../pagination/MyLimitSelect';\n\n/**\n * Props for the MyTable component.\n * @template TData - The type of data in the table.\n */\nexport interface MyTableProps<TData> extends ComponentProps<'table'> {\n /** Array of data rows to display. */\n rows?: TData[];\n /** Column definitions. */\n columns: ColumnType<TData>[];\n /** Callback when a row is clicked. */\n onRowClick?: (row: TData) => void;\n /** Whether to show row numbers. */\n hasNumbers?: boolean;\n /** Whether to show selection checkboxes. */\n hasCheckbox?: boolean;\n /** Unique key for each row. */\n rowKey: keyof TData;\n /** Current table parameters (page, limit, sort). */\n params?: Record<string, unknown>;\n /** Total number of items (optional, often used with pagination context). */\n total?: number;\n /** Array of currently selected item keys. */\n selectedItems?: TData[keyof TData][];\n /** Callback when selected items change. */\n onSelectedItemsChange?: (selectedItems: TData[keyof TData][]) => void;\n /** Callback when sort order changes. */\n onSortOrderChange?: (\n params: Omit<UseSortableProps<TData>, 'onSortOrderChange'>\n ) => void;\n /** Whether the header should stick to the top. */\n isStickyHeader?: true;\n}\n\n/**\n * MyTable renders a generic data table with optional numbering, selection checkboxes,\n * sortable columns and sticky header. It is a presentational component and delegates\n * sorting/selection state via hooks and callbacks.\n *\n * @template TData - The row data type.\n * @param props - Component props.\n * @returns React element containing the table.\n */\nexport const MyTable = <TData,>({\n rows = [],\n columns,\n onRowClick,\n rowKey,\n params = {\n page: 1,\n limit: DEFAULT_LIMIT,\n },\n hasNumbers = false,\n hasCheckbox = false,\n selectedItems,\n onSelectedItemsChange,\n onSortOrderChange,\n isStickyHeader,\n className,\n ...props\n}: MyTableProps<TData>) => {\n const { sortObject, handleSort } = useSortable<TData>({\n sortField: params?.sortField as keyof TData | undefined,\n sortOrder: params?.sortOrder as SortOrder | undefined,\n onSortOrderChange,\n });\n const {\n selectedRows,\n isRowSelected,\n isAllRowsSelected,\n handleSelectAllRows,\n handleSelectRow,\n } = useDataTable<TData>({ rows, defaultSelectedRows: selectedItems });\n\n useEffect(() => {\n if (\n JSON.stringify(selectedItems) !== JSON.stringify(selectedRows) &&\n selectedRows\n ) {\n onSelectedItemsChange?.(selectedRows);\n }\n }, [selectedRows, selectedItems, onSelectedItemsChange]);\n\n return (\n <Table {...props} className={cn('relative', className)}>\n <TableHeader\n className={cn('bg-bg', isStickyHeader && 'sticky top-0 z-1')}\n >\n <TableRow>\n {hasCheckbox && (\n <TableHead className={'w-12 p-3'}>\n <Checkbox\n className={'mt-1'}\n checked={isAllRowsSelected(rowKey)}\n onCheckedChange={(value) =>\n handleSelectAllRows(rowKey, !!value)\n }\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n {hasNumbers && <TableHead className={'w-12 p-2'}>#</TableHead>}\n {columns\n .filter((column) => !column.hidden)\n .map((column) => (\n <TableHead\n key={column.key}\n style={column.styles}\n className={cn('p-2', column.sortable && 'cursor-pointer')}\n onClick={() => column.sortable && handleSort(column.dataIndex)}\n >\n <div className={'flex items-center gap-2'}>\n {column.name}{' '}\n {column.sortable &&\n (sortObject?.sortField === column.key ? (\n <>\n {sortObject?.sortOrder === SortOrder.DESC && (\n <ArrowDownWideNarrow size={15} />\n )}\n {sortObject?.sortOrder === SortOrder.ASC && (\n <ArrowUpWideNarrow size={15} />\n )}\n </>\n ) : (\n <ArrowUpDown size={15} />\n ))}\n </div>\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody className={'[&>tr:nth-child(even)]:bg-bg-secondary'}>\n {rows.length ? (\n rows.map((row, index) => (\n <TableRow\n key={`${row[rowKey]}`}\n onClick={() => onRowClick?.(row)}\n className={cn(onRowClick && 'cursor-pointer')}\n data-state={isRowSelected(row[rowKey]) && 'selected'}\n >\n {hasCheckbox && (\n <TableCell\n className={'w-12 p-3'}\n onClick={(evt) => evt.stopPropagation()}\n >\n <Checkbox\n className={'mt-1'}\n checked={isRowSelected(row[rowKey])}\n onCheckedChange={(value) =>\n handleSelectRow(row[rowKey], !!value)\n }\n aria-label=\"Select row\"\n />\n </TableCell>\n )}\n {hasNumbers && (\n <TableCell className={'w-12 p-2'}>\n {((params.page as number) - 1) *\n ((params.limit || DEFAULT_LIMIT) as number) +\n index +\n 1}\n </TableCell>\n )}\n {columns\n .filter((column) => !column.hidden)\n .map((column) => (\n <TableCell\n className={'text-body-xs-medium max-w-xs p-2'}\n style={column.styles}\n key={`${index}-${column.key}`}\n >\n {column.render\n ? column.render(get(row, column.dataIndex), row)\n : get(row, column.dataIndex, '')}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={\n hasNumbers\n ? hasCheckbox\n ? columns.length + 2\n : columns.length + 1\n : columns.length\n }\n >\n <Empty />\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n );\n};\n","import { RiArrowDownSLine, RiLayoutColumnLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport {\n type DropdownContainerProps,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from 'dgz-ui/dropdown';\nimport { cn } from 'dgz-ui/utils';\nimport { get, isEmpty } from 'lodash';\nimport { RefreshCw } from 'lucide-react';\nimport { type ReactNode, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useColumns } from '../../hooks';\nimport type { ColumnType } from '../../types';\nimport { type ActionInterface, Actions, type ActionsProps } from '../actions';\nimport {\n ExportData,\n type ExportDataInterface,\n type ExportDataProps,\n} from '../export';\nimport {\n type FilterInterface,\n FilterWrapper,\n type FilterWrapperProps,\n Search,\n type SearchProps,\n} from '../filters';\nimport { AppliedFilters } from '../filters/AppliedFilters.tsx';\nimport { Loader } from '../loader';\nimport { MyLimitSelect, MyPagination } from '../pagination';\nimport type { MyPaginationProps } from '../pagination/MyPagination.tsx';\nimport { MyTable, type MyTableProps } from './MyTable';\n\n/**\n * Minimal pagination wrapper contract used by `DataTable`.\n *\n * Notes\n * - Only `page`, `limit`, and `totalPages` are required. Other fields are optional and\n * may be provided by your API for convenience.\n * - The actual rows array can be stored in any key, controlled via `dataKey` prop\n * (defaults to `\"docs\"`).\n */\nexport interface PaginationInterface<TData> {\n /** Array of rows for the current page. Used when `dataKey` is set to `\"docs\"`. */\n docs?: TData[];\n /** Zero-based index of the first item on the current page (if provided by API). */\n offset?: number;\n /** Page size (items per page). */\n limit: number;\n /** Total number of pages available. */\n totalPages: number;\n /** Total number of items across all pages (if available). */\n total?: number;\n /** Current page number (1-based). */\n page: number;\n /** Convenience counter for the first item index on the page (if provided). */\n pagingCounter?: number;\n /** Whether a previous page exists. */\n hasPrevPage?: boolean;\n /** Whether a next page exists. */\n hasNextPage?: boolean;\n /** Previous page number, if available. */\n prevPage?: number;\n /** Next page number, if available. */\n nextPage?: number;\n}\n\n/**\n * Props for the DataTable component.\n *\n * @template TData - Row data type.\n * @template TPaginationData - Pagination wrapper type.\n */\nexport interface DataTableProps<\n TData,\n TPaginationData extends PaginationInterface<TData>,\n> extends Omit<MyTableProps<TData>, 'rows'> {\n /** Pagination data source. */\n dataSource?: TPaginationData;\n /** Callback for parameter changes (pagination, sorting, filtering). */\n onParamChange?: (param: Record<string, unknown>) => void;\n /** Whether to enable pagination. */\n hasPagination?: true;\n /** Options for the export data dropdown. */\n exportOptions?: ExportDataInterface[];\n /** Whether to enable search functionality. */\n hasSearch?: true;\n /** Whether the table data is loading. */\n loading?: boolean;\n /** Array of filters to display. */\n filters?: FilterInterface[];\n /** Array of actions to display. */\n actions?: ActionInterface[];\n /** Callback for filter changes. */\n handleFilterChange?: (filters: Record<string, unknown>) => void;\n /** Unique key for the table, used for column persistence. */\n tableKey: string;\n /** The key in dataSource where the data array is located. Defaults to \"docs\". */\n dataKey?: keyof TPaginationData;\n /** Whether to show the columns visibility dropdown. */\n hasColumnsVisibilityDropdown?: true;\n /** Whether to show the columns visibility dropdown. */\n showAppliedFilters?: boolean;\n /** Callback when columns are updated (e.g., visibility toggled). */\n onColumnsUpdate?: (columns: ColumnType<TData>[]) => void;\n /** Whether the export action is loading. */\n exportLoading?: boolean;\n /** Props for the Actions component. */\n actionProps?: Partial<ActionsProps>;\n /** Props for the FilterWrapper component. */\n filterWrapperProps?: Partial<FilterWrapperProps>;\n /** Props for the ExportData component. */\n exportOptionsProps?: Partial<ExportDataProps>;\n searchProps?: Partial<SearchProps>;\n paginationProps?: Partial<MyPaginationProps>;\n /** Props for the columns visibility dropdown. */\n columnsVisibilityProps?: DropdownContainerProps & {\n title?: ReactNode;\n resetText?: ReactNode;\n };\n}\n\n/**\n * DataTable is a composable, high-level table that brings together search, filters,\n * column visibility management, header actions, exporting, and pagination.\n * It renders `MyTable` for rows and, when enabled, shows header controls and a footer with pagination.\n *\n * Generic Types\n * - `TData` — Row data shape (type of each item in the rows array).\n * - `TPaginationData` — Pagination wrapper type containing rows and pagination meta; defaults to\n * `PaginationInterface<TData>`.\n *\n * Key Behaviors\n * - Emits `onParamChange` when search text, filters, page, limit, or sort order change.\n * - Persists column visibility per `tableKey` via `useColumns` and informs parent with `onColumnsUpdate`.\n * - Renders header controls only when the related feature is enabled/has content.\n *\n * Props Overview\n * - `dataSource` — Paginated data source object that contains rows (see `dataKey`) and pagination metadata.\n * - `columns` — Column definitions passed to `MyTable`.\n * - `onRowClick` — Callback when a row is clicked.\n * - `rowKey` — Property name used as a unique row key.\n * - `hasNumbers` — Whether to show the row numbers column.\n * - `hasSearch` — Set to `true` to display the search input in the header.\n * - `exportOptions` — Export menu options shown by `ExportData` (see `ExportDataInterface[]`).\n * - `exportLoading` — When `true`, shows a spinner in the Export button to indicate an export action is in progress.\n * - `hasCheckbox` — Whether to show the selection checkbox column.\n * - `hasPagination` — Set to `true` to render the pagination footer.\n * - `isStickyHeader` — Whether to keep the table header sticky.\n * - `onParamChange` — Emits parameter changes for pagination/sorting/search/filters.\n * - `dataKey` — Key within `dataSource` that contains the row array. Defaults to `\"docs\"`.\n * - `loading` — If `true`, shows a loading state instead of the table rows.\n * - `tableKey` — Unique key for persisting column visibility state.\n * - `filters` — Filter configurations to render in the header.\n * - `actions` — Header actions independent of selected rows.\n * - `handleFilterChange` — Callback executed when filter values change.\n * - `params` — Current list parameters (pagination, sort, search, filters).\n * - `hasColumnsVisibilityDropdown` — Set to `true` to show the columns customize dropdown.\n * - `onColumnsUpdate` — Notifies parent whenever the internal columns state changes (after formatting/visibility).\n * - `actionProps` — Props passed to the `Actions` component.\n * - `filterWrapperProps` — Props passed to the `FilterWrapper` component.\n * - `exportOptionsProps` — Props passed to the `ExportData` component.\n * - `columnsVisibilityProps` — Props passed to the columns visibility dropdown.\n * - `onSelectedItemsChange` — Callback when selected rows change (requires `hasCheckbox`).\n *\n * Accessibility\n * - Header controls and dropdowns reuse shared primitives that include keyboard and ARIA support.\n *\n * Internationalization\n * - Text such as \"Export\", \"Customize columns\", and \"Reset columns\" are resolved via `react-i18next`.\n *\n * Usage Examples\n * 1) Minimal paginated table (uses default `dataKey = \"docs\"`)\n * ```tsx\n * type User = { id: string; name: string };\n * const data = { docs: [{ id: '1', name: 'Ada' }], page: 1, limit: 10, totalPages: 1 };\n *\n * <DataTable<User>\n * tableKey=\"users-table\"\n * columns={[{ key: 'name', name: 'Name' }]}\n * rowKey=\"id\"\n * dataSource={data}\n * hasPagination\n * />\n * ```\n *\n * 2) Custom `dataKey` and column visibility persistence\n * ```tsx\n * type Row = { id: number; title: string };\n * const payload = { items: [{ id: 1, title: 'Hello' }], page: 1, limit: 20, totalPages: 1 };\n *\n * <DataTable<Row>\n * tableKey=\"posts\"\n * columns={[{ key: 'title', name: 'Title' }]}\n * rowKey=\"id\"\n * dataSource={payload}\n * dataKey=\"items\"\n * hasColumnsVisibilityDropdown\n * />\n * ```\n *\n * 3) Responding to user interactions via `onParamChange`\n * ```tsx\n * const [params, setParams] = useState({ page: 1, limit: 10 });\n *\n * <DataTable\n * tableKey=\"logs\"\n * columns={[{ key: 'message', name: 'Message' }]}\n * rowKey=\"id\"\n * params={params}\n * onParamChange={setParams}\n * hasSearch\n * hasPagination\n * />\n * ```\n *\n * Notes and Best Practices\n * - Ensure `rowKey` points to a stable unique field in `TData` to avoid key collisions.\n * - When arrays like `exportOptions`, `filters`, or `actions` are empty, their sections are not rendered.\n * - Sorting emits `{ sortField, sortOrder }` through `onParamChange` when the user toggles a column sort.\n *\n * Returns\n * - React element that renders a complete data table experience.\n */\nexport const DataTable = <\n TData,\n TPaginationData extends PaginationInterface<TData> =\n PaginationInterface<TData>,\n>({\n dataSource,\n columns,\n onRowClick,\n rowKey,\n hasNumbers,\n hasSearch,\n exportOptions,\n hasCheckbox,\n hasPagination,\n isStickyHeader,\n onParamChange,\n dataKey = 'docs',\n loading,\n tableKey,\n filters,\n actions,\n handleFilterChange,\n params,\n exportLoading = false,\n onColumnsUpdate,\n hasColumnsVisibilityDropdown,\n showAppliedFilters = false,\n onSelectedItemsChange,\n actionProps,\n filterWrapperProps,\n exportOptionsProps,\n columnsVisibilityProps,\n paginationProps,\n searchProps,\n ...props\n}: DataTableProps<TData, TPaginationData>) => {\n const { t } = useTranslation();\n const [selectedRows, setSelectedRows] = useState<TData[keyof TData][]>([]);\n const { formattedColumns, handleColumnsChange, resetColumns } =\n useColumns<TData>({ key: tableKey, columns });\n\n useEffect(() => {\n onColumnsUpdate?.(formattedColumns);\n }, [formattedColumns, onColumnsUpdate]);\n\n useEffect(() => {\n onSelectedItemsChange?.(selectedRows);\n }, [selectedRows, onSelectedItemsChange]);\n\n return (\n <div\n className={\n 'border-border-alpha-light flex grow flex-col overflow-auto rounded-xl border shadow-xs'\n }\n >\n <div className={'space-y-4 p-4'}>\n {(hasSearch ||\n (hasColumnsVisibilityDropdown && tableKey) ||\n !isEmpty(exportOptions) ||\n !isEmpty(filters)) && (\n <div className=\"flex shrink-0 flex-col items-center justify-between gap-3 lg:flex-row\">\n <div className={'w-full shrink'}>\n {hasSearch && (\n <Search\n {...searchProps}\n inputProps={{\n ...searchProps?.inputProps,\n className: cn(\n 'h-8 grow',\n searchProps?.inputProps?.className\n ),\n }}\n className={cn(\n 'max-w-full lg:max-w-78 [&_button]:-top-1',\n searchProps?.className\n )}\n defaultValue={get(params, 'search', '') as string}\n onSearchChange={(search) =>\n onParamChange?.({ ...params, search, page: 1 })\n }\n />\n )}\n </div>\n <div\n className={\n 'flex w-full shrink-0 items-center justify-end gap-3 lg:w-auto'\n }\n >\n {exportOptions && (\n <ExportData\n {...exportOptionsProps}\n options={exportOptions}\n loading={exportLoading}\n />\n )}\n {hasColumnsVisibilityDropdown && tableKey && (\n <DropdownMenu>\n <DropdownMenuTrigger\n asChild\n className={'grow'}\n {...columnsVisibilityProps?.triggerProps}\n >\n <Button\n variant=\"secondary\"\n size={'sm'}\n className={'ml-auto rounded-lg px-3'}\n >\n {columnsVisibilityProps?.title || (\n <>\n <RiLayoutColumnLine />{' '}\n <span className={'hidden md:inline!'}>\n {t('Customize columns')}\n </span>\n <RiArrowDownSLine />\n </>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n {...columnsVisibilityProps?.contentProps}\n >\n <DropdownMenuItem\n className=\"capitalize\"\n onClick={resetColumns}\n >\n <RefreshCw />{' '}\n {columnsVisibilityProps?.resetText || t('Reset columns')}\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n {formattedColumns.map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.key}\n className=\"capitalize\"\n checked={!column.hidden}\n onCheckedChange={(value) =>\n handleColumnsChange(column, !value)\n }\n >\n {column.name}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {actions && <Actions {...actionProps} actions={actions} />}\n {filters && (\n <FilterWrapper\n {...filterWrapperProps}\n filters={filters}\n params={params}\n onChange={handleFilterChange}\n onFilter={(filter) => {\n onParamChange?.({ ...filter, page: 1 });\n handleFilterChange?.(filter);\n }}\n />\n )}\n </div>\n </div>\n )}\n {showAppliedFilters && !isEmpty(filters) && (\n <AppliedFilters\n filters={filters}\n params={params}\n onFilter={(filter) => {\n onParamChange?.({ ...filter, page: 1 });\n handleFilterChange?.(filter);\n }}\n />\n )}\n </div>\n\n <div className={'flex flex-col overflow-auto border-y'}>\n {!loading ? (\n <MyTable<TData>\n {...props}\n params={{\n page: dataSource?.page || 1,\n limit: dataSource?.limit,\n ...params,\n }}\n rows={get(dataSource, dataKey, []) as TData[]}\n rowKey={rowKey}\n selectedItems={selectedRows}\n isStickyHeader={isStickyHeader}\n columns={formattedColumns}\n hasCheckbox={hasCheckbox}\n hasNumbers={hasNumbers}\n onRowClick={onRowClick}\n onSelectedItemsChange={setSelectedRows}\n onSortOrderChange={({ sortField, sortOrder }) => {\n onParamChange?.({ ...params, sortField, sortOrder });\n }}\n />\n ) : (\n <Loader />\n )}\n </div>\n {hasPagination && (\n <div className=\"flex shrink-0 flex-wrap items-center justify-center gap-3 p-4 lg:justify-between\">\n <div className=\"text-sm\">\n <MyLimitSelect\n onLimitChange={(limit) =>\n onParamChange?.({ ...params, limit, page: 1 })\n }\n defaultValue={dataSource?.limit}\n />\n </div>\n <div className=\"text-muted-foreground text-sm\">\n {t('{{selectedCount}} of {{total}} row(s) selected', {\n selectedCount: selectedRows.length,\n total: dataSource?.total || 0,\n })}\n </div>\n <div>\n <MyPagination\n {...paginationProps}\n onPageChange={(page) => onParamChange?.({ ...params, page })}\n currentPage={dataSource?.page}\n totalPages={dataSource?.totalPages}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"names":["AppliedFilters","memo","filters","params","onFilter","className","props","t","useTranslation","filterObject","useMemo","filter","_a","label","value","jsx","cn","key","isEmpty","ButtonGroup","val","index","jsxs","Button","v","XIcon","omit","MyTable","rows","columns","onRowClick","rowKey","DEFAULT_LIMIT","hasNumbers","hasCheckbox","selectedItems","onSelectedItemsChange","onSortOrderChange","isStickyHeader","sortObject","handleSort","useSortable","selectedRows","isRowSelected","isAllRowsSelected","handleSelectAllRows","handleSelectRow","useDataTable","useEffect","Table","TableHeader","TableRow","TableHead","Checkbox","column","Fragment","SortOrder","ArrowDownWideNarrow","ArrowUpWideNarrow","ArrowUpDown","TableBody","row","TableCell","evt","get","Empty","DataTable","dataSource","hasSearch","exportOptions","hasPagination","onParamChange","dataKey","loading","tableKey","actions","handleFilterChange","exportLoading","onColumnsUpdate","hasColumnsVisibilityDropdown","showAppliedFilters","actionProps","filterWrapperProps","exportOptionsProps","columnsVisibilityProps","paginationProps","searchProps","setSelectedRows","useState","formattedColumns","handleColumnsChange","resetColumns","useColumns","Search","search","ExportData","DropdownMenu","DropdownMenuTrigger","RiLayoutColumnLine","RiArrowDownSLine","DropdownMenuContent","DropdownMenuItem","RefreshCw","DropdownMenuSeparator","DropdownMenuCheckboxItem","Actions","FilterWrapper","Loader","sortField","sortOrder","MyLimitSelect","limit","MyPagination","page"],"mappings":"s1BA+BaA,GAAiBC,EAAAA,KAAK,SAAuB,CACxD,QAAAC,EACA,OAAAC,EACA,SAAAC,EACA,UAAAC,EACA,GAAGC,CACL,EAAwB,CACtB,KAAM,CAAA,EAAEC,CAAA,EAAMC,iBAAA,EAERC,EAAeC,EAAAA,QACnB,IACE,OAAO,aACLR,GAAA,YAAAA,EAAS,IAAKS,GAAA,OAAW,OACvBA,EAAO,KACP,OAAO,cACLC,EAAAD,EAAO,UAAP,YAAAC,EAAgB,IAAI,CAAC,CAAE,MAAAC,EAAO,MAAAC,CAAA,IAAY,CAACA,EAAOD,CAAK,KAAM,CAAA,CAAC,CAChE,MACI,CAAA,CAAC,EAEX,CAACX,CAAO,CAAA,EAGV,OACEa,EAAAA,IAAC,MAAA,CAAK,GAAGT,EAAO,UAAWU,EAAAA,GAAG,uBAAwBX,CAAS,EAC5D,SAAA,OAAO,QAAQF,GAAU,EAAE,EACzB,OAAO,CAAC,CAACc,EAAKH,CAAK,IAAM,CAAC,EAACL,GAAA,MAAAA,EAAeQ,KAAQ,CAACC,EAAAA,cAAAA,QAAQJ,CAAK,CAAC,EACjE,IAAI,CAAC,CAACG,EAAKH,CAAK,IAAA,OACf,aAAM,QAAQA,CAAK,EACjBC,EAAAA,IAACI,eAAA,CACE,SAAAL,EACE,OAAQM,GAAA,OAAQ,QAAAR,EAAAH,GAAA,YAAAA,EAAeQ,KAAf,YAAAL,EAAsBQ,KAAQA,EAAG,EACjD,IAAI,CAACA,EAAKC,IAAA,OACTC,OAAAA,EAAAA,KAACC,EAAAA,OAAA,CACC,KAAM,KAEN,QAAS,IAAM,CACbnB,GAAA,MAAAA,EAAW,CACT,GAAGD,EACH,CAACc,CAAG,EAAGH,EAAM,OAAQU,GAAMA,IAAMJ,CAAG,CAAA,EAExC,EAEC,SAAA,CAAAb,EAAE,SAAOK,EAAAH,GAAA,YAAAA,EAAeQ,KAAf,YAAAL,EAAsBQ,KAAQ,EAAE,CAAC,EAAE,UAAEK,EAAAA,MAAA,CAAA,CAAM,CAAA,CAAA,EARhDJ,CAAA,EAUR,CAAA,EAhBaJ,CAiBlB,EAEAK,EAAAA,KAACC,EAAAA,OAAA,CACC,KAAM,KACN,QAAS,IAAM,CACbnB,GAAA,MAAAA,EAAWsB,EAAAA,cAAAA,KAAKvB,EAAQc,CAAG,EAC7B,EAEC,SAAA,CAAAV,EAAE,SAAOK,EAAAH,GAAA,YAAAA,EAAeQ,KAAf,YAAAL,EAAsBE,KAAoB,EAAE,CAAC,EAAG,UACzDW,EAAAA,MAAA,CAAA,CAAM,CAAA,CAAA,CAAA,EACT,EAGR,CAEJ,CAAC,EC1BYE,EAAU,CAAS,CAC9B,KAAAC,EAAO,CAAA,EACP,QAAAC,EACA,WAAAC,EACA,OAAAC,EACA,OAAA5B,EAAS,CACP,KAAM,EACN,MAAO6B,EAAAA,aAAA,EAET,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,cAAAC,EACA,sBAAAC,EACA,kBAAAC,EACA,eAAAC,EACA,UAAAjC,EACA,GAAGC,CACL,IAA2B,CACzB,KAAM,CAAE,WAAAiC,EAAY,WAAAC,CAAA,EAAeC,cAAmB,CACpD,UAAWtC,GAAA,YAAAA,EAAQ,UACnB,UAAWA,GAAA,YAAAA,EAAQ,UACnB,kBAAAkC,CAAA,CACD,EACK,CACJ,aAAAK,EACA,cAAAC,EACA,kBAAAC,EACA,oBAAAC,EACA,gBAAAC,CAAA,EACEC,EAAAA,aAAoB,CAAE,KAAAnB,EAAM,oBAAqBO,EAAe,EAEpEa,OAAAA,EAAAA,UAAU,IAAM,CAEZ,KAAK,UAAUb,CAAa,IAAM,KAAK,UAAUO,CAAY,GAC7DA,IAEAN,GAAA,MAAAA,EAAwBM,GAE5B,EAAG,CAACA,EAAcP,EAAeC,CAAqB,CAAC,EAGrDd,EAAAA,KAAC2B,SAAO,GAAG3C,EAAO,UAAWU,EAAAA,GAAG,WAAYX,CAAS,EACnD,SAAA,CAAAU,EAAAA,IAACmC,EAAAA,YAAA,CACC,UAAWlC,EAAAA,GAAG,QAASsB,GAAkB,kBAAkB,EAE3D,gBAACa,WAAA,CACE,SAAA,CAAAjB,GACCnB,EAAAA,IAACqC,EAAAA,UAAA,CAAU,UAAW,WACpB,SAAArC,EAAAA,IAACsC,EAAAA,SAAA,CACC,UAAW,OACX,QAAST,EAAkBb,CAAM,EACjC,gBAAkBjB,GAChB+B,EAAoBd,EAAQ,CAAC,CAACjB,CAAK,EAErC,aAAW,YAAA,CAAA,EAEf,EAEDmB,GAAclB,EAAAA,IAACqC,YAAA,CAAU,UAAW,WAAY,SAAA,IAAC,EACjDvB,EACE,OAAQyB,GAAW,CAACA,EAAO,MAAM,EACjC,IAAKA,GACJvC,EAAAA,IAACqC,EAAAA,UAAA,CAEC,MAAOE,EAAO,OACd,UAAWtC,EAAAA,GAAG,MAAOsC,EAAO,UAAY,gBAAgB,EACxD,QAAS,IAAMA,EAAO,UAAYd,EAAWc,EAAO,SAAS,EAE7D,SAAAhC,EAAAA,KAAC,MAAA,CAAI,UAAW,0BACb,SAAA,CAAAgC,EAAO,KAAM,IACbA,EAAO,YACLf,GAAA,YAAAA,EAAY,aAAce,EAAO,IAChChC,EAAAA,KAAAiC,WAAA,CACG,SAAA,EAAAhB,GAAA,YAAAA,EAAY,aAAciB,EAAAA,UAAU,MACnCzC,EAAAA,IAAC0C,sBAAA,CAAoB,KAAM,GAAI,GAEhClB,GAAA,YAAAA,EAAY,aAAciB,EAAAA,UAAU,KACnCzC,EAAAA,IAAC2C,oBAAA,CAAkB,KAAM,EAAA,CAAI,CAAA,CAAA,CAEjC,EAEA3C,EAAAA,IAAC4C,EAAAA,YAAA,CAAY,KAAM,EAAA,CAAI,EAAA,CAAA,CAE7B,CAAA,EApBKL,EAAO,GAAA,CAsBf,CAAA,CAAA,CACL,CAAA,CAAA,EAEFvC,EAAAA,IAAC6C,EAAAA,UAAA,CAAU,UAAW,yCACnB,SAAAhC,EAAK,OACJA,EAAK,IAAI,CAACiC,EAAKxC,IACbC,EAAAA,KAAC6B,EAAAA,SAAA,CAEC,QAAS,IAAMrB,GAAA,YAAAA,EAAa+B,GAC5B,UAAW7C,EAAAA,GAAGc,GAAc,gBAAgB,EAC5C,aAAYa,EAAckB,EAAI9B,CAAM,CAAC,GAAK,WAEzC,SAAA,CAAAG,GACCnB,EAAAA,IAAC+C,EAAAA,UAAA,CACC,UAAW,WACX,QAAUC,GAAQA,EAAI,gBAAA,EAEtB,SAAAhD,EAAAA,IAACsC,EAAAA,SAAA,CACC,UAAW,OACX,QAASV,EAAckB,EAAI9B,CAAM,CAAC,EAClC,gBAAkBjB,GAChBgC,EAAgBe,EAAI9B,CAAM,EAAG,CAAC,CAACjB,CAAK,EAEtC,aAAW,YAAA,CAAA,CACb,CAAA,EAGHmB,GACClB,EAAAA,IAAC+C,EAAAA,UAAA,CAAU,UAAW,WACjB,UAAA3D,EAAO,KAAkB,IACxBA,EAAO,OAAS6B,EAAAA,eAClBX,EACA,EACJ,EAEDQ,EACE,OAAQyB,GAAW,CAACA,EAAO,MAAM,EACjC,IAAKA,GACJvC,EAAAA,IAAC+C,EAAAA,UAAA,CACC,UAAW,mCACX,MAAOR,EAAO,OAGb,SAAAA,EAAO,OACJA,EAAO,OAAOU,EAAAA,cAAAA,IAAIH,EAAKP,EAAO,SAAS,EAAGO,CAAG,EAC7CG,EAAAA,cAAAA,IAAIH,EAAKP,EAAO,UAAW,EAAE,CAAA,EAJ5B,GAAGjC,CAAK,IAAIiC,EAAO,GAAG,EAAA,CAM9B,CAAA,CAAA,EAxCE,GAAGO,EAAI9B,CAAM,CAAC,EAAA,CA0CtB,EAEDhB,EAAAA,IAACoC,WAAA,CACC,SAAApC,EAAAA,IAAC+C,EAAAA,UAAA,CACC,QACE7B,EACIC,EACEL,EAAQ,OAAS,EACjBA,EAAQ,OAAS,EACnBA,EAAQ,OAGd,eAACoC,GAAAA,MAAA,CAAA,CAAM,CAAA,CAAA,EAEX,CAAA,CAEJ,CAAA,EACF,CAEJ,ECUaC,GAAY,CAIvB,CACA,WAAAC,EACA,QAAAtC,EACA,WAAAC,EACA,OAAAC,EACA,WAAAE,EACA,UAAAmC,EACA,cAAAC,EACA,YAAAnC,EACA,cAAAoC,EACA,eAAAhC,EACA,cAAAiC,EACA,QAAAC,EAAU,OACV,QAAAC,EACA,SAAAC,EACA,QAAAxE,EACA,QAAAyE,EACA,mBAAAC,EACA,OAAAzE,EACA,cAAA0E,EAAgB,GAChB,gBAAAC,EACA,6BAAAC,EACA,mBAAAC,EAAqB,GACrB,sBAAA5C,EACA,YAAA6C,EACA,mBAAAC,EACA,mBAAAC,EACA,uBAAAC,EACA,gBAAAC,EACA,YAAAC,EACA,GAAGhF,CACL,IAA8C,OAC5C,KAAM,CAAA,EAAEC,CAAA,EAAMC,iBAAA,EACR,CAACkC,EAAc6C,CAAe,EAAIC,EAAAA,SAA+B,CAAA,CAAE,EACnE,CAAE,iBAAAC,EAAkB,oBAAAC,EAAqB,aAAAC,EAAA,EAC7CC,EAAAA,WAAkB,CAAE,IAAKlB,EAAU,QAAA7C,EAAS,EAE9CmB,OAAAA,EAAAA,UAAU,IAAM,CACd8B,GAAA,MAAAA,EAAkBW,EACpB,EAAG,CAACA,EAAkBX,CAAe,CAAC,EAEtC9B,EAAAA,UAAU,IAAM,CACdZ,GAAA,MAAAA,EAAwBM,EAC1B,EAAG,CAACA,EAAcN,CAAqB,CAAC,EAGtCd,EAAAA,KAAC,MAAA,CACC,UACE,yFAGF,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAW,gBACZ,SAAA,EAAA8C,GACCW,GAAgCL,GACjC,CAACxD,EAAAA,cAAAA,QAAQmD,CAAa,GACtB,CAACnD,EAAAA,cAAAA,QAAQhB,CAAO,IAChBoB,EAAAA,KAAC,MAAA,CAAI,UAAU,wEACb,SAAA,CAAAP,EAAAA,IAAC,MAAA,CAAI,UAAW,gBACb,SAAAqD,GACCrD,EAAAA,IAAC8E,EAAAA,OAAA,CACE,GAAGP,EACJ,WAAY,CACV,GAAGA,GAAA,YAAAA,EAAa,WAChB,UAAWtE,EAAAA,GACT,YACAJ,EAAA0E,GAAA,YAAAA,EAAa,aAAb,YAAA1E,EAAyB,SAAA,CAC3B,EAEF,UAAWI,EAAAA,GACT,2CACAsE,GAAA,YAAAA,EAAa,SAAA,EAEf,aAActB,EAAAA,cAAAA,IAAI7D,EAAQ,SAAU,EAAE,EACtC,eAAiB2F,GACfvB,GAAA,YAAAA,EAAgB,CAAE,GAAGpE,EAAQ,OAAA2F,EAAQ,KAAM,CAAA,EAAG,CAAA,EAItD,EACAxE,EAAAA,KAAC,MAAA,CACC,UACE,gEAGD,SAAA,CAAA+C,GACCtD,EAAAA,IAACgF,GAAAA,WAAA,CACE,GAAGZ,EACJ,QAASd,EACT,QAASQ,CAAA,CAAA,EAGZE,GAAgCL,GAC/BpD,EAAAA,KAAC0E,EAAAA,aAAA,CACC,SAAA,CAAAjF,EAAAA,IAACkF,EAAAA,oBAAA,CACC,QAAO,GACP,UAAW,OACV,GAAGb,GAAA,YAAAA,EAAwB,aAE5B,SAAArE,EAAAA,IAACQ,EAAAA,OAAA,CACC,QAAQ,YACR,KAAM,KACN,UAAW,0BAEV,UAAA6D,GAAA,YAAAA,EAAwB,QACvB9D,EAAAA,KAAAiC,EAAAA,SAAA,CACE,SAAA,CAAAxC,EAAAA,IAACmF,EAAAA,GAAA,EAAmB,EAAG,UACtB,OAAA,CAAK,UAAW,oBACd,SAAA3F,EAAE,mBAAmB,EACxB,QACC4F,EAAAA,GAAA,CAAA,CAAiB,CAAA,CAAA,CACpB,CAAA,CAAA,CAEJ,CAAA,EAEF7E,EAAAA,KAAC8E,EAAAA,oBAAA,CACC,MAAM,MACL,GAAGhB,GAAA,YAAAA,EAAwB,aAE5B,SAAA,CAAA9D,EAAAA,KAAC+E,EAAAA,iBAAA,CACC,UAAU,aACV,QAASV,GAET,SAAA,CAAA5E,EAAAA,IAACuF,EAAAA,UAAA,EAAU,EAAG,KACblB,GAAA,YAAAA,EAAwB,YAAa7E,EAAE,eAAe,CAAA,CAAA,CAAA,QAExDgG,EAAAA,sBAAA,EAAsB,EACtBd,EAAiB,IAAKnC,GAEnBvC,EAAAA,IAACyF,EAAAA,yBAAA,CAEC,UAAU,aACV,QAAS,CAAClD,EAAO,OACjB,gBAAkBxC,GAChB4E,EAAoBpC,EAAQ,CAACxC,CAAK,EAGnC,SAAAwC,EAAO,IAAA,EAPHA,EAAO,GAAA,CAUjB,CAAA,CAAA,CAAA,CACH,EACF,EAEDqB,GAAW5D,EAAAA,IAAC0F,GAAAA,QAAA,CAAS,GAAGxB,EAAa,QAAAN,CAAA,CAAkB,EACvDzE,GACCa,EAAAA,IAAC2F,EAAAA,cAAA,CACE,GAAGxB,EACJ,QAAAhF,EACA,OAAAC,EACA,SAAUyE,EACV,SAAWjE,GAAW,CACpB4D,GAAA,MAAAA,EAAgB,CAAE,GAAG5D,EAAQ,KAAM,IACnCiE,GAAA,MAAAA,EAAqBjE,EACvB,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,EACF,EAEDqE,GAAsB,CAAC9D,EAAAA,cAAAA,QAAQhB,CAAO,GACrCa,EAAAA,IAACf,GAAA,CACC,QAAAE,EACA,OAAAC,EACA,SAAWQ,GAAW,CACpB4D,GAAA,MAAAA,EAAgB,CAAE,GAAG5D,EAAQ,KAAM,IACnCiE,GAAA,MAAAA,EAAqBjE,EACvB,CAAA,CAAA,CACF,EAEJ,EAEAI,EAAAA,IAAC,MAAA,CAAI,UAAW,uCACb,SAAC0D,EAsBA1D,MAAC4F,GAAAA,OAAA,CAAA,CAAO,EArBR5F,EAAAA,IAACY,EAAA,CACE,GAAGrB,EACJ,OAAQ,CACN,MAAM6D,GAAA,YAAAA,EAAY,OAAQ,EAC1B,MAAOA,GAAA,YAAAA,EAAY,MACnB,GAAGhE,CAAA,EAEL,KAAM6D,EAAAA,cAAAA,IAAIG,EAAYK,EAAS,CAAA,CAAE,EACjC,OAAAzC,EACA,cAAeW,EACf,eAAAJ,EACA,QAASmD,EACT,YAAAvD,EACA,WAAAD,EACA,WAAAH,EACA,sBAAuByD,EACvB,kBAAmB,CAAC,CAAE,UAAAqB,EAAW,UAAAC,KAAgB,CAC/CtC,GAAA,MAAAA,EAAgB,CAAE,GAAGpE,EAAQ,UAAAyG,EAAW,UAAAC,GAC1C,CAAA,CAAA,EAKN,EACCvC,GACChD,EAAAA,KAAC,MAAA,CAAI,UAAU,mFACb,SAAA,CAAAP,EAAAA,IAAC,MAAA,CAAI,UAAU,UACb,SAAAA,EAAAA,IAAC+F,EAAAA,cAAA,CACC,cAAgBC,GACdxC,GAAA,YAAAA,EAAgB,CAAE,GAAGpE,EAAQ,MAAA4G,EAAO,KAAM,IAE5C,aAAc5C,GAAA,YAAAA,EAAY,KAAA,CAAA,EAE9B,EACApD,EAAAA,IAAC,MAAA,CAAI,UAAU,gCACZ,WAAE,iDAAkD,CACnD,cAAe2B,EAAa,OAC5B,OAAOyB,GAAA,YAAAA,EAAY,QAAS,CAAA,CAC7B,EACH,QACC,MAAA,CACC,SAAApD,EAAAA,IAACiG,EAAAA,aAAA,CACE,GAAG3B,EACJ,aAAe4B,GAAS1C,GAAA,YAAAA,EAAgB,CAAE,GAAGpE,EAAQ,KAAA8G,IACrD,YAAa9C,GAAA,YAAAA,EAAY,KACzB,WAAYA,GAAA,YAAAA,EAAY,UAAA,CAAA,CAC1B,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CAIR"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../src/components/filters/AppliedFilters.tsx","../../../src/components/datatable/MyTable.tsx","../../../src/components/datatable/DataTable.tsx"],"sourcesContent":["import { ButtonGroup } from 'dgz-ui';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { cn } from 'dgz-ui/utils';\nimport { isEmpty, omit } from 'lodash';\nimport { XIcon } from 'lucide-react';\nimport { memo, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { FilterInterface } from './FilterWrapper.tsx';\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface AppliedFiltersProps extends CardProps {\n /** Array of filter definitions to render. */\n filters?: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const AppliedFilters = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n className,\n ...props\n}: AppliedFiltersProps) {\n const { t } = useTranslation();\n\n const filterObject = useMemo(\n () =>\n Object.fromEntries(\n filters?.map((filter) => [\n filter.name,\n Object.fromEntries(\n filter.options?.map(({ label, value }) => [value, label]) || []\n ),\n ]) || []\n ),\n [filters]\n );\n\n return (\n <div {...props} className={cn('flex flex-wrap gap-2', className)}>\n {Object.entries(params || {})\n .filter(([key, value]) => !!filterObject?.[key] && !isEmpty(value))\n .map(([key, value]) =>\n Array.isArray(value) ? (\n <ButtonGroup key={key}>\n {value\n .filter((val) => filterObject?.[key]?.[val] && val)\n .map((val, index) => (\n <Button\n size={'sm'}\n key={index}\n onClick={() => {\n onFilter?.({\n ...params,\n [key]: value.filter((v) => v !== val),\n });\n }}\n >\n {t(String(filterObject?.[key]?.[val] || ''))} <XIcon />\n </Button>\n ))}\n </ButtonGroup>\n ) : (\n <Button\n size={'sm'}\n onClick={() => {\n onFilter?.(omit(params, key));\n }}\n >\n {t(String(filterObject?.[key]?.[value as string] || ''))}{' '}\n <XIcon />\n </Button>\n )\n )}\n </div>\n );\n});\n","import { Checkbox } from 'dgz-ui/form';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from 'dgz-ui/table';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport {\n ArrowDownWideNarrow,\n ArrowUpDown,\n ArrowUpWideNarrow,\n} from 'lucide-react';\nimport { type ComponentProps, useEffect } from 'react';\nimport { SortOrder } from '../../enums';\nimport { useDataTable, useSortable, type UseSortableProps } from '../../hooks';\nimport type { ColumnType } from '../../types';\nimport { Empty } from '../empty';\nimport { DEFAULT_LIMIT } from '../pagination/MyLimitSelect';\n\n/**\n * Props for the MyTable component.\n * @template TData - The type of data in the table.\n */\nexport interface MyTableProps<TData> extends ComponentProps<'table'> {\n /** Array of data rows to display. */\n rows?: TData[];\n /** Column definitions. */\n columns: ColumnType<TData>[];\n /** Callback when a row is clicked. */\n onRowClick?: (row: TData) => void;\n /** Whether to show row numbers. */\n hasNumbers?: boolean;\n /** Whether to show selection checkboxes. */\n hasCheckbox?: boolean;\n /** Unique key for each row. */\n rowKey: keyof TData;\n /** Current table parameters (page, limit, sort). */\n params?: Record<string, unknown>;\n /** Total number of items (optional, often used with pagination context). */\n total?: number;\n /** Array of currently selected item keys. */\n selectedItems?: TData[keyof TData][];\n /** Callback when selected items change. */\n onSelectedItemsChange?: (selectedItems: TData[keyof TData][]) => void;\n /** Callback when sort order changes. */\n onSortOrderChange?: (\n params: Omit<UseSortableProps<TData>, 'onSortOrderChange'>\n ) => void;\n /** Whether the header should stick to the top. */\n isStickyHeader?: true;\n}\n\n/**\n * MyTable renders a generic data table with optional numbering, selection checkboxes,\n * sortable columns and sticky header. It is a presentational component and delegates\n * sorting/selection state via hooks and callbacks.\n *\n * @template TData - The row data type.\n * @param props - Component props.\n * @returns React element containing the table.\n */\nexport const MyTable = <TData,>({\n rows = [],\n columns,\n onRowClick,\n rowKey,\n params = {\n page: 1,\n limit: DEFAULT_LIMIT,\n },\n hasNumbers = false,\n hasCheckbox = false,\n selectedItems,\n onSelectedItemsChange,\n onSortOrderChange,\n isStickyHeader,\n className,\n ...props\n}: MyTableProps<TData>) => {\n const { sortObject, handleSort } = useSortable<TData>({\n sortField: params?.sortField as keyof TData | undefined,\n sortOrder: params?.sortOrder as SortOrder | undefined,\n onSortOrderChange,\n });\n const {\n selectedRows,\n isRowSelected,\n isAllRowsSelected,\n handleSelectAllRows,\n handleSelectRow,\n } = useDataTable<TData>({ rows, defaultSelectedRows: selectedItems });\n\n useEffect(() => {\n if (\n JSON.stringify(selectedItems) !== JSON.stringify(selectedRows) &&\n selectedRows\n ) {\n onSelectedItemsChange?.(selectedRows);\n }\n }, [selectedRows, selectedItems, onSelectedItemsChange]);\n\n return (\n <Table {...props} className={cn('relative', className)}>\n <TableHeader\n className={cn('bg-bg', isStickyHeader && 'sticky top-0 z-1')}\n >\n <TableRow>\n {hasCheckbox && (\n <TableHead className={'w-12 p-3'}>\n <Checkbox\n className={'mt-1'}\n checked={isAllRowsSelected(rowKey)}\n onCheckedChange={(value) =>\n handleSelectAllRows(rowKey, !!value)\n }\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n {hasNumbers && <TableHead className={'w-12 p-2'}>#</TableHead>}\n {columns\n .filter((column) => !column.hidden)\n .map((column) => (\n <TableHead\n key={column.key}\n style={column.styles}\n className={cn('p-2', column.sortable && 'cursor-pointer')}\n onClick={() => column.sortable && handleSort(column.dataIndex)}\n >\n <div className={'flex items-center gap-2'}>\n {column.name}{' '}\n {column.sortable &&\n (sortObject?.sortField === column.key ? (\n <>\n {sortObject?.sortOrder === SortOrder.DESC && (\n <ArrowDownWideNarrow size={15} />\n )}\n {sortObject?.sortOrder === SortOrder.ASC && (\n <ArrowUpWideNarrow size={15} />\n )}\n </>\n ) : (\n <ArrowUpDown size={15} />\n ))}\n </div>\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody className={'[&>tr:nth-child(even)]:bg-bg-secondary'}>\n {rows.length ? (\n rows.map((row, index) => (\n <TableRow\n key={`${row[rowKey]}`}\n onClick={() => onRowClick?.(row)}\n className={cn(onRowClick && 'cursor-pointer')}\n data-state={isRowSelected(row[rowKey]) && 'selected'}\n >\n {hasCheckbox && (\n <TableCell\n className={'w-12 p-3'}\n onClick={(evt) => evt.stopPropagation()}\n >\n <Checkbox\n className={'mt-1'}\n checked={isRowSelected(row[rowKey])}\n onCheckedChange={(value) =>\n handleSelectRow(row[rowKey], !!value)\n }\n aria-label=\"Select row\"\n />\n </TableCell>\n )}\n {hasNumbers && (\n <TableCell className={'w-12 p-2'}>\n {((params.page as number) - 1) *\n ((params.limit || DEFAULT_LIMIT) as number) +\n index +\n 1}\n </TableCell>\n )}\n {columns\n .filter((column) => !column.hidden)\n .map((column) => (\n <TableCell\n className={'text-body-xs-medium max-w-xs p-2'}\n style={column.styles}\n key={`${index}-${column.key}`}\n >\n {column.render\n ? column.render(get(row, column.dataIndex), row)\n : get(row, column.dataIndex, '')}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={\n hasNumbers\n ? hasCheckbox\n ? columns.length + 2\n : columns.length + 1\n : columns.length\n }\n >\n <Empty />\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n );\n};\n","import { RiArrowDownSLine, RiLayoutColumnLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport {\n type DropdownContainerProps,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from 'dgz-ui/dropdown';\nimport { cn } from 'dgz-ui/utils';\nimport { get, isEmpty } from 'lodash';\nimport { RefreshCw } from 'lucide-react';\nimport { type ReactNode, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useColumns } from '../../hooks';\nimport type { ColumnType } from '../../types';\nimport { type ActionInterface, Actions, type ActionsProps } from '../actions';\nimport {\n ExportData,\n type ExportDataInterface,\n type ExportDataProps,\n} from '../export';\nimport {\n type FilterInterface,\n FilterWrapper,\n type FilterWrapperProps,\n Search,\n type SearchProps,\n} from '../filters';\nimport { AppliedFilters } from '../filters/AppliedFilters.tsx';\nimport { Loader } from '../loader';\nimport { MyLimitSelect, MyPagination } from '../pagination';\nimport type { MyPaginationProps } from '../pagination/MyPagination.tsx';\nimport { MyTable, type MyTableProps } from './MyTable';\n\n/**\n * Minimal pagination wrapper contract used by `DataTable`.\n *\n * Notes\n * - Only `page`, `limit`, and `totalPages` are required. Other fields are optional and\n * may be provided by your API for convenience.\n * - The actual rows array can be stored in any key, controlled via `dataKey` prop\n * (defaults to `\"docs\"`).\n */\nexport interface PaginationInterface<TData> {\n /** Array of rows for the current page. Used when `dataKey` is set to `\"docs\"`. */\n docs?: TData[];\n /** Zero-based index of the first item on the current page (if provided by API). */\n offset?: number;\n /** Page size (items per page). */\n limit: number;\n /** Total number of pages available. */\n totalPages: number;\n /** Total number of items across all pages (if available). */\n total?: number;\n /** Current page number (1-based). */\n page: number;\n /** Convenience counter for the first item index on the page (if provided). */\n pagingCounter?: number;\n /** Whether a previous page exists. */\n hasPrevPage?: boolean;\n /** Whether a next page exists. */\n hasNextPage?: boolean;\n /** Previous page number, if available. */\n prevPage?: number;\n /** Next page number, if available. */\n nextPage?: number;\n}\n\n/**\n * Props for the DataTable component.\n *\n * @template TData - Row data type.\n * @template TPaginationData - Pagination wrapper type.\n */\nexport interface DataTableProps<\n TData,\n TPaginationData extends PaginationInterface<TData>,\n> extends Omit<MyTableProps<TData>, 'rows'> {\n /** Pagination data source. */\n dataSource?: TPaginationData;\n /** Callback for parameter changes (pagination, sorting, filtering). */\n onParamChange?: (param: Record<string, unknown>) => void;\n /** Whether to enable pagination. */\n hasPagination?: true;\n /** Options for the export data dropdown. */\n exportOptions?: ExportDataInterface[];\n /** Whether to enable search functionality. */\n hasSearch?: true;\n /** Whether the table data is loading. */\n loading?: boolean;\n /** Array of filters to display. */\n filters?: FilterInterface[];\n /** Array of actions to display. */\n actions?: ActionInterface[];\n /** Callback for filter changes. */\n handleFilterChange?: (filters: Record<string, unknown>) => void;\n /** Unique key for the table, used for column persistence. */\n tableKey: string;\n /** The key in dataSource where the data array is located. Defaults to \"docs\". */\n dataKey?: keyof TPaginationData;\n /** Whether to show the columns visibility dropdown. */\n hasColumnsVisibilityDropdown?: true;\n /** Whether to show the columns visibility dropdown. */\n showAppliedFilters?: boolean;\n /** Callback when columns are updated (e.g., visibility toggled). */\n onColumnsUpdate?: (columns: ColumnType<TData>[]) => void;\n /** Whether the export action is loading. */\n exportLoading?: boolean;\n /** Props for the Actions component. */\n actionProps?: Partial<ActionsProps>;\n /** Props for the FilterWrapper component. */\n filterWrapperProps?: Partial<FilterWrapperProps>;\n /** Props for the ExportData component. */\n exportOptionsProps?: Partial<ExportDataProps>;\n searchProps?: Partial<SearchProps>;\n paginationProps?: Partial<MyPaginationProps>;\n /** Props for the columns visibility dropdown. */\n columnsVisibilityProps?: DropdownContainerProps & {\n title?: ReactNode;\n resetText?: ReactNode;\n };\n}\n\n/**\n * DataTable is a composable, high-level table that brings together search, filters,\n * column visibility management, header actions, exporting, and pagination.\n * It renders `MyTable` for rows and, when enabled, shows header controls and a footer with pagination.\n *\n * Generic Types\n * - `TData` — Row data shape (type of each item in the rows array).\n * - `TPaginationData` — Pagination wrapper type containing rows and pagination meta; defaults to\n * `PaginationInterface<TData>`.\n *\n * Key Behaviors\n * - Emits `onParamChange` when search text, filters, page, limit, or sort order change.\n * - Persists column visibility per `tableKey` via `useColumns` and informs parent with `onColumnsUpdate`.\n * - Renders header controls only when the related feature is enabled/has content.\n *\n * Props Overview\n * - `dataSource` — Paginated data source object that contains rows (see `dataKey`) and pagination metadata.\n * - `columns` — Column definitions passed to `MyTable`.\n * - `onRowClick` — Callback when a row is clicked.\n * - `rowKey` — Property name used as a unique row key.\n * - `hasNumbers` — Whether to show the row numbers column.\n * - `hasSearch` — Set to `true` to display the search input in the header.\n * - `exportOptions` — Export menu options shown by `ExportData` (see `ExportDataInterface[]`).\n * - `exportLoading` — When `true`, shows a spinner in the Export button to indicate an export action is in progress.\n * - `hasCheckbox` — Whether to show the selection checkbox column.\n * - `hasPagination` — Set to `true` to render the pagination footer.\n * - `isStickyHeader` — Whether to keep the table header sticky.\n * - `onParamChange` — Emits parameter changes for pagination/sorting/search/filters.\n * - `dataKey` — Key within `dataSource` that contains the row array. Defaults to `\"docs\"`.\n * - `loading` — If `true`, shows a loading state instead of the table rows.\n * - `tableKey` — Unique key for persisting column visibility state.\n * - `filters` — Filter configurations to render in the header.\n * - `actions` — Header actions independent of selected rows.\n * - `handleFilterChange` — Callback executed when filter values change.\n * - `params` — Current list parameters (pagination, sort, search, filters).\n * - `hasColumnsVisibilityDropdown` — Set to `true` to show the columns customize dropdown.\n * - `onColumnsUpdate` — Notifies parent whenever the internal columns state changes (after formatting/visibility).\n * - `actionProps` — Props passed to the `Actions` component.\n * - `filterWrapperProps` — Props passed to the `FilterWrapper` component.\n * - `exportOptionsProps` — Props passed to the `ExportData` component.\n * - `columnsVisibilityProps` — Props passed to the columns visibility dropdown.\n * - `onSelectedItemsChange` — Callback when selected rows change (requires `hasCheckbox`).\n *\n * Accessibility\n * - Header controls and dropdowns reuse shared primitives that include keyboard and ARIA support.\n *\n * Internationalization\n * - Text such as \"Export\", \"Customize columns\", and \"Reset columns\" are resolved via `react-i18next`.\n *\n * Usage Examples\n * 1) Minimal paginated table (uses default `dataKey = \"docs\"`)\n * ```tsx\n * type User = { id: string; name: string };\n * const data = { docs: [{ id: '1', name: 'Ada' }], page: 1, limit: 10, totalPages: 1 };\n *\n * <DataTable<User>\n * tableKey=\"users-table\"\n * columns={[{ key: 'name', name: 'Name' }]}\n * rowKey=\"id\"\n * dataSource={data}\n * hasPagination\n * />\n * ```\n *\n * 2) Custom `dataKey` and column visibility persistence\n * ```tsx\n * type Row = { id: number; title: string };\n * const payload = { items: [{ id: 1, title: 'Hello' }], page: 1, limit: 20, totalPages: 1 };\n *\n * <DataTable<Row>\n * tableKey=\"posts\"\n * columns={[{ key: 'title', name: 'Title' }]}\n * rowKey=\"id\"\n * dataSource={payload}\n * dataKey=\"items\"\n * hasColumnsVisibilityDropdown\n * />\n * ```\n *\n * 3) Responding to user interactions via `onParamChange`\n * ```tsx\n * const [params, setParams] = useState({ page: 1, limit: 10 });\n *\n * <DataTable\n * tableKey=\"logs\"\n * columns={[{ key: 'message', name: 'Message' }]}\n * rowKey=\"id\"\n * params={params}\n * onParamChange={setParams}\n * hasSearch\n * hasPagination\n * />\n * ```\n *\n * Notes and Best Practices\n * - Ensure `rowKey` points to a stable unique field in `TData` to avoid key collisions.\n * - When arrays like `exportOptions`, `filters`, or `actions` are empty, their sections are not rendered.\n * - Sorting emits `{ sortField, sortOrder }` through `onParamChange` when the user toggles a column sort.\n *\n * Returns\n * - React element that renders a complete data table experience.\n */\nexport const DataTable = <\n TData,\n TPaginationData extends PaginationInterface<TData> =\n PaginationInterface<TData>,\n>({\n dataSource,\n columns,\n onRowClick,\n rowKey,\n hasNumbers,\n hasSearch,\n exportOptions,\n hasCheckbox,\n hasPagination,\n isStickyHeader,\n onParamChange,\n dataKey = 'docs',\n loading,\n tableKey,\n filters,\n actions,\n handleFilterChange,\n params,\n exportLoading = false,\n onColumnsUpdate,\n hasColumnsVisibilityDropdown,\n showAppliedFilters = false,\n onSelectedItemsChange,\n actionProps,\n filterWrapperProps,\n exportOptionsProps,\n columnsVisibilityProps,\n paginationProps,\n searchProps,\n ...props\n}: DataTableProps<TData, TPaginationData>) => {\n const { t } = useTranslation();\n const [selectedRows, setSelectedRows] = useState<TData[keyof TData][]>([]);\n const { formattedColumns, handleColumnsChange, resetColumns } =\n useColumns<TData>({ key: tableKey, columns });\n\n useEffect(() => {\n onColumnsUpdate?.(formattedColumns);\n }, [formattedColumns, onColumnsUpdate]);\n\n useEffect(() => {\n onSelectedItemsChange?.(selectedRows);\n }, [selectedRows, onSelectedItemsChange]);\n\n return (\n <div\n className={\n 'border-border-alpha-light flex grow flex-col overflow-auto rounded-xl border shadow-xs'\n }\n >\n <div className={'space-y-4 p-4'}>\n {(hasSearch ||\n (hasColumnsVisibilityDropdown && tableKey) ||\n !isEmpty(exportOptions) ||\n !isEmpty(filters)) && (\n <div className=\"flex shrink-0 flex-col items-center justify-between gap-3 lg:flex-row\">\n <div className={'w-full shrink-0 grow lg:w-auto'}>\n {hasSearch && (\n <Search\n {...searchProps}\n inputProps={{\n ...searchProps?.inputProps,\n className: cn(\n 'h-8 grow',\n searchProps?.inputProps?.className\n ),\n }}\n className={cn(\n 'max-w-full lg:max-w-78 [&_button]:-top-1',\n searchProps?.className\n )}\n defaultValue={get(params, 'search', '') as string}\n onSearchChange={(search) =>\n onParamChange?.({ ...params, search, page: 1 })\n }\n />\n )}\n </div>\n <div\n className={\n 'flex w-full shrink items-center justify-end gap-3 lg:w-auto'\n }\n >\n {exportOptions && (\n <ExportData\n {...exportOptionsProps}\n options={exportOptions}\n loading={exportLoading}\n />\n )}\n {hasColumnsVisibilityDropdown && tableKey && (\n <DropdownMenu>\n <DropdownMenuTrigger\n asChild\n className={'grow'}\n {...columnsVisibilityProps?.triggerProps}\n >\n <Button\n variant=\"secondary\"\n size={'sm'}\n className={'ml-auto rounded-lg px-3'}\n >\n {columnsVisibilityProps?.title || (\n <>\n <RiLayoutColumnLine />{' '}\n <span className={'hidden md:inline!'}>\n {t('Customize columns')}\n </span>\n <RiArrowDownSLine />\n </>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n {...columnsVisibilityProps?.contentProps}\n >\n <DropdownMenuItem\n className=\"capitalize\"\n onClick={resetColumns}\n >\n <RefreshCw />{' '}\n {columnsVisibilityProps?.resetText || t('Reset columns')}\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n {formattedColumns.map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.key}\n className=\"capitalize\"\n checked={!column.hidden}\n onCheckedChange={(value) =>\n handleColumnsChange(column, !value)\n }\n >\n {column.name}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {actions && <Actions {...actionProps} actions={actions} />}\n {filters && (\n <FilterWrapper\n {...filterWrapperProps}\n filters={filters}\n params={params}\n onChange={handleFilterChange}\n onFilter={(filter) => {\n onParamChange?.({ ...filter, page: 1 });\n handleFilterChange?.(filter);\n }}\n />\n )}\n </div>\n </div>\n )}\n {showAppliedFilters && !isEmpty(filters) && (\n <AppliedFilters\n filters={filters}\n params={params}\n onFilter={(filter) => {\n onParamChange?.({ ...filter, page: 1 });\n handleFilterChange?.(filter);\n }}\n />\n )}\n </div>\n\n <div className={'flex flex-col overflow-auto border-y'}>\n {!loading ? (\n <MyTable<TData>\n {...props}\n params={{\n page: dataSource?.page || 1,\n limit: dataSource?.limit,\n ...params,\n }}\n rows={get(dataSource, dataKey, []) as TData[]}\n rowKey={rowKey}\n selectedItems={selectedRows}\n isStickyHeader={isStickyHeader}\n columns={formattedColumns}\n hasCheckbox={hasCheckbox}\n hasNumbers={hasNumbers}\n onRowClick={onRowClick}\n onSelectedItemsChange={setSelectedRows}\n onSortOrderChange={({ sortField, sortOrder }) => {\n onParamChange?.({ ...params, sortField, sortOrder });\n }}\n />\n ) : (\n <Loader />\n )}\n </div>\n {hasPagination && (\n <div className=\"flex shrink-0 flex-wrap items-center justify-center gap-3 p-4 lg:justify-between\">\n <div className=\"text-sm\">\n <MyLimitSelect\n onLimitChange={(limit) =>\n onParamChange?.({ ...params, limit, page: 1 })\n }\n defaultValue={dataSource?.limit}\n />\n </div>\n <div className=\"text-muted-foreground text-sm\">\n {t('{{selectedCount}} of {{total}} row(s) selected', {\n selectedCount: selectedRows.length,\n total: dataSource?.total || 0,\n })}\n </div>\n <div>\n <MyPagination\n {...paginationProps}\n onPageChange={(page) => onParamChange?.({ ...params, page })}\n currentPage={dataSource?.page}\n totalPages={dataSource?.totalPages}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"names":["AppliedFilters","memo","filters","params","onFilter","className","props","t","useTranslation","filterObject","useMemo","filter","_a","label","value","jsx","cn","key","isEmpty","ButtonGroup","val","index","jsxs","Button","v","XIcon","omit","MyTable","rows","columns","onRowClick","rowKey","DEFAULT_LIMIT","hasNumbers","hasCheckbox","selectedItems","onSelectedItemsChange","onSortOrderChange","isStickyHeader","sortObject","handleSort","useSortable","selectedRows","isRowSelected","isAllRowsSelected","handleSelectAllRows","handleSelectRow","useDataTable","useEffect","Table","TableHeader","TableRow","TableHead","Checkbox","column","Fragment","SortOrder","ArrowDownWideNarrow","ArrowUpWideNarrow","ArrowUpDown","TableBody","row","TableCell","evt","get","Empty","DataTable","dataSource","hasSearch","exportOptions","hasPagination","onParamChange","dataKey","loading","tableKey","actions","handleFilterChange","exportLoading","onColumnsUpdate","hasColumnsVisibilityDropdown","showAppliedFilters","actionProps","filterWrapperProps","exportOptionsProps","columnsVisibilityProps","paginationProps","searchProps","setSelectedRows","useState","formattedColumns","handleColumnsChange","resetColumns","useColumns","Search","search","ExportData","DropdownMenu","DropdownMenuTrigger","RiLayoutColumnLine","RiArrowDownSLine","DropdownMenuContent","DropdownMenuItem","RefreshCw","DropdownMenuSeparator","DropdownMenuCheckboxItem","Actions","FilterWrapper","Loader","sortField","sortOrder","MyLimitSelect","limit","MyPagination","page"],"mappings":"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"}
@@ -2,12 +2,12 @@ import { jsx as e, jsxs as N, Fragment as O } from "react/jsx-runtime";
2
2
  import { y as ee, f as te } from "../../chunks/index-E1NtSoNr.es.js";
3
3
  import { Button as q } from "dgz-ui/button";
4
4
  import { DropdownMenu as le, DropdownMenuTrigger as de, DropdownMenuContent as se, DropdownMenuItem as ie, DropdownMenuSeparator as fe, DropdownMenuCheckboxItem as re } from "dgz-ui/dropdown";
5
- import { cn as W } from "dgz-ui/utils";
5
+ import { cn as o } from "dgz-ui/utils";
6
6
  import { l as M } from "../../chunks/lodash-CRDOWzbs.es.js";
7
7
  import { XIcon as Z, ArrowDownWideNarrow as pe, ArrowUpWideNarrow as Ne, ArrowUpDown as ce, RefreshCw as xe } from "lucide-react";
8
- import { memo as me, useMemo as we, useEffect as Q, useState as ne } from "react";
8
+ import { memo as we, useMemo as me, useEffect as Q, useState as ge } from "react";
9
9
  import { useTranslation as b } from "react-i18next";
10
- import { u as ge, a as Ee, b as Te } from "../../chunks/useSortable-BXNk8Wth.es.js";
10
+ import { u as ne, a as Ee, b as Te } from "../../chunks/useSortable-BXNk8Wth.es.js";
11
11
  import { A as De } from "../../chunks/Actions-Du8iQ3WR.es.js";
12
12
  import { E as ke } from "../../chunks/ExportData-DQzwB_yW.es.js";
13
13
  import { S as ve, F as Ae } from "../../chunks/Search-CR54BX3a.es.js";
@@ -15,37 +15,37 @@ import { ButtonGroup as Me } from "dgz-ui";
15
15
  import { L as ze } from "../../chunks/Loader-zvzAi0F6.es.js";
16
16
  import { D as I, M as Le, a as Re } from "../../chunks/MyPagination-B0czoGZK.es.js";
17
17
  import { Checkbox as U } from "dgz-ui/form";
18
- import { Table as We, TableHeader as oe, TableRow as G, TableHead as X, TableBody as Be, TableCell as H } from "dgz-ui/table";
18
+ import { Table as oe, TableHeader as We, TableRow as G, TableHead as X, TableBody as Be, TableCell as H } from "dgz-ui/table";
19
19
  import { S as j } from "../../chunks/SortOrder-CwuehjY1.es.js";
20
20
  import { E as $e } from "../../chunks/Empty-BReVQKje.es.js";
21
- const ye = me(function({
22
- filters: m,
21
+ const ye = we(function({
22
+ filters: w,
23
23
  params: E,
24
24
  onFilter: c,
25
- className: w,
25
+ className: m,
26
26
  ...z
27
27
  }) {
28
- const { t: T } = b(), s = we(
28
+ const { t: T } = b(), s = me(
29
29
  () => Object.fromEntries(
30
- (m == null ? void 0 : m.map((i) => {
30
+ (w == null ? void 0 : w.map((i) => {
31
31
  var x;
32
32
  return [
33
33
  i.name,
34
34
  Object.fromEntries(
35
- ((x = i.options) == null ? void 0 : x.map(({ label: t, value: g }) => [g, t])) || []
35
+ ((x = i.options) == null ? void 0 : x.map(({ label: t, value: n }) => [n, t])) || []
36
36
  )
37
37
  ];
38
38
  })) || []
39
39
  ),
40
- [m]
40
+ [w]
41
41
  );
42
- return /* @__PURE__ */ e("div", { ...z, className: W("flex flex-wrap gap-2", w), children: Object.entries(E || {}).filter(([i, x]) => !!(s != null && s[i]) && !M.isEmpty(x)).map(
42
+ return /* @__PURE__ */ e("div", { ...z, className: o("flex flex-wrap gap-2", m), children: Object.entries(E || {}).filter(([i, x]) => !!(s != null && s[i]) && !M.isEmpty(x)).map(
43
43
  ([i, x]) => {
44
44
  var t;
45
- return Array.isArray(x) ? /* @__PURE__ */ e(Me, { children: x.filter((g) => {
45
+ return Array.isArray(x) ? /* @__PURE__ */ e(Me, { children: x.filter((n) => {
46
46
  var L;
47
- return ((L = s == null ? void 0 : s[i]) == null ? void 0 : L[g]) && g;
48
- }).map((g, L) => {
47
+ return ((L = s == null ? void 0 : s[i]) == null ? void 0 : L[n]) && n;
48
+ }).map((n, L) => {
49
49
  var p;
50
50
  return /* @__PURE__ */ N(
51
51
  q,
@@ -54,11 +54,11 @@ const ye = me(function({
54
54
  onClick: () => {
55
55
  c == null || c({
56
56
  ...E,
57
- [i]: x.filter((A) => A !== g)
57
+ [i]: x.filter((A) => A !== n)
58
58
  });
59
59
  },
60
60
  children: [
61
- T(String(((p = s == null ? void 0 : s[i]) == null ? void 0 : p[g]) || "")),
61
+ T(String(((p = s == null ? void 0 : s[i]) == null ? void 0 : p[n]) || "")),
62
62
  " ",
63
63
  /* @__PURE__ */ e(Z, {})
64
64
  ]
@@ -83,10 +83,10 @@ const ye = me(function({
83
83
  ) });
84
84
  }), He = ({
85
85
  rows: l = [],
86
- columns: m,
86
+ columns: w,
87
87
  onRowClick: E,
88
88
  rowKey: c,
89
- params: w = {
89
+ params: m = {
90
90
  page: 1,
91
91
  limit: I
92
92
  },
@@ -96,27 +96,27 @@ const ye = me(function({
96
96
  onSelectedItemsChange: i,
97
97
  onSortOrderChange: x,
98
98
  isStickyHeader: t,
99
- className: g,
99
+ className: n,
100
100
  ...L
101
101
  }) => {
102
- const { sortObject: p, handleSort: A } = ge({
103
- sortField: w == null ? void 0 : w.sortField,
104
- sortOrder: w == null ? void 0 : w.sortOrder,
102
+ const { sortObject: p, handleSort: A } = ne({
103
+ sortField: m == null ? void 0 : m.sortField,
104
+ sortOrder: m == null ? void 0 : m.sortOrder,
105
105
  onSortOrderChange: x
106
106
  }), {
107
107
  selectedRows: R,
108
108
  isRowSelected: D,
109
109
  isAllRowsSelected: k,
110
110
  handleSelectAllRows: J,
111
- handleSelectRow: o
111
+ handleSelectRow: W
112
112
  } = Ee({ rows: l, defaultSelectedRows: s });
113
113
  return Q(() => {
114
114
  JSON.stringify(s) !== JSON.stringify(R) && R && (i == null || i(R));
115
- }, [R, s, i]), /* @__PURE__ */ N(We, { ...L, className: W("relative", g), children: [
115
+ }, [R, s, i]), /* @__PURE__ */ N(oe, { ...L, className: o("relative", n), children: [
116
116
  /* @__PURE__ */ e(
117
- oe,
117
+ We,
118
118
  {
119
- className: W("bg-bg", t && "sticky top-0 z-1"),
119
+ className: o("bg-bg", t && "sticky top-0 z-1"),
120
120
  children: /* @__PURE__ */ N(G, { children: [
121
121
  T && /* @__PURE__ */ e(X, { className: "w-12 p-3", children: /* @__PURE__ */ e(
122
122
  U,
@@ -128,11 +128,11 @@ const ye = me(function({
128
128
  }
129
129
  ) }),
130
130
  z && /* @__PURE__ */ e(X, { className: "w-12 p-2", children: "#" }),
131
- m.filter((d) => !d.hidden).map((d) => /* @__PURE__ */ e(
131
+ w.filter((d) => !d.hidden).map((d) => /* @__PURE__ */ e(
132
132
  X,
133
133
  {
134
134
  style: d.styles,
135
- className: W("p-2", d.sortable && "cursor-pointer"),
135
+ className: o("p-2", d.sortable && "cursor-pointer"),
136
136
  onClick: () => d.sortable && A(d.dataIndex),
137
137
  children: /* @__PURE__ */ N("div", { className: "flex items-center gap-2", children: [
138
138
  d.name,
@@ -152,7 +152,7 @@ const ye = me(function({
152
152
  G,
153
153
  {
154
154
  onClick: () => E == null ? void 0 : E(d),
155
- className: W(E && "cursor-pointer"),
155
+ className: o(E && "cursor-pointer"),
156
156
  "data-state": D(d[c]) && "selected",
157
157
  children: [
158
158
  T && /* @__PURE__ */ e(
@@ -165,14 +165,14 @@ const ye = me(function({
165
165
  {
166
166
  className: "mt-1",
167
167
  checked: D(d[c]),
168
- onCheckedChange: (r) => o(d[c], !!r),
168
+ onCheckedChange: (r) => W(d[c], !!r),
169
169
  "aria-label": "Select row"
170
170
  }
171
171
  )
172
172
  }
173
173
  ),
174
- z && /* @__PURE__ */ e(H, { className: "w-12 p-2", children: (w.page - 1) * (w.limit || I) + B + 1 }),
175
- m.filter((r) => !r.hidden).map((r) => /* @__PURE__ */ e(
174
+ z && /* @__PURE__ */ e(H, { className: "w-12 p-2", children: (m.page - 1) * (m.limit || I) + B + 1 }),
175
+ w.filter((r) => !r.hidden).map((r) => /* @__PURE__ */ e(
176
176
  H,
177
177
  {
178
178
  className: "text-body-xs-medium max-w-xs p-2",
@@ -187,24 +187,24 @@ const ye = me(function({
187
187
  )) : /* @__PURE__ */ e(G, { children: /* @__PURE__ */ e(
188
188
  H,
189
189
  {
190
- colSpan: z ? T ? m.length + 2 : m.length + 1 : m.length,
190
+ colSpan: z ? T ? w.length + 2 : w.length + 1 : w.length,
191
191
  children: /* @__PURE__ */ e($e, {})
192
192
  }
193
193
  ) }) })
194
194
  ] });
195
195
  }, Ce = ({
196
196
  dataSource: l,
197
- columns: m,
197
+ columns: w,
198
198
  onRowClick: E,
199
199
  rowKey: c,
200
- hasNumbers: w,
200
+ hasNumbers: m,
201
201
  hasSearch: z,
202
202
  exportOptions: T,
203
203
  hasCheckbox: s,
204
204
  hasPagination: i,
205
205
  isStickyHeader: x,
206
206
  onParamChange: t,
207
- dataKey: g = "docs",
207
+ dataKey: n = "docs",
208
208
  loading: L,
209
209
  tableKey: p,
210
210
  filters: A,
@@ -212,23 +212,23 @@ const ye = me(function({
212
212
  handleFilterChange: D,
213
213
  params: k,
214
214
  exportLoading: J = !1,
215
- onColumnsUpdate: o,
215
+ onColumnsUpdate: W,
216
216
  hasColumnsVisibilityDropdown: d,
217
217
  showAppliedFilters: B = !1,
218
218
  onSelectedItemsChange: r,
219
219
  actionProps: K,
220
220
  filterWrapperProps: F,
221
221
  exportOptionsProps: S,
222
- columnsVisibilityProps: n,
222
+ columnsVisibilityProps: g,
223
223
  paginationProps: u,
224
224
  searchProps: v,
225
225
  ...V
226
226
  }) => {
227
227
  var Y;
228
- const { t: _ } = b(), [$, a] = ne([]), { formattedColumns: y, handleColumnsChange: C, resetColumns: P } = Te({ key: p, columns: m });
228
+ const { t: _ } = b(), [$, a] = ge([]), { formattedColumns: y, handleColumnsChange: C, resetColumns: P } = Te({ key: p, columns: w });
229
229
  return Q(() => {
230
- o == null || o(y);
231
- }, [y, o]), Q(() => {
230
+ W == null || W(y);
231
+ }, [y, W]), Q(() => {
232
232
  r == null || r($);
233
233
  }, [$, r]), /* @__PURE__ */ N(
234
234
  "div",
@@ -237,18 +237,18 @@ const ye = me(function({
237
237
  children: [
238
238
  /* @__PURE__ */ N("div", { className: "space-y-4 p-4", children: [
239
239
  (z || d && p || !M.isEmpty(T) || !M.isEmpty(A)) && /* @__PURE__ */ N("div", { className: "flex shrink-0 flex-col items-center justify-between gap-3 lg:flex-row", children: [
240
- /* @__PURE__ */ e("div", { className: "w-full shrink", children: z && /* @__PURE__ */ e(
240
+ /* @__PURE__ */ e("div", { className: "w-full shrink-0 grow lg:w-auto", children: z && /* @__PURE__ */ e(
241
241
  ve,
242
242
  {
243
243
  ...v,
244
244
  inputProps: {
245
245
  ...v == null ? void 0 : v.inputProps,
246
- className: W(
246
+ className: o(
247
247
  "h-8 grow",
248
248
  (Y = v == null ? void 0 : v.inputProps) == null ? void 0 : Y.className
249
249
  )
250
250
  },
251
- className: W(
251
+ className: o(
252
252
  "max-w-full lg:max-w-78 [&_button]:-top-1",
253
253
  v == null ? void 0 : v.className
254
254
  ),
@@ -259,7 +259,7 @@ const ye = me(function({
259
259
  /* @__PURE__ */ N(
260
260
  "div",
261
261
  {
262
- className: "flex w-full shrink-0 items-center justify-end gap-3 lg:w-auto",
262
+ className: "flex w-full shrink items-center justify-end gap-3 lg:w-auto",
263
263
  children: [
264
264
  T && /* @__PURE__ */ e(
265
265
  ke,
@@ -275,14 +275,14 @@ const ye = me(function({
275
275
  {
276
276
  asChild: !0,
277
277
  className: "grow",
278
- ...n == null ? void 0 : n.triggerProps,
278
+ ...g == null ? void 0 : g.triggerProps,
279
279
  children: /* @__PURE__ */ e(
280
280
  q,
281
281
  {
282
282
  variant: "secondary",
283
283
  size: "sm",
284
284
  className: "ml-auto rounded-lg px-3",
285
- children: (n == null ? void 0 : n.title) || /* @__PURE__ */ N(O, { children: [
285
+ children: (g == null ? void 0 : g.title) || /* @__PURE__ */ N(O, { children: [
286
286
  /* @__PURE__ */ e(ee, {}),
287
287
  " ",
288
288
  /* @__PURE__ */ e("span", { className: "hidden md:inline!", children: _("Customize columns") }),
@@ -296,7 +296,7 @@ const ye = me(function({
296
296
  se,
297
297
  {
298
298
  align: "end",
299
- ...n == null ? void 0 : n.contentProps,
299
+ ...g == null ? void 0 : g.contentProps,
300
300
  children: [
301
301
  /* @__PURE__ */ N(
302
302
  ie,
@@ -306,7 +306,7 @@ const ye = me(function({
306
306
  children: [
307
307
  /* @__PURE__ */ e(xe, {}),
308
308
  " ",
309
- (n == null ? void 0 : n.resetText) || _("Reset columns")
309
+ (g == null ? void 0 : g.resetText) || _("Reset columns")
310
310
  ]
311
311
  }
312
312
  ),
@@ -362,13 +362,13 @@ const ye = me(function({
362
362
  limit: l == null ? void 0 : l.limit,
363
363
  ...k
364
364
  },
365
- rows: M.get(l, g, []),
365
+ rows: M.get(l, n, []),
366
366
  rowKey: c,
367
367
  selectedItems: $,
368
368
  isStickyHeader: x,
369
369
  columns: y,
370
370
  hasCheckbox: s,
371
- hasNumbers: w,
371
+ hasNumbers: m,
372
372
  onRowClick: E,
373
373
  onSelectedItemsChange: a,
374
374
  onSortOrderChange: ({ sortField: f, sortOrder: h }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../src/components/filters/AppliedFilters.tsx","../../../src/components/datatable/MyTable.tsx","../../../src/components/datatable/DataTable.tsx"],"sourcesContent":["import { ButtonGroup } from 'dgz-ui';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { cn } from 'dgz-ui/utils';\nimport { isEmpty, omit } from 'lodash';\nimport { XIcon } from 'lucide-react';\nimport { memo, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { FilterInterface } from './FilterWrapper.tsx';\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface AppliedFiltersProps extends CardProps {\n /** Array of filter definitions to render. */\n filters?: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const AppliedFilters = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n className,\n ...props\n}: AppliedFiltersProps) {\n const { t } = useTranslation();\n\n const filterObject = useMemo(\n () =>\n Object.fromEntries(\n filters?.map((filter) => [\n filter.name,\n Object.fromEntries(\n filter.options?.map(({ label, value }) => [value, label]) || []\n ),\n ]) || []\n ),\n [filters]\n );\n\n return (\n <div {...props} className={cn('flex flex-wrap gap-2', className)}>\n {Object.entries(params || {})\n .filter(([key, value]) => !!filterObject?.[key] && !isEmpty(value))\n .map(([key, value]) =>\n Array.isArray(value) ? (\n <ButtonGroup key={key}>\n {value\n .filter((val) => filterObject?.[key]?.[val] && val)\n .map((val, index) => (\n <Button\n size={'sm'}\n key={index}\n onClick={() => {\n onFilter?.({\n ...params,\n [key]: value.filter((v) => v !== val),\n });\n }}\n >\n {t(String(filterObject?.[key]?.[val] || ''))} <XIcon />\n </Button>\n ))}\n </ButtonGroup>\n ) : (\n <Button\n size={'sm'}\n onClick={() => {\n onFilter?.(omit(params, key));\n }}\n >\n {t(String(filterObject?.[key]?.[value as string] || ''))}{' '}\n <XIcon />\n </Button>\n )\n )}\n </div>\n );\n});\n","import { Checkbox } from 'dgz-ui/form';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from 'dgz-ui/table';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport {\n ArrowDownWideNarrow,\n ArrowUpDown,\n ArrowUpWideNarrow,\n} from 'lucide-react';\nimport { type ComponentProps, useEffect } from 'react';\nimport { SortOrder } from '../../enums';\nimport { useDataTable, useSortable, type UseSortableProps } from '../../hooks';\nimport type { ColumnType } from '../../types';\nimport { Empty } from '../empty';\nimport { DEFAULT_LIMIT } from '../pagination/MyLimitSelect';\n\n/**\n * Props for the MyTable component.\n * @template TData - The type of data in the table.\n */\nexport interface MyTableProps<TData> extends ComponentProps<'table'> {\n /** Array of data rows to display. */\n rows?: TData[];\n /** Column definitions. */\n columns: ColumnType<TData>[];\n /** Callback when a row is clicked. */\n onRowClick?: (row: TData) => void;\n /** Whether to show row numbers. */\n hasNumbers?: boolean;\n /** Whether to show selection checkboxes. */\n hasCheckbox?: boolean;\n /** Unique key for each row. */\n rowKey: keyof TData;\n /** Current table parameters (page, limit, sort). */\n params?: Record<string, unknown>;\n /** Total number of items (optional, often used with pagination context). */\n total?: number;\n /** Array of currently selected item keys. */\n selectedItems?: TData[keyof TData][];\n /** Callback when selected items change. */\n onSelectedItemsChange?: (selectedItems: TData[keyof TData][]) => void;\n /** Callback when sort order changes. */\n onSortOrderChange?: (\n params: Omit<UseSortableProps<TData>, 'onSortOrderChange'>\n ) => void;\n /** Whether the header should stick to the top. */\n isStickyHeader?: true;\n}\n\n/**\n * MyTable renders a generic data table with optional numbering, selection checkboxes,\n * sortable columns and sticky header. It is a presentational component and delegates\n * sorting/selection state via hooks and callbacks.\n *\n * @template TData - The row data type.\n * @param props - Component props.\n * @returns React element containing the table.\n */\nexport const MyTable = <TData,>({\n rows = [],\n columns,\n onRowClick,\n rowKey,\n params = {\n page: 1,\n limit: DEFAULT_LIMIT,\n },\n hasNumbers = false,\n hasCheckbox = false,\n selectedItems,\n onSelectedItemsChange,\n onSortOrderChange,\n isStickyHeader,\n className,\n ...props\n}: MyTableProps<TData>) => {\n const { sortObject, handleSort } = useSortable<TData>({\n sortField: params?.sortField as keyof TData | undefined,\n sortOrder: params?.sortOrder as SortOrder | undefined,\n onSortOrderChange,\n });\n const {\n selectedRows,\n isRowSelected,\n isAllRowsSelected,\n handleSelectAllRows,\n handleSelectRow,\n } = useDataTable<TData>({ rows, defaultSelectedRows: selectedItems });\n\n useEffect(() => {\n if (\n JSON.stringify(selectedItems) !== JSON.stringify(selectedRows) &&\n selectedRows\n ) {\n onSelectedItemsChange?.(selectedRows);\n }\n }, [selectedRows, selectedItems, onSelectedItemsChange]);\n\n return (\n <Table {...props} className={cn('relative', className)}>\n <TableHeader\n className={cn('bg-bg', isStickyHeader && 'sticky top-0 z-1')}\n >\n <TableRow>\n {hasCheckbox && (\n <TableHead className={'w-12 p-3'}>\n <Checkbox\n className={'mt-1'}\n checked={isAllRowsSelected(rowKey)}\n onCheckedChange={(value) =>\n handleSelectAllRows(rowKey, !!value)\n }\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n {hasNumbers && <TableHead className={'w-12 p-2'}>#</TableHead>}\n {columns\n .filter((column) => !column.hidden)\n .map((column) => (\n <TableHead\n key={column.key}\n style={column.styles}\n className={cn('p-2', column.sortable && 'cursor-pointer')}\n onClick={() => column.sortable && handleSort(column.dataIndex)}\n >\n <div className={'flex items-center gap-2'}>\n {column.name}{' '}\n {column.sortable &&\n (sortObject?.sortField === column.key ? (\n <>\n {sortObject?.sortOrder === SortOrder.DESC && (\n <ArrowDownWideNarrow size={15} />\n )}\n {sortObject?.sortOrder === SortOrder.ASC && (\n <ArrowUpWideNarrow size={15} />\n )}\n </>\n ) : (\n <ArrowUpDown size={15} />\n ))}\n </div>\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody className={'[&>tr:nth-child(even)]:bg-bg-secondary'}>\n {rows.length ? (\n rows.map((row, index) => (\n <TableRow\n key={`${row[rowKey]}`}\n onClick={() => onRowClick?.(row)}\n className={cn(onRowClick && 'cursor-pointer')}\n data-state={isRowSelected(row[rowKey]) && 'selected'}\n >\n {hasCheckbox && (\n <TableCell\n className={'w-12 p-3'}\n onClick={(evt) => evt.stopPropagation()}\n >\n <Checkbox\n className={'mt-1'}\n checked={isRowSelected(row[rowKey])}\n onCheckedChange={(value) =>\n handleSelectRow(row[rowKey], !!value)\n }\n aria-label=\"Select row\"\n />\n </TableCell>\n )}\n {hasNumbers && (\n <TableCell className={'w-12 p-2'}>\n {((params.page as number) - 1) *\n ((params.limit || DEFAULT_LIMIT) as number) +\n index +\n 1}\n </TableCell>\n )}\n {columns\n .filter((column) => !column.hidden)\n .map((column) => (\n <TableCell\n className={'text-body-xs-medium max-w-xs p-2'}\n style={column.styles}\n key={`${index}-${column.key}`}\n >\n {column.render\n ? column.render(get(row, column.dataIndex), row)\n : get(row, column.dataIndex, '')}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={\n hasNumbers\n ? hasCheckbox\n ? columns.length + 2\n : columns.length + 1\n : columns.length\n }\n >\n <Empty />\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n );\n};\n","import { RiArrowDownSLine, RiLayoutColumnLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport {\n type DropdownContainerProps,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from 'dgz-ui/dropdown';\nimport { cn } from 'dgz-ui/utils';\nimport { get, isEmpty } from 'lodash';\nimport { RefreshCw } from 'lucide-react';\nimport { type ReactNode, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useColumns } from '../../hooks';\nimport type { ColumnType } from '../../types';\nimport { type ActionInterface, Actions, type ActionsProps } from '../actions';\nimport {\n ExportData,\n type ExportDataInterface,\n type ExportDataProps,\n} from '../export';\nimport {\n type FilterInterface,\n FilterWrapper,\n type FilterWrapperProps,\n Search,\n type SearchProps,\n} from '../filters';\nimport { AppliedFilters } from '../filters/AppliedFilters.tsx';\nimport { Loader } from '../loader';\nimport { MyLimitSelect, MyPagination } from '../pagination';\nimport type { MyPaginationProps } from '../pagination/MyPagination.tsx';\nimport { MyTable, type MyTableProps } from './MyTable';\n\n/**\n * Minimal pagination wrapper contract used by `DataTable`.\n *\n * Notes\n * - Only `page`, `limit`, and `totalPages` are required. Other fields are optional and\n * may be provided by your API for convenience.\n * - The actual rows array can be stored in any key, controlled via `dataKey` prop\n * (defaults to `\"docs\"`).\n */\nexport interface PaginationInterface<TData> {\n /** Array of rows for the current page. Used when `dataKey` is set to `\"docs\"`. */\n docs?: TData[];\n /** Zero-based index of the first item on the current page (if provided by API). */\n offset?: number;\n /** Page size (items per page). */\n limit: number;\n /** Total number of pages available. */\n totalPages: number;\n /** Total number of items across all pages (if available). */\n total?: number;\n /** Current page number (1-based). */\n page: number;\n /** Convenience counter for the first item index on the page (if provided). */\n pagingCounter?: number;\n /** Whether a previous page exists. */\n hasPrevPage?: boolean;\n /** Whether a next page exists. */\n hasNextPage?: boolean;\n /** Previous page number, if available. */\n prevPage?: number;\n /** Next page number, if available. */\n nextPage?: number;\n}\n\n/**\n * Props for the DataTable component.\n *\n * @template TData - Row data type.\n * @template TPaginationData - Pagination wrapper type.\n */\nexport interface DataTableProps<\n TData,\n TPaginationData extends PaginationInterface<TData>,\n> extends Omit<MyTableProps<TData>, 'rows'> {\n /** Pagination data source. */\n dataSource?: TPaginationData;\n /** Callback for parameter changes (pagination, sorting, filtering). */\n onParamChange?: (param: Record<string, unknown>) => void;\n /** Whether to enable pagination. */\n hasPagination?: true;\n /** Options for the export data dropdown. */\n exportOptions?: ExportDataInterface[];\n /** Whether to enable search functionality. */\n hasSearch?: true;\n /** Whether the table data is loading. */\n loading?: boolean;\n /** Array of filters to display. */\n filters?: FilterInterface[];\n /** Array of actions to display. */\n actions?: ActionInterface[];\n /** Callback for filter changes. */\n handleFilterChange?: (filters: Record<string, unknown>) => void;\n /** Unique key for the table, used for column persistence. */\n tableKey: string;\n /** The key in dataSource where the data array is located. Defaults to \"docs\". */\n dataKey?: keyof TPaginationData;\n /** Whether to show the columns visibility dropdown. */\n hasColumnsVisibilityDropdown?: true;\n /** Whether to show the columns visibility dropdown. */\n showAppliedFilters?: boolean;\n /** Callback when columns are updated (e.g., visibility toggled). */\n onColumnsUpdate?: (columns: ColumnType<TData>[]) => void;\n /** Whether the export action is loading. */\n exportLoading?: boolean;\n /** Props for the Actions component. */\n actionProps?: Partial<ActionsProps>;\n /** Props for the FilterWrapper component. */\n filterWrapperProps?: Partial<FilterWrapperProps>;\n /** Props for the ExportData component. */\n exportOptionsProps?: Partial<ExportDataProps>;\n searchProps?: Partial<SearchProps>;\n paginationProps?: Partial<MyPaginationProps>;\n /** Props for the columns visibility dropdown. */\n columnsVisibilityProps?: DropdownContainerProps & {\n title?: ReactNode;\n resetText?: ReactNode;\n };\n}\n\n/**\n * DataTable is a composable, high-level table that brings together search, filters,\n * column visibility management, header actions, exporting, and pagination.\n * It renders `MyTable` for rows and, when enabled, shows header controls and a footer with pagination.\n *\n * Generic Types\n * - `TData` — Row data shape (type of each item in the rows array).\n * - `TPaginationData` — Pagination wrapper type containing rows and pagination meta; defaults to\n * `PaginationInterface<TData>`.\n *\n * Key Behaviors\n * - Emits `onParamChange` when search text, filters, page, limit, or sort order change.\n * - Persists column visibility per `tableKey` via `useColumns` and informs parent with `onColumnsUpdate`.\n * - Renders header controls only when the related feature is enabled/has content.\n *\n * Props Overview\n * - `dataSource` — Paginated data source object that contains rows (see `dataKey`) and pagination metadata.\n * - `columns` — Column definitions passed to `MyTable`.\n * - `onRowClick` — Callback when a row is clicked.\n * - `rowKey` — Property name used as a unique row key.\n * - `hasNumbers` — Whether to show the row numbers column.\n * - `hasSearch` — Set to `true` to display the search input in the header.\n * - `exportOptions` — Export menu options shown by `ExportData` (see `ExportDataInterface[]`).\n * - `exportLoading` — When `true`, shows a spinner in the Export button to indicate an export action is in progress.\n * - `hasCheckbox` — Whether to show the selection checkbox column.\n * - `hasPagination` — Set to `true` to render the pagination footer.\n * - `isStickyHeader` — Whether to keep the table header sticky.\n * - `onParamChange` — Emits parameter changes for pagination/sorting/search/filters.\n * - `dataKey` — Key within `dataSource` that contains the row array. Defaults to `\"docs\"`.\n * - `loading` — If `true`, shows a loading state instead of the table rows.\n * - `tableKey` — Unique key for persisting column visibility state.\n * - `filters` — Filter configurations to render in the header.\n * - `actions` — Header actions independent of selected rows.\n * - `handleFilterChange` — Callback executed when filter values change.\n * - `params` — Current list parameters (pagination, sort, search, filters).\n * - `hasColumnsVisibilityDropdown` — Set to `true` to show the columns customize dropdown.\n * - `onColumnsUpdate` — Notifies parent whenever the internal columns state changes (after formatting/visibility).\n * - `actionProps` — Props passed to the `Actions` component.\n * - `filterWrapperProps` — Props passed to the `FilterWrapper` component.\n * - `exportOptionsProps` — Props passed to the `ExportData` component.\n * - `columnsVisibilityProps` — Props passed to the columns visibility dropdown.\n * - `onSelectedItemsChange` — Callback when selected rows change (requires `hasCheckbox`).\n *\n * Accessibility\n * - Header controls and dropdowns reuse shared primitives that include keyboard and ARIA support.\n *\n * Internationalization\n * - Text such as \"Export\", \"Customize columns\", and \"Reset columns\" are resolved via `react-i18next`.\n *\n * Usage Examples\n * 1) Minimal paginated table (uses default `dataKey = \"docs\"`)\n * ```tsx\n * type User = { id: string; name: string };\n * const data = { docs: [{ id: '1', name: 'Ada' }], page: 1, limit: 10, totalPages: 1 };\n *\n * <DataTable<User>\n * tableKey=\"users-table\"\n * columns={[{ key: 'name', name: 'Name' }]}\n * rowKey=\"id\"\n * dataSource={data}\n * hasPagination\n * />\n * ```\n *\n * 2) Custom `dataKey` and column visibility persistence\n * ```tsx\n * type Row = { id: number; title: string };\n * const payload = { items: [{ id: 1, title: 'Hello' }], page: 1, limit: 20, totalPages: 1 };\n *\n * <DataTable<Row>\n * tableKey=\"posts\"\n * columns={[{ key: 'title', name: 'Title' }]}\n * rowKey=\"id\"\n * dataSource={payload}\n * dataKey=\"items\"\n * hasColumnsVisibilityDropdown\n * />\n * ```\n *\n * 3) Responding to user interactions via `onParamChange`\n * ```tsx\n * const [params, setParams] = useState({ page: 1, limit: 10 });\n *\n * <DataTable\n * tableKey=\"logs\"\n * columns={[{ key: 'message', name: 'Message' }]}\n * rowKey=\"id\"\n * params={params}\n * onParamChange={setParams}\n * hasSearch\n * hasPagination\n * />\n * ```\n *\n * Notes and Best Practices\n * - Ensure `rowKey` points to a stable unique field in `TData` to avoid key collisions.\n * - When arrays like `exportOptions`, `filters`, or `actions` are empty, their sections are not rendered.\n * - Sorting emits `{ sortField, sortOrder }` through `onParamChange` when the user toggles a column sort.\n *\n * Returns\n * - React element that renders a complete data table experience.\n */\nexport const DataTable = <\n TData,\n TPaginationData extends PaginationInterface<TData> =\n PaginationInterface<TData>,\n>({\n dataSource,\n columns,\n onRowClick,\n rowKey,\n hasNumbers,\n hasSearch,\n exportOptions,\n hasCheckbox,\n hasPagination,\n isStickyHeader,\n onParamChange,\n dataKey = 'docs',\n loading,\n tableKey,\n filters,\n actions,\n handleFilterChange,\n params,\n exportLoading = false,\n onColumnsUpdate,\n hasColumnsVisibilityDropdown,\n showAppliedFilters = false,\n onSelectedItemsChange,\n actionProps,\n filterWrapperProps,\n exportOptionsProps,\n columnsVisibilityProps,\n paginationProps,\n searchProps,\n ...props\n}: DataTableProps<TData, TPaginationData>) => {\n const { t } = useTranslation();\n const [selectedRows, setSelectedRows] = useState<TData[keyof TData][]>([]);\n const { formattedColumns, handleColumnsChange, resetColumns } =\n useColumns<TData>({ key: tableKey, columns });\n\n useEffect(() => {\n onColumnsUpdate?.(formattedColumns);\n }, [formattedColumns, onColumnsUpdate]);\n\n useEffect(() => {\n onSelectedItemsChange?.(selectedRows);\n }, [selectedRows, onSelectedItemsChange]);\n\n return (\n <div\n className={\n 'border-border-alpha-light flex grow flex-col overflow-auto rounded-xl border shadow-xs'\n }\n >\n <div className={'space-y-4 p-4'}>\n {(hasSearch ||\n (hasColumnsVisibilityDropdown && tableKey) ||\n !isEmpty(exportOptions) ||\n !isEmpty(filters)) && (\n <div className=\"flex shrink-0 flex-col items-center justify-between gap-3 lg:flex-row\">\n <div className={'w-full shrink'}>\n {hasSearch && (\n <Search\n {...searchProps}\n inputProps={{\n ...searchProps?.inputProps,\n className: cn(\n 'h-8 grow',\n searchProps?.inputProps?.className\n ),\n }}\n className={cn(\n 'max-w-full lg:max-w-78 [&_button]:-top-1',\n searchProps?.className\n )}\n defaultValue={get(params, 'search', '') as string}\n onSearchChange={(search) =>\n onParamChange?.({ ...params, search, page: 1 })\n }\n />\n )}\n </div>\n <div\n className={\n 'flex w-full shrink-0 items-center justify-end gap-3 lg:w-auto'\n }\n >\n {exportOptions && (\n <ExportData\n {...exportOptionsProps}\n options={exportOptions}\n loading={exportLoading}\n />\n )}\n {hasColumnsVisibilityDropdown && tableKey && (\n <DropdownMenu>\n <DropdownMenuTrigger\n asChild\n className={'grow'}\n {...columnsVisibilityProps?.triggerProps}\n >\n <Button\n variant=\"secondary\"\n size={'sm'}\n className={'ml-auto rounded-lg px-3'}\n >\n {columnsVisibilityProps?.title || (\n <>\n <RiLayoutColumnLine />{' '}\n <span className={'hidden md:inline!'}>\n {t('Customize columns')}\n </span>\n <RiArrowDownSLine />\n </>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n {...columnsVisibilityProps?.contentProps}\n >\n <DropdownMenuItem\n className=\"capitalize\"\n onClick={resetColumns}\n >\n <RefreshCw />{' '}\n {columnsVisibilityProps?.resetText || t('Reset columns')}\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n {formattedColumns.map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.key}\n className=\"capitalize\"\n checked={!column.hidden}\n onCheckedChange={(value) =>\n handleColumnsChange(column, !value)\n }\n >\n {column.name}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {actions && <Actions {...actionProps} actions={actions} />}\n {filters && (\n <FilterWrapper\n {...filterWrapperProps}\n filters={filters}\n params={params}\n onChange={handleFilterChange}\n onFilter={(filter) => {\n onParamChange?.({ ...filter, page: 1 });\n handleFilterChange?.(filter);\n }}\n />\n )}\n </div>\n </div>\n )}\n {showAppliedFilters && !isEmpty(filters) && (\n <AppliedFilters\n filters={filters}\n params={params}\n onFilter={(filter) => {\n onParamChange?.({ ...filter, page: 1 });\n handleFilterChange?.(filter);\n }}\n />\n )}\n </div>\n\n <div className={'flex flex-col overflow-auto border-y'}>\n {!loading ? (\n <MyTable<TData>\n {...props}\n params={{\n page: dataSource?.page || 1,\n limit: dataSource?.limit,\n ...params,\n }}\n rows={get(dataSource, dataKey, []) as TData[]}\n rowKey={rowKey}\n selectedItems={selectedRows}\n isStickyHeader={isStickyHeader}\n columns={formattedColumns}\n hasCheckbox={hasCheckbox}\n hasNumbers={hasNumbers}\n onRowClick={onRowClick}\n onSelectedItemsChange={setSelectedRows}\n onSortOrderChange={({ sortField, sortOrder }) => {\n onParamChange?.({ ...params, sortField, sortOrder });\n }}\n />\n ) : (\n <Loader />\n )}\n </div>\n {hasPagination && (\n <div className=\"flex shrink-0 flex-wrap items-center justify-center gap-3 p-4 lg:justify-between\">\n <div className=\"text-sm\">\n <MyLimitSelect\n onLimitChange={(limit) =>\n onParamChange?.({ ...params, limit, page: 1 })\n }\n defaultValue={dataSource?.limit}\n />\n </div>\n <div className=\"text-muted-foreground text-sm\">\n {t('{{selectedCount}} of {{total}} row(s) selected', {\n selectedCount: selectedRows.length,\n total: dataSource?.total || 0,\n })}\n </div>\n <div>\n <MyPagination\n {...paginationProps}\n onPageChange={(page) => onParamChange?.({ ...params, page })}\n currentPage={dataSource?.page}\n totalPages={dataSource?.totalPages}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"names":["AppliedFilters","memo","filters","params","onFilter","className","props","t","useTranslation","filterObject","useMemo","filter","_a","label","value","jsx","cn","key","isEmpty","ButtonGroup","val","index","jsxs","Button","v","XIcon","omit","MyTable","rows","columns","onRowClick","rowKey","DEFAULT_LIMIT","hasNumbers","hasCheckbox","selectedItems","onSelectedItemsChange","onSortOrderChange","isStickyHeader","sortObject","handleSort","useSortable","selectedRows","isRowSelected","isAllRowsSelected","handleSelectAllRows","handleSelectRow","useDataTable","useEffect","Table","TableHeader","TableRow","TableHead","Checkbox","column","Fragment","SortOrder","ArrowDownWideNarrow","ArrowUpWideNarrow","ArrowUpDown","TableBody","row","TableCell","evt","get","Empty","DataTable","dataSource","hasSearch","exportOptions","hasPagination","onParamChange","dataKey","loading","tableKey","actions","handleFilterChange","exportLoading","onColumnsUpdate","hasColumnsVisibilityDropdown","showAppliedFilters","actionProps","filterWrapperProps","exportOptionsProps","columnsVisibilityProps","paginationProps","searchProps","setSelectedRows","useState","formattedColumns","handleColumnsChange","resetColumns","useColumns","Search","search","ExportData","DropdownMenu","DropdownMenuTrigger","RiLayoutColumnLine","RiArrowDownSLine","DropdownMenuContent","DropdownMenuItem","RefreshCw","DropdownMenuSeparator","DropdownMenuCheckboxItem","Actions","FilterWrapper","Loader","sortField","sortOrder","MyLimitSelect","limit","MyPagination","page"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../src/components/filters/AppliedFilters.tsx","../../../src/components/datatable/MyTable.tsx","../../../src/components/datatable/DataTable.tsx"],"sourcesContent":["import { ButtonGroup } from 'dgz-ui';\nimport { Button } from 'dgz-ui/button';\nimport type { CardProps } from 'dgz-ui/card';\nimport { cn } from 'dgz-ui/utils';\nimport { isEmpty, omit } from 'lodash';\nimport { XIcon } from 'lucide-react';\nimport { memo, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { FilterInterface } from './FilterWrapper.tsx';\n\n/**\n * Props for the FilterWrapper component.\n */\nexport interface AppliedFiltersProps extends CardProps {\n /** Array of filter definitions to render. */\n filters?: FilterInterface[];\n /** Current active parameters/filters. */\n params?: Record<string, unknown>;\n /** Callback fired when filters are applied. */\n onFilter?: (filters: Record<string, unknown>) => void;\n}\n\n/**\n * FilterWrapper shows a popover with a dynamic list of field filters and emits selected filter values.\n *\n * @param props.filters - Array of filter definitions to render.\n * @param props.params - Current params used to detect active filters.\n * @param props.onFilter - Callback fired when user applies filters.\n * @param props.onCancel - Callback fired on cancel.\n * @param props.onChange - Callback fired whenever filter form values change.\n */\nexport const AppliedFilters = memo(function FilterWrapper({\n filters,\n params,\n onFilter,\n className,\n ...props\n}: AppliedFiltersProps) {\n const { t } = useTranslation();\n\n const filterObject = useMemo(\n () =>\n Object.fromEntries(\n filters?.map((filter) => [\n filter.name,\n Object.fromEntries(\n filter.options?.map(({ label, value }) => [value, label]) || []\n ),\n ]) || []\n ),\n [filters]\n );\n\n return (\n <div {...props} className={cn('flex flex-wrap gap-2', className)}>\n {Object.entries(params || {})\n .filter(([key, value]) => !!filterObject?.[key] && !isEmpty(value))\n .map(([key, value]) =>\n Array.isArray(value) ? (\n <ButtonGroup key={key}>\n {value\n .filter((val) => filterObject?.[key]?.[val] && val)\n .map((val, index) => (\n <Button\n size={'sm'}\n key={index}\n onClick={() => {\n onFilter?.({\n ...params,\n [key]: value.filter((v) => v !== val),\n });\n }}\n >\n {t(String(filterObject?.[key]?.[val] || ''))} <XIcon />\n </Button>\n ))}\n </ButtonGroup>\n ) : (\n <Button\n size={'sm'}\n onClick={() => {\n onFilter?.(omit(params, key));\n }}\n >\n {t(String(filterObject?.[key]?.[value as string] || ''))}{' '}\n <XIcon />\n </Button>\n )\n )}\n </div>\n );\n});\n","import { Checkbox } from 'dgz-ui/form';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from 'dgz-ui/table';\nimport { cn } from 'dgz-ui/utils';\nimport { get } from 'lodash';\nimport {\n ArrowDownWideNarrow,\n ArrowUpDown,\n ArrowUpWideNarrow,\n} from 'lucide-react';\nimport { type ComponentProps, useEffect } from 'react';\nimport { SortOrder } from '../../enums';\nimport { useDataTable, useSortable, type UseSortableProps } from '../../hooks';\nimport type { ColumnType } from '../../types';\nimport { Empty } from '../empty';\nimport { DEFAULT_LIMIT } from '../pagination/MyLimitSelect';\n\n/**\n * Props for the MyTable component.\n * @template TData - The type of data in the table.\n */\nexport interface MyTableProps<TData> extends ComponentProps<'table'> {\n /** Array of data rows to display. */\n rows?: TData[];\n /** Column definitions. */\n columns: ColumnType<TData>[];\n /** Callback when a row is clicked. */\n onRowClick?: (row: TData) => void;\n /** Whether to show row numbers. */\n hasNumbers?: boolean;\n /** Whether to show selection checkboxes. */\n hasCheckbox?: boolean;\n /** Unique key for each row. */\n rowKey: keyof TData;\n /** Current table parameters (page, limit, sort). */\n params?: Record<string, unknown>;\n /** Total number of items (optional, often used with pagination context). */\n total?: number;\n /** Array of currently selected item keys. */\n selectedItems?: TData[keyof TData][];\n /** Callback when selected items change. */\n onSelectedItemsChange?: (selectedItems: TData[keyof TData][]) => void;\n /** Callback when sort order changes. */\n onSortOrderChange?: (\n params: Omit<UseSortableProps<TData>, 'onSortOrderChange'>\n ) => void;\n /** Whether the header should stick to the top. */\n isStickyHeader?: true;\n}\n\n/**\n * MyTable renders a generic data table with optional numbering, selection checkboxes,\n * sortable columns and sticky header. It is a presentational component and delegates\n * sorting/selection state via hooks and callbacks.\n *\n * @template TData - The row data type.\n * @param props - Component props.\n * @returns React element containing the table.\n */\nexport const MyTable = <TData,>({\n rows = [],\n columns,\n onRowClick,\n rowKey,\n params = {\n page: 1,\n limit: DEFAULT_LIMIT,\n },\n hasNumbers = false,\n hasCheckbox = false,\n selectedItems,\n onSelectedItemsChange,\n onSortOrderChange,\n isStickyHeader,\n className,\n ...props\n}: MyTableProps<TData>) => {\n const { sortObject, handleSort } = useSortable<TData>({\n sortField: params?.sortField as keyof TData | undefined,\n sortOrder: params?.sortOrder as SortOrder | undefined,\n onSortOrderChange,\n });\n const {\n selectedRows,\n isRowSelected,\n isAllRowsSelected,\n handleSelectAllRows,\n handleSelectRow,\n } = useDataTable<TData>({ rows, defaultSelectedRows: selectedItems });\n\n useEffect(() => {\n if (\n JSON.stringify(selectedItems) !== JSON.stringify(selectedRows) &&\n selectedRows\n ) {\n onSelectedItemsChange?.(selectedRows);\n }\n }, [selectedRows, selectedItems, onSelectedItemsChange]);\n\n return (\n <Table {...props} className={cn('relative', className)}>\n <TableHeader\n className={cn('bg-bg', isStickyHeader && 'sticky top-0 z-1')}\n >\n <TableRow>\n {hasCheckbox && (\n <TableHead className={'w-12 p-3'}>\n <Checkbox\n className={'mt-1'}\n checked={isAllRowsSelected(rowKey)}\n onCheckedChange={(value) =>\n handleSelectAllRows(rowKey, !!value)\n }\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n {hasNumbers && <TableHead className={'w-12 p-2'}>#</TableHead>}\n {columns\n .filter((column) => !column.hidden)\n .map((column) => (\n <TableHead\n key={column.key}\n style={column.styles}\n className={cn('p-2', column.sortable && 'cursor-pointer')}\n onClick={() => column.sortable && handleSort(column.dataIndex)}\n >\n <div className={'flex items-center gap-2'}>\n {column.name}{' '}\n {column.sortable &&\n (sortObject?.sortField === column.key ? (\n <>\n {sortObject?.sortOrder === SortOrder.DESC && (\n <ArrowDownWideNarrow size={15} />\n )}\n {sortObject?.sortOrder === SortOrder.ASC && (\n <ArrowUpWideNarrow size={15} />\n )}\n </>\n ) : (\n <ArrowUpDown size={15} />\n ))}\n </div>\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody className={'[&>tr:nth-child(even)]:bg-bg-secondary'}>\n {rows.length ? (\n rows.map((row, index) => (\n <TableRow\n key={`${row[rowKey]}`}\n onClick={() => onRowClick?.(row)}\n className={cn(onRowClick && 'cursor-pointer')}\n data-state={isRowSelected(row[rowKey]) && 'selected'}\n >\n {hasCheckbox && (\n <TableCell\n className={'w-12 p-3'}\n onClick={(evt) => evt.stopPropagation()}\n >\n <Checkbox\n className={'mt-1'}\n checked={isRowSelected(row[rowKey])}\n onCheckedChange={(value) =>\n handleSelectRow(row[rowKey], !!value)\n }\n aria-label=\"Select row\"\n />\n </TableCell>\n )}\n {hasNumbers && (\n <TableCell className={'w-12 p-2'}>\n {((params.page as number) - 1) *\n ((params.limit || DEFAULT_LIMIT) as number) +\n index +\n 1}\n </TableCell>\n )}\n {columns\n .filter((column) => !column.hidden)\n .map((column) => (\n <TableCell\n className={'text-body-xs-medium max-w-xs p-2'}\n style={column.styles}\n key={`${index}-${column.key}`}\n >\n {column.render\n ? column.render(get(row, column.dataIndex), row)\n : get(row, column.dataIndex, '')}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={\n hasNumbers\n ? hasCheckbox\n ? columns.length + 2\n : columns.length + 1\n : columns.length\n }\n >\n <Empty />\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n );\n};\n","import { RiArrowDownSLine, RiLayoutColumnLine } from '@remixicon/react';\nimport { Button } from 'dgz-ui/button';\nimport {\n type DropdownContainerProps,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from 'dgz-ui/dropdown';\nimport { cn } from 'dgz-ui/utils';\nimport { get, isEmpty } from 'lodash';\nimport { RefreshCw } from 'lucide-react';\nimport { type ReactNode, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useColumns } from '../../hooks';\nimport type { ColumnType } from '../../types';\nimport { type ActionInterface, Actions, type ActionsProps } from '../actions';\nimport {\n ExportData,\n type ExportDataInterface,\n type ExportDataProps,\n} from '../export';\nimport {\n type FilterInterface,\n FilterWrapper,\n type FilterWrapperProps,\n Search,\n type SearchProps,\n} from '../filters';\nimport { AppliedFilters } from '../filters/AppliedFilters.tsx';\nimport { Loader } from '../loader';\nimport { MyLimitSelect, MyPagination } from '../pagination';\nimport type { MyPaginationProps } from '../pagination/MyPagination.tsx';\nimport { MyTable, type MyTableProps } from './MyTable';\n\n/**\n * Minimal pagination wrapper contract used by `DataTable`.\n *\n * Notes\n * - Only `page`, `limit`, and `totalPages` are required. Other fields are optional and\n * may be provided by your API for convenience.\n * - The actual rows array can be stored in any key, controlled via `dataKey` prop\n * (defaults to `\"docs\"`).\n */\nexport interface PaginationInterface<TData> {\n /** Array of rows for the current page. Used when `dataKey` is set to `\"docs\"`. */\n docs?: TData[];\n /** Zero-based index of the first item on the current page (if provided by API). */\n offset?: number;\n /** Page size (items per page). */\n limit: number;\n /** Total number of pages available. */\n totalPages: number;\n /** Total number of items across all pages (if available). */\n total?: number;\n /** Current page number (1-based). */\n page: number;\n /** Convenience counter for the first item index on the page (if provided). */\n pagingCounter?: number;\n /** Whether a previous page exists. */\n hasPrevPage?: boolean;\n /** Whether a next page exists. */\n hasNextPage?: boolean;\n /** Previous page number, if available. */\n prevPage?: number;\n /** Next page number, if available. */\n nextPage?: number;\n}\n\n/**\n * Props for the DataTable component.\n *\n * @template TData - Row data type.\n * @template TPaginationData - Pagination wrapper type.\n */\nexport interface DataTableProps<\n TData,\n TPaginationData extends PaginationInterface<TData>,\n> extends Omit<MyTableProps<TData>, 'rows'> {\n /** Pagination data source. */\n dataSource?: TPaginationData;\n /** Callback for parameter changes (pagination, sorting, filtering). */\n onParamChange?: (param: Record<string, unknown>) => void;\n /** Whether to enable pagination. */\n hasPagination?: true;\n /** Options for the export data dropdown. */\n exportOptions?: ExportDataInterface[];\n /** Whether to enable search functionality. */\n hasSearch?: true;\n /** Whether the table data is loading. */\n loading?: boolean;\n /** Array of filters to display. */\n filters?: FilterInterface[];\n /** Array of actions to display. */\n actions?: ActionInterface[];\n /** Callback for filter changes. */\n handleFilterChange?: (filters: Record<string, unknown>) => void;\n /** Unique key for the table, used for column persistence. */\n tableKey: string;\n /** The key in dataSource where the data array is located. Defaults to \"docs\". */\n dataKey?: keyof TPaginationData;\n /** Whether to show the columns visibility dropdown. */\n hasColumnsVisibilityDropdown?: true;\n /** Whether to show the columns visibility dropdown. */\n showAppliedFilters?: boolean;\n /** Callback when columns are updated (e.g., visibility toggled). */\n onColumnsUpdate?: (columns: ColumnType<TData>[]) => void;\n /** Whether the export action is loading. */\n exportLoading?: boolean;\n /** Props for the Actions component. */\n actionProps?: Partial<ActionsProps>;\n /** Props for the FilterWrapper component. */\n filterWrapperProps?: Partial<FilterWrapperProps>;\n /** Props for the ExportData component. */\n exportOptionsProps?: Partial<ExportDataProps>;\n searchProps?: Partial<SearchProps>;\n paginationProps?: Partial<MyPaginationProps>;\n /** Props for the columns visibility dropdown. */\n columnsVisibilityProps?: DropdownContainerProps & {\n title?: ReactNode;\n resetText?: ReactNode;\n };\n}\n\n/**\n * DataTable is a composable, high-level table that brings together search, filters,\n * column visibility management, header actions, exporting, and pagination.\n * It renders `MyTable` for rows and, when enabled, shows header controls and a footer with pagination.\n *\n * Generic Types\n * - `TData` — Row data shape (type of each item in the rows array).\n * - `TPaginationData` — Pagination wrapper type containing rows and pagination meta; defaults to\n * `PaginationInterface<TData>`.\n *\n * Key Behaviors\n * - Emits `onParamChange` when search text, filters, page, limit, or sort order change.\n * - Persists column visibility per `tableKey` via `useColumns` and informs parent with `onColumnsUpdate`.\n * - Renders header controls only when the related feature is enabled/has content.\n *\n * Props Overview\n * - `dataSource` — Paginated data source object that contains rows (see `dataKey`) and pagination metadata.\n * - `columns` — Column definitions passed to `MyTable`.\n * - `onRowClick` — Callback when a row is clicked.\n * - `rowKey` — Property name used as a unique row key.\n * - `hasNumbers` — Whether to show the row numbers column.\n * - `hasSearch` — Set to `true` to display the search input in the header.\n * - `exportOptions` — Export menu options shown by `ExportData` (see `ExportDataInterface[]`).\n * - `exportLoading` — When `true`, shows a spinner in the Export button to indicate an export action is in progress.\n * - `hasCheckbox` — Whether to show the selection checkbox column.\n * - `hasPagination` — Set to `true` to render the pagination footer.\n * - `isStickyHeader` — Whether to keep the table header sticky.\n * - `onParamChange` — Emits parameter changes for pagination/sorting/search/filters.\n * - `dataKey` — Key within `dataSource` that contains the row array. Defaults to `\"docs\"`.\n * - `loading` — If `true`, shows a loading state instead of the table rows.\n * - `tableKey` — Unique key for persisting column visibility state.\n * - `filters` — Filter configurations to render in the header.\n * - `actions` — Header actions independent of selected rows.\n * - `handleFilterChange` — Callback executed when filter values change.\n * - `params` — Current list parameters (pagination, sort, search, filters).\n * - `hasColumnsVisibilityDropdown` — Set to `true` to show the columns customize dropdown.\n * - `onColumnsUpdate` — Notifies parent whenever the internal columns state changes (after formatting/visibility).\n * - `actionProps` — Props passed to the `Actions` component.\n * - `filterWrapperProps` — Props passed to the `FilterWrapper` component.\n * - `exportOptionsProps` — Props passed to the `ExportData` component.\n * - `columnsVisibilityProps` — Props passed to the columns visibility dropdown.\n * - `onSelectedItemsChange` — Callback when selected rows change (requires `hasCheckbox`).\n *\n * Accessibility\n * - Header controls and dropdowns reuse shared primitives that include keyboard and ARIA support.\n *\n * Internationalization\n * - Text such as \"Export\", \"Customize columns\", and \"Reset columns\" are resolved via `react-i18next`.\n *\n * Usage Examples\n * 1) Minimal paginated table (uses default `dataKey = \"docs\"`)\n * ```tsx\n * type User = { id: string; name: string };\n * const data = { docs: [{ id: '1', name: 'Ada' }], page: 1, limit: 10, totalPages: 1 };\n *\n * <DataTable<User>\n * tableKey=\"users-table\"\n * columns={[{ key: 'name', name: 'Name' }]}\n * rowKey=\"id\"\n * dataSource={data}\n * hasPagination\n * />\n * ```\n *\n * 2) Custom `dataKey` and column visibility persistence\n * ```tsx\n * type Row = { id: number; title: string };\n * const payload = { items: [{ id: 1, title: 'Hello' }], page: 1, limit: 20, totalPages: 1 };\n *\n * <DataTable<Row>\n * tableKey=\"posts\"\n * columns={[{ key: 'title', name: 'Title' }]}\n * rowKey=\"id\"\n * dataSource={payload}\n * dataKey=\"items\"\n * hasColumnsVisibilityDropdown\n * />\n * ```\n *\n * 3) Responding to user interactions via `onParamChange`\n * ```tsx\n * const [params, setParams] = useState({ page: 1, limit: 10 });\n *\n * <DataTable\n * tableKey=\"logs\"\n * columns={[{ key: 'message', name: 'Message' }]}\n * rowKey=\"id\"\n * params={params}\n * onParamChange={setParams}\n * hasSearch\n * hasPagination\n * />\n * ```\n *\n * Notes and Best Practices\n * - Ensure `rowKey` points to a stable unique field in `TData` to avoid key collisions.\n * - When arrays like `exportOptions`, `filters`, or `actions` are empty, their sections are not rendered.\n * - Sorting emits `{ sortField, sortOrder }` through `onParamChange` when the user toggles a column sort.\n *\n * Returns\n * - React element that renders a complete data table experience.\n */\nexport const DataTable = <\n TData,\n TPaginationData extends PaginationInterface<TData> =\n PaginationInterface<TData>,\n>({\n dataSource,\n columns,\n onRowClick,\n rowKey,\n hasNumbers,\n hasSearch,\n exportOptions,\n hasCheckbox,\n hasPagination,\n isStickyHeader,\n onParamChange,\n dataKey = 'docs',\n loading,\n tableKey,\n filters,\n actions,\n handleFilterChange,\n params,\n exportLoading = false,\n onColumnsUpdate,\n hasColumnsVisibilityDropdown,\n showAppliedFilters = false,\n onSelectedItemsChange,\n actionProps,\n filterWrapperProps,\n exportOptionsProps,\n columnsVisibilityProps,\n paginationProps,\n searchProps,\n ...props\n}: DataTableProps<TData, TPaginationData>) => {\n const { t } = useTranslation();\n const [selectedRows, setSelectedRows] = useState<TData[keyof TData][]>([]);\n const { formattedColumns, handleColumnsChange, resetColumns } =\n useColumns<TData>({ key: tableKey, columns });\n\n useEffect(() => {\n onColumnsUpdate?.(formattedColumns);\n }, [formattedColumns, onColumnsUpdate]);\n\n useEffect(() => {\n onSelectedItemsChange?.(selectedRows);\n }, [selectedRows, onSelectedItemsChange]);\n\n return (\n <div\n className={\n 'border-border-alpha-light flex grow flex-col overflow-auto rounded-xl border shadow-xs'\n }\n >\n <div className={'space-y-4 p-4'}>\n {(hasSearch ||\n (hasColumnsVisibilityDropdown && tableKey) ||\n !isEmpty(exportOptions) ||\n !isEmpty(filters)) && (\n <div className=\"flex shrink-0 flex-col items-center justify-between gap-3 lg:flex-row\">\n <div className={'w-full shrink-0 grow lg:w-auto'}>\n {hasSearch && (\n <Search\n {...searchProps}\n inputProps={{\n ...searchProps?.inputProps,\n className: cn(\n 'h-8 grow',\n searchProps?.inputProps?.className\n ),\n }}\n className={cn(\n 'max-w-full lg:max-w-78 [&_button]:-top-1',\n searchProps?.className\n )}\n defaultValue={get(params, 'search', '') as string}\n onSearchChange={(search) =>\n onParamChange?.({ ...params, search, page: 1 })\n }\n />\n )}\n </div>\n <div\n className={\n 'flex w-full shrink items-center justify-end gap-3 lg:w-auto'\n }\n >\n {exportOptions && (\n <ExportData\n {...exportOptionsProps}\n options={exportOptions}\n loading={exportLoading}\n />\n )}\n {hasColumnsVisibilityDropdown && tableKey && (\n <DropdownMenu>\n <DropdownMenuTrigger\n asChild\n className={'grow'}\n {...columnsVisibilityProps?.triggerProps}\n >\n <Button\n variant=\"secondary\"\n size={'sm'}\n className={'ml-auto rounded-lg px-3'}\n >\n {columnsVisibilityProps?.title || (\n <>\n <RiLayoutColumnLine />{' '}\n <span className={'hidden md:inline!'}>\n {t('Customize columns')}\n </span>\n <RiArrowDownSLine />\n </>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n {...columnsVisibilityProps?.contentProps}\n >\n <DropdownMenuItem\n className=\"capitalize\"\n onClick={resetColumns}\n >\n <RefreshCw />{' '}\n {columnsVisibilityProps?.resetText || t('Reset columns')}\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n {formattedColumns.map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.key}\n className=\"capitalize\"\n checked={!column.hidden}\n onCheckedChange={(value) =>\n handleColumnsChange(column, !value)\n }\n >\n {column.name}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {actions && <Actions {...actionProps} actions={actions} />}\n {filters && (\n <FilterWrapper\n {...filterWrapperProps}\n filters={filters}\n params={params}\n onChange={handleFilterChange}\n onFilter={(filter) => {\n onParamChange?.({ ...filter, page: 1 });\n handleFilterChange?.(filter);\n }}\n />\n )}\n </div>\n </div>\n )}\n {showAppliedFilters && !isEmpty(filters) && (\n <AppliedFilters\n filters={filters}\n params={params}\n onFilter={(filter) => {\n onParamChange?.({ ...filter, page: 1 });\n handleFilterChange?.(filter);\n }}\n />\n )}\n </div>\n\n <div className={'flex flex-col overflow-auto border-y'}>\n {!loading ? (\n <MyTable<TData>\n {...props}\n params={{\n page: dataSource?.page || 1,\n limit: dataSource?.limit,\n ...params,\n }}\n rows={get(dataSource, dataKey, []) as TData[]}\n rowKey={rowKey}\n selectedItems={selectedRows}\n isStickyHeader={isStickyHeader}\n columns={formattedColumns}\n hasCheckbox={hasCheckbox}\n hasNumbers={hasNumbers}\n onRowClick={onRowClick}\n onSelectedItemsChange={setSelectedRows}\n onSortOrderChange={({ sortField, sortOrder }) => {\n onParamChange?.({ ...params, sortField, sortOrder });\n }}\n />\n ) : (\n <Loader />\n )}\n </div>\n {hasPagination && (\n <div className=\"flex shrink-0 flex-wrap items-center justify-center gap-3 p-4 lg:justify-between\">\n <div className=\"text-sm\">\n <MyLimitSelect\n onLimitChange={(limit) =>\n onParamChange?.({ ...params, limit, page: 1 })\n }\n defaultValue={dataSource?.limit}\n />\n </div>\n <div className=\"text-muted-foreground text-sm\">\n {t('{{selectedCount}} of {{total}} row(s) selected', {\n selectedCount: selectedRows.length,\n total: dataSource?.total || 0,\n })}\n </div>\n <div>\n <MyPagination\n {...paginationProps}\n onPageChange={(page) => onParamChange?.({ ...params, page })}\n currentPage={dataSource?.page}\n totalPages={dataSource?.totalPages}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"names":["AppliedFilters","memo","filters","params","onFilter","className","props","t","useTranslation","filterObject","useMemo","filter","_a","label","value","jsx","cn","key","isEmpty","ButtonGroup","val","index","jsxs","Button","v","XIcon","omit","MyTable","rows","columns","onRowClick","rowKey","DEFAULT_LIMIT","hasNumbers","hasCheckbox","selectedItems","onSelectedItemsChange","onSortOrderChange","isStickyHeader","sortObject","handleSort","useSortable","selectedRows","isRowSelected","isAllRowsSelected","handleSelectAllRows","handleSelectRow","useDataTable","useEffect","Table","TableHeader","TableRow","TableHead","Checkbox","column","Fragment","SortOrder","ArrowDownWideNarrow","ArrowUpWideNarrow","ArrowUpDown","TableBody","row","TableCell","evt","get","Empty","DataTable","dataSource","hasSearch","exportOptions","hasPagination","onParamChange","dataKey","loading","tableKey","actions","handleFilterChange","exportLoading","onColumnsUpdate","hasColumnsVisibilityDropdown","showAppliedFilters","actionProps","filterWrapperProps","exportOptionsProps","columnsVisibilityProps","paginationProps","searchProps","setSelectedRows","useState","formattedColumns","handleColumnsChange","resetColumns","useColumns","Search","search","ExportData","DropdownMenu","DropdownMenuTrigger","RiLayoutColumnLine","RiArrowDownSLine","DropdownMenuContent","DropdownMenuItem","RefreshCw","DropdownMenuSeparator","DropdownMenuCheckboxItem","Actions","FilterWrapper","Loader","sortField","sortOrder","MyLimitSelect","limit","MyPagination","page"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dgz-ui-shared",
3
- "version": "1.2.28",
3
+ "version": "1.2.29",
4
4
  "description": "Custom ui library using React.js, Shadcn/ui, TailwindCSS, Typescript, dgz-ui library",
5
5
  "keywords": [
6
6
  "dgz-ui",