@teaui/core 1.6.8 → 1.7.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.
Files changed (91) hide show
  1. package/.dist/Screen.d.ts +4 -5
  2. package/.dist/Screen.js +4 -6
  3. package/.dist/Screen.js.map +1 -1
  4. package/.dist/Viewport.d.ts +6 -1
  5. package/.dist/Viewport.js +6 -2
  6. package/.dist/Viewport.js.map +1 -1
  7. package/.dist/components/Accordion.js +1 -1
  8. package/.dist/components/Accordion.js.map +1 -1
  9. package/.dist/components/Breadcrumb.d.ts +93 -0
  10. package/.dist/components/Breadcrumb.js +287 -0
  11. package/.dist/components/Breadcrumb.js.map +1 -0
  12. package/.dist/components/Button.js +23 -11
  13. package/.dist/components/Button.js.map +1 -1
  14. package/.dist/components/Calendar.d.ts +36 -0
  15. package/.dist/components/Calendar.js +721 -0
  16. package/.dist/components/Calendar.js.map +1 -0
  17. package/.dist/components/Canvas.d.ts +48 -0
  18. package/.dist/components/Canvas.js +230 -0
  19. package/.dist/components/Canvas.js.map +1 -0
  20. package/.dist/components/Checkbox.d.ts +3 -2
  21. package/.dist/components/Checkbox.js +31 -9
  22. package/.dist/components/Checkbox.js.map +1 -1
  23. package/.dist/components/Dropdown.d.ts +1 -1
  24. package/.dist/components/Dropdown.js +14 -6
  25. package/.dist/components/Dropdown.js.map +1 -1
  26. package/.dist/components/Geometry.d.ts +29 -0
  27. package/.dist/components/Geometry.js +40 -0
  28. package/.dist/components/Geometry.js.map +1 -0
  29. package/.dist/components/HotKey.js +1 -1
  30. package/.dist/components/HotKey.js.map +1 -1
  31. package/.dist/components/Log.js +1 -1
  32. package/.dist/components/Log.js.map +1 -1
  33. package/.dist/components/Logo.d.ts +19 -0
  34. package/.dist/components/Logo.js +204 -0
  35. package/.dist/components/Logo.js.map +1 -0
  36. package/.dist/components/Modal.d.ts +74 -0
  37. package/.dist/components/Modal.js +113 -0
  38. package/.dist/components/Modal.js.map +1 -0
  39. package/.dist/components/Pane.d.ts +43 -0
  40. package/.dist/components/Pane.js +321 -0
  41. package/.dist/components/Pane.js.map +1 -0
  42. package/.dist/components/Pin.d.ts +25 -0
  43. package/.dist/components/Pin.js +80 -0
  44. package/.dist/components/Pin.js.map +1 -0
  45. package/.dist/components/Plot.d.ts +25 -0
  46. package/.dist/components/Plot.js +171 -0
  47. package/.dist/components/Plot.js.map +1 -0
  48. package/.dist/components/Scrollable.d.ts +6 -0
  49. package/.dist/components/Scrollable.js +14 -2
  50. package/.dist/components/Scrollable.js.map +1 -1
  51. package/.dist/components/ScrollableList.d.ts +2 -2
  52. package/.dist/components/ScrollableList.js +4 -4
  53. package/.dist/components/ScrollableList.js.map +1 -1
  54. package/.dist/components/Slider.d.ts +2 -0
  55. package/.dist/components/Slider.js +11 -1
  56. package/.dist/components/Slider.js.map +1 -1
  57. package/.dist/components/Table.d.ts +79 -0
  58. package/.dist/components/Table.js +603 -0
  59. package/.dist/components/Table.js.map +1 -0
  60. package/.dist/components/Tabs.d.ts +2 -0
  61. package/.dist/components/Tabs.js +14 -1
  62. package/.dist/components/Tabs.js.map +1 -1
  63. package/.dist/components/ZStack.d.ts +19 -0
  64. package/.dist/components/ZStack.js +34 -0
  65. package/.dist/components/ZStack.js.map +1 -0
  66. package/.dist/components/charts/BarChart.d.ts +27 -0
  67. package/.dist/components/charts/BarChart.js +122 -0
  68. package/.dist/components/charts/BarChart.js.map +1 -0
  69. package/.dist/components/charts/Chart.d.ts +43 -0
  70. package/.dist/components/charts/Chart.js +41 -0
  71. package/.dist/components/charts/Chart.js.map +1 -0
  72. package/.dist/components/charts/LineChart.d.ts +23 -0
  73. package/.dist/components/charts/LineChart.js +109 -0
  74. package/.dist/components/charts/LineChart.js.map +1 -0
  75. package/.dist/components/charts/index.d.ts +3 -0
  76. package/.dist/components/charts/index.js +4 -0
  77. package/.dist/components/charts/index.js.map +1 -0
  78. package/.dist/components/index.d.ts +12 -0
  79. package/.dist/components/index.js +12 -0
  80. package/.dist/components/index.js.map +1 -1
  81. package/.dist/iTerm2.js +1 -3
  82. package/.dist/iTerm2.js.map +1 -1
  83. package/.dist/inspect.js +1 -1
  84. package/.dist/inspect.js.map +1 -1
  85. package/.dist/managers/ModalManager.d.ts +2 -1
  86. package/.dist/managers/ModalManager.js +23 -51
  87. package/.dist/managers/ModalManager.js.map +1 -1
  88. package/.dist/testing.d.ts +5 -0
  89. package/.dist/testing.js +19 -3
  90. package/.dist/testing.js.map +1 -1
  91. package/package.json +3 -3
