@brainfile/cli 0.8.1 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +14 -0
  3. package/dist/commands/tui.d.ts.map +1 -1
  4. package/dist/commands/tui.js +6 -701
  5. package/dist/commands/tui.js.map +1 -1
  6. package/dist/tui/BrainfileTUI.d.ts +4 -0
  7. package/dist/tui/BrainfileTUI.d.ts.map +1 -0
  8. package/dist/tui/BrainfileTUI.js +198 -0
  9. package/dist/tui/BrainfileTUI.js.map +1 -0
  10. package/dist/tui/actions.d.ts +49 -0
  11. package/dist/tui/actions.d.ts.map +1 -0
  12. package/dist/tui/actions.js +569 -0
  13. package/dist/tui/actions.js.map +1 -0
  14. package/dist/tui/components/ColumnTabs.d.ts +9 -0
  15. package/dist/tui/components/ColumnTabs.d.ts.map +1 -0
  16. package/dist/tui/components/ColumnTabs.js +30 -0
  17. package/dist/tui/components/ColumnTabs.js.map +1 -0
  18. package/dist/tui/components/Header.d.ts +12 -0
  19. package/dist/tui/components/Header.d.ts.map +1 -0
  20. package/dist/tui/components/Header.js +24 -0
  21. package/dist/tui/components/Header.js.map +1 -0
  22. package/dist/tui/components/HelpOverlay.d.ts +7 -0
  23. package/dist/tui/components/HelpOverlay.d.ts.map +1 -0
  24. package/dist/tui/components/HelpOverlay.js +56 -0
  25. package/dist/tui/components/HelpOverlay.js.map +1 -0
  26. package/dist/tui/components/Overlays.d.ts +41 -0
  27. package/dist/tui/components/Overlays.d.ts.map +1 -0
  28. package/dist/tui/components/Overlays.js +127 -0
  29. package/dist/tui/components/Overlays.js.map +1 -0
  30. package/dist/tui/components/ProgressBar.d.ts +8 -0
  31. package/dist/tui/components/ProgressBar.d.ts.map +1 -0
  32. package/dist/tui/components/ProgressBar.js +35 -0
  33. package/dist/tui/components/ProgressBar.js.map +1 -0
  34. package/dist/tui/components/SearchBar.d.ts +7 -0
  35. package/dist/tui/components/SearchBar.d.ts.map +1 -0
  36. package/dist/tui/components/SearchBar.js +22 -0
  37. package/dist/tui/components/SearchBar.js.map +1 -0
  38. package/dist/tui/components/StatusBar.d.ts +12 -0
  39. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  40. package/dist/tui/components/StatusBar.js +37 -0
  41. package/dist/tui/components/StatusBar.js.map +1 -0
  42. package/dist/tui/components/TaskCard.d.ts +19 -0
  43. package/dist/tui/components/TaskCard.d.ts.map +1 -0
  44. package/dist/tui/components/TaskCard.js +105 -0
  45. package/dist/tui/components/TaskCard.js.map +1 -0
  46. package/dist/tui/components/TaskList.d.ts +11 -0
  47. package/dist/tui/components/TaskList.d.ts.map +1 -0
  48. package/dist/tui/components/TaskList.js +56 -0
  49. package/dist/tui/components/TaskList.js.map +1 -0
  50. package/dist/tui/components/index.d.ts +19 -0
  51. package/dist/tui/components/index.d.ts.map +1 -0
  52. package/dist/tui/components/index.js +26 -0
  53. package/dist/tui/components/index.js.map +1 -0
  54. package/dist/tui/hooks/index.d.ts +3 -0
  55. package/dist/tui/hooks/index.d.ts.map +1 -0
  56. package/dist/tui/hooks/index.js +8 -0
  57. package/dist/tui/hooks/index.js.map +1 -0
  58. package/dist/tui/hooks/useBrainfileLoader.d.ts +5 -0
  59. package/dist/tui/hooks/useBrainfileLoader.d.ts.map +1 -0
  60. package/dist/tui/hooks/useBrainfileLoader.js +171 -0
  61. package/dist/tui/hooks/useBrainfileLoader.js.map +1 -0
  62. package/dist/tui/hooks/useKeyboardNavigation.d.ts +16 -0
  63. package/dist/tui/hooks/useKeyboardNavigation.d.ts.map +1 -0
  64. package/dist/tui/hooks/useKeyboardNavigation.js +434 -0
  65. package/dist/tui/hooks/useKeyboardNavigation.js.map +1 -0
  66. package/dist/tui/index.d.ts +9 -0
  67. package/dist/tui/index.d.ts.map +1 -0
  68. package/dist/tui/index.js +36 -0
  69. package/dist/tui/index.js.map +1 -0
  70. package/dist/tui/theme.d.ts +113 -0
  71. package/dist/tui/theme.d.ts.map +1 -0
  72. package/dist/tui/theme.js +132 -0
  73. package/dist/tui/theme.js.map +1 -0
  74. package/dist/tui/types.d.ts +30 -0
  75. package/dist/tui/types.d.ts.map +1 -0
  76. package/dist/tui/types.js +6 -0
  77. package/dist/tui/types.js.map +1 -0
  78. package/dist/tui/utils.d.ts +3 -0
  79. package/dist/tui/utils.d.ts.map +1 -0
  80. package/dist/tui/utils.js +31 -0
  81. package/dist/tui/utils.js.map +1 -0
  82. package/package.json +1 -1
