@gzeoneth/gov-tracker 0.2.1 → 0.3.0-beta.8f67631

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 (377) hide show
  1. package/README.md +129 -72
  2. package/dist/abis.d.ts +3 -0
  3. package/dist/abis.d.ts.map +1 -1
  4. package/dist/abis.js +30 -2
  5. package/dist/abis.js.map +1 -1
  6. package/dist/calldata/index.d.ts +1 -1
  7. package/dist/calldata/index.d.ts.map +1 -1
  8. package/dist/calldata/index.js.map +1 -1
  9. package/dist/calldata/parameter-decoder.d.ts.map +1 -1
  10. package/dist/calldata/parameter-decoder.js +8 -1
  11. package/dist/calldata/parameter-decoder.js.map +1 -1
  12. package/dist/calldata/signature-lookup.d.ts +17 -2
  13. package/dist/calldata/signature-lookup.d.ts.map +1 -1
  14. package/dist/calldata/signature-lookup.js +20 -2
  15. package/dist/calldata/signature-lookup.js.map +1 -1
  16. package/dist/cli/cli.d.ts +21 -0
  17. package/dist/cli/cli.d.ts.map +1 -0
  18. package/dist/cli/{monitor.js → cli.js} +372 -73
  19. package/dist/cli/cli.js.map +1 -0
  20. package/dist/cli/lib/cli.d.ts +54 -3
  21. package/dist/cli/lib/cli.d.ts.map +1 -1
  22. package/dist/cli/lib/cli.js +387 -78
  23. package/dist/cli/lib/cli.js.map +1 -1
  24. package/dist/cli/lib/concurrency.d.ts +20 -0
  25. package/dist/cli/lib/concurrency.d.ts.map +1 -0
  26. package/dist/cli/lib/concurrency.js +32 -0
  27. package/dist/cli/lib/concurrency.js.map +1 -0
  28. package/dist/cli/lib/json-state.d.ts +23 -0
  29. package/dist/cli/lib/json-state.d.ts.map +1 -1
  30. package/dist/cli/lib/json-state.js +51 -4
  31. package/dist/cli/lib/json-state.js.map +1 -1
  32. package/dist/cli/tui/App.d.ts +11 -0
  33. package/dist/cli/tui/App.d.ts.map +1 -0
  34. package/dist/cli/tui/App.js +123 -0
  35. package/dist/cli/tui/App.js.map +1 -0
  36. package/dist/cli/tui/components/CopyableText.d.ts +23 -0
  37. package/dist/cli/tui/components/CopyableText.d.ts.map +1 -0
  38. package/dist/cli/tui/components/CopyableText.js +49 -0
  39. package/dist/cli/tui/components/CopyableText.js.map +1 -0
  40. package/dist/cli/tui/components/Header.d.ts +20 -0
  41. package/dist/cli/tui/components/Header.d.ts.map +1 -0
  42. package/dist/cli/tui/components/Header.js +47 -0
  43. package/dist/cli/tui/components/Header.js.map +1 -0
  44. package/dist/cli/tui/components/KeyHelp.d.ts +19 -0
  45. package/dist/cli/tui/components/KeyHelp.d.ts.map +1 -0
  46. package/dist/cli/tui/components/KeyHelp.js +60 -0
  47. package/dist/cli/tui/components/KeyHelp.js.map +1 -0
  48. package/dist/cli/tui/components/ProposalRow.d.ts +11 -0
  49. package/dist/cli/tui/components/ProposalRow.d.ts.map +1 -0
  50. package/dist/cli/tui/components/ProposalRow.js +92 -0
  51. package/dist/cli/tui/components/ProposalRow.js.map +1 -0
  52. package/dist/cli/tui/components/ScrollIndicator.d.ts +19 -0
  53. package/dist/cli/tui/components/ScrollIndicator.d.ts.map +1 -0
  54. package/dist/cli/tui/components/ScrollIndicator.js +50 -0
  55. package/dist/cli/tui/components/ScrollIndicator.js.map +1 -0
  56. package/dist/cli/tui/components/SearchBar.d.ts +12 -0
  57. package/dist/cli/tui/components/SearchBar.d.ts.map +1 -0
  58. package/dist/cli/tui/components/SearchBar.js +36 -0
  59. package/dist/cli/tui/components/SearchBar.js.map +1 -0
  60. package/dist/cli/tui/components/Spinner.d.ts +10 -0
  61. package/dist/cli/tui/components/Spinner.d.ts.map +1 -0
  62. package/dist/cli/tui/components/Spinner.js +24 -0
  63. package/dist/cli/tui/components/Spinner.js.map +1 -0
  64. package/dist/cli/tui/components/StageProgress.d.ts +12 -0
  65. package/dist/cli/tui/components/StageProgress.d.ts.map +1 -0
  66. package/dist/cli/tui/components/StageProgress.js +41 -0
  67. package/dist/cli/tui/components/StageProgress.js.map +1 -0
  68. package/dist/cli/tui/components/StageRow.d.ts +12 -0
  69. package/dist/cli/tui/components/StageRow.d.ts.map +1 -0
  70. package/dist/cli/tui/components/StageRow.js +80 -0
  71. package/dist/cli/tui/components/StageRow.js.map +1 -0
  72. package/dist/cli/tui/components/StatusBadge.d.ts +12 -0
  73. package/dist/cli/tui/components/StatusBadge.d.ts.map +1 -0
  74. package/dist/cli/tui/components/StatusBadge.js +27 -0
  75. package/dist/cli/tui/components/StatusBadge.js.map +1 -0
  76. package/dist/cli/tui/components/ViewLayout.d.ts +22 -0
  77. package/dist/cli/tui/components/ViewLayout.d.ts.map +1 -0
  78. package/dist/cli/tui/components/ViewLayout.js +24 -0
  79. package/dist/cli/tui/components/ViewLayout.js.map +1 -0
  80. package/dist/cli/tui/components/VotingStats.d.ts +11 -0
  81. package/dist/cli/tui/components/VotingStats.d.ts.map +1 -0
  82. package/dist/cli/tui/components/VotingStats.js +87 -0
  83. package/dist/cli/tui/components/VotingStats.js.map +1 -0
  84. package/dist/cli/tui/hooks/index.d.ts +11 -0
  85. package/dist/cli/tui/hooks/index.d.ts.map +1 -0
  86. package/dist/cli/tui/hooks/index.js +18 -0
  87. package/dist/cli/tui/hooks/index.js.map +1 -0
  88. package/dist/cli/tui/hooks/useCache.d.ts +12 -0
  89. package/dist/cli/tui/hooks/useCache.d.ts.map +1 -0
  90. package/dist/cli/tui/hooks/useCache.js +52 -0
  91. package/dist/cli/tui/hooks/useCache.js.map +1 -0
  92. package/dist/cli/tui/hooks/useElectionData.d.ts +22 -0
  93. package/dist/cli/tui/hooks/useElectionData.d.ts.map +1 -0
  94. package/dist/cli/tui/hooks/useElectionData.js +133 -0
  95. package/dist/cli/tui/hooks/useElectionData.js.map +1 -0
  96. package/dist/cli/tui/hooks/useNavigation.d.ts +39 -0
  97. package/dist/cli/tui/hooks/useNavigation.d.ts.map +1 -0
  98. package/dist/cli/tui/hooks/useNavigation.js +173 -0
  99. package/dist/cli/tui/hooks/useNavigation.js.map +1 -0
  100. package/dist/cli/tui/hooks/useProposals.d.ts +10 -0
  101. package/dist/cli/tui/hooks/useProposals.d.ts.map +1 -0
  102. package/dist/cli/tui/hooks/useProposals.js +201 -0
  103. package/dist/cli/tui/hooks/useProposals.js.map +1 -0
  104. package/dist/cli/tui/hooks/useScrollableInput.d.ts +14 -0
  105. package/dist/cli/tui/hooks/useScrollableInput.d.ts.map +1 -0
  106. package/dist/cli/tui/hooks/useScrollableInput.js +44 -0
  107. package/dist/cli/tui/hooks/useScrollableInput.js.map +1 -0
  108. package/dist/cli/tui/hooks/useStageCalldata.d.ts +17 -0
  109. package/dist/cli/tui/hooks/useStageCalldata.d.ts.map +1 -0
  110. package/dist/cli/tui/hooks/useStageCalldata.js +77 -0
  111. package/dist/cli/tui/hooks/useStageCalldata.js.map +1 -0
  112. package/dist/cli/tui/index.d.ts +13 -0
  113. package/dist/cli/tui/index.d.ts.map +1 -0
  114. package/dist/cli/tui/index.js +96 -0
  115. package/dist/cli/tui/index.js.map +1 -0
  116. package/dist/cli/tui/ink-wrapper.d.ts +43 -0
  117. package/dist/cli/tui/ink-wrapper.d.ts.map +1 -0
  118. package/dist/cli/tui/ink-wrapper.js +41 -0
  119. package/dist/cli/tui/ink-wrapper.js.map +1 -0
  120. package/dist/cli/tui/types.d.ts +38 -0
  121. package/dist/cli/tui/types.d.ts.map +1 -0
  122. package/dist/cli/tui/types.js +6 -0
  123. package/dist/cli/tui/types.js.map +1 -0
  124. package/dist/cli/tui/utils/calldata-formatter.d.ts +7 -0
  125. package/dist/cli/tui/utils/calldata-formatter.d.ts.map +1 -0
  126. package/dist/cli/tui/utils/calldata-formatter.js +14 -0
  127. package/dist/cli/tui/utils/calldata-formatter.js.map +1 -0
  128. package/dist/cli/tui/utils/clipboard.d.ts +7 -0
  129. package/dist/cli/tui/utils/clipboard.d.ts.map +1 -0
  130. package/dist/cli/tui/utils/clipboard.js +46 -0
  131. package/dist/cli/tui/utils/clipboard.js.map +1 -0
  132. package/dist/cli/tui/utils/index.d.ts +16 -0
  133. package/dist/cli/tui/utils/index.d.ts.map +1 -0
  134. package/dist/cli/tui/utils/index.js +52 -0
  135. package/dist/cli/tui/utils/index.js.map +1 -0
  136. package/dist/cli/tui/utils/markdown-parser.d.ts +11 -0
  137. package/dist/cli/tui/utils/markdown-parser.d.ts.map +1 -0
  138. package/dist/cli/tui/utils/markdown-parser.js +77 -0
  139. package/dist/cli/tui/utils/markdown-parser.js.map +1 -0
  140. package/dist/cli/tui/utils/navigation.d.ts +17 -0
  141. package/dist/cli/tui/utils/navigation.d.ts.map +1 -0
  142. package/dist/cli/tui/utils/navigation.js +75 -0
  143. package/dist/cli/tui/utils/navigation.js.map +1 -0
  144. package/dist/cli/tui/utils/proposal-detail-helpers.d.ts +9 -0
  145. package/dist/cli/tui/utils/proposal-detail-helpers.d.ts.map +1 -0
  146. package/dist/cli/tui/utils/proposal-detail-helpers.js +21 -0
  147. package/dist/cli/tui/utils/proposal-detail-helpers.js.map +1 -0
  148. package/dist/cli/tui/utils/shortcuts.d.ts +17 -0
  149. package/dist/cli/tui/utils/shortcuts.d.ts.map +1 -0
  150. package/dist/cli/tui/utils/shortcuts.js +100 -0
  151. package/dist/cli/tui/utils/shortcuts.js.map +1 -0
  152. package/dist/cli/tui/utils/stage-formatter.d.ts +7 -0
  153. package/dist/cli/tui/utils/stage-formatter.d.ts.map +1 -0
  154. package/dist/cli/tui/utils/stage-formatter.js +14 -0
  155. package/dist/cli/tui/utils/stage-formatter.js.map +1 -0
  156. package/dist/cli/tui/utils/stage-status.d.ts +10 -0
  157. package/dist/cli/tui/utils/stage-status.d.ts.map +1 -0
  158. package/dist/cli/tui/utils/stage-status.js +64 -0
  159. package/dist/cli/tui/utils/stage-status.js.map +1 -0
  160. package/dist/cli/tui/utils/terminal.d.ts +18 -0
  161. package/dist/cli/tui/utils/terminal.d.ts.map +1 -0
  162. package/dist/cli/tui/utils/terminal.js +26 -0
  163. package/dist/cli/tui/utils/terminal.js.map +1 -0
  164. package/dist/cli/tui/utils/text.d.ts +7 -0
  165. package/dist/cli/tui/utils/text.d.ts.map +1 -0
  166. package/dist/cli/tui/utils/text.js +12 -0
  167. package/dist/cli/tui/utils/text.js.map +1 -0
  168. package/dist/cli/tui/utils/time.d.ts +19 -0
  169. package/dist/cli/tui/utils/time.d.ts.map +1 -0
  170. package/dist/cli/tui/utils/time.js +43 -0
  171. package/dist/cli/tui/utils/time.js.map +1 -0
  172. package/dist/cli/tui/views/CalldataView.d.ts +12 -0
  173. package/dist/cli/tui/views/CalldataView.d.ts.map +1 -0
  174. package/dist/cli/tui/views/CalldataView.js +110 -0
  175. package/dist/cli/tui/views/CalldataView.js.map +1 -0
  176. package/dist/cli/tui/views/DescriptionView.d.ts +12 -0
  177. package/dist/cli/tui/views/DescriptionView.d.ts.map +1 -0
  178. package/dist/cli/tui/views/DescriptionView.js +75 -0
  179. package/dist/cli/tui/views/DescriptionView.js.map +1 -0
  180. package/dist/cli/tui/views/ElectionView.d.ts +11 -0
  181. package/dist/cli/tui/views/ElectionView.d.ts.map +1 -0
  182. package/dist/cli/tui/views/ElectionView.js +193 -0
  183. package/dist/cli/tui/views/ElectionView.js.map +1 -0
  184. package/dist/cli/tui/views/HelpView.d.ts +10 -0
  185. package/dist/cli/tui/views/HelpView.d.ts.map +1 -0
  186. package/dist/cli/tui/views/HelpView.js +75 -0
  187. package/dist/cli/tui/views/HelpView.js.map +1 -0
  188. package/dist/cli/tui/views/ProposalDetail.d.ts +12 -0
  189. package/dist/cli/tui/views/ProposalDetail.d.ts.map +1 -0
  190. package/dist/cli/tui/views/ProposalDetail.js +103 -0
  191. package/dist/cli/tui/views/ProposalDetail.js.map +1 -0
  192. package/dist/cli/tui/views/ProposalList.d.ts +15 -0
  193. package/dist/cli/tui/views/ProposalList.d.ts.map +1 -0
  194. package/dist/cli/tui/views/ProposalList.js +154 -0
  195. package/dist/cli/tui/views/ProposalList.js.map +1 -0
  196. package/dist/cli/tui/views/SimulationView.d.ts +12 -0
  197. package/dist/cli/tui/views/SimulationView.d.ts.map +1 -0
  198. package/dist/cli/tui/views/SimulationView.js +110 -0
  199. package/dist/cli/tui/views/SimulationView.js.map +1 -0
  200. package/dist/cli/tui/views/StageView.d.ts +12 -0
  201. package/dist/cli/tui/views/StageView.d.ts.map +1 -0
  202. package/dist/cli/tui/views/StageView.js +109 -0
  203. package/dist/cli/tui/views/StageView.js.map +1 -0
  204. package/dist/cli/tui/views/registry.d.ts +18 -0
  205. package/dist/cli/tui/views/registry.d.ts.map +1 -0
  206. package/dist/cli/tui/views/registry.js +34 -0
  207. package/dist/cli/tui/views/registry.js.map +1 -0
  208. package/dist/constants.d.ts +44 -0
  209. package/dist/constants.d.ts.map +1 -1
  210. package/dist/constants.js +52 -1
  211. package/dist/constants.js.map +1 -1
  212. package/dist/data/bundled-cache.json +16408 -2561
  213. package/dist/deduplication.d.ts +132 -0
  214. package/dist/deduplication.d.ts.map +1 -0
  215. package/dist/deduplication.js +270 -0
  216. package/dist/deduplication.js.map +1 -0
  217. package/dist/discovery/governor-discovery.d.ts.map +1 -1
  218. package/dist/discovery/governor-discovery.js +52 -36
  219. package/dist/discovery/governor-discovery.js.map +1 -1
  220. package/dist/discovery/timelock-discovery.d.ts +15 -6
  221. package/dist/discovery/timelock-discovery.d.ts.map +1 -1
  222. package/dist/discovery/timelock-discovery.js +27 -11
  223. package/dist/discovery/timelock-discovery.js.map +1 -1
  224. package/dist/election/contracts.d.ts +8 -0
  225. package/dist/election/contracts.d.ts.map +1 -0
  226. package/dist/election/contracts.js +28 -0
  227. package/dist/election/contracts.js.map +1 -0
  228. package/dist/election/details.d.ts +15 -0
  229. package/dist/election/details.d.ts.map +1 -0
  230. package/dist/election/details.js +157 -0
  231. package/dist/election/details.js.map +1 -0
  232. package/dist/election/index.d.ts +11 -0
  233. package/dist/election/index.d.ts.map +1 -0
  234. package/dist/election/index.js +48 -0
  235. package/dist/election/index.js.map +1 -0
  236. package/dist/election/params.d.ts +13 -0
  237. package/dist/election/params.d.ts.map +1 -0
  238. package/dist/election/params.js +93 -0
  239. package/dist/election/params.js.map +1 -0
  240. package/dist/election/participants.d.ts +6 -0
  241. package/dist/election/participants.d.ts.map +1 -0
  242. package/dist/election/participants.js +104 -0
  243. package/dist/election/participants.js.map +1 -0
  244. package/dist/election/prepare.d.ts +10 -0
  245. package/dist/election/prepare.d.ts.map +1 -0
  246. package/dist/election/prepare.js +52 -0
  247. package/dist/election/prepare.js.map +1 -0
  248. package/dist/election/proposal-ids.d.ts +18 -0
  249. package/dist/election/proposal-ids.d.ts.map +1 -0
  250. package/dist/election/proposal-ids.js +77 -0
  251. package/dist/election/proposal-ids.js.map +1 -0
  252. package/dist/election/status.d.ts +15 -0
  253. package/dist/election/status.d.ts.map +1 -0
  254. package/dist/election/status.js +105 -0
  255. package/dist/election/status.js.map +1 -0
  256. package/dist/election/tracking.d.ts +28 -0
  257. package/dist/election/tracking.d.ts.map +1 -0
  258. package/dist/election/tracking.js +412 -0
  259. package/dist/election/tracking.js.map +1 -0
  260. package/dist/index.d.ts +32 -8
  261. package/dist/index.d.ts.map +1 -1
  262. package/dist/index.js +101 -9
  263. package/dist/index.js.map +1 -1
  264. package/dist/stages/builder.d.ts +4 -0
  265. package/dist/stages/builder.d.ts.map +1 -1
  266. package/dist/stages/builder.js +7 -0
  267. package/dist/stages/builder.js.map +1 -1
  268. package/dist/stages/l2-to-l1-message.d.ts +8 -1
  269. package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
  270. package/dist/stages/l2-to-l1-message.js +79 -13
  271. package/dist/stages/l2-to-l1-message.js.map +1 -1
  272. package/dist/stages/proposal-created.d.ts +1 -0
  273. package/dist/stages/proposal-created.d.ts.map +1 -1
  274. package/dist/stages/proposal-created.js +1 -0
  275. package/dist/stages/proposal-created.js.map +1 -1
  276. package/dist/stages/proposal-queued.d.ts +1 -0
  277. package/dist/stages/proposal-queued.d.ts.map +1 -1
  278. package/dist/stages/proposal-queued.js +3 -1
  279. package/dist/stages/proposal-queued.js.map +1 -1
  280. package/dist/stages/retryables.js +2 -2
  281. package/dist/stages/retryables.js.map +1 -1
  282. package/dist/stages/timelock.d.ts +3 -1
  283. package/dist/stages/timelock.d.ts.map +1 -1
  284. package/dist/stages/timelock.js +10 -4
  285. package/dist/stages/timelock.js.map +1 -1
  286. package/dist/stages/utils.d.ts +7 -8
  287. package/dist/stages/utils.d.ts.map +1 -1
  288. package/dist/stages/utils.js +40 -27
  289. package/dist/stages/utils.js.map +1 -1
  290. package/dist/stages/voting.d.ts.map +1 -1
  291. package/dist/stages/voting.js +5 -4
  292. package/dist/stages/voting.js.map +1 -1
  293. package/dist/tracker/cache.d.ts +10 -6
  294. package/dist/tracker/cache.d.ts.map +1 -1
  295. package/dist/tracker/cache.js +39 -15
  296. package/dist/tracker/cache.js.map +1 -1
  297. package/dist/tracker/checkpoint-helpers.d.ts +80 -0
  298. package/dist/tracker/checkpoint-helpers.d.ts.map +1 -0
  299. package/dist/tracker/checkpoint-helpers.js +200 -0
  300. package/dist/tracker/checkpoint-helpers.js.map +1 -0
  301. package/dist/tracker/discovery.d.ts +40 -9
  302. package/dist/tracker/discovery.d.ts.map +1 -1
  303. package/dist/tracker/discovery.js +152 -15
  304. package/dist/tracker/discovery.js.map +1 -1
  305. package/dist/tracker/pipeline.d.ts.map +1 -1
  306. package/dist/tracker/pipeline.js +26 -11
  307. package/dist/tracker/pipeline.js.map +1 -1
  308. package/dist/tracker/query.d.ts +1 -0
  309. package/dist/tracker/query.d.ts.map +1 -1
  310. package/dist/tracker/query.js +14 -61
  311. package/dist/tracker/query.js.map +1 -1
  312. package/dist/tracker/state.d.ts +0 -10
  313. package/dist/tracker/state.d.ts.map +1 -1
  314. package/dist/tracker/state.js +1 -28
  315. package/dist/tracker/state.js.map +1 -1
  316. package/dist/tracker.d.ts +100 -8
  317. package/dist/tracker.d.ts.map +1 -1
  318. package/dist/tracker.js +405 -42
  319. package/dist/tracker.js.map +1 -1
  320. package/dist/types/config.d.ts +49 -0
  321. package/dist/types/config.d.ts.map +1 -1
  322. package/dist/types/core.d.ts +4 -2
  323. package/dist/types/core.d.ts.map +1 -1
  324. package/dist/types/election.d.ts +144 -1
  325. package/dist/types/election.d.ts.map +1 -1
  326. package/dist/types/index.d.ts +5 -7
  327. package/dist/types/index.d.ts.map +1 -1
  328. package/dist/types/index.js +2 -3
  329. package/dist/types/index.js.map +1 -1
  330. package/dist/types/stages.d.ts +79 -1
  331. package/dist/types/stages.d.ts.map +1 -1
  332. package/dist/types/stages.js.map +1 -1
  333. package/dist/types/tracking.d.ts +34 -4
  334. package/dist/types/tracking.d.ts.map +1 -1
  335. package/dist/utils/block-cache.d.ts +50 -0
  336. package/dist/utils/block-cache.d.ts.map +1 -0
  337. package/dist/utils/block-cache.js +80 -0
  338. package/dist/utils/block-cache.js.map +1 -0
  339. package/dist/utils/formatters.d.ts +91 -0
  340. package/dist/utils/formatters.d.ts.map +1 -0
  341. package/dist/utils/formatters.js +327 -0
  342. package/dist/utils/formatters.js.map +1 -0
  343. package/dist/utils/multicall.d.ts +52 -0
  344. package/dist/utils/multicall.d.ts.map +1 -0
  345. package/dist/utils/multicall.js +75 -0
  346. package/dist/utils/multicall.js.map +1 -0
  347. package/dist/utils/rpc-utils.d.ts +7 -1
  348. package/dist/utils/rpc-utils.d.ts.map +1 -1
  349. package/dist/utils/rpc-utils.js +43 -29
  350. package/dist/utils/rpc-utils.js.map +1 -1
  351. package/dist/utils/salt-computation.d.ts.map +1 -1
  352. package/dist/utils/salt-computation.js +33 -7
  353. package/dist/utils/salt-computation.js.map +1 -1
  354. package/dist/utils/sanitize.d.ts +28 -0
  355. package/dist/utils/sanitize.d.ts.map +1 -0
  356. package/dist/utils/sanitize.js +55 -0
  357. package/dist/utils/sanitize.js.map +1 -0
  358. package/dist/utils/stage-metadata.d.ts +0 -20
  359. package/dist/utils/stage-metadata.d.ts.map +1 -1
  360. package/dist/utils/stage-metadata.js +29 -44
  361. package/dist/utils/stage-metadata.js.map +1 -1
  362. package/dist/utils/timing.d.ts +23 -3
  363. package/dist/utils/timing.d.ts.map +1 -1
  364. package/dist/utils/timing.js +71 -7
  365. package/dist/utils/timing.js.map +1 -1
  366. package/package.json +29 -16
  367. package/dist/cli/monitor.d.ts +0 -3
  368. package/dist/cli/monitor.d.ts.map +0 -1
  369. package/dist/cli/monitor.js.map +0 -1
  370. package/dist/election.d.ts +0 -172
  371. package/dist/election.d.ts.map +0 -1
  372. package/dist/election.js +0 -467
  373. package/dist/election.js.map +0 -1
  374. package/dist/types/cross-chain.d.ts +0 -24
  375. package/dist/types/cross-chain.d.ts.map +0 -1
  376. package/dist/types/cross-chain.js +0 -6
  377. package/dist/types/cross-chain.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/Header.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIlE,UAAU,WAAW;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,UAAU,GACX,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAsDlC"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /**
