@tooee/renderers 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MarkdownView.d.ts +1 -0
- package/dist/MarkdownView.d.ts.map +1 -1
- package/dist/MarkdownView.js +13 -24
- package/dist/MarkdownView.js.map +1 -1
- package/dist/Table.d.ts +7 -6
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +56 -51
- package/dist/Table.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/text-table.d.ts +7 -0
- package/dist/text-table.d.ts.map +1 -0
- package/dist/text-table.js +4 -0
- package/dist/text-table.js.map +1 -0
- package/package.json +2 -2
- package/src/MarkdownView.tsx +26 -38
- package/src/Table.tsx +112 -76
- package/src/index.ts +0 -4
- package/src/text-table.ts +10 -0
package/dist/MarkdownView.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ReactNode, type RefObject } from "react";
|
|
2
2
|
import type { RowDocumentRenderable } from "./RowDocumentRenderable.js";
|
|
3
3
|
import "./row-document.js";
|
|
4
|
+
import "./text-table.js";
|
|
4
5
|
interface MarkdownViewProps {
|
|
5
6
|
content: string;
|
|
6
7
|
showLineNumbers?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownView.d.ts","sourceRoot":"","sources":["../src/MarkdownView.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"MarkdownView.d.ts","sourceRoot":"","sources":["../src/MarkdownView.tsx"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIlF,OAAO,KAAK,EAAE,qBAAqB,EAA8C,MAAM,4BAA4B,CAAA;AACnH,OAAO,mBAAmB,CAAA;AAC1B,OAAO,iBAAiB,CAAA;AAExB,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/C,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,CAAC,EAAE,SAAS,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAA;CACjD;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,eAAsB,EACtB,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,MAAM,GACP,EAAE,iBAAiB,aA+CnB"}
|
package/dist/MarkdownView.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@opentui/react/jsx-runtime";
|
|
2
2
|
import { marked } from "marked";
|
|
3
|
-
import { useEffect, useRef } from "react";
|
|
4
|
-
import { useTerminalDimensions } from "@opentui/react";
|
|
3
|
+
import { useEffect, useMemo, useRef } from "react";
|
|
5
4
|
import { useTheme } from "@tooee/themes";
|
|
6
|
-
import {
|
|
5
|
+
import { bold as boldChunk } from "@opentui/core";
|
|
7
6
|
import "./row-document.js";
|
|
7
|
+
import "./text-table.js";
|
|
8
8
|
export function MarkdownView({ content, showLineNumbers = true, activeBlock, selectedBlocks, matchingBlocks, currentMatchBlock, toggledBlocks, docRef, }) {
|
|
9
9
|
const { theme, syntax } = useTheme();
|
|
10
10
|
const internalRef = useRef(null);
|
|
@@ -138,27 +138,16 @@ function ListItemRenderer({ item, ordered, index, theme, }) {
|
|
|
138
138
|
}
|
|
139
139
|
function MarkdownTableRenderer({ token }) {
|
|
140
140
|
const { theme } = useTheme();
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
});
|
|
151
|
-
const alignments = headers.map((_header, colIdx) => {
|
|
152
|
-
const sampleValues = rowData.slice(0, 10).map((row) => row[colIdx] ?? "");
|
|
153
|
-
const numericCount = sampleValues.filter(isNumeric).length;
|
|
154
|
-
return numericCount > sampleValues.length / 2;
|
|
155
|
-
});
|
|
156
|
-
const topBorder = buildBorderLine(colWidths, "\u250c", "\u252c", "\u2510", "\u2500");
|
|
157
|
-
const headerSep = buildBorderLine(colWidths, "\u251c", "\u253c", "\u2524", "\u2500");
|
|
158
|
-
const bottomBorder = buildBorderLine(colWidths, "\u2514", "\u2534", "\u2518", "\u2500");
|
|
159
|
-
const headerLine = buildDataLine(headers, colWidths, alignments);
|
|
160
|
-
const dataLines = rowData.map((row) => buildDataLine(row, colWidths, alignments));
|
|
161
|
-
return (_jsxs("box", { style: { marginLeft: 1, marginRight: 1, marginBottom: 1, flexDirection: "column" }, children: [_jsx("text", { content: topBorder, style: { fg: theme.border } }), _jsx("text", { content: headerLine, style: { fg: theme.primary } }), _jsx("text", { content: headerSep, style: { fg: theme.border } }), dataLines.map((line, i) => (_jsx("text", { content: line, style: { fg: theme.text } }, i))), _jsx("text", { content: bottomBorder, style: { fg: theme.border } })] }));
|
|
141
|
+
const content = useMemo(() => {
|
|
142
|
+
const headerRow = token.header.map(cell => [
|
|
143
|
+
boldChunk(getPlainText(cell.tokens).trim())
|
|
144
|
+
]);
|
|
145
|
+
const dataRows = token.rows.map(row => row.map(cell => [
|
|
146
|
+
{ __isChunk: true, text: getPlainText(cell.tokens) }
|
|
147
|
+
]));
|
|
148
|
+
return [headerRow, ...dataRows];
|
|
149
|
+
}, [token]);
|
|
150
|
+
return (_jsx("box", { style: { marginLeft: 1, marginRight: 1, marginBottom: 1 }, children: _jsx("text-table", { content: content, wrapMode: "word", columnWidthMode: "content", cellPadding: 0, border: true, borderStyle: "single", borderColor: theme.border, fg: theme.text }) }));
|
|
162
151
|
}
|
|
163
152
|
function HorizontalRule({ theme }) {
|
|
164
153
|
return (_jsx("box", { style: { marginTop: 0, marginBottom: 1, marginLeft: 1, marginRight: 1 }, children: _jsx("text", { style: { fg: theme.markdownHorizontalRule }, content: "─".repeat(40) }) }));
|
package/dist/MarkdownView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownView.js","sourceRoot":"","sources":["../src/MarkdownView.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkdownView.js","sourceRoot":"","sources":["../src/MarkdownView.tsx"],"names":[],"mappings":"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"}
|
package/dist/Table.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface TableProps {
|
|
|
13
13
|
maxColumnWidth?: number;
|
|
14
14
|
/** Number of rows to sample for width calculation (default: 100) */
|
|
15
15
|
sampleSize?: number;
|
|
16
|
+
/** Show line numbers in the gutter (default: true) */
|
|
17
|
+
showLineNumbers?: boolean;
|
|
16
18
|
cursor?: number;
|
|
17
19
|
selectionStart?: number;
|
|
18
20
|
selectionEnd?: number;
|
|
@@ -20,20 +22,19 @@ export interface TableProps {
|
|
|
20
22
|
currentMatchRow?: number;
|
|
21
23
|
toggledRows?: Set<number>;
|
|
22
24
|
docRef?: RefObject<RowDocumentRenderable | null>;
|
|
25
|
+
/** Column width mode: "content" sizes to content (default), "fill" expands to fill available width */
|
|
26
|
+
columnWidthMode?: "content" | "fill";
|
|
23
27
|
}
|
|
24
28
|
declare function isNumeric(value: string): boolean;
|
|
25
29
|
interface ColumnWidthOptions {
|
|
26
30
|
minColumnWidth: number;
|
|
27
31
|
maxColumnWidth: number;
|
|
28
32
|
sampleSize: number;
|
|
33
|
+
columnWidthMode?: "content" | "fill";
|
|
29
34
|
}
|
|
30
35
|
declare function sampleRows(rows: string[][], sampleSize: number): string[][];
|
|
31
36
|
declare function computeColumnWidths(headers: string[], rows: string[][], maxWidth: number, options: ColumnWidthOptions): number[];
|
|
32
|
-
declare function
|
|
33
|
-
|
|
34
|
-
declare function buildBorderLine(widths: number[], left: string, mid: string, right: string, fill: string): string;
|
|
35
|
-
declare function buildDataLine(cells: string[], widths: number[], alignments: boolean[]): string;
|
|
36
|
-
export declare function Table({ columns, rows, maxWidth, minColumnWidth, maxColumnWidth, sampleSize, cursor, selectionStart, selectionEnd, matchingRows, currentMatchRow, toggledRows, docRef, }: TableProps): import("react").ReactNode;
|
|
37
|
-
export { computeColumnWidths, truncate, padCell, isNumeric, buildBorderLine, buildDataLine, sampleRows, };
|
|
37
|
+
export declare function Table({ columns, rows, maxWidth, minColumnWidth, maxColumnWidth, sampleSize, showLineNumbers, cursor, selectionStart, selectionEnd, matchingRows, currentMatchRow, toggledRows, docRef, columnWidthMode, }: TableProps): import("react").ReactNode;
|
|
38
|
+
export { computeColumnWidths, isNumeric, sampleRows, };
|
|
38
39
|
export type { ColumnWidthOptions };
|
|
39
40
|
//# sourceMappingURL=Table.d.ts.map
|
package/dist/Table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../src/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAA8C,MAAM,4BAA4B,CAAA;AACnH,OAAO,mBAAmB,CAAA;AAE1B,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,MAAM,CAAC,EAAE,SAAS,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../src/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAA8C,MAAM,4BAA4B,CAAA;AACnH,OAAO,mBAAmB,CAAA;AAE1B,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,MAAM,CAAC,EAAE,SAAS,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAA;IAChD,sGAAsG;IACtG,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CACrC;AAQD,iBAAS,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzC;AAED,UAAU,kBAAkB;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CACrC;AAED,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CASpE;AAED,iBAAS,mBAAmB,CAC1B,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,kBAAkB,GAC1B,MAAM,EAAE,CA4DV;AA8BD,wBAAgB,KAAK,CAAC,EACpB,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,cAAsC,EACtC,cAAsC,EACtC,UAAgC,EAChC,eAAsB,EACtB,MAAM,EACN,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,WAAW,EACX,MAAM,EACN,eAA2B,GAC5B,EAAE,UAAU,6BA0HZ;AAGD,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,UAAU,GACX,CAAA;AACD,YAAY,EAAE,kBAAkB,EAAE,CAAA"}
|
package/dist/Table.js
CHANGED
|
@@ -4,10 +4,9 @@ import { useTheme } from "@tooee/themes";
|
|
|
4
4
|
import { useEffect, useRef } from "react";
|
|
5
5
|
import "./row-document.js";
|
|
6
6
|
const PADDING = 1;
|
|
7
|
-
const
|
|
8
|
-
const ELLIPSIS = "…";
|
|
7
|
+
const MARGIN = 1; // horizontal margin on each side of the table
|
|
9
8
|
const DEFAULT_MIN_COL_WIDTH = 4;
|
|
10
|
-
const DEFAULT_MAX_COL_WIDTH =
|
|
9
|
+
const DEFAULT_MAX_COL_WIDTH = 80;
|
|
11
10
|
const DEFAULT_SAMPLE_SIZE = 100;
|
|
12
11
|
function isNumeric(value) {
|
|
13
12
|
return /^\s*-?[\d,]+\.?\d*\s*$/.test(value);
|
|
@@ -29,34 +28,40 @@ function computeColumnWidths(headers, rows, maxWidth, options) {
|
|
|
29
28
|
// Sample rows for performance on large tables
|
|
30
29
|
const sampledRows = sampleRows(rows, sampleSize);
|
|
31
30
|
// Calculate natural width for each column (header + content + padding)
|
|
31
|
+
// Use Bun.stringWidth for correct display width with CJK/emoji
|
|
32
32
|
const naturalWidths = headers.map((header, col) => {
|
|
33
|
-
const headerLen = header
|
|
34
|
-
const maxRowLen = sampledRows.reduce((max, row) => Math.max(max, (row[col] ?? "")
|
|
33
|
+
const headerLen = Bun.stringWidth(header);
|
|
34
|
+
const maxRowLen = sampledRows.reduce((max, row) => Math.max(max, Bun.stringWidth(row[col] ?? "")), 0);
|
|
35
35
|
const contentWidth = Math.max(headerLen, maxRowLen);
|
|
36
36
|
// Apply min/max constraints before adding padding
|
|
37
37
|
const constrainedWidth = Math.min(maxColumnWidth, Math.max(minColumnWidth, contentWidth));
|
|
38
38
|
return constrainedWidth + PADDING * 2;
|
|
39
39
|
});
|
|
40
|
-
//
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
// If everything fits, use natural widths
|
|
40
|
+
// No border overhead -- flexbox rows don't have border characters
|
|
41
|
+
const totalNatural = naturalWidths.reduce((a, b) => a + b, 0);
|
|
42
|
+
// If everything fits, use natural widths (or distribute extra space in fill mode)
|
|
44
43
|
if (totalNatural <= maxWidth) {
|
|
44
|
+
if (options.columnWidthMode === "fill" && totalNatural < maxWidth) {
|
|
45
|
+
const extra = maxWidth - totalNatural;
|
|
46
|
+
const perCol = Math.floor(extra / colCount);
|
|
47
|
+
const remainder = extra - perCol * colCount;
|
|
48
|
+
return naturalWidths.map((w, i) => w + perCol + (i < remainder ? 1 : 0));
|
|
49
|
+
}
|
|
45
50
|
return naturalWidths;
|
|
46
51
|
}
|
|
47
|
-
const available = maxWidth
|
|
52
|
+
const available = maxWidth;
|
|
48
53
|
const minColWidthWithPadding = minColumnWidth + PADDING * 2;
|
|
49
54
|
// Extreme case: not even minimum widths fit
|
|
50
|
-
if (
|
|
55
|
+
if (maxWidth <= colCount * minColWidthWithPadding) {
|
|
51
56
|
return naturalWidths.map(() => Math.max(minColWidthWithPadding, Math.floor(available / colCount)));
|
|
52
57
|
}
|
|
53
58
|
// Give compact columns their natural width, distribute rest proportionally
|
|
54
|
-
const compact = naturalWidths.map((w) => w <=
|
|
59
|
+
const compact = naturalWidths.map((w) => w <= 20);
|
|
55
60
|
const compactTotal = naturalWidths.reduce((sum, w, i) => sum + (compact[i] ? w : 0), 0);
|
|
56
61
|
const remaining = available - compactTotal;
|
|
57
62
|
const longTotal = naturalWidths.reduce((sum, w, i) => sum + (compact[i] ? 0 : w), 0);
|
|
58
63
|
if (longTotal === 0 || remaining <= 0) {
|
|
59
|
-
// All compact or no space left
|
|
64
|
+
// All compact or no space left -- distribute evenly
|
|
60
65
|
const total = naturalWidths.reduce((a, b) => a + b, 0);
|
|
61
66
|
return naturalWidths.map((w) => Math.max(minColWidthWithPadding, Math.floor((w / total) * available)));
|
|
62
67
|
}
|
|
@@ -66,34 +71,20 @@ function computeColumnWidths(headers, rows, maxWidth, options) {
|
|
|
66
71
|
return Math.max(minColWidthWithPadding, Math.floor((w / longTotal) * remaining));
|
|
67
72
|
});
|
|
68
73
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
function padCell(text, width, rightAlign) {
|
|
80
|
-
const contentWidth = width - PADDING * 2;
|
|
81
|
-
const truncated = truncate(text, width);
|
|
82
|
-
const padLeft = " ".repeat(PADDING);
|
|
83
|
-
const padRight = " ".repeat(PADDING);
|
|
84
|
-
if (rightAlign) {
|
|
85
|
-
const space = contentWidth - truncated.length;
|
|
86
|
-
return padLeft + " ".repeat(Math.max(0, space)) + truncated + padRight;
|
|
74
|
+
/**
|
|
75
|
+
* Pre-compute gutter width to subtract from available column space.
|
|
76
|
+
* Mirrors RowDocumentRenderable._computeGutterWidth logic.
|
|
77
|
+
*/
|
|
78
|
+
function computeGutterWidth(rowCount, showLineNumbers) {
|
|
79
|
+
let width = 0;
|
|
80
|
+
if (showLineNumbers) {
|
|
81
|
+
// lineNumberStart defaults to 1, so max line number = rowCount
|
|
82
|
+
const maxLineNum = rowCount;
|
|
83
|
+
width += Math.max(String(maxLineNum).length, 1);
|
|
87
84
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
function buildBorderLine(widths, left, mid, right, fill) {
|
|
92
|
-
return left + widths.map((w) => fill.repeat(w)).join(mid) + right;
|
|
93
|
-
}
|
|
94
|
-
function buildDataLine(cells, widths, alignments) {
|
|
95
|
-
const parts = cells.map((cell, i) => padCell(cell, widths[i], alignments[i]));
|
|
96
|
-
return "│" + parts.join("│") + "│";
|
|
85
|
+
width += 1; // signColumnWidth
|
|
86
|
+
width += 1; // gutterPaddingRight (default)
|
|
87
|
+
return width;
|
|
97
88
|
}
|
|
98
89
|
function formatCellValue(value) {
|
|
99
90
|
if (value == null)
|
|
@@ -111,18 +102,21 @@ function formatCellValue(value) {
|
|
|
111
102
|
return String(value);
|
|
112
103
|
}
|
|
113
104
|
}
|
|
114
|
-
export function Table({ columns, rows, maxWidth, minColumnWidth = DEFAULT_MIN_COL_WIDTH, maxColumnWidth = DEFAULT_MAX_COL_WIDTH, sampleSize = DEFAULT_SAMPLE_SIZE, cursor, selectionStart, selectionEnd, matchingRows, currentMatchRow, toggledRows, docRef, }) {
|
|
105
|
+
export function Table({ columns, rows, maxWidth, minColumnWidth = DEFAULT_MIN_COL_WIDTH, maxColumnWidth = DEFAULT_MAX_COL_WIDTH, sampleSize = DEFAULT_SAMPLE_SIZE, showLineNumbers = true, cursor, selectionStart, selectionEnd, matchingRows, currentMatchRow, toggledRows, docRef, columnWidthMode = "content", }) {
|
|
115
106
|
const { theme } = useTheme();
|
|
116
107
|
const { width: terminalWidth } = useTerminalDimensions();
|
|
117
|
-
//
|
|
118
|
-
const
|
|
108
|
+
// Compute available content width: start with total space, subtract margins and gutter
|
|
109
|
+
const gutterWidth = computeGutterWidth(rows.length, showLineNumbers);
|
|
110
|
+
const effectiveMaxWidth = Math.max(0, (maxWidth ?? terminalWidth) - MARGIN * 2 - gutterWidth);
|
|
119
111
|
const headers = columns.map((column) => column.header ?? column.key);
|
|
120
112
|
const normalizedRows = rows.map((row) => columns.map((column) => formatCellValue(row[column.key])));
|
|
121
113
|
const colWidths = computeColumnWidths(headers, normalizedRows, effectiveMaxWidth, {
|
|
122
114
|
minColumnWidth,
|
|
123
115
|
maxColumnWidth,
|
|
124
116
|
sampleSize,
|
|
117
|
+
columnWidthMode,
|
|
125
118
|
});
|
|
119
|
+
// Detect right-aligned columns: explicit align prop or auto-detect numeric
|
|
126
120
|
const alignments = columns.map((column, colIdx) => {
|
|
127
121
|
if (column.align === "right")
|
|
128
122
|
return true;
|
|
@@ -132,14 +126,14 @@ export function Table({ columns, rows, maxWidth, minColumnWidth = DEFAULT_MIN_CO
|
|
|
132
126
|
const numericCount = sampleValues.filter(isNumeric).length;
|
|
133
127
|
return numericCount > sampleValues.length / 2;
|
|
134
128
|
});
|
|
135
|
-
const topBorder = buildBorderLine(colWidths, "┌", "┬", "┐", "─");
|
|
136
|
-
const headerSep = buildBorderLine(colWidths, "├", "┼", "┤", "─");
|
|
137
|
-
const bottomBorder = buildBorderLine(colWidths, "└", "┴", "┘", "─");
|
|
138
|
-
const headerLine = buildDataLine(headers, colWidths, alignments);
|
|
139
|
-
const dataLines = normalizedRows.map((row) => buildDataLine(row, colWidths, alignments));
|
|
140
129
|
const internalRef = useRef(null);
|
|
141
130
|
const effectiveRef = docRef ?? internalRef;
|
|
142
131
|
const palette = {
|
|
132
|
+
gutterFg: theme.textMuted,
|
|
133
|
+
gutterBg: theme.backgroundElement,
|
|
134
|
+
cursorSignFg: theme.primary,
|
|
135
|
+
matchSignFg: theme.warning,
|
|
136
|
+
currentMatchSignFg: theme.primary,
|
|
143
137
|
cursorBg: theme.cursorLine,
|
|
144
138
|
selectionBg: theme.selection,
|
|
145
139
|
matchBg: theme.warning,
|
|
@@ -158,8 +152,19 @@ export function Table({ columns, rows, maxWidth, minColumnWidth = DEFAULT_MIN_CO
|
|
|
158
152
|
};
|
|
159
153
|
effectiveRef.current?.setDecorations(decorations);
|
|
160
154
|
}, [cursor, selectionStart, selectionEnd, matchingRows, currentMatchRow, toggledRows]);
|
|
161
|
-
return (_jsxs("
|
|
155
|
+
return (_jsxs("box", { style: { flexDirection: "column", flexGrow: 1, marginLeft: MARGIN, marginRight: MARGIN, marginBottom: MARGIN }, children: [_jsx("box", { style: { flexDirection: "row", flexShrink: 0, paddingLeft: gutterWidth }, children: headers.map((h, i) => (_jsx("text", { content: h, style: { width: colWidths[i], paddingLeft: PADDING, paddingRight: PADDING }, fg: theme.primary }, i))) }), _jsx("box", { style: { flexDirection: "row", flexShrink: 0, paddingLeft: gutterWidth }, children: colWidths.map((w, i) => (_jsx("text", { content: "\u2500".repeat(w - PADDING * 2), style: { width: w, paddingLeft: PADDING, paddingRight: PADDING }, fg: theme.border }, i))) }), _jsx("row-document", { ref: effectiveRef, mode: "multi", rowChildOffset: 0, showGutter: true, showLineNumbers: showLineNumbers, signColumnWidth: 1, palette: palette, style: { flexGrow: 1 }, children: normalizedRows.map((row, i) => (_jsx("box", { style: { flexDirection: "row" }, children: row.map((cell, j) => {
|
|
156
|
+
const contentWidth = colWidths[j] - PADDING * 2;
|
|
157
|
+
const cellWidth = Bun.stringWidth(cell);
|
|
158
|
+
const displayCell = alignments[j] && cellWidth <= contentWidth
|
|
159
|
+
? " ".repeat(contentWidth - cellWidth) + cell
|
|
160
|
+
: cell;
|
|
161
|
+
return (_jsx("text", { content: displayCell, wrapMode: "word", style: {
|
|
162
|
+
width: colWidths[j],
|
|
163
|
+
paddingLeft: PADDING,
|
|
164
|
+
paddingRight: PADDING,
|
|
165
|
+
}, fg: theme.text }, j));
|
|
166
|
+
}) }, i))) })] }));
|
|
162
167
|
}
|
|
163
|
-
// Exported for testing
|
|
164
|
-
export { computeColumnWidths,
|
|
168
|
+
// Exported for testing and MarkdownView
|
|
169
|
+
export { computeColumnWidths, isNumeric, sampleRows, };
|
|
165
170
|
//# sourceMappingURL=Table.js.map
|
package/dist/Table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../src/Table.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAA;AAGzD,OAAO,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../src/Table.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAA;AAGzD,OAAO,mBAAmB,CAAA;AA0B1B,MAAM,OAAO,GAAG,CAAC,CAAA;AACjB,MAAM,MAAM,GAAG,CAAC,CAAA,CAAC,8CAA8C;AAC/D,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAC/B,MAAM,qBAAqB,GAAG,EAAE,CAAA;AAChC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAE/B,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC7C,CAAC;AASD,SAAS,UAAU,CAAC,IAAgB,EAAE,UAAkB;IACtD,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU;QAAE,OAAO,IAAI,CAAA;IAC1C,2DAA2D;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;IACrC,MAAM,OAAO,GAAe,EAAE,CAAA;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAiB,EACjB,IAAgB,EAChB,QAAgB,EAChB,OAA2B;IAE3B,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAA;IAE/B,8CAA8C;IAC9C,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAEhD,uEAAuE;IACvE,+DAA+D;IAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAChD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QACzC,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrG,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACnD,kDAAkD;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAA;QACzF,OAAO,gBAAgB,GAAG,OAAO,GAAG,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,kEAAkE;IAClE,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAE7D,kFAAkF;IAClF,IAAI,YAAY,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,eAAe,KAAK,MAAM,IAAI,YAAY,GAAG,QAAQ,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAA;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAA;YAC3C,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;YAC3C,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1E,CAAC;QACD,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAA;IAC1B,MAAM,sBAAsB,GAAG,cAAc,GAAG,OAAO,GAAG,CAAC,CAAA;IAE3D,4CAA4C;IAC5C,IAAI,QAAQ,IAAI,QAAQ,GAAG,sBAAsB,EAAE,CAAC;QAClD,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAC5B,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CACnE,CAAA;IACH,CAAC;IAED,2EAA2E;IAC3E,MAAM,OAAO,GAAc,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5D,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACvF,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,CAAA;IAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAEpF,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACtC,oDAAoD;QACpD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACtD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7B,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CACtE,CAAA;IACH,CAAC;IAED,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAA;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;IAClF,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,QAAgB,EAAE,eAAwB;IACpE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,eAAe,EAAE,CAAC;QACpB,+DAA+D;QAC/D,MAAM,UAAU,GAAG,QAAQ,CAAA;QAC3B,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,CAAC;IACD,KAAK,IAAI,CAAC,CAAA,CAAC,kBAAkB;IAC7B,KAAK,IAAI,CAAC,CAAA,CAAC,+BAA+B;IAC1C,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAA;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACjF,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;IACrD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EACpB,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,cAAc,GAAG,qBAAqB,EACtC,cAAc,GAAG,qBAAqB,EACtC,UAAU,GAAG,mBAAmB,EAChC,eAAe,GAAG,IAAI,EACtB,MAAM,EACN,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,WAAW,EACX,MAAM,EACN,eAAe,GAAG,SAAS,GAChB;IACX,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAA;IAC5B,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,qBAAqB,EAAE,CAAA;IAExD,uFAAuF;IACvF,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,IAAI,aAAa,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAA;IAE7F,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;IACpE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACtC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAC1D,CAAA;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE;QAChF,cAAc;QACd,cAAc;QACd,UAAU;QACV,eAAe;KAChB,CAAC,CAAA;IAEF,2EAA2E;IAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAChD,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QACzC,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,KAAK,CAAA;QACzC,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAChF,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAA;QAC1D,OAAO,YAAY,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IACvD,MAAM,YAAY,GAAG,MAAM,IAAI,WAAW,CAAA;IAE1C,MAAM,OAAO,GAAuB;QAClC,QAAQ,EAAE,KAAK,CAAC,SAAS;QACzB,QAAQ,EAAE,KAAK,CAAC,iBAAiB;QACjC,YAAY,EAAE,KAAK,CAAC,OAAO;QAC3B,WAAW,EAAE,KAAK,CAAC,OAAO;QAC1B,kBAAkB,EAAE,KAAK,CAAC,OAAO;QACjC,QAAQ,EAAE,KAAK,CAAC,UAAU;QAC1B,WAAW,EAAE,KAAK,CAAC,SAAS;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,cAAc,EAAE,KAAK,CAAC,OAAO;QAC7B,SAAS,EAAE,KAAK,CAAC,eAAe;KACjC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAA2B;YAC1C,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,cAAc,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI;gBACvD,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,EAAE;gBAC9C,CAAC,CAAC,IAAI;YACR,YAAY,EAAE,YAAY;YAC1B,eAAe,EAAE,eAAe;YAChC,WAAW,EAAE,WAAW;SACzB,CAAA;QACD,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,CAAA;IACnD,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAA;IAEtF,OAAO,CACL,eAAK,KAAK,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAEjH,cAAK,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,YAC1E,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,eAEE,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,EAC3E,EAAE,EAAE,KAAK,CAAC,OAAO,IAHZ,CAAC,CAIN,CACH,CAAC,GACE,EAGN,cAAK,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,YAC1E,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACvB,eAEE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,EACzC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,EAChE,EAAE,EAAE,KAAK,CAAC,MAAM,IAHX,CAAC,CAIN,CACH,CAAC,GACE,EAGN,uBACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,OAAO,EACZ,cAAc,EAAE,CAAC,EACjB,UAAU,EAAE,IAAI,EAChB,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,YAErB,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAC9B,cAAa,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,YACzC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;wBACnB,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAA;wBAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;wBACvC,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,SAAS,IAAI,YAAY;4BAC5D,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,IAAI;4BAC7C,CAAC,CAAC,IAAI,CAAA;wBACR,OAAO,CACL,eAEE,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAC,MAAM,EACf,KAAK,EAAE;gCACL,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;gCACnB,WAAW,EAAE,OAAO;gCACpB,YAAY,EAAE,OAAO;6BACtB,EACD,EAAE,EAAE,KAAK,CAAC,IAAI,IART,CAAC,CASN,CACH,CAAA;oBACH,CAAC,CAAC,IApBM,CAAC,CAqBL,CACP,CAAC,GACW,IACX,CACP,CAAA;AACH,CAAC;AAED,wCAAwC;AACxC,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,UAAU,GACX,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { MarkdownView } from "./MarkdownView.js";
|
|
2
2
|
export { CodeView } from "./CodeView.js";
|
|
3
3
|
export { ImageView } from "./ImageView.js";
|
|
4
|
-
export { Table, computeColumnWidths,
|
|
4
|
+
export { Table, computeColumnWidths, isNumeric, sampleRows, } from "./Table.js";
|
|
5
5
|
export type { TableProps, ColumnWidthOptions } from "./Table.js";
|
|
6
6
|
export type { ColumnDef, TableRow } from "./table-types.js";
|
|
7
7
|
export { CommandPalette } from "./CommandPalette.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACL,KAAK,EACL,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACL,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAChE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACrF,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,4BAA4B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { MarkdownView } from "./MarkdownView.js";
|
|
2
2
|
export { CodeView } from "./CodeView.js";
|
|
3
3
|
export { ImageView } from "./ImageView.js";
|
|
4
|
-
export { Table, computeColumnWidths,
|
|
4
|
+
export { Table, computeColumnWidths, isNumeric, sampleRows, } from "./Table.js";
|
|
5
5
|
export { CommandPalette } from "./CommandPalette.js";
|
|
6
6
|
export { parseCSV, parseTSV, parseJSON, parseAuto, detectFormat } from "./parsers.js";
|
|
7
7
|
export { RowDocumentRenderable } from "./RowDocumentRenderable.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACL,KAAK,EACL,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACL,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAErF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-table.d.ts","sourceRoot":"","sources":["../src/text-table.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAInD,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,iBAAiB;QACzB,YAAY,EAAE,OAAO,mBAAmB,CAAA;KACzC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-table.js","sourceRoot":"","sources":["../src/text-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAEnD,MAAM,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tooee/renderers",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "Content renderers (markdown, code, image, table) for Tooee",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Gareth Andrew",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"typecheck": "tsc --noEmit"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@tooee/themes": "0.1.
|
|
40
|
+
"@tooee/themes": "0.1.8",
|
|
41
41
|
"marked": "^16.3.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
package/src/MarkdownView.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { marked, type Token, type Tokens } from "marked"
|
|
2
|
-
import { useEffect, useRef, type ReactNode, type RefObject } from "react"
|
|
3
|
-
import { useTerminalDimensions } from "@opentui/react"
|
|
2
|
+
import { useEffect, useMemo, useRef, type ReactNode, type RefObject } from "react"
|
|
4
3
|
import { useTheme, type ResolvedTheme } from "@tooee/themes"
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
4
|
+
import { bold as boldChunk } from "@opentui/core"
|
|
5
|
+
import type { SyntaxStyle, TextTableContent, TextTableCellContent } from "@opentui/core"
|
|
7
6
|
import type { RowDocumentRenderable, RowDocumentPalette, RowDocumentDecorations } from "./RowDocumentRenderable.js"
|
|
8
7
|
import "./row-document.js"
|
|
8
|
+
import "./text-table.js"
|
|
9
9
|
|
|
10
10
|
interface MarkdownViewProps {
|
|
11
11
|
content: string
|
|
@@ -277,43 +277,31 @@ function ListItemRenderer({
|
|
|
277
277
|
|
|
278
278
|
function MarkdownTableRenderer({ token }: { token: Tokens.Table }) {
|
|
279
279
|
const { theme } = useTheme()
|
|
280
|
-
const { width: terminalWidth } = useTerminalDimensions()
|
|
281
280
|
|
|
282
|
-
const
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
sampleSize: 100,
|
|
294
|
-
})
|
|
295
|
-
|
|
296
|
-
const alignments = headers.map((_header, colIdx) => {
|
|
297
|
-
const sampleValues = rowData.slice(0, 10).map((row) => row[colIdx] ?? "")
|
|
298
|
-
const numericCount = sampleValues.filter(isNumeric).length
|
|
299
|
-
return numericCount > sampleValues.length / 2
|
|
300
|
-
})
|
|
301
|
-
|
|
302
|
-
const topBorder = buildBorderLine(colWidths, "\u250c", "\u252c", "\u2510", "\u2500")
|
|
303
|
-
const headerSep = buildBorderLine(colWidths, "\u251c", "\u253c", "\u2524", "\u2500")
|
|
304
|
-
const bottomBorder = buildBorderLine(colWidths, "\u2514", "\u2534", "\u2518", "\u2500")
|
|
305
|
-
const headerLine = buildDataLine(headers, colWidths, alignments)
|
|
306
|
-
const dataLines = rowData.map((row) => buildDataLine(row, colWidths, alignments))
|
|
281
|
+
const content: TextTableContent = useMemo(() => {
|
|
282
|
+
const headerRow: TextTableCellContent[] = token.header.map(cell => [
|
|
283
|
+
boldChunk(getPlainText(cell.tokens).trim())
|
|
284
|
+
])
|
|
285
|
+
const dataRows = token.rows.map(row =>
|
|
286
|
+
row.map(cell => [
|
|
287
|
+
{ __isChunk: true as const, text: getPlainText(cell.tokens) }
|
|
288
|
+
] as TextTableCellContent)
|
|
289
|
+
)
|
|
290
|
+
return [headerRow, ...dataRows]
|
|
291
|
+
}, [token])
|
|
307
292
|
|
|
308
293
|
return (
|
|
309
|
-
<box style={{ marginLeft: 1, marginRight: 1, marginBottom: 1
|
|
310
|
-
<text
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
294
|
+
<box style={{ marginLeft: 1, marginRight: 1, marginBottom: 1 }}>
|
|
295
|
+
<text-table
|
|
296
|
+
content={content}
|
|
297
|
+
wrapMode="word"
|
|
298
|
+
columnWidthMode="content"
|
|
299
|
+
cellPadding={0}
|
|
300
|
+
border={true}
|
|
301
|
+
borderStyle="single"
|
|
302
|
+
borderColor={theme.border}
|
|
303
|
+
fg={theme.text}
|
|
304
|
+
/>
|
|
317
305
|
</box>
|
|
318
306
|
)
|
|
319
307
|
}
|
package/src/Table.tsx
CHANGED
|
@@ -16,6 +16,8 @@ export interface TableProps {
|
|
|
16
16
|
maxColumnWidth?: number
|
|
17
17
|
/** Number of rows to sample for width calculation (default: 100) */
|
|
18
18
|
sampleSize?: number
|
|
19
|
+
/** Show line numbers in the gutter (default: true) */
|
|
20
|
+
showLineNumbers?: boolean
|
|
19
21
|
cursor?: number
|
|
20
22
|
selectionStart?: number
|
|
21
23
|
selectionEnd?: number
|
|
@@ -23,13 +25,14 @@ export interface TableProps {
|
|
|
23
25
|
currentMatchRow?: number
|
|
24
26
|
toggledRows?: Set<number>
|
|
25
27
|
docRef?: RefObject<RowDocumentRenderable | null>
|
|
28
|
+
/** Column width mode: "content" sizes to content (default), "fill" expands to fill available width */
|
|
29
|
+
columnWidthMode?: "content" | "fill"
|
|
26
30
|
}
|
|
27
31
|
|
|
28
32
|
const PADDING = 1
|
|
29
|
-
const
|
|
30
|
-
const ELLIPSIS = "…"
|
|
33
|
+
const MARGIN = 1 // horizontal margin on each side of the table
|
|
31
34
|
const DEFAULT_MIN_COL_WIDTH = 4
|
|
32
|
-
const DEFAULT_MAX_COL_WIDTH =
|
|
35
|
+
const DEFAULT_MAX_COL_WIDTH = 80
|
|
33
36
|
const DEFAULT_SAMPLE_SIZE = 100
|
|
34
37
|
|
|
35
38
|
function isNumeric(value: string): boolean {
|
|
@@ -40,6 +43,7 @@ interface ColumnWidthOptions {
|
|
|
40
43
|
minColumnWidth: number
|
|
41
44
|
maxColumnWidth: number
|
|
42
45
|
sampleSize: number
|
|
46
|
+
columnWidthMode?: "content" | "fill"
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
function sampleRows(rows: string[][], sampleSize: number): string[][] {
|
|
@@ -66,42 +70,48 @@ function computeColumnWidths(
|
|
|
66
70
|
const sampledRows = sampleRows(rows, sampleSize)
|
|
67
71
|
|
|
68
72
|
// Calculate natural width for each column (header + content + padding)
|
|
73
|
+
// Use Bun.stringWidth for correct display width with CJK/emoji
|
|
69
74
|
const naturalWidths = headers.map((header, col) => {
|
|
70
|
-
const headerLen = header
|
|
71
|
-
const maxRowLen = sampledRows.reduce((max, row) => Math.max(max, (row[col] ?? "")
|
|
75
|
+
const headerLen = Bun.stringWidth(header)
|
|
76
|
+
const maxRowLen = sampledRows.reduce((max, row) => Math.max(max, Bun.stringWidth(row[col] ?? "")), 0)
|
|
72
77
|
const contentWidth = Math.max(headerLen, maxRowLen)
|
|
73
78
|
// Apply min/max constraints before adding padding
|
|
74
79
|
const constrainedWidth = Math.min(maxColumnWidth, Math.max(minColumnWidth, contentWidth))
|
|
75
80
|
return constrainedWidth + PADDING * 2
|
|
76
81
|
})
|
|
77
82
|
|
|
78
|
-
//
|
|
79
|
-
const
|
|
80
|
-
const totalNatural = naturalWidths.reduce((a, b) => a + b, 0) + borderOverhead
|
|
83
|
+
// No border overhead -- flexbox rows don't have border characters
|
|
84
|
+
const totalNatural = naturalWidths.reduce((a, b) => a + b, 0)
|
|
81
85
|
|
|
82
|
-
// If everything fits, use natural widths
|
|
86
|
+
// If everything fits, use natural widths (or distribute extra space in fill mode)
|
|
83
87
|
if (totalNatural <= maxWidth) {
|
|
88
|
+
if (options.columnWidthMode === "fill" && totalNatural < maxWidth) {
|
|
89
|
+
const extra = maxWidth - totalNatural
|
|
90
|
+
const perCol = Math.floor(extra / colCount)
|
|
91
|
+
const remainder = extra - perCol * colCount
|
|
92
|
+
return naturalWidths.map((w, i) => w + perCol + (i < remainder ? 1 : 0))
|
|
93
|
+
}
|
|
84
94
|
return naturalWidths
|
|
85
95
|
}
|
|
86
96
|
|
|
87
|
-
const available = maxWidth
|
|
97
|
+
const available = maxWidth
|
|
88
98
|
const minColWidthWithPadding = minColumnWidth + PADDING * 2
|
|
89
99
|
|
|
90
100
|
// Extreme case: not even minimum widths fit
|
|
91
|
-
if (
|
|
101
|
+
if (maxWidth <= colCount * minColWidthWithPadding) {
|
|
92
102
|
return naturalWidths.map(() =>
|
|
93
103
|
Math.max(minColWidthWithPadding, Math.floor(available / colCount)),
|
|
94
104
|
)
|
|
95
105
|
}
|
|
96
106
|
|
|
97
107
|
// Give compact columns their natural width, distribute rest proportionally
|
|
98
|
-
const compact: boolean[] = naturalWidths.map((w) => w <=
|
|
108
|
+
const compact: boolean[] = naturalWidths.map((w) => w <= 20)
|
|
99
109
|
const compactTotal = naturalWidths.reduce((sum, w, i) => sum + (compact[i] ? w : 0), 0)
|
|
100
110
|
const remaining = available - compactTotal
|
|
101
111
|
const longTotal = naturalWidths.reduce((sum, w, i) => sum + (compact[i] ? 0 : w), 0)
|
|
102
112
|
|
|
103
113
|
if (longTotal === 0 || remaining <= 0) {
|
|
104
|
-
// All compact or no space left
|
|
114
|
+
// All compact or no space left -- distribute evenly
|
|
105
115
|
const total = naturalWidths.reduce((a, b) => a + b, 0)
|
|
106
116
|
return naturalWidths.map((w) =>
|
|
107
117
|
Math.max(minColWidthWithPadding, Math.floor((w / total) * available)),
|
|
@@ -114,40 +124,20 @@ function computeColumnWidths(
|
|
|
114
124
|
})
|
|
115
125
|
}
|
|
116
126
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const truncated = truncate(text, width)
|
|
128
|
-
const padLeft = " ".repeat(PADDING)
|
|
129
|
-
const padRight = " ".repeat(PADDING)
|
|
130
|
-
if (rightAlign) {
|
|
131
|
-
const space = contentWidth - truncated.length
|
|
132
|
-
return padLeft + " ".repeat(Math.max(0, space)) + truncated + padRight
|
|
127
|
+
/**
|
|
128
|
+
* Pre-compute gutter width to subtract from available column space.
|
|
129
|
+
* Mirrors RowDocumentRenderable._computeGutterWidth logic.
|
|
130
|
+
*/
|
|
131
|
+
function computeGutterWidth(rowCount: number, showLineNumbers: boolean): number {
|
|
132
|
+
let width = 0
|
|
133
|
+
if (showLineNumbers) {
|
|
134
|
+
// lineNumberStart defaults to 1, so max line number = rowCount
|
|
135
|
+
const maxLineNum = rowCount
|
|
136
|
+
width += Math.max(String(maxLineNum).length, 1)
|
|
133
137
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
function buildBorderLine(
|
|
139
|
-
widths: number[],
|
|
140
|
-
left: string,
|
|
141
|
-
mid: string,
|
|
142
|
-
right: string,
|
|
143
|
-
fill: string,
|
|
144
|
-
): string {
|
|
145
|
-
return left + widths.map((w) => fill.repeat(w)).join(mid) + right
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
function buildDataLine(cells: string[], widths: number[], alignments: boolean[]): string {
|
|
149
|
-
const parts = cells.map((cell, i) => padCell(cell, widths[i], alignments[i]))
|
|
150
|
-
return "│" + parts.join("│") + "│"
|
|
138
|
+
width += 1 // signColumnWidth
|
|
139
|
+
width += 1 // gutterPaddingRight (default)
|
|
140
|
+
return width
|
|
151
141
|
}
|
|
152
142
|
|
|
153
143
|
function formatCellValue(value: unknown): string {
|
|
@@ -169,6 +159,7 @@ export function Table({
|
|
|
169
159
|
minColumnWidth = DEFAULT_MIN_COL_WIDTH,
|
|
170
160
|
maxColumnWidth = DEFAULT_MAX_COL_WIDTH,
|
|
171
161
|
sampleSize = DEFAULT_SAMPLE_SIZE,
|
|
162
|
+
showLineNumbers = true,
|
|
172
163
|
cursor,
|
|
173
164
|
selectionStart,
|
|
174
165
|
selectionEnd,
|
|
@@ -176,12 +167,14 @@ export function Table({
|
|
|
176
167
|
currentMatchRow,
|
|
177
168
|
toggledRows,
|
|
178
169
|
docRef,
|
|
170
|
+
columnWidthMode = "content",
|
|
179
171
|
}: TableProps) {
|
|
180
172
|
const { theme } = useTheme()
|
|
181
173
|
const { width: terminalWidth } = useTerminalDimensions()
|
|
182
174
|
|
|
183
|
-
//
|
|
184
|
-
const
|
|
175
|
+
// Compute available content width: start with total space, subtract margins and gutter
|
|
176
|
+
const gutterWidth = computeGutterWidth(rows.length, showLineNumbers)
|
|
177
|
+
const effectiveMaxWidth = Math.max(0, (maxWidth ?? terminalWidth) - MARGIN * 2 - gutterWidth)
|
|
185
178
|
|
|
186
179
|
const headers = columns.map((column) => column.header ?? column.key)
|
|
187
180
|
const normalizedRows = rows.map((row) =>
|
|
@@ -192,7 +185,10 @@ export function Table({
|
|
|
192
185
|
minColumnWidth,
|
|
193
186
|
maxColumnWidth,
|
|
194
187
|
sampleSize,
|
|
188
|
+
columnWidthMode,
|
|
195
189
|
})
|
|
190
|
+
|
|
191
|
+
// Detect right-aligned columns: explicit align prop or auto-detect numeric
|
|
196
192
|
const alignments = columns.map((column, colIdx) => {
|
|
197
193
|
if (column.align === "right") return true
|
|
198
194
|
if (column.align === "left") return false
|
|
@@ -201,17 +197,15 @@ export function Table({
|
|
|
201
197
|
return numericCount > sampleValues.length / 2
|
|
202
198
|
})
|
|
203
199
|
|
|
204
|
-
const topBorder = buildBorderLine(colWidths, "┌", "┬", "┐", "─")
|
|
205
|
-
const headerSep = buildBorderLine(colWidths, "├", "┼", "┤", "─")
|
|
206
|
-
const bottomBorder = buildBorderLine(colWidths, "└", "┴", "┘", "─")
|
|
207
|
-
|
|
208
|
-
const headerLine = buildDataLine(headers, colWidths, alignments)
|
|
209
|
-
const dataLines = normalizedRows.map((row) => buildDataLine(row, colWidths, alignments))
|
|
210
|
-
|
|
211
200
|
const internalRef = useRef<RowDocumentRenderable>(null)
|
|
212
201
|
const effectiveRef = docRef ?? internalRef
|
|
213
202
|
|
|
214
203
|
const palette: RowDocumentPalette = {
|
|
204
|
+
gutterFg: theme.textMuted,
|
|
205
|
+
gutterBg: theme.backgroundElement,
|
|
206
|
+
cursorSignFg: theme.primary,
|
|
207
|
+
matchSignFg: theme.warning,
|
|
208
|
+
currentMatchSignFg: theme.primary,
|
|
215
209
|
cursorBg: theme.cursorLine,
|
|
216
210
|
selectionBg: theme.selection,
|
|
217
211
|
matchBg: theme.warning,
|
|
@@ -233,33 +227,75 @@ export function Table({
|
|
|
233
227
|
}, [cursor, selectionStart, selectionEnd, matchingRows, currentMatchRow, toggledRows])
|
|
234
228
|
|
|
235
229
|
return (
|
|
236
|
-
<
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
<
|
|
251
|
-
|
|
230
|
+
<box style={{ flexDirection: "column", flexGrow: 1, marginLeft: MARGIN, marginRight: MARGIN, marginBottom: MARGIN }}>
|
|
231
|
+
{/* Fixed header row — outside row-document so it stays visible */}
|
|
232
|
+
<box style={{ flexDirection: "row", flexShrink: 0, paddingLeft: gutterWidth }}>
|
|
233
|
+
{headers.map((h, i) => (
|
|
234
|
+
<text
|
|
235
|
+
key={i}
|
|
236
|
+
content={h}
|
|
237
|
+
style={{ width: colWidths[i], paddingLeft: PADDING, paddingRight: PADDING }}
|
|
238
|
+
fg={theme.primary}
|
|
239
|
+
/>
|
|
240
|
+
))}
|
|
241
|
+
</box>
|
|
242
|
+
|
|
243
|
+
{/* Fixed header underline */}
|
|
244
|
+
<box style={{ flexDirection: "row", flexShrink: 0, paddingLeft: gutterWidth }}>
|
|
245
|
+
{colWidths.map((w, i) => (
|
|
246
|
+
<text
|
|
247
|
+
key={i}
|
|
248
|
+
content={"\u2500".repeat(w - PADDING * 2)}
|
|
249
|
+
style={{ width: w, paddingLeft: PADDING, paddingRight: PADDING }}
|
|
250
|
+
fg={theme.border}
|
|
251
|
+
/>
|
|
252
|
+
))}
|
|
253
|
+
</box>
|
|
254
|
+
|
|
255
|
+
{/* Scrollable data rows */}
|
|
256
|
+
<row-document
|
|
257
|
+
ref={effectiveRef}
|
|
258
|
+
mode="multi"
|
|
259
|
+
rowChildOffset={0}
|
|
260
|
+
showGutter={true}
|
|
261
|
+
showLineNumbers={showLineNumbers}
|
|
262
|
+
signColumnWidth={1}
|
|
263
|
+
palette={palette}
|
|
264
|
+
style={{ flexGrow: 1 }}
|
|
265
|
+
>
|
|
266
|
+
{normalizedRows.map((row, i) => (
|
|
267
|
+
<box key={i} style={{ flexDirection: "row" }}>
|
|
268
|
+
{row.map((cell, j) => {
|
|
269
|
+
const contentWidth = colWidths[j] - PADDING * 2
|
|
270
|
+
const cellWidth = Bun.stringWidth(cell)
|
|
271
|
+
const displayCell = alignments[j] && cellWidth <= contentWidth
|
|
272
|
+
? " ".repeat(contentWidth - cellWidth) + cell
|
|
273
|
+
: cell
|
|
274
|
+
return (
|
|
275
|
+
<text
|
|
276
|
+
key={j}
|
|
277
|
+
content={displayCell}
|
|
278
|
+
wrapMode="word"
|
|
279
|
+
style={{
|
|
280
|
+
width: colWidths[j],
|
|
281
|
+
paddingLeft: PADDING,
|
|
282
|
+
paddingRight: PADDING,
|
|
283
|
+
}}
|
|
284
|
+
fg={theme.text}
|
|
285
|
+
/>
|
|
286
|
+
)
|
|
287
|
+
})}
|
|
288
|
+
</box>
|
|
289
|
+
))}
|
|
290
|
+
</row-document>
|
|
291
|
+
</box>
|
|
252
292
|
)
|
|
253
293
|
}
|
|
254
294
|
|
|
255
|
-
// Exported for testing
|
|
295
|
+
// Exported for testing and MarkdownView
|
|
256
296
|
export {
|
|
257
297
|
computeColumnWidths,
|
|
258
|
-
truncate,
|
|
259
|
-
padCell,
|
|
260
298
|
isNumeric,
|
|
261
|
-
buildBorderLine,
|
|
262
|
-
buildDataLine,
|
|
263
299
|
sampleRows,
|
|
264
300
|
}
|
|
265
301
|
export type { ColumnWidthOptions }
|
package/src/index.ts
CHANGED
|
@@ -4,11 +4,7 @@ export { ImageView } from "./ImageView.js"
|
|
|
4
4
|
export {
|
|
5
5
|
Table,
|
|
6
6
|
computeColumnWidths,
|
|
7
|
-
truncate,
|
|
8
|
-
padCell,
|
|
9
7
|
isNumeric,
|
|
10
|
-
buildBorderLine,
|
|
11
|
-
buildDataLine,
|
|
12
8
|
sampleRows,
|
|
13
9
|
} from "./Table.js"
|
|
14
10
|
export type { TableProps, ColumnWidthOptions } from "./Table.js"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { extend } from "@opentui/react"
|
|
2
|
+
import { TextTableRenderable } from "@opentui/core"
|
|
3
|
+
|
|
4
|
+
extend({ "text-table": TextTableRenderable })
|
|
5
|
+
|
|
6
|
+
declare module "@opentui/react" {
|
|
7
|
+
interface OpenTUIComponents {
|
|
8
|
+
"text-table": typeof TextTableRenderable
|
|
9
|
+
}
|
|
10
|
+
}
|