@brainfile/cli 0.8.1 → 0.9.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.
Files changed (80) hide show
  1. package/dist/commands/tui.d.ts.map +1 -1
  2. package/dist/commands/tui.js +6 -701
  3. package/dist/commands/tui.js.map +1 -1
  4. package/dist/tui/BrainfileTUI.d.ts +4 -0
  5. package/dist/tui/BrainfileTUI.d.ts.map +1 -0
  6. package/dist/tui/BrainfileTUI.js +198 -0
  7. package/dist/tui/BrainfileTUI.js.map +1 -0
  8. package/dist/tui/actions.d.ts +49 -0
  9. package/dist/tui/actions.d.ts.map +1 -0
  10. package/dist/tui/actions.js +569 -0
  11. package/dist/tui/actions.js.map +1 -0
  12. package/dist/tui/components/ColumnTabs.d.ts +9 -0
  13. package/dist/tui/components/ColumnTabs.d.ts.map +1 -0
  14. package/dist/tui/components/ColumnTabs.js +30 -0
  15. package/dist/tui/components/ColumnTabs.js.map +1 -0
  16. package/dist/tui/components/Header.d.ts +12 -0
  17. package/dist/tui/components/Header.d.ts.map +1 -0
  18. package/dist/tui/components/Header.js +24 -0
  19. package/dist/tui/components/Header.js.map +1 -0
  20. package/dist/tui/components/HelpOverlay.d.ts +7 -0
  21. package/dist/tui/components/HelpOverlay.d.ts.map +1 -0
  22. package/dist/tui/components/HelpOverlay.js +56 -0
  23. package/dist/tui/components/HelpOverlay.js.map +1 -0
  24. package/dist/tui/components/Overlays.d.ts +41 -0
  25. package/dist/tui/components/Overlays.d.ts.map +1 -0
  26. package/dist/tui/components/Overlays.js +127 -0
  27. package/dist/tui/components/Overlays.js.map +1 -0
  28. package/dist/tui/components/ProgressBar.d.ts +8 -0
  29. package/dist/tui/components/ProgressBar.d.ts.map +1 -0
  30. package/dist/tui/components/ProgressBar.js +35 -0
  31. package/dist/tui/components/ProgressBar.js.map +1 -0
  32. package/dist/tui/components/SearchBar.d.ts +7 -0
  33. package/dist/tui/components/SearchBar.d.ts.map +1 -0
  34. package/dist/tui/components/SearchBar.js +22 -0
  35. package/dist/tui/components/SearchBar.js.map +1 -0
  36. package/dist/tui/components/StatusBar.d.ts +12 -0
  37. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  38. package/dist/tui/components/StatusBar.js +37 -0
  39. package/dist/tui/components/StatusBar.js.map +1 -0
  40. package/dist/tui/components/TaskCard.d.ts +19 -0
  41. package/dist/tui/components/TaskCard.d.ts.map +1 -0
  42. package/dist/tui/components/TaskCard.js +105 -0
  43. package/dist/tui/components/TaskCard.js.map +1 -0
  44. package/dist/tui/components/TaskList.d.ts +11 -0
  45. package/dist/tui/components/TaskList.d.ts.map +1 -0
  46. package/dist/tui/components/TaskList.js +56 -0
  47. package/dist/tui/components/TaskList.js.map +1 -0
  48. package/dist/tui/components/index.d.ts +19 -0
  49. package/dist/tui/components/index.d.ts.map +1 -0
  50. package/dist/tui/components/index.js +26 -0
  51. package/dist/tui/components/index.js.map +1 -0
  52. package/dist/tui/hooks/index.d.ts +3 -0
  53. package/dist/tui/hooks/index.d.ts.map +1 -0
  54. package/dist/tui/hooks/index.js +8 -0
  55. package/dist/tui/hooks/index.js.map +1 -0
  56. package/dist/tui/hooks/useBrainfileLoader.d.ts +5 -0
  57. package/dist/tui/hooks/useBrainfileLoader.d.ts.map +1 -0
  58. package/dist/tui/hooks/useBrainfileLoader.js +171 -0
  59. package/dist/tui/hooks/useBrainfileLoader.js.map +1 -0
  60. package/dist/tui/hooks/useKeyboardNavigation.d.ts +16 -0
  61. package/dist/tui/hooks/useKeyboardNavigation.d.ts.map +1 -0
  62. package/dist/tui/hooks/useKeyboardNavigation.js +434 -0
  63. package/dist/tui/hooks/useKeyboardNavigation.js.map +1 -0
  64. package/dist/tui/index.d.ts +9 -0
  65. package/dist/tui/index.d.ts.map +1 -0
  66. package/dist/tui/index.js +36 -0
  67. package/dist/tui/index.js.map +1 -0
  68. package/dist/tui/theme.d.ts +113 -0
  69. package/dist/tui/theme.d.ts.map +1 -0
  70. package/dist/tui/theme.js +132 -0
  71. package/dist/tui/theme.js.map +1 -0
  72. package/dist/tui/types.d.ts +30 -0
  73. package/dist/tui/types.d.ts.map +1 -0
  74. package/dist/tui/types.js +6 -0
  75. package/dist/tui/types.js.map +1 -0
  76. package/dist/tui/utils.d.ts +3 -0
  77. package/dist/tui/utils.d.ts.map +1 -0
  78. package/dist/tui/utils.js +31 -0
  79. package/dist/tui/utils.js.map +1 -0
  80. package/package.json +1 -1