@@ -0,0 +1,603 @@
1
+ import * as unicode from '@teaui/term';
2
+ import { Container } from '../Container.js';
3
+ import { Style } from '../Style.js';
4
+ import { Point } from '../geometry.js';
5
+ import { isMouseClicked, isMouseDragging, isMousePressEnd, isMousePressStart, } from '../events/index.js';
6
+ /**
7
+ * A data table with sortable headers, selectable/scrollable rows, and column layout.
8
+ *
9
+ * ```
10
+ * Name │ Age │ Email │ Status
11
+ * ─────────────────────────────────────────────────
12
+ * Alice │ 30 │ alice@example.com │ Active
13
+ * ▶Bob │ 25 │ bob@example.com │ Pending ◀
14
+ * Charlie │ 35 │ charlie@ex.com │ Active
15
+ * ```
16
+ */
17
+ export class Table extends Container {
18
+ #sourceData = [];
19
+ #data = [];
20
+ #columns = [];
21
+ #format = () => '';
22
+ #selectedIndex = 0;
23
+ #onSelect;
24
+ #onSort;
25
+ #sortKey;
26
+ #sortDirection = 'asc';
27
+ #showRowNumbers = false;
28
+ #isSelectable = false;
29
+ #showSelected = undefined;
30
+ #onSelectionChange;
31
+ #selectedItems = new Set();
32
+ get #isShowSelected() {
33
+ return this.#showSelected ?? this.#isSelectable;
34
+ }
35
+ #dragSelectState = undefined;
36
+ #dragScrollPinned = undefined;
37
+ // scroll state
38
+ #scrollOffset = 0;
39
+ #bodyHeight = 0;
40
+ #selectionDirty = true;
41
+ constructor(props) {
42
+ super(props);
43
+ this.#update(props);
44
+ }
45
+ update(props) {
46
+ this.#update(props);
47
+ super.update(props);
48
+ }
49
+ #update({ data, columns, format, selectedIndex, onSelect, onSort, sortKey, sortDirection, showRowNumbers, isSelectable, showSelected, onSelectionChange, }) {
50
+ if (showRowNumbers !== undefined) {
51
+ this.#showRowNumbers = showRowNumbers;
52
+ }
53
+ if (isSelectable !== undefined) {
54
+ this.#isSelectable = isSelectable;
55
+ }
56
+ if (showSelected !== undefined) {
57
+ this.#showSelected = showSelected;
58
+ }
59
+ if (onSelectionChange !== undefined) {
60
+ this.#onSelectionChange = onSelectionChange;
61
+ }
62
+ const dataChanged = data !== undefined && data !== this.#sourceData;
63
+ const sortChanged = sortKey !== undefined &&
64
+ (sortKey !== this.#sortKey || sortDirection !== this.#sortDirection);
65
+ this.#columns = columns ?? this.#columns;
66
+ this.#format = format ?? this.#format;
67
+ if (selectedIndex !== undefined) {
68
+ this.#selectedIndex = selectedIndex;
69
+ this.#selectionDirty = true;
70
+ }
71
+ if (onSelect !== undefined) {
72
+ this.#onSelect = onSelect;
73
+ }
74
+ if (onSort !== undefined) {
75
+ this.#onSort = onSort;
76
+ }
77
+ if (sortKey !== undefined) {
78
+ this.#sortKey = sortKey;
79
+ }
80
+ if (sortDirection !== undefined) {
81
+ this.#sortDirection = sortDirection;
82
+ }
83
+ if (data !== undefined) {
84
+ this.#sourceData = data;
85
+ }
86
+ if (dataChanged || sortChanged) {
87
+ this.#sortData();
88
+ }
89
+ }
90
+ #sortData() {
91
+ if (!this.#sortKey) {
92
+ this.#data = [...this.#sourceData];
93
+ if (this.#sortDirection === 'desc') {
94
+ this.#data.reverse();
95
+ }
96
+ return;
97
+ }
98
+ const key = this.#sortKey;
99
+ const dir = this.#sortDirection;
100
+ this.#data = [...this.#sourceData].sort((a, b) => {
101
+ const aVal = this.#format(key, a);
102
+ const bVal = this.#format(key, b);
103
+ const cmp = aVal.localeCompare(bVal, undefined, { numeric: true });
104
+ return dir === 'asc' ? cmp : -cmp;
105
+ });
106
+ }
107
+ get selectedIndex() {
108
+ return this.#selectedIndex;
109
+ }
110
+ set selectedIndex(value) {
111
+ this.#selectedIndex = Math.max(0, Math.min(this.#data.length - 1, value));
112
+ this.#selectionDirty = true;
113
+ this.invalidateRender();
114
+ }
115
+ naturalSize(available) {
116
+ return available;
117
+ }
118
+ receiveKey(event) {
119
+ switch (event.name) {
120
+ case 'up':
121
+ this.selectedIndex = this.#selectedIndex - 1;
122
+ break;
123
+ case 'down':
124
+ this.selectedIndex = this.#selectedIndex + 1;
125
+ break;
126
+ case 'pageup':
127
+ this.selectedIndex =
128
+ this.#selectedIndex - Math.max(1, this.#bodyHeight - 2);
129
+ break;
130
+ case 'pagedown':
131
+ this.selectedIndex =
132
+ this.#selectedIndex + Math.max(1, this.#bodyHeight - 2);
133
+ break;
134
+ case 'home':
135
+ this.selectedIndex = 0;
136
+ break;
137
+ case 'end':
138
+ this.selectedIndex = this.#data.length - 1;
139
+ break;
140
+ case 'return':
141
+ if (this.#data.length > 0 && this.#onSelect) {
142
+ this.#onSelect(this.#data[this.#selectedIndex], this.#selectedIndex);
143
+ }
144
+ break;
145
+ case 'space':
146
+ this.#toggleSelection(this.#selectedIndex);
147
+ break;
148
+ }
149
+ }
150
+ receiveMouse(event, system) {
151
+ super.receiveMouse(event, system);
152
+ // During drag-select, pin the viewport and suppress scroll
153
+ if (this.#dragSelectState !== undefined) {
154
+ if (isMouseDragging(event)) {
155
+ this.#handleDragSelect(event.position.y);
156
+ return;
157
+ }
158
+ if (isMousePressEnd(event)) {
159
+ this.#dragSelectState = undefined;
160
+ this.#dragScrollPinned = undefined;
161
+ return;
162
+ }
163
+ }
164
+ if (event.name === 'mouse.wheel.up') {
165
+ this.#scrollOffset = Math.max(0, this.#scrollOffset - 1);
166
+ this.invalidateRender();
167
+ }
168
+ else if (event.name === 'mouse.wheel.down') {
169
+ const maxScroll = Math.max(0, this.#data.length - this.#bodyHeight);
170
+ this.#scrollOffset = Math.min(maxScroll, this.#scrollOffset + 1);
171
+ this.invalidateRender();
172
+ }
173
+ else if (isMousePressStart(event) && this.#isSelectable) {
174
+ const y = event.position.y;
175
+ if (y >= 2) {
176
+ const rowIndex = this.#scrollOffset + (y - 2);
177
+ if (rowIndex >= 0 && rowIndex < this.#data.length) {
178
+ const item = this.#data[rowIndex];
179
+ const wasChecked = this.#selectedItems.has(item);
180
+ this.#dragSelectState = wasChecked ? 'deselect' : 'select';
181
+ this.#dragScrollPinned = this.#scrollOffset;
182
+ this.#applyDragSelect(rowIndex);
183
+ this.selectedIndex = rowIndex;
184
+ }
185
+ }
186
+ }
187
+ else if (isMouseClicked(event)) {
188
+ const y = event.position.y;
189
+ // header row = 0, separator = 1, data rows start at 2
190
+ if (y === 0) {
191
+ this.#handleHeaderClick(event.position.x);
192
+ }
193
+ else if (y >= 2) {
194
+ const rowIndex = this.#scrollOffset + (y - 2);
195
+ if (rowIndex < this.#data.length) {
196
+ this.selectedIndex = rowIndex;
197
+ if (!this.#isSelectable) {
198
+ this.#onSelect?.(this.#data[rowIndex], rowIndex);
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ #handleDragSelect(y) {
205
+ if (y < 2) {
206
+ return;
207
+ }
208
+ const rowIndex = this.#scrollOffset + (y - 2);
209
+ if (rowIndex >= 0 && rowIndex < this.#data.length) {
210
+ this.#applyDragSelect(rowIndex);
211
+ // Move cursor without triggering #ensureSelectedVisible
212
+ this.#selectedIndex = rowIndex;
213
+ this.invalidateRender();
214
+ }
215
+ }
216
+ #applyDragSelect(rowIndex) {
217
+ const item = this.#data[rowIndex];
218
+ const changed = this.#dragSelectState === 'select'
219
+ ? !this.#selectedItems.has(item)
220
+ : this.#selectedItems.has(item);
221
+ if (!changed) {
222
+ return;
223
+ }
224
+ if (this.#dragSelectState === 'select') {
225
+ this.#selectedItems.add(item);
226
+ }
227
+ else {
228
+ this.#selectedItems.delete(item);
229
+ }
230
+ this.invalidateRender();
231
+ this.#onSelectionChange?.(new Set(this.#selectedItems));
232
+ }
233
+ #handleHeaderClick(x) {
234
+ const INDENT = 1;
235
+ const checkboxWidth = this.#checkboxWidth();
236
+ const rowNumWidth = this.#rowNumberWidth();
237
+ // Click on checkbox column header → toggle all
238
+ if (this.#isShowSelected && x >= INDENT && x < INDENT + checkboxWidth) {
239
+ if (this.#selectedItems.size === this.#data.length) {
240
+ this.#selectedItems.clear();
241
+ }
242
+ else {
243
+ for (const item of this.#data) {
244
+ this.#selectedItems.add(item);
245
+ }
246
+ }
247
+ this.invalidateRender();
248
+ this.#onSelectionChange?.(new Set(this.#selectedItems));
249
+ return;
250
+ }
251
+ // Click on row number column → sort by original array order
252
+ if (this.#showRowNumbers &&
253
+ x >= INDENT + checkboxWidth &&
254
+ x < INDENT + checkboxWidth + rowNumWidth) {
255
+ const direction = !this.#sortKey && this.#sortDirection === 'asc' ? 'desc' : 'asc';
256
+ this.#sortKey = undefined;
257
+ this.#sortDirection = direction;
258
+ this.#sortData();
259
+ this.invalidateRender();
260
+ this.#onSort?.('#', direction);
261
+ return;
262
+ }
263
+ const widths = this.#calculateColumnWidths(this.contentSize.width - INDENT - checkboxWidth - rowNumWidth);
264
+ let currentX = INDENT + checkboxWidth + rowNumWidth;
265
+ for (let i = 0; i < this.#columns.length; i++) {
266
+ const colWidth = widths[i];
267
+ // account for separator (3 chars: ' │ ')
268
+ const nextX = currentX + colWidth + (i < this.#columns.length - 1 ? 3 : 0);
269
+ if (x >= currentX && x < nextX) {
270
+ const col = this.#columns[i];
271
+ if (!col.sortable) {
272
+ return;
273
+ }
274
+ const direction = this.#sortKey === col.key && this.#sortDirection === 'asc'
275
+ ? 'desc'
276
+ : 'asc';
277
+ this.#sortKey = col.key;
278
+ this.#sortDirection = direction;
279
+ this.#sortData();
280
+ this.invalidateRender();
281
+ this.#onSort?.(col.key, direction);
282
+ return;
283
+ }
284
+ currentX = nextX;
285
+ }
286
+ }
287
+ #toggleSelection(rowIndex) {
288
+ if (!this.#isSelectable || rowIndex < 0 || rowIndex >= this.#data.length) {
289
+ return;
290
+ }
291
+ const item = this.#data[rowIndex];
292
+ if (this.#selectedItems.has(item)) {
293
+ this.#selectedItems.delete(item);
294
+ }
295
+ else {
296
+ this.#selectedItems.add(item);
297
+ }
298
+ this.invalidateRender();
299
+ this.#onSelectionChange?.(new Set(this.#selectedItems));
300
+ }
301
+ /** Width of the checkbox column (including trailing separator). */
302
+ #checkboxWidth() {
303
+ if (!this.#isShowSelected) {
304
+ return 0;
305
+ }
306
+ return 3 + 3; // '[⨉]' (3) + ' │ ' (3)
307
+ }
308
+ /** Width of the row number column (including trailing separator space). */
309
+ #rowNumberWidth() {
310
+ if (!this.#showRowNumbers) {
311
+ return 0;
312
+ }
313
+ // Width of the largest row number, minimum width of '#' header
314
+ const digitWidth = Math.max(1, String(this.#data.length).length);
315
+ return digitWidth + 3; // digits + ' │ '
316
+ }
317
+ #calculateColumnWidths(totalWidth) {
318
+ const cols = this.#columns;
319
+ const separatorWidth = (cols.length - 1) * 3; // ' │ ' between columns
320
+ const available = totalWidth - separatorWidth;
321
+ let fixedTotal = 0;
322
+ let autoCount = 0;
323
+ for (const col of cols) {
324
+ if (typeof col.width === 'number') {
325
+ fixedTotal += col.width;
326
+ }
327
+ else {
328
+ autoCount += 1;
329
+ }
330
+ }
331
+ const autoWidth = autoCount > 0 ? Math.floor((available - fixedTotal) / autoCount) : 0;
332
+ return cols.map(col => {
333
+ if (typeof col.width === 'number') {
334
+ return col.width;
335
+ }
336
+ return Math.max(autoWidth, col.title.length);
337
+ });
338
+ }
339
+ #ensureSelectedVisible() {
340
+ if (this.#bodyHeight <= 0) {
341
+ return;
342
+ }
343
+ const halfHeight = Math.floor(this.#bodyHeight / 2);
344
+ if (this.#selectedIndex < this.#scrollOffset) {
345
+ this.#scrollOffset = this.#selectedIndex;
346
+ }
347
+ else if (this.#selectedIndex >= this.#scrollOffset + this.#bodyHeight) {
348
+ this.#scrollOffset = this.#selectedIndex - this.#bodyHeight + 1;
349
+ }
350
+ else if (this.#selectedIndex >= halfHeight &&
351
+ this.#selectedIndex < this.#data.length - halfHeight) {
352
+ // "moving window" for middle rows: selected stays at the center
353
+ this.#scrollOffset = this.#selectedIndex - halfHeight;
354
+ }
355
+ else if (this.#selectedIndex >= this.#data.length - halfHeight) {
356
+ // "bottom zone": pin scroll so last rows are visible, selected moves down
357
+ this.#scrollOffset = Math.max(0, this.#data.length - this.#bodyHeight);
358
+ }
359
+ const maxScroll = Math.max(0, this.#data.length - this.#bodyHeight);
360
+ this.#scrollOffset = Math.max(0, Math.min(maxScroll, this.#scrollOffset));
361
+ // Ensure the selected row doesn't land on an indicator row.
362
+ // Top indicator occupies position 0 when scrollOffset > 0.
363
+ // Bottom indicator occupies the last position when there are rows below.
364
+ if (this.#data.length > this.#bodyHeight) {
365
+ const rowsAbove = this.#scrollOffset;
366
+ const rowsBelow = this.#data.length - this.#scrollOffset - this.#bodyHeight;
367
+ if (rowsAbove > 0 && this.#selectedIndex === this.#scrollOffset) {
368
+ // Selected would be on the top indicator row — scroll up to make room
369
+ this.#scrollOffset = Math.max(0, this.#selectedIndex - 1);
370
+ }
371
+ if (rowsBelow > 0 &&
372
+ this.#selectedIndex === this.#scrollOffset + this.#bodyHeight - 1) {
373
+ // Selected would be on the bottom indicator row — scroll down to make room
374
+ this.#scrollOffset = Math.min(maxScroll, this.#selectedIndex - this.#bodyHeight + 2);
375
+ }
376
+ }
377
+ }
378
+ #alignText(text, width, align) {
379
+ const textWidth = unicode.lineWidth(text);
380
+ if (textWidth > width) {
381
+ // truncate
382
+ let w = 0;
383
+ let result = '';
384
+ for (const char of unicode.printableChars(text)) {
385
+ const cw = unicode.charWidth(char);
386
+ if (cw === 0) {
387
+ result += char;
388
+ continue;
389
+ }
390
+ if (w + cw > width - 1) {
391
+ result += '…';
392
+ break;
393
+ }
394
+ result += char;
395
+ w += cw;
396
+ }
397
+ return result;
398
+ }
399
+ const pad = width - textWidth;
400
+ switch (align) {
401
+ case 'right':
402
+ return ' '.repeat(pad) + text;
403
+ case 'center': {
404
+ const left = Math.floor(pad / 2);
405
+ const right = pad - left;
406
+ return ' '.repeat(left) + text + ' '.repeat(right);
407
+ }
408
+ default:
409
+ return text + ' '.repeat(pad);
410
+ }
411
+ }
412
+ render(viewport) {
413
+ if (viewport.isEmpty) {
414
+ return super.render(viewport);
415
+ }
416
+ viewport.registerFocus();
417
+ viewport.registerMouse(['mouse.button.left', 'mouse.wheel']);
418
+ const width = viewport.contentSize.width;
419
+ const height = viewport.contentSize.height;
420
+ // Reserve 1 character at the left for the selection marker (▶)
421
+ const INDENT = 1;
422
+ const checkboxWidth = this.#checkboxWidth();
423
+ const rowNumWidth = this.#rowNumberWidth();
424
+ const contentWidth = width - INDENT - checkboxWidth - rowNumWidth;
425
+ const widths = this.#calculateColumnWidths(contentWidth);
426
+ const dimStyle = new Style({ dim: true });
427
+ const headerStyle = new Style({ dim: true, bold: true });
428
+ // Cursor row (not checked)
429
+ const cursorStyle = new Style({
430
+ foreground: this.theme.textColor,
431
+ background: this.theme.highlightColor,
432
+ bold: true,
433
+ });
434
+ // Checked rows: light magenta background
435
+ const checkedRowStyle = new Style({
436
+ background: '#3a2040',
437
+ });
438
+ // Cursor + checked: slightly brighter magenta
439
+ const cursorCheckedStyle = new Style({
440
+ foreground: this.theme.textColor,
441
+ background: '#4d2a55',
442
+ bold: true,
443
+ });
444
+ // Header row
445
+ let headerX = INDENT;
446
+ // Checkbox column header
447
+ if (this.#isShowSelected) {
448
+ const checkedCount = this.#selectedItems.size;
449
+ const headerCheck = checkedCount === 0
450
+ ? '[ ]'
451
+ : checkedCount === this.#data.length
452
+ ? '[⨉]'
453
+ : '[·]';
454
+ viewport.write(headerCheck, new Point(headerX, 0), headerStyle);
455
+ headerX += 3;
456
+ viewport.write(' │ ', new Point(headerX, 0), dimStyle);
457
+ headerX += 3;
458
+ }
459
+ // Row number column header
460
+ if (this.#showRowNumbers) {
461
+ const numColWidth = rowNumWidth - 3; // subtract separator
462
+ const aligned = this.#alignText('#', numColWidth, 'right');
463
+ viewport.write(aligned, new Point(headerX, 0), headerStyle);
464
+ // Show sort arrow when sorting by original order (sortKey is undefined)
465
+ if (!this.#sortKey) {
466
+ const arrow = this.#sortDirection === 'asc' ? '▲' : '▼';
467
+ viewport.write(arrow, new Point(headerX, 0), headerStyle);
468
+ }
469
+ headerX += numColWidth;
470
+ viewport.write(' │ ', new Point(headerX, 0), dimStyle);
471
+ headerX += 3;
472
+ }
473
+ for (let i = 0; i < this.#columns.length; i++) {
474
+ const col = this.#columns[i];
475
+ const aligned = this.#alignText(col.title, widths[i], col.align ?? 'left');
476
+ viewport.write(aligned, new Point(headerX, 0), headerStyle);
477
+ // Write sort arrow on top, positioned after the title text, clamped to column width
478
+ if (this.#sortKey === col.key) {
479
+ const arrow = this.#sortDirection === 'asc' ? '▲' : '▼';
480
+ const titleWidth = unicode.lineWidth(col.title);
481
+ const align = col.align ?? 'left';
482
+ const titleStart = align === 'right'
483
+ ? widths[i] - titleWidth
484
+ : align === 'center'
485
+ ? Math.floor((widths[i] - titleWidth) / 2)
486
+ : 0;
487
+ const arrowOffset = Math.min(titleStart + titleWidth + 1, widths[i] - 1);
488
+ viewport.write(arrow, new Point(headerX + arrowOffset, 0), headerStyle);
489
+ }
490
+ headerX += widths[i];
491
+ if (i < this.#columns.length - 1) {
492
+ viewport.write(' │ ', new Point(headerX, 0), dimStyle);
493
+ headerX += 3;
494
+ }
495
+ }
496
+ // Separator
497
+ if (height > 1) {
498
+ const sep = '─'.repeat(width);
499
+ viewport.write(sep, new Point(0, 1), dimStyle);
500
+ }
501
+ // Body
502
+ this.#bodyHeight = Math.max(0, height - 2);
503
+ if (this.#selectionDirty) {
504
+ this.#selectionDirty = false;
505
+ this.#ensureSelectedVisible();
506
+ }
507
+ // Pin viewport during drag-select
508
+ if (this.#dragScrollPinned !== undefined) {
509
+ this.#scrollOffset = this.#dragScrollPinned;
510
+ }
511
+ const rowsAbove = this.#scrollOffset;
512
+ const rowsBelow = Math.max(0, this.#data.length - this.#scrollOffset - this.#bodyHeight);
513
+ for (let i = 0; i < this.#bodyHeight; i++) {
514
+ const rowIndex = this.#scrollOffset + i;
515
+ const y = i + 2;
516
+ if (rowIndex >= this.#data.length) {
517
+ break;
518
+ }
519
+ const isSelected = rowIndex === this.#selectedIndex;
520
+ const row = this.#data[rowIndex];
521
+ const isChecked = this.#selectedItems.has(row);
522
+ // Determine if this row has a scroll indicator overlaid on top
523
+ let scrollIndicator;
524
+ if (i === 0 && rowsAbove > 0) {
525
+ const hiddenCount = rowsAbove + 1; // +1 for the row occluded by indicator
526
+ scrollIndicator = ` [ ↑ ${hiddenCount} more rows ] `;
527
+ }
528
+ else if (i === this.#bodyHeight - 1 && rowsBelow > 0) {
529
+ const hiddenCount = rowsBelow + 1; // +1 for the row occluded by indicator
530
+ scrollIndicator = ` [ ↓ ${hiddenCount} more rows ] `;
531
+ }
532
+ // Styles for rows occluded by scroll indicators (easily customisable)
533
+ const occludedRowStyle = new Style({ dim: true });
534
+ const occludedSepStyle = new Style({ dim: true });
535
+ const indicatorStyle = new Style({ bold: true, background: '#333333' });
536
+ // Pick effective styles: occluded > cursor+checked > cursor > checked > normal
537
+ const rowHighlight = isSelected && isChecked
538
+ ? cursorCheckedStyle
539
+ : isSelected
540
+ ? cursorStyle
541
+ : isChecked
542
+ ? checkedRowStyle
543
+ : Style.NONE;
544
+ const sepHighlight = isSelected && isChecked
545
+ ? cursorCheckedStyle
546
+ : isSelected
547
+ ? cursorStyle
548
+ : isChecked
549
+ ? checkedRowStyle
550
+ : dimStyle;
551
+ const effectiveRowStyle = scrollIndicator
552
+ ? occludedRowStyle
553
+ : rowHighlight;
554
+ const effectiveSepStyle = scrollIndicator
555
+ ? occludedSepStyle
556
+ : sepHighlight;
557
+ if (!scrollIndicator && (isSelected || isChecked)) {
558
+ viewport.write(' '.repeat(width), new Point(0, y), rowHighlight);
559
+ }
560
+ if (isSelected && !scrollIndicator) {
561
+ viewport.write('▶', new Point(0, y), isChecked ? cursorCheckedStyle : cursorStyle);
562
+ }
563
+ // Render the row cells (dimmed when occluded, highlighted when selected)
564
+ let cellX = INDENT;
565
+ // Checkbox column
566
+ if (this.#isShowSelected) {
567
+ const checkText = isChecked ? '[⨉]' : '[ ]';
568
+ viewport.write(checkText, new Point(cellX, y), effectiveRowStyle);
569
+ cellX += 3;
570
+ viewport.write(' │ ', new Point(cellX, y), effectiveSepStyle);
571
+ cellX += 3;
572
+ }
573
+ // Row number column
574
+ if (this.#showRowNumbers) {
575
+ const numColWidth = rowNumWidth - 3; // subtract separator
576
+ const numText = String(rowIndex + 1);
577
+ const aligned = this.#alignText(numText, numColWidth, 'right');
578
+ viewport.write(aligned, new Point(cellX, y), effectiveRowStyle);
579
+ cellX += numColWidth;
580
+ viewport.write(' │ ', new Point(cellX, y), effectiveSepStyle);
581
+ cellX += 3;
582
+ }
583
+ for (let j = 0; j < this.#columns.length; j++) {
584
+ const col = this.#columns[j];
585
+ const text = this.#format(col.key, row);
586
+ const aligned = this.#alignText(text, widths[j], col.align ?? 'left');
587
+ viewport.write(aligned, new Point(cellX, y), effectiveRowStyle);
588
+ cellX += widths[j];
589
+ if (j < this.#columns.length - 1) {
590
+ viewport.write(' │ ', new Point(cellX, y), effectiveSepStyle);
591
+ cellX += 3;
592
+ }
593
+ }
594
+ // Overlay the scroll indicator label, centered on the row
595
+ if (scrollIndicator) {
596
+ const indicatorWidth = unicode.lineWidth(scrollIndicator);
597
+ const indicatorX = Math.max(0, Math.floor((width - indicatorWidth) / 2));
598
+ viewport.write(scrollIndicator, new Point(indicatorX, y), indicatorStyle);
599
+ }
600
+ }
601
+ }
602
+ }
603
+ //# sourceMappingURL=Table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.js","sourceRoot":"","sources":["../../lib/components/Table.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@ export declare class Tabs extends Container {
22
22
  constructor(props?: Props);
23
23
  get tabs(): Section[];
24
24
  get tabTitles(): TabTitle[];
25
+ get border(): boolean;
26
+ set border(value: boolean);
25
27
  update(props: Props): void;
26
28
  addTab(tab: Section): void;
27
29
  addTab(title: string, child: View): void;