import React from 'react'; import { Search, X } from 'lucide-react'; import { Input, Button } from './index.js'; import './Table.css'; /** * Table.Toolbar — search + filters row above a virtualised table. * * Use alone when you just want the styled search/filter chrome without the * full wrapper; use inside
for a cohesive chrome treatment. */ function Toolbar({ search, onSearch, searchPlaceholder = 'Search…', meta, // right-aligned summary (e.g. "42/42 · 3 sel") children, // extra filter controls between search and meta className = '', ...rest }) { return (
{onSearch != null && (
onSearch(e.target.value)} className="ui-table-toolbar__search-input" /> {search && ( )}
)} {children} {meta != null && {meta}}
); } /** * Table.Header — sticky column header row. * * Columns: array of { key, label, width?, flex?, align? } */ function Header({ columns = [], leading, trailing, className = '' }) { return (
{leading} {columns.map((c) => ( {c.label} ))} {trailing}
); } /** * Table — thin wrapper that provides a toolbar slot + header slot + children body. * Caller controls virtualisation (react-window). * *
* * * * } /> *
* *
*
*/ export default function Table({ className = '', children, ...rest }) { return (
{children}
); } Table.Toolbar = Toolbar; Table.Header = Header;