@gzeoneth/gov-tracker 0.2.1-1 → 0.2.1-alpha.cli-preview.375ef6c

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 (250) hide show
  1. package/README.md +91 -68
  2. package/dist/calldata/index.d.ts +1 -1
  3. package/dist/calldata/index.d.ts.map +1 -1
  4. package/dist/calldata/index.js.map +1 -1
  5. package/dist/calldata/parameter-decoder.d.ts.map +1 -1
  6. package/dist/calldata/parameter-decoder.js +8 -1
  7. package/dist/calldata/parameter-decoder.js.map +1 -1
  8. package/dist/calldata/signature-lookup.d.ts +17 -2
  9. package/dist/calldata/signature-lookup.d.ts.map +1 -1
  10. package/dist/calldata/signature-lookup.js +20 -2
  11. package/dist/calldata/signature-lookup.js.map +1 -1
  12. package/dist/cli/cli.d.ts +21 -0
  13. package/dist/cli/cli.d.ts.map +1 -0
  14. package/dist/cli/{monitor.js → cli.js} +148 -74
  15. package/dist/cli/cli.js.map +1 -0
  16. package/dist/cli/lib/cli.d.ts +6 -1
  17. package/dist/cli/lib/cli.d.ts.map +1 -1
  18. package/dist/cli/lib/cli.js +58 -20
  19. package/dist/cli/lib/cli.js.map +1 -1
  20. package/dist/cli/lib/concurrency.d.ts +20 -0
  21. package/dist/cli/lib/concurrency.d.ts.map +1 -0
  22. package/dist/cli/lib/concurrency.js +32 -0
  23. package/dist/cli/lib/concurrency.js.map +1 -0
  24. package/dist/cli/tui/App.d.ts +13 -0
  25. package/dist/cli/tui/App.d.ts.map +1 -0
  26. package/dist/cli/tui/App.js +146 -0
  27. package/dist/cli/tui/App.js.map +1 -0
  28. package/dist/cli/tui/components/CollapsibleSection.d.ts +20 -0
  29. package/dist/cli/tui/components/CollapsibleSection.d.ts.map +1 -0
  30. package/dist/cli/tui/components/CollapsibleSection.js +29 -0
  31. package/dist/cli/tui/components/CollapsibleSection.js.map +1 -0
  32. package/dist/cli/tui/components/ConfirmDialog.d.ts +14 -0
  33. package/dist/cli/tui/components/ConfirmDialog.d.ts.map +1 -0
  34. package/dist/cli/tui/components/ConfirmDialog.js +29 -0
  35. package/dist/cli/tui/components/ConfirmDialog.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/EmptyState.d.ts +11 -0
  41. package/dist/cli/tui/components/EmptyState.d.ts.map +1 -0
  42. package/dist/cli/tui/components/EmptyState.js +34 -0
  43. package/dist/cli/tui/components/EmptyState.js.map +1 -0
  44. package/dist/cli/tui/components/ErrorDisplay.d.ts +17 -0
  45. package/dist/cli/tui/components/ErrorDisplay.d.ts.map +1 -0
  46. package/dist/cli/tui/components/ErrorDisplay.js +66 -0
  47. package/dist/cli/tui/components/ErrorDisplay.js.map +1 -0
  48. package/dist/cli/tui/components/Header.d.ts +22 -0
  49. package/dist/cli/tui/components/Header.d.ts.map +1 -0
  50. package/dist/cli/tui/components/Header.js +73 -0
  51. package/dist/cli/tui/components/Header.js.map +1 -0
  52. package/dist/cli/tui/components/KeyHelp.d.ts +20 -0
  53. package/dist/cli/tui/components/KeyHelp.d.ts.map +1 -0
  54. package/dist/cli/tui/components/KeyHelp.js +136 -0
  55. package/dist/cli/tui/components/KeyHelp.js.map +1 -0
  56. package/dist/cli/tui/components/ProposalRow.d.ts +11 -0
  57. package/dist/cli/tui/components/ProposalRow.d.ts.map +1 -0
  58. package/dist/cli/tui/components/ProposalRow.js +106 -0
  59. package/dist/cli/tui/components/ProposalRow.js.map +1 -0
  60. package/dist/cli/tui/components/ScrollIndicator.d.ts +26 -0
  61. package/dist/cli/tui/components/ScrollIndicator.d.ts.map +1 -0
  62. package/dist/cli/tui/components/ScrollIndicator.js +59 -0
  63. package/dist/cli/tui/components/ScrollIndicator.js.map +1 -0
  64. package/dist/cli/tui/components/SearchBar.d.ts +12 -0
  65. package/dist/cli/tui/components/SearchBar.d.ts.map +1 -0
  66. package/dist/cli/tui/components/SearchBar.js +36 -0
  67. package/dist/cli/tui/components/SearchBar.js.map +1 -0
  68. package/dist/cli/tui/components/Skeleton.d.ts +22 -0
  69. package/dist/cli/tui/components/Skeleton.d.ts.map +1 -0
  70. package/dist/cli/tui/components/Skeleton.js +35 -0
  71. package/dist/cli/tui/components/Skeleton.js.map +1 -0
  72. package/dist/cli/tui/components/Spinner.d.ts +10 -0
  73. package/dist/cli/tui/components/Spinner.d.ts.map +1 -0
  74. package/dist/cli/tui/components/Spinner.js +24 -0
  75. package/dist/cli/tui/components/Spinner.js.map +1 -0
  76. package/dist/cli/tui/components/StageProgress.d.ts +12 -0
  77. package/dist/cli/tui/components/StageProgress.d.ts.map +1 -0
  78. package/dist/cli/tui/components/StageProgress.js +72 -0
  79. package/dist/cli/tui/components/StageProgress.js.map +1 -0
  80. package/dist/cli/tui/components/StageRow.d.ts +12 -0
  81. package/dist/cli/tui/components/StageRow.d.ts.map +1 -0
  82. package/dist/cli/tui/components/StageRow.js +106 -0
  83. package/dist/cli/tui/components/StageRow.js.map +1 -0
  84. package/dist/cli/tui/components/StatusBadge.d.ts +12 -0
  85. package/dist/cli/tui/components/StatusBadge.d.ts.map +1 -0
  86. package/dist/cli/tui/components/StatusBadge.js +27 -0
  87. package/dist/cli/tui/components/StatusBadge.js.map +1 -0
  88. package/dist/cli/tui/components/StatusBar.d.ts +12 -0
  89. package/dist/cli/tui/components/StatusBar.d.ts.map +1 -0
  90. package/dist/cli/tui/components/StatusBar.js +14 -0
  91. package/dist/cli/tui/components/StatusBar.js.map +1 -0
  92. package/dist/cli/tui/components/Timeline.d.ts +12 -0
  93. package/dist/cli/tui/components/Timeline.d.ts.map +1 -0
  94. package/dist/cli/tui/components/Timeline.js +91 -0
  95. package/dist/cli/tui/components/Timeline.js.map +1 -0
  96. package/dist/cli/tui/components/Toast.d.ts +13 -0
  97. package/dist/cli/tui/components/Toast.d.ts.map +1 -0
  98. package/dist/cli/tui/components/Toast.js +35 -0
  99. package/dist/cli/tui/components/Toast.js.map +1 -0
  100. package/dist/cli/tui/components/TrackingProgress.d.ts +24 -0
  101. package/dist/cli/tui/components/TrackingProgress.d.ts.map +1 -0
  102. package/dist/cli/tui/components/TrackingProgress.js +82 -0
  103. package/dist/cli/tui/components/TrackingProgress.js.map +1 -0
  104. package/dist/cli/tui/components/ViewLayout.d.ts +26 -0
  105. package/dist/cli/tui/components/ViewLayout.d.ts.map +1 -0
  106. package/dist/cli/tui/components/ViewLayout.js +57 -0
  107. package/dist/cli/tui/components/ViewLayout.js.map +1 -0
  108. package/dist/cli/tui/components/VotingStats.d.ts +11 -0
  109. package/dist/cli/tui/components/VotingStats.d.ts.map +1 -0
  110. package/dist/cli/tui/components/VotingStats.js +87 -0
  111. package/dist/cli/tui/components/VotingStats.js.map +1 -0
  112. package/dist/cli/tui/config.d.ts +42 -0
  113. package/dist/cli/tui/config.d.ts.map +1 -0
  114. package/dist/cli/tui/config.js +144 -0
  115. package/dist/cli/tui/config.js.map +1 -0
  116. package/dist/cli/tui/hooks/index.d.ts +12 -0
  117. package/dist/cli/tui/hooks/index.d.ts.map +1 -0
  118. package/dist/cli/tui/hooks/index.js +18 -0
  119. package/dist/cli/tui/hooks/index.js.map +1 -0
  120. package/dist/cli/tui/hooks/useCache.d.ts +12 -0
  121. package/dist/cli/tui/hooks/useCache.d.ts.map +1 -0
  122. package/dist/cli/tui/hooks/useCache.js +110 -0
  123. package/dist/cli/tui/hooks/useCache.js.map +1 -0
  124. package/dist/cli/tui/hooks/useCliProcess.d.ts +19 -0
  125. package/dist/cli/tui/hooks/useCliProcess.d.ts.map +1 -0
  126. package/dist/cli/tui/hooks/useCliProcess.js +135 -0
  127. package/dist/cli/tui/hooks/useCliProcess.js.map +1 -0
  128. package/dist/cli/tui/hooks/useNavigation.d.ts +40 -0
  129. package/dist/cli/tui/hooks/useNavigation.d.ts.map +1 -0
  130. package/dist/cli/tui/hooks/useNavigation.js +283 -0
  131. package/dist/cli/tui/hooks/useNavigation.js.map +1 -0
  132. package/dist/cli/tui/hooks/useProposals.d.ts +10 -0
  133. package/dist/cli/tui/hooks/useProposals.d.ts.map +1 -0
  134. package/dist/cli/tui/hooks/useProposals.js +215 -0
  135. package/dist/cli/tui/hooks/useProposals.js.map +1 -0
  136. package/dist/cli/tui/hooks/useStageCalldata.d.ts +17 -0
  137. package/dist/cli/tui/hooks/useStageCalldata.d.ts.map +1 -0
  138. package/dist/cli/tui/hooks/useStageCalldata.js +77 -0
  139. package/dist/cli/tui/hooks/useStageCalldata.js.map +1 -0
  140. package/dist/cli/tui/hooks/useTracker.d.ts +27 -0
  141. package/dist/cli/tui/hooks/useTracker.d.ts.map +1 -0
  142. package/dist/cli/tui/hooks/useTracker.js +205 -0
  143. package/dist/cli/tui/hooks/useTracker.js.map +1 -0
  144. package/dist/cli/tui/index.d.ts +15 -0
  145. package/dist/cli/tui/index.d.ts.map +1 -0
  146. package/dist/cli/tui/index.js +100 -0
  147. package/dist/cli/tui/index.js.map +1 -0
  148. package/dist/cli/tui/ink-wrapper.d.ts +43 -0
  149. package/dist/cli/tui/ink-wrapper.d.ts.map +1 -0
  150. package/dist/cli/tui/ink-wrapper.js +41 -0
  151. package/dist/cli/tui/ink-wrapper.js.map +1 -0
  152. package/dist/cli/tui/types.d.ts +37 -0
  153. package/dist/cli/tui/types.d.ts.map +1 -0
  154. package/dist/cli/tui/types.js +6 -0
  155. package/dist/cli/tui/types.js.map +1 -0
  156. package/dist/cli/tui/utils/clipboard.d.ts +7 -0
  157. package/dist/cli/tui/utils/clipboard.d.ts.map +1 -0
  158. package/dist/cli/tui/utils/clipboard.js +46 -0
  159. package/dist/cli/tui/utils/clipboard.js.map +1 -0
  160. package/dist/cli/tui/utils/index.d.ts +5 -0
  161. package/dist/cli/tui/utils/index.d.ts.map +1 -0
  162. package/dist/cli/tui/utils/index.js +13 -0
  163. package/dist/cli/tui/utils/index.js.map +1 -0
  164. package/dist/cli/tui/utils/terminal.d.ts +18 -0
  165. package/dist/cli/tui/utils/terminal.d.ts.map +1 -0
  166. package/dist/cli/tui/utils/terminal.js +26 -0
  167. package/dist/cli/tui/utils/terminal.js.map +1 -0
  168. package/dist/cli/tui/utils/text.d.ts +12 -0
  169. package/dist/cli/tui/utils/text.d.ts.map +1 -0
  170. package/dist/cli/tui/utils/text.js +30 -0
  171. package/dist/cli/tui/utils/text.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 +194 -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 +182 -0
  179. package/dist/cli/tui/views/DescriptionView.js.map +1 -0
  180. package/dist/cli/tui/views/ElectionView.d.ts +12 -0
  181. package/dist/cli/tui/views/ElectionView.d.ts.map +1 -0
  182. package/dist/cli/tui/views/ElectionView.js +197 -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 +159 -0
  187. package/dist/cli/tui/views/HelpView.js.map +1 -0
  188. package/dist/cli/tui/views/ProposalDetail.d.ts +14 -0
  189. package/dist/cli/tui/views/ProposalDetail.d.ts.map +1 -0
  190. package/dist/cli/tui/views/ProposalDetail.js +167 -0
  191. package/dist/cli/tui/views/ProposalDetail.js.map +1 -0
  192. package/dist/cli/tui/views/ProposalList.d.ts +17 -0
  193. package/dist/cli/tui/views/ProposalList.d.ts.map +1 -0
  194. package/dist/cli/tui/views/ProposalList.js +126 -0
  195. package/dist/cli/tui/views/ProposalList.js.map +1 -0
  196. package/dist/cli/tui/views/SettingsView.d.ts +12 -0
  197. package/dist/cli/tui/views/SettingsView.d.ts.map +1 -0
  198. package/dist/cli/tui/views/SettingsView.js +203 -0
  199. package/dist/cli/tui/views/SettingsView.js.map +1 -0
  200. package/dist/cli/tui/views/SimulationView.d.ts +12 -0
  201. package/dist/cli/tui/views/SimulationView.d.ts.map +1 -0
  202. package/dist/cli/tui/views/SimulationView.js +112 -0
  203. package/dist/cli/tui/views/SimulationView.js.map +1 -0
  204. package/dist/cli/tui/views/StageView.d.ts +12 -0
  205. package/dist/cli/tui/views/StageView.d.ts.map +1 -0
  206. package/dist/cli/tui/views/StageView.js +215 -0
  207. package/dist/cli/tui/views/StageView.js.map +1 -0
  208. package/dist/constants.d.ts +1 -0
  209. package/dist/constants.d.ts.map +1 -1
  210. package/dist/constants.js +1 -0
  211. package/dist/constants.js.map +1 -1
  212. package/dist/data/bundled-cache.json +6651 -2485
  213. package/dist/discovery/governor-discovery.d.ts.map +1 -1
  214. package/dist/discovery/governor-discovery.js +2 -1
  215. package/dist/discovery/governor-discovery.js.map +1 -1
  216. package/dist/index.d.ts +22 -3
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +28 -3
  219. package/dist/index.js.map +1 -1
  220. package/dist/stages/l2-to-l1-message.d.ts +5 -0
  221. package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
  222. package/dist/stages/l2-to-l1-message.js +73 -7
  223. package/dist/stages/l2-to-l1-message.js.map +1 -1
  224. package/dist/stages/timelock.d.ts.map +1 -1
  225. package/dist/stages/timelock.js +10 -3
  226. package/dist/stages/timelock.js.map +1 -1
  227. package/dist/stages/utils.d.ts +5 -2
  228. package/dist/stages/utils.d.ts.map +1 -1
  229. package/dist/stages/utils.js +14 -6
  230. package/dist/stages/utils.js.map +1 -1
  231. package/dist/tracker/cache.d.ts +27 -0
  232. package/dist/tracker/cache.d.ts.map +1 -1
  233. package/dist/tracker/cache.js +50 -2
  234. package/dist/tracker/cache.js.map +1 -1
  235. package/dist/tracker/execute.d.ts.map +1 -1
  236. package/dist/tracker/execute.js +25 -1
  237. package/dist/tracker/execute.js.map +1 -1
  238. package/dist/types/stages.d.ts +15 -2
  239. package/dist/types/stages.d.ts.map +1 -1
  240. package/dist/types/stages.js.map +1 -1
  241. package/dist/types/tracking.d.ts +4 -0
  242. package/dist/types/tracking.d.ts.map +1 -1
  243. package/dist/utils/sanitize.d.ts +28 -0
  244. package/dist/utils/sanitize.d.ts.map +1 -0
  245. package/dist/utils/sanitize.js +52 -0
  246. package/dist/utils/sanitize.js.map +1 -0
  247. package/package.json +28 -16
  248. package/dist/cli/monitor.d.ts +0 -3
  249. package/dist/cli/monitor.d.ts.map +0 -1
  250. package/dist/cli/monitor.js.map +0 -1
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /**
3
+ * Toast notification component
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Toast = Toast;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const TOAST_CONFIG = {
9
+ success: { icon: "✓", color: "green", borderColor: "green" },
10
+ error: { icon: "✗", color: "red", borderColor: "red" },
11
+ info: { icon: "ℹ", color: "cyan", borderColor: "cyan" },
12
+ warning: { icon: "⚠", color: "yellow", borderColor: "yellow" },
13
+ };
14
+ function Toast({ message, type = "info", duration = 3000, onDismiss, }) {
15
+ const [visible, setVisible] = (0, ink_wrapper_js_1.useState)(true);
16
+ const config = TOAST_CONFIG[type] ?? TOAST_CONFIG.info;
17
+ (0, ink_wrapper_js_1.useEffect)(() => {
18
+ if (duration > 0) {
19
+ const timer = setTimeout(() => {
20
+ setVisible(false);
21
+ onDismiss?.();
22
+ }, duration);
23
+ return () => clearTimeout(timer);
24
+ }
25
+ return undefined;
26
+ }, [duration, onDismiss]);
27
+ if (!visible)
28
+ return null;
29
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { borderStyle: "round", borderColor: config.borderColor, paddingX: 1, marginY: 1 },
30
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: config.color, bold: true },
31
+ config.icon,
32
+ " "),
33
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, message)));
34
+ }
35
+ //# sourceMappingURL=Toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/Toast.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,sBAiCC;AAnDD,sDAA0E;AAW1E,MAAM,YAAY,GAA4E;IAC5F,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE;IAC5D,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;IACtD,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;IACvD,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;CAC/D,CAAC;AAEF,SAAgB,KAAK,CAAC,EACpB,OAAO,EACP,IAAI,GAAG,MAAM,EACb,QAAQ,GAAG,IAAI,EACf,SAAS,GACE;IACX,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,yBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC;IAEvD,IAAA,0BAAS,EAAC,GAAG,EAAE;QACb,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,SAAS,EAAE,EAAE,CAAC;YAChB,CAAC,EAAE,QAAQ,CAAC,CAAC;YACb,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CACL,qCAAC,oBAAG,IACF,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC;QAEV,qCAAC,qBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI;YAAE,MAAM,CAAC,IAAI;gBAAS;QACrD,qCAAC,qBAAI,QAAE,OAAO,CAAQ,CAClB,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Animated tracking progress indicator
3
+ */
4
+ interface TrackingProgressProps {
5
+ message: string;
6
+ stage?: string;
7
+ elapsed?: number;
8
+ }
9
+ export declare function TrackingProgress({ message, stage, elapsed, }: TrackingProgressProps): React.ReactElement;
10
+ interface ProgressBarProps {
11
+ current: number;
12
+ total: number;
13
+ width?: number;
14
+ showPercentage?: boolean;
15
+ label?: string;
16
+ }
17
+ export declare function ProgressBar({ current, total, width, showPercentage, label, }: ProgressBarProps): React.ReactElement;
18
+ interface PulsingTextProps {
19
+ text: string;
20
+ color?: string;
21
+ }
22
+ export declare function PulsingText({ text, color }: PulsingTextProps): React.ReactElement;
23
+ export {};
24
+ //# sourceMappingURL=TrackingProgress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrackingProgress.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/TrackingProgress.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAIH,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAaD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,KAAK,EACL,OAAO,GACR,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAoC5C;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,KAA0B,EAC1B,cAAqB,EACrB,KAAK,GACN,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAiBvC;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,KAAgB,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAc5F"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ /**
3
+ * Animated tracking progress indicator
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TrackingProgress = TrackingProgress;
7
+ exports.ProgressBar = ProgressBar;
8
+ exports.PulsingText = PulsingText;
9
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
10
+ const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
11
+ const PROGRESS_BAR_WIDTH = 20;
12
+ function formatElapsed(ms) {
13
+ const seconds = Math.floor(ms / 1000);
14
+ if (seconds < 60)
15
+ return `${seconds}s`;
16
+ const minutes = Math.floor(seconds / 60);
17
+ const remainingSeconds = seconds % 60;
18
+ return `${minutes}m ${remainingSeconds}s`;
19
+ }
20
+ function TrackingProgress({ message, stage, elapsed, }) {
21
+ const [frameIndex, setFrameIndex] = (0, ink_wrapper_js_1.useState)(0);
22
+ const [dots, setDots] = (0, ink_wrapper_js_1.useState)(0);
23
+ (0, ink_wrapper_js_1.useEffect)(() => {
24
+ const timer = setInterval(() => {
25
+ setFrameIndex((prev) => (prev + 1) % SPINNER_FRAMES.length);
26
+ setDots((prev) => (prev + 1) % 4);
27
+ }, 100);
28
+ return () => clearInterval(timer);
29
+ }, []);
30
+ const dotString = ".".repeat(dots);
31
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1 },
32
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
33
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" },
34
+ SPINNER_FRAMES[frameIndex],
35
+ " "),
36
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "white", bold: true }, "Tracking"),
37
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, dotString.padEnd(3)),
38
+ elapsed !== undefined && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
39
+ " (",
40
+ formatElapsed(elapsed),
41
+ ")"))),
42
+ stage && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 2 },
43
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" }, "Stage: "),
44
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, stage))),
45
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 2 },
46
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, message))));
47
+ }
48
+ function ProgressBar({ current, total, width = PROGRESS_BAR_WIDTH, showPercentage = true, label, }) {
49
+ const percentage = total > 0 ? Math.min(100, Math.round((current / total) * 100)) : 0;
50
+ const filled = Math.min(width, Math.round((percentage / 100) * width));
51
+ const empty = Math.max(0, width - filled);
52
+ const filledBar = "█".repeat(filled);
53
+ const emptyBar = "░".repeat(empty);
54
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
55
+ label && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
56
+ label,
57
+ ": "),
58
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, filledBar),
59
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, emptyBar),
60
+ showPercentage && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
61
+ " ",
62
+ percentage,
63
+ "%"),
64
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
65
+ " (",
66
+ current,
67
+ "/",
68
+ total,
69
+ ")")));
70
+ }
71
+ function PulsingText({ text, color = "yellow" }) {
72
+ const [intensity, setIntensity] = (0, ink_wrapper_js_1.useState)(0);
73
+ (0, ink_wrapper_js_1.useEffect)(() => {
74
+ const timer = setInterval(() => {
75
+ setIntensity((prev) => (prev + 1) % 3);
76
+ }, 500);
77
+ return () => clearInterval(timer);
78
+ }, []);
79
+ const colors = [color, "white", color];
80
+ return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: colors[intensity], bold: intensity === 1 }, text);
81
+ }
82
+ //# sourceMappingURL=TrackingProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrackingProgress.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/TrackingProgress.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Shared view layout component
3
+ */
4
+ import type { ViewType, FilterType } from "../types.js";
5
+ type SkeletonType = "list" | "detail" | "text" | "none";
6
+ interface KeyHelpContext {
7
+ calldataActionCount?: number;
8
+ currentActionIndex?: number;
9
+ }
10
+ interface ViewLayoutProps {
11
+ view: ViewType;
12
+ filter?: FilterType;
13
+ title?: string;
14
+ hasProviders?: boolean;
15
+ isTracking?: boolean;
16
+ loading?: boolean;
17
+ loadingText?: string;
18
+ skeletonType?: SkeletonType;
19
+ error?: string | null;
20
+ breadcrumb?: string[];
21
+ keyHelpContext?: KeyHelpContext;
22
+ children: React.ReactNode;
23
+ }
24
+ export declare function ViewLayout({ view, filter, title, hasProviders, isTracking, loading, loadingText, skeletonType, error, breadcrumb, keyHelpContext, children, }: ViewLayoutProps): React.ReactElement;
25
+ export {};
26
+ //# sourceMappingURL=ViewLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewLayout.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/ViewLayout.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMxD,KAAK,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD,UAAU,cAAc;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAqDD,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,MAAc,EACd,KAAK,EACL,YAAoB,EACpB,UAAkB,EAClB,OAAe,EACf,WAA0B,EAC1B,YAAqB,EACrB,KAAY,EACZ,UAAU,EACV,cAAc,EACd,QAAQ,GACT,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CA2BtC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * Shared view layout component
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ViewLayout = ViewLayout;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const Header_js_1 = require("./Header.js");
9
+ const KeyHelp_js_1 = require("./KeyHelp.js");
10
+ const Spinner_js_1 = require("./Spinner.js");
11
+ const Skeleton_js_1 = require("./Skeleton.js");
12
+ function LoadingSkeleton({ type, text }) {
13
+ if (type === "none") {
14
+ return ink_wrapper_js_1.React.createElement(Spinner_js_1.Spinner, { text: text });
15
+ }
16
+ if (type === "list") {
17
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
18
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
19
+ ink_wrapper_js_1.React.createElement(Spinner_js_1.Spinner, { text: text })),
20
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.SkeletonList, { rows: 8, columns: [3, 45, 12, 10] })));
21
+ }
22
+ if (type === "detail") {
23
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
24
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
25
+ ink_wrapper_js_1.React.createElement(Spinner_js_1.Spinner, { text: text })),
26
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", gap: 1 },
27
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 60 }),
28
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 40 }),
29
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginTop: 1, flexDirection: "column" },
30
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 70 }),
31
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 55 }),
32
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 65 })))));
33
+ }
34
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
35
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
36
+ ink_wrapper_js_1.React.createElement(Spinner_js_1.Spinner, { text: text })),
37
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
38
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 80 }),
39
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 75 }),
40
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 70 }),
41
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 78 }),
42
+ ink_wrapper_js_1.React.createElement(Skeleton_js_1.Skeleton, { width: 60 }))));
43
+ }
44
+ function ViewLayout({ view, filter = "all", title, hasProviders = false, isTracking = false, loading = false, loadingText = "Loading...", skeletonType = "none", error = null, breadcrumb, keyHelpContext, children, }) {
45
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", height: "100%" },
46
+ ink_wrapper_js_1.React.createElement(Header_js_1.Header, { view: view, filter: filter, stats: null, hasProviders: hasProviders, isTracking: isTracking, title: title, breadcrumb: breadcrumb }),
47
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", paddingX: 1, flexGrow: 1 },
48
+ loading && ink_wrapper_js_1.React.createElement(LoadingSkeleton, { type: skeletonType, text: loadingText }),
49
+ error && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
50
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "red" },
51
+ "Error: ",
52
+ error),
53
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Press b to go back"))),
54
+ !loading && !error && children),
55
+ ink_wrapper_js_1.React.createElement(KeyHelp_js_1.KeyHelp, { view: view, hasProviders: hasProviders, context: keyHelpContext })));
56
+ }
57
+ //# sourceMappingURL=ViewLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewLayout.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/ViewLayout.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Enhanced voting statistics visualization
3
+ */
4
+ import type { VotingActiveData } from "../../../types/stages.js";
5
+ interface VotingStatsProps {
6
+ data: VotingActiveData;
7
+ compact?: boolean;
8
+ }
9
+ export declare function VotingStats({ data, compact }: VotingStatsProps): React.ReactElement;
10
+ export {};
11
+ //# sourceMappingURL=VotingStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VotingStats.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/VotingStats.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,UAAU,gBAAgB;IACxB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAiBD,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,OAAe,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAoE3F"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /**
3
+ * Enhanced voting statistics visualization
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VotingStats = VotingStats;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const BAR_WIDTH = 30;
9
+ function formatVoteCount(value) {
10
+ const num = parseFloat(value);
11
+ if (isNaN(num))
12
+ return value;
13
+ if (num >= 1000000)
14
+ return `${(num / 1000000).toFixed(1)}M`;
15
+ if (num >= 1000)
16
+ return `${(num / 1000).toFixed(1)}K`;
17
+ return value;
18
+ }
19
+ function calculatePercentage(value, total) {
20
+ const num = parseFloat(value) || 0;
21
+ return total > 0 ? (num / total) * 100 : 0;
22
+ }
23
+ function VotingStats({ data, compact = false }) {
24
+ const forVotes = parseFloat(data.forVotes) || 0;
25
+ const againstVotes = parseFloat(data.againstVotes) || 0;
26
+ const abstainVotes = parseFloat(data.abstainVotes) || 0;
27
+ const total = forVotes + againstVotes + abstainVotes;
28
+ const forPct = calculatePercentage(data.forVotes, total);
29
+ const againstPct = calculatePercentage(data.againstVotes, total);
30
+ const abstainPct = calculatePercentage(data.abstainVotes, total);
31
+ const forBarWidth = Math.min(BAR_WIDTH, Math.max(0, Math.round((forPct / 100) * BAR_WIDTH)));
32
+ const againstBarWidth = Math.min(BAR_WIDTH, Math.max(0, Math.round((againstPct / 100) * BAR_WIDTH)));
33
+ if (compact) {
34
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
35
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" },
36
+ "\u2713",
37
+ formatVoteCount(data.forVotes)),
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: "red" },
40
+ "\u2717",
41
+ formatVoteCount(data.againstVotes)),
42
+ data.quorumReached && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" }, " [Q]")));
43
+ }
44
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1 },
45
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true, color: "cyan" }, "Voting Results"),
46
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginTop: 1 },
47
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, "For "),
48
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, "█".repeat(forBarWidth)),
49
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "░".repeat(BAR_WIDTH - forBarWidth)),
50
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" },
51
+ " ",
52
+ forPct.toFixed(1),
53
+ "%"),
54
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
55
+ " (",
56
+ formatVoteCount(data.forVotes),
57
+ ")")),
58
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
59
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "red" }, "Against "),
60
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "red" }, "█".repeat(againstBarWidth)),
61
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "░".repeat(BAR_WIDTH - againstBarWidth)),
62
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "red" },
63
+ " ",
64
+ againstPct.toFixed(1),
65
+ "%"),
66
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
67
+ " (",
68
+ formatVoteCount(data.againstVotes),
69
+ ")")),
70
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
71
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Abstain "),
72
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
73
+ abstainPct.toFixed(1),
74
+ "% (",
75
+ formatVoteCount(data.abstainVotes),
76
+ ")")),
77
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginTop: 1, borderStyle: "single", borderColor: "gray", borderTop: false, borderLeft: false, borderRight: false },
78
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" },
79
+ "Quorum: ",
80
+ formatVoteCount(data.quorum),
81
+ " "),
82
+ data.quorumReached ? (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green", bold: true }, "\u2713 REACHED")) : (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, "\u25CB Not yet reached"))),
83
+ data.proposalState && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginTop: 1 },
84
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "State: "),
85
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true, color: data.proposalState === "Succeeded" ? "green" : data.proposalState === "Defeated" ? "red" : "yellow" }, data.proposalState)))));
86
+ }
87
+ //# sourceMappingURL=VotingStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VotingStats.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/VotingStats.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AAyBH,kCAoEC;AA3FD,sDAAqD;AAQrD,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,GAAG,IAAI,OAAS;QAAE,OAAO,GAAG,CAAC,GAAG,GAAG,OAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAChE,IAAI,GAAG,IAAI,IAAK;QAAE,OAAO,GAAG,CAAC,GAAG,GAAG,IAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,KAAa;IACvD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,EAAoB;IACrE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;IAErD,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAEjE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAErG,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,qCAAC,oBAAG;YACF,qCAAC,qBAAI,IAAC,KAAK,EAAC,OAAO;;gBAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAQ;YAC5D,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,UAAW;YAC7B,qCAAC,qBAAI,IAAC,KAAK,EAAC,KAAK;;gBAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAQ;YAC7D,IAAI,CAAC,aAAa,IAAI,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,WAAY,CACjD,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,qCAAC,oBAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC;QAC5E,qCAAC,qBAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,qBAAsB;QAE7C,qCAAC,oBAAG,IAAC,SAAS,EAAE,CAAC;YACf,qCAAC,qBAAI,IAAC,KAAK,EAAC,OAAO,eAAgB;YACnC,qCAAC,qBAAI,IAAC,KAAK,EAAC,OAAO,IAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAQ;YACpD,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IAAE,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC,CAAQ;YAC/D,qCAAC,qBAAI,IAAC,KAAK,EAAC,OAAO;;gBAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;oBAAS;YAChD,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;;gBAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAAS,CACzD;QAEN,qCAAC,oBAAG;YACF,qCAAC,qBAAI,IAAC,KAAK,EAAC,KAAK,eAAgB;YACjC,qCAAC,qBAAI,IAAC,KAAK,EAAC,KAAK,IAAE,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAQ;YACtD,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IAAE,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC,CAAQ;YACnE,qCAAC,qBAAI,IAAC,KAAK,EAAC,KAAK;;gBAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;oBAAS;YAClD,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;;gBAAI,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;oBAAS,CAC7D;QAEN,qCAAC,oBAAG;YACF,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,eAAgB;YAClC,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;gBAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;;gBAAK,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;oBAAS,CACrF;QAEN,qCAAC,oBAAG,IAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK;YAChH,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;;gBAAU,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;oBAAS;YAChE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CACpB,qCAAC,qBAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,2BAAiB,CAC1C,CAAC,CAAC,CAAC,CACF,qCAAC,qBAAI,IAAC,KAAK,EAAC,QAAQ,6BAAyB,CAC9C,CACG;QAEL,IAAI,CAAC,aAAa,IAAI,CACrB,qCAAC,oBAAG,IAAC,SAAS,EAAE,CAAC;YACf,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,cAAe;YACjC,qCAAC,qBAAI,IAAC,IAAI,QAAC,KAAK,EAAE,IAAI,CAAC,aAAa,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAClH,IAAI,CAAC,aAAa,CACd,CACH,CACP,CACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * TUI Configuration - persistent settings stored alongside cache file
3
+ */
4
+ export interface TuiConfig {
5
+ rpc: {
6
+ l1Url: string;
7
+ l2Url: string;
8
+ novaUrl: string;
9
+ };
10
+ cache: {
11
+ path: string;
12
+ };
13
+ display: {
14
+ theme: "dark" | "light";
15
+ showProgressBar: boolean;
16
+ compactMode: boolean;
17
+ };
18
+ discovery: {
19
+ defaultDays: number;
20
+ startBlock: number | null;
21
+ chunkSize: number;
22
+ concurrency: number;
23
+ };
24
+ debug: {
25
+ logFile: string;
26
+ namespaces: string;
27
+ };
28
+ }
29
+ /**
30
+ * Set the base path for config storage (same directory as cache)
31
+ * Call this before using loadConfig/saveConfig in TUI context
32
+ */
33
+ export declare function setConfigBasePath(cachePath: string): void;
34
+ export interface ConfigLoadResult {
35
+ config: TuiConfig;
36
+ warning?: string;
37
+ }
38
+ export declare function loadConfigWithStatus(): ConfigLoadResult;
39
+ export declare function loadConfig(): TuiConfig;
40
+ export declare function saveConfig(config: TuiConfig): boolean;
41
+ export declare function getDefaultConfig(): TuiConfig;
42
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;QACzB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,SAAS,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AA+BD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CASzD;AAaD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,oBAAoB,IAAI,gBAAgB,CAwBvD;AAED,wBAAgB,UAAU,IAAI,SAAS,CAEtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAYrD;AAED,wBAAgB,gBAAgB,IAAI,SAAS,CAE5C"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * TUI Configuration - persistent settings stored alongside cache file
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.setConfigBasePath = setConfigBasePath;
40
+ exports.loadConfigWithStatus = loadConfigWithStatus;
41
+ exports.loadConfig = loadConfig;
42
+ exports.saveConfig = saveConfig;
43
+ exports.getDefaultConfig = getDefaultConfig;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const os = __importStar(require("os"));
47
+ const DEFAULT_CONFIG = {
48
+ rpc: {
49
+ l1Url: "",
50
+ l2Url: "",
51
+ novaUrl: "",
52
+ },
53
+ cache: {
54
+ path: "",
55
+ },
56
+ display: {
57
+ theme: "dark",
58
+ showProgressBar: true,
59
+ compactMode: false,
60
+ },
61
+ discovery: {
62
+ defaultDays: 60,
63
+ startBlock: null,
64
+ chunkSize: 10000000, // Match gov-tracker default (10M blocks for L2)
65
+ concurrency: 1,
66
+ },
67
+ debug: {
68
+ logFile: "",
69
+ namespaces: "gov-tracker:*",
70
+ },
71
+ };
72
+ // Module-level cache path for config location
73
+ let configBasePath = null;
74
+ /**
75
+ * Set the base path for config storage (same directory as cache)
76
+ * Call this before using loadConfig/saveConfig in TUI context
77
+ */
78
+ function setConfigBasePath(cachePath) {
79
+ // If cachePath is a file, use its directory; if a directory, use it directly
80
+ try {
81
+ const stats = fs.existsSync(cachePath) && fs.statSync(cachePath);
82
+ configBasePath = stats && stats.isDirectory() ? cachePath : path.dirname(cachePath);
83
+ }
84
+ catch {
85
+ // Fall back to parent directory if stat fails (permissions, race condition, etc.)
86
+ configBasePath = path.dirname(cachePath);
87
+ }
88
+ }
89
+ function getConfigDir() {
90
+ if (configBasePath) {
91
+ return configBasePath;
92
+ }
93
+ return path.join(os.homedir(), ".gov-tracker");
94
+ }
95
+ function getConfigPath() {
96
+ return path.join(getConfigDir(), "tui-config.json");
97
+ }
98
+ function loadConfigWithStatus() {
99
+ try {
100
+ const configPath = getConfigPath();
101
+ if (!fs.existsSync(configPath)) {
102
+ return { config: { ...DEFAULT_CONFIG } };
103
+ }
104
+ const raw = fs.readFileSync(configPath, "utf-8");
105
+ const parsed = JSON.parse(raw);
106
+ return {
107
+ config: {
108
+ rpc: { ...DEFAULT_CONFIG.rpc, ...parsed.rpc },
109
+ cache: { ...DEFAULT_CONFIG.cache, ...parsed.cache },
110
+ display: { ...DEFAULT_CONFIG.display, ...parsed.display },
111
+ discovery: { ...DEFAULT_CONFIG.discovery, ...parsed.discovery },
112
+ debug: { ...DEFAULT_CONFIG.debug, ...parsed.debug },
113
+ },
114
+ };
115
+ }
116
+ catch (err) {
117
+ const message = err instanceof Error ? err.message : String(err);
118
+ return {
119
+ config: { ...DEFAULT_CONFIG },
120
+ warning: `Config file corrupted, using defaults: ${message}`,
121
+ };
122
+ }
123
+ }
124
+ function loadConfig() {
125
+ return loadConfigWithStatus().config;
126
+ }
127
+ function saveConfig(config) {
128
+ try {
129
+ const configDir = getConfigDir();
130
+ if (!fs.existsSync(configDir)) {
131
+ fs.mkdirSync(configDir, { recursive: true });
132
+ }
133
+ const configPath = getConfigPath();
134
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
135
+ return true;
136
+ }
137
+ catch {
138
+ return false;
139
+ }
140
+ }
141
+ function getDefaultConfig() {
142
+ return { ...DEFAULT_CONFIG };
143
+ }
144
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/tui/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export { useCache } from "./useCache.js";
2
+ export type { UseCacheResult } from "./useCache.js";
3
+ export { useProposals } from "./useProposals.js";
4
+ export { useNavigation, MAX_STAGE_INDEX, STAGE_COUNT } from "./useNavigation.js";
5
+ export type { UseNavigationResult } from "./useNavigation.js";
6
+ export { useTracker } from "./useTracker.js";
7
+ export type { UseTrackerResult, UseTrackerOptions } from "./useTracker.js";
8
+ export { useStageCalldata } from "./useStageCalldata.js";
9
+ export type { UseStageCalldataResult, DecodedAction } from "./useStageCalldata.js";
10
+ export { useCliProcess } from "./useCliProcess.js";
11
+ export type { UseCliProcessResult, CliProcessResult } from "./useCliProcess.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjF,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCliProcess = exports.useStageCalldata = exports.useTracker = exports.STAGE_COUNT = exports.MAX_STAGE_INDEX = exports.useNavigation = exports.useProposals = exports.useCache = void 0;
4
+ var useCache_js_1 = require("./useCache.js");
5
+ Object.defineProperty(exports, "useCache", { enumerable: true, get: function () { return useCache_js_1.useCache; } });
6
+ var useProposals_js_1 = require("./useProposals.js");
7
+ Object.defineProperty(exports, "useProposals", { enumerable: true, get: function () { return useProposals_js_1.useProposals; } });
8
+ var useNavigation_js_1 = require("./useNavigation.js");
9
+ Object.defineProperty(exports, "useNavigation", { enumerable: true, get: function () { return useNavigation_js_1.useNavigation; } });
10
+ Object.defineProperty(exports, "MAX_STAGE_INDEX", { enumerable: true, get: function () { return useNavigation_js_1.MAX_STAGE_INDEX; } });
11
+ Object.defineProperty(exports, "STAGE_COUNT", { enumerable: true, get: function () { return useNavigation_js_1.STAGE_COUNT; } });
12
+ var useTracker_js_1 = require("./useTracker.js");
13
+ Object.defineProperty(exports, "useTracker", { enumerable: true, get: function () { return useTracker_js_1.useTracker; } });
14
+ var useStageCalldata_js_1 = require("./useStageCalldata.js");
15
+ Object.defineProperty(exports, "useStageCalldata", { enumerable: true, get: function () { return useStageCalldata_js_1.useStageCalldata; } });
16
+ var useCliProcess_js_1 = require("./useCliProcess.js");
17
+ Object.defineProperty(exports, "useCliProcess", { enumerable: true, get: function () { return useCliProcess_js_1.useCliProcess; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AAGjB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AAErB,uDAAiF;AAAxE,iHAAA,aAAa,OAAA;AAAE,mHAAA,eAAe,OAAA;AAAE,+GAAA,WAAW,OAAA;AAGpD,iDAA6C;AAApC,2GAAA,UAAU,OAAA;AAGnB,6DAAyD;AAAhD,uHAAA,gBAAgB,OAAA;AAGzB,uDAAmD;AAA1C,iHAAA,aAAa,OAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Cache loading hook for TUI
3
+ */
4
+ import type { CacheData } from "../types.js";
5
+ export interface UseCacheResult {
6
+ data: CacheData | null;
7
+ loading: boolean;
8
+ error: string | null;
9
+ reload: () => Promise<void>;
10
+ }
11
+ export declare function useCache(cachePath?: string): UseCacheResult;
12
+ //# sourceMappingURL=useCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCache.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA8D7C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,wBAAgB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CA6C3D"}