@brainfile/cli 0.10.3 → 0.11.0
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/CHANGELOG.md +17 -0
- package/README.md +18 -2
- package/dist/tui/BrainfileTUI.d.ts.map +1 -1
- package/dist/tui/BrainfileTUI.js +1 -1
- package/dist/tui/BrainfileTUI.js.map +1 -1
- package/dist/tui/components/ManualBorder.d.ts +42 -0
- package/dist/tui/components/ManualBorder.d.ts.map +1 -0
- package/dist/tui/components/ManualBorder.js +56 -0
- package/dist/tui/components/ManualBorder.js.map +1 -0
- package/dist/tui/components/TaskCard.d.ts +7 -6
- package/dist/tui/components/TaskCard.d.ts.map +1 -1
- package/dist/tui/components/TaskCard.js +112 -69
- package/dist/tui/components/TaskCard.js.map +1 -1
- package/dist/tui/components/TaskCardMeasure.d.ts +45 -0
- package/dist/tui/components/TaskCardMeasure.d.ts.map +1 -0
- package/dist/tui/components/TaskCardMeasure.js +118 -0
- package/dist/tui/components/TaskCardMeasure.js.map +1 -0
- package/dist/tui/components/TaskList.d.ts.map +1 -1
- package/dist/tui/components/TaskList.js +10 -17
- package/dist/tui/components/TaskList.js.map +1 -1
- package/dist/tui/components/index.d.ts +4 -0
- package/dist/tui/components/index.d.ts.map +1 -1
- package/dist/tui/components/index.js +9 -1
- package/dist/tui/components/index.js.map +1 -1
- package/dist/tui/types.d.ts +1 -1
- package/dist/tui/types.js +1 -1
- package/dist/tui/types.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.11.0] - 2025-11-27
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- **TUI redesign** - Complete visual overhaul of the terminal interface
|
|
14
|
+
- Borderless task cards for cleaner, faster scanning
|
|
15
|
+
- Selection indicator (`▌`) matches column tabs for visual consistency
|
|
16
|
+
- Priority badge leads the title row for immediate visibility
|
|
17
|
+
- Compact `[X/Y]` subtask counts replace block progress bars
|
|
18
|
+
- Meta row shows progress, due date, and tags with `·` separators
|
|
19
|
+
- Task IDs right-aligned for consistent table-like appearance
|
|
20
|
+
- 3 lines per collapsed task (down from 7) - more tasks visible at once
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- **Layout stability** - Reserved space for status messages prevents layout shifts during updates
|
|
24
|
+
- **Row spacing** - Fixed inconsistent margins between task cards
|
|
25
|
+
- **Viewport calculations** - Fixed content width calculations for accurate scrolling
|
|
26
|
+
|
|
10
27
|
## [0.10.3] - 2025-11-27
|
|
11
28
|
|
|
12
29
|
### Fixed
|
package/README.md
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
|
|
7
7
|
**Task management for your terminal.** A full kanban board that lives in a markdown file.
|
|
8
8
|
|
|
9
|
-
-
|
|
9
|
+
- Modern, borderless TUI optimized for information density
|
|
10
|
+
- Vim-style navigation with intuitive keybindings
|
|
10
11
|
- CLI commands for scripting and automation
|
|
11
|
-
- MCP server for AI assistant integration
|
|
12
|
+
- MCP server for AI assistant integration
|
|
12
13
|
|
|
13
14
|
## Installation
|
|
14
15
|
|
|
@@ -48,6 +49,21 @@ brainfile # Open with default brainfile.md
|
|
|
48
49
|
brainfile ./path/to/file.md # Open specific file
|
|
49
50
|
```
|
|
50
51
|
|
|
52
|
+
**Task Card Layout:**
|
|
53
|
+
```
|
|
54
|
+
▌ CRIT Implement user authentication flow
|
|
55
|
+
[1/5] · Nov 30 · #auth #security task-39
|
|
56
|
+
|
|
57
|
+
HIGH Dashboard performance optimization
|
|
58
|
+
[0/4] · Dec 4 · #performance #frontend task-40
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- `▌` indicator shows selected task
|
|
62
|
+
- Priority badge (CRIT/HIGH/MED/LOW) leads each row
|
|
63
|
+
- `[X/Y]` shows subtask progress
|
|
64
|
+
- Due dates with urgency coloring (red if overdue, yellow if soon)
|
|
65
|
+
- Tags and task ID complete the metadata row
|
|
66
|
+
|
|
51
67
|
**Panel Navigation:**
|
|
52
68
|
| Key | Action |
|
|
53
69
|
|-----|--------|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrainfileTUI.d.ts","sourceRoot":"","sources":["../../src/tui/BrainfileTUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,YAAY,CAAC;AA2DrD,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"BrainfileTUI.d.ts","sourceRoot":"","sources":["../../src/tui/BrainfileTUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,YAAY,CAAC;AA2DrD,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,qBAwSlD"}
|
package/dist/tui/BrainfileTUI.js
CHANGED
|
@@ -224,7 +224,7 @@ function BrainfileTUI({ filePath }) {
|
|
|
224
224
|
state.activePanel === 'archive' && (react_1.default.createElement(index_js_1.ArchivePanel, { archive: state.archive, selectedIndex: state.selectedArchiveIndex, viewportHeight: viewportHeight, termWidth: termWidth, expandedIds: state.expandedArchiveIds, mode: state.mode, columns: orderedColumns, restoreColumnIndex: state.archiveRestoreColumnIndex }))),
|
|
225
225
|
react_1.default.createElement(ink_1.Box, { paddingLeft: 1 },
|
|
226
226
|
react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.border }, theme_js_1.BOX.horizontal.repeat(Math.max(1, termWidth - 2)))),
|
|
227
|
-
state.statusMessage && (react_1.default.createElement(index_js_1.StatusMessageDisplay, { message: state.statusMessage })),
|
|
227
|
+
react_1.default.createElement(ink_1.Box, { height: 1 }, state.statusMessage && (react_1.default.createElement(index_js_1.StatusMessageDisplay, { message: state.statusMessage }))),
|
|
228
228
|
react_1.default.createElement(index_js_1.StatusBar, { mode: state.mode, columnName: state.activePanel === 'tasks' ? (currentColumn?.title || '') : state.activePanel, taskIndex: state.activePanel === 'tasks' ? state.selectedTaskIndex + 1 : (state.activePanel === 'archive' ? state.selectedArchiveIndex + 1 : state.selectedRuleIndex + 1), taskCount: state.activePanel === 'tasks' ? currentTasks.length : (state.activePanel === 'archive' ? state.archive.length : (state.board.rules?.[state.activeRuleType]?.length || 0)), termWidth: termWidth, activePanel: state.activePanel })));
|
|
229
229
|
}
|
|
230
230
|
//# sourceMappingURL=BrainfileTUI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrainfileTUI.js","sourceRoot":"","sources":["../../src/tui/BrainfileTUI.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BrainfileTUI.js","sourceRoot":"","sources":["../../src/tui/BrainfileTUI.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ManualBorder - Bordered container with exact dimension control
|
|
3
|
+
*
|
|
4
|
+
* Renders borders using box-drawing characters (╭╮╰╯│─) for complete
|
|
5
|
+
* control over dimensions. Unlike Ink's borderStyle, this guarantees
|
|
6
|
+
* exact line counts and prevents content overflow.
|
|
7
|
+
*/
|
|
8
|
+
import React from 'react';
|
|
9
|
+
export interface ManualBorderProps {
|
|
10
|
+
/** Total width including borders */
|
|
11
|
+
width: number;
|
|
12
|
+
/** Border color */
|
|
13
|
+
borderColor?: string;
|
|
14
|
+
/** Whether to show separator line (for expanded cards) */
|
|
15
|
+
separatorAfterLine?: number;
|
|
16
|
+
/** Content rows to render inside the border */
|
|
17
|
+
children: React.ReactNode[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Renders a bordered container with manual box-drawing characters.
|
|
21
|
+
*
|
|
22
|
+
* Layout:
|
|
23
|
+
* ╭─────────────────────────╮ <- top border
|
|
24
|
+
* │ content line 1 │ <- content rows
|
|
25
|
+
* │ content line 2 │
|
|
26
|
+
* │─────────────────────────│ <- optional separator
|
|
27
|
+
* │ content line 3 │
|
|
28
|
+
* ╰─────────────────────────╯ <- bottom border
|
|
29
|
+
*/
|
|
30
|
+
export declare function ManualBorder({ width, borderColor, separatorAfterLine, children, }: ManualBorderProps): React.JSX.Element;
|
|
31
|
+
/**
|
|
32
|
+
* A single row inside a ManualBorder.
|
|
33
|
+
* Handles padding and ensures content fits within available width.
|
|
34
|
+
*/
|
|
35
|
+
export interface BorderRowProps {
|
|
36
|
+
/** Content to render */
|
|
37
|
+
children: React.ReactNode;
|
|
38
|
+
/** Horizontal padding (applied to both sides) */
|
|
39
|
+
paddingX?: number;
|
|
40
|
+
}
|
|
41
|
+
export declare function BorderRow({ children, paddingX }: BorderRowProps): React.JSX.Element;
|
|
42
|
+
//# sourceMappingURL=ManualBorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManualBorder.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ManualBorder.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAA4B,EAC5B,kBAAkB,EAClB,QAAQ,GACT,EAAE,iBAAiB,qBAqCnB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAY,EAAE,EAAE,cAAc,qBAMnE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ManualBorder = ManualBorder;
|
|
7
|
+
exports.BorderRow = BorderRow;
|
|
8
|
+
/**
|
|
9
|
+
* ManualBorder - Bordered container with exact dimension control
|
|
10
|
+
*
|
|
11
|
+
* Renders borders using box-drawing characters (╭╮╰╯│─) for complete
|
|
12
|
+
* control over dimensions. Unlike Ink's borderStyle, this guarantees
|
|
13
|
+
* exact line counts and prevents content overflow.
|
|
14
|
+
*/
|
|
15
|
+
const react_1 = __importDefault(require("react"));
|
|
16
|
+
const ink_1 = require("ink");
|
|
17
|
+
const theme_js_1 = require("../theme.js");
|
|
18
|
+
/**
|
|
19
|
+
* Renders a bordered container with manual box-drawing characters.
|
|
20
|
+
*
|
|
21
|
+
* Layout:
|
|
22
|
+
* ╭─────────────────────────╮ <- top border
|
|
23
|
+
* │ content line 1 │ <- content rows
|
|
24
|
+
* │ content line 2 │
|
|
25
|
+
* │─────────────────────────│ <- optional separator
|
|
26
|
+
* │ content line 3 │
|
|
27
|
+
* ╰─────────────────────────╯ <- bottom border
|
|
28
|
+
*/
|
|
29
|
+
function ManualBorder({ width, borderColor = theme_js_1.PALETTE.border, separatorAfterLine, children, }) {
|
|
30
|
+
// Inner width is total width minus 2 border characters
|
|
31
|
+
const innerWidth = Math.max(width - 2, 1);
|
|
32
|
+
// Convert children to array for iteration
|
|
33
|
+
const rows = react_1.default.Children.toArray(children);
|
|
34
|
+
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
|
|
35
|
+
react_1.default.createElement(ink_1.Text, { color: borderColor },
|
|
36
|
+
'╭',
|
|
37
|
+
'─'.repeat(innerWidth),
|
|
38
|
+
'╮'),
|
|
39
|
+
rows.map((child, index) => (react_1.default.createElement(react_1.default.Fragment, { key: index },
|
|
40
|
+
react_1.default.createElement(ink_1.Box, null,
|
|
41
|
+
react_1.default.createElement(ink_1.Text, { color: borderColor }, '│'),
|
|
42
|
+
react_1.default.createElement(ink_1.Box, { width: innerWidth }, child),
|
|
43
|
+
react_1.default.createElement(ink_1.Text, { color: borderColor }, '│')),
|
|
44
|
+
separatorAfterLine === index && (react_1.default.createElement(ink_1.Text, { color: borderColor },
|
|
45
|
+
'├',
|
|
46
|
+
'─'.repeat(innerWidth),
|
|
47
|
+
'┤'))))),
|
|
48
|
+
react_1.default.createElement(ink_1.Text, { color: borderColor },
|
|
49
|
+
'╰',
|
|
50
|
+
'─'.repeat(innerWidth),
|
|
51
|
+
'╯')));
|
|
52
|
+
}
|
|
53
|
+
function BorderRow({ children, paddingX = 1 }) {
|
|
54
|
+
return (react_1.default.createElement(ink_1.Box, { paddingX: paddingX }, children));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=ManualBorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManualBorder.js","sourceRoot":"","sources":["../../../src/tui/components/ManualBorder.tsx"],"names":[],"mappings":";;;;;AAiCA,oCA0CC;AAaD,8BAMC;AA9FD;;;;;;GAMG;AACH,kDAA0B;AAC1B,6BAAgC;AAChC,0CAAsC;AAatC;;;;;;;;;;GAUG;AACH,SAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,GAAG,kBAAO,CAAC,MAAM,EAC5B,kBAAkB,EAClB,QAAQ,GACU;IAClB,uDAAuD;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1C,0CAA0C;IAC1C,MAAM,IAAI,GAAG,eAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE9C,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ;QAEzB,8BAAC,UAAI,IAAC,KAAK,EAAE,WAAW;YACrB,GAAG;YAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;YAAE,GAAG,CAC5B;QAGN,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,8BAAC,eAAK,CAAC,QAAQ,IAAC,GAAG,EAAE,KAAK;YACxB,8BAAC,SAAG;gBACF,8BAAC,UAAI,IAAC,KAAK,EAAE,WAAW,IAAG,GAAG,CAAQ;gBACtC,8BAAC,SAAG,IAAC,KAAK,EAAE,UAAU,IAAG,KAAK,CAAO;gBACrC,8BAAC,UAAI,IAAC,KAAK,EAAE,WAAW,IAAG,GAAG,CAAQ,CAClC;YAEL,kBAAkB,KAAK,KAAK,IAAI,CAC/B,8BAAC,UAAI,IAAC,KAAK,EAAE,WAAW;gBACrB,GAAG;gBAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;gBAAE,GAAG,CAC5B,CACR,CACc,CAClB,CAAC;QAGF,8BAAC,UAAI,IAAC,KAAK,EAAE,WAAW;YACrB,GAAG;YAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;YAAE,GAAG,CAC5B,CACH,CACP,CAAC;AACJ,CAAC;AAaD,SAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,CAAC,EAAkB;IAClE,OAAO,CACL,8BAAC,SAAG,IAAC,QAAQ,EAAE,QAAQ,IACpB,QAAQ,CACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TaskCard -
|
|
2
|
+
* TaskCard - Linear-style modern minimal (borderless)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* 1.
|
|
6
|
-
* 2.
|
|
7
|
-
* 3.
|
|
8
|
-
* 4.
|
|
4
|
+
* Design principles:
|
|
5
|
+
* 1. No borders - clean, fast scanning
|
|
6
|
+
* 2. Selected indicator ▌ matches column tabs
|
|
7
|
+
* 3. Priority badge leads the title row
|
|
8
|
+
* 4. Meta row indented to align with title
|
|
9
|
+
* 5. Consistent visual language (█░ progress, · separators)
|
|
9
10
|
*/
|
|
10
11
|
import React from 'react';
|
|
11
12
|
import type { Task } from '@brainfile/core';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskCard.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskCard.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"TaskCard.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAK5C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AA2FD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,aAAa,qBAmH9E"}
|
|
@@ -5,24 +5,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TaskCard = TaskCard;
|
|
7
7
|
/**
|
|
8
|
-
* TaskCard -
|
|
8
|
+
* TaskCard - Linear-style modern minimal (borderless)
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
* 1.
|
|
12
|
-
* 2.
|
|
13
|
-
* 3.
|
|
14
|
-
* 4.
|
|
10
|
+
* Design principles:
|
|
11
|
+
* 1. No borders - clean, fast scanning
|
|
12
|
+
* 2. Selected indicator ▌ matches column tabs
|
|
13
|
+
* 3. Priority badge leads the title row
|
|
14
|
+
* 4. Meta row indented to align with title
|
|
15
|
+
* 5. Consistent visual language (█░ progress, · separators)
|
|
15
16
|
*/
|
|
16
17
|
const react_1 = __importDefault(require("react"));
|
|
17
18
|
const ink_1 = require("ink");
|
|
18
19
|
const theme_js_1 = require("../theme.js");
|
|
19
20
|
const utils_js_1 = require("../utils.js");
|
|
20
|
-
|
|
21
|
+
const TaskCardMeasure_js_1 = require("./TaskCardMeasure.js");
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Sub-components
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/** Priority badge - compact colored label */
|
|
21
26
|
function PriorityBadge({ priority }) {
|
|
22
27
|
if (!priority)
|
|
23
28
|
return null;
|
|
24
29
|
const color = (0, utils_js_1.getPriorityColor)(priority);
|
|
25
|
-
// Use 3-char abbreviations for consistency: LOW, MED, HI, CRIT
|
|
26
30
|
const abbrev = {
|
|
27
31
|
low: 'LOW',
|
|
28
32
|
medium: 'MED',
|
|
@@ -32,86 +36,125 @@ function PriorityBadge({ priority }) {
|
|
|
32
36
|
const label = abbrev[priority.toLowerCase()] || priority.toUpperCase().slice(0, 4);
|
|
33
37
|
return (react_1.default.createElement(ink_1.Text, { color: "black", backgroundColor: color, bold: true }, ` ${label} `));
|
|
34
38
|
}
|
|
35
|
-
|
|
36
|
-
function
|
|
37
|
-
if (!tags || tags.length === 0)
|
|
38
|
-
return null;
|
|
39
|
-
const visibleTags = tags.slice(0, maxTags);
|
|
40
|
-
const remaining = tags.length - maxTags;
|
|
41
|
-
// Join tags with spaces for consistent rendering
|
|
42
|
-
let tagString = visibleTags.map(t => `#${t}`).join(' ');
|
|
43
|
-
if (remaining > 0) {
|
|
44
|
-
tagString += ` +${remaining}`;
|
|
45
|
-
}
|
|
46
|
-
// Truncate if maxWidth provided
|
|
47
|
-
if (maxWidth && tagString.length > maxWidth) {
|
|
48
|
-
tagString = tagString.slice(0, maxWidth - 1) + '…';
|
|
49
|
-
}
|
|
50
|
-
return (react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
|
|
51
|
-
react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, tagString)));
|
|
52
|
-
}
|
|
53
|
-
// Subtask progress indicator
|
|
54
|
-
function SubtaskProgress({ completed, total }) {
|
|
39
|
+
/** Compact bracketed progress count [X/Y] */
|
|
40
|
+
function SubtaskCount({ completed, total }) {
|
|
55
41
|
if (total === 0)
|
|
56
42
|
return null;
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
return (react_1.default.createElement(ink_1.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
43
|
+
const allDone = completed === total;
|
|
44
|
+
const color = allDone ? theme_js_1.PALETTE.success : theme_js_1.PALETTE.textSecondary;
|
|
45
|
+
return (react_1.default.createElement(ink_1.Text, { color: color },
|
|
46
|
+
"[",
|
|
47
|
+
completed,
|
|
48
|
+
"/",
|
|
49
|
+
total,
|
|
50
|
+
"]"));
|
|
64
51
|
}
|
|
65
|
-
|
|
66
|
-
function
|
|
52
|
+
/** Due date with urgency coloring */
|
|
53
|
+
function DueDate({ dueDate }) {
|
|
67
54
|
if (!dueDate)
|
|
68
55
|
return null;
|
|
69
56
|
const due = new Date(dueDate);
|
|
70
57
|
const now = new Date();
|
|
71
58
|
const diffDays = Math.ceil((due.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
|
|
72
|
-
// Determine color based on urgency
|
|
73
59
|
const getColor = () => {
|
|
74
60
|
if (diffDays < 0)
|
|
75
|
-
return theme_js_1.PALETTE.error;
|
|
61
|
+
return theme_js_1.PALETTE.error;
|
|
76
62
|
if (diffDays <= 2)
|
|
77
|
-
return theme_js_1.PALETTE.warning;
|
|
63
|
+
return theme_js_1.PALETTE.warning;
|
|
78
64
|
return theme_js_1.PALETTE.textSecondary;
|
|
79
65
|
};
|
|
80
|
-
// Format as short date
|
|
81
66
|
const formatted = due.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
|
|
67
|
+
const icon = diffDays < 0 ? ` ${theme_js_1.ICONS.warning}` : '';
|
|
82
68
|
return (react_1.default.createElement(ink_1.Text, { color: getColor() },
|
|
83
|
-
|
|
84
|
-
|
|
69
|
+
formatted,
|
|
70
|
+
icon));
|
|
71
|
+
}
|
|
72
|
+
/** Tags display - compact inline */
|
|
73
|
+
function Tags({ tags, maxTags = 2 }) {
|
|
74
|
+
if (!tags || tags.length === 0)
|
|
75
|
+
return null;
|
|
76
|
+
const visible = tags.slice(0, maxTags);
|
|
77
|
+
const remaining = tags.length - maxTags;
|
|
78
|
+
return (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted },
|
|
79
|
+
visible.map((t, i) => (react_1.default.createElement(ink_1.Text, { key: t },
|
|
80
|
+
react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary },
|
|
81
|
+
"#",
|
|
82
|
+
t),
|
|
83
|
+
i < visible.length - 1 && ' '))),
|
|
84
|
+
remaining > 0 && react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim },
|
|
85
|
+
" +",
|
|
86
|
+
remaining)));
|
|
87
|
+
}
|
|
88
|
+
/** Separator dot */
|
|
89
|
+
function Sep() {
|
|
90
|
+
return react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, " \u00B7 ");
|
|
85
91
|
}
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// Main TaskCard Component
|
|
94
|
+
// ============================================================================
|
|
86
95
|
function TaskCard({ task, isSelected, isExpanded, width }) {
|
|
87
96
|
const subtasks = task.subtasks || [];
|
|
88
97
|
const completedSubtasks = subtasks.filter(s => s.completed).length;
|
|
89
|
-
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
98
|
+
// Indicator width: " ▌ " = 4 chars for selected, " " = 4 chars for not
|
|
99
|
+
const indicatorWidth = 4;
|
|
100
|
+
const contentWidth = width - indicatorWidth - 2; // -2 for right padding
|
|
101
|
+
// Build meta segments for row 2
|
|
102
|
+
// Order: progress → date → tags (fixed-width first for table-like alignment)
|
|
103
|
+
const metaSegments = [];
|
|
104
|
+
if (subtasks.length > 0) {
|
|
105
|
+
metaSegments.push(react_1.default.createElement(SubtaskCount, { key: "progress", completed: completedSubtasks, total: subtasks.length }));
|
|
106
|
+
}
|
|
107
|
+
if (task.dueDate) {
|
|
108
|
+
metaSegments.push(react_1.default.createElement(DueDate, { key: "due", dueDate: task.dueDate }));
|
|
109
|
+
}
|
|
110
|
+
if (task.tags && task.tags.length > 0) {
|
|
111
|
+
metaSegments.push(react_1.default.createElement(Tags, { key: "tags", tags: task.tags, maxTags: 3 }));
|
|
112
|
+
}
|
|
113
|
+
// Join meta segments with separators
|
|
114
|
+
const metaContent = [];
|
|
115
|
+
metaSegments.forEach((seg, i) => {
|
|
116
|
+
if (i > 0)
|
|
117
|
+
metaContent.push(react_1.default.createElement(Sep, { key: `sep-${i}` }));
|
|
118
|
+
metaContent.push(seg);
|
|
119
|
+
});
|
|
120
|
+
// Calculate title width (account for priority badge if present)
|
|
121
|
+
const priorityWidth = task.priority ? 7 : 0; // " HIGH " = 6 + 1 space
|
|
122
|
+
const titleWidth = contentWidth - priorityWidth;
|
|
123
|
+
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: width },
|
|
124
|
+
react_1.default.createElement(ink_1.Box, null,
|
|
125
|
+
react_1.default.createElement(ink_1.Text, { color: isSelected ? theme_js_1.PALETTE.accent : theme_js_1.PALETTE.textDim }, isSelected ? ' ▌ ' : ' '),
|
|
126
|
+
task.priority && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
127
|
+
react_1.default.createElement(PriorityBadge, { priority: task.priority }),
|
|
128
|
+
react_1.default.createElement(ink_1.Text, null, " "))),
|
|
129
|
+
react_1.default.createElement(ink_1.Text, { color: isSelected ? theme_js_1.PALETTE.text : theme_js_1.PALETTE.textSecondary, bold: isSelected }, (0, utils_js_1.truncate)(task.title, titleWidth))),
|
|
130
|
+
react_1.default.createElement(ink_1.Box, { width: width },
|
|
131
|
+
react_1.default.createElement(ink_1.Text, null, ' '),
|
|
132
|
+
metaContent.length > 0 ? (react_1.default.createElement(ink_1.Box, null, metaContent)) : null,
|
|
133
|
+
react_1.default.createElement(ink_1.Spacer, null),
|
|
134
|
+
react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, task.id)),
|
|
135
|
+
isExpanded && (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1, marginLeft: 4 },
|
|
136
|
+
task.description && (react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
|
|
137
|
+
(0, TaskCardMeasure_js_1.wrapText)(task.description, contentWidth - 4).slice(0, 3).map((line, i) => (react_1.default.createElement(ink_1.Text, { key: i, color: theme_js_1.PALETTE.textSecondary }, (0, utils_js_1.truncate)(line, contentWidth - 4)))),
|
|
138
|
+
(0, TaskCardMeasure_js_1.wrapText)(task.description, contentWidth - 4).length > 3 && (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, "\u2026")))),
|
|
139
|
+
subtasks.length > 0 && (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: task.description ? 1 : 0 },
|
|
140
|
+
subtasks.slice(0, 5).map((st, i) => (react_1.default.createElement(ink_1.Text, { key: i, color: st.completed ? theme_js_1.PALETTE.success : theme_js_1.PALETTE.textSecondary },
|
|
141
|
+
st.completed ? theme_js_1.ICONS.success : '○',
|
|
110
142
|
" ",
|
|
111
|
-
(0, utils_js_1.truncate)(st.title, contentWidth -
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
143
|
+
(0, utils_js_1.truncate)(st.title, contentWidth - 6)))),
|
|
144
|
+
subtasks.length > 5 && (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim },
|
|
145
|
+
" +",
|
|
146
|
+
subtasks.length - 5,
|
|
147
|
+
" more")))),
|
|
148
|
+
task.relatedFiles && task.relatedFiles.length > 0 && (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1 },
|
|
149
|
+
task.relatedFiles.slice(0, 3).map((file, i) => {
|
|
150
|
+
const fileName = file.split('/').pop() || file;
|
|
151
|
+
return (react_1.default.createElement(ink_1.Text, { key: i },
|
|
152
|
+
react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, "\u2192 "),
|
|
153
|
+
react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accentAlt }, (0, utils_js_1.truncate)(fileName, contentWidth - 6))));
|
|
154
|
+
}),
|
|
155
|
+
task.relatedFiles.length > 3 && (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim },
|
|
156
|
+
" +",
|
|
157
|
+
task.relatedFiles.length - 3,
|
|
158
|
+
" more"))))))));
|
|
116
159
|
}
|
|
117
160
|
//# sourceMappingURL=TaskCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskCard.js","sourceRoot":"","sources":["../../../src/tui/components/TaskCard.tsx"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"TaskCard.js","sourceRoot":"","sources":["../../../src/tui/components/TaskCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskCardMeasure - Single source of truth for TaskCard height calculations
|
|
3
|
+
*
|
|
4
|
+
* This module provides deterministic height calculation for TaskCards.
|
|
5
|
+
* Used by both TaskCard (rendering) and TaskList (viewport scrolling).
|
|
6
|
+
*/
|
|
7
|
+
import type { Task } from '@brainfile/core';
|
|
8
|
+
export interface TaskCardDimensions {
|
|
9
|
+
collapsed: number;
|
|
10
|
+
expanded: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Wrap text to a maximum width, returning an array of lines.
|
|
14
|
+
* Each line is guaranteed to fit within maxWidth characters.
|
|
15
|
+
*/
|
|
16
|
+
export declare function wrapText(text: string, maxWidth: number): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Safe truncation that always returns a non-empty string.
|
|
19
|
+
* Ink requires non-empty strings to avoid rendering errors.
|
|
20
|
+
*/
|
|
21
|
+
export declare function safeTruncate(text: string | undefined, maxWidth: number): string;
|
|
22
|
+
/**
|
|
23
|
+
* Calculate exact height dimensions for a TaskCard.
|
|
24
|
+
*
|
|
25
|
+
* Linear-style borderless design:
|
|
26
|
+
*
|
|
27
|
+
* COLLAPSED (always 3 lines):
|
|
28
|
+
* - Row 1: indicator + priority + title = 1
|
|
29
|
+
* - Row 2: indented meta + ID = 1
|
|
30
|
+
* - Margin between cards (handled by TaskList) = 1
|
|
31
|
+
*
|
|
32
|
+
* EXPANDED (variable):
|
|
33
|
+
* - Base collapsed: 3
|
|
34
|
+
* - marginTop before expanded content: 1
|
|
35
|
+
* - Description: min(lines, 3) + overflow(1) (if present)
|
|
36
|
+
* - Subtasks: marginTop(conditional) + min(count, 5) + overflow(1) (if present)
|
|
37
|
+
* - Related files: marginTop(1) + min(count, 3) + overflow(1) (if present)
|
|
38
|
+
*/
|
|
39
|
+
export declare function measureTaskCard(task: Task, contentWidth: number): TaskCardDimensions;
|
|
40
|
+
/**
|
|
41
|
+
* Get the height for a task card based on expanded state.
|
|
42
|
+
* Convenience wrapper for TaskList viewport calculations.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getTaskCardHeight(task: Task, isExpanded: boolean, contentWidth: number): number;
|
|
45
|
+
//# sourceMappingURL=TaskCardMeasure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskCardMeasure.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskCardMeasure.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BjE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM/E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAwCpF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAG/F"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapText = wrapText;
|
|
4
|
+
exports.safeTruncate = safeTruncate;
|
|
5
|
+
exports.measureTaskCard = measureTaskCard;
|
|
6
|
+
exports.getTaskCardHeight = getTaskCardHeight;
|
|
7
|
+
/**
|
|
8
|
+
* Wrap text to a maximum width, returning an array of lines.
|
|
9
|
+
* Each line is guaranteed to fit within maxWidth characters.
|
|
10
|
+
*/
|
|
11
|
+
function wrapText(text, maxWidth) {
|
|
12
|
+
if (!text || maxWidth <= 0)
|
|
13
|
+
return [];
|
|
14
|
+
const words = text.split(/\s+/);
|
|
15
|
+
const lines = [];
|
|
16
|
+
let currentLine = '';
|
|
17
|
+
for (const word of words) {
|
|
18
|
+
if (word.length > maxWidth) {
|
|
19
|
+
// Word is longer than line - split it
|
|
20
|
+
if (currentLine) {
|
|
21
|
+
lines.push(currentLine);
|
|
22
|
+
currentLine = '';
|
|
23
|
+
}
|
|
24
|
+
for (let i = 0; i < word.length; i += maxWidth) {
|
|
25
|
+
lines.push(word.slice(i, i + maxWidth));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else if (currentLine.length + 1 + word.length <= maxWidth) {
|
|
29
|
+
// Word fits on current line
|
|
30
|
+
currentLine = currentLine ? `${currentLine} ${word}` : word;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Start new line
|
|
34
|
+
if (currentLine)
|
|
35
|
+
lines.push(currentLine);
|
|
36
|
+
currentLine = word;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (currentLine)
|
|
40
|
+
lines.push(currentLine);
|
|
41
|
+
return lines.length > 0 ? lines : [''];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Safe truncation that always returns a non-empty string.
|
|
45
|
+
* Ink requires non-empty strings to avoid rendering errors.
|
|
46
|
+
*/
|
|
47
|
+
function safeTruncate(text, maxWidth) {
|
|
48
|
+
if (!text)
|
|
49
|
+
return ' ';
|
|
50
|
+
if (maxWidth <= 0)
|
|
51
|
+
return ' ';
|
|
52
|
+
if (maxWidth <= 3)
|
|
53
|
+
return text.slice(0, maxWidth);
|
|
54
|
+
if (text.length <= maxWidth)
|
|
55
|
+
return text;
|
|
56
|
+
return text.slice(0, maxWidth - 1) + '…';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Calculate exact height dimensions for a TaskCard.
|
|
60
|
+
*
|
|
61
|
+
* Linear-style borderless design:
|
|
62
|
+
*
|
|
63
|
+
* COLLAPSED (always 3 lines):
|
|
64
|
+
* - Row 1: indicator + priority + title = 1
|
|
65
|
+
* - Row 2: indented meta + ID = 1
|
|
66
|
+
* - Margin between cards (handled by TaskList) = 1
|
|
67
|
+
*
|
|
68
|
+
* EXPANDED (variable):
|
|
69
|
+
* - Base collapsed: 3
|
|
70
|
+
* - marginTop before expanded content: 1
|
|
71
|
+
* - Description: min(lines, 3) + overflow(1) (if present)
|
|
72
|
+
* - Subtasks: marginTop(conditional) + min(count, 5) + overflow(1) (if present)
|
|
73
|
+
* - Related files: marginTop(1) + min(count, 3) + overflow(1) (if present)
|
|
74
|
+
*/
|
|
75
|
+
function measureTaskCard(task, contentWidth) {
|
|
76
|
+
// Collapsed is ALWAYS 3 lines (2 content + 1 margin)
|
|
77
|
+
const collapsed = 3;
|
|
78
|
+
// Expanded builds on top of collapsed base
|
|
79
|
+
let expanded = 3;
|
|
80
|
+
// marginTop before expanded content
|
|
81
|
+
expanded += 1;
|
|
82
|
+
// Description section (if present)
|
|
83
|
+
if (task.description) {
|
|
84
|
+
const descLines = wrapText(task.description, contentWidth - 4);
|
|
85
|
+
expanded += Math.min(descLines.length, 3);
|
|
86
|
+
if (descLines.length > 3) {
|
|
87
|
+
expanded += 1; // "…" overflow indicator
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Subtasks section (if present)
|
|
91
|
+
if (task.subtasks && task.subtasks.length > 0) {
|
|
92
|
+
if (task.description) {
|
|
93
|
+
expanded += 1; // marginTop={1} only if description present
|
|
94
|
+
}
|
|
95
|
+
expanded += Math.min(task.subtasks.length, 5);
|
|
96
|
+
if (task.subtasks.length > 5) {
|
|
97
|
+
expanded += 1; // "+N more" line
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Related files section (if present)
|
|
101
|
+
if (task.relatedFiles && task.relatedFiles.length > 0) {
|
|
102
|
+
expanded += 1; // marginTop={1}
|
|
103
|
+
expanded += Math.min(task.relatedFiles.length, 3);
|
|
104
|
+
if (task.relatedFiles.length > 3) {
|
|
105
|
+
expanded += 1; // "+N more" line
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return { collapsed, expanded };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get the height for a task card based on expanded state.
|
|
112
|
+
* Convenience wrapper for TaskList viewport calculations.
|
|
113
|
+
*/
|
|
114
|
+
function getTaskCardHeight(task, isExpanded, contentWidth) {
|
|
115
|
+
const dims = measureTaskCard(task, contentWidth);
|
|
116
|
+
return isExpanded ? dims.expanded : dims.collapsed;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=TaskCardMeasure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskCardMeasure.js","sourceRoot":"","sources":["../../../src/tui/components/TaskCardMeasure.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAK5C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,aAAa,qBAuFvG"}
|
|
@@ -8,19 +8,10 @@ const react_1 = __importDefault(require("react"));
|
|
|
8
8
|
const ink_1 = require("ink");
|
|
9
9
|
const theme_js_1 = require("../theme.js");
|
|
10
10
|
const TaskCard_js_1 = require("./TaskCard.js");
|
|
11
|
+
const TaskCardMeasure_js_1 = require("./TaskCardMeasure.js");
|
|
11
12
|
function TaskList({ tasks, selectedIndex, expandedIds, viewportHeight, termWidth }) {
|
|
12
13
|
const cardWidth = termWidth - 4;
|
|
13
|
-
//
|
|
14
|
-
const getTaskHeight = (task, isExpanded) => {
|
|
15
|
-
// Base: top border(1) + title(1) + metadata(1) + bottom border(1) + margin(1) = 5
|
|
16
|
-
if (!isExpanded)
|
|
17
|
-
return 5;
|
|
18
|
-
const subtaskCount = task.subtasks?.length || 0;
|
|
19
|
-
const hasDescription = task.description;
|
|
20
|
-
const hasFiles = task.relatedFiles?.length;
|
|
21
|
-
// expandedLines: separator(1) + description(2 if present) + subtasks + files(2 if present)
|
|
22
|
-
return 5 + 1 + (hasDescription ? 2 : 0) + subtaskCount + (hasFiles ? 2 : 0);
|
|
23
|
-
};
|
|
14
|
+
const contentWidth = cardWidth - 6; // indicator (4) + right padding (2) = 6
|
|
24
15
|
// Calculate scroll offset - ensure selected task is visible
|
|
25
16
|
// Start from selected task and work backwards to find scroll position
|
|
26
17
|
let scrollOffset = 0;
|
|
@@ -28,11 +19,13 @@ function TaskList({ tasks, selectedIndex, expandedIds, viewportHeight, termWidth
|
|
|
28
19
|
for (let i = 0; i < selectedIndex; i++) {
|
|
29
20
|
const task = tasks[i];
|
|
30
21
|
const isExpanded = expandedIds.has(task.id);
|
|
31
|
-
heightBeforeSelected +=
|
|
22
|
+
heightBeforeSelected += (0, TaskCardMeasure_js_1.getTaskCardHeight)(task, isExpanded, contentWidth);
|
|
32
23
|
}
|
|
33
24
|
// If selected task would be off screen, adjust scroll
|
|
34
25
|
const selectedTask = tasks[selectedIndex];
|
|
35
|
-
const selectedHeight = selectedTask
|
|
26
|
+
const selectedHeight = selectedTask
|
|
27
|
+
? (0, TaskCardMeasure_js_1.getTaskCardHeight)(selectedTask, expandedIds.has(selectedTask.id), contentWidth)
|
|
28
|
+
: 5;
|
|
36
29
|
if (heightBeforeSelected + selectedHeight > viewportHeight) {
|
|
37
30
|
// Need to scroll - start from selected task
|
|
38
31
|
scrollOffset = selectedIndex;
|
|
@@ -48,7 +41,7 @@ function TaskList({ tasks, selectedIndex, expandedIds, viewportHeight, termWidth
|
|
|
48
41
|
const task = tasks[i];
|
|
49
42
|
const isSelected = i === selectedIndex;
|
|
50
43
|
const isExpanded = expandedIds.has(task.id);
|
|
51
|
-
const taskLines =
|
|
44
|
+
const taskLines = (0, TaskCardMeasure_js_1.getTaskCardHeight)(task, isExpanded, contentWidth);
|
|
52
45
|
// Always include the selected task, even if it's tall
|
|
53
46
|
if (isSelected) {
|
|
54
47
|
visibleItems.push({ task, isSelected, isExpanded });
|
|
@@ -74,8 +67,8 @@ function TaskList({ tasks, selectedIndex, expandedIds, viewportHeight, termWidth
|
|
|
74
67
|
react_1.default.createElement(ink_1.Text, null, ' '))))));
|
|
75
68
|
}
|
|
76
69
|
return (react_1.default.createElement(ink_1.Box, { flexGrow: 1, flexDirection: "column", paddingLeft: 1 },
|
|
77
|
-
visibleItems.map(({ task, isSelected, isExpanded }) => (react_1.default.createElement(
|
|
78
|
-
|
|
79
|
-
|
|
70
|
+
visibleItems.map(({ task, isSelected, isExpanded }, index) => (react_1.default.createElement(ink_1.Box, { key: task.id, marginTop: index > 0 ? 1 : 0 },
|
|
71
|
+
react_1.default.createElement(TaskCard_js_1.TaskCard, { task: task, isSelected: isSelected, isExpanded: isExpanded, width: cardWidth })))),
|
|
72
|
+
emptyLines > 0 && react_1.default.createElement(ink_1.Box, { height: emptyLines })));
|
|
80
73
|
}
|
|
81
74
|
//# sourceMappingURL=TaskList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../../src/tui/components/TaskList.tsx"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../../src/tui/components/TaskList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -22,4 +22,8 @@ export { RulesPanel } from './RulesPanel.js';
|
|
|
22
22
|
export type { RulesPanelProps } from './RulesPanel.js';
|
|
23
23
|
export { ArchivePanel } from './ArchivePanel.js';
|
|
24
24
|
export type { ArchivePanelProps } from './ArchivePanel.js';
|
|
25
|
+
export { ManualBorder, BorderRow } from './ManualBorder.js';
|
|
26
|
+
export type { ManualBorderProps, BorderRowProps } from './ManualBorder.js';
|
|
27
|
+
export { measureTaskCard, getTaskCardHeight, wrapText, safeTruncate } from './TaskCardMeasure.js';
|
|
28
|
+
export type { TaskCardDimensions } from './TaskCardMeasure.js';
|
|
25
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClG,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ArchivePanel = exports.RulesPanel = exports.MainPanelTabs = exports.NewTaskOverlay = exports.SubtaskOverlay = exports.DeleteConfirmOverlay = exports.MoveOverlay = exports.StatusMessageDisplay = exports.HelpOverlay = exports.StatusBar = exports.TaskList = exports.TaskCard = exports.ColumnTabs = exports.SearchBar = exports.ProgressBar = exports.Header = void 0;
|
|
3
|
+
exports.safeTruncate = exports.wrapText = exports.getTaskCardHeight = exports.measureTaskCard = exports.BorderRow = exports.ManualBorder = exports.ArchivePanel = exports.RulesPanel = exports.MainPanelTabs = exports.NewTaskOverlay = exports.SubtaskOverlay = exports.DeleteConfirmOverlay = exports.MoveOverlay = exports.StatusMessageDisplay = exports.HelpOverlay = exports.StatusBar = exports.TaskList = exports.TaskCard = exports.ColumnTabs = exports.SearchBar = exports.ProgressBar = exports.Header = void 0;
|
|
4
4
|
var Header_js_1 = require("./Header.js");
|
|
5
5
|
Object.defineProperty(exports, "Header", { enumerable: true, get: function () { return Header_js_1.Header; } });
|
|
6
6
|
var ProgressBar_js_1 = require("./ProgressBar.js");
|
|
@@ -29,4 +29,12 @@ var RulesPanel_js_1 = require("./RulesPanel.js");
|
|
|
29
29
|
Object.defineProperty(exports, "RulesPanel", { enumerable: true, get: function () { return RulesPanel_js_1.RulesPanel; } });
|
|
30
30
|
var ArchivePanel_js_1 = require("./ArchivePanel.js");
|
|
31
31
|
Object.defineProperty(exports, "ArchivePanel", { enumerable: true, get: function () { return ArchivePanel_js_1.ArchivePanel; } });
|
|
32
|
+
var ManualBorder_js_1 = require("./ManualBorder.js");
|
|
33
|
+
Object.defineProperty(exports, "ManualBorder", { enumerable: true, get: function () { return ManualBorder_js_1.ManualBorder; } });
|
|
34
|
+
Object.defineProperty(exports, "BorderRow", { enumerable: true, get: function () { return ManualBorder_js_1.BorderRow; } });
|
|
35
|
+
var TaskCardMeasure_js_1 = require("./TaskCardMeasure.js");
|
|
36
|
+
Object.defineProperty(exports, "measureTaskCard", { enumerable: true, get: function () { return TaskCardMeasure_js_1.measureTaskCard; } });
|
|
37
|
+
Object.defineProperty(exports, "getTaskCardHeight", { enumerable: true, get: function () { return TaskCardMeasure_js_1.getTaskCardHeight; } });
|
|
38
|
+
Object.defineProperty(exports, "wrapText", { enumerable: true, get: function () { return TaskCardMeasure_js_1.wrapText; } });
|
|
39
|
+
Object.defineProperty(exports, "safeTruncate", { enumerable: true, get: function () { return TaskCardMeasure_js_1.safeTruncate; } });
|
|
32
40
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAGf,mDAA+C;AAAtC,6GAAA,WAAW,OAAA;AAGpB,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAGlB,iDAA6C;AAApC,2GAAA,UAAU,OAAA;AAGnB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AAGjB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AAGjB,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAGlB,mDAA+C;AAAtC,6GAAA,WAAW,OAAA;AAGpB,6CAMuB;AALrB,mHAAA,oBAAoB,OAAA;AACpB,0GAAA,WAAW,OAAA;AACX,mHAAA,oBAAoB,OAAA;AACpB,6GAAA,cAAc,OAAA;AACd,6GAAA,cAAc,OAAA;AAUhB,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AAGtB,iDAA6C;AAApC,2GAAA,UAAU,OAAA;AAGnB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAGf,mDAA+C;AAAtC,6GAAA,WAAW,OAAA;AAGpB,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAGlB,iDAA6C;AAApC,2GAAA,UAAU,OAAA;AAGnB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AAGjB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AAGjB,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAGlB,mDAA+C;AAAtC,6GAAA,WAAW,OAAA;AAGpB,6CAMuB;AALrB,mHAAA,oBAAoB,OAAA;AACpB,0GAAA,WAAW,OAAA;AACX,mHAAA,oBAAoB,OAAA;AACpB,6GAAA,cAAc,OAAA;AACd,6GAAA,cAAc,OAAA;AAUhB,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AAGtB,iDAA6C;AAApC,2GAAA,UAAU,OAAA;AAGnB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AAGrB,qDAA4D;AAAnD,+GAAA,YAAY,OAAA;AAAE,4GAAA,SAAS,OAAA;AAGhC,2DAAkG;AAAzF,qHAAA,eAAe,OAAA;AAAE,uHAAA,iBAAiB,OAAA;AAAE,8GAAA,QAAQ,OAAA;AAAE,kHAAA,YAAY,OAAA"}
|
package/dist/tui/types.d.ts
CHANGED
package/dist/tui/types.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FOOTER_ROWS = exports.HEADER_ROWS = void 0;
|
|
4
4
|
exports.HEADER_ROWS = 7; // title(1) + progress(3: padTop+content+padBottom) + tabs(2: marginTop+content) + separator(1)
|
|
5
|
-
exports.FOOTER_ROWS =
|
|
5
|
+
exports.FOOTER_ROWS = 4; // separator(1) + status message(1) + status bar(2)
|
|
6
6
|
//# sourceMappingURL=types.js.map
|
package/dist/tui/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":";;;AAqFa,QAAA,WAAW,GAAG,CAAC,CAAC,CAAC,+FAA+F;AAChH,QAAA,WAAW,GAAG,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":";;;AAqFa,QAAA,WAAW,GAAG,CAAC,CAAC,CAAC,+FAA+F;AAChH,QAAA,WAAW,GAAG,CAAC,CAAC,CAAC,mDAAmD"}
|