3
+ * Header component showing title and stats
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Header = Header;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const index_js_1 = require("../utils/index.js");
9
+ const registry_js_1 = require("../views/registry.js");
10
+ function Header({ view, filter, sort, stats, title, position, breadcrumb, }) {
11
+ const viewTitle = title ?? (0, registry_js_1.getViewTitle)(view);
12
+ const getRightSide = () => {
13
+ if (view === "list" && stats) {
14
+ const totalActive = stats.proposals.active + stats.timelocks.active + (stats.elections.total - stats.elections.complete);
15
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
16
+ stats.total,
17
+ " items | ",
18
+ totalActive,
19
+ " active"));
20
+ }
21
+ return null;
22
+ };
23
+ const renderBreadcrumb = () => {
24
+ if (!breadcrumb || breadcrumb.length === 0)
25
+ return null;
26
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null, breadcrumb.map((item, i) => (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { key: i },
27
+ i > 0 && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " \u203A "),
28
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: i === breadcrumb.length - 1 ? "cyan" : "gray" }, item))))));
29
+ };
30
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { borderStyle: "single", borderColor: "cyan", paddingX: 1 },
31
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexGrow: 1 },
32
+ breadcrumb && breadcrumb.length > 0 ? (renderBreadcrumb()) : (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true, color: "cyan" }, viewTitle)),
33
+ view === "list" && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
34
+ " ",
35
+ "[",
36
+ filter.toUpperCase(),
37
+ "] [",
38
+ sort ? index_js_1.SORT_LABELS_SHORT[sort] : "↓New",
39
+ "]")),
40
+ position && position.total > 0 && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" },
41
+ " ",
42
+ position.current,
43
+ "/",
44
+ position.total))),
45
+ getRightSide()));
46
+ }
47
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/Header.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AAkBH,wBA8DC;AA9ED,sDAAqD;AAGrD,gDAAsD;AACtD,sDAAoD;AAYpD,SAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,UAAU,GACE;IACZ,MAAM,SAAS,GAAG,KAAK,IAAI,IAAA,0BAAY,EAAC,IAAI,CAAC,CAAC;IAE9C,MAAM,YAAY,GAAG,GAA8B,EAAE;QACnD,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,WAAW,GACf,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACvG,OAAO,CACL,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;gBACf,KAAK,CAAC,KAAK;;gBAAW,WAAW;0BAC7B,CACR,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAA8B,EAAE;QACvD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,OAAO,CACL,qCAAC,oBAAG,QACD,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3B,qCAAC,qBAAI,IAAC,GAAG,EAAE,CAAC;YACT,CAAC,GAAG,CAAC,IAAI,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,eAAW;YACvC,qCAAC,qBAAI,IAAC,KAAK,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAG,IAAI,CAAQ,CACpE,CACR,CAAC,CACE,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,qCAAC,oBAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC;QACtD,qCAAC,oBAAG,IAAC,QAAQ,EAAE,CAAC;YACb,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACrC,gBAAgB,EAAE,CACnB,CAAC,CAAC,CAAC,CACF,qCAAC,qBAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,IACpB,SAAS,CACL,CACR;YACA,IAAI,KAAK,MAAM,IAAI,CAClB,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;gBACf,GAAG;;gBACF,MAAM,CAAC,WAAW,EAAE;;gBAAK,IAAI,CAAC,CAAC,CAAC,4BAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;oBAC7D,CACR;YACA,QAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,IAAI,CACjC,qCAAC,qBAAI,IAAC,KAAK,EAAC,QAAQ;;gBAAG,QAAQ,CAAC,OAAO;;gBAAG,QAAQ,CAAC,KAAK,CAAQ,CACjE,CACG;QACL,YAAY,EAAE,CACX,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Keyboard shortcuts help footer (cache-only mode)
3
+ */
4
+ import type { ViewType, FilterType, SortType } from "../types.js";
5
+ interface ContextInfo {
6
+ filter?: FilterType;
7
+ sort?: SortType;
8
+ isSearching?: boolean;
9
+ hasSearch?: boolean;
10
+ calldataActionCount?: number;
11
+ currentActionIndex?: number;
12
+ }
13
+ interface KeyHelpProps {
14
+ view: ViewType;
15
+ context?: ContextInfo;
16
+ }
17
+ export declare function KeyHelp({ view, context }: KeyHelpProps): React.ReactElement;
18
+ export {};
19
+ //# sourceMappingURL=KeyHelp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyHelp.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/KeyHelp.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIlE,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAuDD,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,YAAY,CAe3E"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * Keyboard shortcuts help footer (cache-only mode)
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KeyHelp = KeyHelp;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const shortcuts_js_1 = require("../utils/shortcuts.js");
9
+ const index_js_1 = require("../utils/index.js");
10
+ function ContextIndicators({ view, context }) {
11
+ if (view !== "list" || !context)
12
+ return null;
13
+ const indicators = [];
14
+ if (context.isSearching) {
15
+ indicators.push(ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { key: "search", color: "yellow" }, "[SEARCHING] "));
16
+ }
17
+ else if (context.hasSearch) {
18
+ indicators.push(ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { key: "search-active", marginRight: 1 },
19
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, "\u26B2 "),
20
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Esc:Clear")));
21
+ }
22
+ if (context.filter && context.filter !== "all") {
23
+ indicators.push(ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { key: "filter", marginRight: 1 },
24
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "magenta" }, context.filter.toUpperCase())));
25
+ }
26
+ if (context.sort && context.sort !== "newest") {
27
+ indicators.push(ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { key: "sort", marginRight: 1 },
28
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "blue" },
29
+ "\u2195",
30
+ index_js_1.SORT_LABELS[context.sort])));
31
+ }
32
+ if (indicators.length === 0)
33
+ return null;
34
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginRight: 2 },
35
+ indicators,
36
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "\u2502")));
37
+ }
38
+ function CalldataIndicator({ context }) {
39
+ if (!context?.calldataActionCount || context.calldataActionCount <= 1)
40
+ return null;
41
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginRight: 2 },
42
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" },
43
+ "Action ",
44
+ (context.currentActionIndex ?? 0) + 1,
45
+ "/",
46
+ context.calldataActionCount),
47
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " \u2502")));
48
+ }
49
+ function KeyHelp({ view, context }) {
50
+ const shortcuts = (0, shortcuts_js_1.getShortcutsForView)(view);
51
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { borderStyle: "single", borderColor: "gray", paddingX: 1 },
52
+ ink_wrapper_js_1.React.createElement(ContextIndicators, { view: view, context: context }),
53
+ view === "calldata" && ink_wrapper_js_1.React.createElement(CalldataIndicator, { context: context }),
54
+ shortcuts.map((s) => (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { key: s.key, marginRight: 2 },
55
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" }, s.key),
56
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
57
+ ": ",
58
+ s.action))))));
59
+ }
60
+ //# sourceMappingURL=KeyHelp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyHelp.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/KeyHelp.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Single proposal row in the list view
3
+ */
4
+ import type { ProposalListItem } from "../types.js";
5
+ interface ProposalRowProps {
6
+ item: ProposalListItem;
7
+ isSelected: boolean;
8
+ }
9
+ export declare function ProposalRow({ item, isSelected }: ProposalRowProps): React.ReactElement;
10
+ export {};
11
+ //# sourceMappingURL=ProposalRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProposalRow.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/ProposalRow.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,UAAU,gBAAgB;IACxB,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACrB;AAyCD,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CA2CtF"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * Single proposal row in the list view
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ProposalRow = ProposalRow;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const StatusBadge_js_1 = require("./StatusBadge.js");
9
+ const index_js_1 = require("../utils/index.js");
10
+ function getTypeLabel(item) {
11
+ if (item.type === "election")
12
+ return "EL";
13
+ if (item.type === "timelock")
14
+ return "TL";
15
+ if (item.proposalType === "CONSTITUTIONAL")
16
+ return "CO";
17
+ if (item.proposalType === "NON_CONSTITUTIONAL")
18
+ return "TR";
19
+ return "PR";
20
+ }
21
+ function getTypeColor(item) {
22
+ if (item.type === "election")
23
+ return "magenta";
24
+ if (item.type === "timelock")
25
+ return "blue";
26
+ if (item.proposalType === "CONSTITUTIONAL")
27
+ return "cyan";
28
+ return "green";
29
+ }
30
+ function formatAge(timestamp) {
31
+ if (timestamp === null)
32
+ return "--";
33
+ const diffMs = Date.now() - timestamp;
34
+ const diffDays = Math.floor(diffMs / index_js_1.MS_PER_DAY);
35
+ if (diffDays < 0)
36
+ return "future";
37
+ if (diffDays === 0)
38
+ return "today";
39
+ if (diffDays === 1)
40
+ return "1d ago";
41
+ if (diffDays < 30)
42
+ return `${diffDays}d ago`;
43
+ if (diffDays < 365)
44
+ return `${Math.floor(diffDays / 30)}mo ago`;
45
+ return `${Math.floor(diffDays / 365)}y ago`;
46
+ }
47
+ function renderProgressBar(progress) {
48
+ const filled = Math.max(0, Math.min(progress.current, progress.total));
49
+ const empty = Math.max(0, progress.total - filled);
50
+ return "█".repeat(filled) + "░".repeat(empty);
51
+ }
52
+ const FIXED_COLS_WIDTH = 1 + 4 + 1 + 1 + 8 + 1 + 1 + 1 + 7 + 2;
53
+ const SAFETY_MARGIN = 4;
54
+ const MIN_COMPACT_WIDTH = 50;
55
+ function ProposalRow({ item, isSelected }) {
56
+ const typeLabel = getTypeLabel(item);
57
+ const typeColor = getTypeColor(item);
58
+ const age = formatAge(item.createdAt);
59
+ const progress = (0, index_js_1.parseProgress)(item.stageProgress);
60
+ const progressBar = progress ? renderProgressBar(progress) : null;
61
+ const { width } = (0, index_js_1.getTerminalSize)();
62
+ const isNarrow = width < MIN_COMPACT_WIDTH;
63
+ // In narrow mode, hide age and progress columns to prevent overflow
64
+ const effectiveFixedWidth = isNarrow ? 1 + 4 + 1 + 1 + 1 + 2 : FIXED_COLS_WIDTH;
65
+ const maxTitleWidth = Math.max(10, width - effectiveFixedWidth - SAFETY_MARGIN);
66
+ const title = (0, index_js_1.truncate)(item.title, maxTitleWidth);
67
+ const titlePadded = title.padEnd(maxTitleWidth);
68
+ const progressDisplay = progressBar ?? item.stageProgress;
69
+ const progressColor = progressBar
70
+ ? item.status === "complete"
71
+ ? "green"
72
+ : "yellow"
73
+ : "gray";
74
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
75
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined, bold: isSelected }, isSelected ? ">" : " "),
76
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: typeColor },
77
+ "[",
78
+ typeLabel,
79
+ "]"),
80
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, " "),
81
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined }, titlePadded),
82
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, " "),
83
+ !isNarrow && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.React.Fragment, null,
84
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, age.padStart(8)),
85
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, " "))),
86
+ ink_wrapper_js_1.React.createElement(StatusBadge_js_1.StatusBadge, { status: item.status, compact: true }),
87
+ !isNarrow && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: progressColor },
88
+ " ",
89
+ progressDisplay.padEnd(7)),
90
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, item.hasExecutable ? " ▶" : " ")));
91
+ }
92
+ //# sourceMappingURL=ProposalRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProposalRow.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/ProposalRow.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Scroll indicator component for views with scrollable content
3
+ */
4
+ interface ScrollIndicatorProps {
5
+ scrollOffset: number;
6
+ visibleRows: number;
7
+ totalItems: number;
8
+ unit?: string;
9
+ }
10
+ export declare function ScrollIndicatorTop({ scrollOffset, unit, }: Pick<ScrollIndicatorProps, "scrollOffset" | "unit">): React.ReactElement | null;
11
+ export declare function ScrollIndicatorBottom({ scrollOffset, visibleRows, totalItems, unit, }: ScrollIndicatorProps): React.ReactElement | null;
12
+ interface ScrollPositionProps {
13
+ scrollOffset: number;
14
+ visibleRows: number;
15
+ totalItems: number;
16
+ }
17
+ export declare function ScrollPosition({ scrollOffset, visibleRows, totalItems, }: ScrollPositionProps): React.ReactElement | null;
18
+ export {};
19
+ //# sourceMappingURL=ScrollIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollIndicator.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/ScrollIndicator.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAIH,UAAU,oBAAoB;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,kBAAkB,CAAC,EACjC,YAAY,EACZ,IAAc,GACf,EAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAUjF;AAED,wBAAgB,qBAAqB,CAAC,EACpC,YAAY,EACZ,WAAW,EACX,UAAU,EACV,IAAc,GACf,EAAE,oBAAoB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAWlD;AAED,UAAU,mBAAmB;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC7B,YAAY,EACZ,WAAW,EACX,UAAU,GACX,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAkBjD"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Scroll indicator component for views with scrollable content
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ScrollIndicatorTop = ScrollIndicatorTop;
7
+ exports.ScrollIndicatorBottom = ScrollIndicatorBottom;
8
+ exports.ScrollPosition = ScrollPosition;
9
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
10
+ function ScrollIndicatorTop({ scrollOffset, unit = "items", }) {
11
+ if (scrollOffset <= 0)
12
+ return null;
13
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
14
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "\u2191 "),
15
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, scrollOffset),
16
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
17
+ " ",
18
+ unit,
19
+ " above")));
20
+ }
21
+ function ScrollIndicatorBottom({ scrollOffset, visibleRows, totalItems, unit = "items", }) {
22
+ const remaining = totalItems - scrollOffset - visibleRows;
23
+ if (remaining <= 0)
24
+ return null;
25
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
26
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "\u2193 "),
27
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, remaining),
28
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
29
+ " ",
30
+ unit,
31
+ " below")));
32
+ }
33
+ function ScrollPosition({ scrollOffset, visibleRows, totalItems, }) {
34
+ if (totalItems <= visibleRows)
35
+ return null;
36
+ const current = Math.min(scrollOffset + visibleRows, totalItems);
37
+ const percentage = Math.round((current / totalItems) * 100);
38
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
39
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "["),
40
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" }, scrollOffset + 1),
41
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "-"),
42
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" }, current),
43
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "/"),
44
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, totalItems),
45
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "] "),
46
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: percentage === 100 ? "green" : "yellow" },
47
+ percentage,
48
+ "%")));
49
+ }
50
+ //# sourceMappingURL=ScrollIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollIndicator.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/ScrollIndicator.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AAWH,gDAaC;AAED,sDAgBC;AAQD,wCAsBC;AAtED,sDAAqD;AASrD,SAAgB,kBAAkB,CAAC,EACjC,YAAY,EACZ,IAAI,GAAG,OAAO,GACsC;IACpD,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,CACL,qCAAC,oBAAG;QACF,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,cAAU;QAC5B,qCAAC,qBAAI,IAAC,KAAK,EAAC,QAAQ,IAAE,YAAY,CAAQ;QAC1C,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;;YAAG,IAAI;qBAAc,CACnC,CACP,CAAC;AACJ,CAAC;AAED,SAAgB,qBAAqB,CAAC,EACpC,YAAY,EACZ,WAAW,EACX,UAAU,EACV,IAAI,GAAG,OAAO,GACO;IACrB,MAAM,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC;IAC1D,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,CACL,qCAAC,oBAAG;QACF,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,cAAU;QAC5B,qCAAC,qBAAI,IAAC,KAAK,EAAC,QAAQ,IAAE,SAAS,CAAQ;QACvC,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;;YAAG,IAAI;qBAAc,CACnC,CACP,CAAC;AACJ,CAAC;AAQD,SAAgB,cAAc,CAAC,EAC7B,YAAY,EACZ,WAAW,EACX,UAAU,GACU;IACpB,IAAI,UAAU,IAAI,WAAW;QAAE,OAAO,IAAI,CAAC;IAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,WAAW,EAAE,UAAU,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;IAE5D,OAAO,CACL,qCAAC,oBAAG;QACF,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,QAAS;QAC3B,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IAAE,YAAY,GAAG,CAAC,CAAQ;QAC5C,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,QAAS;QAC3B,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IAAE,OAAO,CAAQ;QACnC,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,QAAS;QAC3B,qCAAC,qBAAI,QAAE,UAAU,CAAQ;QACzB,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,SAAU;QAC5B,qCAAC,qBAAI,IAAC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YAAG,UAAU;gBAAS,CACtE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Search bar component with visual feedback
3
+ */
4
+ interface SearchBarProps {
5
+ query: string;
6
+ isActive: boolean;
7
+ resultCount?: number;
8
+ placeholder?: string;
9
+ }
10
+ export declare function SearchBar({ query, isActive, resultCount, placeholder, }: SearchBarProps): React.ReactElement | null;
11
+ export {};
12
+ //# sourceMappingURL=SearchBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchBar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/SearchBar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAIH,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,WAAiC,GAClC,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA2B5C"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Search bar component with visual feedback
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SearchBar = SearchBar;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ function SearchBar({ query, isActive, resultCount, placeholder = "Type to search...", }) {
9
+ if (!isActive && !query) {
10
+ return null;
11
+ }
12
+ if (isActive) {
13
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
14
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan", bold: true }, "/ "),
15
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, query),
16
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan", inverse: true }, " "),
17
+ !query && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
18
+ " ",
19
+ placeholder),
20
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " (Enter to confirm, Esc to cancel)")));
21
+ }
22
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
23
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Filter: "),
24
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" },
25
+ "\"",
26
+ query,
27
+ "\""),
28
+ resultCount !== undefined && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
29
+ " (",
30
+ resultCount,
31
+ " result",
32
+ resultCount !== 1 ? "s" : "",
33
+ ")")),
34
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " (/ to search, Esc to clear)")));
35
+ }
36
+ //# sourceMappingURL=SearchBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchBar.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/SearchBar.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AAWH,8BAgCC;AAzCD,sDAAqD;AASrD,SAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,WAAW,GAAG,mBAAmB,GAClB;IACf,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,qCAAC,oBAAG,IAAC,YAAY,EAAE,CAAC;YAClB,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,eAAU;YACjC,qCAAC,qBAAI,QAAE,KAAK,CAAQ;YACpB,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,EAAC,OAAO,cAAS;YAClC,CAAC,KAAK,IAAI,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;;gBAAG,WAAW,CAAQ;YACnD,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,yCAA0C,CACxD,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,qCAAC,oBAAG,IAAC,YAAY,EAAE,CAAC;QAClB,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,eAAgB;QAClC,qCAAC,qBAAI,IAAC,KAAK,EAAC,QAAQ;;YAAG,KAAK;iBAAS;QACpC,WAAW,KAAK,SAAS,IAAI,CAC5B,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;;YAAI,WAAW;;YAAS,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAAS,CAChF;QACD,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,mCAAoC,CAClD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Animated spinner component for loading states
3
+ */
4
+ interface SpinnerProps {
5
+ text?: string;
6
+ color?: string;
7
+ }
8
+ export declare function Spinner({ text, color }: SpinnerProps): React.ReactElement;
9
+ export {};
10
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/Spinner.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAIH,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,KAAgB,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,YAAY,CAiBpF"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * Animated spinner component for loading states
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Spinner = Spinner;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
9
+ const FRAME_INTERVAL = 80;
10
+ function Spinner({ text, color = "yellow" }) {
11
+ const [frameIndex, setFrameIndex] = (0, ink_wrapper_js_1.useState)(0);
12
+ (0, ink_wrapper_js_1.useEffect)(() => {
13
+ const timer = setInterval(() => {
14
+ setFrameIndex((prev) => (prev + 1) % SPINNER_FRAMES.length);
15
+ }, FRAME_INTERVAL);
16
+ return () => clearInterval(timer);
17
+ }, []);
18
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null,
19
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: color }, SPINNER_FRAMES[frameIndex]),
20
+ text ? ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
21
+ " ",
22
+ text) : null));
23
+ }
24
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/Spinner.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AAYH,0BAiBC;AA3BD,sDAAqE;AAOrE,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1E,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,SAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,QAAQ,EAAgB;IAC9D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,yBAAQ,EAAC,CAAC,CAAC,CAAC;IAEhD,IAAA,0BAAS,EAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9D,CAAC,EAAE,cAAc,CAAC,CAAC;QAEnB,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,qCAAC,qBAAI;QACH,qCAAC,qBAAI,IAAC,KAAK,EAAE,KAAK,IAAG,cAAc,CAAC,UAAU,CAAC,CAAQ;QACtD,IAAI,CAAC,CAAC,CAAC,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;;YAAG,IAAI,CAAQ,CAAC,CAAC,CAAC,IAAI,CAC3C,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Stage progress indicator with number key hints
3
+ */
4
+ import type { TrackedStage } from "../../../types/index.js";
5
+ interface StageProgressProps {
6
+ stages: TrackedStage[];
7
+ currentIndex: number;
8
+ totalStages?: number;
9
+ }
10
+ export declare function StageProgress({ stages, currentIndex, totalStages, }: StageProgressProps): React.ReactElement;
11
+ export {};
12
+ //# sourceMappingURL=StageProgress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StageProgress.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/StageProgress.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,UAAU,kBAAkB;IAC1B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,YAAY,EACZ,WAAe,GAChB,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CA+CzC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /**
3
+ * Stage progress indicator with number key hints
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StageProgress = StageProgress;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const index_js_1 = require("../utils/index.js");
9
+ function StageProgress({ stages, currentIndex, totalStages = 7, }) {
10
+ const completedCount = stages.filter(s => s.status === "COMPLETED").length;
11
+ const readyCount = stages.filter(s => s.status === "READY").length;
12
+ const pendingCount = stages.filter(s => s.status === "PENDING").length;
13
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
14
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
15
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Progress: "),
16
+ index_js_1.STAGE_TYPES.map((type, i) => {
17
+ const stage = stages.find(s => s.type === type);
18
+ const icon = (0, index_js_1.getStatusIcon)(stage);
19
+ const color = (0, index_js_1.getStatusColor)(stage);
20
+ const isSelected = i === currentIndex;
21
+ const keyNum = i + 1;
22
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { key: type },
23
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : color, bold: isSelected },
24
+ isSelected ? "[" : " ",
25
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "white" : "gray" }, keyNum),
26
+ icon,
27
+ isSelected ? "]" : " "),
28
+ i < totalStages - 1 && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "\u2500")));
29
+ }),
30
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " "),
31
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, completedCount),
32
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "/"),
33
+ readyCount > 0 && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.React.Fragment, null,
34
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" }, readyCount),
35
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "/"))),
36
+ pendingCount > 0 && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.React.Fragment, null,
37
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, pendingCount),
38
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "/"))),
39
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, totalStages))));
40
+ }
41
+ //# sourceMappingURL=StageProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StageProgress.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/StageProgress.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AAYH,sCAmDC;AA7DD,sDAAqD;AAErD,gDAA+E;AAQ/E,SAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,YAAY,EACZ,WAAW,GAAG,CAAC,GACI;IACnB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IACnE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAEvE,OAAO,CACL,qCAAC,oBAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,qCAAC,oBAAG,IAAC,YAAY,EAAE,CAAC;YAClB,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,iBAAkB;YACnC,sBAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,IAAA,wBAAa,EAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,KAAK,GAAG,IAAA,yBAAc,EAAC,KAAK,CAAC,CAAC;gBACpC,MAAM,UAAU,GAAG,CAAC,KAAK,YAAY,CAAC;gBACtC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;gBAErB,OAAO,CACL,qCAAC,oBAAG,IAAC,GAAG,EAAE,IAAI;oBACZ,qCAAC,qBAAI,IAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU;wBACvD,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;wBACvB,qCAAC,qBAAI,IAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAG,MAAM,CAAQ;wBAC1D,IAAI;wBACJ,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAClB;oBACN,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,aAAS,CAC/C,CACP,CAAC;YACJ,CAAC,CAAC;YACF,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,QAAS;YAC3B,qCAAC,qBAAI,IAAC,KAAK,EAAC,OAAO,IAAE,cAAc,CAAQ;YAC3C,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,QAAS;YAC1B,UAAU,GAAG,CAAC,IAAI,CACjB;gBACE,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IAAE,UAAU,CAAQ;gBACtC,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,QAAS,CAC1B,CACJ;YACA,YAAY,GAAG,CAAC,IAAI,CACnB;gBACE,qCAAC,qBAAI,IAAC,KAAK,EAAC,QAAQ,IAAE,YAAY,CAAQ;gBAC1C,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,QAAS,CAC1B,CACJ;YACD,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IAAE,WAAW,CAAQ,CACnC,CACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Single stage row component for proposal detail view
3
+ */
4
+ import type { TrackedStage } from "../../../types/index.js";
5
+ interface StageRowProps {
6
+ stage: TrackedStage;
7
+ index: number;
8
+ isSelected: boolean;
9
+ }
10
+ export declare function StageRow({ stage, index, isSelected }: StageRowProps): React.ReactElement;
11
+ export {};
12
+ //# sourceMappingURL=StageRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StageRow.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/StageRow.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAK5D,UAAU,aAAa;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAsED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CAwBxF"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * Single stage row component for proposal detail view
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StageRow = StageRow;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const stage_metadata_js_1 = require("../../../utils/stage-metadata.js");
9
+ const StatusBadge_js_1 = require("./StatusBadge.js");
10
+ const index_js_1 = require("../utils/index.js");
11
+ function formatTiming(stage) {
12
+ if (stage.timing?.eta) {
13
+ const etaMs = stage.timing.eta * 1000;
14
+ const diff = etaMs - Date.now();
15
+ if (diff > 0) {
16
+ const result = (0, index_js_1.formatDurationMs)(diff);
17
+ return { ...result, isCountdown: true };
18
+ }
19
+ return { text: new Date(etaMs).toLocaleDateString(), color: "gray", isCountdown: false };
20
+ }
21
+ const tx = stage.transactions[0];
22
+ if (tx?.timestamp) {
23
+ const date = new Date(tx.timestamp * 1000);
24
+ const result = (0, index_js_1.formatElapsedMs)(Date.now() - tx.timestamp * 1000, date);
25
+ return { ...result, isCountdown: false };
26
+ }
27
+ return null;
28
+ }
29
+ function getStageExtra(stage) {
30
+ if (stage.type === "VOTING_ACTIVE" && stage.data) {
31
+ const data = stage.data;
32
+ if (data.proposalState) {
33
+ return data.proposalState;
34
+ }
35
+ }
36
+ if (stage.type === "RETRYABLE_EXECUTED" && stage.data) {
37
+ const data = stage.data;
38
+ if (data.ticketCount !== undefined) {
39
+ const redeemed = data.redeemedCount ?? 0;
40
+ return `${redeemed}/${data.ticketCount} tickets`;
41
+ }
42
+ }
43
+ if ((stage.type === "L2_TIMELOCK" || stage.type === "L1_TIMELOCK") &&
44
+ stage.data) {
45
+ const data = stage.data;
46
+ if (data.state)
47
+ return data.state;
48
+ }
49
+ if (stage.type === "L2_TO_L1_MESSAGE" && stage.data) {
50
+ const data = stage.data;
51
+ if (data.messageCount) {
52
+ const status = data.status ?? "pending";
53
+ return `${data.messageCount} msg${data.messageCount > 1 ? "s" : ""} (${status})`;
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ function StageRow({ stage, index, isSelected }) {
59
+ const title = (0, stage_metadata_js_1.formatStageTitle)(stage.type);
60
+ const timing = formatTiming(stage);
61
+ const extra = getStageExtra(stage);
62
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
63
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined, bold: isSelected },
64
+ isSelected ? ">" : " ",
65
+ " ",
66
+ index + 1,
67
+ ".",
68
+ " "),
69
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined, bold: isSelected }, title.padEnd(18)),
70
+ ink_wrapper_js_1.React.createElement(StatusBadge_js_1.StatusBadge, { status: stage.status, padded: true }),
71
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, stage.chain.padEnd(10)),
72
+ timing ? (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: timing.color },
73
+ timing.isCountdown && "⏱ ",
74
+ timing.text.padEnd(timing.isCountdown ? 10 : 12))) : (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " ".repeat(12))),
75
+ extra && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
76
+ "[",
77
+ extra,
78
+ "]")));
79
+ }
80
+ //# sourceMappingURL=StageRow.js.map