@brainfile/cli 0.10.1 → 0.10.3
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 +11 -0
- package/dist/tui/components/TaskCard.d.ts.map +1 -1
- package/dist/tui/components/TaskCard.js +25 -13
- package/dist/tui/components/TaskCard.js.map +1 -1
- package/dist/tui/components/TaskList.d.ts.map +1 -1
- package/dist/tui/components/TaskList.js +41 -16
- package/dist/tui/components/TaskList.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.10.3] - 2025-11-27
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **Task card border overflow** - Fixed metadata row (tags, priority) overflowing the rounded border. Added explicit width constraints and tag truncation with ellipsis.
|
|
14
|
+
|
|
15
|
+
## [0.10.2] - 2025-11-27
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- **Expanded task disappearing** - Fixed bug where expanding a task with many subtasks would cause it to vanish from view. Selected task is now always rendered regardless of height.
|
|
19
|
+
- **Priority badge labels** - Changed truncated "MEDI" to proper abbreviations: LOW, MED, HIGH, CRIT
|
|
20
|
+
|
|
10
21
|
## [0.10.1] - 2025-11-27
|
|
11
22
|
|
|
12
23
|
### Added
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskCard.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"TaskCard.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AA0FD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,aAAa,qBAmF9E"}
|
|
@@ -22,21 +22,33 @@ function PriorityBadge({ priority }) {
|
|
|
22
22
|
if (!priority)
|
|
23
23
|
return null;
|
|
24
24
|
const color = (0, utils_js_1.getPriorityColor)(priority);
|
|
25
|
-
|
|
25
|
+
// Use 3-char abbreviations for consistency: LOW, MED, HI, CRIT
|
|
26
|
+
const abbrev = {
|
|
27
|
+
low: 'LOW',
|
|
28
|
+
medium: 'MED',
|
|
29
|
+
high: 'HIGH',
|
|
30
|
+
critical: 'CRIT',
|
|
31
|
+
};
|
|
32
|
+
const label = abbrev[priority.toLowerCase()] || priority.toUpperCase().slice(0, 4);
|
|
26
33
|
return (react_1.default.createElement(ink_1.Text, { color: "black", backgroundColor: color, bold: true }, ` ${label} `));
|
|
27
34
|
}
|
|
28
|
-
// Tag pills
|
|
29
|
-
function TagPills({ tags, maxTags = 3 }) {
|
|
35
|
+
// Tag pills with optional truncation
|
|
36
|
+
function TagPills({ tags, maxTags = 3, maxWidth }) {
|
|
30
37
|
if (!tags || tags.length === 0)
|
|
31
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
|
+
}
|
|
32
50
|
return (react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
|
|
33
|
-
|
|
34
|
-
react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary },
|
|
35
|
-
"#",
|
|
36
|
-
tag)))),
|
|
37
|
-
tags.length > maxTags && (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary },
|
|
38
|
-
" +",
|
|
39
|
-
tags.length - maxTags))));
|
|
51
|
+
react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, tagString)));
|
|
40
52
|
}
|
|
41
53
|
// Subtask progress indicator
|
|
42
54
|
function SubtaskProgress({ completed, total }) {
|
|
@@ -76,14 +88,14 @@ function TaskCard({ task, isSelected, isExpanded, width }) {
|
|
|
76
88
|
const completedSubtasks = subtasks.filter(s => s.completed).length;
|
|
77
89
|
const borderColor = isSelected ? theme_js_1.PALETTE.progress : theme_js_1.PALETTE.border;
|
|
78
90
|
const contentWidth = width - 4; // Account for border + padding
|
|
79
|
-
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: borderColor, paddingX: 1, marginBottom: 1 },
|
|
91
|
+
return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: borderColor, paddingX: 1, marginBottom: 1, width: width },
|
|
80
92
|
react_1.default.createElement(ink_1.Box, { justifyContent: "space-between" },
|
|
81
93
|
react_1.default.createElement(ink_1.Box, { flexShrink: 1 },
|
|
82
94
|
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, contentWidth - task.id.length - 2))),
|
|
83
95
|
react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, task.id)),
|
|
84
|
-
(task.priority || (task.tags && task.tags.length > 0) || subtasks.length > 0 || task.dueDate) && (react_1.default.createElement(ink_1.Box, { marginTop: 0 },
|
|
96
|
+
(task.priority || (task.tags && task.tags.length > 0) || subtasks.length > 0 || task.dueDate) && (react_1.default.createElement(ink_1.Box, { marginTop: 0, width: contentWidth },
|
|
85
97
|
react_1.default.createElement(PriorityBadge, { priority: task.priority }),
|
|
86
|
-
react_1.default.createElement(TagPills, { tags: task.tags }),
|
|
98
|
+
react_1.default.createElement(TagPills, { tags: task.tags, maxWidth: contentWidth - 25 }),
|
|
87
99
|
subtasks.length > 0 && (react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
|
|
88
100
|
react_1.default.createElement(SubtaskProgress, { completed: completedSubtasks, total: subtasks.length }))),
|
|
89
101
|
task.dueDate && (react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
|
|
@@ -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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"}
|
|
@@ -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;AAI5C,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,
|
|
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;AAI5C,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,qBAgGvG"}
|
|
@@ -9,34 +9,59 @@ const ink_1 = require("ink");
|
|
|
9
9
|
const theme_js_1 = require("../theme.js");
|
|
10
10
|
const TaskCard_js_1 = require("./TaskCard.js");
|
|
11
11
|
function TaskList({ tasks, selectedIndex, expandedIds, viewportHeight, termWidth }) {
|
|
12
|
-
// Calculate scroll offset to keep selection visible
|
|
13
|
-
const scrollOffset = Math.max(0, Math.min(selectedIndex - Math.floor(viewportHeight / 3), Math.max(0, tasks.length - Math.floor(viewportHeight / 2))));
|
|
14
12
|
const cardWidth = termWidth - 4;
|
|
15
|
-
//
|
|
13
|
+
// Helper to calculate task height
|
|
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
|
+
};
|
|
24
|
+
// Calculate scroll offset - ensure selected task is visible
|
|
25
|
+
// Start from selected task and work backwards to find scroll position
|
|
26
|
+
let scrollOffset = 0;
|
|
27
|
+
let heightBeforeSelected = 0;
|
|
28
|
+
for (let i = 0; i < selectedIndex; i++) {
|
|
29
|
+
const task = tasks[i];
|
|
30
|
+
const isExpanded = expandedIds.has(task.id);
|
|
31
|
+
heightBeforeSelected += getTaskHeight(task, isExpanded);
|
|
32
|
+
}
|
|
33
|
+
// If selected task would be off screen, adjust scroll
|
|
34
|
+
const selectedTask = tasks[selectedIndex];
|
|
35
|
+
const selectedHeight = selectedTask ? getTaskHeight(selectedTask, expandedIds.has(selectedTask.id)) : 5;
|
|
36
|
+
if (heightBeforeSelected + selectedHeight > viewportHeight) {
|
|
37
|
+
// Need to scroll - start from selected task
|
|
38
|
+
scrollOffset = selectedIndex;
|
|
39
|
+
}
|
|
40
|
+
else if (heightBeforeSelected > viewportHeight * 0.6) {
|
|
41
|
+
// Selected is in lower part of viewport, scroll to center it a bit
|
|
42
|
+
scrollOffset = Math.max(0, selectedIndex - 2);
|
|
43
|
+
}
|
|
44
|
+
// Build visible items starting from scrollOffset
|
|
16
45
|
const visibleItems = [];
|
|
17
46
|
let linesUsed = 0;
|
|
18
|
-
for (let i = scrollOffset; i < tasks.length
|
|
47
|
+
for (let i = scrollOffset; i < tasks.length; i++) {
|
|
19
48
|
const task = tasks[i];
|
|
20
49
|
const isSelected = i === selectedIndex;
|
|
21
50
|
const isExpanded = expandedIds.has(task.id);
|
|
22
|
-
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
const hasDescription = isExpanded && task.description;
|
|
26
|
-
const hasFiles = isExpanded && task.relatedFiles?.length;
|
|
27
|
-
const expandedLines = isExpanded ? 1 + (hasDescription ? 2 : 0) + subtaskLines + (hasFiles ? 2 : 0) : 0;
|
|
28
|
-
const taskLines = 5 + expandedLines;
|
|
29
|
-
if (linesUsed + taskLines <= viewportHeight) {
|
|
51
|
+
const taskLines = getTaskHeight(task, isExpanded);
|
|
52
|
+
// Always include the selected task, even if it's tall
|
|
53
|
+
if (isSelected) {
|
|
30
54
|
visibleItems.push({ task, isSelected, isExpanded });
|
|
31
55
|
linesUsed += taskLines;
|
|
56
|
+
continue;
|
|
32
57
|
}
|
|
33
|
-
|
|
34
|
-
|
|
58
|
+
// For non-selected tasks, check if they fit
|
|
59
|
+
if (linesUsed + taskLines <= viewportHeight) {
|
|
35
60
|
visibleItems.push({ task, isSelected, isExpanded });
|
|
36
61
|
linesUsed += taskLines;
|
|
37
|
-
break;
|
|
38
62
|
}
|
|
39
|
-
else {
|
|
63
|
+
else if (linesUsed > 0) {
|
|
64
|
+
// We have items and this one doesn't fit, stop
|
|
40
65
|
break;
|
|
41
66
|
}
|
|
42
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../../src/tui/components/TaskList.tsx"],"names":[],"mappings":";;;;;AAcA,
|
|
1
|
+
{"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../../src/tui/components/TaskList.tsx"],"names":[],"mappings":"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"}
|