brainfile 0.18.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 (360) hide show
  1. package/README.md +222 -0
  2. package/dist/__tests__/helpers/v2.d.ts +12 -0
  3. package/dist/__tests__/helpers/v2.d.ts.map +1 -0
  4. package/dist/__tests__/helpers/v2.js +73 -0
  5. package/dist/__tests__/helpers/v2.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +480 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/add.d.ts +34 -0
  11. package/dist/commands/add.d.ts.map +1 -0
  12. package/dist/commands/add.js +255 -0
  13. package/dist/commands/add.js.map +1 -0
  14. package/dist/commands/adr.d.ts +22 -0
  15. package/dist/commands/adr.d.ts.map +1 -0
  16. package/dist/commands/adr.js +195 -0
  17. package/dist/commands/adr.js.map +1 -0
  18. package/dist/commands/archive.d.ts +20 -0
  19. package/dist/commands/archive.d.ts.map +1 -0
  20. package/dist/commands/archive.js +590 -0
  21. package/dist/commands/archive.js.map +1 -0
  22. package/dist/commands/auth.d.ts +26 -0
  23. package/dist/commands/auth.d.ts.map +1 -0
  24. package/dist/commands/auth.js +245 -0
  25. package/dist/commands/auth.js.map +1 -0
  26. package/dist/commands/complete.d.ts +30 -0
  27. package/dist/commands/complete.d.ts.map +1 -0
  28. package/dist/commands/complete.js +267 -0
  29. package/dist/commands/complete.js.map +1 -0
  30. package/dist/commands/config.d.ts +29 -0
  31. package/dist/commands/config.d.ts.map +1 -0
  32. package/dist/commands/config.js +210 -0
  33. package/dist/commands/config.js.map +1 -0
  34. package/dist/commands/contract.d.ts +84 -0
  35. package/dist/commands/contract.d.ts.map +1 -0
  36. package/dist/commands/contract.js +715 -0
  37. package/dist/commands/contract.js.map +1 -0
  38. package/dist/commands/delete.d.ts +8 -0
  39. package/dist/commands/delete.d.ts.map +1 -0
  40. package/dist/commands/delete.js +139 -0
  41. package/dist/commands/delete.js.map +1 -0
  42. package/dist/commands/hooks.d.ts +35 -0
  43. package/dist/commands/hooks.d.ts.map +1 -0
  44. package/dist/commands/hooks.js +324 -0
  45. package/dist/commands/hooks.js.map +1 -0
  46. package/dist/commands/init.d.ts +7 -0
  47. package/dist/commands/init.d.ts.map +1 -0
  48. package/dist/commands/init.js +118 -0
  49. package/dist/commands/init.js.map +1 -0
  50. package/dist/commands/lint.d.ts +16 -0
  51. package/dist/commands/lint.d.ts.map +1 -0
  52. package/dist/commands/lint.js +123 -0
  53. package/dist/commands/lint.js.map +1 -0
  54. package/dist/commands/list.d.ts +20 -0
  55. package/dist/commands/list.d.ts.map +1 -0
  56. package/dist/commands/list.js +175 -0
  57. package/dist/commands/list.js.map +1 -0
  58. package/dist/commands/log.d.ts +52 -0
  59. package/dist/commands/log.d.ts.map +1 -0
  60. package/dist/commands/log.js +246 -0
  61. package/dist/commands/log.js.map +1 -0
  62. package/dist/commands/mcp.d.ts +3 -0
  63. package/dist/commands/mcp.d.ts.map +1 -0
  64. package/dist/commands/mcp.js +96 -0
  65. package/dist/commands/mcp.js.map +1 -0
  66. package/dist/commands/migrate.d.ts +16 -0
  67. package/dist/commands/migrate.d.ts.map +1 -0
  68. package/dist/commands/migrate.js +388 -0
  69. package/dist/commands/migrate.js.map +1 -0
  70. package/dist/commands/move.d.ts +16 -0
  71. package/dist/commands/move.d.ts.map +1 -0
  72. package/dist/commands/move.js +225 -0
  73. package/dist/commands/move.js.map +1 -0
  74. package/dist/commands/patch.d.ts +17 -0
  75. package/dist/commands/patch.d.ts.map +1 -0
  76. package/dist/commands/patch.js +226 -0
  77. package/dist/commands/patch.js.map +1 -0
  78. package/dist/commands/restore.d.ts +8 -0
  79. package/dist/commands/restore.d.ts.map +1 -0
  80. package/dist/commands/restore.js +111 -0
  81. package/dist/commands/restore.js.map +1 -0
  82. package/dist/commands/rules.d.ts +68 -0
  83. package/dist/commands/rules.d.ts.map +1 -0
  84. package/dist/commands/rules.js +322 -0
  85. package/dist/commands/rules.js.map +1 -0
  86. package/dist/commands/schema.d.ts +31 -0
  87. package/dist/commands/schema.d.ts.map +1 -0
  88. package/dist/commands/schema.js +374 -0
  89. package/dist/commands/schema.js.map +1 -0
  90. package/dist/commands/search.d.ts +33 -0
  91. package/dist/commands/search.d.ts.map +1 -0
  92. package/dist/commands/search.js +209 -0
  93. package/dist/commands/search.js.map +1 -0
  94. package/dist/commands/show.d.ts +20 -0
  95. package/dist/commands/show.d.ts.map +1 -0
  96. package/dist/commands/show.js +272 -0
  97. package/dist/commands/show.js.map +1 -0
  98. package/dist/commands/subtask.d.ts +12 -0
  99. package/dist/commands/subtask.d.ts.map +1 -0
  100. package/dist/commands/subtask.js +212 -0
  101. package/dist/commands/subtask.js.map +1 -0
  102. package/dist/commands/template.d.ts +17 -0
  103. package/dist/commands/template.d.ts.map +1 -0
  104. package/dist/commands/template.js +149 -0
  105. package/dist/commands/template.js.map +1 -0
  106. package/dist/commands/tui.d.ts +6 -0
  107. package/dist/commands/tui.d.ts.map +1 -0
  108. package/dist/commands/tui.js +79 -0
  109. package/dist/commands/tui.js.map +1 -0
  110. package/dist/commands/types.d.ts +40 -0
  111. package/dist/commands/types.d.ts.map +1 -0
  112. package/dist/commands/types.js +242 -0
  113. package/dist/commands/types.js.map +1 -0
  114. package/dist/index.d.ts +10 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +29 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/lib/contractRunner.d.ts +59 -0
  119. package/dist/lib/contractRunner.d.ts.map +1 -0
  120. package/dist/lib/contractRunner.js +511 -0
  121. package/dist/lib/contractRunner.js.map +1 -0
  122. package/dist/mcp/helpers.d.ts +32 -0
  123. package/dist/mcp/helpers.d.ts.map +1 -0
  124. package/dist/mcp/helpers.js +125 -0
  125. package/dist/mcp/helpers.js.map +1 -0
  126. package/dist/mcp/tools/contract.d.ts +25 -0
  127. package/dist/mcp/tools/contract.d.ts.map +1 -0
  128. package/dist/mcp/tools/contract.js +33 -0
  129. package/dist/mcp/tools/contract.js.map +1 -0
  130. package/dist/mcp/tools/contract_tool.d.ts +3 -0
  131. package/dist/mcp/tools/contract_tool.d.ts.map +1 -0
  132. package/dist/mcp/tools/contract_tool.js +328 -0
  133. package/dist/mcp/tools/contract_tool.js.map +1 -0
  134. package/dist/mcp/tools/get_task_tool.d.ts +3 -0
  135. package/dist/mcp/tools/get_task_tool.d.ts.map +1 -0
  136. package/dist/mcp/tools/get_task_tool.js +55 -0
  137. package/dist/mcp/tools/get_task_tool.js.map +1 -0
  138. package/dist/mcp/tools/list_tasks_tool.d.ts +3 -0
  139. package/dist/mcp/tools/list_tasks_tool.d.ts.map +1 -0
  140. package/dist/mcp/tools/list_tasks_tool.js +82 -0
  141. package/dist/mcp/tools/list_tasks_tool.js.map +1 -0
  142. package/dist/mcp/tools/search_tool.d.ts +3 -0
  143. package/dist/mcp/tools/search_tool.d.ts.map +1 -0
  144. package/dist/mcp/tools/search_tool.js +155 -0
  145. package/dist/mcp/tools/search_tool.js.map +1 -0
  146. package/dist/mcp/tools/subtask_tool.d.ts +3 -0
  147. package/dist/mcp/tools/subtask_tool.d.ts.map +1 -0
  148. package/dist/mcp/tools/subtask_tool.js +321 -0
  149. package/dist/mcp/tools/subtask_tool.js.map +1 -0
  150. package/dist/mcp/tools/task_add_tool.d.ts +3 -0
  151. package/dist/mcp/tools/task_add_tool.d.ts.map +1 -0
  152. package/dist/mcp/tools/task_add_tool.js +196 -0
  153. package/dist/mcp/tools/task_add_tool.js.map +1 -0
  154. package/dist/mcp/tools/task_complete_tool.d.ts +3 -0
  155. package/dist/mcp/tools/task_complete_tool.d.ts.map +1 -0
  156. package/dist/mcp/tools/task_complete_tool.js +265 -0
  157. package/dist/mcp/tools/task_complete_tool.js.map +1 -0
  158. package/dist/mcp/tools/task_delete_tool.d.ts +3 -0
  159. package/dist/mcp/tools/task_delete_tool.d.ts.map +1 -0
  160. package/dist/mcp/tools/task_delete_tool.js +87 -0
  161. package/dist/mcp/tools/task_delete_tool.js.map +1 -0
  162. package/dist/mcp/tools/task_move_tool.d.ts +3 -0
  163. package/dist/mcp/tools/task_move_tool.d.ts.map +1 -0
  164. package/dist/mcp/tools/task_move_tool.js +187 -0
  165. package/dist/mcp/tools/task_move_tool.js.map +1 -0
  166. package/dist/mcp/tools/task_patch_tool.d.ts +3 -0
  167. package/dist/mcp/tools/task_patch_tool.d.ts.map +1 -0
  168. package/dist/mcp/tools/task_patch_tool.js +189 -0
  169. package/dist/mcp/tools/task_patch_tool.js.map +1 -0
  170. package/dist/schemas/base.json +159 -0
  171. package/dist/schemas/board.json +290 -0
  172. package/dist/tui/BrainfileTUI.d.ts +4 -0
  173. package/dist/tui/BrainfileTUI.d.ts.map +1 -0
  174. package/dist/tui/BrainfileTUI.js +272 -0
  175. package/dist/tui/BrainfileTUI.js.map +1 -0
  176. package/dist/tui/actions.d.ts +84 -0
  177. package/dist/tui/actions.d.ts.map +1 -0
  178. package/dist/tui/actions.js +1251 -0
  179. package/dist/tui/actions.js.map +1 -0
  180. package/dist/tui/components/ColumnTabs.d.ts +9 -0
  181. package/dist/tui/components/ColumnTabs.d.ts.map +1 -0
  182. package/dist/tui/components/ColumnTabs.js +34 -0
  183. package/dist/tui/components/ColumnTabs.js.map +1 -0
  184. package/dist/tui/components/Header.d.ts +15 -0
  185. package/dist/tui/components/Header.d.ts.map +1 -0
  186. package/dist/tui/components/Header.js +48 -0
  187. package/dist/tui/components/Header.js.map +1 -0
  188. package/dist/tui/components/HelpOverlay.d.ts +9 -0
  189. package/dist/tui/components/HelpOverlay.d.ts.map +1 -0
  190. package/dist/tui/components/HelpOverlay.js +116 -0
  191. package/dist/tui/components/HelpOverlay.js.map +1 -0
  192. package/dist/tui/components/LogsPanel.d.ts +16 -0
  193. package/dist/tui/components/LogsPanel.d.ts.map +1 -0
  194. package/dist/tui/components/LogsPanel.js +115 -0
  195. package/dist/tui/components/LogsPanel.js.map +1 -0
  196. package/dist/tui/components/MainPanelTabs.d.ts +10 -0
  197. package/dist/tui/components/MainPanelTabs.d.ts.map +1 -0
  198. package/dist/tui/components/MainPanelTabs.js +56 -0
  199. package/dist/tui/components/MainPanelTabs.js.map +1 -0
  200. package/dist/tui/components/ManualBorder.d.ts +42 -0
  201. package/dist/tui/components/ManualBorder.d.ts.map +1 -0
  202. package/dist/tui/components/ManualBorder.js +56 -0
  203. package/dist/tui/components/ManualBorder.js.map +1 -0
  204. package/dist/tui/components/Overlays.d.ts +41 -0
  205. package/dist/tui/components/Overlays.d.ts.map +1 -0
  206. package/dist/tui/components/Overlays.js +127 -0
  207. package/dist/tui/components/Overlays.js.map +1 -0
  208. package/dist/tui/components/ProgressBar.d.ts +8 -0
  209. package/dist/tui/components/ProgressBar.d.ts.map +1 -0
  210. package/dist/tui/components/ProgressBar.js +35 -0
  211. package/dist/tui/components/ProgressBar.js.map +1 -0
  212. package/dist/tui/components/RulesPanel.d.ts +25 -0
  213. package/dist/tui/components/RulesPanel.d.ts.map +1 -0
  214. package/dist/tui/components/RulesPanel.js +139 -0
  215. package/dist/tui/components/RulesPanel.js.map +1 -0
  216. package/dist/tui/components/SearchBar.d.ts +8 -0
  217. package/dist/tui/components/SearchBar.d.ts.map +1 -0
  218. package/dist/tui/components/SearchBar.js +38 -0
  219. package/dist/tui/components/SearchBar.js.map +1 -0
  220. package/dist/tui/components/StackedTaskList.d.ts +27 -0
  221. package/dist/tui/components/StackedTaskList.d.ts.map +1 -0
  222. package/dist/tui/components/StackedTaskList.js +120 -0
  223. package/dist/tui/components/StackedTaskList.js.map +1 -0
  224. package/dist/tui/components/StatusBar.d.ts +14 -0
  225. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  226. package/dist/tui/components/StatusBar.js +42 -0
  227. package/dist/tui/components/StatusBar.js.map +1 -0
  228. package/dist/tui/components/TaskCard.d.ts +25 -0
  229. package/dist/tui/components/TaskCard.d.ts.map +1 -0
  230. package/dist/tui/components/TaskCard.js +221 -0
  231. package/dist/tui/components/TaskCard.js.map +1 -0
  232. package/dist/tui/components/TaskCardMeasure.d.ts +31 -0
  233. package/dist/tui/components/TaskCardMeasure.d.ts.map +1 -0
  234. package/dist/tui/components/TaskCardMeasure.js +133 -0
  235. package/dist/tui/components/TaskCardMeasure.js.map +1 -0
  236. package/dist/tui/components/TaskDetail.d.ts +13 -0
  237. package/dist/tui/components/TaskDetail.d.ts.map +1 -0
  238. package/dist/tui/components/TaskDetail.js +64 -0
  239. package/dist/tui/components/TaskDetail.js.map +1 -0
  240. package/dist/tui/components/TaskList.d.ts +12 -0
  241. package/dist/tui/components/TaskList.d.ts.map +1 -0
  242. package/dist/tui/components/TaskList.js +75 -0
  243. package/dist/tui/components/TaskList.js.map +1 -0
  244. package/dist/tui/components/index.d.ts +31 -0
  245. package/dist/tui/components/index.d.ts.map +1 -0
  246. package/dist/tui/components/index.js +43 -0
  247. package/dist/tui/components/index.js.map +1 -0
  248. package/dist/tui/hooks/index.d.ts +3 -0
  249. package/dist/tui/hooks/index.d.ts.map +1 -0
  250. package/dist/tui/hooks/index.js +8 -0
  251. package/dist/tui/hooks/index.js.map +1 -0
  252. package/dist/tui/hooks/useBrainfileLoader.d.ts +5 -0
  253. package/dist/tui/hooks/useBrainfileLoader.d.ts.map +1 -0
  254. package/dist/tui/hooks/useBrainfileLoader.js +237 -0
  255. package/dist/tui/hooks/useBrainfileLoader.js.map +1 -0
  256. package/dist/tui/hooks/useKeyboardNavigation.d.ts +20 -0
  257. package/dist/tui/hooks/useKeyboardNavigation.d.ts.map +1 -0
  258. package/dist/tui/hooks/useKeyboardNavigation.js +806 -0
  259. package/dist/tui/hooks/useKeyboardNavigation.js.map +1 -0
  260. package/dist/tui/index.d.ts +10 -0
  261. package/dist/tui/index.d.ts.map +1 -0
  262. package/dist/tui/index.js +38 -0
  263. package/dist/tui/index.js.map +1 -0
  264. package/dist/tui/theme.d.ts +119 -0
  265. package/dist/tui/theme.d.ts.map +1 -0
  266. package/dist/tui/theme.js +138 -0
  267. package/dist/tui/theme.js.map +1 -0
  268. package/dist/tui/types.d.ts +53 -0
  269. package/dist/tui/types.d.ts.map +1 -0
  270. package/dist/tui/types.js +12 -0
  271. package/dist/tui/types.js.map +1 -0
  272. package/dist/tui/utils.d.ts +24 -0
  273. package/dist/tui/utils.d.ts.map +1 -0
  274. package/dist/tui/utils.js +161 -0
  275. package/dist/tui/utils.js.map +1 -0
  276. package/dist/utils/archive.d.ts +57 -0
  277. package/dist/utils/archive.d.ts.map +1 -0
  278. package/dist/utils/archive.js +304 -0
  279. package/dist/utils/archive.js.map +1 -0
  280. package/dist/utils/auth-store.d.ts +69 -0
  281. package/dist/utils/auth-store.d.ts.map +1 -0
  282. package/dist/utils/auth-store.js +308 -0
  283. package/dist/utils/auth-store.js.map +1 -0
  284. package/dist/utils/board-types.d.ts +13 -0
  285. package/dist/utils/board-types.d.ts.map +1 -0
  286. package/dist/utils/board-types.js +7 -0
  287. package/dist/utils/board-types.js.map +1 -0
  288. package/dist/utils/brainfile-finder.d.ts +12 -0
  289. package/dist/utils/brainfile-finder.d.ts.map +1 -0
  290. package/dist/utils/brainfile-finder.js +69 -0
  291. package/dist/utils/brainfile-finder.js.map +1 -0
  292. package/dist/utils/brainfile-path.d.ts +10 -0
  293. package/dist/utils/brainfile-path.d.ts.map +1 -0
  294. package/dist/utils/brainfile-path.js +88 -0
  295. package/dist/utils/brainfile-path.js.map +1 -0
  296. package/dist/utils/cli-error.d.ts +44 -0
  297. package/dist/utils/cli-error.d.ts.map +1 -0
  298. package/dist/utils/cli-error.js +85 -0
  299. package/dist/utils/cli-error.js.map +1 -0
  300. package/dist/utils/config.d.ts +119 -0
  301. package/dist/utils/config.d.ts.map +1 -0
  302. package/dist/utils/config.js +304 -0
  303. package/dist/utils/config.js.map +1 -0
  304. package/dist/utils/contractSpec.d.ts +13 -0
  305. package/dist/utils/contractSpec.d.ts.map +1 -0
  306. package/dist/utils/contractSpec.js +61 -0
  307. package/dist/utils/contractSpec.js.map +1 -0
  308. package/dist/utils/dot-brainfile.d.ts +9 -0
  309. package/dist/utils/dot-brainfile.d.ts.map +1 -0
  310. package/dist/utils/dot-brainfile.js +74 -0
  311. package/dist/utils/dot-brainfile.js.map +1 -0
  312. package/dist/utils/errorHandler.d.ts +106 -0
  313. package/dist/utils/errorHandler.d.ts.map +1 -0
  314. package/dist/utils/errorHandler.js +223 -0
  315. package/dist/utils/errorHandler.js.map +1 -0
  316. package/dist/utils/git-helper.d.ts +17 -0
  317. package/dist/utils/git-helper.d.ts.map +1 -0
  318. package/dist/utils/git-helper.js +62 -0
  319. package/dist/utils/git-helper.js.map +1 -0
  320. package/dist/utils/github-auth.d.ts +56 -0
  321. package/dist/utils/github-auth.d.ts.map +1 -0
  322. package/dist/utils/github-auth.js +341 -0
  323. package/dist/utils/github-auth.js.map +1 -0
  324. package/dist/utils/hook-parser.d.ts +15 -0
  325. package/dist/utils/hook-parser.d.ts.map +1 -0
  326. package/dist/utils/hook-parser.js +69 -0
  327. package/dist/utils/hook-parser.js.map +1 -0
  328. package/dist/utils/hook-settings.d.ts +27 -0
  329. package/dist/utils/hook-settings.d.ts.map +1 -0
  330. package/dist/utils/hook-settings.js +364 -0
  331. package/dist/utils/hook-settings.js.map +1 -0
  332. package/dist/utils/linear-auth.d.ts +59 -0
  333. package/dist/utils/linear-auth.d.ts.map +1 -0
  334. package/dist/utils/linear-auth.js +295 -0
  335. package/dist/utils/linear-auth.js.map +1 -0
  336. package/dist/utils/logger.d.ts +34 -0
  337. package/dist/utils/logger.d.ts.map +1 -0
  338. package/dist/utils/logger.js +56 -0
  339. package/dist/utils/logger.js.map +1 -0
  340. package/dist/utils/strict-validation.d.ts +8 -0
  341. package/dist/utils/strict-validation.d.ts.map +1 -0
  342. package/dist/utils/strict-validation.js +41 -0
  343. package/dist/utils/strict-validation.js.map +1 -0
  344. package/dist/utils/v2-detect.d.ts +28 -0
  345. package/dist/utils/v2-detect.d.ts.map +1 -0
  346. package/dist/utils/v2-detect.js +112 -0
  347. package/dist/utils/v2-detect.js.map +1 -0
  348. package/dist/utils/v2-only.d.ts +9 -0
  349. package/dist/utils/v2-only.d.ts.map +1 -0
  350. package/dist/utils/v2-only.js +64 -0
  351. package/dist/utils/v2-only.js.map +1 -0
  352. package/dist/utils/workspace-format.d.ts +25 -0
  353. package/dist/utils/workspace-format.d.ts.map +1 -0
  354. package/dist/utils/workspace-format.js +106 -0
  355. package/dist/utils/workspace-format.js.map +1 -0
  356. package/dist/validation/command-lint.d.ts +11 -0
  357. package/dist/validation/command-lint.d.ts.map +1 -0
  358. package/dist/validation/command-lint.js +88 -0
  359. package/dist/validation/command-lint.js.map +1 -0
  360. package/package.json +69 -0