@@ -0,0 +1,434 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useKeyboardNavigation = useKeyboardNavigation;
4
+ const ink_1 = require("ink");
5
+ const actions_js_1 = require("../actions.js");
6
+ // Helper to show status message
7
+ function showStatus(setState, text, type) {
8
+ const timestamp = Date.now();
9
+ setState(prev => ({
10
+ ...prev,
11
+ statusMessage: { text, type, timestamp },
12
+ }));
13
+ // Clear message after 3 seconds
14
+ setTimeout(() => {
15
+ setState(prev => {
16
+ // Only clear if it's the same message
17
+ if (prev.statusMessage?.timestamp === timestamp) {
18
+ return { ...prev, statusMessage: null };
19
+ }
20
+ return prev;
21
+ });
22
+ }, 3000);
23
+ }
24
+ function useKeyboardNavigation({ state, setState, currentTasks, maxTaskIndex, filteredColumnsLength, viewportHeight, loadBrainfile, filePath, allColumns, }) {
25
+ const { exit } = (0, ink_1.useApp)();
26
+ // Get current task
27
+ const currentTask = currentTasks[state.selectedTaskIndex];
28
+ (0, ink_1.useInput)((input, key) => {
29
+ // Help mode - any key closes
30
+ if (state.mode === 'help') {
31
+ setState(prev => ({ ...prev, mode: 'browse' }));
32
+ return;
33
+ }
34
+ // Delete confirmation mode
35
+ if (state.mode === 'delete-confirm') {
36
+ if (input === 'y' || input === 'Y') {
37
+ if (currentTask) {
38
+ const result = (0, actions_js_1.deleteTaskAction)(filePath, currentTask.id);
39
+ if (result.success) {
40
+ showStatus(setState, `Deleted ${currentTask.id}`, 'success');
41
+ loadBrainfile(true);
42
+ }
43
+ else {
44
+ showStatus(setState, result.error || 'Failed to delete', 'error');
45
+ }
46
+ }
47
+ setState(prev => ({ ...prev, mode: 'browse' }));
48
+ return;
49
+ }
50
+ if (input === 'n' || input === 'N' || key.escape) {
51
+ setState(prev => ({ ...prev, mode: 'browse' }));
52
+ showStatus(setState, 'Delete cancelled', 'info');
53
+ return;
54
+ }
55
+ return;
56
+ }
57
+ // Move mode - column picker
58
+ if (state.mode === 'move') {
59
+ if (key.escape) {
60
+ setState(prev => ({ ...prev, mode: 'browse' }));
61
+ return;
62
+ }
63
+ if (key.leftArrow || input === 'h') {
64
+ setState(prev => ({
65
+ ...prev,
66
+ moveTargetIndex: Math.max(0, prev.moveTargetIndex - 1),
67
+ }));
68
+ return;
69
+ }
70
+ if (key.rightArrow || input === 'l') {
71
+ setState(prev => ({
72
+ ...prev,
73
+ moveTargetIndex: Math.min(allColumns.length - 1, prev.moveTargetIndex + 1),
74
+ }));
75
+ return;
76
+ }
77
+ if (key.return) {
78
+ if (currentTask) {
79
+ const targetColumn = allColumns[state.moveTargetIndex];
80
+ if (targetColumn) {
81
+ const result = (0, actions_js_1.moveTaskAction)(filePath, currentTask.id, targetColumn.id);
82
+ if (result.success) {
83
+ showStatus(setState, result.message || `Moved to ${targetColumn.title}`, 'success');
84
+ loadBrainfile(true);
85
+ }
86
+ else {
87
+ showStatus(setState, result.error || 'Failed to move', 'error');
88
+ }
89
+ }
90
+ }
91
+ setState(prev => ({ ...prev, mode: 'browse' }));
92
+ return;
93
+ }
94
+ // Number keys 1-9 to jump to column
95
+ const num = parseInt(input, 10);
96
+ if (num >= 1 && num <= allColumns.length) {
97
+ setState(prev => ({ ...prev, moveTargetIndex: num - 1 }));
98
+ return;
99
+ }
100
+ return;
101
+ }
102
+ // Subtask mode - toggle subtasks
103
+ if (state.mode === 'subtask') {
104
+ const subtasks = currentTask?.subtasks || [];
105
+ if (key.escape) {
106
+ setState(prev => ({ ...prev, mode: 'browse' }));
107
+ return;
108
+ }
109
+ if (key.upArrow || input === 'k') {
110
+ setState(prev => ({
111
+ ...prev,
112
+ selectedSubtaskIndex: Math.max(0, prev.selectedSubtaskIndex - 1),
113
+ }));
114
+ return;
115
+ }
116
+ if (key.downArrow || input === 'j') {
117
+ setState(prev => ({
118
+ ...prev,
119
+ selectedSubtaskIndex: Math.min(subtasks.length - 1, prev.selectedSubtaskIndex + 1),
120
+ }));
121
+ return;
122
+ }
123
+ if (key.return || input === ' ') {
124
+ const subtask = subtasks[state.selectedSubtaskIndex];
125
+ if (currentTask && subtask) {
126
+ const result = (0, actions_js_1.toggleSubtaskAction)(filePath, currentTask.id, subtask.id);
127
+ if (result.success) {
128
+ showStatus(setState, `Toggled ${subtask.id}`, 'success');
129
+ loadBrainfile(true);
130
+ }
131
+ else {
132
+ showStatus(setState, result.error || 'Failed to toggle', 'error');
133
+ }
134
+ }
135
+ return;
136
+ }
137
+ return;
138
+ }
139
+ // New task mode - inline title input
140
+ if (state.mode === 'new-task') {
141
+ if (key.escape) {
142
+ setState(prev => ({ ...prev, mode: 'browse', newTaskTitle: '' }));
143
+ return;
144
+ }
145
+ if (key.return) {
146
+ const title = state.newTaskTitle.trim();
147
+ if (title) {
148
+ const currentCol = allColumns[state.activeColumnIndex];
149
+ if (currentCol) {
150
+ const result = (0, actions_js_1.addTaskAction)(filePath, currentCol.id, { title });
151
+ if (result.success) {
152
+ showStatus(setState, result.message || 'Task added', 'success');
153
+ loadBrainfile(true);
154
+ }
155
+ else {
156
+ showStatus(setState, result.error || 'Failed to add task', 'error');
157
+ }
158
+ }
159
+ }
160
+ else {
161
+ showStatus(setState, 'Title required', 'error');
162
+ }
163
+ setState(prev => ({ ...prev, mode: 'browse', newTaskTitle: '' }));
164
+ return;
165
+ }
166
+ if (key.backspace || key.delete) {
167
+ setState(prev => ({ ...prev, newTaskTitle: prev.newTaskTitle.slice(0, -1) }));
168
+ return;
169
+ }
170
+ if (input && !key.ctrl && !key.meta) {
171
+ setState(prev => ({ ...prev, newTaskTitle: prev.newTaskTitle + input }));
172
+ return;
173
+ }
174
+ return;
175
+ }
176
+ // Search mode handling
177
+ if (state.mode === 'search') {
178
+ if (key.escape) {
179
+ setState(prev => ({ ...prev, mode: 'browse', searchQuery: '' }));
180
+ return;
181
+ }
182
+ if (key.return) {
183
+ setState(prev => ({ ...prev, mode: 'browse' }));
184
+ return;
185
+ }
186
+ if (key.backspace || key.delete) {
187
+ setState(prev => ({ ...prev, searchQuery: prev.searchQuery.slice(0, -1) }));
188
+ return;
189
+ }
190
+ if (input && !key.ctrl && !key.meta) {
191
+ setState(prev => ({ ...prev, searchQuery: prev.searchQuery + input }));
192
+ return;
193
+ }
194
+ return;
195
+ }
196
+ // Browse mode
197
+ if (input === 'q' || (key.ctrl && input === 'c')) {
198
+ exit();
199
+ return;
200
+ }
201
+ if (input === '?') {
202
+ setState(prev => ({ ...prev, mode: 'help' }));
203
+ return;
204
+ }
205
+ if (input === '/') {
206
+ setState(prev => ({ ...prev, mode: 'search', searchQuery: '' }));
207
+ return;
208
+ }
209
+ // Refresh (force refresh bypasses hash check)
210
+ if (input === 'r') {
211
+ loadBrainfile(true);
212
+ showStatus(setState, 'Refreshed', 'info');
213
+ return;
214
+ }
215
+ // === Task Management Keys ===
216
+ // 'e' - Edit task in $EDITOR (blocks until editor closes)
217
+ if (input === 'e') {
218
+ if (!currentTask) {
219
+ showStatus(setState, 'No task selected', 'error');
220
+ return;
221
+ }
222
+ // spawnSync blocks the entire process, giving terminal to editor
223
+ const result = (0, actions_js_1.editTaskInEditor)(filePath, currentTask.id);
224
+ if (result.success) {
225
+ showStatus(setState, result.message || 'Task updated', 'success');
226
+ loadBrainfile(true);
227
+ }
228
+ else {
229
+ showStatus(setState, result.error || 'Edit failed', 'error');
230
+ }
231
+ return;
232
+ }
233
+ // 'm' - Move task (open column picker)
234
+ if (input === 'm') {
235
+ if (!currentTask) {
236
+ showStatus(setState, 'No task selected', 'error');
237
+ return;
238
+ }
239
+ setState(prev => ({ ...prev, mode: 'move', moveTargetIndex: prev.activeColumnIndex }));
240
+ return;
241
+ }
242
+ // 'd' - Delete task (with confirmation)
243
+ if (input === 'd') {
244
+ if (!currentTask) {
245
+ showStatus(setState, 'No task selected', 'error');
246
+ return;
247
+ }
248
+ setState(prev => ({ ...prev, mode: 'delete-confirm' }));
249
+ return;
250
+ }
251
+ // 'a' - Archive task
252
+ if (input === 'a') {
253
+ if (!currentTask) {
254
+ showStatus(setState, 'No task selected', 'error');
255
+ return;
256
+ }
257
+ const result = (0, actions_js_1.archiveTaskAction)(filePath, currentTask.id);
258
+ if (result.success) {
259
+ showStatus(setState, result.message || 'Task archived', 'success');
260
+ loadBrainfile(true);
261
+ }
262
+ else {
263
+ showStatus(setState, result.error || 'Archive failed', 'error');
264
+ }
265
+ return;
266
+ }
267
+ // 'p' - Cycle priority
268
+ if (input === 'p') {
269
+ if (!currentTask) {
270
+ showStatus(setState, 'No task selected', 'error');
271
+ return;
272
+ }
273
+ const result = (0, actions_js_1.cyclePriorityAction)(filePath, currentTask.id);
274
+ if (result.success) {
275
+ showStatus(setState, result.message || 'Priority updated', 'success');
276
+ loadBrainfile(true);
277
+ }
278
+ else {
279
+ showStatus(setState, result.error || 'Failed to update priority', 'error');
280
+ }
281
+ return;
282
+ }
283
+ // 't' - Toggle subtask (open subtask picker if has subtasks)
284
+ if (input === 't') {
285
+ if (!currentTask) {
286
+ showStatus(setState, 'No task selected', 'error');
287
+ return;
288
+ }
289
+ if (!currentTask.subtasks || currentTask.subtasks.length === 0) {
290
+ showStatus(setState, 'No subtasks', 'info');
291
+ return;
292
+ }
293
+ setState(prev => ({ ...prev, mode: 'subtask', selectedSubtaskIndex: 0 }));
294
+ return;
295
+ }
296
+ // 'y' - Yank/copy task ID to clipboard
297
+ if (input === 'y') {
298
+ if (!currentTask) {
299
+ showStatus(setState, 'No task selected', 'error');
300
+ return;
301
+ }
302
+ const result = (0, actions_js_1.copyToClipboard)(currentTask.id);
303
+ if (result.success) {
304
+ showStatus(setState, `Copied ${currentTask.id}`, 'success');
305
+ }
306
+ else {
307
+ showStatus(setState, result.error || 'Copy failed', 'error');
308
+ }
309
+ return;
310
+ }
311
+ // 'n' - New task (quick add - title only)
312
+ if (input === 'n') {
313
+ setState(prev => ({ ...prev, mode: 'new-task', newTaskTitle: '' }));
314
+ return;
315
+ }
316
+ // 'N' - New task (full editor)
317
+ if (input === 'N') {
318
+ const currentCol = allColumns[state.activeColumnIndex];
319
+ if (currentCol) {
320
+ const result = (0, actions_js_1.newTaskInEditor)(filePath, currentCol.id);
321
+ if (result.success) {
322
+ showStatus(setState, result.message || 'Task created', 'success');
323
+ loadBrainfile(true);
324
+ }
325
+ else {
326
+ showStatus(setState, result.error || 'Failed to create task', 'error');
327
+ }
328
+ }
329
+ return;
330
+ }
331
+ // Navigation: up/down through tasks
332
+ if (key.downArrow || input === 'j') {
333
+ setState(prev => ({
334
+ ...prev,
335
+ selectedTaskIndex: Math.min(prev.selectedTaskIndex + 1, maxTaskIndex),
336
+ }));
337
+ return;
338
+ }
339
+ if (key.upArrow || input === 'k') {
340
+ setState(prev => ({
341
+ ...prev,
342
+ selectedTaskIndex: Math.max(prev.selectedTaskIndex - 1, 0),
343
+ }));
344
+ return;
345
+ }
346
+ // Page scrolling
347
+ if (key.ctrl && input === 'd') {
348
+ setState(prev => ({
349
+ ...prev,
350
+ selectedTaskIndex: Math.min(prev.selectedTaskIndex + Math.floor(viewportHeight / 2), maxTaskIndex),
351
+ }));
352
+ return;
353
+ }
354
+ if (key.ctrl && input === 'u') {
355
+ setState(prev => ({
356
+ ...prev,
357
+ selectedTaskIndex: Math.max(prev.selectedTaskIndex - Math.floor(viewportHeight / 2), 0),
358
+ }));
359
+ return;
360
+ }
361
+ // Column switching: TAB / left/right
362
+ if (key.tab || key.rightArrow || input === 'l') {
363
+ setState(prev => ({
364
+ ...prev,
365
+ activeColumnIndex: (prev.activeColumnIndex + 1) % filteredColumnsLength,
366
+ selectedTaskIndex: 0,
367
+ }));
368
+ return;
369
+ }
370
+ if ((key.shift && key.tab) || key.leftArrow || input === 'h') {
371
+ setState(prev => ({
372
+ ...prev,
373
+ activeColumnIndex: prev.activeColumnIndex === 0
374
+ ? filteredColumnsLength - 1
375
+ : prev.activeColumnIndex - 1,
376
+ selectedTaskIndex: 0,
377
+ }));
378
+ return;
379
+ }
380
+ // Jump to column headers with { and }
381
+ if (input === '{') {
382
+ setState(prev => ({
383
+ ...prev,
384
+ activeColumnIndex: Math.max(0, prev.activeColumnIndex - 1),
385
+ selectedTaskIndex: 0,
386
+ }));
387
+ return;
388
+ }
389
+ if (input === '}') {
390
+ setState(prev => ({
391
+ ...prev,
392
+ activeColumnIndex: Math.min(filteredColumnsLength - 1, prev.activeColumnIndex + 1),
393
+ selectedTaskIndex: 0,
394
+ }));
395
+ return;
396
+ }
397
+ // Home/End
398
+ if (input === 'g') {
399
+ setState(prev => ({ ...prev, selectedTaskIndex: 0 }));
400
+ return;
401
+ }
402
+ if (input === 'G') {
403
+ setState(prev => ({ ...prev, selectedTaskIndex: maxTaskIndex }));
404
+ return;
405
+ }
406
+ // Expand/collapse task
407
+ if (key.return) {
408
+ const task = currentTasks[state.selectedTaskIndex];
409
+ if (task) {
410
+ setState(prev => {
411
+ const newExpanded = new Set(prev.expandedTaskIds);
412
+ if (newExpanded.has(task.id)) {
413
+ newExpanded.delete(task.id);
414
+ }
415
+ else {
416
+ newExpanded.add(task.id);
417
+ }
418
+ return { ...prev, expandedTaskIds: newExpanded };
419
+ });
420
+ }
421
+ return;
422
+ }
423
+ // Escape: collapse all or clear search
424
+ if (key.escape) {
425
+ setState(prev => ({
426
+ ...prev,
427
+ expandedTaskIds: new Set(),
428
+ searchQuery: '',
429
+ }));
430
+ return;
431
+ }
432
+ });
433
+ }
434
+ //# sourceMappingURL=useKeyboardNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardNavigation.js","sourceRoot":"","sources":["../../../src/tui/hooks/useKeyboardNavigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { BrainfileTUI } from './BrainfileTUI.js';
2
+ export { PALETTE, BOX, BORDERS, SPACING, ICONS } from './theme.js';
3
+ export type { AppState, ViewMode, BoardColumn, TUIProps } from './types.js';
4
+ export { HEADER_ROWS, FOOTER_ROWS } from './types.js';
5
+ export { truncate, getPriorityColor } from './utils.js';
6
+ export { useBrainfileLoader } from './hooks/useBrainfileLoader.js';
7
+ export { useKeyboardNavigation } from './hooks/useKeyboardNavigation.js';
8
+ export { Header, ProgressBar, SearchBar, ColumnTabs, TaskCard, TaskList, StatusBar, HelpOverlay, } from './components/index.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EACL,MAAM,EACN,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HelpOverlay = exports.StatusBar = exports.TaskList = exports.TaskCard = exports.ColumnTabs = exports.SearchBar = exports.ProgressBar = exports.Header = exports.useKeyboardNavigation = exports.useBrainfileLoader = exports.getPriorityColor = exports.truncate = exports.FOOTER_ROWS = exports.HEADER_ROWS = exports.ICONS = exports.SPACING = exports.BORDERS = exports.BOX = exports.PALETTE = exports.BrainfileTUI = void 0;
4
+ // Main component
5
+ var BrainfileTUI_js_1 = require("./BrainfileTUI.js");
6
+ Object.defineProperty(exports, "BrainfileTUI", { enumerable: true, get: function () { return BrainfileTUI_js_1.BrainfileTUI; } });
7
+ // Theme
8
+ var theme_js_1 = require("./theme.js");
9
+ Object.defineProperty(exports, "PALETTE", { enumerable: true, get: function () { return theme_js_1.PALETTE; } });
10
+ Object.defineProperty(exports, "BOX", { enumerable: true, get: function () { return theme_js_1.BOX; } });
11
+ Object.defineProperty(exports, "BORDERS", { enumerable: true, get: function () { return theme_js_1.BORDERS; } });
12
+ Object.defineProperty(exports, "SPACING", { enumerable: true, get: function () { return theme_js_1.SPACING; } });
13
+ Object.defineProperty(exports, "ICONS", { enumerable: true, get: function () { return theme_js_1.ICONS; } });
14
+ var types_js_1 = require("./types.js");
15
+ Object.defineProperty(exports, "HEADER_ROWS", { enumerable: true, get: function () { return types_js_1.HEADER_ROWS; } });
16
+ Object.defineProperty(exports, "FOOTER_ROWS", { enumerable: true, get: function () { return types_js_1.FOOTER_ROWS; } });
17
+ // Utils
18
+ var utils_js_1 = require("./utils.js");
19
+ Object.defineProperty(exports, "truncate", { enumerable: true, get: function () { return utils_js_1.truncate; } });
20
+ Object.defineProperty(exports, "getPriorityColor", { enumerable: true, get: function () { return utils_js_1.getPriorityColor; } });
21
+ // Hooks
22
+ var useBrainfileLoader_js_1 = require("./hooks/useBrainfileLoader.js");
23
+ Object.defineProperty(exports, "useBrainfileLoader", { enumerable: true, get: function () { return useBrainfileLoader_js_1.useBrainfileLoader; } });
24
+ var useKeyboardNavigation_js_1 = require("./hooks/useKeyboardNavigation.js");
25
+ Object.defineProperty(exports, "useKeyboardNavigation", { enumerable: true, get: function () { return useKeyboardNavigation_js_1.useKeyboardNavigation; } });
26
+ // Components
27
+ var index_js_1 = require("./components/index.js");
28
+ Object.defineProperty(exports, "Header", { enumerable: true, get: function () { return index_js_1.Header; } });
29
+ Object.defineProperty(exports, "ProgressBar", { enumerable: true, get: function () { return index_js_1.ProgressBar; } });
30
+ Object.defineProperty(exports, "SearchBar", { enumerable: true, get: function () { return index_js_1.SearchBar; } });
31
+ Object.defineProperty(exports, "ColumnTabs", { enumerable: true, get: function () { return index_js_1.ColumnTabs; } });
32
+ Object.defineProperty(exports, "TaskCard", { enumerable: true, get: function () { return index_js_1.TaskCard; } });
33
+ Object.defineProperty(exports, "TaskList", { enumerable: true, get: function () { return index_js_1.TaskList; } });
34
+ Object.defineProperty(exports, "StatusBar", { enumerable: true, get: function () { return index_js_1.StatusBar; } });
35
+ Object.defineProperty(exports, "HelpOverlay", { enumerable: true, get: function () { return index_js_1.HelpOverlay; } });
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":";;;AAAA,iBAAiB;AACjB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AAErB,QAAQ;AACR,uCAAmE;AAA1D,mGAAA,OAAO,OAAA;AAAE,+FAAA,GAAG,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,iGAAA,KAAK,OAAA;AAI9C,uCAAsD;AAA7C,uGAAA,WAAW,OAAA;AAAE,uGAAA,WAAW,OAAA;AAEjC,QAAQ;AACR,uCAAwD;AAA/C,oGAAA,QAAQ,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAEnC,QAAQ;AACR,uEAAmE;AAA1D,2HAAA,kBAAkB,OAAA;AAC3B,6EAAyE;AAAhE,iIAAA,qBAAqB,OAAA;AAE9B,aAAa;AACb,kDAS+B;AAR7B,kGAAA,MAAM,OAAA;AACN,uGAAA,WAAW,OAAA;AACX,qGAAA,SAAS,OAAA;AACT,sGAAA,UAAU,OAAA;AACV,oGAAA,QAAQ,OAAA;AACR,oGAAA,QAAQ,OAAA;AACR,qGAAA,SAAS,OAAA;AACT,uGAAA,WAAW,OAAA"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Brainfile TUI Theme
3
+ *
4
+ * Design principles (aligned with VSCode extension aesthetic):
5
+ * 1. True black background (#000) for maximum contrast
6
+ * 2. Muted grays for secondary content
7
+ * 3. Vibrant accent colors used sparingly
8
+ * 4. Rounded borders for modern feel
9
+ * 5. Generous spacing for readability
10
+ *
11
+ * VSCode extension colors reference:
12
+ * - critical: #d64933, high: #867530, medium: #37505C, low: #bac1b8
13
+ */
14
+ export declare const PALETTE: {
15
+ readonly bg: "#000000";
16
+ readonly bgSubtle: "#0a0a0a";
17
+ readonly bgMuted: "#1a1a1a";
18
+ readonly bgHighlight: "#2a2a2a";
19
+ readonly panel: "#1e1e1e";
20
+ readonly text: "#ffffff";
21
+ readonly textSecondary: "#a0a0a0";
22
+ readonly textMuted: "#606060";
23
+ readonly textDim: "#404040";
24
+ readonly border: "#333333";
25
+ readonly borderFocus: "#505050";
26
+ readonly borderAccent: "#7c3aed";
27
+ readonly critical: "#ef4444";
28
+ readonly high: "#f59e0b";
29
+ readonly medium: "#3b82f6";
30
+ readonly low: "#6b7280";
31
+ readonly giga: "#a855f7";
32
+ readonly success: "#22c55e";
33
+ readonly warning: "#eab308";
34
+ readonly error: "#ef4444";
35
+ readonly info: "#3b82f6";
36
+ readonly progress: "#3b82f6";
37
+ readonly accent: "#7c3aed";
38
+ readonly accentAlt: "#06b6d4";
39
+ readonly selected: "#ffffff";
40
+ };
41
+ export declare const BOX: {
42
+ readonly topLeft: "╭";
43
+ readonly topRight: "╮";
44
+ readonly bottomLeft: "╰";
45
+ readonly bottomRight: "╯";
46
+ readonly horizontal: "─";
47
+ readonly vertical: "│";
48
+ readonly teeRight: "├";
49
+ readonly teeLeft: "┤";
50
+ };
51
+ export declare const BORDERS: {
52
+ readonly round: {
53
+ readonly topLeft: "╭";
54
+ readonly topRight: "╮";
55
+ readonly bottomLeft: "╰";
56
+ readonly bottomRight: "╯";
57
+ readonly horizontal: "─";
58
+ readonly vertical: "│";
59
+ };
60
+ readonly single: {
61
+ readonly topLeft: "┌";
62
+ readonly topRight: "┐";
63
+ readonly bottomLeft: "└";
64
+ readonly bottomRight: "┘";
65
+ readonly horizontal: "─";
66
+ readonly vertical: "│";
67
+ };
68
+ readonly double: {
69
+ readonly topLeft: "╔";
70
+ readonly topRight: "╗";
71
+ readonly bottomLeft: "╚";
72
+ readonly bottomRight: "╝";
73
+ readonly horizontal: "═";
74
+ readonly vertical: "║";
75
+ };
76
+ readonly bold: {
77
+ readonly topLeft: "┏";
78
+ readonly topRight: "┓";
79
+ readonly bottomLeft: "┗";
80
+ readonly bottomRight: "┛";
81
+ readonly horizontal: "━";
82
+ readonly vertical: "┃";
83
+ };
84
+ };
85
+ export declare const SPACING: {
86
+ readonly none: 0;
87
+ readonly xs: 1;
88
+ readonly sm: 2;
89
+ readonly md: 3;
90
+ readonly lg: 4;
91
+ readonly xl: 6;
92
+ };
93
+ export declare const ICONS: {
94
+ readonly success: "✓";
95
+ readonly error: "✗";
96
+ readonly warning: "⚠";
97
+ readonly info: "ℹ";
98
+ readonly expanded: "▼";
99
+ readonly collapsed: "▶";
100
+ readonly bullet: "•";
101
+ readonly arrow: "→";
102
+ readonly file: "📄";
103
+ readonly folder: "📁";
104
+ readonly task: "☐";
105
+ readonly taskDone: "☑";
106
+ readonly progressFilled: "█";
107
+ readonly progressEmpty: "░";
108
+ readonly progressPartial: "▓";
109
+ readonly reload: "↻";
110
+ readonly live: "●";
111
+ readonly search: "🔍";
112
+ };
113
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCV,CAAC;AAGX,eAAO,MAAM,GAAG;;;;;;;;;CASN,CAAC;AAGX,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCV,CAAC;AAGX,eAAO,MAAM,OAAO;;;;;;;CAOV,CAAC;AAGX,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;CA4BR,CAAC"}