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

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 (170) 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} +130 -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 +31 -15
  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 +92 -0
  27. package/dist/cli/tui/App.js.map +1 -0
  28. package/dist/cli/tui/components/Header.d.ts +20 -0
  29. package/dist/cli/tui/components/Header.d.ts.map +1 -0
  30. package/dist/cli/tui/components/Header.js +57 -0
  31. package/dist/cli/tui/components/Header.js.map +1 -0
  32. package/dist/cli/tui/components/KeyHelp.d.ts +11 -0
  33. package/dist/cli/tui/components/KeyHelp.d.ts.map +1 -0
  34. package/dist/cli/tui/components/KeyHelp.js +82 -0
  35. package/dist/cli/tui/components/KeyHelp.js.map +1 -0
  36. package/dist/cli/tui/components/ProposalRow.d.ts +11 -0
  37. package/dist/cli/tui/components/ProposalRow.d.ts.map +1 -0
  38. package/dist/cli/tui/components/ProposalRow.js +66 -0
  39. package/dist/cli/tui/components/ProposalRow.js.map +1 -0
  40. package/dist/cli/tui/components/StageRow.d.ts +12 -0
  41. package/dist/cli/tui/components/StageRow.d.ts.map +1 -0
  42. package/dist/cli/tui/components/StageRow.js +83 -0
  43. package/dist/cli/tui/components/StageRow.js.map +1 -0
  44. package/dist/cli/tui/components/StatusBadge.d.ts +12 -0
  45. package/dist/cli/tui/components/StatusBadge.d.ts.map +1 -0
  46. package/dist/cli/tui/components/StatusBadge.js +27 -0
  47. package/dist/cli/tui/components/StatusBadge.js.map +1 -0
  48. package/dist/cli/tui/components/ViewLayout.d.ts +18 -0
  49. package/dist/cli/tui/components/ViewLayout.d.ts.map +1 -0
  50. package/dist/cli/tui/components/ViewLayout.js +21 -0
  51. package/dist/cli/tui/components/ViewLayout.js.map +1 -0
  52. package/dist/cli/tui/hooks/index.d.ts +10 -0
  53. package/dist/cli/tui/hooks/index.d.ts.map +1 -0
  54. package/dist/cli/tui/hooks/index.js +14 -0
  55. package/dist/cli/tui/hooks/index.js.map +1 -0
  56. package/dist/cli/tui/hooks/useCache.d.ts +12 -0
  57. package/dist/cli/tui/hooks/useCache.d.ts.map +1 -0
  58. package/dist/cli/tui/hooks/useCache.js +86 -0
  59. package/dist/cli/tui/hooks/useCache.js.map +1 -0
  60. package/dist/cli/tui/hooks/useNavigation.d.ts +34 -0
  61. package/dist/cli/tui/hooks/useNavigation.d.ts.map +1 -0
  62. package/dist/cli/tui/hooks/useNavigation.js +219 -0
  63. package/dist/cli/tui/hooks/useNavigation.js.map +1 -0
  64. package/dist/cli/tui/hooks/useProposals.d.ts +10 -0
  65. package/dist/cli/tui/hooks/useProposals.d.ts.map +1 -0
  66. package/dist/cli/tui/hooks/useProposals.js +159 -0
  67. package/dist/cli/tui/hooks/useProposals.js.map +1 -0
  68. package/dist/cli/tui/hooks/useStageCalldata.d.ts +17 -0
  69. package/dist/cli/tui/hooks/useStageCalldata.d.ts.map +1 -0
  70. package/dist/cli/tui/hooks/useStageCalldata.js +50 -0
  71. package/dist/cli/tui/hooks/useStageCalldata.js.map +1 -0
  72. package/dist/cli/tui/hooks/useTracker.d.ts +28 -0
  73. package/dist/cli/tui/hooks/useTracker.d.ts.map +1 -0
  74. package/dist/cli/tui/hooks/useTracker.js +165 -0
  75. package/dist/cli/tui/hooks/useTracker.js.map +1 -0
  76. package/dist/cli/tui/index.d.ts +14 -0
  77. package/dist/cli/tui/index.d.ts.map +1 -0
  78. package/dist/cli/tui/index.js +68 -0
  79. package/dist/cli/tui/index.js.map +1 -0
  80. package/dist/cli/tui/ink-wrapper.d.ts +43 -0
  81. package/dist/cli/tui/ink-wrapper.d.ts.map +1 -0
  82. package/dist/cli/tui/ink-wrapper.js +41 -0
  83. package/dist/cli/tui/ink-wrapper.js.map +1 -0
  84. package/dist/cli/tui/types.d.ts +34 -0
  85. package/dist/cli/tui/types.d.ts.map +1 -0
  86. package/dist/cli/tui/types.js +6 -0
  87. package/dist/cli/tui/types.js.map +1 -0
  88. package/dist/cli/tui/utils/index.d.ts +4 -0
  89. package/dist/cli/tui/utils/index.d.ts.map +1 -0
  90. package/dist/cli/tui/utils/index.js +10 -0
  91. package/dist/cli/tui/utils/index.js.map +1 -0
  92. package/dist/cli/tui/utils/terminal.d.ts +18 -0
  93. package/dist/cli/tui/utils/terminal.d.ts.map +1 -0
  94. package/dist/cli/tui/utils/terminal.js +26 -0
  95. package/dist/cli/tui/utils/terminal.js.map +1 -0
  96. package/dist/cli/tui/utils/text.d.ts +12 -0
  97. package/dist/cli/tui/utils/text.d.ts.map +1 -0
  98. package/dist/cli/tui/utils/text.js +28 -0
  99. package/dist/cli/tui/utils/text.js.map +1 -0
  100. package/dist/cli/tui/views/CalldataView.d.ts +12 -0
  101. package/dist/cli/tui/views/CalldataView.d.ts.map +1 -0
  102. package/dist/cli/tui/views/CalldataView.js +180 -0
  103. package/dist/cli/tui/views/CalldataView.js.map +1 -0
  104. package/dist/cli/tui/views/DescriptionView.d.ts +12 -0
  105. package/dist/cli/tui/views/DescriptionView.d.ts.map +1 -0
  106. package/dist/cli/tui/views/DescriptionView.js +174 -0
  107. package/dist/cli/tui/views/DescriptionView.js.map +1 -0
  108. package/dist/cli/tui/views/ElectionView.d.ts +12 -0
  109. package/dist/cli/tui/views/ElectionView.d.ts.map +1 -0
  110. package/dist/cli/tui/views/ElectionView.js +159 -0
  111. package/dist/cli/tui/views/ElectionView.js.map +1 -0
  112. package/dist/cli/tui/views/ProposalDetail.d.ts +14 -0
  113. package/dist/cli/tui/views/ProposalDetail.d.ts.map +1 -0
  114. package/dist/cli/tui/views/ProposalDetail.js +172 -0
  115. package/dist/cli/tui/views/ProposalDetail.js.map +1 -0
  116. package/dist/cli/tui/views/ProposalList.d.ts +17 -0
  117. package/dist/cli/tui/views/ProposalList.d.ts.map +1 -0
  118. package/dist/cli/tui/views/ProposalList.js +111 -0
  119. package/dist/cli/tui/views/ProposalList.js.map +1 -0
  120. package/dist/cli/tui/views/SimulationView.d.ts +12 -0
  121. package/dist/cli/tui/views/SimulationView.d.ts.map +1 -0
  122. package/dist/cli/tui/views/SimulationView.js +93 -0
  123. package/dist/cli/tui/views/SimulationView.js.map +1 -0
  124. package/dist/cli/tui/views/StageView.d.ts +12 -0
  125. package/dist/cli/tui/views/StageView.d.ts.map +1 -0
  126. package/dist/cli/tui/views/StageView.js +199 -0
  127. package/dist/cli/tui/views/StageView.js.map +1 -0
  128. package/dist/constants.d.ts +1 -0
  129. package/dist/constants.d.ts.map +1 -1
  130. package/dist/constants.js +1 -0
  131. package/dist/constants.js.map +1 -1
  132. package/dist/data/bundled-cache.json +6651 -2485
  133. package/dist/discovery/governor-discovery.d.ts.map +1 -1
  134. package/dist/discovery/governor-discovery.js +2 -1
  135. package/dist/discovery/governor-discovery.js.map +1 -1
  136. package/dist/index.d.ts +22 -3
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +28 -3
  139. package/dist/index.js.map +1 -1
  140. package/dist/stages/l2-to-l1-message.d.ts +5 -0
  141. package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
  142. package/dist/stages/l2-to-l1-message.js +73 -7
  143. package/dist/stages/l2-to-l1-message.js.map +1 -1
  144. package/dist/stages/timelock.d.ts.map +1 -1
  145. package/dist/stages/timelock.js +9 -3
  146. package/dist/stages/timelock.js.map +1 -1
  147. package/dist/stages/utils.d.ts +5 -2
  148. package/dist/stages/utils.d.ts.map +1 -1
  149. package/dist/stages/utils.js +14 -6
  150. package/dist/stages/utils.js.map +1 -1
  151. package/dist/tracker/cache.d.ts +27 -0
  152. package/dist/tracker/cache.d.ts.map +1 -1
  153. package/dist/tracker/cache.js +46 -2
  154. package/dist/tracker/cache.js.map +1 -1
  155. package/dist/tracker/execute.d.ts.map +1 -1
  156. package/dist/tracker/execute.js +25 -1
  157. package/dist/tracker/execute.js.map +1 -1
  158. package/dist/types/stages.d.ts +15 -2
  159. package/dist/types/stages.d.ts.map +1 -1
  160. package/dist/types/stages.js.map +1 -1
  161. package/dist/types/tracking.d.ts +4 -0
  162. package/dist/types/tracking.d.ts.map +1 -1
  163. package/dist/utils/sanitize.d.ts +28 -0
  164. package/dist/utils/sanitize.d.ts.map +1 -0
  165. package/dist/utils/sanitize.js +52 -0
  166. package/dist/utils/sanitize.js.map +1 -0
  167. package/package.json +28 -16
  168. package/dist/cli/monitor.d.ts +0 -3
  169. package/dist/cli/monitor.d.ts.map +0 -1
  170. package/dist/cli/monitor.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtE,wBAAgB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAyBnD"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pLimit = pLimit;
