/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import type { Table } from '@tanstack/react-table' import { cn } from '@/lib/utils' import { Skeleton } from '@/components/ui/skeleton' import { TableRow, TableCell } from '@/components/ui/table' const SKELETON_WIDTHS = [ '75%', '60%', '85%', '50%', '70%', '90%', '55%', '80%', '65%', '45%', ] interface TableSkeletonProps { table: Table rowCount?: number rowHeight?: string keyPrefix?: string } export function TableSkeleton({ table, rowCount, rowHeight = 'h-[52px]', keyPrefix = 'skeleton', }: TableSkeletonProps) { const visibleColumns = table.getVisibleLeafColumns() const finalRowCount = rowCount ?? Math.min(table.getState().pagination?.pageSize || 20, 20) return ( <> {Array.from({ length: finalRowCount }, (_, rowIndex) => ( {visibleColumns.map((column, colIndex) => { const isSelectColumn = column.id === 'select' const widthIndex = (rowIndex * visibleColumns.length + colIndex) % SKELETON_WIDTHS.length return ( ) })} ))} ) }