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

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 (197) hide show
  1. package/README.md +0 -40
  2. package/dist/cli/cli.js +0 -50
  3. package/dist/cli/cli.js.map +1 -1
  4. package/dist/cli/lib/cli.d.ts.map +1 -1
  5. package/dist/cli/lib/cli.js +5 -27
  6. package/dist/cli/lib/cli.js.map +1 -1
  7. package/dist/stages/timelock.d.ts.map +1 -1
  8. package/dist/stages/timelock.js +4 -5
  9. package/dist/stages/timelock.js.map +1 -1
  10. package/dist/tracker/cache.d.ts.map +1 -1
  11. package/dist/tracker/cache.js +0 -4
  12. package/dist/tracker/cache.js.map +1 -1
  13. package/package.json +2 -6
  14. package/dist/cli/tui/App.d.ts +0 -13
  15. package/dist/cli/tui/App.d.ts.map +0 -1
  16. package/dist/cli/tui/App.js +0 -146
  17. package/dist/cli/tui/App.js.map +0 -1
  18. package/dist/cli/tui/components/CollapsibleSection.d.ts +0 -20
  19. package/dist/cli/tui/components/CollapsibleSection.d.ts.map +0 -1
  20. package/dist/cli/tui/components/CollapsibleSection.js +0 -29
  21. package/dist/cli/tui/components/CollapsibleSection.js.map +0 -1
  22. package/dist/cli/tui/components/ConfirmDialog.d.ts +0 -14
  23. package/dist/cli/tui/components/ConfirmDialog.d.ts.map +0 -1
  24. package/dist/cli/tui/components/ConfirmDialog.js +0 -29
  25. package/dist/cli/tui/components/ConfirmDialog.js.map +0 -1
  26. package/dist/cli/tui/components/CopyableText.d.ts +0 -23
  27. package/dist/cli/tui/components/CopyableText.d.ts.map +0 -1
  28. package/dist/cli/tui/components/CopyableText.js +0 -49
  29. package/dist/cli/tui/components/CopyableText.js.map +0 -1
  30. package/dist/cli/tui/components/EmptyState.d.ts +0 -11
  31. package/dist/cli/tui/components/EmptyState.d.ts.map +0 -1
  32. package/dist/cli/tui/components/EmptyState.js +0 -34
  33. package/dist/cli/tui/components/EmptyState.js.map +0 -1
  34. package/dist/cli/tui/components/ErrorDisplay.d.ts +0 -17
  35. package/dist/cli/tui/components/ErrorDisplay.d.ts.map +0 -1
  36. package/dist/cli/tui/components/ErrorDisplay.js +0 -66
  37. package/dist/cli/tui/components/ErrorDisplay.js.map +0 -1
  38. package/dist/cli/tui/components/Header.d.ts +0 -22
  39. package/dist/cli/tui/components/Header.d.ts.map +0 -1
  40. package/dist/cli/tui/components/Header.js +0 -73
  41. package/dist/cli/tui/components/Header.js.map +0 -1
  42. package/dist/cli/tui/components/KeyHelp.d.ts +0 -20
  43. package/dist/cli/tui/components/KeyHelp.d.ts.map +0 -1
  44. package/dist/cli/tui/components/KeyHelp.js +0 -136
  45. package/dist/cli/tui/components/KeyHelp.js.map +0 -1
  46. package/dist/cli/tui/components/ProposalRow.d.ts +0 -11
  47. package/dist/cli/tui/components/ProposalRow.d.ts.map +0 -1
  48. package/dist/cli/tui/components/ProposalRow.js +0 -106
  49. package/dist/cli/tui/components/ProposalRow.js.map +0 -1
  50. package/dist/cli/tui/components/ScrollIndicator.d.ts +0 -26
  51. package/dist/cli/tui/components/ScrollIndicator.d.ts.map +0 -1
  52. package/dist/cli/tui/components/ScrollIndicator.js +0 -59
  53. package/dist/cli/tui/components/ScrollIndicator.js.map +0 -1
  54. package/dist/cli/tui/components/SearchBar.d.ts +0 -12
  55. package/dist/cli/tui/components/SearchBar.d.ts.map +0 -1
  56. package/dist/cli/tui/components/SearchBar.js +0 -36
  57. package/dist/cli/tui/components/SearchBar.js.map +0 -1
  58. package/dist/cli/tui/components/Skeleton.d.ts +0 -22
  59. package/dist/cli/tui/components/Skeleton.d.ts.map +0 -1
  60. package/dist/cli/tui/components/Skeleton.js +0 -35
  61. package/dist/cli/tui/components/Skeleton.js.map +0 -1
  62. package/dist/cli/tui/components/Spinner.d.ts +0 -10
  63. package/dist/cli/tui/components/Spinner.d.ts.map +0 -1
  64. package/dist/cli/tui/components/Spinner.js +0 -24
  65. package/dist/cli/tui/components/Spinner.js.map +0 -1
  66. package/dist/cli/tui/components/StageProgress.d.ts +0 -12
  67. package/dist/cli/tui/components/StageProgress.d.ts.map +0 -1
  68. package/dist/cli/tui/components/StageProgress.js +0 -72
  69. package/dist/cli/tui/components/StageProgress.js.map +0 -1
  70. package/dist/cli/tui/components/StageRow.d.ts +0 -12
  71. package/dist/cli/tui/components/StageRow.d.ts.map +0 -1
  72. package/dist/cli/tui/components/StageRow.js +0 -106
  73. package/dist/cli/tui/components/StageRow.js.map +0 -1
  74. package/dist/cli/tui/components/StatusBadge.d.ts +0 -12
  75. package/dist/cli/tui/components/StatusBadge.d.ts.map +0 -1
  76. package/dist/cli/tui/components/StatusBadge.js +0 -27
  77. package/dist/cli/tui/components/StatusBadge.js.map +0 -1
  78. package/dist/cli/tui/components/StatusBar.d.ts +0 -12
  79. package/dist/cli/tui/components/StatusBar.d.ts.map +0 -1
  80. package/dist/cli/tui/components/StatusBar.js +0 -14
  81. package/dist/cli/tui/components/StatusBar.js.map +0 -1
  82. package/dist/cli/tui/components/Timeline.d.ts +0 -12
  83. package/dist/cli/tui/components/Timeline.d.ts.map +0 -1
  84. package/dist/cli/tui/components/Timeline.js +0 -91
  85. package/dist/cli/tui/components/Timeline.js.map +0 -1
  86. package/dist/cli/tui/components/Toast.d.ts +0 -13
  87. package/dist/cli/tui/components/Toast.d.ts.map +0 -1
  88. package/dist/cli/tui/components/Toast.js +0 -35
  89. package/dist/cli/tui/components/Toast.js.map +0 -1
  90. package/dist/cli/tui/components/TrackingProgress.d.ts +0 -24
  91. package/dist/cli/tui/components/TrackingProgress.d.ts.map +0 -1
  92. package/dist/cli/tui/components/TrackingProgress.js +0 -82
  93. package/dist/cli/tui/components/TrackingProgress.js.map +0 -1
  94. package/dist/cli/tui/components/ViewLayout.d.ts +0 -26
  95. package/dist/cli/tui/components/ViewLayout.d.ts.map +0 -1
  96. package/dist/cli/tui/components/ViewLayout.js +0 -57
  97. package/dist/cli/tui/components/ViewLayout.js.map +0 -1
  98. package/dist/cli/tui/components/VotingStats.d.ts +0 -11
  99. package/dist/cli/tui/components/VotingStats.d.ts.map +0 -1
  100. package/dist/cli/tui/components/VotingStats.js +0 -87
  101. package/dist/cli/tui/components/VotingStats.js.map +0 -1
  102. package/dist/cli/tui/config.d.ts +0 -42
  103. package/dist/cli/tui/config.d.ts.map +0 -1
  104. package/dist/cli/tui/config.js +0 -144
  105. package/dist/cli/tui/config.js.map +0 -1
  106. package/dist/cli/tui/hooks/index.d.ts +0 -12
  107. package/dist/cli/tui/hooks/index.d.ts.map +0 -1
  108. package/dist/cli/tui/hooks/index.js +0 -18
  109. package/dist/cli/tui/hooks/index.js.map +0 -1
  110. package/dist/cli/tui/hooks/useCache.d.ts +0 -12
  111. package/dist/cli/tui/hooks/useCache.d.ts.map +0 -1
  112. package/dist/cli/tui/hooks/useCache.js +0 -110
  113. package/dist/cli/tui/hooks/useCache.js.map +0 -1
  114. package/dist/cli/tui/hooks/useCliProcess.d.ts +0 -19
  115. package/dist/cli/tui/hooks/useCliProcess.d.ts.map +0 -1
  116. package/dist/cli/tui/hooks/useCliProcess.js +0 -135
  117. package/dist/cli/tui/hooks/useCliProcess.js.map +0 -1
  118. package/dist/cli/tui/hooks/useNavigation.d.ts +0 -40
  119. package/dist/cli/tui/hooks/useNavigation.d.ts.map +0 -1
  120. package/dist/cli/tui/hooks/useNavigation.js +0 -283
  121. package/dist/cli/tui/hooks/useNavigation.js.map +0 -1
  122. package/dist/cli/tui/hooks/useProposals.d.ts +0 -10
  123. package/dist/cli/tui/hooks/useProposals.d.ts.map +0 -1
  124. package/dist/cli/tui/hooks/useProposals.js +0 -215
  125. package/dist/cli/tui/hooks/useProposals.js.map +0 -1
  126. package/dist/cli/tui/hooks/useStageCalldata.d.ts +0 -17
  127. package/dist/cli/tui/hooks/useStageCalldata.d.ts.map +0 -1
  128. package/dist/cli/tui/hooks/useStageCalldata.js +0 -77
  129. package/dist/cli/tui/hooks/useStageCalldata.js.map +0 -1
  130. package/dist/cli/tui/hooks/useTracker.d.ts +0 -27
  131. package/dist/cli/tui/hooks/useTracker.d.ts.map +0 -1
  132. package/dist/cli/tui/hooks/useTracker.js +0 -205
  133. package/dist/cli/tui/hooks/useTracker.js.map +0 -1
  134. package/dist/cli/tui/index.d.ts +0 -15
  135. package/dist/cli/tui/index.d.ts.map +0 -1
  136. package/dist/cli/tui/index.js +0 -100
  137. package/dist/cli/tui/index.js.map +0 -1
  138. package/dist/cli/tui/ink-wrapper.d.ts +0 -43
  139. package/dist/cli/tui/ink-wrapper.d.ts.map +0 -1
  140. package/dist/cli/tui/ink-wrapper.js +0 -41
  141. package/dist/cli/tui/ink-wrapper.js.map +0 -1
  142. package/dist/cli/tui/types.d.ts +0 -37
  143. package/dist/cli/tui/types.d.ts.map +0 -1
  144. package/dist/cli/tui/types.js +0 -6
  145. package/dist/cli/tui/types.js.map +0 -1
  146. package/dist/cli/tui/utils/clipboard.d.ts +0 -7
  147. package/dist/cli/tui/utils/clipboard.d.ts.map +0 -1
  148. package/dist/cli/tui/utils/clipboard.js +0 -46
  149. package/dist/cli/tui/utils/clipboard.js.map +0 -1
  150. package/dist/cli/tui/utils/index.d.ts +0 -5
  151. package/dist/cli/tui/utils/index.d.ts.map +0 -1
  152. package/dist/cli/tui/utils/index.js +0 -13
  153. package/dist/cli/tui/utils/index.js.map +0 -1
  154. package/dist/cli/tui/utils/terminal.d.ts +0 -18
  155. package/dist/cli/tui/utils/terminal.d.ts.map +0 -1
  156. package/dist/cli/tui/utils/terminal.js +0 -26
  157. package/dist/cli/tui/utils/terminal.js.map +0 -1
  158. package/dist/cli/tui/utils/text.d.ts +0 -12
  159. package/dist/cli/tui/utils/text.d.ts.map +0 -1
  160. package/dist/cli/tui/utils/text.js +0 -30
  161. package/dist/cli/tui/utils/text.js.map +0 -1
  162. package/dist/cli/tui/views/CalldataView.d.ts +0 -12
  163. package/dist/cli/tui/views/CalldataView.d.ts.map +0 -1
  164. package/dist/cli/tui/views/CalldataView.js +0 -194
  165. package/dist/cli/tui/views/CalldataView.js.map +0 -1
  166. package/dist/cli/tui/views/DescriptionView.d.ts +0 -12
  167. package/dist/cli/tui/views/DescriptionView.d.ts.map +0 -1
  168. package/dist/cli/tui/views/DescriptionView.js +0 -182
  169. package/dist/cli/tui/views/DescriptionView.js.map +0 -1
  170. package/dist/cli/tui/views/ElectionView.d.ts +0 -12
  171. package/dist/cli/tui/views/ElectionView.d.ts.map +0 -1
  172. package/dist/cli/tui/views/ElectionView.js +0 -197
  173. package/dist/cli/tui/views/ElectionView.js.map +0 -1
  174. package/dist/cli/tui/views/HelpView.d.ts +0 -10
  175. package/dist/cli/tui/views/HelpView.d.ts.map +0 -1
  176. package/dist/cli/tui/views/HelpView.js +0 -159
  177. package/dist/cli/tui/views/HelpView.js.map +0 -1
  178. package/dist/cli/tui/views/ProposalDetail.d.ts +0 -14
  179. package/dist/cli/tui/views/ProposalDetail.d.ts.map +0 -1
  180. package/dist/cli/tui/views/ProposalDetail.js +0 -167
  181. package/dist/cli/tui/views/ProposalDetail.js.map +0 -1
  182. package/dist/cli/tui/views/ProposalList.d.ts +0 -17
  183. package/dist/cli/tui/views/ProposalList.d.ts.map +0 -1
  184. package/dist/cli/tui/views/ProposalList.js +0 -126
  185. package/dist/cli/tui/views/ProposalList.js.map +0 -1
  186. package/dist/cli/tui/views/SettingsView.d.ts +0 -12
  187. package/dist/cli/tui/views/SettingsView.d.ts.map +0 -1
  188. package/dist/cli/tui/views/SettingsView.js +0 -203
  189. package/dist/cli/tui/views/SettingsView.js.map +0 -1
  190. package/dist/cli/tui/views/SimulationView.d.ts +0 -12
  191. package/dist/cli/tui/views/SimulationView.d.ts.map +0 -1
  192. package/dist/cli/tui/views/SimulationView.js +0 -112
  193. package/dist/cli/tui/views/SimulationView.js.map +0 -1
  194. package/dist/cli/tui/views/StageView.d.ts +0 -12
  195. package/dist/cli/tui/views/StageView.d.ts.map +0 -1
  196. package/dist/cli/tui/views/StageView.js +0 -215
  197. package/dist/cli/tui/views/StageView.js.map +0 -1
