dgz-ui-shared 1.2.44 → 1.2.46

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"),J=require("../../chunks/index-ClQFzqcq.cjs.js"),_=require("dgz-ui/button"),z=require("dgz-ui/dropdown"),v=require("dgz-ui/utils"),y=require("../../chunks/MyInput-mL2G5h2s.cjs.js"),u=require("../../chunks/useSortable-BZKLpg8U.cjs.js"),b=require("lucide-react"),L=require("react"),Z=require("react-i18next"),S=require("../../chunks/Actions-bpMDyl5M.cjs.js"),V=require("../../chunks/ExportData-DJE0jOHc.cjs.js"),Q=require("../../chunks/Search-kbkeTeSI.cjs.js"),C=require("dgz-ui"),P=require("../../chunks/Loader-D_jX_Wgx.cjs.js"),B=require("../../chunks/MyPagination-CnF3468f.cjs.js"),U=require("dgz-ui/form"),T=require("dgz-ui/table"),Y=require("../../chunks/SortOrder-81BrXp3i.cjs.js"),ee=require("../../chunks/Empty-BYOOFAab.cjs.js"),se=L.memo(function({filters:g,params:p,onFilter:j,className:N,...A}){const{t:s}=Z.useTranslation(),n=L.useMemo(()=>Object.fromEntries((g==null?void 0:g.map(r=>{var i;return[r.name,Object.fromEntries(((i=r.options)==null?void 0:i.map(({label:E,value:x})=>[x,E]))||[])]}))||[]),[g]),D=L.useMemo(()=>Object.entries(p||{}).filter(([r,i])=>!!(n!=null&&n[r])&&!u.isEmpty(i)),[n,p]);return!u.isEmpty(D)&&e.jsx("div",{...A,className:v.cn("flex flex-wrap gap-2",N),children:D.map(([r,i])=>{var E;return Array.isArray(i)?e.jsx(C.ButtonGroup,{children:i.filter(x=>{var l;return((l=n==null?void 0:n[r])==null?void 0:l[x])&&x}).map((x,l)=>{var k;return e.jsxs(_.Button,{size:"sm",onClick:()=>{j==null||j({...p,[r]:i.filter(M=>M!==x)})},children:[s(String(((k=n==null?void 0:n[r])==null?void 0:k[x])||""))," ",e.jsx(b.XIcon,{})]},l)})},r):e.jsxs(_.Button,{size:"sm",onClick:()=>{const x={...p};delete x[r],j==null||j(x)},children:[s(String(((E=n==null?void 0:n[r])==null?void 0:E[i])||""))," ",e.jsx(b.XIcon,{})]})})})}),O=({rows:t=[],columns:g,onRowClick:p,rowKey:j,params:N={page:1,limit:B.DEFAULT_LIMIT},hasNumbers:A=!1,hasCheckbox:s=!1,selectedItems:n,onSelectedItemsChange:D,onSortOrderChange:r,isStickyHeader:i,className:E,...x})=>{const{sortObject:l,handleSort:k}=u.useSortable({sortField:N==null?void 0:N.sortField,sortOrder:N==null?void 0:N.sortOrder,onSortOrderChange:r}),{selectedRows:M,isRowSelected:o,isAllRowsSelected:$,handleSelectAllRows:h,handleSelectRow:H}=u.useDataTable({rows:t,defaultSelectedRows:n});return L.useEffect(()=>{D==null||D(M)},[M,D]),e.jsxs(T.Table,{...x,children:[e.jsx(T.TableHeader,{className:v.cn("bg-bg",i&&"sticky top-0 z-1"),children:e.jsxs(T.TableRow,{children:[s&&e.jsx(T.TableHead,{className:"w-12 p-3",children:e.jsx(U.Checkbox,{className:"mt-1",checked:$(j),onCheckedChange:d=>h(j,!!d),"aria-label":"Select all"})}),A&&e.jsx(T.TableHead,{className:"w-12 p-2",children:"#"}),g.filter(d=>!d.hidden).map(d=>e.jsx(T.TableHead,{style:d.styles,className:v.cn("p-2",d.sortable&&"cursor-pointer"),onClick:()=>d.sortable&&k(d.dataIndex),children:e.jsxs("div",{className:"flex items-center gap-2",children:[d.name," ",d.sortable&&((l==null?void 0:l.sortField)===d.key?e.jsxs(e.Fragment,{children:[(l==null?void 0:l.sortOrder)===Y.SortOrder.DESC&&e.jsx(b.ArrowDownWideNarrow,{size:15}),(l==null?void 0:l.sortOrder)===Y.SortOrder.ASC&&e.jsx(b.ArrowUpWideNarrow,{size:15})]}):e.jsx(b.ArrowUpDown,{size:15}))]})},d.key))]})}),e.jsx(T.TableBody,{className:"[&>tr:nth-child(even)]:bg-bg-secondary",children:t.length?t.map((d,f)=>e.jsxs(T.TableRow,{onClick:()=>p==null?void 0:p(d),className:v.cn(p&&"cursor-pointer"),"data-state":o(d[j])&&"selected",children:[s&&e.jsx(T.TableCell,{className:"w-12 p-3",onClick:w=>w.stopPropagation(),children:e.jsx(U.Checkbox,{className:"mt-1",checked:o(d[j]),onCheckedChange:w=>H(d[j],!!w),"aria-label":"Select row"})}),A&&e.jsx(T.TableCell,{className:"w-12 p-2",children:(N.page-1)*(N.limit||B.DEFAULT_LIMIT)+f+1}),g.filter(w=>!w.hidden).map(w=>e.jsx(T.TableCell,{className:"text-body-xs-medium max-w-xs p-2",style:w.styles,children:w.render?w.render(y.get(d,w.dataIndex),d):y.get(d,w.dataIndex,"")},`${f}-${w.key}`))]},`${d[j]}`)):e.jsx(T.TableRow,{children:e.jsx(T.TableCell,{colSpan:A?s?g.length+2:g.length+1:g.length,children:e.jsx(ee.Empty,{})})})})]})},te=({dataSource:t,columns:g,rowKey:p,hasSearch:j,exportOptions:N,hasPagination:A,onParamChange:s,dataKey:n="docs",loading:D,tableKey:r,filters:i,actions:E,handleFilterChange:x,params:l,exportLoading:k=!1,onColumnsUpdate:M,hasColumnsVisibilityDropdown:o,showAppliedFilters:$=!1,actionProps:h,filterWrapperProps:H,exportOptionsProps:d,columnsVisibilityProps:f,paginationProps:w,searchProps:q,className:a,...m})=>{var X,G;const{t:W}=Z.useTranslation(),{formattedColumns:R,handleColumnsChange:F,resetColumns:K}=u.useColumns({key:r,columns:g});return L.useEffect(()=>{M==null||M(R)},[R,M]),e.jsxs("div",{className:v.cn("border-border-alpha-light relative flex grow flex-col overflow-auto rounded-xl border shadow-xs",a),children:[e.jsxs("div",{className:"flex shrink-0 flex-col gap-4 p-4",children:[(j||o&&r||!u.isEmpty(N)||!u.isEmpty(i))&&e.jsxs("div",{className:"flex flex-col justify-between gap-3 lg:flex-row lg:items-center",children:[e.jsx("div",{className:"grow",children:j&&e.jsx(Q.Search,{...q,inputProps:{...q==null?void 0:q.inputProps,className:v.cn("h-8 grow",(X=q==null?void 0:q.inputProps)==null?void 0:X.className)},className:v.cn("max-w-full lg:max-w-80! [&_button]:-top-1",q==null?void 0:q.className),defaultValue:y.get(l,"search",""),onSearchChange:c=>s==null?void 0:s({...l,search:c,page:1})})}),e.jsxs("div",{className:"flex items-center justify-end gap-3",children:[N&&e.jsx(V.ExportData,{...d,options:N,loading:k}),o&&r&&e.jsxs(z.DropdownMenu,{modal:!1,children:[e.jsx(z.DropdownMenuTrigger,{asChild:!0,className:"grow",...f==null?void 0:f.triggerProps,children:e.jsx(_.Button,{variant:"secondary",size:"sm",className:"ml-auto rounded-lg px-3",children:(f==null?void 0:f.title)||e.jsxs(e.Fragment,{children:[e.jsx(J.yn,{})," ",e.jsx("span",{className:"hidden md:inline!",children:W("Customize columns")}),e.jsx(J.f1,{})]})})}),e.jsxs(z.DropdownMenuContent,{align:"end",...f==null?void 0:f.contentProps,children:[e.jsxs(z.DropdownMenuItem,{onSelect:c=>c.preventDefault(),className:"capitalize",onClick:K,children:[e.jsx(b.RefreshCw,{})," ",(f==null?void 0:f.resetText)||W("Reset columns")]}),e.jsx(z.DropdownMenuSeparator,{}),R.map(c=>e.jsx(z.DropdownMenuCheckboxItem,{onSelect:I=>I.preventDefault(),className:"capitalize",checked:!c.hidden,onCheckedChange:I=>F(c,!I),children:c.name},c.key))]})]}),E&&e.jsx(S.Actions,{...h,actions:E}),i&&e.jsx(Q.FilterWrapper,{...H,filters:i,params:l,onChange:x,onFilter:c=>{s==null||s({...c,page:1}),x==null||x(c)}})]})]}),$&&!u.isEmpty(i)&&e.jsx(se,{filters:i,params:l,onFilter:c=>{s==null||s({...c,page:1}),x==null||x(c)}})]}),e.jsx("div",{className:v.cn("flex grow flex-col overflow-auto border-y"),children:D?e.jsx(P.Loader,{}):e.jsx(O,{...m,params:{page:(t==null?void 0:t.page)||1,limit:t==null?void 0:t.limit,...l},rows:y.get(t,n,[]),rowKey:p,columns:R,onSortOrderChange:({sortField:c,sortOrder:I})=>{s==null||s({...l,sortField:c,sortOrder:I})}})}),A&&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(B.MyLimitSelect,{onLimitChange:c=>s==null?void 0:s({...l,limit:c,page:1}),defaultValue:t==null?void 0:t.limit})}),e.jsx("div",{className:"text-muted-foreground text-sm",children:W("{{selectedCount}} of {{total}} row(s) selected",{selectedCount:((G=m.selectedItems)==null?void 0:G.length)??0,total:(t==null?void 0:t.total)||0})}),e.jsx("div",{children:e.jsx(B.MyPagination,{...w,onPageChange:c=>s==null?void 0:s({...l,page:c}),currentPage:t==null?void 0:t.page,totalPages:t==null?void 0:t.totalPages})})]})]})};exports.DataTable=te;exports.MyTable=O;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),J=require("../../chunks/index-ClQFzqcq.cjs.js"),_=require("dgz-ui/button"),z=require("dgz-ui/dropdown"),u=require("dgz-ui/utils"),y=require("../../chunks/MyInput-mL2G5h2s.cjs.js"),v=require("../../chunks/useSortable-BZKLpg8U.cjs.js"),b=require("lucide-react"),L=require("react"),Z=require("react-i18next"),S=require("../../chunks/Actions-bpMDyl5M.cjs.js"),V=require("../../chunks/ExportData-DJE0jOHc.cjs.js"),Q=require("../../chunks/Search-kbkeTeSI.cjs.js"),C=require("dgz-ui"),P=require("../../chunks/Loader-D_jX_Wgx.cjs.js"),B=require("../../chunks/MyPagination-CnF3468f.cjs.js"),U=require("dgz-ui/form"),T=require("dgz-ui/table"),Y=require("../../chunks/SortOrder-81BrXp3i.cjs.js"),ee=require("../../chunks/Empty-BYOOFAab.cjs.js"),se=L.memo(function({filters:g,params:p,onFilter:j,className:N,...A}){const{t:s}=Z.useTranslation(),n=L.useMemo(()=>Object.fromEntries((g==null?void 0:g.map(r=>{var i;return[r.name,Object.fromEntries(((i=r.options)==null?void 0:i.map(({label:E,value:c})=>[c,E]))||[])]}))||[]),[g]),D=L.useMemo(()=>Object.entries(p||{}).filter(([r,i])=>!!(n!=null&&n[r])&&!v.isEmpty(i)),[n,p]);return!v.isEmpty(D)&&e.jsx("div",{...A,className:u.cn("flex flex-wrap gap-2",N),children:D.map(([r,i])=>{var E;return Array.isArray(i)?e.jsx(C.ButtonGroup,{children:i.filter(c=>{var l;return((l=n==null?void 0:n[r])==null?void 0:l[c])&&c}).map((c,l)=>{var k;return e.jsxs(_.Button,{size:"sm",onClick:()=>{j==null||j({...p,[r]:i.filter(M=>M!==c)})},children:[s(String(((k=n==null?void 0:n[r])==null?void 0:k[c])||""))," ",e.jsx(b.XIcon,{})]},l)})},r):e.jsxs(_.Button,{size:"sm",onClick:()=>{const c={...p};delete c[r],j==null||j(c)},children:[s(String(((E=n==null?void 0:n[r])==null?void 0:E[i])||""))," ",e.jsx(b.XIcon,{})]})})})}),O=({rows:t=[],columns:g,onRowClick:p,rowKey:j,params:N={page:1,limit:B.DEFAULT_LIMIT},hasNumbers:A=!1,hasCheckbox:s=!1,selectedItems:n,onSelectedItemsChange:D,onSortOrderChange:r,isStickyHeader:i,className:E,...c})=>{const{sortObject:l,handleSort:k}=v.useSortable({sortField:N==null?void 0:N.sortField,sortOrder:N==null?void 0:N.sortOrder,onSortOrderChange:r}),{selectedRows:M,isRowSelected:o,isAllRowsSelected:$,handleSelectAllRows:h,handleSelectRow:H}=v.useDataTable({rows:t,defaultSelectedRows:n});return L.useEffect(()=>{D==null||D(M)},[M,D]),e.jsxs(T.Table,{...c,children:[e.jsx(T.TableHeader,{className:u.cn("bg-bg",i&&"sticky top-0 z-1"),children:e.jsxs(T.TableRow,{children:[s&&e.jsx(T.TableHead,{className:"w-12 p-3",children:e.jsx(U.Checkbox,{className:"mt-1",checked:$(j),onCheckedChange:d=>h(j,!!d),"aria-label":"Select all"})}),A&&e.jsx(T.TableHead,{className:"w-12 p-2",children:"#"}),g.filter(d=>!d.hidden).map(d=>e.jsx(T.TableHead,{style:d.styles,className:u.cn("p-2",d.sortable&&"cursor-pointer"),onClick:()=>d.sortable&&k(d.dataIndex),children:e.jsxs("div",{className:"flex items-center gap-2",children:[d.name," ",d.sortable&&((l==null?void 0:l.sortField)===d.key?e.jsxs(e.Fragment,{children:[(l==null?void 0:l.sortOrder)===Y.SortOrder.DESC&&e.jsx(b.ArrowDownWideNarrow,{size:15}),(l==null?void 0:l.sortOrder)===Y.SortOrder.ASC&&e.jsx(b.ArrowUpWideNarrow,{size:15})]}):e.jsx(b.ArrowUpDown,{size:15}))]})},d.key))]})}),e.jsx(T.TableBody,{className:"[&>tr:nth-child(even)]:bg-bg-secondary",children:t.length?t.map((d,f)=>e.jsxs(T.TableRow,{onClick:()=>p==null?void 0:p(d),className:u.cn(p&&"cursor-pointer"),"data-state":o(d[j])&&"selected",children:[s&&e.jsx(T.TableCell,{className:"w-12 p-3",onClick:w=>w.stopPropagation(),children:e.jsx(U.Checkbox,{className:"mt-1",checked:o(d[j]),onCheckedChange:w=>H(d[j],!!w),"aria-label":"Select row"})}),A&&e.jsx(T.TableCell,{className:"w-12 p-2",children:(N.page-1)*(N.limit||B.DEFAULT_LIMIT)+f+1}),g.filter(w=>!w.hidden).map(w=>e.jsx(T.TableCell,{className:"text-body-xs-medium max-w-xs p-2",style:w.styles,children:w.render?w.render(y.get(d,w.dataIndex),d):y.get(d,w.dataIndex,"")},`${f}-${w.key}`))]},`${d[j]}`)):e.jsx(T.TableRow,{children:e.jsx(T.TableCell,{colSpan:A?s?g.length+2:g.length+1:g.length,children:e.jsx(ee.Empty,{})})})})]})},te=({dataSource:t,columns:g,rowKey:p,hasSearch:j,exportOptions:N,hasPagination:A,onParamChange:s,dataKey:n="docs",loading:D,tableKey:r,filters:i,actions:E,handleFilterChange:c,params:l,exportLoading:k=!1,onColumnsUpdate:M,hasColumnsVisibilityDropdown:o,showAppliedFilters:$=!1,actionProps:h,filterWrapperProps:H,exportOptionsProps:d,columnsVisibilityProps:f,paginationProps:w,searchProps:q,className:a,...m})=>{var X,G;const{t:W}=Z.useTranslation(),{formattedColumns:R,handleColumnsChange:F,resetColumns:K}=v.useColumns({key:r,columns:g});return L.useEffect(()=>{M==null||M(R)},[R,M]),e.jsxs("div",{className:u.cn("border-border-alpha-light relative flex grow flex-col overflow-auto rounded-xl border shadow-xs",a),children:[e.jsxs("div",{className:"flex shrink-0 flex-col gap-4 p-4",children:[(j||o&&r||!v.isEmpty(N)||!v.isEmpty(i))&&e.jsxs("div",{className:"flex flex-col justify-between gap-3 lg:flex-row lg:items-center",children:[e.jsx("div",{className:"grow",children:j&&e.jsx(Q.Search,{...q,inputProps:{...q==null?void 0:q.inputProps,className:u.cn("h-8 grow",(X=q==null?void 0:q.inputProps)==null?void 0:X.className)},className:u.cn("max-w-full lg:max-w-80! [&_button]:-top-1",q==null?void 0:q.className),defaultValue:y.get(l,"search",""),onSearchChange:x=>s==null?void 0:s({...l,search:x,page:1})})}),e.jsxs("div",{className:"flex items-center justify-end gap-3",children:[N&&e.jsx(V.ExportData,{...d,options:N,loading:k}),o&&r&&e.jsxs(z.DropdownMenu,{modal:!1,children:[e.jsx(z.DropdownMenuTrigger,{asChild:!0,className:"grow",...f==null?void 0:f.triggerProps,children:e.jsx(_.Button,{variant:"secondary",size:"sm",className:"ml-auto rounded-lg px-3",children:(f==null?void 0:f.title)||e.jsxs(e.Fragment,{children:[e.jsx(J.yn,{})," ",e.jsx("span",{className:"hidden md:inline!",children:W("Customize columns")}),e.jsx(J.f1,{})]})})}),e.jsxs(z.DropdownMenuContent,{align:"end",...f==null?void 0:f.contentProps,children:[e.jsxs(z.DropdownMenuItem,{"data-testid":"reset-columns-button",onSelect:x=>x.preventDefault(),className:"capitalize",onClick:K,children:[e.jsx(b.RefreshCw,{})," ",(f==null?void 0:f.resetText)||W("Reset columns")]}),e.jsx(z.DropdownMenuSeparator,{}),R.map(x=>e.jsx(z.DropdownMenuCheckboxItem,{"data-testid":x.key,onSelect:I=>I.preventDefault(),className:"capitalize",checked:!x.hidden,onCheckedChange:I=>F(x,!I),children:x.name},x.key))]})]}),E&&e.jsx(S.Actions,{...h,actions:E}),i&&e.jsx(Q.FilterWrapper,{...H,filters:i,params:l,onChange:c,onFilter:x=>{s==null||s({...x,page:1}),c==null||c(x)}})]})]}),$&&!v.isEmpty(i)&&e.jsx(se,{filters:i,params:l,onFilter:x=>{s==null||s({...x,page:1}),c==null||c(x)}})]}),e.jsx("div",{className:u.cn("flex grow flex-col overflow-auto border-y"),children:D?e.jsx(P.Loader,{}):e.jsx(O,{...m,params:{page:(t==null?void 0:t.page)||1,limit:t==null?void 0:t.limit,...l},rows:y.get(t,n,[]),rowKey:p,columns:R,onSortOrderChange:({sortField:x,sortOrder:I})=>{s==null||s({...l,sortField:x,sortOrder:I})}})}),A&&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(B.MyLimitSelect,{onLimitChange:x=>s==null?void 0:s({...l,limit:x,page:1}),defaultValue:t==null?void 0:t.limit})}),e.jsx("div",{className:"text-muted-foreground text-sm",children:W("{{selectedCount}} of {{total}} row(s) selected",{selectedCount:((G=m.selectedItems)==null?void 0:G.length)??0,total:(t==null?void 0:t.total)||0})}),e.jsx("div",{children:e.jsx(B.MyPagination,{...w,onPageChange:x=>s==null?void 0:s({...l,page:x}),currentPage:t==null?void 0:t.page,totalPages:t==null?void 0:t.totalPages})})]})]})};exports.DataTable=te;exports.MyTable=O;
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 from 'lodash.isempty';\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 AppliedFilters 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 * AppliedFilters displays active filter values as removable buttons/tags.\n *\n * @param props.filters - Array of filter definitions to map values to labels.\n * @param props.params - Current active filter parameters.\n * @param props.onFilter - Callback fired when a filter is removed.\n * @param props.className - Additional CSS classes.\n * @returns {JSX.Element | false} A list of active filter buttons or false if no filters are active\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 const paramsArr = useMemo(\n () =>\n Object.entries(params || {}).filter(\n ([key, value]) => !!filterObject?.[key] && !isEmpty(value)\n ),\n [filterObject, params]\n );\n\n return (\n !isEmpty(paramsArr) && (\n <div {...props} className={cn('flex flex-wrap gap-2', className)}>\n {paramsArr.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 const paramValues = { ...params };\n\n delete paramValues[key];\n onFilter?.(paramValues);\n }}\n >\n {t(String(filterObject?.[key]?.[value as string] || ''))}{' '}\n <XIcon />\n </Button>\n )\n )}\n </div>\n )\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.get';\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 rows - Array of data rows.\n * @param columns - Column definitions.\n * @param onRowClick - Callback when a row is clicked.\n * @param rowKey - Unique key for each row.\n * @param params - Current table parameters.\n * @param hasNumbers - Whether to show row numbers.\n * @param hasCheckbox - Whether to show selection checkboxes.\n * @param selectedItems - Array of currently selected item keys.\n * @param onSelectedItemsChange - Callback when selected items change.\n * @param onSortOrderChange - Callback when sort order changes.\n * @param isStickyHeader - Whether the header should stick to the top.\n * @param className - Additional CSS classes.\n * @param props - Component props.\n * @returns {JSX.Element} 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 onSelectedItemsChange?.(selectedRows);\n }, [selectedRows, onSelectedItemsChange]);\n\n return (\n <Table {...props}>\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 from 'lodash.get';\nimport isEmpty from 'lodash.isempty';\nimport { RefreshCw } from 'lucide-react';\nimport { type ReactNode, useEffect } 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 * 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 * @template TData - Row data type.\n * @template TPaginationData - Pagination wrapper type.\n * @param dataSource - Paginated data source object.\n * @param columns - Column definitions.\n * @param rowKey - Property name used as a unique row key.\n * @param hasSearch - Whether to display the search input.\n * @param exportOptions - Export menu options.\n * @param hasPagination - Whether to render the pagination footer.\n * @param onParamChange - Emits parameter changes for pagination/sorting/search/filters.\n * @param dataKey - Key within `dataSource` that contains the row array.\n * @param loading - Whether the table data is loading.\n * @param tableKey - Unique key for persisting column visibility state.\n * @param filters - Filter configurations to render.\n * @param actions - Header actions.\n * @param handleFilterChange - Callback executed when filter values change.\n * @param params - Current list parameters.\n * @param exportLoading - Whether the export action is loading.\n * @param onColumnsUpdate - Notifies parent whenever columns state changes.\n * @param hasColumnsVisibilityDropdown - Whether to show columns customize dropdown.\n * @param showAppliedFilters - Whether to show applied filters.\n * @param onSelectedItemsChange - Callback when selected rows change.\n * @param actionProps - Props for the Actions component.\n * @param filterWrapperProps - Props for the FilterWrapper component.\n * @param exportOptionsProps - Props for the ExportData component.\n * @param columnsVisibilityProps - Props for columns visibility dropdown.\n * @param paginationProps - Props for the MyPagination component.\n * @param searchProps - Props for the Search component.\n * @param className - Additional CSS classes.\n * @param props - Additional props passed to MyTable.\n * @returns {JSX.Element} 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 rowKey,\n hasSearch,\n exportOptions,\n hasPagination,\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 actionProps,\n filterWrapperProps,\n exportOptionsProps,\n columnsVisibilityProps,\n paginationProps,\n searchProps,\n className,\n ...props\n}: DataTableProps<TData, TPaginationData>) => {\n const { t } = useTranslation();\n const { formattedColumns, handleColumnsChange, resetColumns } =\n useColumns<TData>({ key: tableKey, columns });\n\n useEffect(() => {\n onColumnsUpdate?.(formattedColumns);\n }, [formattedColumns, onColumnsUpdate]);\n\n return (\n <div\n className={cn(\n 'border-border-alpha-light relative flex grow flex-col overflow-auto rounded-xl border shadow-xs',\n className\n )}\n >\n <div className={'flex shrink-0 flex-col gap-4 p-4'}>\n {(hasSearch ||\n (hasColumnsVisibilityDropdown && tableKey) ||\n !isEmpty(exportOptions) ||\n !isEmpty(filters)) && (\n <div className=\"flex flex-col justify-between gap-3 lg:flex-row lg:items-center\">\n <div className={'grow'}>\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-80! [&_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 className={'flex items-center justify-end gap-3'}>\n {exportOptions && (\n <ExportData\n {...exportOptionsProps}\n options={exportOptions}\n loading={exportLoading}\n />\n )}\n {hasColumnsVisibilityDropdown && tableKey && (\n <DropdownMenu modal={false}>\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 onSelect={(e) => e.preventDefault()}\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 onSelect={(e) => e.preventDefault()}\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={cn('flex grow 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 columns={formattedColumns}\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: props.selectedItems?.length ?? 0,\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","paramsArr","key","isEmpty","jsx","cn","ButtonGroup","val","index","jsxs","Button","v","XIcon","paramValues","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","formattedColumns","handleColumnsChange","resetColumns","useColumns","Search","search","ExportData","DropdownMenu","DropdownMenuTrigger","RiLayoutColumnLine","RiArrowDownSLine","DropdownMenuContent","DropdownMenuItem","e","RefreshCw","DropdownMenuSeparator","DropdownMenuCheckboxItem","Actions","FilterWrapper","Loader","sortField","sortOrder","MyLimitSelect","limit","_b","MyPagination","page"],"mappings":"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"}
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 from 'lodash.isempty';\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 AppliedFilters 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 * AppliedFilters displays active filter values as removable buttons/tags.\n *\n * @param props.filters - Array of filter definitions to map values to labels.\n * @param props.params - Current active filter parameters.\n * @param props.onFilter - Callback fired when a filter is removed.\n * @param props.className - Additional CSS classes.\n * @returns {JSX.Element | false} A list of active filter buttons or false if no filters are active\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 const paramsArr = useMemo(\n () =>\n Object.entries(params || {}).filter(\n ([key, value]) => !!filterObject?.[key] && !isEmpty(value)\n ),\n [filterObject, params]\n );\n\n return (\n !isEmpty(paramsArr) && (\n <div {...props} className={cn('flex flex-wrap gap-2', className)}>\n {paramsArr.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 const paramValues = { ...params };\n\n delete paramValues[key];\n onFilter?.(paramValues);\n }}\n >\n {t(String(filterObject?.[key]?.[value as string] || ''))}{' '}\n <XIcon />\n </Button>\n )\n )}\n </div>\n )\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.get';\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 rows - Array of data rows.\n * @param columns - Column definitions.\n * @param onRowClick - Callback when a row is clicked.\n * @param rowKey - Unique key for each row.\n * @param params - Current table parameters.\n * @param hasNumbers - Whether to show row numbers.\n * @param hasCheckbox - Whether to show selection checkboxes.\n * @param selectedItems - Array of currently selected item keys.\n * @param onSelectedItemsChange - Callback when selected items change.\n * @param onSortOrderChange - Callback when sort order changes.\n * @param isStickyHeader - Whether the header should stick to the top.\n * @param className - Additional CSS classes.\n * @param props - Component props.\n * @returns {JSX.Element} 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 onSelectedItemsChange?.(selectedRows);\n }, [selectedRows, onSelectedItemsChange]);\n\n return (\n <Table {...props}>\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 from 'lodash.get';\nimport isEmpty from 'lodash.isempty';\nimport { RefreshCw } from 'lucide-react';\nimport { type ReactNode, useEffect } 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 * 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 * @template TData - Row data type.\n * @template TPaginationData - Pagination wrapper type.\n * @param dataSource - Paginated data source object.\n * @param columns - Column definitions.\n * @param rowKey - Property name used as a unique row key.\n * @param hasSearch - Whether to display the search input.\n * @param exportOptions - Export menu options.\n * @param hasPagination - Whether to render the pagination footer.\n * @param onParamChange - Emits parameter changes for pagination/sorting/search/filters.\n * @param dataKey - Key within `dataSource` that contains the row array.\n * @param loading - Whether the table data is loading.\n * @param tableKey - Unique key for persisting column visibility state.\n * @param filters - Filter configurations to render.\n * @param actions - Header actions.\n * @param handleFilterChange - Callback executed when filter values change.\n * @param params - Current list parameters.\n * @param exportLoading - Whether the export action is loading.\n * @param onColumnsUpdate - Notifies parent whenever columns state changes.\n * @param hasColumnsVisibilityDropdown - Whether to show columns customize dropdown.\n * @param showAppliedFilters - Whether to show applied filters.\n * @param onSelectedItemsChange - Callback when selected rows change.\n * @param actionProps - Props for the Actions component.\n * @param filterWrapperProps - Props for the FilterWrapper component.\n * @param exportOptionsProps - Props for the ExportData component.\n * @param columnsVisibilityProps - Props for columns visibility dropdown.\n * @param paginationProps - Props for the MyPagination component.\n * @param searchProps - Props for the Search component.\n * @param className - Additional CSS classes.\n * @param props - Additional props passed to MyTable.\n * @returns {JSX.Element} 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 rowKey,\n hasSearch,\n exportOptions,\n hasPagination,\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 actionProps,\n filterWrapperProps,\n exportOptionsProps,\n columnsVisibilityProps,\n paginationProps,\n searchProps,\n className,\n ...props\n}: DataTableProps<TData, TPaginationData>) => {\n const { t } = useTranslation();\n const { formattedColumns, handleColumnsChange, resetColumns } =\n useColumns<TData>({ key: tableKey, columns });\n\n useEffect(() => {\n onColumnsUpdate?.(formattedColumns);\n }, [formattedColumns, onColumnsUpdate]);\n\n return (\n <div\n className={cn(\n 'border-border-alpha-light relative flex grow flex-col overflow-auto rounded-xl border shadow-xs',\n className\n )}\n >\n <div className={'flex shrink-0 flex-col gap-4 p-4'}>\n {(hasSearch ||\n (hasColumnsVisibilityDropdown && tableKey) ||\n !isEmpty(exportOptions) ||\n !isEmpty(filters)) && (\n <div className=\"flex flex-col justify-between gap-3 lg:flex-row lg:items-center\">\n <div className={'grow'}>\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-80! [&_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 className={'flex items-center justify-end gap-3'}>\n {exportOptions && (\n <ExportData\n {...exportOptionsProps}\n options={exportOptions}\n loading={exportLoading}\n />\n )}\n {hasColumnsVisibilityDropdown && tableKey && (\n <DropdownMenu modal={false}>\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 data-testid={'reset-columns-button'}\n onSelect={(e) => e.preventDefault()}\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 data-testid={column.key}\n onSelect={(e) => e.preventDefault()}\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={cn('flex grow 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 columns={formattedColumns}\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: props.selectedItems?.length ?? 0,\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","paramsArr","key","isEmpty","jsx","cn","ButtonGroup","val","index","jsxs","Button","v","XIcon","paramValues","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","formattedColumns","handleColumnsChange","resetColumns","useColumns","Search","search","ExportData","DropdownMenu","DropdownMenuTrigger","RiLayoutColumnLine","RiArrowDownSLine","DropdownMenuContent","DropdownMenuItem","e","RefreshCw","DropdownMenuSeparator","DropdownMenuCheckboxItem","Actions","FilterWrapper","Loader","sortField","sortOrder","MyLimitSelect","limit","_b","MyPagination","page"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as e, jsxs as x, Fragment as O } from "react/jsx-runtime";
2
2
  import { y as u, f as C } from "../../chunks/index-E1NtSoNr.es.js";
