UNPKG

tanstack-shadcn-table

Version:

A powerful, feature-rich React table component built on top of TanStack Table v8 with shadcn/ui styling. Optimized bundle size with 55% reduction through peer dependencies.

2 lines (1 loc) 3.48 kB
import{jsxs as e,jsx as a}from"react/jsx-runtime";import{useCallback as t}from"react";import{B as i,S as s,b as r,d as n,e as l}from"./ui-components-bd9e2eb9.js";import{c as o,d as c,a as m}from"./utils-49e5594d.js";import{ChevronsLeftIcon as d,ChevronLeftIcon as g,Ellipsis as p,ChevronRightIcon as h,ChevronsRightIcon as f}from"lucide-react";import{D as u}from"./filtering-47a28203.js";import"@radix-ui/react-slot";import"class-variance-authority";import"@radix-ui/react-dropdown-menu";import"@radix-ui/react-select";import"clsx";import"tailwind-merge";import"./security-16060df4.js";function x({onNext:s,onPrevious:r,onSetPage:n,canNextPage:l,canPreviousPage:u,totalPages:x=0,currentPage:N=0,className:b,mode:v="default",maxVisiblePages:P=7,translations:w=c}){const y=m(w),z=t(()=>{const e=[];switch(v){case"advanced":if(x>P){const a=Math.floor((P-3)/2),t=N>=x-(P-3-a)-1;if(a+1>N){for(let a=0;P-2>a;a++)e.push(a);e.push(-1),e.push(x-1)}else if(t){e.push(0),e.push(-1);for(let a=x-(P-2);x>a;a++)e.push(a)}else{e.push(0),e.push(-1);const a=P-4,t=N-Math.floor(a/2);for(let i=0;a>i;i++)e.push(t+i);e.push(-2),e.push(x-1)}}else for(let a=0;x>a;a++)e.push(a);break;case"default":if(x>P)if(x-P+1>N){const a=Math.max(0,N);for(let t=a;a+P-1>t;t++)e.push(t);e.push(-1),e.push(x-1)}else for(let a=x-P;x>a;a++)e.push(a);else for(let a=0;x>a;a++)e.push(a);break;case"compact":if(x>P){let a=Math.max(0,N-Math.floor(P/2)),t=Math.min(x-1,a+P-1);t===x-1&&(a=Math.max(0,t-P+1));for(let i=a;t>=i;i++)e.push(i)}else for(let a=0;x>a;a++)e.push(a)}return e},[x,N,v,P]);return e("div",{className:o("flex items-center gap-1",b),children:[a(i,{variant:"ghost",size:"icon",onClick:()=>n(0),disabled:!u,"aria-label":y("pagination.first"),children:a(d,{className:"h-4 w-4"})}),a(i,{variant:"ghost",size:"icon",onClick:()=>r(),disabled:!u,"aria-label":y("pagination.previous"),children:a(g,{className:"h-4 w-4"})}),z().map((e,t)=>-1===e||-2===e?a("span",{className:"size-9 flex items-center justify-center text-gray-500",children:a(p,{className:"h-4 w-4"})},t):a(i,{variant:N===e?"default":"ghost",size:"icon",onClick:()=>n(e),children:e+1},t)),a(i,{variant:"ghost",size:"icon",onClick:()=>s(),disabled:!l,"aria-label":y("pagination.next"),children:a(h,{className:"h-4 w-4"})}),a(i,{variant:"ghost",size:"icon",onClick:()=>n(x-1),disabled:!l||0===x,"aria-label":y("pagination.last"),children:a(f,{className:"h-4 w-4"})})]})}function N({currentPage:t,onSetPage:i,totalPages:s,className:r,label:n,translations:l=c}){const d=m(l);return e("div",{className:o("flex items-center gap-2",r),children:[n&&a("span",{className:"text-sm text-gray-700",children:n||d("pagination.goToPage")}),a(u,{type:"number",min:1,max:s,value:t+1,onChange:e=>{i(e?+e-1:0)},className:"w-16 h-8 border border-gray-300 rounded-md px-2",placeholder:d("pagination.page")}),e("span",{className:"text-sm text-gray-700",children:[d("pagination.of")," ",s]})]})}function b({pageSize:t,className:i,onSetPageSize:d,pagination:g,label:p,translations:h=c}){const f=m(h);return e("div",{className:o("flex items-center gap-2",i),children:[p&&a("span",{className:"text-sm truncate text-gray-700",children:p||f("pagination.rowsPerPage")}),e(s,{value:t.toString(),onValueChange:e=>{const a=parseInt(e,10);!isNaN(a)&&a>0&&d(a)},children:[a(r,{children:a("span",{className:"text-sm text-gray-700",children:t})}),a(n,{children:g.pageSizeOptions?.map(e=>a(l,{value:e.toString(),children:e},e))})]})]})}export{N as GoToPage,b as PageSize,x as default};