'use client' import { useMemo } from 'react' import { cn } from '../../../utils/cn' import { Button } from '../button' import { Download02Icon } from '../../icons-v2-generated/interface/download-02-icon' import { useHorizontalScrollbar } from '../../../hooks/ui/use-horizontal-scrollbar' import { TableEmptyState } from '../table/table-empty-state' import { QueryReportTableHeader } from './query-report-table-header' import { QueryReportTableRow } from './query-report-table-row' import { QueryReportTableSkeleton } from './query-report-table-skeleton' import { deriveColumns, exportToCSV } from './utils' import type { QueryReportTableProps } from './types' export function QueryReportTable({ title, data, loading = false, skeletonRows = 8, skeletonColumns = 6, emptyMessage, columnWidth = 160, columnOrder, showExport = true, exportFilename = 'query-results', onExport, headerActions, variant = 'default', className, tableClassName }: QueryReportTableProps) { const isCompact = variant === 'compact' const columns = useMemo( () => deriveColumns(data, columnOrder), [data, columnOrder] ) const handleExport = () => { exportToCSV(data, columns, exportFilename) onExport?.() } const tableMinWidth = columns.length * (columnWidth + 16) // columnWidth + gap const { scrollRef, trackRef, thumbRef, thumbRatio, canScrollLeft, canScrollRight, onScroll, onTrackClick, onTrackWheel, onThumbPointerDown, onThumbPointerMove, onThumbPointerUp, } = useHorizontalScrollbar() return (