@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 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
- - Interactive TUI with vim-style navigation
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 (Claude Code, Cursor, etc.)
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,qBAsSlD"}
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"}
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA,oCAwSC;AAxWD,+CAA4D;AAC5D,6BAA2C;AAG3C,yCAA0C;AAE1C,yCAAsD;AACtD,yEAAmE;AACnE,+EAAyE;AACzE,yCAAiE;AACjE,6CAA2C;AAC3C,oDAgB+B;AAI/B,MAAM,YAAY,GAAa;IAC7B,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,IAAI,IAAI,EAAE;IACvB,WAAW,EAAE,OAAO;IACpB,iBAAiB,EAAE,CAAC;IACpB,iBAAiB,EAAE,CAAC;IACpB,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,EAAE;IACf,eAAe,EAAE,IAAI,GAAG,EAAE;IAC1B,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,CAAC;IAClB,oBAAoB,EAAE,CAAC;IACvB,YAAY,EAAE,EAAE;IAChB,cAAc;IACd,cAAc,EAAE,QAAQ;IACxB,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE,EAAE;IAChB,UAAU,EAAE,IAAI;IAChB,gBAAgB;IAChB,OAAO,EAAE,EAAE;IACX,oBAAoB,EAAE,CAAC;IACvB,kBAAkB,EAAE,EAAE;IACtB,yBAAyB,EAAE,CAAC;IAC5B,kBAAkB,EAAE,IAAI,GAAG,EAAE;CAC9B,CAAC;AAEF,8BAA8B;AAC9B,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,SAAgB,YAAY,CAAC,EAAE,QAAQ,EAAY;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,eAAS,GAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAClE,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAE7D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAW,YAAY,CAAC,CAAC;IAE3D,8BAA8B;IAC9B,IAAI,SAAS,GAAG,SAAS,IAAI,UAAU,GAAG,UAAU,EAAE,CAAC;QACrD,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC;YACpC,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,KAAK,EAAE,IAAI,+BAA0B;YAC1D,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa;;gBACjB,SAAS;;gBAAG,UAAU,CAChC;YACP,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa;;gBACjB,SAAS;;gBAAG,UAAU,CAChC;YACP,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;gBACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS,wCAA0C,CACpE,CACF,CACP,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,sBAAW,GAAG,sBAAW,EAAE,CAAC,CAAC,CAAC;IAE3E,uCAAuC;IACvC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAA,0CAAkB,EAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAExE,yDAAyD;IACzD,MAAM,cAAc,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAClC,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC;YAClD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC;YAClD,OAAO,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElB,2DAA2D;IAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,2BAAgB,EAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IACjF,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAE/C,MAAM,eAAe,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACnC,IAAI,CAAC,cAAc,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC,eAAe;YAAE,OAAO,cAAc,CAAC;QAE5C,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,GAAG,GAAG;YACN,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,4BAAiB,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;SACvE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC;IAEpD,iCAAiC;IACjC,MAAM,kBAAkB,GAAG,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC;IAE3E,+BAA+B;IAC/B,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1D,2BAA2B;IAC3B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,GAAG,IAAI;YACP,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5F,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC;SAClE,CAAC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAE3C,kBAAkB;IAClB,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAE9D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElB,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK;YAAE,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IAC/G,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzB,+CAA+C;IAC/C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAA,wBAAW,EAAC,QAAQ,CAAC,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAErD,sBAAsB;IACtB,IAAA,gDAAqB,EAAC;QACpB,KAAK;QACL,QAAQ;QACR,YAAY;QACZ,YAAY;QACZ,qBAAqB,EAAE,eAAe,CAAC,MAAM;QAC7C,cAAc;QACd,aAAa;QACb,QAAQ;QACR,UAAU,EAAE,cAAc;KAC3B,CAAC,CAAC;IAEH,cAAc;IACd,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC;YACpC,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,KAAK,EAAE,IAAI,kBAAa;YAC7C,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;gBACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,IAAG,KAAK,CAAC,KAAK,CAAQ,CACpD;YACN,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;gBACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS;;oBAAQ,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,QAAU;;oBAAU,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,QAAU;gCAAgB,CACtI,CACF,CACP,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CACL,8BAAC,SAAG,IAAC,OAAO,EAAE,CAAC;YACb,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS,iBAAmB,CAC7C,CACP,CAAC;IACJ,CAAC;IAED,eAAe;IACf,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,8BAAC,sBAAW,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAI,CAAC;IACvE,CAAC;IAED,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU;QAE9D,8BAAC,iBAAM,IACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,WAAW,EACvC,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,KAAK,CAAC,WAAW,GAC9B;QAGF,8BAAC,sBAAW,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,GAAI;QAG3E,8BAAC,wBAAa,IACZ,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,GAClC;QAGF,8BAAC,SAAG,IAAC,WAAW,EAAE,CAAC;YACjB,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,IAAG,cAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAQ,CACnF;QAGN,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ;YAErC,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,CAChC;gBAEG,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAC1B,8BAAC,oBAAS,IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,GAAI,CAC9D;gBAGD,8BAAC,qBAAU,IACT,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,KAAK,CAAC,iBAAiB,EACpC,SAAS,EAAE,SAAS,GACpB;gBAGF,8BAAC,SAAG,IAAC,WAAW,EAAE,CAAC;oBACjB,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,IAAG,cAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAQ,CACnF;gBAGL,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,WAAW,IAAI,CACvC,8BAAC,sBAAW,IACV,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,KAAK,CAAC,eAAe,EACpC,SAAS,EAAE,WAAW,CAAC,KAAK,EAC5B,SAAS,EAAE,SAAS,GACpB,CACH;gBAEA,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,WAAW,IAAI,CACjD,8BAAC,+BAAoB,IACnB,MAAM,EAAE,WAAW,CAAC,EAAE,EACtB,SAAS,EAAE,WAAW,CAAC,KAAK,EAC5B,SAAS,EAAE,SAAS,GACpB,CACH;gBAEA,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,IAAI,CAC1C,8BAAC,yBAAc,IACb,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,KAAK,CAAC,oBAAoB,EACzC,SAAS,EAAE,SAAS,GACpB,CACH;gBAEA,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAC5B,8BAAC,yBAAc,IACb,KAAK,EAAE,KAAK,CAAC,YAAY,EACzB,UAAU,EAAE,aAAa,EAAE,KAAK,IAAI,SAAS,EAC7C,SAAS,EAAE,SAAS,GACpB,CACH;gBAGA,kBAAkB,IAAI,CACrB,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;oBAClD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa;;wBAChB,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,IAAI,IAAG,KAAK,CAAC,WAAW,CAAQ;6BAChE;oBACP,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS,gCAAkC,CAC5D,CACP;gBAGA,CAAC,kBAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAC3I,8BAAC,mBAAQ,IACP,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,KAAK,CAAC,iBAAiB,EACtC,WAAW,EAAE,KAAK,CAAC,eAAe,EAClC,cAAc,EAAE,cAAc,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAClE,SAAS,EAAE,SAAS,GACpB,CACH,CACA,CACJ;YAGA,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,CAChC,8BAAC,qBAAU,IACT,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EACxB,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,QAAQ,EAAE,KAAK,CAAC,YAAY,GAC5B,CACH;YAGA,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,CAClC,8BAAC,uBAAY,IACX,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,aAAa,EAAE,KAAK,CAAC,oBAAoB,EACzC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,KAAK,CAAC,kBAAkB,EACrC,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,OAAO,EAAE,cAAc,EACvB,kBAAkB,EAAE,KAAK,CAAC,yBAAyB,GACnD,CACH,CACG;QAGN,8BAAC,SAAG,IAAC,WAAW,EAAE,CAAC;YACjB,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,IAAG,cAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAQ,CACnF;QAGN,8BAAC,SAAG,IAAC,MAAM,EAAE,CAAC,IACX,KAAK,CAAC,aAAa,IAAI,CACtB,8BAAC,+BAAoB,IAAC,OAAO,EAAE,KAAK,CAAC,aAAa,GAAI,CACvD,CACG;QAGN,8BAAC,oBAAS,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,UAAU,EAAE,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAC5F,SAAS,EAAE,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,EACzK,SAAS,EAAE,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,EACpL,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,KAAK,CAAC,WAAW,GAC9B,CACE,CACP,CAAC;AACJ,CAAC"}
@@ -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 - Lipgloss-style task card with rounded borders
2
+ * TaskCard - Linear-style modern minimal (borderless)
3
3
  *