@@ -0,0 +1,133 @@
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
+ function measureTaskCard(task, contentWidth, allTasks = []) {
62
+ // Collapsed is ALWAYS 3 lines (2 content + 1 margin)
63
+ const collapsed = 3;
64
+ // Expanded builds on top of collapsed base
65
+ let expanded = 3;
66
+ // marginTop before expanded content
67
+ expanded += 1;
68
+ // Description section (if present)
69
+ if (task.description) {
70
+ const descLines = wrapText(task.description, contentWidth - 4);
71
+ expanded += Math.min(descLines.length, 3);
72
+ if (descLines.length > 3) {
73
+ expanded += 1; // "…" overflow indicator
74
+ }
75
+ }
76
+ // Subtasks section (if present)
77
+ if (task.subtasks && task.subtasks.length > 0) {
78
+ if (task.description) {
79
+ expanded += 1; // marginTop={1} only if description present
80
+ }
81
+ expanded += Math.min(task.subtasks.length, 5);
82
+ if (task.subtasks.length > 5) {
83
+ expanded += 1; // "+N more" line
84
+ }
85
+ }
86
+ // Related files section (if present)
87
+ if (task.relatedFiles && task.relatedFiles.length > 0) {
88
+ expanded += 1; // marginTop={1}
89
+ expanded += Math.min(task.relatedFiles.length, 3);
90
+ if (task.relatedFiles.length > 3) {
91
+ expanded += 1; // "+N more" line
92
+ }
93
+ }
94
+ const hasPreviousSections = Boolean(task.description) ||
95
+ Boolean(task.subtasks && task.subtasks.length > 0) ||
96
+ Boolean(task.relatedFiles && task.relatedFiles.length > 0);
97
+ const childrenCount = allTasks.filter(t => {
98
+ const parentId = t.parentId;
99
+ return parentId === task.id && t.id !== task.id;
100
+ }).length;
101
+ const isAdr = (task.type || 'task').toLowerCase() === 'adr';
102
+ const hasAdrStatus = Boolean(task.status) && isAdr;
103
+ const hasContract = Boolean(task.contract);
104
+ const parentId = task.parentId;
105
+ const hasDetailBlock = Boolean(parentId) || childrenCount > 0 || hasAdrStatus || hasContract;
106
+ if (hasDetailBlock) {
107
+ if (hasPreviousSections) {
108
+ expanded += 1; // marginTop before TaskDetail block
109
+ }
110
+ if (parentId)
111
+ expanded += 1; // Parent row
112
+ if (childrenCount > 0)
113
+ expanded += 1; // Children row
114
+ if (hasAdrStatus)
115
+ expanded += 1; // ADR status row
116
+ if (hasContract) {
117
+ if (parentId || childrenCount > 0 || hasAdrStatus) {
118
+ expanded += 1; // spacer before Contract header
119
+ }
120
+ expanded += 3; // Contract header + status + deliverables
121
+ }
122
+ }
123
+ return { collapsed, expanded };
124
+ }
125
+ /**
126
+ * Get the height for a task card based on expanded state.
127
+ * Convenience wrapper for TaskList viewport calculations.
128
+ */
129
+ function getTaskCardHeight(task, isExpanded, contentWidth, allTasks = []) {
130
+ const dims = measureTaskCard(task, contentWidth, allTasks);
131
+ return isExpanded ? dims.expanded : dims.collapsed;
132
+ }
133
+ //# 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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"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { Task } from '@brainfile/core';
3
+ export interface TaskDetailProps {
4
+ task: Task;
5
+ allTasks?: Task[];
6
+ /** Optional top spacing before the detail block */
7
+ marginTop?: number;
8
+ }
9
+ /**
10
+ * TaskDetail - detail sections shown when a task card is expanded.
11
+ */
12
+ export declare function TaskDetail({ task, allTasks, marginTop }: TaskDetailProps): React.JSX.Element | null;
13
+ //# sourceMappingURL=TaskDetail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskDetail.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAgB5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAClB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,QAAa,EAAE,SAAa,EAAE,EAAE,eAAe,4BA2DjF"}
@@ -0,0 +1,64 @@
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.TaskDetail = TaskDetail;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_1 = require("ink");
9
+ const theme_js_1 = require("../theme.js");
10
+ function getContractStatusColor(status) {
11
+ switch (status) {
12
+ case 'done':
13
+ return theme_js_1.PALETTE.success;
14
+ case 'in_progress':
15
+ return theme_js_1.PALETTE.warning;
16
+ case 'failed':
17
+ return theme_js_1.PALETTE.error;
18
+ default:
19
+ return theme_js_1.PALETTE.textMuted;
20
+ }
21
+ }
22
+ /**
23
+ * TaskDetail - detail sections shown when a task card is expanded.
24
+ */
25
+ function TaskDetail({ task, allTasks = [], marginTop = 0 }) {
26
+ const parentId = task.parentId;
27
+ const children = allTasks.filter(t => {
28
+ const candidateParentId = t.parentId;
29
+ return candidateParentId === task.id && t.id !== task.id;
30
+ });
31
+ const isAdr = (task.type || 'task').toLowerCase() === 'adr';
32
+ const adrStatus = isAdr ? task.status : undefined;
33
+ const hasParentOrChildren = Boolean(parentId) || children.length > 0;
34
+ const hasContract = Boolean(task.contract);
35
+ const hasAdrStatus = Boolean(adrStatus);
36
+ if (!hasParentOrChildren && !hasContract && !hasAdrStatus) {
37
+ return null;
38
+ }
39
+ const status = task.contract?.status;
40
+ const deliverablesCount = task.contract?.deliverables?.length ?? 0;
41
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: marginTop },
42
+ parentId && (react_1.default.createElement(ink_1.Text, null,
43
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, "Parent: "),
44
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, parentId))),
45
+ children.length > 0 && (react_1.default.createElement(ink_1.Text, null,
46
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, "Children: "),
47
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary },
48
+ "[",
49
+ children.map(c => c.id).join(', '),
50
+ "]"))),
51
+ hasAdrStatus && (react_1.default.createElement(ink_1.Text, null,
52
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, "Status: "),
53
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, adrStatus))),
54
+ hasContract && (react_1.default.createElement(react_1.default.Fragment, null,
55
+ (parentId || children.length > 0 || hasAdrStatus) && react_1.default.createElement(ink_1.Box, { marginTop: 1 }),
56
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim, bold: true }, "Contract"),
57
+ react_1.default.createElement(ink_1.Text, null,
58
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, "Status: "),
59
+ react_1.default.createElement(ink_1.Text, { color: getContractStatusColor(status), bold: true }, status)),
60
+ react_1.default.createElement(ink_1.Text, null,
61
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textDim }, "Deliverables: "),
62
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textSecondary }, deliverablesCount))))));
63
+ }
64
+ //# sourceMappingURL=TaskDetail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskDetail.js","sourceRoot":"","sources":["../../../src/tui/components/TaskDetail.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { Task } from '@brainfile/core';
3
+ export interface TaskListProps {
4
+ tasks: Task[];
5
+ allTasks?: Task[];
6
+ selectedIndex: number;
7
+ expandedIds: Set<string>;
8
+ viewportHeight: number;
9
+ termWidth: number;
10
+ }
11
+ export declare function TaskList({ tasks, allTasks, selectedIndex, expandedIds, viewportHeight, termWidth }: TaskListProps): React.JSX.Element;
12
+ //# 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;AAK5C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAClB,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,QAAa,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,aAAa,qBA0FtH"}
@@ -0,0 +1,75 @@
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.TaskList = TaskList;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_1 = require("ink");
9
+ const theme_js_1 = require("../theme.js");
10
+ const TaskCard_js_1 = require("./TaskCard.js");
11
+ const TaskCardMeasure_js_1 = require("./TaskCardMeasure.js");
12
+ function TaskList({ tasks, allTasks = [], selectedIndex, expandedIds, viewportHeight, termWidth }) {
13
+ const cardWidth = termWidth - 4;
14
+ const contentWidth = cardWidth - 6; // indicator (4) + right padding (2) = 6
15
+ // Calculate scroll offset - ensure selected task is visible
16
+ // Start from selected task and work backwards to find scroll position
17
+ let scrollOffset = 0;
18
+ let heightBeforeSelected = 0;
19
+ for (let i = 0; i < selectedIndex; i++) {
20
+ const task = tasks[i];
21
+ const isExpanded = expandedIds.has(task.id);
22
+ heightBeforeSelected += (0, TaskCardMeasure_js_1.getTaskCardHeight)(task, isExpanded, contentWidth, allTasks);
23
+ }
24
+ // If selected task would be off screen, adjust scroll
25
+ const selectedTask = tasks[selectedIndex];
26
+ const selectedHeight = selectedTask
27
+ ? (0, TaskCardMeasure_js_1.getTaskCardHeight)(selectedTask, expandedIds.has(selectedTask.id), contentWidth, allTasks)
28
+ : 5;
29
+ if (heightBeforeSelected + selectedHeight > viewportHeight) {
30
+ // Need to scroll - start from selected task
31
+ scrollOffset = selectedIndex;
32
+ }
33
+ else if (heightBeforeSelected > viewportHeight * 0.6) {
34
+ // Selected is in lower part of viewport, scroll to center it a bit
35
+ scrollOffset = Math.max(0, selectedIndex - 2);
36
+ }
37
+ // Build visible items starting from scrollOffset
38
+ const visibleItems = [];
39
+ let linesUsed = 0;
40
+ for (let i = scrollOffset; i < tasks.length; i++) {
41
+ const task = tasks[i];
42
+ const isSelected = i === selectedIndex;
43
+ const isExpanded = expandedIds.has(task.id);
44
+ const taskLines = (0, TaskCardMeasure_js_1.getTaskCardHeight)(task, isExpanded, contentWidth, allTasks);
45
+ // Always include the selected task, even if it's tall
46
+ if (isSelected) {
47
+ visibleItems.push({ task, isSelected, isExpanded });
48
+ linesUsed += taskLines;
49
+ continue;
50
+ }
51
+ // For non-selected tasks, check if they fit
52
+ if (linesUsed + taskLines <= viewportHeight) {
53
+ visibleItems.push({ task, isSelected, isExpanded });
54
+ linesUsed += taskLines;
55
+ }
56
+ else if (linesUsed > 0) {
57
+ // We have items and this one doesn't fit, stop
58
+ break;
59
+ }
60
+ }
61
+ // Calculate remaining empty lines to fill viewport
62
+ const emptyLines = Math.max(0, viewportHeight - linesUsed);
63
+ if (tasks.length === 0) {
64
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingLeft: 2, height: viewportHeight },
65
+ react_1.default.createElement(ink_1.Text, { color: theme_js_1.PALETTE.textMuted, dimColor: true }, "No tasks in this column"),
66
+ Array.from({ length: viewportHeight - 1 }).map((_, i) => (react_1.default.createElement(ink_1.Box, { key: `empty-${i}` },
67
+ react_1.default.createElement(ink_1.Text, null, ' '))))));
68
+ }
69
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingLeft: 1, height: viewportHeight },
70
+ visibleItems.map(({ task, isSelected, isExpanded }, index) => (react_1.default.createElement(react_1.default.Fragment, { key: task.id },
71
+ index > 0 && react_1.default.createElement(ink_1.Box, { height: 1 }),
72
+ react_1.default.createElement(TaskCard_js_1.TaskCard, { task: task, allTasks: allTasks, isSelected: isSelected, isExpanded: isExpanded, width: cardWidth, showContractBadge: true })))),
73
+ emptyLines > 0 && react_1.default.createElement(ink_1.Box, { height: emptyLines })));
74
+ }
75
+ //# sourceMappingURL=TaskList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskList.js","sourceRoot":"","sources":["../../../src/tui/components/TaskList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export { Header } from './Header.js';
2
+ export type { HeaderProps } from './Header.js';
3
+ export { ProgressBar } from './ProgressBar.js';
4
+ export type { ProgressBarProps } from './ProgressBar.js';
5
+ export { SearchBar } from './SearchBar.js';
6
+ export type { SearchBarProps } from './SearchBar.js';
7
+ export { ColumnTabs } from './ColumnTabs.js';
8
+ export type { ColumnTabsProps } from './ColumnTabs.js';
9
+ export { TaskCard } from './TaskCard.js';
10
+ export type { TaskCardProps } from './TaskCard.js';
11
+ export { TaskList } from './TaskList.js';
12
+ export type { TaskListProps } from './TaskList.js';
13
+ export { StackedTaskList, flattenTasks } from './StackedTaskList.js';
14
+ export type { StackedTaskListProps, FlatTask } from './StackedTaskList.js';
15
+ export { StatusBar } from './StatusBar.js';
16
+ export type { StatusBarProps } from './StatusBar.js';
17
+ export { HelpOverlay } from './HelpOverlay.js';
18
+ export type { HelpOverlayProps } from './HelpOverlay.js';
19
+ export { StatusMessageDisplay, MoveOverlay, DeleteConfirmOverlay, SubtaskOverlay, NewTaskOverlay, } from './Overlays.js';
20
+ export type { StatusMessageProps, MoveOverlayProps, DeleteConfirmOverlayProps, SubtaskOverlayProps, NewTaskOverlayProps, } from './Overlays.js';
21
+ export { MainPanelTabs } from './MainPanelTabs.js';
22
+ export type { MainPanelTabsProps } from './MainPanelTabs.js';
23
+ export { RulesPanel } from './RulesPanel.js';
24
+ export type { RulesPanelProps } from './RulesPanel.js';
25
+ export { LogsPanel } from './LogsPanel.js';
26
+ export type { LogsPanelProps } from './LogsPanel.js';
27
+ export { ManualBorder, BorderRow } from './ManualBorder.js';
28
+ export type { ManualBorderProps, BorderRowProps } from './ManualBorder.js';
29
+ export { measureTaskCard, getTaskCardHeight, wrapText, safeTruncate } from './TaskCardMeasure.js';
30
+ export type { TaskCardDimensions } from './TaskCardMeasure.js';
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE3E,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,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,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"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.safeTruncate = exports.wrapText = exports.getTaskCardHeight = exports.measureTaskCard = exports.BorderRow = exports.ManualBorder = exports.LogsPanel = exports.RulesPanel = exports.MainPanelTabs = exports.NewTaskOverlay = exports.SubtaskOverlay = exports.DeleteConfirmOverlay = exports.MoveOverlay = exports.StatusMessageDisplay = exports.HelpOverlay = exports.StatusBar = exports.flattenTasks = exports.StackedTaskList = exports.TaskList = exports.TaskCard = exports.ColumnTabs = exports.SearchBar = exports.ProgressBar = exports.Header = void 0;
4
+ var Header_js_1 = require("./Header.js");
5
+ Object.defineProperty(exports, "Header", { enumerable: true, get: function () { return Header_js_1.Header; } });
6
+ var ProgressBar_js_1 = require("./ProgressBar.js");
7
+ Object.defineProperty(exports, "ProgressBar", { enumerable: true, get: function () { return ProgressBar_js_1.ProgressBar; } });
8
+ var SearchBar_js_1 = require("./SearchBar.js");
9
+ Object.defineProperty(exports, "SearchBar", { enumerable: true, get: function () { return SearchBar_js_1.SearchBar; } });
10
+ var ColumnTabs_js_1 = require("./ColumnTabs.js");
11
+ Object.defineProperty(exports, "ColumnTabs", { enumerable: true, get: function () { return ColumnTabs_js_1.ColumnTabs; } });
12
+ var TaskCard_js_1 = require("./TaskCard.js");
13
+ Object.defineProperty(exports, "TaskCard", { enumerable: true, get: function () { return TaskCard_js_1.TaskCard; } });
14
+ var TaskList_js_1 = require("./TaskList.js");
15
+ Object.defineProperty(exports, "TaskList", { enumerable: true, get: function () { return TaskList_js_1.TaskList; } });
16
+ var StackedTaskList_js_1 = require("./StackedTaskList.js");
17
+ Object.defineProperty(exports, "StackedTaskList", { enumerable: true, get: function () { return StackedTaskList_js_1.StackedTaskList; } });
18
+ Object.defineProperty(exports, "flattenTasks", { enumerable: true, get: function () { return StackedTaskList_js_1.flattenTasks; } });
19
+ var StatusBar_js_1 = require("./StatusBar.js");
20
+ Object.defineProperty(exports, "StatusBar", { enumerable: true, get: function () { return StatusBar_js_1.StatusBar; } });
21
+ var HelpOverlay_js_1 = require("./HelpOverlay.js");
22
+ Object.defineProperty(exports, "HelpOverlay", { enumerable: true, get: function () { return HelpOverlay_js_1.HelpOverlay; } });
23
+ var Overlays_js_1 = require("./Overlays.js");
24
+ Object.defineProperty(exports, "StatusMessageDisplay", { enumerable: true, get: function () { return Overlays_js_1.StatusMessageDisplay; } });
25
+ Object.defineProperty(exports, "MoveOverlay", { enumerable: true, get: function () { return Overlays_js_1.MoveOverlay; } });
26
+ Object.defineProperty(exports, "DeleteConfirmOverlay", { enumerable: true, get: function () { return Overlays_js_1.DeleteConfirmOverlay; } });
27
+ Object.defineProperty(exports, "SubtaskOverlay", { enumerable: true, get: function () { return Overlays_js_1.SubtaskOverlay; } });
28
+ Object.defineProperty(exports, "NewTaskOverlay", { enumerable: true, get: function () { return Overlays_js_1.NewTaskOverlay; } });
29
+ var MainPanelTabs_js_1 = require("./MainPanelTabs.js");
30
+ Object.defineProperty(exports, "MainPanelTabs", { enumerable: true, get: function () { return MainPanelTabs_js_1.MainPanelTabs; } });
31
+ var RulesPanel_js_1 = require("./RulesPanel.js");
32
+ Object.defineProperty(exports, "RulesPanel", { enumerable: true, get: function () { return RulesPanel_js_1.RulesPanel; } });
33
+ var LogsPanel_js_1 = require("./LogsPanel.js");
34
+ Object.defineProperty(exports, "LogsPanel", { enumerable: true, get: function () { return LogsPanel_js_1.LogsPanel; } });
35
+ var ManualBorder_js_1 = require("./ManualBorder.js");
36
+ Object.defineProperty(exports, "ManualBorder", { enumerable: true, get: function () { return ManualBorder_js_1.ManualBorder; } });
37
+ Object.defineProperty(exports, "BorderRow", { enumerable: true, get: function () { return ManualBorder_js_1.BorderRow; } });
38
+ var TaskCardMeasure_js_1 = require("./TaskCardMeasure.js");
39
+ Object.defineProperty(exports, "measureTaskCard", { enumerable: true, get: function () { return TaskCardMeasure_js_1.measureTaskCard; } });
40
+ Object.defineProperty(exports, "getTaskCardHeight", { enumerable: true, get: function () { return TaskCardMeasure_js_1.getTaskCardHeight; } });
41
+ Object.defineProperty(exports, "wrapText", { enumerable: true, get: function () { return TaskCardMeasure_js_1.wrapText; } });
42
+ Object.defineProperty(exports, "safeTruncate", { enumerable: true, get: function () { return TaskCardMeasure_js_1.safeTruncate; } });
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,2DAAqE;AAA5D,qHAAA,eAAe,OAAA;AAAE,kHAAA,YAAY,OAAA;AAGtC,+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,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAGlB,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"}
@@ -0,0 +1,3 @@
1
+ export { useBrainfileLoader } from './useBrainfileLoader.js';
2
+ export { useKeyboardNavigation } from './useKeyboardNavigation.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useKeyboardNavigation = exports.useBrainfileLoader = void 0;
4
+ var useBrainfileLoader_js_1 = require("./useBrainfileLoader.js");
5
+ Object.defineProperty(exports, "useBrainfileLoader", { enumerable: true, get: function () { return useBrainfileLoader_js_1.useBrainfileLoader; } });
6
+ var useKeyboardNavigation_js_1 = require("./useKeyboardNavigation.js");
7
+ Object.defineProperty(exports, "useKeyboardNavigation", { enumerable: true, get: function () { return useKeyboardNavigation_js_1.useKeyboardNavigation; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tui/hooks/index.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAC3B,uEAAmE;AAA1D,iIAAA,qBAAqB,OAAA"}
@@ -0,0 +1,5 @@
1
+ import type { AppState } from '../types.js';
2
+ export declare function useBrainfileLoader(filePath: string, state: AppState, setState: React.Dispatch<React.SetStateAction<AppState>>): {
3
+ loadBrainfile: (forceRefresh?: any) => void;
4
+ };
5
+ //# sourceMappingURL=useBrainfileLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBrainfileLoader.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useBrainfileLoader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA6C5C,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;;EAqKzD"}