@@ -1,194 +0,0 @@
1
- "use strict";
2
- /**
3
- * Decoded calldata view with foldable long values (no truncation)
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CalldataView = CalldataView;
7
- const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
- const index_js_1 = require("../hooks/index.js");
9
- const ViewLayout_js_1 = require("../components/ViewLayout.js");
10
- const ScrollIndicator_js_1 = require("../components/ScrollIndicator.js");
11
- const index_js_2 = require("../utils/index.js");
12
- const FOLD_THRESHOLD = 100;
13
- function formatParameter(param, indent, keyPrefix) {
14
- const lines = [];
15
- const foldKey = `${keyPrefix}-${param.name}`;
16
- let value = param.displayValue;
17
- if (param.addressLabel) {
18
- value = `${param.displayValue} [${param.addressLabel}]`;
19
- }
20
- const isFoldable = value.length > FOLD_THRESHOLD;
21
- const wrappedLines = isFoldable ? (0, index_js_2.wrapText)(value, 80) : [value];
22
- lines.push({
23
- text: `${param.name} (${param.type}): ${wrappedLines[0]}`,
24
- indent,
25
- foldable: isFoldable,
26
- foldKey: isFoldable ? foldKey : undefined,
27
- foldedLineCount: isFoldable ? wrappedLines.length - 1 : undefined,
28
- });
29
- if (isFoldable && wrappedLines.length > 1) {
30
- for (let i = 1; i < wrappedLines.length; i++) {
31
- lines.push({
32
- text: wrappedLines[i],
33
- indent: indent + 1,
34
- foldable: false,
35
- isFoldedContent: true,
36
- foldKey,
37
- });
38
- }
39
- }
40
- if (param.nested) {
41
- lines.push({ text: "└─ [NESTED]", indent: indent + 1, foldable: false });
42
- lines.push(...formatDecodedCalldata(param.nested, indent + 2, `${foldKey}-nested`));
43
- }
44
- if (param.nestedArray && param.nestedArray.length > 0) {
45
- param.nestedArray.forEach((nested, i) => {
46
- lines.push({ text: `[${i}]:`, indent: indent + 1, foldable: false });
47
- lines.push(...formatDecodedCalldata(nested, indent + 2, `${foldKey}-arr-${i}`));
48
- });
49
- }
50
- return lines;
51
- }
52
- function formatDecodedCalldata(decoded, indent = 0, keyPrefix = "root") {
53
- const lines = [];
54
- let header;
55
- if (decoded.isRetryable) {
56
- header = `Retryable Ticket → ${decoded.targetChain}`;
57
- }
58
- else if (decoded.signature) {
59
- header = decoded.signature;
60
- }
61
- else {
62
- header = `Unknown function (${decoded.selector})`;
63
- }
64
- lines.push({ text: header, indent, foldable: false });
65
- if (decoded.parameters) {
66
- decoded.parameters.forEach((param, i) => {
67
- lines.push(...formatParameter(param, indent + 1, `${keyPrefix}-p${i}`));
68
- });
69
- }
70
- return lines;
71
- }
72
- const RESERVED_LINES = 14;
73
- function CalldataView({ proposal, navigation, }) {
74
- const { state } = navigation;
75
- const stages = (0, ink_wrapper_js_1.useMemo)(() => proposal.checkpoint.cachedData.completedStages ?? [], [proposal.checkpoint.cachedData.completedStages]);
76
- const { actions, loading, error } = (0, index_js_1.useStageCalldata)(stages[0], stages);
77
- const [expandedKeys, setExpandedKeys] = (0, ink_wrapper_js_1.useState)(new Set());
78
- const safeActionIndex = Math.min(state.calldataActionIndex, Math.max(0, actions.length - 1));
79
- const currentAction = actions.length > 0 ? actions[safeActionIndex] : undefined;
80
- const allLines = currentAction ? formatDecodedCalldata(currentAction.decoded) : [];
81
- const displayLines = allLines.filter((line) => {
82
- if (!line.isFoldedContent)
83
- return true;
84
- return line.foldKey && expandedKeys.has(line.foldKey);
85
- });
86
- const visibleCount = (0, index_js_2.getVisibleRows)(RESERVED_LINES);
87
- const allFoldableKeys = allLines.filter((l) => l.foldable && l.foldKey).map((l) => l.foldKey);
88
- (0, ink_wrapper_js_1.useInput)((input, key) => {
89
- if (input === "b" || key.escape) {
90
- navigation.back();
91
- }
92
- else if (key.upArrow || input === "k") {
93
- navigation.moveUp();
94
- }
95
- else if (key.downArrow || input === "j") {
96
- navigation.moveDown(displayLines.length);
97
- }
98
- else if (key.pageUp || (key.ctrl && input === "u")) {
99
- navigation.pageUp(displayLines.length);
100
- }
101
- else if (key.pageDown || (key.ctrl && input === "d")) {
102
- navigation.pageDown(displayLines.length);
103
- }
104
- else if (key.leftArrow) {
105
- navigation.prevAction();
106
- }
107
- else if (key.rightArrow) {
108
- navigation.nextAction(actions.length);
109
- }
110
- else if (input === "e") {
111
- setExpandedKeys(new Set(allFoldableKeys));
112
- navigation.goToTop();
113
- }
114
- else if (input === "c") {
115
- setExpandedKeys(new Set());
116
- navigation.goToTop();
117
- }
118
- else if (input === "g") {
119
- navigation.goToTop();
120
- }
121
- else if (input === "G") {
122
- navigation.goToBottom(displayLines.length);
123
- }
124
- else if (key.return) {
125
- const safeIdx = Math.max(0, Math.min(state.scrollOffset, displayLines.length - 1));
126
- const currentLine = displayLines[safeIdx];
127
- if (currentLine?.foldable && currentLine.foldKey) {
128
- setExpandedKeys((prev) => {
129
- const next = new Set(prev);
130
- if (next.has(currentLine.foldKey)) {
131
- next.delete(currentLine.foldKey);
132
- }
133
- else {
134
- next.add(currentLine.foldKey);
135
- }
136
- return next;
137
- });
138
- }
139
- }
140
- else if (input === "?") {
141
- navigation.goToHelp();
142
- }
143
- });
144
- // Clamp scrollOffset to valid range in case displayLines shrunk after fold collapse
145
- const safeOffset = Math.max(0, Math.min(state.scrollOffset, displayLines.length - 1));
146
- const visibleLines = displayLines.slice(safeOffset, safeOffset + visibleCount);
147
- const shortTitle = proposal.title.length > 30
148
- ? proposal.title.substring(0, 30) + "..."
149
- : proposal.title;
150
- const breadcrumb = ["Proposals", shortTitle, "Calldata"];
151
- const keyHelpContext = {
152
- calldataActionCount: actions.length,
153
- currentActionIndex: safeActionIndex,
154
- };
155
- if (actions.length === 0) {
156
- return (ink_wrapper_js_1.React.createElement(ViewLayout_js_1.ViewLayout, { view: "calldata", loading: loading, loadingText: "Decoding calldata...", skeletonType: "text", error: error, breadcrumb: breadcrumb },
157
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "No calldata to display")));
158
- }
159
- return (ink_wrapper_js_1.React.createElement(ViewLayout_js_1.ViewLayout, { view: "calldata", loading: loading, loadingText: "Decoding calldata...", skeletonType: "text", error: error, breadcrumb: breadcrumb, keyHelpContext: keyHelpContext },
160
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
161
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" },
162
- "Action ",
163
- safeActionIndex + 1,
164
- "/",
165
- actions.length),
166
- actions.length > 1 && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " (\u2190 \u2192 navigate)"),
167
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " (Enter toggle, e=expand all, c=collapse all)")),
168
- currentAction && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", marginBottom: 1 },
169
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
170
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Target: "),
171
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, currentAction.target)),
172
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
173
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Value: "),
174
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, currentAction.value)))),
175
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
176
- displayLines.length > visibleCount && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
177
- ink_wrapper_js_1.React.createElement(ScrollIndicator_js_1.ScrollPosition, { scrollOffset: safeOffset, visibleRows: visibleCount, totalItems: displayLines.length }))),
178
- ink_wrapper_js_1.React.createElement(ScrollIndicator_js_1.ScrollIndicatorTop, { scrollOffset: safeOffset, unit: "lines" }),
179
- visibleLines.map((line, i) => {
180
- const prefix = " ".repeat(line.indent);
181
- const isExpanded = line.foldKey && expandedKeys.has(line.foldKey);
182
- const foldIndicator = line.foldable
183
- ? isExpanded
184
- ? "[-] "
185
- : `[+${line.foldedLineCount ?? 0}] `
186
- : "";
187
- return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { key: i },
188
- prefix,
189
- line.foldable && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, foldIndicator),
190
- line.text));
191
- }),
192
- ink_wrapper_js_1.React.createElement(ScrollIndicator_js_1.ScrollIndicatorBottom, { scrollOffset: safeOffset, visibleRows: visibleCount, totalItems: displayLines.length, unit: "lines" }))));
193
- }
194
- //# sourceMappingURL=CalldataView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CalldataView.js","sourceRoot":"","sources":["../../../../src/cli/tui/views/CalldataView.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Full proposal description view with markdown rendering
3
- */
4
- import type { ProposalListItem } from "../types.js";
5
- import type { UseNavigationResult } from "../hooks/index.js";
6
- interface DescriptionViewProps {
7
- proposal: ProposalListItem;
8
- navigation: UseNavigationResult;
9
- }
10
- export declare function DescriptionView({ proposal, navigation, }: DescriptionViewProps): React.ReactElement;
11
- export {};
12
- //# sourceMappingURL=DescriptionView.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DescriptionView.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/views/DescriptionView.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAS7D,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAiKD,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,UAAU,GACX,EAAE,oBAAoB,GAAG,KAAK,CAAC,YAAY,CA4D3C"}
@@ -1,182 +0,0 @@
1
- "use strict";
2
- /**
3
- * Full proposal description view with markdown rendering
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DescriptionView = DescriptionView;
7
- const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
- const ViewLayout_js_1 = require("../components/ViewLayout.js");
9
- const ScrollIndicator_js_1 = require("../components/ScrollIndicator.js");
10
- const index_js_1 = require("../utils/index.js");
11
- function getDescription(proposal) {
12
- const stages = proposal.checkpoint.cachedData.completedStages ?? [];
13
- const createdStage = stages.find((s) => s.type === "PROPOSAL_CREATED");
14
- if (createdStage?.data) {
15
- const data = createdStage.data;
16
- if (data.description) {
17
- return data.description;
18
- }
19
- }
20
- return "No description available";
21
- }
22
- function parseMarkdown(text, width) {
23
- const result = [];
24
- const lines = text.split("\n");
25
- // Guard against very narrow terminals
26
- const safeWidth = Math.max(20, width);
27
- for (const rawLine of lines) {
28
- const trimmed = rawLine.trim();
29
- // Empty line
30
- if (trimmed.length === 0) {
31
- result.push({ text: "", type: "normal", indent: 0 });
32
- continue;
33
- }
34
- // Horizontal rule
35
- if (/^[-*_]{3,}$/.test(trimmed)) {
36
- result.push({ text: "─".repeat(Math.min(safeWidth - 4, 60)), type: "separator", indent: 0 });
37
- continue;
38
- }
39
- // Headers
40
- if (trimmed.startsWith("### ")) {
41
- result.push({ text: trimmed.slice(4), type: "h3", indent: 0 });
42
- continue;
43
- }
44
- if (trimmed.startsWith("## ")) {
45
- result.push({ text: trimmed.slice(3), type: "h2", indent: 0 });
46
- continue;
47
- }
48
- if (trimmed.startsWith("# ")) {
49
- result.push({ text: trimmed.slice(2), type: "h1", indent: 0 });
50
- continue;
51
- }
52
- // Bullet points
53
- if (/^[-*+] /.test(trimmed)) {
54
- const bulletText = trimmed.slice(2);
55
- wrapTextToLines(bulletText, safeWidth - 6, "bullet", 2, result);
56
- continue;
57
- }
58
- // Numbered lists
59
- if (/^\d+\. /.test(trimmed)) {
60
- const match = trimmed.match(/^(\d+)\. /);
61
- if (match) {
62
- const numText = trimmed.slice(match[0].length);
63
- const textWidth = safeWidth - 6;
64
- result.push({ text: `${match[1]}. ${numText.slice(0, textWidth)}`, type: "bullet", indent: 0 });
65
- if (numText.length > textWidth) {
66
- wrapTextToLines(numText.slice(textWidth), textWidth, "normal", 3, result);
67
- }
68
- continue;
69
- }
70
- }
71
- // Code blocks (just show as-is with code styling)
72
- if (trimmed.startsWith("```")) {
73
- continue; // Skip code fence markers
74
- }
75
- // Links - simplify [text](url) to just text
76
- const processedLine = trimmed.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1");
77
- // Normal paragraph
78
- wrapTextToLines(processedLine, safeWidth - 4, "normal", 0, result);
79
- }
80
- return result;
81
- }
82
- function wrapTextToLines(text, width, type, indent, result) {
83
- const safeWidth = Math.max(10, width);
84
- const words = text.split(/\s+/);
85
- let currentLine = "";
86
- for (const word of words) {
87
- if (currentLine.length === 0) {
88
- currentLine = word;
89
- }
90
- else if (currentLine.length + 1 + word.length <= safeWidth) {
91
- currentLine += " " + word;
92
- }
93
- else {
94
- result.push({ text: currentLine, type, indent });
95
- currentLine = word;
96
- // Continuation lines of bullets get extra indent
97
- if (type === "bullet" && indent === 2) {
98
- indent = 4;
99
- }
100
- }
101
- }
102
- if (currentLine.length > 0) {
103
- result.push({ text: currentLine, type, indent });
104
- }
105
- }
106
- const RESERVED_LINES = 8;
107
- function FormattedLineComponent({ line }) {
108
- const indent = " ".repeat(line.indent);
109
- switch (line.type) {
110
- case "h1":
111
- return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true, color: "cyan" },
112
- indent,
113
- "\u2550 ",
114
- line.text));
115
- case "h2":
116
- return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true, color: "yellow" },
117
- indent,
118
- "\u25B6 ",
119
- line.text));
120
- case "h3":
121
- return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true },
122
- indent,
123
- "\u2022 ",
124
- line.text));
125
- case "bullet":
126
- return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null,
127
- indent,
128
- "\u2022 ",
129
- line.text));
130
- case "separator":
131
- return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, line.text);
132
- default:
133
- return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null,
134
- indent,
135
- line.text);
136
- }
137
- }
138
- function DescriptionView({ proposal, navigation, }) {
139
- const { state } = navigation;
140
- const description = getDescription(proposal);
141
- const terminalWidth = process.stdout.columns || 80;
142
- const lines = (0, ink_wrapper_js_1.useMemo)(() => parseMarkdown(description, terminalWidth - 4), [description, terminalWidth]);
143
- const visibleCount = (0, index_js_1.getVisibleRows)(RESERVED_LINES);
144
- const visibleLines = lines.slice(state.scrollOffset, state.scrollOffset + visibleCount);
145
- (0, ink_wrapper_js_1.useInput)((input, key) => {
146
- if (input === "b" || key.escape) {
147
- navigation.back();
148
- }
149
- else if (key.upArrow || input === "k") {
150
- navigation.moveUp();
151
- }
152
- else if (key.downArrow || input === "j") {
153
- navigation.moveDown(lines.length);
154
- }
155
- else if (key.pageUp || (key.ctrl && input === "u")) {
156
- navigation.pageUp(lines.length);
157
- }
158
- else if (key.pageDown || (key.ctrl && input === "d")) {
159
- navigation.pageDown(lines.length);
160
- }
161
- else if (input === "g") {
162
- navigation.goToTop();
163
- }
164
- else if (input === "G") {
165
- navigation.goToBottom(lines.length);
166
- }
167
- else if (input === "?") {
168
- navigation.goToHelp();
169
- }
170
- });
171
- const shortTitle = proposal.title.length > 30
172
- ? proposal.title.substring(0, 30) + "..."
173
- : proposal.title;
174
- const breadcrumb = ["Proposals", shortTitle, "Description"];
175
- return (ink_wrapper_js_1.React.createElement(ViewLayout_js_1.ViewLayout, { view: "description", title: "Proposal Description", breadcrumb: breadcrumb },
176
- lines.length > visibleCount && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
177
- ink_wrapper_js_1.React.createElement(ScrollIndicator_js_1.ScrollPosition, { scrollOffset: state.scrollOffset, visibleRows: visibleCount, totalItems: lines.length }))),
178
- ink_wrapper_js_1.React.createElement(ScrollIndicator_js_1.ScrollIndicatorTop, { scrollOffset: state.scrollOffset, unit: "lines" }),
179
- visibleLines.map((line, i) => (ink_wrapper_js_1.React.createElement(FormattedLineComponent, { key: i, line: line }))),
180
- ink_wrapper_js_1.React.createElement(ScrollIndicator_js_1.ScrollIndicatorBottom, { scrollOffset: state.scrollOffset, visibleRows: visibleCount, totalItems: lines.length, unit: "lines" })));
181
- }
182
- //# sourceMappingURL=DescriptionView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DescriptionView.js","sourceRoot":"","sources":["../../../../src/cli/tui/views/DescriptionView.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Security Council Election Status View
3
- */
4
- import type { UseNavigationResult } from "../hooks/index.js";
5
- import type { ProviderBundle } from "../../lib/cli.js";
6
- interface ElectionViewProps {
7
- navigation: UseNavigationResult;
8
- providers?: ProviderBundle;
9
- }
10
- export declare function ElectionView({ navigation, providers }: ElectionViewProps): React.ReactElement;
11
- export {};
12
- //# sourceMappingURL=ElectionView.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ElectionView.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/views/ElectionView.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,UAAU,iBAAiB;IACzB,UAAU,EAAE,mBAAmB,CAAC;IAChC,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AA8BD,wBAAgB,YAAY,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CA8J7F"}
@@ -1,197 +0,0 @@
1
- "use strict";
2
- /**
3
- * Security Council Election Status View
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ElectionView = ElectionView;
7
- const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
- const react_1 = require("react");
9
- const ViewLayout_js_1 = require("../components/ViewLayout.js");
10
- const election_js_1 = require("../../../election.js");
11
- function formatTimestamp(ts) {
12
- return new Date(ts * 1000).toLocaleString();
13
- }
14
- function PhaseIcon({ phase }) {
15
- switch (phase) {
16
- case "COMPLETED":
17
- return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, "\u2713");
18
- case "MEMBER_ELECTION":
19
- case "NOMINEE_SELECTION":
20
- return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, "\u25CF");
21
- case "VETTING_PERIOD":
22
- return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" }, "\u25D0");
23
- case "PENDING_EXECUTION":
24
- return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "magenta" }, "\u2192");
25
- default:
26
- return ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "\u25CB");
27
- }
28
- }
29
- function ElectionView({ navigation, providers }) {
30
- const [data, setData] = (0, react_1.useState)({
31
- status: null,
32
- proposals: [],
33
- loading: true,
34
- error: null,
35
- warning: null,
36
- });
37
- const [selectedIndex, setSelectedIndex] = (0, react_1.useState)(0);
38
- // Reset selection when proposals change to avoid out-of-bounds index
39
- (0, react_1.useEffect)(() => {
40
- setSelectedIndex(0);
41
- }, [data.proposals.length]);
42
- (0, react_1.useEffect)(() => {
43
- if (!providers) {
44
- setData({
45
- status: null,
46
- proposals: [],
47
- loading: false,
48
- error: "RPC providers required. Use --l2-rpc and --l1-rpc options.",
49
- warning: null,
50
- });
51
- return;
52
- }
53
- let cancelled = false;
54
- const loadElectionData = async () => {
55
- try {
56
- setData((prev) => ({ ...prev, loading: true, error: null }));
57
- const status = await (0, election_js_1.checkElectionStatus)(providers.l2Provider, providers.l1Provider);
58
- if (cancelled)
59
- return;
60
- const proposals = [];
61
- let failedCount = 0;
62
- if (status.electionCount > 0) {
63
- const startIndex = Math.max(1, status.electionCount - 2);
64
- for (let i = status.electionCount; i >= startIndex; i--) {
65
- if (cancelled)
66
- return;
67
- try {
68
- const proposal = await (0, election_js_1.trackElectionProposal)(i, providers.l2Provider, providers.l1Provider);
69
- proposals.push(proposal);
70
- }
71
- catch {
72
- failedCount++;
73
- }
74
- }
75
- }
76
- if (!cancelled) {
77
- setData({
78
- status,
79
- proposals,
80
- loading: false,
81
- error: failedCount > 0 && proposals.length === 0
82
- ? `Failed to load ${failedCount} election(s)`
83
- : null,
84
- warning: failedCount > 0 && proposals.length > 0
85
- ? `Loaded ${proposals.length} election(s), ${failedCount} failed`
86
- : null,
87
- });
88
- }
89
- }
90
- catch (err) {
91
- if (!cancelled) {
92
- setData({
93
- status: null,
94
- proposals: [],
95
- loading: false,
96
- error: err instanceof Error ? err.message : String(err),
97
- warning: null,
98
- });
99
- }
100
- }
101
- };
102
- loadElectionData();
103
- return () => {
104
- cancelled = true;
105
- };
106
- }, [providers]);
107
- (0, ink_wrapper_js_1.useInput)((input, key) => {
108
- if (input === "b" || key.escape) {
109
- navigation.back();
110
- }
111
- else if (key.upArrow || input === "k") {
112
- setSelectedIndex((prev) => Math.max(0, prev - 1));
113
- }
114
- else if ((key.downArrow || input === "j") && data.proposals.length > 0) {
115
- setSelectedIndex((prev) => Math.min(data.proposals.length - 1, prev + 1));
116
- }
117
- else if (input === "g") {
118
- setSelectedIndex(0);
119
- }
120
- else if (input === "G" && data.proposals.length > 0) {
121
- setSelectedIndex(data.proposals.length - 1);
122
- }
123
- else if (input === "?") {
124
- navigation.goToHelp();
125
- }
126
- });
127
- const { status, proposals, warning } = data;
128
- return (ink_wrapper_js_1.React.createElement(ViewLayout_js_1.ViewLayout, { view: "election", hasProviders: !!providers, isTracking: data.loading, loading: data.loading, loadingText: "Loading election status...", skeletonType: "detail", error: data.error },
129
- warning && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
130
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" },
131
- "[Warning] ",
132
- warning))),
133
- status && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", marginBottom: 1 },
134
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true }, "Security Council Election Status"),
135
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 1, flexDirection: "column" },
136
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
137
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Election Count: "),
138
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, status.electionCount)),
139
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
140
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Current Cohort: "),
141
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: status.cohort === 0 ? "cyan" : "magenta" }, status.cohort === 0 ? "FIRST" : "SECOND")),
142
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
143
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Can Create Election: "),
144
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: status.canCreateElection ? "green" : "gray" }, status.canCreateElection ? "Yes" : "No")),
145
- !status.canCreateElection && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
146
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Next Election: "),
147
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, formatTimestamp(status.nextElectionTimestamp)),
148
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
149
- " (",
150
- status.timeUntilElection,
151
- ")")))))),
152
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
153
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true }, "Recent Elections"),
154
- proposals.length === 0 ? (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray", marginLeft: 1 }, "No elections found")) : (proposals.map((election, i) => (ink_wrapper_js_1.React.createElement(ElectionItem, { key: election.electionIndex, election: election, isSelected: i === selectedIndex })))))));
155
- }
156
- function getPhaseColor(phase) {
157
- if (phase === "COMPLETED")
158
- return "green";
159
- if (phase === "NOT_STARTED")
160
- return "gray";
161
- return "yellow";
162
- }
163
- function ElectionItem({ election, isSelected }) {
164
- return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 1, flexDirection: "column" },
165
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
166
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined }, isSelected ? "> " : " "),
167
- ink_wrapper_js_1.React.createElement(PhaseIcon, { phase: election.phase }),
168
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, " "),
169
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: isSelected ? "cyan" : undefined, bold: isSelected },
170
- "Election #",
171
- election.electionIndex),
172
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " - "),
173
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: getPhaseColor(election.phase) }, election.phase.replace(/_/g, " "))),
174
- isSelected && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 4, flexDirection: "column" },
175
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
176
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Cohort: "),
177
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, election.cohort === 0 ? "FIRST" : "SECOND")),
178
- election.nomineeProposalId && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
179
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Nominee State: "),
180
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, election.nomineeProposalState))),
181
- election.memberProposalId && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
182
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Member State: "),
183
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, election.memberProposalState))),
184
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
185
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Compliant Nominees: "),
186
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: election.compliantNomineeCount >= election.targetNomineeCount ? "green" : "yellow" },
187
- election.compliantNomineeCount,
188
- "/",
189
- election.targetNomineeCount)),
190
- election.isInVettingPeriod && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
191
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" },
192
- "In vetting period until block ",
193
- election.vettingDeadline))),
194
- election.canProceedToMemberPhase && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
195
- ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green" }, "Ready to trigger member election!")))))));
196
- }
197
- //# sourceMappingURL=ElectionView.js.map