3
3
  import { Button as q } from "dgz-ui/button";
4
- import { DropdownMenu as P, DropdownMenuTrigger as ee, DropdownMenuContent as le, DropdownMenuItem as te, DropdownMenuSeparator as de, DropdownMenuCheckboxItem as se } from "dgz-ui/dropdown";
4
+ import { DropdownMenu as P, DropdownMenuTrigger as ee, DropdownMenuContent as te, DropdownMenuItem as le, DropdownMenuSeparator as de, DropdownMenuCheckboxItem as se } from "dgz-ui/dropdown";
5
5
  import { cn as k } from "dgz-ui/utils";
6
6
  import { g as B } from "../../chunks/MyInput-ByJ5vTAN.es.js";
7
7
  import { i as I, u as fe, a as re, b as ie } from "../../chunks/useSortable-B1BtakAy.es.js";
@@ -25,14 +25,14 @@ const Le = Ne(function({
25
25
  className: n,
26
26
  ...z
27
27
  }) {
28
- const { t: l } = F(), i = U(
28
+ const { t } = F(), i = U(
29
29
  () => Object.fromEntries(
30
30
  (g == null ? void 0 : g.map((c) => {
31
31
  var p;
32
32
  return [
33
33
  c.name,
34
34
  Object.fromEntries(
35
- ((p = c.options) == null ? void 0 : p.map(({ label: M, value: f }) => [f, M])) || []
35
+ ((p = c.options) == null ? void 0 : p.map(({ label: M, value: r }) => [r, M])) || []
36
36
  )
37
37
  ];
38
38
  })) || []
@@ -47,10 +47,10 @@ const Le = Ne(function({
47
47
  return !I(T) && /* @__PURE__ */ e("div", { ...z, className: k("flex flex-wrap gap-2", n), children: T.map(
48
48
  ([c, p]) => {
49
49
  var M;
50
- return Array.isArray(p) ? /* @__PURE__ */ e(ve, { children: p.filter((f) => {
50
+ return Array.isArray(p) ? /* @__PURE__ */ e(ve, { children: p.filter((r) => {
51
51
  var d;
52
- return ((d = i == null ? void 0 : i[c]) == null ? void 0 : d[f]) && f;
53
- }).map((f, d) => {
52
+ return ((d = i == null ? void 0 : i[c]) == null ? void 0 : d[r]) && r;
53
+ }).map((r, d) => {
54
54
  var E;
55
55
  return /* @__PURE__ */ x(
56
56
  q,
@@ -59,11 +59,11 @@ const Le = Ne(function({
59
59
  onClick: () => {
60
60
  m == null || m({
61
61
  ...D,
62
- [c]: p.filter((A) => A !== f)
62
+ [c]: p.filter((A) => A !== r)
63
63
  });
64
64
  },
65
65
  children: [
66
- l(String(((E = i == null ? void 0 : i[c]) == null ? void 0 : E[f]) || "")),
66
+ t(String(((E = i == null ? void 0 : i[c]) == null ? void 0 : E[r]) || "")),
67
67
  " ",
68
68
  /* @__PURE__ */ e(Z, {})
69
69
  ]
@@ -75,11 +75,11 @@ const Le = Ne(function({
75
75
  {
76
76
  size: "sm",
77
77
  onClick: () => {
78
- const f = { ...D };
79
- delete f[c], m == null || m(f);
78
+ const r = { ...D };
79
+ delete r[c], m == null || m(r);
80
80
  },
81
81
  children: [
82
- l(String(((M = i == null ? void 0 : i[c]) == null ? void 0 : M[p]) || "")),
82
+ t(String(((M = i == null ? void 0 : i[c]) == null ? void 0 : M[p]) || "")),
83
83
  " ",
84
84
  /* @__PURE__ */ e(Z, {})
85
85
  ]
@@ -88,7 +88,7 @@ const Le = Ne(function({
88
88
  }
89
89
  ) });
90
90
  }), Ie = ({
91
- rows: t = [],
91
+ rows: l = [],
92
92
  columns: g,
93
93
  onRowClick: D,
94
94
  rowKey: m,
@@ -97,13 +97,13 @@ const Le = Ne(function({
97
97
  limit: j
98
98
  },
99
99
  hasNumbers: z = !1,
100
- hasCheckbox: l = !1,
100
+ hasCheckbox: t = !1,
101
101
  selectedItems: i,
102
102
  onSelectedItemsChange: T,
103
103
  onSortOrderChange: c,
104
104
  isStickyHeader: p,
105
105
  className: M,
106
- ...f
106
+ ...r
107
107
  }) => {
108
108
  const { sortObject: d, handleSort: E } = fe({
109
109
  sortField: n == null ? void 0 : n.sortField,
@@ -115,16 +115,16 @@ const Le = Ne(function({
115
115
  isAllRowsSelected: $,
116
116
  handleSelectAllRows: h,
117
117
  handleSelectRow: H
118
- } = re({ rows: t, defaultSelectedRows: i });
118
+ } = re({ rows: l, defaultSelectedRows: i });
119
119
  return K(() => {
120
120
  T == null || T(A);
121
- }, [A, T]), /* @__PURE__ */ x(ke, { ...f, children: [
121
+ }, [A, T]), /* @__PURE__ */ x(ke, { ...r, children: [
122
122
  /* @__PURE__ */ e(
123
123
  ze,
124
124
  {
125
125
  className: k("bg-bg", p && "sticky top-0 z-1"),
126
126
  children: /* @__PURE__ */ x(G, { children: [
127
- l && /* @__PURE__ */ e(X, { className: "w-12 p-3", children: /* @__PURE__ */ e(
127
+ t && /* @__PURE__ */ e(X, { className: "w-12 p-3", children: /* @__PURE__ */ e(
128
128
  y,
129
129
  {
130
130
  className: "mt-1",
@@ -154,14 +154,14 @@ const Le = Ne(function({
154
154
  ] })
155
155
  }
156
156
  ),
157
- /* @__PURE__ */ e(Ee, { className: "[&>tr:nth-child(even)]:bg-bg-secondary", children: t.length ? t.map((s, N) => /* @__PURE__ */ x(
157
+ /* @__PURE__ */ e(Ee, { className: "[&>tr:nth-child(even)]:bg-bg-secondary", children: l.length ? l.map((s, N) => /* @__PURE__ */ x(
158
158
  G,
159
159
  {
160
160
  onClick: () => D == null ? void 0 : D(s),
161
161
  className: k(D && "cursor-pointer"),
162
162
  "data-state": o(s[m]) && "selected",
163
163
  children: [
164
- l && /* @__PURE__ */ e(
164
+ t && /* @__PURE__ */ e(
165
165
  W,
166
166
  {
167
167
  className: "w-12 p-3",
@@ -193,25 +193,25 @@ const Le = Ne(function({
193
193
  )) : /* @__PURE__ */ e(G, { children: /* @__PURE__ */ e(
194
194
  W,
195
195
  {
196
- colSpan: z ? l ? g.length + 2 : g.length + 1 : g.length,
196
+ colSpan: z ? t ? g.length + 2 : g.length + 1 : g.length,
197
197
  children: /* @__PURE__ */ e(oe, {})
198
198
  }
199
199
  ) }) })
200
200
  ] });
201
201
  }, Fe = ({
202
- dataSource: t,
202
+ dataSource: l,
203
203
  columns: g,
204
204
  rowKey: D,
205
205
  hasSearch: m,
206
206
  exportOptions: n,
207
207
  hasPagination: z,
208
- onParamChange: l,
208
+ onParamChange: t,
209
209
  dataKey: i = "docs",
210
210
  loading: T,
211
211
  tableKey: c,
212
212
  filters: p,
213
213
  actions: M,
214
- handleFilterChange: f,
214
+ handleFilterChange: r,
215
215
  params: d,
216
216
  exportLoading: E = !1,
217
217
  onColumnsUpdate: A,
@@ -223,11 +223,11 @@ const Le = Ne(function({
223
223
  columnsVisibilityProps: N,
224
224
  paginationProps: w,
225
225
  searchProps: v,
226
- className: S,
226
+ className: a,
227
227
  ...J
228
228
  }) => {
229
229
  var Q, Y;
230
- const { t: _ } = F(), { formattedColumns: R, handleColumnsChange: a, resetColumns: V } = ie({ key: c, columns: g });
230
+ const { t: _ } = F(), { formattedColumns: R, handleColumnsChange: S, resetColumns: V } = ie({ key: c, columns: g });
231
231
  return K(() => {
232
232
  A == null || A(R);
233
233
  }, [R, A]), /* @__PURE__ */ x(
@@ -235,7 +235,7 @@ const Le = Ne(function({
235
235
  {
236
236
  className: k(
237
237
  "border-border-alpha-light relative flex grow flex-col overflow-auto rounded-xl border shadow-xs",
238
- S
238
+ a
239
239
  ),
240
240
  children: [
241
241
  /* @__PURE__ */ x("div", { className: "flex shrink-0 flex-col gap-4 p-4", children: [
@@ -256,7 +256,7 @@ const Le = Ne(function({
256
256
  v == null ? void 0 : v.className
257
257
  ),
258
258
  defaultValue: B(d, "search", ""),
259
- onSearchChange: (r) => l == null ? void 0 : l({ ...d, search: r, page: 1 })
259
+ onSearchChange: (f) => t == null ? void 0 : t({ ...d, search: f, page: 1 })
260
260
  }
261
261
  ) }),
262
262
  /* @__PURE__ */ x("div", { className: "flex items-center justify-end gap-3", children: [
@@ -292,15 +292,16 @@ const Le = Ne(function({
292
292
  }
293
293
  ),
294
294
  /* @__PURE__ */ x(
295
- le,
295
+ te,
296
296
  {
297
297
  align: "end",
298
298
  ...N == null ? void 0 : N.contentProps,
299
299
  children: [
300
300
  /* @__PURE__ */ x(
301
- te,
301
+ le,
302
302
  {
303
- onSelect: (r) => r.preventDefault(),
303
+ "data-testid": "reset-columns-button",
304
+ onSelect: (f) => f.preventDefault(),
304
305
  className: "capitalize",
305
306
  onClick: V,
306
307
  children: [
@@ -311,16 +312,17 @@ const Le = Ne(function({
311
312
  }
312
313
  ),
313
314
  /* @__PURE__ */ e(de, {}),
314
- R.map((r) => /* @__PURE__ */ e(
315
+ R.map((f) => /* @__PURE__ */ e(
315
316
  se,
316
317
  {
318
+ "data-testid": f.key,
317
319
  onSelect: (L) => L.preventDefault(),
318
320
  className: "capitalize",
319
- checked: !r.hidden,
320
- onCheckedChange: (L) => a(r, !L),
321
- children: r.name
321
+ checked: !f.hidden,
322
+ onCheckedChange: (L) => S(f, !L),
323
+ children: f.name
322
324
  },
323
- r.key
325
+ f.key
324
326
  ))
325
327
  ]
326
328
  }
@@ -333,9 +335,9 @@ const Le = Ne(function({
333
335
  ...H,
334
336
  filters: p,
335
337
  params: d,
336
- onChange: f,
337
- onFilter: (r) => {
338
- l == null || l({ ...r, page: 1 }), f == null || f(r);
338
+ onChange: r,
339
+ onFilter: (f) => {
340
+ t == null || t({ ...f, page: 1 }), r == null || r(f);
339
341
  }
340
342
  }
341
343
  )
@@ -346,8 +348,8 @@ const Le = Ne(function({
346
348
  {
347
349
  filters: p,
348
350
  params: d,
349
- onFilter: (r) => {
350
- l == null || l({ ...r, page: 1 }), f == null || f(r);
351
+ onFilter: (f) => {
352
+ t == null || t({ ...f, page: 1 }), r == null || r(f);
351
353
  }
352
354
  }
353
355
  )
@@ -357,15 +359,15 @@ const Le = Ne(function({
357
359
  {
358
360
  ...J,
359
361
  params: {
360
- page: (t == null ? void 0 : t.page) || 1,
361
- limit: t == null ? void 0 : t.limit,
362
+ page: (l == null ? void 0 : l.page) || 1,
363
+ limit: l == null ? void 0 : l.limit,
362
364
  ...d
363
365
  },
364
- rows: B(t, i, []),
366
+ rows: B(l, i, []),
365
367
  rowKey: D,
366
368
  columns: R,
367
- onSortOrderChange: ({ sortField: r, sortOrder: L }) => {
368
- l == null || l({ ...d, sortField: r, sortOrder: L });
369
+ onSortOrderChange: ({ sortField: f, sortOrder: L }) => {
370
+ t == null || t({ ...d, sortField: f, sortOrder: L });
369
371
  }
370
372
  }
371
373
  ) }),
@@ -373,21 +375,21 @@ const Le = Ne(function({
373
375
  /* @__PURE__ */ e("div", { className: "text-sm", children: /* @__PURE__ */ e(
374
376
  Ae,
375
377
  {
376
- onLimitChange: (r) => l == null ? void 0 : l({ ...d, limit: r, page: 1 }),
377
- defaultValue: t == null ? void 0 : t.limit
378
+ onLimitChange: (f) => t == null ? void 0 : t({ ...d, limit: f, page: 1 }),
379
+ defaultValue: l == null ? void 0 : l.limit
378
380
  }
379
381
  ) }),
380
382
  /* @__PURE__ */ e("div", { className: "text-muted-foreground text-sm", children: _("{{selectedCount}} of {{total}} row(s) selected", {
381
383
  selectedCount: ((Y = J.selectedItems) == null ? void 0 : Y.length) ?? 0,
382
- total: (t == null ? void 0 : t.total) || 0
384
+ total: (l == null ? void 0 : l.total) || 0
383
385
  }) }),
384
386
  /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e(
385
387
  Me,
386
388
  {
387
389
  ...w,
388
- onPageChange: (r) => l == null ? void 0 : l({ ...d, page: r }),
389
- currentPage: t == null ? void 0 : t.page,
390
- totalPages: t == null ? void 0 : t.totalPages
390
+ onPageChange: (f) => t == null ? void 0 : t({ ...d, page: f }),
391
+ currentPage: l == null ? void 0 : l.page,
392
+ totalPages: l == null ? void 0 : l.totalPages
391
393
  }
392
394
  ) })
393
395
  ] })
@@ -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 from 'lodash.isempty';\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 AppliedFilters 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 * AppliedFilters displays active filter values as removable buttons/tags.\n *\n * @param props.filters - Array of filter definitions to map values to labels.\n * @param props.params - Current active filter parameters.\n * @param props.onFilter - Callback fired when a filter is removed.\n * @param props.className - Additional CSS classes.\n * @returns {JSX.Element | false} A list of active filter buttons or false if no filters are active\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 const paramsArr = useMemo(\n () =>\n Object.entries(params || {}).filter(\n ([key, value]) => !!filterObject?.[key] && !isEmpty(value)\n ),\n [filterObject, params]\n );\n\n return (\n !isEmpty(paramsArr) && (\n <div {...props} className={cn('flex flex-wrap gap-2', className)}>\n {paramsArr.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 const paramValues = { ...params };\n\n delete paramValues[key];\n onFilter?.(paramValues);\n }}\n >\n {t(String(filterObject?.[key]?.[value as string] || ''))}{' '}\n <XIcon />\n </Button>\n )\n )}\n </div>\n )\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.get';\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 rows - Array of data rows.\n * @param columns - Column definitions.\n * @param onRowClick - Callback when a row is clicked.\n * @param rowKey - Unique key for each row.\n * @param params - Current table parameters.\n * @param hasNumbers - Whether to show row numbers.\n * @param hasCheckbox - Whether to show selection checkboxes.\n * @param selectedItems - Array of currently selected item keys.\n * @param onSelectedItemsChange - Callback when selected items change.\n * @param onSortOrderChange - Callback when sort order changes.\n * @param isStickyHeader - Whether the header should stick to the top.\n * @param className - Additional CSS classes.\n * @param props - Component props.\n * @returns {JSX.Element} 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 onSelectedItemsChange?.(selectedRows);\n }, [selectedRows, onSelectedItemsChange]);\n\n return (\n <Table {...props}>\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 from 'lodash.get';\nimport isEmpty from 'lodash.isempty';\nimport { RefreshCw } from 'lucide-react';\nimport { type ReactNode, useEffect } 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 * 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 * @template TData - Row data type.\n * @template TPaginationData - Pagination wrapper type.\n * @param dataSource - Paginated data source object.\n * @param columns - Column definitions.\n * @param rowKey - Property name used as a unique row key.\n * @param hasSearch - Whether to display the search input.\n * @param exportOptions - Export menu options.\n * @param hasPagination - Whether to render the pagination footer.\n * @param onParamChange - Emits parameter changes for pagination/sorting/search/filters.\n * @param dataKey - Key within `dataSource` that contains the row array.\n * @param loading - Whether the table data is loading.\n * @param tableKey - Unique key for persisting column visibility state.\n * @param filters - Filter configurations to render.\n * @param actions - Header actions.\n * @param handleFilterChange - Callback executed when filter values change.\n * @param params - Current list parameters.\n * @param exportLoading - Whether the export action is loading.\n * @param onColumnsUpdate - Notifies parent whenever columns state changes.\n * @param hasColumnsVisibilityDropdown - Whether to show columns customize dropdown.\n * @param showAppliedFilters - Whether to show applied filters.\n * @param onSelectedItemsChange - Callback when selected rows change.\n * @param actionProps - Props for the Actions component.\n * @param filterWrapperProps - Props for the FilterWrapper component.\n * @param exportOptionsProps - Props for the ExportData component.\n * @param columnsVisibilityProps - Props for columns visibility dropdown.\n * @param paginationProps - Props for the MyPagination component.\n * @param searchProps - Props for the Search component.\n * @param className - Additional CSS classes.\n * @param props - Additional props passed to MyTable.\n * @returns {JSX.Element} 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 rowKey,\n hasSearch,\n exportOptions,\n hasPagination,\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 actionProps,\n filterWrapperProps,\n exportOptionsProps,\n columnsVisibilityProps,\n paginationProps,\n searchProps,\n className,\n ...props\n}: DataTableProps<TData, TPaginationData>) => {\n const { t } = useTranslation();\n const { formattedColumns, handleColumnsChange, resetColumns } =\n useColumns<TData>({ key: tableKey, columns });\n\n useEffect(() => {\n onColumnsUpdate?.(formattedColumns);\n }, [formattedColumns, onColumnsUpdate]);\n\n return (\n <div\n className={cn(\n 'border-border-alpha-light relative flex grow flex-col overflow-auto rounded-xl border shadow-xs',\n className\n )}\n >\n <div className={'flex shrink-0 flex-col gap-4 p-4'}>\n {(hasSearch ||\n (hasColumnsVisibilityDropdown && tableKey) ||\n !isEmpty(exportOptions) ||\n !isEmpty(filters)) && (\n <div className=\"flex flex-col justify-between gap-3 lg:flex-row lg:items-center\">\n <div className={'grow'}>\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-80! [&_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 className={'flex items-center justify-end gap-3'}>\n {exportOptions && (\n <ExportData\n {...exportOptionsProps}\n options={exportOptions}\n loading={exportLoading}\n />\n )}\n {hasColumnsVisibilityDropdown && tableKey && (\n <DropdownMenu modal={false}>\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 onSelect={(e) => e.preventDefault()}\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 onSelect={(e) => e.preventDefault()}\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={cn('flex grow 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 columns={formattedColumns}\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: props.selectedItems?.length ?? 0,\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","paramsArr","key","isEmpty","jsx","cn","ButtonGroup","val","index","jsxs","Button","v","XIcon","paramValues","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","formattedColumns","handleColumnsChange","resetColumns","useColumns","Search","search","ExportData","DropdownMenu","DropdownMenuTrigger","RiLayoutColumnLine","RiArrowDownSLine","DropdownMenuContent","DropdownMenuItem","e","RefreshCw","DropdownMenuSeparator","DropdownMenuCheckboxItem","Actions","FilterWrapper","Loader","sortField","sortOrder","MyLimitSelect","limit","_b","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 from 'lodash.isempty';\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 AppliedFilters 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 * AppliedFilters displays active filter values as removable buttons/tags.\n *\n * @param props.filters - Array of filter definitions to map values to labels.\n * @param props.params - Current active filter parameters.\n * @param props.onFilter - Callback fired when a filter is removed.\n * @param props.className - Additional CSS classes.\n * @returns {JSX.Element | false} A list of active filter buttons or false if no filters are active\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 const paramsArr = useMemo(\n () =>\n Object.entries(params || {}).filter(\n ([key, value]) => !!filterObject?.[key] && !isEmpty(value)\n ),\n [filterObject, params]\n );\n\n return (\n !isEmpty(paramsArr) && (\n <div {...props} className={cn('flex flex-wrap gap-2', className)}>\n {paramsArr.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 const paramValues = { ...params };\n\n delete paramValues[key];\n onFilter?.(paramValues);\n }}\n >\n {t(String(filterObject?.[key]?.[value as string] || ''))}{' '}\n <XIcon />\n </Button>\n )\n )}\n </div>\n )\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.get';\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 rows - Array of data rows.\n * @param columns - Column definitions.\n * @param onRowClick - Callback when a row is clicked.\n * @param rowKey - Unique key for each row.\n * @param params - Current table parameters.\n * @param hasNumbers - Whether to show row numbers.\n * @param hasCheckbox - Whether to show selection checkboxes.\n * @param selectedItems - Array of currently selected item keys.\n * @param onSelectedItemsChange - Callback when selected items change.\n * @param onSortOrderChange - Callback when sort order changes.\n * @param isStickyHeader - Whether the header should stick to the top.\n * @param className - Additional CSS classes.\n * @param props - Component props.\n * @returns {JSX.Element} 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 onSelectedItemsChange?.(selectedRows);\n }, [selectedRows, onSelectedItemsChange]);\n\n return (\n <Table {...props}>\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 from 'lodash.get';\nimport isEmpty from 'lodash.isempty';\nimport { RefreshCw } from 'lucide-react';\nimport { type ReactNode, useEffect } 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 * 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 * @template TData - Row data type.\n * @template TPaginationData - Pagination wrapper type.\n * @param dataSource - Paginated data source object.\n * @param columns - Column definitions.\n * @param rowKey - Property name used as a unique row key.\n * @param hasSearch - Whether to display the search input.\n * @param exportOptions - Export menu options.\n * @param hasPagination - Whether to render the pagination footer.\n * @param onParamChange - Emits parameter changes for pagination/sorting/search/filters.\n * @param dataKey - Key within `dataSource` that contains the row array.\n * @param loading - Whether the table data is loading.\n * @param tableKey - Unique key for persisting column visibility state.\n * @param filters - Filter configurations to render.\n * @param actions - Header actions.\n * @param handleFilterChange - Callback executed when filter values change.\n * @param params - Current list parameters.\n * @param exportLoading - Whether the export action is loading.\n * @param onColumnsUpdate - Notifies parent whenever columns state changes.\n * @param hasColumnsVisibilityDropdown - Whether to show columns customize dropdown.\n * @param showAppliedFilters - Whether to show applied filters.\n * @param onSelectedItemsChange - Callback when selected rows change.\n * @param actionProps - Props for the Actions component.\n * @param filterWrapperProps - Props for the FilterWrapper component.\n * @param exportOptionsProps - Props for the ExportData component.\n * @param columnsVisibilityProps - Props for columns visibility dropdown.\n * @param paginationProps - Props for the MyPagination component.\n * @param searchProps - Props for the Search component.\n * @param className - Additional CSS classes.\n * @param props - Additional props passed to MyTable.\n * @returns {JSX.Element} 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 rowKey,\n hasSearch,\n exportOptions,\n hasPagination,\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 actionProps,\n filterWrapperProps,\n exportOptionsProps,\n columnsVisibilityProps,\n paginationProps,\n searchProps,\n className,\n ...props\n}: DataTableProps<TData, TPaginationData>) => {\n const { t } = useTranslation();\n const { formattedColumns, handleColumnsChange, resetColumns } =\n useColumns<TData>({ key: tableKey, columns });\n\n useEffect(() => {\n onColumnsUpdate?.(formattedColumns);\n }, [formattedColumns, onColumnsUpdate]);\n\n return (\n <div\n className={cn(\n 'border-border-alpha-light relative flex grow flex-col overflow-auto rounded-xl border shadow-xs',\n className\n )}\n >\n <div className={'flex shrink-0 flex-col gap-4 p-4'}>\n {(hasSearch ||\n (hasColumnsVisibilityDropdown && tableKey) ||\n !isEmpty(exportOptions) ||\n !isEmpty(filters)) && (\n <div className=\"flex flex-col justify-between gap-3 lg:flex-row lg:items-center\">\n <div className={'grow'}>\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-80! [&_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 className={'flex items-center justify-end gap-3'}>\n {exportOptions && (\n <ExportData\n {...exportOptionsProps}\n options={exportOptions}\n loading={exportLoading}\n />\n )}\n {hasColumnsVisibilityDropdown && tableKey && (\n <DropdownMenu modal={false}>\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 data-testid={'reset-columns-button'}\n onSelect={(e) => e.preventDefault()}\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 data-testid={column.key}\n onSelect={(e) => e.preventDefault()}\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={cn('flex grow 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 columns={formattedColumns}\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: props.selectedItems?.length ?? 0,\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","useTranslation","filterObject","useMemo","filter","_a","label","value","paramsArr","key","isEmpty","jsx","cn","ButtonGroup","val","index","jsxs","Button","v","XIcon","paramValues","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","t","formattedColumns","handleColumnsChange","resetColumns","useColumns","Search","search","ExportData","DropdownMenu","DropdownMenuTrigger","RiLayoutColumnLine","RiArrowDownSLine","DropdownMenuContent","DropdownMenuItem","e","RefreshCw","DropdownMenuSeparator","DropdownMenuCheckboxItem","Actions","FilterWrapper","Loader","sortField","sortOrder","MyLimitSelect","limit","_b","MyPagination","page"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/components/datatable/DataTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/components/datatable/DataTable.tsx"],"names":[],"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.44",
3
+ "version": "1.2.46",
4
4
  "description": "Custom ui library using React.js, Shadcn/ui, TailwindCSS, Typescript, dgz-ui library",
5
5
  "keywords": [
6
6
  "dgz-ui",
@@ -183,7 +183,6 @@
183
183
  "typecheck": "tsc --noEmit"
184
184
  },
185
185
  "overrides": {
186
- "minimatch": "^10.2.4",
187
186
  "quill": "2.0.2"
188
187
  },
189
188
  "dependencies": {