4
- * Features:
5
- * 1. Rounded borders (like Bubbletea/Lipgloss)
6
- * 2. Better visual hierarchy with consistent spacing
7
- * 3. Subtle color accents for priority
8
- * 4. Cleaner metadata display
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;;;;;;;;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"}
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 - Lipgloss-style task card with rounded borders
8
+ * TaskCard - Linear-style modern minimal (borderless)
9
9
  *
10
- * Features:
11
- * 1. Rounded borders (like Bubbletea/Lipgloss)
12
- * 2. Better visual hierarchy with consistent spacing
13
- * 3. Subtle color accents for priority
14
- * 4. Cleaner metadata display
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
- // Priority badge with background color
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
- // Tag pills with optional truncation
36
- function TagPills({ tags, maxTags = 3, maxWidth }) {
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 barWidth = 10;
58
- const filled = Math.round((completed / total) * barWidth);
59
- return (react_1.default.createElement(ink_1.Box, null,
60
- react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, '['),
61
- filled > 0 && react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.success }, '█'.repeat(filled)),
62
- barWidth - filled > 0 && react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, '░'.repeat(barWidth - filled)),
63
- react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, `] ${completed}/${total}`)));
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
- // Due date indicator with color coding
66
- function DueDateBadge({ dueDate }) {
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; // Overdue
61
+ return theme_js_1.PALETTE.error;
76
62
  if (diffDays <= 2)
77
- return theme_js_1.PALETTE.warning; // Due soon
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
- diffDays < 0 ? '⚠ ' : '📅 ',
84
- formatted));
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
- const borderColor = isSelected ? theme_js_1.PALETTE.progress : theme_js_1.PALETTE.border;
90
- const contentWidth = width - 4; // Account for border + padding
91
- return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: borderColor, paddingX: 1, marginBottom: 1, width: width },
92
- react_1.default.createElement(ink_1.Box, { justifyContent: "space-between" },
93
- react_1.default.createElement(ink_1.Box, { flexShrink: 1 },
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))),
95
- react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, task.id)),
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 },
97
- react_1.default.createElement(PriorityBadge, { priority: task.priority }),
98
- react_1.default.createElement(TagPills, { tags: task.tags, maxWidth: contentWidth - 25 }),
99
- subtasks.length > 0 && (react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
100
- react_1.default.createElement(SubtaskProgress, { completed: completedSubtasks, total: subtasks.length }))),
101
- task.dueDate && (react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
102
- react_1.default.createElement(DueDateBadge, { dueDate: task.dueDate }))))),
103
- isExpanded && (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1 },
104
- contentWidth > 0 && react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.border }, '─'.repeat(contentWidth)),
105
- task.description && (react_1.default.createElement(ink_1.Box, { marginTop: 1 },
106
- react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, (0, utils_js_1.truncate)(task.description.split('\n')[0], contentWidth)))),
107
- subtasks.length > 0 && (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: task.description ? 1 : 0 }, subtasks.map((st) => (react_1.default.createElement(ink_1.Box, { key: st.id },
108
- react_1.default.createElement(ink_1.Text, { color: st.completed ? theme_js_1.PALETTE.success : theme_js_1.PALETTE.textSecondary },
109
- st.completed ? '✓' : '○',
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 - 2))))))),
112
- task.relatedFiles && task.relatedFiles.length > 0 && (react_1.default.createElement(ink_1.Box, { marginTop: 1 },
113
- react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accentAlt },
114
- '📁 ',
115
- (0, utils_js_1.truncate)(task.relatedFiles.slice(0, 2).join(', '), contentWidth - 3))))))));
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":"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"}
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;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"}
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
- // 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
- };
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 += getTaskHeight(task, isExpanded);
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 ? getTaskHeight(selectedTask, expandedIds.has(selectedTask.id)) : 5;
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 = getTaskHeight(task, isExpanded);
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(TaskCard_js_1.TaskCard, { key: task.id, task: task, isSelected: isSelected, isExpanded: isExpanded, width: cardWidth }))),
78
- Array.from({ length: emptyLines }).map((_, i) => (react_1.default.createElement(ink_1.Box, { key: `empty-${i}` },
79
- react_1.default.createElement(ink_1.Text, null, ' '))))));
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":"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"}
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"}
@@ -40,5 +40,5 @@ export interface TUIProps {
40
40
  filePath: string;
41
41
  }
42
42
  export declare const HEADER_ROWS = 7;
43
- export declare const FOOTER_ROWS = 3;
43
+ export declare const FOOTER_ROWS = 4;
44
44
  //# sourceMappingURL=types.d.ts.map
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 = 3; // separator + status bar (2 rows: content + bottom padding)
5
+ exports.FOOTER_ROWS = 4; // separator(1) + status message(1) + status bar(2)
6
6
  //# sourceMappingURL=types.js.map
@@ -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,4DAA4D"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainfile/cli",
3
- "version": "0.10.3",
3
+ "version": "0.11.0",
4
4
  "description": "Command-line interface for Brainfile task management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",