4
+ function pLimit(concurrency) {
5
+ const queue = [];
6
+ let active = 0;
7
+ const next = () => {
8
+ active--;
9
+ const nextTask = queue.shift();
10
+ if (nextTask)
11
+ nextTask();
12
+ };
13
+ return (fn) => new Promise((resolve, reject) => {
14
+ const run = async () => {
15
+ active++;
16
+ try {
17
+ resolve(await fn());
18
+ }
19
+ catch (err) {
20
+ reject(err);
21
+ }
22
+ finally {
23
+ next();
24
+ }
25
+ };
26
+ if (active < concurrency)
27
+ run();
28
+ else
29
+ queue.push(run);
30
+ });
31
+ }
32
+ //# sourceMappingURL=concurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../../src/cli/lib/concurrency.ts"],"names":[],"mappings":";;AAmBA,wBAyBC;AAzBD,SAAgB,MAAM,CAAC,WAAmB;IACxC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,MAAM,EAAE,CAAC;QACT,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,QAAQ;YAAE,QAAQ,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO,CAAI,EAA4B,EAAc,EAAE,CACrD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,MAAM,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,IAAI,EAAE,CAAC;YACT,CAAC;QACH,CAAC,CAAC;QACF,IAAI,MAAM,GAAG,WAAW;YAAE,GAAG,EAAE,CAAC;;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Main TUI Application Component
3
+ *
4
+ * Routes between views and manages global state.
5
+ */
6
+ import type { ProviderBundle } from "../lib/cli.js";
7
+ export interface AppProps {
8
+ cachePath: string;
9
+ providers?: ProviderBundle;
10
+ verbose?: boolean;
11
+ }
12
+ export declare function App({ cachePath, providers: providerBundle, verbose }: AppProps): React.ReactElement;
13
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/App.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAUpD,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,QAAQ,GAAG,KAAK,CAAC,YAAY,CAsGnG"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * Main TUI Application Component
4
+ *
5
+ * Routes between views and manages global state.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.App = App;
9
+ const ink_wrapper_js_1 = require("./ink-wrapper.js");
10
+ const react_1 = require("react");
11
+ const index_js_1 = require("./hooks/index.js");
12
+ const ProposalList_js_1 = require("./views/ProposalList.js");
13
+ const ProposalDetail_js_1 = require("./views/ProposalDetail.js");
14
+ const CalldataView_js_1 = require("./views/CalldataView.js");
15
+ const StageView_js_1 = require("./views/StageView.js");
16
+ const SimulationView_js_1 = require("./views/SimulationView.js");
17
+ const DescriptionView_js_1 = require("./views/DescriptionView.js");
18
+ const ElectionView_js_1 = require("./views/ElectionView.js");
19
+ function useTerminalHeight() {
20
+ const [height, setHeight] = (0, react_1.useState)(process.stdout.rows || 24);
21
+ (0, react_1.useEffect)(() => {
22
+ const handleResize = () => setHeight(process.stdout.rows || 24);
23
+ process.stdout.on("resize", handleResize);
24
+ return () => {
25
+ process.stdout.off("resize", handleResize);
26
+ };
27
+ }, []);
28
+ return height;
29
+ }
30
+ function App({ cachePath, providers: providerBundle, verbose }) {
31
+ const { exit } = (0, ink_wrapper_js_1.useApp)();
32
+ const cache = (0, index_js_1.useCache)(cachePath);
33
+ const navigation = (0, index_js_1.useNavigation)();
34
+ const { items } = (0, index_js_1.useProposals)(cache.data, navigation.state.filter, navigation.state.searchQuery);
35
+ const tracker = (0, index_js_1.useTracker)({ providers: providerBundle, cachePath });
36
+ const terminalHeight = useTerminalHeight();
37
+ (0, react_1.useEffect)(() => {
38
+ if (verbose && cache.error) {
39
+ console.error("Cache error:", cache.error);
40
+ }
41
+ }, [verbose, cache.error]);
42
+ (0, react_1.useEffect)(() => {
43
+ if (tracker.lastResult && navigation.state.view === "detail") {
44
+ cache.reload();
45
+ }
46
+ }, [tracker.lastResult]);
47
+ const handleQuit = () => {
48
+ exit();
49
+ };
50
+ if (cache.loading) {
51
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", height: terminalHeight, padding: 1 },
52
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, "Loading cache..."),
53
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, cachePath)));
54
+ }
55
+ if (cache.error) {
56
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", height: terminalHeight, padding: 1 },
57
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "red" }, "Error loading cache:"),
58
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, cache.error),
59
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray", marginTop: 1 }, "Press q to quit")));
60
+ }
61
+ const { view, selectedProposal } = navigation.state;
62
+ const renderView = () => {
63
+ if (view === "list") {
64
+ return (ink_wrapper_js_1.React.createElement(ProposalList_js_1.ProposalList, { items: items, data: cache.data, navigation: navigation, tracker: tracker, onQuit: handleQuit, onReload: cache.reload }));
65
+ }
66
+ if (view === "election") {
67
+ return ink_wrapper_js_1.React.createElement(ElectionView_js_1.ElectionView, { navigation: navigation, providers: providerBundle });
68
+ }
69
+ if (!selectedProposal) {
70
+ navigation.back();
71
+ return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, "Returning to list...");
72
+ }
73
+ switch (view) {
74
+ case "detail":
75
+ return (ink_wrapper_js_1.React.createElement(ProposalDetail_js_1.ProposalDetail, { proposal: selectedProposal, navigation: navigation, tracker: tracker }));
76
+ case "calldata":
77
+ return ink_wrapper_js_1.React.createElement(CalldataView_js_1.CalldataView, { proposal: selectedProposal, navigation: navigation });
78
+ case "stage":
79
+ return ink_wrapper_js_1.React.createElement(StageView_js_1.StageView, { proposal: selectedProposal, navigation: navigation });
80
+ case "simulation":
81
+ return ink_wrapper_js_1.React.createElement(SimulationView_js_1.SimulationView, { proposal: selectedProposal, navigation: navigation });
82
+ case "description":
83
+ return ink_wrapper_js_1.React.createElement(DescriptionView_js_1.DescriptionView, { proposal: selectedProposal, navigation: navigation });
84
+ default:
85
+ return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null,
86
+ "Unknown view: ",
87
+ view);
88
+ }
89
+ };
90
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", height: terminalHeight }, renderView()));
91
+ }
92
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../../src/cli/tui/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Header component showing title and stats
3
+ */
4
+ import type { TrackerStats } from "../../../types/index.js";
5
+ import type { ViewType, FilterType } from "../types.js";
6
+ interface HeaderProps {
7
+ view: ViewType;
8
+ filter: FilterType;
9
+ stats: TrackerStats | null;
10
+ hasProviders: boolean;
11
+ isTracking: boolean;
12
+ title?: string;
13
+ position?: {
14
+ current: number;
15
+ total: number;
16
+ };
17
+ }
18
+ export declare function Header({ view, filter, stats, hasProviders, isTracking, title, position, }: HeaderProps): React.ReactElement;
19
+ export {};
20
+ //# sourceMappingURL=Header.d.ts.map
@@ -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,MAAM,aAAa,CAAC;AAExD,UAAU,WAAW;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAiElC"}
@@ -0,0 +1,57 @@
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
+ function Header({ view, filter, stats, hasProviders, isTracking, title, position, }) {
9
+ const getViewTitle = () => {
10
+ switch (view) {
11
+ case "list":
12
+ return "Gov-Tracker TUI [PREVIEW]";
13
+ case "detail":
14
+ return title ?? "Proposal Detail";
15
+ case "calldata":
16
+ return "Decoded Calldata";
17
+ case "stage":
18
+ return "Stage Details";
19
+ case "simulation":
20
+ return title ?? "Simulation Data";
21
+ case "description":
22
+ return title ?? "Proposal Description";
23
+ default:
24
+ return "Gov-Tracker";
25
+ }
26
+ };
27
+ const getRightSide = () => {
28
+ if (view === "list" && stats) {
29
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
30
+ stats.total,
31
+ " proposals | ",
32
+ stats.proposals.active,
33
+ " active",
34
+ hasProviders && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, " [RPC]"),
35
+ isTracking && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, " [Tracking...]")));
36
+ }
37
+ if (view === "detail" && hasProviders) {
38
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, isTracking ? (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, "Tracking...")) : (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, "[r] to re-track"))));
39
+ }
40
+ return null;
41
+ };
42
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { borderStyle: "single", borderColor: "cyan", paddingX: 1 },
43
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexGrow: 1 },
44
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true, color: "cyan" }, getViewTitle()),
45
+ view === "list" && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
46
+ " ",
47
+ "[",
48
+ filter.toUpperCase(),
49
+ "]")),
50
+ position && position.total > 0 && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" },
51
+ " ",
52
+ position.current,
53
+ "/",
54
+ position.total))),
55
+ getRightSide()));
56
+ }
57
+ //# 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;;AAgBH,wBAyEC;AAvFD,sDAAqD;AAcrD,SAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,UAAU,EACV,KAAK,EACL,QAAQ,GACI;IACZ,MAAM,YAAY,GAAG,GAAW,EAAE;QAChC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM;gBACT,OAAO,2BAA2B,CAAC;YACrC,KAAK,QAAQ;gBACX,OAAO,KAAK,IAAI,iBAAiB,CAAC;YACpC,KAAK,UAAU;gBACb,OAAO,kBAAkB,CAAC;YAC5B,KAAK,OAAO;gBACV,OAAO,eAAe,CAAC;YACzB,KAAK,YAAY;gBACf,OAAO,KAAK,IAAI,iBAAiB,CAAC;YACpC,KAAK,aAAa;gBAChB,OAAO,KAAK,IAAI,sBAAsB,CAAC;YACzC;gBACE,OAAO,aAAa,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAA8B,EAAE;QACnD,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,EAAE,CAAC;YAC7B,OAAO,CACL,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;gBACf,KAAK,CAAC,KAAK;;gBAAe,KAAK,CAAC,SAAS,CAAC,MAAM;;gBAChD,YAAY,IAAI,qCAAC,qBAAI,IAAC,KAAK,EAAC,OAAO,aAAc;gBACjD,UAAU,IAAI,qCAAC,qBAAI,IAAC,KAAK,EAAC,QAAQ,qBAAsB,CACpD,CACR,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,QAAQ,IAAI,YAAY,EAAE,CAAC;YACtC,OAAO,CACL,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IACf,UAAU,CAAC,CAAC,CAAC,CACZ,qCAAC,qBAAI,IAAC,KAAK,EAAC,QAAQ,kBAAmB,CACxC,CAAC,CAAC,CAAC,CACF,qCAAC,qBAAI,IAAC,KAAK,EAAC,OAAO,sBAAuB,CAC3C,CACI,CACR,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,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;YACd,qCAAC,qBAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,IACpB,YAAY,EAAE,CACV;YACN,IAAI,KAAK,MAAM,IAAI,CAClB,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;gBACf,GAAG;;gBACF,MAAM,CAAC,WAAW,EAAE;oBACjB,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,11 @@
1
+ /**
2
+ * Keyboard shortcuts help footer
3
+ */
4
+ import type { ViewType } from "../types.js";
5
+ interface KeyHelpProps {
6
+ view: ViewType;
7
+ hasProviders: boolean;
8
+ }
9
+ export declare function KeyHelp({ view, hasProviders }: KeyHelpProps): React.ReactElement;
10
+ export {};
11
+ //# 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,MAAM,aAAa,CAAC;AAE5C,UAAU,YAAY;IACpB,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB;AAkFD,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,YAAY,CAahF"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ /**
3
+ * Keyboard shortcuts help footer
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KeyHelp = KeyHelp;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const LIST_KEYS = [
9
+ { key: "↑↓/PgUp/Dn", action: "Navigate" },
10
+ { key: "g/G", action: "Top/Bottom" },
11
+ { key: "/", action: "Search" },
12
+ { key: "Enter", action: "View" },
13
+ { key: "Tab", action: "Filter" },
14
+ { key: "R", action: "Reload" },
15
+ { key: "e", action: "Elections" },
16
+ { key: "d", action: "Discover" },
17
+ { key: "q", action: "Quit" },
18
+ ];
19
+ const DETAIL_KEYS_BASE = [
20
+ { key: "↑↓", action: "Stage" },
21
+ { key: "1-7", action: "Jump" },
22
+ { key: "Enter", action: "Details" },
23
+ { key: "d", action: "Description" },
24
+ { key: "c", action: "Calldata" },
25
+ { key: "s", action: "Simulate" },
26
+ ];
27
+ const DETAIL_RETRACK = { key: "r", action: "Re-track" };
28
+ const DETAIL_BACK = { key: "b", action: "Back" };
29
+ const CALLDATA_KEYS = [
30
+ { key: "←→", action: "Actions" },
31
+ { key: "↑↓/PgUp/Dn", action: "Scroll" },
32
+ { key: "g/G", action: "Top/Bottom" },
33
+ { key: "e/c", action: "Expand/Collapse" },
34
+ { key: "b", action: "Back" },
35
+ ];
36
+ const STAGE_KEYS = [
37
+ { key: "↑↓/PgUp/Dn", action: "Scroll" },
38
+ { key: "b", action: "Back" },
39
+ ];
40
+ const SIMULATION_KEYS = [
41
+ { key: "↑↓", action: "Navigate" },
42
+ { key: "b", action: "Back" },
43
+ ];
44
+ const DESCRIPTION_KEYS = [
45
+ { key: "↑↓/PgUp/Dn", action: "Scroll" },
46
+ { key: "b", action: "Back" },
47
+ ];
48
+ const ELECTION_KEYS = [
49
+ { key: "↑↓", action: "Navigate" },
50
+ { key: "b", action: "Back" },
51
+ ];
52
+ function getKeysForView(view, hasProviders) {
53
+ switch (view) {
54
+ case "list":
55
+ return hasProviders ? LIST_KEYS : LIST_KEYS.filter((k) => k.key !== "d" && k.key !== "e");
56
+ case "detail":
57
+ return hasProviders
58
+ ? [...DETAIL_KEYS_BASE, DETAIL_RETRACK, DETAIL_BACK]
59
+ : [...DETAIL_KEYS_BASE, DETAIL_BACK];
60
+ case "calldata":
61
+ return CALLDATA_KEYS;
62
+ case "stage":
63
+ return STAGE_KEYS;
64
+ case "simulation":
65
+ return SIMULATION_KEYS;
66
+ case "description":
67
+ return DESCRIPTION_KEYS;
68
+ case "election":
69
+ return ELECTION_KEYS;
70
+ default:
71
+ return [];
72
+ }
73
+ }
74
+ function KeyHelp({ view, hasProviders }) {
75
+ const keys = getKeysForView(view, hasProviders);
76
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { borderStyle: "single", borderColor: "gray", paddingX: 1 }, keys.map((binding) => (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { key: binding.key, marginRight: 2 },
77
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" }, binding.key),
78
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
79
+ ": ",
80
+ binding.action))))));
81
+ }
82
+ //# sourceMappingURL=KeyHelp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyHelp.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/KeyHelp.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AA0FH,0BAaC;AArGD,sDAAqD;AAarD,MAAM,SAAS,GAAiB;IAC9B,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE;IACzC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE;IACpC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9B,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;IAChC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9B,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE;IACjC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;IAChC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;CAC7B,CAAC;AAEF,MAAM,gBAAgB,GAAiB;IACrC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAC9B,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;IAC9B,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;IACnC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE;IACnC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;IAChC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;CACjC,CAAC;AAEF,MAAM,cAAc,GAAe,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AACpE,MAAM,WAAW,GAAe,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAE7D,MAAM,aAAa,GAAiB;IAClC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;IAChC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE;IACpC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACzC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;CAC7B,CAAC;AAEF,MAAM,UAAU,GAAiB;IAC/B,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;CAC7B,CAAC;AAEF,MAAM,eAAe,GAAiB;IACpC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE;IACjC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;CAC7B,CAAC;AAEF,MAAM,gBAAgB,GAAiB;IACrC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;CAC7B,CAAC;AAEF,MAAM,aAAa,GAAiB;IAClC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE;IACjC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;CAC7B,CAAC;AAEF,SAAS,cAAc,CAAC,IAAc,EAAE,YAAqB;IAC3D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC5F,KAAK,QAAQ;YACX,OAAO,YAAY;gBACjB,CAAC,CAAC,CAAC,GAAG,gBAAgB,EAAE,cAAc,EAAE,WAAW,CAAC;gBACpD,CAAC,CAAC,CAAC,GAAG,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACzC,KAAK,UAAU;YACb,OAAO,aAAa,CAAC;QACvB,KAAK,OAAO;YACV,OAAO,UAAU,CAAC;QACpB,KAAK,YAAY;YACf,OAAO,eAAe,CAAC;QACzB,KAAK,aAAa;YAChB,OAAO,gBAAgB,CAAC;QAC1B,KAAK,UAAU;YACb,OAAO,aAAa,CAAC;QACvB;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAgB;IAC1D,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAEhD,OAAO,CACL,qCAAC,oBAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,IACrD,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACrB,qCAAC,oBAAG,IAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC;QACnC,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IAAE,OAAO,CAAC,GAAG,CAAQ;QACvC,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM;;YAAI,OAAO,CAAC,MAAM,CAAQ,CACxC,CACP,CAAC,CACE,CACP,CAAC;AACJ,CAAC"}
@@ -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;AAGpD,UAAU,gBAAgB;IACxB,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACrB;AAoCD,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAqBtF"}
@@ -0,0 +1,66 @@
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
+ function getTypeLabel(item) {
10
+ if (item.type === "election")
11
+ return "EL";
12
+ if (item.type === "timelock")
13
+ return "TL";
14
+ if (item.proposalType === "CONSTITUTIONAL")
15
+ return "CO";
16
+ if (item.proposalType === "NON_CONSTITUTIONAL")
17
+ return "TR";
18
+ return "PR";
19
+ }
20
+ function getTypeColor(item) {
21
+ if (item.type === "election")
22
+ return "magenta";
23
+ if (item.type === "timelock")
24
+ return "blue";
25
+ if (item.proposalType === "CONSTITUTIONAL")
26
+ return "cyan";
27
+ return "green";
28
+ }
29
+ function formatAge(timestamp) {
30
+ if (timestamp === null)
31
+ return "--";
32
+ const now = Date.now();
33
+ const diffMs = now - timestamp;
34
+ const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
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
+ const months = Math.floor(diffDays / 30);
45
+ return `${months}mo ago`;
46
+ }
47
+ const years = Math.floor(diffDays / 365);
48
+ return `${years}y ago`;
49
+ }
50
+ function ProposalRow({ item, isSelected }) {
51
+ const typeLabel = getTypeLabel(item);
52
+ const typeColor = getTypeColor(item);
53
+ const age = formatAge(item.createdAt);
54
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
55
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined, bold: isSelected }, isSelected ? ">" : " "),
56
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: typeColor }, typeLabel),
57
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, " "),
58
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined }, item.title),
59
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " "),
60
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, age.padStart(8)),
61
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, " "),
62
+ ink_wrapper_js_1.React.createElement(StatusBadge_js_1.StatusBadge, { status: item.status, compact: true }),
63
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, item.stageProgress),
64
+ item.hasExecutable && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, "\u25B6")));
65
+ }
66
+ //# sourceMappingURL=ProposalRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProposalRow.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/ProposalRow.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AA6CH,kCAqBC;AAhED,sDAAqD;AAErD,qDAA+C;AAO/C,SAAS,YAAY,CAAC,IAAsB;IAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,IAAI,CAAC,YAAY,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,IAAI,CAAC,YAAY,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,IAAsB;IAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IAC5C,IAAI,IAAI,CAAC,YAAY,KAAK,gBAAgB;QAAE,OAAO,MAAM,CAAC;IAC1D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS,CAAC,SAAwB;IACzC,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAE5D,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACpC,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;IAC7C,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QACzC,OAAO,GAAG,MAAM,QAAQ,CAAC;IAC3B,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;IACzC,OAAO,GAAG,KAAK,OAAO,CAAC;AACzB,CAAC;AAED,SAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAoB;IAChE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEtC,OAAO,CACL,qCAAC,oBAAG;QACF,qCAAC,qBAAI,IAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,IAC3D,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAClB;QACP,qCAAC,qBAAI,IAAC,KAAK,EAAE,SAAS,IAAG,SAAS,CAAQ;QAC1C,qCAAC,qBAAI,YAAS;QACd,qCAAC,qBAAI,IAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAG,IAAI,CAAC,KAAK,CAAQ;QACjE,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,QAAS;QAC3B,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAQ;QAC3C,qCAAC,qBAAI,YAAS;QACd,qCAAC,4BAAW,IAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,SAAG;QAC5C,qCAAC,qBAAI,IAAC,KAAK,EAAC,MAAM,IAAE,IAAI,CAAC,aAAa,CAAQ;QAC7C,IAAI,CAAC,aAAa,IAAI,qCAAC,qBAAI,IAAC,KAAK,EAAC,OAAO,aAAS,CAC/C,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;AAI5D,UAAU,aAAa;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAuED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CAiBxF"}
@@ -0,0 +1,83 @@
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
+ function formatTiming(stage) {
11
+ if (stage.timing?.eta) {
12
+ const date = new Date(stage.timing.eta * 1000);
13
+ const now = Date.now();
14
+ const diff = stage.timing.eta * 1000 - now;
15
+ if (diff > 0) {
16
+ const hours = Math.floor(diff / (1000 * 60 * 60));
17
+ const mins = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
18
+ if (hours > 24) {
19
+ const days = Math.floor(hours / 24);
20
+ return `~${days}d ${hours % 24}h`;
21
+ }
22
+ return `~${hours}h ${mins}m`;
23
+ }
24
+ return date.toLocaleDateString();
25
+ }
26
+ if (stage.transactions.length > 0) {
27
+ const tx = stage.transactions[0];
28
+ if (tx.timestamp) {
29
+ return new Date(tx.timestamp * 1000).toLocaleDateString();
30
+ }
31
+ }
32
+ return null;
33
+ }
34
+ function getStageExtra(stage) {
35
+ if (stage.type === "VOTING_ACTIVE" && stage.data) {
36
+ const data = stage.data;
37
+ if (data.proposalState) {
38
+ return data.proposalState;
39
+ }
40
+ }
41
+ if (stage.type === "RETRYABLE_EXECUTED" && stage.data) {
42
+ const data = stage.data;
43
+ if (data.ticketCount !== undefined) {
44
+ const redeemed = data.redeemedCount ?? 0;
45
+ return `${redeemed}/${data.ticketCount} tickets`;
46
+ }
47
+ }
48
+ if ((stage.type === "L2_TIMELOCK" || stage.type === "L1_TIMELOCK") &&
49
+ stage.data) {
50
+ const data = stage.data;
51
+ if (data.state)
52
+ return data.state;
53
+ }
54
+ if (stage.type === "L2_TO_L1_MESSAGE" && stage.data) {
55
+ const data = stage.data;
56
+ if (data.messageCount) {
57
+ const status = data.status ?? "pending";
58
+ return `${data.messageCount} msg${data.messageCount > 1 ? "s" : ""} (${status})`;
59
+ }
60
+ }
61
+ return null;
62
+ }
63
+ function StageRow({ stage, index, isSelected }) {
64
+ const title = (0, stage_metadata_js_1.formatStageTitle)(stage.type);
65
+ const timing = formatTiming(stage);
66
+ const extra = getStageExtra(stage);
67
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
68
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined },
69
+ isSelected ? ">" : " ",
70
+ " ",
71
+ index + 1,
72
+ ".",
73
+ " "),
74
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined }, title.padEnd(18)),
75
+ ink_wrapper_js_1.React.createElement(StatusBadge_js_1.StatusBadge, { status: stage.status, padded: true }),
76
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, stage.chain.padEnd(10)),
77
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, (timing ?? "").padEnd(12)),
78
+ extra && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
79
+ "[",
80
+ extra,
81
+ "]")));
82
+ }
83
+ //# sourceMappingURL=StageRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StageRow.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/StageRow.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Status badge component for displaying stage/proposal status
3
+ */
4
+ import type { StageStatus } from "../../../types/index.js";
5
+ interface StatusBadgeProps {
6
+ status: StageStatus | "active" | "complete" | "failed";
7
+ compact?: boolean;
8
+ padded?: boolean;
9
+ }
10
+ export declare function StatusBadge({ status, compact, padded }: StatusBadgeProps): React.ReactElement;
11
+ export {};
12
+ //# sourceMappingURL=StatusBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/StatusBadge.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,UAAU,gBAAgB;IACxB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAcD,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,OAAe,EAAE,MAAc,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAa7G"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /**
3
+ * Status badge component for displaying stage/proposal status
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StatusBadge = StatusBadge;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const STATUS_CONFIG = {
9
+ NOT_STARTED: { icon: "·", color: "gray", label: "Not Started" },
10
+ PENDING: { icon: "◐", color: "yellow", label: "Pending" },
11
+ READY: { icon: "▶", color: "green", label: "Ready" },
12
+ COMPLETED: { icon: "✓", color: "green", label: "Complete" },
13
+ FAILED: { icon: "✗", color: "red", label: "Failed" },
14
+ SKIPPED: { icon: "○", color: "gray", label: "Skipped" },
15
+ active: { icon: "●", color: "yellow", label: "Active" },
16
+ complete: { icon: "✓", color: "green", label: "Complete" },
17
+ failed: { icon: "✗", color: "red", label: "Failed" },
18
+ };
19
+ function StatusBadge({ status, compact = false, padded = false }) {
20
+ const config = STATUS_CONFIG[status] ?? STATUS_CONFIG.NOT_STARTED;
21
+ if (compact) {
22
+ return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: config.color }, config.icon);
23
+ }
24
+ const text = `${config.icon} ${config.label}`;
25
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: config.color }, padded ? text.padEnd(14) : text));
26
+ }
27
+ //# sourceMappingURL=StatusBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/StatusBadge.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AAuBH,kCAaC;AAlCD,sDAAgD;AAShD,MAAM,aAAa,GAAmE;IACpF,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE;IAC/D,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;IACzD,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IACpD,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IAC3D,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpD,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;IACvD,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACvD,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IAC1D,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;CACrD,CAAC;AAEF,SAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAoB;IACvF,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC;IAElE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,qCAAC,qBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAG,MAAM,CAAC,IAAI,CAAQ,CAAC;IACzD,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;IAC9C,OAAO,CACL,qCAAC,qBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IACtB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAC3B,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Shared view layout component
3
+ */
4
+ import type { ViewType, FilterType } from "../types.js";
5
+ interface ViewLayoutProps {
6
+ view: ViewType;
7
+ filter?: FilterType;
8
+ title?: string;
9
+ hasProviders?: boolean;
10
+ isTracking?: boolean;
11
+ loading?: boolean;
12
+ loadingText?: string;
13
+ error?: string | null;
14
+ children: React.ReactNode;
15
+ }
16
+ export declare function ViewLayout({ view, filter, title, hasProviders, isTracking, loading, loadingText, error, children, }: ViewLayoutProps): React.ReactElement;
17
+ export {};
18
+ //# 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;AAIxD,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,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,MAAc,EACd,KAAK,EACL,YAAoB,EACpB,UAAkB,EAClB,OAAe,EACf,WAA0B,EAC1B,KAAY,EACZ,QAAQ,GACT,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAqBtC"}