UNPKG

lorehub

Version:

Capture and surface the collective wisdom of your codebase

49 lines 2.09 kB
import React from 'react'; import { Box, Text } from 'ink'; export function Table({ data, columns, padding = 1 }) { if (data.length === 0) { return React.createElement(Text, { dimColor: true }, "No data"); } // Get columns from first data item if not provided const keys = columns || Object.keys(data[0] || {}); // Calculate column widths const widths = {}; // Initialize with header widths keys.forEach(key => { widths[key] = String(key).length; }); // Update with data widths data.forEach(row => { keys.forEach(key => { const value = String(row[key] ?? ''); widths[key] = Math.max(widths[key], value.length); }); }); // Add padding const paddingStr = ' '.repeat(padding); // Render header const header = (React.createElement(Box, null, keys.map((key, index) => (React.createElement(Box, { key: String(key), width: widths[key] + padding * 2 }, React.createElement(Text, { bold: true }, index > 0 && paddingStr, String(key).padEnd(widths[key]), paddingStr)))))); // Render separator const separator = (React.createElement(Box, null, React.createElement(Text, { dimColor: true }, keys.map((key, index) => (index > 0 ? paddingStr : '') + '─'.repeat(widths[key]) + paddingStr).join('')))); // Render rows const rows = data.map((row, rowIndex) => { const isSelected = row[''] === '→'; // Check if this row is selected return (React.createElement(Box, { key: rowIndex }, keys.map((key, colIndex) => (React.createElement(Box, { key: String(key), width: widths[key] + padding * 2 }, React.createElement(Text, { color: isSelected ? 'cyan' : undefined }, colIndex > 0 && paddingStr, String(row[key] ?? '').padEnd(widths[key]), paddingStr)))))); }); return (React.createElement(Box, { flexDirection: "column" }, header, separator, rows)); } //# sourceMappingURL=Table.js.map