@@ -0,0 +1,24 @@
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.Header = Header;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_1 = require("ink");
9
+ const theme_js_1 = require("../theme.js");
10
+ function Header({ title, reloadFlash }) {
11
+ return (react_1.default.createElement(ink_1.Box, { paddingLeft: 1, paddingRight: 1 },
12
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent, bold: true },
13
+ theme_js_1.BOX.topLeft,
14
+ theme_js_1.BOX.horizontal),
15
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.text, bold: true },
16
+ " ",
17
+ title,
18
+ " "),
19
+ reloadFlash ? (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.success },
20
+ " ",
21
+ theme_js_1.ICONS.reload,
22
+ " reloaded")) : null));
23
+ }
24
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":";;;;;AAUA,wBAUC;AApBD,kDAA0B;AAC1B,6BAAgC;AAChC,0CAAkD;AAQlD,SAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAe;IACxD,OAAO,CACL,8BAAC,SAAG,IAAC,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;QAClC,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,EAAE,IAAI;YAAE,cAAG,CAAC,OAAO;YAAE,cAAG,CAAC,UAAU,CAAQ;QACtE,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,IAAI,EAAE,IAAI;;YAAG,KAAK;gBAAS;QAC/C,WAAW,CAAC,CAAC,CAAC,CACb,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO;;YAAI,gBAAK,CAAC,MAAM;wBAAiB,CAC9D,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export interface HelpOverlayProps {
3
+ termWidth: number;
4
+ termHeight: number;
5
+ }
6
+ export declare function HelpOverlay({ termWidth, termHeight }: HelpOverlayProps): React.JSX.Element;
7
+ //# sourceMappingURL=HelpOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpOverlay.d.ts","sourceRoot":"","sources":["../../../src/tui/components/HelpOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,gBAAgB,qBA6EtE"}
@@ -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.HelpOverlay = HelpOverlay;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_1 = require("ink");
9
+ const theme_js_1 = require("../theme.js");
10
+ function HelpOverlay({ termWidth, termHeight }) {
11
+ const panelWidth = 58;
12
+ const panelHeight = 16;
13
+ // Calculate centering
14
+ const padTop = Math.max(0, Math.floor((termHeight - panelHeight) / 2));
15
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: termWidth, height: termHeight, alignItems: "center" },
16
+ padTop > 0 && react_1.default.createElement(ink_1.Box, { height: padTop }),
17
+ react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: theme_js_1.PALETTE.accent, paddingX: 2, paddingY: 1, width: panelWidth },
18
+ react_1.default.createElement(ink_1.Box, { justifyContent: "center", marginBottom: 1 },
19
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.text, bold: true }, "KEYBOARD SHORTCUTS")),
20
+ react_1.default.createElement(ink_1.Box, null,
21
+ react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginRight: 3 },
22
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent, bold: true }, "Navigation"),
23
+ react_1.default.createElement(HelpRow, { k: "j/k \u2193/\u2191", desc: "Move up/down" }),
24
+ react_1.default.createElement(HelpRow, { k: "h/l \u2190/\u2192", desc: "Switch columns" }),
25
+ react_1.default.createElement(HelpRow, { k: "g/G", desc: "Top / Bottom" }),
26
+ react_1.default.createElement(HelpRow, { k: "^d/^u", desc: "Page down/up" }),
27
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
28
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent, bold: true }, "View")),
29
+ react_1.default.createElement(HelpRow, { k: "ENTER", desc: "Expand/collapse" }),
30
+ react_1.default.createElement(HelpRow, { k: "/", desc: "Search" }),
31
+ react_1.default.createElement(HelpRow, { k: "r", desc: "Refresh" }),
32
+ react_1.default.createElement(HelpRow, { k: "ESC", desc: "Clear/close" })),
33
+ react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
34
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent, bold: true }, "Tasks"),
35
+ react_1.default.createElement(HelpRow, { k: "n", desc: "New task (quick)" }),
36
+ react_1.default.createElement(HelpRow, { k: "N", desc: "New task (editor)" }),
37
+ react_1.default.createElement(HelpRow, { k: "e", desc: "Edit in $EDITOR" }),
38
+ react_1.default.createElement(HelpRow, { k: "m", desc: "Move to column" }),
39
+ react_1.default.createElement(HelpRow, { k: "d", desc: "Delete task" }),
40
+ react_1.default.createElement(HelpRow, { k: "a", desc: "Archive task" }),
41
+ react_1.default.createElement(HelpRow, { k: "p", desc: "Cycle priority" }),
42
+ react_1.default.createElement(HelpRow, { k: "t", desc: "Toggle subtask" }),
43
+ react_1.default.createElement(HelpRow, { k: "y", desc: "Copy task ID" }),
44
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
45
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent, bold: true }, "Quit")),
46
+ react_1.default.createElement(HelpRow, { k: "q/^c", desc: "Exit" }))),
47
+ react_1.default.createElement(ink_1.Box, { justifyContent: "center", marginTop: 1 },
48
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, "press any key to close")))));
49
+ }
50
+ function HelpRow({ k, desc }) {
51
+ return (react_1.default.createElement(ink_1.Box, null,
52
+ react_1.default.createElement(ink_1.Box, { width: 10 },
53
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.text }, k)),
54
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, desc)));
55
+ }
56
+ //# sourceMappingURL=HelpOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpOverlay.js","sourceRoot":"","sources":["../../../src/tui/components/HelpOverlay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Overlays - Modal-like UI components for task management
3
+ *
4
+ * - MoveOverlay: Column picker for moving tasks
5
+ * - DeleteConfirmOverlay: Confirmation prompt for deletion
6
+ * - SubtaskOverlay: Subtask picker for toggling completion
7
+ * - StatusMessage: Toast-like feedback messages
8
+ */
9
+ import React from 'react';
10
+ import type { StatusMessage as StatusMessageType, BoardColumn } from '../types.js';
11
+ import type { Task } from '@brainfile/core';
12
+ export interface StatusMessageProps {
13
+ message: StatusMessageType | null;
14
+ }
15
+ export declare function StatusMessageDisplay({ message }: StatusMessageProps): React.JSX.Element | null;
16
+ export interface MoveOverlayProps {
17
+ columns: BoardColumn[];
18
+ selectedIndex: number;
19
+ taskTitle: string;
20
+ termWidth: number;
21
+ }
22
+ export declare function MoveOverlay({ columns, selectedIndex, taskTitle, termWidth }: MoveOverlayProps): React.JSX.Element;
23
+ export interface DeleteConfirmOverlayProps {
24
+ taskId: string;
25
+ taskTitle: string;
26
+ termWidth: number;
27
+ }
28
+ export declare function DeleteConfirmOverlay({ taskId, taskTitle, termWidth }: DeleteConfirmOverlayProps): React.JSX.Element;
29
+ export interface NewTaskOverlayProps {
30
+ title: string;
31
+ columnName: string;
32
+ termWidth: number;
33
+ }
34
+ export declare function NewTaskOverlay({ title, columnName, termWidth }: NewTaskOverlayProps): React.JSX.Element;
35
+ export interface SubtaskOverlayProps {
36
+ task: Task;
37
+ selectedIndex: number;
38
+ termWidth: number;
39
+ }
40
+ export declare function SubtaskOverlay({ task, selectedIndex, termWidth }: SubtaskOverlayProps): React.JSX.Element;
41
+ //# sourceMappingURL=Overlays.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overlays.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Overlays.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,aAAa,IAAI,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,4BAoBnE;AAGD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,gBAAgB,qBA6C7F;AAGD,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,yBAAyB,qBA8B/F;AAGD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,mBAAmB,qBA2BnF;AAGD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,mBAAmB,qBAgDrF"}
@@ -0,0 +1,127 @@
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.StatusMessageDisplay = StatusMessageDisplay;
7
+ exports.MoveOverlay = MoveOverlay;
8
+ exports.DeleteConfirmOverlay = DeleteConfirmOverlay;
9
+ exports.NewTaskOverlay = NewTaskOverlay;
10
+ exports.SubtaskOverlay = SubtaskOverlay;
11
+ /**
12
+ * Overlays - Modal-like UI components for task management
13
+ *
14
+ * - MoveOverlay: Column picker for moving tasks
15
+ * - DeleteConfirmOverlay: Confirmation prompt for deletion
16
+ * - SubtaskOverlay: Subtask picker for toggling completion
17
+ * - StatusMessage: Toast-like feedback messages
18
+ */
19
+ const react_1 = __importDefault(require("react"));
20
+ const ink_1 = require("ink");
21
+ const theme_js_1 = require("../theme.js");
22
+ const utils_js_1 = require("../utils.js");
23
+ function StatusMessageDisplay({ message }) {
24
+ if (!message)
25
+ return null;
26
+ const color = message.type === 'success'
27
+ ? theme_js_1.PALETTE.success
28
+ : message.type === 'error'
29
+ ? theme_js_1.PALETTE.error
30
+ : theme_js_1.PALETTE.accent;
31
+ const icon = message.type === 'success'
32
+ ? '✓'
33
+ : message.type === 'error'
34
+ ? '✗'
35
+ : '●';
36
+ return (react_1.default.createElement(ink_1.Box, { paddingLeft: 1 },
37
+ react_1.default.createElement(ink_1.Text, { color: color },
38
+ icon,
39
+ " ",
40
+ message.text)));
41
+ }
42
+ function MoveOverlay({ columns, selectedIndex, taskTitle, termWidth }) {
43
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: theme_js_1.PALETTE.accent, paddingX: 2, paddingY: 1, marginX: 2 },
44
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.text, bold: true }, "Move Task"),
45
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, (0, utils_js_1.truncate)(taskTitle, termWidth - 10)),
46
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
47
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, "Select column: "),
48
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary },
49
+ '←/→ or 1-',
50
+ columns.length)),
51
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 }, columns.map((col, idx) => {
52
+ const isSelected = idx === selectedIndex;
53
+ return (react_1.default.createElement(ink_1.Box, { key: col.id, marginRight: 1 }, isSelected ? (react_1.default.createElement(ink_1.Text, { backgroundColor: theme_js_1.PALETTE.accent, color: theme_js_1.PALETTE.bg, bold: true }, ` ${idx + 1}:${col.title} `)) : (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, ` ${idx + 1}:${col.title} `))));
54
+ })),
55
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
56
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted },
57
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.success }, "ENTER"),
58
+ " confirm",
59
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.warning }, " ESC"),
60
+ " cancel"))));
61
+ }
62
+ function DeleteConfirmOverlay({ taskId, taskTitle, termWidth }) {
63
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: theme_js_1.PALETTE.error, paddingX: 2, paddingY: 1, marginX: 2 },
64
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.error, bold: true }, "Delete Task?"),
65
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
66
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, (0, utils_js_1.truncate)(taskTitle, termWidth - 10)),
67
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted },
68
+ " (",
69
+ taskId,
70
+ ")")),
71
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
72
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, "This action cannot be undone.")),
73
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
74
+ react_1.default.createElement(ink_1.Text, null,
75
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.error, bold: true }, "Y"),
76
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, " delete "),
77
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.success, bold: true }, "N"),
78
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, " cancel")))));
79
+ }
80
+ function NewTaskOverlay({ title, columnName, termWidth }) {
81
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: theme_js_1.PALETTE.accent, paddingX: 2, paddingY: 1, marginX: 2 },
82
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.text, bold: true }, "New Task"),
83
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary },
84
+ "Adding to ",
85
+ columnName),
86
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
87
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent }, '❯ '),
88
+ react_1.default.createElement(ink_1.Text, { color: title ? theme_js_1.PALETTE.text : theme_js_1.PALETTE.textMuted }, title || 'Enter task title...'),
89
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent }, '▌')),
90
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
91
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted },
92
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.success }, "ENTER"),
93
+ " create",
94
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.warning }, " ESC"),
95
+ " cancel"))));
96
+ }
97
+ function SubtaskOverlay({ task, selectedIndex, termWidth }) {
98
+ const subtasks = task.subtasks || [];
99
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: theme_js_1.PALETTE.accent, paddingX: 2, paddingY: 1, marginX: 2 },
100
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.text, bold: true }, "Toggle Subtask"),
101
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, (0, utils_js_1.truncate)(task.title, termWidth - 10)),
102
+ react_1.default.createElement(ink_1.Box, { marginTop: 1, flexDirection: "column" }, subtasks.map((st, idx) => {
103
+ const isSelected = idx === selectedIndex;
104
+ const checkmark = st.completed ? '✓' : '○';
105
+ const textColor = st.completed ? theme_js_1.PALETTE.success : theme_js_1.PALETTE.textSecondary;
106
+ return (react_1.default.createElement(ink_1.Box, { key: st.id }, isSelected ? (react_1.default.createElement(ink_1.Text, { backgroundColor: theme_js_1.PALETTE.bgHighlight },
107
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent }, '▸ '),
108
+ react_1.default.createElement(ink_1.Text, { color: textColor },
109
+ checkmark,
110
+ " ",
111
+ (0, utils_js_1.truncate)(st.title, termWidth - 14)))) : (react_1.default.createElement(ink_1.Text, null,
112
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, ' '),
113
+ react_1.default.createElement(ink_1.Text, { color: textColor },
114
+ checkmark,
115
+ " ",
116
+ (0, utils_js_1.truncate)(st.title, termWidth - 14))))));
117
+ })),
118
+ react_1.default.createElement(ink_1.Box, { marginTop: 1 },
119
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted },
120
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, "\u2191/\u2193"),
121
+ " select",
122
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.success }, " ENTER/SPACE"),
123
+ " toggle",
124
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.warning }, " ESC"),
125
+ " close"))));
126
+ }
127
+ //# sourceMappingURL=Overlays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overlays.js","sourceRoot":"","sources":["../../../src/tui/components/Overlays.tsx"],"names":[],"mappings":";;;;;AAoBA,oDAoBC;AAUD,kCA6CC;AASD,oDA8BC;AASD,wCA2BC;AASD,wCAgDC;AAnOD;;;;;;;GAOG;AACH,kDAA0B;AAC1B,6BAAgC;AAChC,0CAAsC;AAGtC,0CAAuC;AAOvC,SAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAsB;IAClE,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS;QACtC,CAAC,CAAC,kBAAO,CAAC,OAAO;QACjB,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;YAC1B,CAAC,CAAC,kBAAO,CAAC,KAAK;YACf,CAAC,CAAC,kBAAO,CAAC,MAAM,CAAC;IAEnB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS;QACrC,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;YAC1B,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,GAAG,CAAC;IAER,OAAO,CACL,8BAAC,SAAG,IAAC,WAAW,EAAE,CAAC;QACjB,8BAAC,UAAI,IAAC,KAAK,EAAE,KAAK;YAAG,IAAI;;YAAG,OAAO,CAAC,IAAI,CAAQ,CAC5C,CACP,CAAC;AACJ,CAAC;AAUD,SAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAoB;IAC5F,OAAO,CACL,8BAAC,SAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,kBAAO,CAAC,MAAM,EAC3B,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC;QAEV,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,IAAI,EAAE,IAAI,sBAAiB;QAChD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,IAAG,IAAA,mBAAQ,EAAC,SAAS,EAAE,SAAS,GAAG,EAAE,CAAC,CAAQ;QAEhF,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;YACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS,sBAAwB;YACtD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa;gBAAG,WAAW;gBAAE,OAAO,CAAC,MAAM,CAAQ,CACpE;QAEN,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC,IACd,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACxB,MAAM,UAAU,GAAG,GAAG,KAAK,aAAa,CAAC;YACzC,OAAO,CACL,8BAAC,SAAG,IAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,IAC7B,UAAU,CAAC,CAAC,CAAC,CACZ,8BAAC,UAAI,IAAC,eAAe,EAAE,kBAAO,CAAC,MAAM,EAAE,KAAK,EAAE,kBAAO,CAAC,EAAE,EAAE,IAAI,UAC3D,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CACvB,CACR,CAAC,CAAC,CAAC,CACF,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,IAC/B,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CACvB,CACR,CACG,CACP,CAAC;QACJ,CAAC,CAAC,CACE;QAEN,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;YACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS;gBAC5B,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,YAAc;;gBAC1C,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,WAAa;0BACpC,CACH,CACF,CACP,CAAC;AACJ,CAAC;AASD,SAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAA6B;IAC9F,OAAO,CACL,8BAAC,SAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,kBAAO,CAAC,KAAK,EAC1B,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC;QAEV,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,KAAK,EAAE,IAAI,yBAAoB;QACpD,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;YACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,IAAG,IAAA,mBAAQ,EAAC,SAAS,EAAE,SAAS,GAAG,EAAE,CAAC,CAAQ;YAChF,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS;;gBAAK,MAAM;oBAAS,CAC9C;QAEN,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;YACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS,oCAAsC,CAChE;QAEN,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;YACf,8BAAC,UAAI;gBACH,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,KAAK,EAAE,IAAI,cAAS;gBACzC,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,gBAAkB;gBACpD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,EAAE,IAAI,cAAS;gBAC3C,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,cAAgB,CAC7C,CACH,CACF,CACP,CAAC;AACJ,CAAC;AASD,SAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAuB;IAClF,OAAO,CACL,8BAAC,SAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,kBAAO,CAAC,MAAM,EAC3B,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC;QAEV,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,IAAI,EAAE,IAAI,qBAAgB;QAC/C,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa;;YAAa,UAAU,CAAQ;QAEjE,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;YACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,IAAG,IAAI,CAAQ;YAC1C,8BAAC,UAAI,IAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,kBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAO,CAAC,SAAS,IAAG,KAAK,IAAI,qBAAqB,CAAQ;YAC9F,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,IAAG,GAAG,CAAQ,CACrC;QAEN,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;YACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS;gBAC5B,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,YAAc;;gBAC1C,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,WAAa;0BACpC,CACH,CACF,CACP,CAAC;AACJ,CAAC;AASD,SAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAuB;IACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAErC,OAAO,CACL,8BAAC,SAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,kBAAO,CAAC,MAAM,EAC3B,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC;QAEV,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,IAAI,EAAE,IAAI,2BAAsB;QACrD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,IAAG,IAAA,mBAAQ,EAAC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC,CAAQ;QAEjF,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,IACtC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;YACxB,MAAM,UAAU,GAAG,GAAG,KAAK,aAAa,CAAC;YACzC,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAO,CAAC,aAAa,CAAC;YAEzE,OAAO,CACL,8BAAC,SAAG,IAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IACZ,UAAU,CAAC,CAAC,CAAC,CACZ,8BAAC,UAAI,IAAC,eAAe,EAAE,kBAAO,CAAC,WAAW;gBACxC,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,IAAG,IAAI,CAAQ;gBAC1C,8BAAC,UAAI,IAAC,KAAK,EAAE,SAAS;oBAAG,SAAS;;oBAAG,IAAA,mBAAQ,EAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC,CAAQ,CAC1E,CACR,CAAC,CAAC,CAAC,CACF,8BAAC,UAAI;gBACH,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,IAAG,IAAI,CAAQ;gBAC3C,8BAAC,UAAI,IAAC,KAAK,EAAE,SAAS;oBAAG,SAAS;;oBAAG,IAAA,mBAAQ,EAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC,CAAQ,CAC1E,CACR,CACG,CACP,CAAC;QACJ,CAAC,CAAC,CACE;QAEN,8BAAC,SAAG,IAAC,SAAS,EAAE,CAAC;YACf,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS;gBAC5B,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,oBAAY;;gBAC9C,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,mBAAqB;;gBACjD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,WAAa;yBACpC,CACH,CACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface ProgressBarProps {
3
+ done: number;
4
+ total: number;
5
+ width: number;
6
+ }
7
+ export declare function ProgressBar({ done, total, width }: ProgressBarProps): React.JSX.Element;
8
+ //# sourceMappingURL=ProgressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ProgressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,gBAAgB,qBAyBnE"}
@@ -0,0 +1,35 @@
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.ProgressBar = ProgressBar;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_1 = require("ink");
9
+ const theme_js_1 = require("../theme.js");
10
+ function ProgressBar({ done, total, width }) {
11
+ const percentage = total > 0 ? Math.round((done / total) * 100) : 0;
12
+ // Reserve space for: padding + "XX% " + " X of Y complete"
13
+ const textWidth = 20 + String(done).length + String(total).length;
14
+ const barWidth = Math.max(width - textWidth, 20);
15
+ const filled = Math.round((percentage / 100) * barWidth);
16
+ const empty = barWidth - filled;
17
+ // Color the percentage based on completion
18
+ const percentColor = percentage === 100 ? theme_js_1.PALETTE.success :
19
+ percentage >= 50 ? theme_js_1.PALETTE.progress :
20
+ theme_js_1.PALETTE.textMuted;
21
+ return (react_1.default.createElement(ink_1.Box, { paddingLeft: 2, paddingTop: 1, paddingBottom: 1 },
22
+ react_1.default.createElement(ink_1.Text, { color: percentColor, bold: true },
23
+ percentage,
24
+ "%"),
25
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, " "),
26
+ filled > 0 && react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.success }, theme_js_1.ICONS.progressFilled.repeat(filled)),
27
+ empty > 0 && react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.border }, theme_js_1.ICONS.progressEmpty.repeat(empty)),
28
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary },
29
+ " ",
30
+ done),
31
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, "/"),
32
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, total),
33
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, " complete")));
34
+ }
35
+ //# sourceMappingURL=ProgressBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../../src/tui/components/ProgressBar.tsx"],"names":[],"mappings":";;;;;AAUA,kCAyBC;AAnCD,kDAA0B;AAC1B,6BAAgC;AAChC,0CAA6C;AAQ7C,SAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAoB;IAClE,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;IACpE,2DAA2D;IAC3D,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAEhC,2CAA2C;IAC3C,MAAM,YAAY,GAAG,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,kBAAO,CAAC,OAAO,CAAC,CAAC;QACtC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAO,CAAC,QAAQ,CAAC,CAAC;YACrC,kBAAO,CAAC,SAAS,CAAC;IAEvC,OAAO,CACL,8BAAC,SAAG,IAAC,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC;QAClD,8BAAC,UAAI,IAAC,KAAK,EAAE,YAAY,EAAE,IAAI;YAAE,UAAU;gBAAS;QACpD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS,QAAU;QACvC,MAAM,GAAG,CAAC,IAAI,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,IAAG,gBAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAQ;QACxF,KAAK,GAAG,CAAC,IAAI,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,IAAG,gBAAK,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAQ;QACrF,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa;;YAAI,IAAI,CAAQ;QAClD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS,QAAU;QACxC,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,IAAG,KAAK,CAAQ;QAClD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS,gBAAkB,CAC5C,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export interface SearchBarProps {
3
+ query: string;
4
+ width: number;
5
+ }
6
+ export declare function SearchBar({ query, width }: SearchBarProps): React.JSX.Element;
7
+ //# sourceMappingURL=SearchBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/SearchBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,cAAc,qBAUzD"}
@@ -0,0 +1,22 @@
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.SearchBar = SearchBar;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_1 = require("ink");
9
+ const theme_js_1 = require("../theme.js");
10
+ function SearchBar({ query, width }) {
11
+ const inputWidth = Math.min(width - 6, 60);
12
+ const displayQuery = query.padEnd(inputWidth, ' ').slice(0, inputWidth);
13
+ return (react_1.default.createElement(ink_1.Box, { paddingLeft: 1, marginTop: 0 },
14
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent },
15
+ theme_js_1.ICONS.search,
16
+ " "),
17
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.text, backgroundColor: theme_js_1.PALETTE.bgHighlight },
18
+ " ",
19
+ displayQuery,
20
+ " ")));
21
+ }
22
+ //# sourceMappingURL=SearchBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchBar.js","sourceRoot":"","sources":["../../../src/tui/components/SearchBar.tsx"],"names":[],"mappings":";;;;;AASA,8BAUC;AAnBD,kDAA0B;AAC1B,6BAAgC;AAChC,0CAA6C;AAO7C,SAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAkB;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAExE,OAAO,CACL,8BAAC,SAAG,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;QAC/B,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM;YAAG,gBAAK,CAAC,MAAM;gBAAS;QACnD,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,IAAI,EAAE,eAAe,EAAE,kBAAO,CAAC,WAAW;;YAAI,YAAY;gBAAS,CACpF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { ViewMode } from '../types.js';
3
+ export interface StatusBarProps {
4
+ mode: ViewMode;
5
+ columnName: string;
6
+ taskIndex: number;
7
+ taskCount: number;
8
+ termWidth: number;
9
+ isWatching?: boolean;
10
+ }
11
+ export declare function StatusBar({ mode, columnName, taskIndex, taskCount, termWidth, isWatching }: StatusBarProps): React.JSX.Element;
12
+ //# sourceMappingURL=StatusBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAiB,EAAE,EAAE,cAAc,qBAyDjH"}
@@ -0,0 +1,37 @@
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.StatusBar = StatusBar;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_1 = require("ink");
9
+ const theme_js_1 = require("../theme.js");
10
+ function StatusBar({ mode, columnName, taskIndex, taskCount, termWidth, isWatching = true }) {
11
+ // Left section: essential commands with subtle styling
12
+ const leftCommands = mode === 'search' ? (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted },
13
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.warning }, "ESC"),
14
+ react_1.default.createElement(ink_1.Text, null, ' cancel'))) : (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted },
15
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, "?"),
16
+ react_1.default.createElement(ink_1.Text, null, ' help '),
17
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, "TAB"),
18
+ react_1.default.createElement(ink_1.Text, null, ' column '),
19
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, "q"),
20
+ react_1.default.createElement(ink_1.Text, null, ' quit')));
21
+ // Middle section: column and position
22
+ const position = taskCount > 0 ? `${taskIndex}/${taskCount}` : null;
23
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: termWidth },
24
+ react_1.default.createElement(ink_1.Box, { width: termWidth - 2, paddingLeft: 1, paddingRight: 1 },
25
+ leftCommands,
26
+ react_1.default.createElement(ink_1.Box, { flexGrow: 1 }),
27
+ columnName ? (react_1.default.createElement(ink_1.Text, null,
28
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, columnName.toUpperCase()),
29
+ position ? react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accent, bold: true }, ` ${position}`) : null)) : null,
30
+ react_1.default.createElement(ink_1.Box, { flexGrow: 1 }),
31
+ isWatching ? (react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.success },
32
+ react_1.default.createElement(ink_1.Text, null, theme_js_1.ICONS.live),
33
+ react_1.default.createElement(ink_1.Text, { dimColor: true }, ' live'))) : null),
34
+ react_1.default.createElement(ink_1.Box, { paddingLeft: 1 },
35
+ react_1.default.createElement(ink_1.Text, null, ' '))));
36
+ }
37
+ //# sourceMappingURL=StatusBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/tui/components/StatusBar.tsx"],"names":[],"mappings":";;;;;AAcA,8BAyDC;AAvED,kDAA0B;AAC1B,6BAAgC;AAChC,0CAA6C;AAY7C,SAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI,EAAkB;IAChH,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CACvC,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS;QAC5B,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO,UAAY;QACxC,8BAAC,UAAI,QAAE,SAAS,CAAQ,CACnB,CACR,CAAC,CAAC,CAAC,CACF,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,SAAS;QAC5B,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,QAAU;QAC5C,8BAAC,UAAI,QAAE,SAAS,CAAQ;QACxB,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,UAAY;QAC9C,8BAAC,UAAI,QAAE,WAAW,CAAQ;QAC1B,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,QAAU;QAC5C,8BAAC,UAAI,QAAE,OAAO,CAAQ,CACjB,CACR,CAAC;IAEF,sCAAsC;IACtC,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpE,OAAO,CACL,8BAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,SAAS;QAE1C,8BAAC,SAAG,IAAC,KAAK,EAAE,SAAS,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;YAEvD,YAAY;YAGb,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC,GAAI;YAGnB,UAAU,CAAC,CAAC,CAAC,CACZ,8BAAC,UAAI;gBACH,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,aAAa,IAAG,UAAU,CAAC,WAAW,EAAE,CAAQ;gBACpE,QAAQ,CAAC,CAAC,CAAC,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,MAAM,EAAE,IAAI,UAAE,IAAI,QAAQ,EAAE,CAAQ,CAAC,CAAC,CAAC,IAAI,CACvE,CACR,CAAC,CAAC,CAAC,IAAI;YAGR,8BAAC,SAAG,IAAC,QAAQ,EAAE,CAAC,GAAI;YAGnB,UAAU,CAAC,CAAC,CAAC,CACZ,8BAAC,UAAI,IAAC,KAAK,EAAE,kBAAO,CAAC,OAAO;gBAC1B,8BAAC,UAAI,QAAE,gBAAK,CAAC,IAAI,CAAQ;gBACzB,8BAAC,UAAI,IAAC,QAAQ,UAAE,OAAO,CAAQ,CAC1B,CACR,CAAC,CAAC,CAAC,IAAI,CACJ;QAGN,8BAAC,SAAG,IAAC,WAAW,EAAE,CAAC;YACjB,8BAAC,UAAI,QAAE,GAAG,CAAQ,CACd,CACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * TaskCard - Lipgloss-style task card with rounded borders
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
9
+ */
10
+ import React from 'react';
11
+ import type { Task } from '@brainfile/core';
12
+ export interface TaskCardProps {
13
+ task: Task;
14
+ isSelected: boolean;
15
+ isExpanded: boolean;
16
+ width: number;
17
+ }
18
+ export declare function TaskCard({ task, isSelected, isExpanded, width }: TaskCardProps): React.JSX.Element;
19
+ //# sourceMappingURL=TaskCard.d.ts.map
@@ -0,0 +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;AA4ED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,aAAa,qBAkF9E"}
@@ -0,0 +1,105 @@
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.TaskCard = TaskCard;
7
+ /**
8
+ * TaskCard - Lipgloss-style task card with rounded borders
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
15
+ */
16
+ const react_1 = __importDefault(require("react"));
17
+ const ink_1 = require("ink");
18
+ const theme_js_1 = require("../theme.js");
19
+ const utils_js_1 = require("../utils.js");
20
+ // Priority badge with background color
21
+ function PriorityBadge({ priority }) {
22
+ if (!priority)
23
+ return null;
24
+ const color = (0, utils_js_1.getPriorityColor)(priority);
25
+ const label = priority.toUpperCase().slice(0, 4);
26
+ return (react_1.default.createElement(ink_1.Text, { color: "black", backgroundColor: color, bold: true }, ` ${label} `));
27
+ }
28
+ // Tag pills
29
+ function TagPills({ tags, maxTags = 3 }) {
30
+ if (!tags || tags.length === 0)
31
+ return null;
32
+ return (react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
33
+ tags.slice(0, maxTags).map((tag, idx) => (react_1.default.createElement(ink_1.Box, { key: tag, marginRight: idx < Math.min(tags.length, maxTags) - 1 ? 1 : 0 },
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))));
40
+ }
41
+ // Subtask progress indicator
42
+ function SubtaskProgress({ completed, total }) {
43
+ if (total === 0)
44
+ return null;
45
+ const barWidth = 10;
46
+ const filled = Math.round((completed / total) * barWidth);
47
+ return (react_1.default.createElement(ink_1.Box, null,
48
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, '['),
49
+ filled > 0 && react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.success }, '█'.repeat(filled)),
50
+ barWidth - filled > 0 && react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted }, '░'.repeat(barWidth - filled)),
51
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, `] ${completed}/${total}`)));
52
+ }
53
+ // Due date indicator with color coding
54
+ function DueDateBadge({ dueDate }) {
55
+ if (!dueDate)
56
+ return null;
57
+ const due = new Date(dueDate);
58
+ const now = new Date();
59
+ const diffDays = Math.ceil((due.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
60
+ // Determine color based on urgency
61
+ const getColor = () => {
62
+ if (diffDays < 0)
63
+ return theme_js_1.PALETTE.error; // Overdue
64
+ if (diffDays <= 2)
65
+ return theme_js_1.PALETTE.warning; // Due soon
66
+ return theme_js_1.PALETTE.textSecondary;
67
+ };
68
+ // Format as short date
69
+ const formatted = due.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
70
+ return (react_1.default.createElement(ink_1.Text, { color: getColor() },
71
+ diffDays < 0 ? '⚠ ' : '📅 ',
72
+ formatted));
73
+ }
74
+ function TaskCard({ task, isSelected, isExpanded, width }) {
75
+ const subtasks = task.subtasks || [];
76
+ const completedSubtasks = subtasks.filter(s => s.completed).length;
77
+ const borderColor = isSelected ? theme_js_1.PALETTE.progress : theme_js_1.PALETTE.border;
78
+ 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 },
80
+ react_1.default.createElement(ink_1.Box, { justifyContent: "space-between" },
81
+ react_1.default.createElement(ink_1.Box, { flexShrink: 1 },
82
+ 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
+ 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 },
85
+ react_1.default.createElement(PriorityBadge, { priority: task.priority }),
86
+ react_1.default.createElement(TagPills, { tags: task.tags }),
87
+ subtasks.length > 0 && (react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
88
+ react_1.default.createElement(SubtaskProgress, { completed: completedSubtasks, total: subtasks.length }))),
89
+ task.dueDate && (react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
90
+ react_1.default.createElement(DueDateBadge, { dueDate: task.dueDate }))))),
91
+ isExpanded && (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1 },
92
+ contentWidth > 0 && react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.border }, '─'.repeat(contentWidth)),
93
+ task.description && (react_1.default.createElement(ink_1.Box, { marginTop: 1 },
94
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, (0, utils_js_1.truncate)(task.description.split('\n')[0], contentWidth)))),
95
+ 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 },
96
+ react_1.default.createElement(ink_1.Text, { color: st.completed ? theme_js_1.PALETTE.success : theme_js_1.PALETTE.textSecondary },
97
+ st.completed ? '✓' : '○',
98
+ " ",
99
+ (0, utils_js_1.truncate)(st.title, contentWidth - 2))))))),
100
+ task.relatedFiles && task.relatedFiles.length > 0 && (react_1.default.createElement(ink_1.Box, { marginTop: 1 },
101
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.accentAlt },
102
+ '📁 ',
103
+ (0, utils_js_1.truncate)(task.relatedFiles.slice(0, 2).join(', '), contentWidth - 3))))))));
104
+ }
105
+ //# sourceMappingURL=TaskCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskCard.js","sourceRoot":"","sources":["../../../src/tui/components/TaskCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { Task } from '@brainfile/core';
3
+ export interface TaskListProps {
4
+ tasks: Task[];
5
+ selectedIndex: number;
6
+ expandedIds: Set<string>;
7
+ viewportHeight: number;
8
+ termWidth: number;
9
+ }
10
+ export declare function TaskList({ tasks, selectedIndex, expandedIds, viewportHeight, termWidth }: TaskListProps): React.JSX.Element;
11
+ //# sourceMappingURL=TaskList.d.ts.map
@@ -0,0 +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,qBA0EvG"}