@gzeoneth/gov-tracker 0.2.1-beta.03fa52b → 0.2.1-beta.11b2e86

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 (201) hide show
  1. package/README.md +18 -18
  2. package/dist/cli/cli.js +32 -0
  3. package/dist/cli/cli.js.map +1 -1
  4. package/dist/cli/tui/App.d.ts +11 -0
  5. package/dist/cli/tui/App.d.ts.map +1 -0
  6. package/dist/cli/tui/App.js +123 -0
  7. package/dist/cli/tui/App.js.map +1 -0
  8. package/dist/cli/tui/components/CopyableText.d.ts +23 -0
  9. package/dist/cli/tui/components/CopyableText.d.ts.map +1 -0
  10. package/dist/cli/tui/components/CopyableText.js +49 -0
  11. package/dist/cli/tui/components/CopyableText.js.map +1 -0
  12. package/dist/cli/tui/components/Header.d.ts +20 -0
  13. package/dist/cli/tui/components/Header.d.ts.map +1 -0
  14. package/dist/cli/tui/components/Header.js +47 -0
  15. package/dist/cli/tui/components/Header.js.map +1 -0
  16. package/dist/cli/tui/components/KeyHelp.d.ts +19 -0
  17. package/dist/cli/tui/components/KeyHelp.d.ts.map +1 -0
  18. package/dist/cli/tui/components/KeyHelp.js +60 -0
  19. package/dist/cli/tui/components/KeyHelp.js.map +1 -0
  20. package/dist/cli/tui/components/ProposalRow.d.ts +11 -0
  21. package/dist/cli/tui/components/ProposalRow.d.ts.map +1 -0
  22. package/dist/cli/tui/components/ProposalRow.js +92 -0
  23. package/dist/cli/tui/components/ProposalRow.js.map +1 -0
  24. package/dist/cli/tui/components/ScrollIndicator.d.ts +19 -0
  25. package/dist/cli/tui/components/ScrollIndicator.d.ts.map +1 -0
  26. package/dist/cli/tui/components/ScrollIndicator.js +50 -0
  27. package/dist/cli/tui/components/ScrollIndicator.js.map +1 -0
  28. package/dist/cli/tui/components/SearchBar.d.ts +12 -0
  29. package/dist/cli/tui/components/SearchBar.d.ts.map +1 -0
  30. package/dist/cli/tui/components/SearchBar.js +36 -0
  31. package/dist/cli/tui/components/SearchBar.js.map +1 -0
  32. package/dist/cli/tui/components/Spinner.d.ts +10 -0
  33. package/dist/cli/tui/components/Spinner.d.ts.map +1 -0
  34. package/dist/cli/tui/components/Spinner.js +24 -0
  35. package/dist/cli/tui/components/Spinner.js.map +1 -0
  36. package/dist/cli/tui/components/StageProgress.d.ts +12 -0
  37. package/dist/cli/tui/components/StageProgress.d.ts.map +1 -0
  38. package/dist/cli/tui/components/StageProgress.js +41 -0
  39. package/dist/cli/tui/components/StageProgress.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 +80 -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 +22 -0
  49. package/dist/cli/tui/components/ViewLayout.d.ts.map +1 -0
  50. package/dist/cli/tui/components/ViewLayout.js +24 -0
  51. package/dist/cli/tui/components/ViewLayout.js.map +1 -0
  52. package/dist/cli/tui/components/VotingStats.d.ts +11 -0
  53. package/dist/cli/tui/components/VotingStats.d.ts.map +1 -0
  54. package/dist/cli/tui/components/VotingStats.js +87 -0
  55. package/dist/cli/tui/components/VotingStats.js.map +1 -0
  56. package/dist/cli/tui/hooks/index.d.ts +11 -0
  57. package/dist/cli/tui/hooks/index.d.ts.map +1 -0
  58. package/dist/cli/tui/hooks/index.js +18 -0
  59. package/dist/cli/tui/hooks/index.js.map +1 -0
  60. package/dist/cli/tui/hooks/useCache.d.ts +12 -0
  61. package/dist/cli/tui/hooks/useCache.d.ts.map +1 -0
  62. package/dist/cli/tui/hooks/useCache.js +52 -0
  63. package/dist/cli/tui/hooks/useCache.js.map +1 -0
  64. package/dist/cli/tui/hooks/useElectionData.d.ts +22 -0
  65. package/dist/cli/tui/hooks/useElectionData.d.ts.map +1 -0
  66. package/dist/cli/tui/hooks/useElectionData.js +133 -0
  67. package/dist/cli/tui/hooks/useElectionData.js.map +1 -0
  68. package/dist/cli/tui/hooks/useNavigation.d.ts +39 -0
  69. package/dist/cli/tui/hooks/useNavigation.d.ts.map +1 -0
  70. package/dist/cli/tui/hooks/useNavigation.js +173 -0
  71. package/dist/cli/tui/hooks/useNavigation.js.map +1 -0
  72. package/dist/cli/tui/hooks/useProposals.d.ts +10 -0
  73. package/dist/cli/tui/hooks/useProposals.d.ts.map +1 -0
  74. package/dist/cli/tui/hooks/useProposals.js +201 -0
  75. package/dist/cli/tui/hooks/useProposals.js.map +1 -0
  76. package/dist/cli/tui/hooks/useScrollableInput.d.ts +14 -0
  77. package/dist/cli/tui/hooks/useScrollableInput.d.ts.map +1 -0
  78. package/dist/cli/tui/hooks/useScrollableInput.js +44 -0
  79. package/dist/cli/tui/hooks/useScrollableInput.js.map +1 -0
  80. package/dist/cli/tui/hooks/useStageCalldata.d.ts +17 -0
  81. package/dist/cli/tui/hooks/useStageCalldata.d.ts.map +1 -0
  82. package/dist/cli/tui/hooks/useStageCalldata.js +77 -0
  83. package/dist/cli/tui/hooks/useStageCalldata.js.map +1 -0
  84. package/dist/cli/tui/index.d.ts +13 -0
  85. package/dist/cli/tui/index.d.ts.map +1 -0
  86. package/dist/cli/tui/index.js +96 -0
  87. package/dist/cli/tui/index.js.map +1 -0
  88. package/dist/cli/tui/ink-wrapper.d.ts +43 -0
  89. package/dist/cli/tui/ink-wrapper.d.ts.map +1 -0
  90. package/dist/cli/tui/ink-wrapper.js +41 -0
  91. package/dist/cli/tui/ink-wrapper.js.map +1 -0
  92. package/dist/cli/tui/types.d.ts +38 -0
  93. package/dist/cli/tui/types.d.ts.map +1 -0
  94. package/dist/cli/tui/types.js +6 -0
  95. package/dist/cli/tui/types.js.map +1 -0
  96. package/dist/cli/tui/utils/calldata-formatter.d.ts +7 -0
  97. package/dist/cli/tui/utils/calldata-formatter.d.ts.map +1 -0
  98. package/dist/cli/tui/utils/calldata-formatter.js +14 -0
  99. package/dist/cli/tui/utils/calldata-formatter.js.map +1 -0
  100. package/dist/cli/tui/utils/clipboard.d.ts +7 -0
  101. package/dist/cli/tui/utils/clipboard.d.ts.map +1 -0
  102. package/dist/cli/tui/utils/clipboard.js +46 -0
  103. package/dist/cli/tui/utils/clipboard.js.map +1 -0
  104. package/dist/cli/tui/utils/index.d.ts +16 -0
  105. package/dist/cli/tui/utils/index.d.ts.map +1 -0
  106. package/dist/cli/tui/utils/index.js +52 -0
  107. package/dist/cli/tui/utils/index.js.map +1 -0
  108. package/dist/cli/tui/utils/markdown-parser.d.ts +11 -0
  109. package/dist/cli/tui/utils/markdown-parser.d.ts.map +1 -0
  110. package/dist/cli/tui/utils/markdown-parser.js +77 -0
  111. package/dist/cli/tui/utils/markdown-parser.js.map +1 -0
  112. package/dist/cli/tui/utils/navigation.d.ts +17 -0
  113. package/dist/cli/tui/utils/navigation.d.ts.map +1 -0
  114. package/dist/cli/tui/utils/navigation.js +75 -0
  115. package/dist/cli/tui/utils/navigation.js.map +1 -0
  116. package/dist/cli/tui/utils/proposal-detail-helpers.d.ts +9 -0
  117. package/dist/cli/tui/utils/proposal-detail-helpers.d.ts.map +1 -0
  118. package/dist/cli/tui/utils/proposal-detail-helpers.js +21 -0
  119. package/dist/cli/tui/utils/proposal-detail-helpers.js.map +1 -0
  120. package/dist/cli/tui/utils/shortcuts.d.ts +17 -0
  121. package/dist/cli/tui/utils/shortcuts.d.ts.map +1 -0
  122. package/dist/cli/tui/utils/shortcuts.js +100 -0
  123. package/dist/cli/tui/utils/shortcuts.js.map +1 -0
  124. package/dist/cli/tui/utils/stage-formatter.d.ts +7 -0
  125. package/dist/cli/tui/utils/stage-formatter.d.ts.map +1 -0
  126. package/dist/cli/tui/utils/stage-formatter.js +14 -0
  127. package/dist/cli/tui/utils/stage-formatter.js.map +1 -0
  128. package/dist/cli/tui/utils/stage-status.d.ts +10 -0
  129. package/dist/cli/tui/utils/stage-status.d.ts.map +1 -0
  130. package/dist/cli/tui/utils/stage-status.js +64 -0
  131. package/dist/cli/tui/utils/stage-status.js.map +1 -0
  132. package/dist/cli/tui/utils/terminal.d.ts +18 -0
  133. package/dist/cli/tui/utils/terminal.d.ts.map +1 -0
  134. package/dist/cli/tui/utils/terminal.js +26 -0
  135. package/dist/cli/tui/utils/terminal.js.map +1 -0
  136. package/dist/cli/tui/utils/text.d.ts +7 -0
  137. package/dist/cli/tui/utils/text.d.ts.map +1 -0
  138. package/dist/cli/tui/utils/text.js +12 -0
  139. package/dist/cli/tui/utils/text.js.map +1 -0
  140. package/dist/cli/tui/utils/time.d.ts +19 -0
  141. package/dist/cli/tui/utils/time.d.ts.map +1 -0
  142. package/dist/cli/tui/utils/time.js +43 -0
  143. package/dist/cli/tui/utils/time.js.map +1 -0
  144. package/dist/cli/tui/views/CalldataView.d.ts +12 -0
  145. package/dist/cli/tui/views/CalldataView.d.ts.map +1 -0
  146. package/dist/cli/tui/views/CalldataView.js +110 -0
  147. package/dist/cli/tui/views/CalldataView.js.map +1 -0
  148. package/dist/cli/tui/views/DescriptionView.d.ts +12 -0
  149. package/dist/cli/tui/views/DescriptionView.d.ts.map +1 -0
  150. package/dist/cli/tui/views/DescriptionView.js +75 -0
  151. package/dist/cli/tui/views/DescriptionView.js.map +1 -0
  152. package/dist/cli/tui/views/ElectionView.d.ts +11 -0
  153. package/dist/cli/tui/views/ElectionView.d.ts.map +1 -0
  154. package/dist/cli/tui/views/ElectionView.js +193 -0
  155. package/dist/cli/tui/views/ElectionView.js.map +1 -0
  156. package/dist/cli/tui/views/HelpView.d.ts +10 -0
  157. package/dist/cli/tui/views/HelpView.d.ts.map +1 -0
  158. package/dist/cli/tui/views/HelpView.js +75 -0
  159. package/dist/cli/tui/views/HelpView.js.map +1 -0
  160. package/dist/cli/tui/views/ProposalDetail.d.ts +12 -0
  161. package/dist/cli/tui/views/ProposalDetail.d.ts.map +1 -0
  162. package/dist/cli/tui/views/ProposalDetail.js +103 -0
  163. package/dist/cli/tui/views/ProposalDetail.js.map +1 -0
  164. package/dist/cli/tui/views/ProposalList.d.ts +15 -0
  165. package/dist/cli/tui/views/ProposalList.d.ts.map +1 -0
  166. package/dist/cli/tui/views/ProposalList.js +154 -0
  167. package/dist/cli/tui/views/ProposalList.js.map +1 -0
  168. package/dist/cli/tui/views/SimulationView.d.ts +12 -0
  169. package/dist/cli/tui/views/SimulationView.d.ts.map +1 -0
  170. package/dist/cli/tui/views/SimulationView.js +110 -0
  171. package/dist/cli/tui/views/SimulationView.js.map +1 -0
  172. package/dist/cli/tui/views/StageView.d.ts +12 -0
  173. package/dist/cli/tui/views/StageView.d.ts.map +1 -0
  174. package/dist/cli/tui/views/StageView.js +109 -0
  175. package/dist/cli/tui/views/StageView.js.map +1 -0
  176. package/dist/cli/tui/views/registry.d.ts +18 -0
  177. package/dist/cli/tui/views/registry.d.ts.map +1 -0
  178. package/dist/cli/tui/views/registry.js +34 -0
  179. package/dist/cli/tui/views/registry.js.map +1 -0
  180. package/dist/constants.d.ts +14 -9
  181. package/dist/constants.d.ts.map +1 -1
  182. package/dist/constants.js +16 -11
  183. package/dist/constants.js.map +1 -1
  184. package/dist/data/bundled-cache.json +225 -225
  185. package/dist/election/status.d.ts.map +1 -1
  186. package/dist/election/status.js +4 -1
  187. package/dist/election/status.js.map +1 -1
  188. package/dist/index.d.ts +2 -1
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +2 -1
  191. package/dist/index.js.map +1 -1
  192. package/dist/tracker/checkpoint-helpers.d.ts +0 -1
  193. package/dist/tracker/checkpoint-helpers.d.ts.map +1 -1
  194. package/dist/tracker/checkpoint-helpers.js +1 -2
  195. package/dist/tracker/checkpoint-helpers.js.map +1 -1
  196. package/dist/types/election.d.ts +1 -1
  197. package/dist/types/election.d.ts.map +1 -1
  198. package/dist/utils/rpc-utils.d.ts.map +1 -1
  199. package/dist/utils/rpc-utils.js +2 -1
  200. package/dist/utils/rpc-utils.js.map +1 -1
  201. package/package.json +6 -2
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ /**
3
+ * Main proposal list view (cache-only)
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ProposalList = ProposalList;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const Header_js_1 = require("../components/Header.js");
9
+ const KeyHelp_js_1 = require("../components/KeyHelp.js");
10
+ const ProposalRow_js_1 = require("../components/ProposalRow.js");
11
+ const index_js_1 = require("../utils/index.js");
12
+ const SearchBar_js_1 = require("../components/SearchBar.js");
13
+ const RESERVED_LINES = 8;
14
+ function getEmptyStateMessage(searchQuery, filter, totalCount) {
15
+ if (searchQuery) {
16
+ return `No results for "${searchQuery}"`;
17
+ }
18
+ if (totalCount === 0) {
19
+ return "Cache is empty";
20
+ }
21
+ return `No proposals match filter [${filter}]`;
22
+ }
23
+ function getEmptyStateHint(searchQuery, totalCount) {
24
+ if (searchQuery) {
25
+ return "Press / to modify search";
26
+ }
27
+ if (totalCount === 0) {
28
+ return "Run 'gov-tracker run' to populate";
29
+ }
30
+ return "Press Tab to change filter";
31
+ }
32
+ function ProposalList({ items, data, navigation, onQuit, onReload, }) {
33
+ const { state } = navigation;
34
+ const selectedIndex = state.selectedIndex;
35
+ const visibleRows = (0, index_js_1.getVisibleRows)(RESERVED_LINES);
36
+ const startIndex = Math.max(0, Math.min(selectedIndex - Math.floor(visibleRows / 2), Math.max(0, items.length - visibleRows)));
37
+ const visibleItems = items.slice(startIndex, startIndex + visibleRows);
38
+ const handleSearchInput = (input, key) => {
39
+ if (key.escape) {
40
+ navigation.clearSearch();
41
+ }
42
+ else if (key.return) {
43
+ navigation.finishSearch();
44
+ }
45
+ else if (key.backspace || key.delete) {
46
+ navigation.deleteSearchChar();
47
+ }
48
+ else if (input && input.length === 1 && !key.ctrl && !key.meta) {
49
+ navigation.appendSearchChar(input);
50
+ }
51
+ };
52
+ const handleNormalInput = (input, key) => {
53
+ const itemCount = items.length;
54
+ switch (true) {
55
+ case input === "q":
56
+ onQuit();
57
+ break;
58
+ case input === "/":
59
+ navigation.startSearch();
60
+ break;
61
+ case key.escape && !!state.searchQuery:
62
+ navigation.setSearchQuery("");
63
+ break;
64
+ case key.upArrow || input === "k":
65
+ navigation.moveUp();
66
+ break;
67
+ case key.downArrow || input === "j":
68
+ navigation.moveDown(itemCount);
69
+ break;
70
+ case key.pageUp || (key.ctrl && input === "u"):
71
+ navigation.pageUp(itemCount);
72
+ break;
73
+ case key.pageDown || (key.ctrl && input === "d"):
74
+ navigation.pageDown(itemCount);
75
+ break;
76
+ case key.return:
77
+ navigation.enter(items);
78
+ break;
79
+ case key.tab:
80
+ navigation.cycleFilter();
81
+ break;
82
+ case input === "e":
83
+ navigation.goToElection();
84
+ break;
85
+ case input === "g":
86
+ navigation.goToTop();
87
+ break;
88
+ case input === "G":
89
+ navigation.goToBottom(itemCount);
90
+ break;
91
+ case input === "R":
92
+ onReload();
93
+ break;
94
+ case input === "o":
95
+ navigation.cycleSort();
96
+ break;
97
+ case input === "?":
98
+ navigation.goToHelp();
99
+ break;
100
+ }
101
+ };
102
+ (0, ink_wrapper_js_1.useInput)((input, key) => {
103
+ if (state.isSearching) {
104
+ handleSearchInput(input, key);
105
+ }
106
+ else {
107
+ handleNormalInput(input, key);
108
+ }
109
+ });
110
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", height: "100%" },
111
+ ink_wrapper_js_1.React.createElement(Header_js_1.Header, { view: "list", filter: state.filter, sort: state.sort, stats: data?.stats ?? null, position: items.length > 0 ? { current: selectedIndex + 1, total: items.length } : undefined }),
112
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", paddingX: 1, flexGrow: 1 },
113
+ ink_wrapper_js_1.React.createElement(SearchBar_js_1.SearchBar, { query: state.searchQuery, isActive: state.isSearching, resultCount: items.length }),
114
+ items.length === 0 ? (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", alignItems: "center", marginY: 2 },
115
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
116
+ " ",
117
+ "____",
118
+ "\n",
119
+ " ",
120
+ "/ __ \\",
121
+ "\n",
122
+ " ",
123
+ "| | | |",
124
+ "\n",
125
+ " ",
126
+ "| | | |",
127
+ "\n",
128
+ " ",
129
+ "| |__| |",
130
+ "\n",
131
+ " ",
132
+ "\\____/",
133
+ "\n"),
134
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true, color: "yellow" }, "No proposals found"),
135
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, getEmptyStateMessage(state.searchQuery, state.filter, data?.stats?.total ?? 0)),
136
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginTop: 1 },
137
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" }, getEmptyStateHint(state.searchQuery, data?.stats?.total ?? 0))))) : (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
138
+ startIndex > 0 && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
139
+ " \u2191 ",
140
+ startIndex,
141
+ " more"),
142
+ visibleItems.map((item, i) => (ink_wrapper_js_1.React.createElement(ProposalRow_js_1.ProposalRow, { key: item.key, item: item, isSelected: startIndex + i === selectedIndex }))),
143
+ startIndex + visibleRows < items.length && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
144
+ " \u2193 ",
145
+ items.length - startIndex - visibleRows,
146
+ " more"))))),
147
+ ink_wrapper_js_1.React.createElement(KeyHelp_js_1.KeyHelp, { view: "list", context: {
148
+ filter: state.filter,
149
+ sort: state.sort,
150
+ isSearching: state.isSearching,
151
+ hasSearch: !!state.searchQuery,
152
+ } })));
153
+ }
154
+ //# sourceMappingURL=ProposalList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProposalList.js","sourceRoot":"","sources":["../../../../src/cli/tui/views/ProposalList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Simulation data view for displaying simulation data for Tenderly/Foundry
3
+ */
4
+ import type { ProposalListItem } from "../types.js";
5
+ import type { UseNavigationResult } from "../hooks/index.js";
6
+ interface SimulationViewProps {
7
+ proposal: ProposalListItem;
8
+ navigation: UseNavigationResult;
9
+ }
10
+ export declare function SimulationView({ proposal, navigation, }: SimulationViewProps): React.ReactElement;
11
+ export {};
12
+ //# sourceMappingURL=SimulationView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimulationView.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/views/SimulationView.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAQ7D,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,UAAU,GACX,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CA6G1C"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * Simulation data view for displaying simulation data for Tenderly/Foundry
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SimulationView = SimulationView;
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 index_js_2 = require("../utils/index.js");
11
+ const index_js_3 = require("../../../simulation/index.js");
12
+ function SimulationView({ proposal, navigation, }) {
13
+ const [selectedIndex, setSelectedIndex] = (0, ink_wrapper_js_1.useState)(0);
14
+ const [inputExpanded, setInputExpanded] = (0, ink_wrapper_js_1.useState)(false);
15
+ const stages = (0, ink_wrapper_js_1.useMemo)(() => (0, index_js_2.getStages)(proposal), [proposal]);
16
+ const { actions, loading, error } = (0, index_js_1.useStageCalldata)(stages[0]);
17
+ const simulations = (0, ink_wrapper_js_1.useMemo)(() => {
18
+ if (actions.length === 0)
19
+ return [];
20
+ const chainContext = "arb1";
21
+ const allSimulations = [];
22
+ for (const action of actions) {
23
+ const sims = (0, index_js_3.extractAllSimulationsFromDecoded)(action.decoded, chainContext);
24
+ allSimulations.push(...sims);
25
+ }
26
+ return allSimulations;
27
+ }, [actions]);
28
+ // Reset selection when simulations change to avoid out-of-bounds index
29
+ (0, ink_wrapper_js_1.useEffect)(() => {
30
+ setSelectedIndex(0);
31
+ setInputExpanded(false);
32
+ }, [simulations.length]);
33
+ (0, ink_wrapper_js_1.useInput)((input, key) => {
34
+ const maxIndex = Math.max(0, simulations.length - 1);
35
+ if (input === "b" || key.escape) {
36
+ navigation.back();
37
+ }
38
+ else if (key.upArrow || input === "k") {
39
+ setSelectedIndex((prev) => Math.max(0, prev - 1));
40
+ }
41
+ else if ((key.downArrow || input === "j") && simulations.length > 0) {
42
+ setSelectedIndex((prev) => Math.min(maxIndex, prev + 1));
43
+ }
44
+ else if (key.return) {
45
+ setInputExpanded((prev) => !prev);
46
+ }
47
+ else if (input === "g") {
48
+ setSelectedIndex(0);
49
+ }
50
+ else if (input === "G" && simulations.length > 0) {
51
+ setSelectedIndex(maxIndex);
52
+ }
53
+ else if (input === "?") {
54
+ navigation.goToHelp();
55
+ }
56
+ });
57
+ const safeIndex = Math.min(selectedIndex, Math.max(0, simulations.length - 1));
58
+ const currentSim = simulations.length > 0 ? simulations[safeIndex] : undefined;
59
+ const breadcrumb = (0, index_js_2.buildBreadcrumb)(proposal, "Simulation");
60
+ if (simulations.length === 0) {
61
+ return (ink_wrapper_js_1.React.createElement(ViewLayout_js_1.ViewLayout, { view: "simulation", title: "Simulation Data", loading: loading, loadingText: "Extracting simulations...", error: error, breadcrumb: breadcrumb },
62
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "No simulatable calls found in this proposal")));
63
+ }
64
+ return (ink_wrapper_js_1.React.createElement(ViewLayout_js_1.ViewLayout, { view: "simulation", title: "Simulation Data", loading: loading, loadingText: "Extracting simulations...", error: error, breadcrumb: breadcrumb },
65
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
66
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" },
67
+ "Simulation ",
68
+ safeIndex + 1,
69
+ "/",
70
+ simulations.length),
71
+ simulations.length > 1 && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, " (use \u2191\u2193 to navigate)")),
72
+ currentSim && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
73
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginBottom: 1 },
74
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true, color: "cyan" }, currentSim.label)),
75
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
76
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Type: "),
77
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, currentSim.simulation.type.toUpperCase())),
78
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
79
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Network ID: "),
80
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, currentSim.simulation.networkId)),
81
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
82
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "From: "),
83
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "blue" }, currentSim.simulation.from)),
84
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
85
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "To: "),
86
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "blue" }, currentSim.simulation.to)),
87
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
88
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Value: "),
89
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, currentSim.simulation.value)),
90
+ currentSim.simulation.type === "timelock" && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
91
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Operation ID: "),
92
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, currentSim.simulation.operationId))),
93
+ currentSim.batchIndex !== undefined && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
94
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Batch Index: "),
95
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, currentSim.batchIndex))),
96
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", marginTop: 1 },
97
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
98
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true }, "Input Data "),
99
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "yellow" }, inputExpanded ? "[-]" : `[+${Math.ceil(currentSim.simulation.input.length / 80)} lines]`),
100
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
101
+ " (Enter to toggle, ",
102
+ currentSim.simulation.input.length,
103
+ " chars)")),
104
+ inputExpanded ? ((0, index_js_2.wrapText)(currentSim.simulation.input, 80).map((line, i) => (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { key: i, marginLeft: 1 },
105
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, line))))) : (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 1 },
106
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, currentSim.simulation.input.slice(0, 80))))),
107
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginTop: 1 },
108
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Use this data with Tenderly or Foundry fork simulation"))))));
109
+ }
110
+ //# sourceMappingURL=SimulationView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimulationView.js","sourceRoot":"","sources":["../../../../src/cli/tui/views/SimulationView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Stage detail view showing full stage information
3
+ */
4
+ import type { ProposalListItem } from "../types.js";
5
+ import type { UseNavigationResult } from "../hooks/index.js";
6
+ interface StageViewProps {
7
+ proposal: ProposalListItem;
8
+ navigation: UseNavigationResult;
9
+ }
10
+ export declare function StageView({ proposal, navigation, }: StageViewProps): React.ReactElement;
11
+ export {};
12
+ //# sourceMappingURL=StageView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StageView.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/views/StageView.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAmB7D,UAAU,cAAc;IACtB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAID,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,UAAU,GACX,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA4GrC"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ /**
3
+ * Stage detail view showing full stage information
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StageView = StageView;
7
+ const ink_wrapper_js_1 = require("../ink-wrapper.js");
8
+ const useScrollableInput_js_1 = require("../hooks/useScrollableInput.js");
9
+ const ViewLayout_js_1 = require("../components/ViewLayout.js");
10
+ const StatusBadge_js_1 = require("../components/StatusBadge.js");
11
+ const ScrollIndicator_js_1 = require("../components/ScrollIndicator.js");
12
+ const index_js_1 = require("../utils/index.js");
13
+ const stage_metadata_js_1 = require("../../../utils/stage-metadata.js");
14
+ const constants_js_1 = require("../../../constants.js");
15
+ const RESERVED_LINES = 14;
16
+ function StageView({ proposal, navigation, }) {
17
+ const { state } = navigation;
18
+ const stages = (0, index_js_1.getStages)(proposal);
19
+ const safeIndex = stages.length > 0 ? Math.min(state.selectedStageIndex, stages.length - 1) : 0;
20
+ const stage = stages[safeIndex];
21
+ const stageTitle = stage ? (0, stage_metadata_js_1.formatStageTitle)(stage.type) : "";
22
+ const dataItems = stage ? (0, index_js_1.formatStageData)(stage) : [];
23
+ const visibleRows = (0, index_js_1.getVisibleRows)(RESERVED_LINES);
24
+ (0, useScrollableInput_js_1.useScrollableInput)({
25
+ navigation,
26
+ itemCount: dataItems.length,
27
+ extraHandlers: (input) => {
28
+ if (input === "?") {
29
+ navigation.goToHelp();
30
+ return true;
31
+ }
32
+ return false;
33
+ },
34
+ });
35
+ const breadcrumb = (0, index_js_1.buildBreadcrumb)(proposal, stageTitle || "Stage");
36
+ if (!stage) {
37
+ return (ink_wrapper_js_1.React.createElement(ViewLayout_js_1.ViewLayout, { view: "stage", title: stageTitle, breadcrumb: breadcrumb },
38
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Stage not found")));
39
+ }
40
+ const visibleItems = dataItems.slice(state.scrollOffset, state.scrollOffset + visibleRows);
41
+ return (ink_wrapper_js_1.React.createElement(ViewLayout_js_1.ViewLayout, { view: "stage", title: stageTitle, breadcrumb: breadcrumb },
42
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", marginBottom: 1 },
43
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
44
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true }, stageTitle),
45
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, " - "),
46
+ ink_wrapper_js_1.React.createElement(StatusBadge_js_1.StatusBadge, { status: stage.status })),
47
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
48
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "Chain: "),
49
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null,
50
+ stage.chain,
51
+ " (",
52
+ stage.chainId,
53
+ ")")),
54
+ stage.executable && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "green", bold: true }, "Executable!")),
55
+ stage.transactions.length > 0 && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", marginBottom: 1 },
56
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true }, "Transactions:"),
57
+ stage.transactions.map((tx, i) => {
58
+ const url = (0, constants_js_1.getTxUrl)(index_js_1.CHAIN_TO_CHAIN_ID[tx.chain], tx.hash);
59
+ return (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { key: i, flexDirection: "column", marginLeft: 1 },
60
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
61
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
62
+ "[",
63
+ i + 1,
64
+ "] "),
65
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "blue" }, tx.hash)),
66
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 2 },
67
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
68
+ "Block ",
69
+ tx.blockNumber,
70
+ " on ",
71
+ tx.chain,
72
+ tx.timestamp && ` at ${new Date(tx.timestamp * 1000).toLocaleString()}`)),
73
+ url && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 2 },
74
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" }, "URL: "),
75
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "blue" }, url))));
76
+ }))),
77
+ stage.timing && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column", marginBottom: 1 },
78
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true }, "Timing:"),
79
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 1, flexDirection: "column" },
80
+ stage.timing.startedAt && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
81
+ "Started: ",
82
+ new Date(stage.timing.startedAt * 1000).toLocaleString()),
83
+ stage.timing.eta && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
84
+ "ETA: ",
85
+ new Date(stage.timing.eta * 1000).toLocaleString()),
86
+ stage.timing.delaySeconds && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "gray" },
87
+ "Delay: ",
88
+ Math.floor(stage.timing.delaySeconds / 3600),
89
+ "h")))),
90
+ dataItems.length > 0 && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { flexDirection: "column" },
91
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, null,
92
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { bold: true }, "Data"),
93
+ dataItems.length > visibleRows && (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 1 },
94
+ ink_wrapper_js_1.React.createElement(ScrollIndicator_js_1.ScrollPosition, { scrollOffset: state.scrollOffset, visibleRows: visibleRows, totalItems: dataItems.length })))),
95
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 1 },
96
+ ink_wrapper_js_1.React.createElement(ScrollIndicator_js_1.ScrollIndicatorTop, { scrollOffset: state.scrollOffset })),
97
+ visibleItems.map((item, i) => (ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { key: i, marginLeft: 1 },
98
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "cyan" },
99
+ item.label,
100
+ ": "),
101
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, null, item.value)))),
102
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginLeft: 1 },
103
+ ink_wrapper_js_1.React.createElement(ScrollIndicator_js_1.ScrollIndicatorBottom, { scrollOffset: state.scrollOffset, visibleRows: visibleRows, totalItems: dataItems.length })))),
104
+ stage.error && ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Box, { marginTop: 1 },
105
+ ink_wrapper_js_1.React.createElement(ink_wrapper_js_1.Text, { color: "red" },
106
+ "Error: ",
107
+ stage.error))));
108
+ }
109
+ //# sourceMappingURL=StageView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StageView.js","sourceRoot":"","sources":["../../../../src/cli/tui/views/StageView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * View registry for TUI navigation
3
+ *
4
+ * Centralizes view metadata and provides lookup functions.
5
+ * View rendering remains in App.tsx for type-safe prop injection.
6
+ */
7
+ import type { ViewType } from "../types.js";
8
+ export interface ViewConfig {
9
+ id: ViewType;
10
+ title: string;
11
+ requiresProposal: boolean;
12
+ }
13
+ declare const VIEW_REGISTRY: readonly ViewConfig[];
14
+ export declare function getViewConfig(viewType: ViewType): ViewConfig | undefined;
15
+ export declare function isProposalView(viewType: ViewType): boolean;
16
+ export declare function getViewTitle(viewType: ViewType): string;
17
+ export { VIEW_REGISTRY };
18
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/views/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,QAAQ,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,QAAA,MAAM,aAAa,EAAE,SAAS,UAAU,EAS9B,CAAC;AAIX,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAExE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE1D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEvD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ /**
3
+ * View registry for TUI navigation
4
+ *
5
+ * Centralizes view metadata and provides lookup functions.
6
+ * View rendering remains in App.tsx for type-safe prop injection.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.VIEW_REGISTRY = void 0;
10
+ exports.getViewConfig = getViewConfig;
11
+ exports.isProposalView = isProposalView;
12
+ exports.getViewTitle = getViewTitle;
13
+ const VIEW_REGISTRY = [
14
+ { id: "list", title: "Gov-Tracker TUI [PREVIEW]", requiresProposal: false },
15
+ { id: "detail", title: "Proposal Detail", requiresProposal: true },
16
+ { id: "calldata", title: "Decoded Calldata", requiresProposal: true },
17
+ { id: "stage", title: "Stage Details", requiresProposal: true },
18
+ { id: "simulation", title: "Simulation Data", requiresProposal: true },
19
+ { id: "description", title: "Proposal Description", requiresProposal: true },
20
+ { id: "election", title: "Elections", requiresProposal: false },
21
+ { id: "help", title: "Help", requiresProposal: false },
22
+ ];
23
+ exports.VIEW_REGISTRY = VIEW_REGISTRY;
24
+ const VIEW_MAP = new Map(VIEW_REGISTRY.map((config) => [config.id, config]));
25
+ function getViewConfig(viewType) {
26
+ return VIEW_MAP.get(viewType);
27
+ }
28
+ function isProposalView(viewType) {
29
+ return VIEW_MAP.get(viewType)?.requiresProposal ?? false;
30
+ }
31
+ function getViewTitle(viewType) {
32
+ return VIEW_MAP.get(viewType)?.title ?? viewType;
33
+ }
34
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/cli/tui/views/registry.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAuBH,sCAEC;AAED,wCAEC;AAED,oCAEC;AAvBD,MAAM,aAAa,GAA0B;IAC3C,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,KAAK,EAAE;IAC3E,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,IAAI,EAAE;IAClE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,IAAI,EAAE;IACrE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,IAAI,EAAE;IAC/D,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,IAAI,EAAE;IACtE,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,IAAI,EAAE;IAC5E,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE;IAC/D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE;CAC9C,CAAC;AAgBF,sCAAa;AAdtB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAuB,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAEnG,SAAgB,aAAa,CAAC,QAAkB;IAC9C,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,cAAc,CAAC,QAAkB;IAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,gBAAgB,IAAI,KAAK,CAAC;AAC3D,CAAC;AAED,SAAgB,YAAY,CAAC,QAAkB;IAC7C,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC;AACnD,CAAC"}
@@ -173,31 +173,36 @@ export declare const GOVERNANCE_STAGE_DURATION_DAYS: {
173
173
  /**
174
174
  * Security Council election phase durations in seconds
175
175
  *
176
- * Elections proceed through three phases:
177
- * 1. Nominee Selection - ARB holders vote to select nominees
178
- * 2. Vetting Period - Foundation reviews/vets nominees
179
- * 3. Member Election - ARB holders vote to elect final members
176
+ * Elections proceed through four phases:
177
+ * 1. Contender Submission (T to T+7 days) - DAO members declare candidacy
178
+ * 2. Nominee Selection (T+7 to T+14 days) - ARB holders vote for contenders
179
+ * 3. Vetting Period (T+14 to T+28 days) - Foundation reviews/vets nominees
180
+ * 4. Member Election (T+28 to T+49 days) - ARB holders vote to elect final members
180
181
  *
181
182
  * @see https://docs.arbitrum.foundation/concepts/security-council
182
183
  */
183
184
  export declare const ELECTION_TIMING: {
185
+ /** Contender submission phase: 7 days (implemented as voting delay) */
186
+ readonly CONTENDER_SUBMISSION_SECONDS: number;
187
+ /** Contender submission phase in days */
188
+ readonly CONTENDER_SUBMISSION_DAYS: 7;
184
189
  /** Nominee selection phase: 7 days */
185
190
  readonly NOMINEE_SELECTION_SECONDS: number;
186
191
  /** Nominee selection phase in days */
187
192
  readonly NOMINEE_SELECTION_DAYS: 7;
188
- /** Vetting period: 7 days */
193
+ /** Vetting period: 14 days (compliance process) */
189
194
  readonly VETTING_PERIOD_SECONDS: number;
190
195
  /** Vetting period in days */
191
- readonly VETTING_PERIOD_DAYS: 7;
196
+ readonly VETTING_PERIOD_DAYS: 14;
192
197
  /** Member election phase: 21 days */
193
198
  readonly MEMBER_ELECTION_SECONDS: number;
194
199
  /** Member election phase in days */
195
200
  readonly MEMBER_ELECTION_DAYS: 21;
196
- /** Total election duration: 35 days (7 + 7 + 21) */
201
+ /** Total election duration: 49 days (7 + 7 + 14 + 21) */
197
202
  readonly TOTAL_ELECTION_SECONDS: number;
198
203
  /** Total election duration in days */
199
- readonly TOTAL_ELECTION_DAYS: 35;
200
- /** Voting delay for elections: 7 days in L1 blocks */
204
+ readonly TOTAL_ELECTION_DAYS: 49;
205
+ /** Voting delay for elections: 7 days in L1 blocks (contender submission period) */
201
206
  readonly VOTING_DELAY_L1_BLOCKS: number;
202
207
  };
203
208
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAIjB;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;CAoCZ,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAMnE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,gBAAgB,CAanB;AAQD,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAIX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;CAoCf,CAAC;AAIX;;;;;GAKG;AACH,eAAO,MAAM,WAAW;IACtB,gDAAgD;;IAEhD,gEAAgE;;IAEhE,2BAA2B;;CAEnB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,MAAM;IACjB,iEAAiE;;IAGjE,sEAAsE;;IAGtE,2DAA2D;;IAG3D,+DAA+D;;IAG/D,4CAA4C;;IAG5C,mEAAmE;;IAGnE,oDAAoD;;IAGpD,wDAAwD;;IAGxD,8BAA8B;;IAG9B,uDAAuD;;CAE/C,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,8BAA8B;IACzC,+EAA+E;;IAE/E,+CAA+C;;IAE/C,mDAAmD;;IAEnD,yDAAyD;;IAEzD,gEAAgE;;IAEhE,gCAAgC;;IAEhC,mDAAmD;;IAEnD,qEAAqE;;IAErE,yEAAyE;;CAEjE,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe;IAC1B,uEAAuE;;IAEvE,yCAAyC;;IAGzC,sCAAsC;;IAEtC,sCAAsC;;IAGtC,mDAAmD;;IAEnD,6BAA6B;;IAG7B,qCAAqC;;IAErC,oCAAoC;;IAGpC,yDAAyD;;IAEzD,sCAAsC;;IAGtC,oFAAoF;;CAE5E,CAAC;AAIX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,+CAA+C;;IAE/C,2CAA2C;;IAE3C,kCAAkC;;IAElC,kDAAkD;;CAE1C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,cAKrC,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAKlC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB;IAClC,iEAAiE;;IAEjE,mEAAmE;;IAEnE,8DAA8D;;CAEtD,CAAC;AAIX;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAS5D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;CASjB,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAMlE;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAW5F;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,gBAAgB,GAAG,MAAM,CAEnE;AAID;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC"}
package/dist/constants.js CHANGED
@@ -219,31 +219,36 @@ exports.GOVERNANCE_STAGE_DURATION_DAYS = {
219
219
  /**
220
220
  * Security Council election phase durations in seconds
221
221
  *
222
- * Elections proceed through three phases:
223
- * 1. Nominee Selection - ARB holders vote to select nominees
224
- * 2. Vetting Period - Foundation reviews/vets nominees
225
- * 3. Member Election - ARB holders vote to elect final members
222
+ * Elections proceed through four phases:
223
+ * 1. Contender Submission (T to T+7 days) - DAO members declare candidacy
224
+ * 2. Nominee Selection (T+7 to T+14 days) - ARB holders vote for contenders
225
+ * 3. Vetting Period (T+14 to T+28 days) - Foundation reviews/vets nominees
226
+ * 4. Member Election (T+28 to T+49 days) - ARB holders vote to elect final members
226
227
  *
227
228
  * @see https://docs.arbitrum.foundation/concepts/security-council
228
229
  */
229
230
  exports.ELECTION_TIMING = {
231
+ /** Contender submission phase: 7 days (implemented as voting delay) */
232
+ CONTENDER_SUBMISSION_SECONDS: 7 * 24 * 60 * 60,
233
+ /** Contender submission phase in days */
234
+ CONTENDER_SUBMISSION_DAYS: 7,
230
235
  /** Nominee selection phase: 7 days */
231
236
  NOMINEE_SELECTION_SECONDS: 7 * 24 * 60 * 60,
232
237
  /** Nominee selection phase in days */
233
238
  NOMINEE_SELECTION_DAYS: 7,
234
- /** Vetting period: 7 days */
235
- VETTING_PERIOD_SECONDS: 7 * 24 * 60 * 60,
239
+ /** Vetting period: 14 days (compliance process) */
240
+ VETTING_PERIOD_SECONDS: 14 * 24 * 60 * 60,
236
241
  /** Vetting period in days */
237
- VETTING_PERIOD_DAYS: 7,
242
+ VETTING_PERIOD_DAYS: 14,
238
243
  /** Member election phase: 21 days */
239
244
  MEMBER_ELECTION_SECONDS: 21 * 24 * 60 * 60,
240
245
  /** Member election phase in days */
241
246
  MEMBER_ELECTION_DAYS: 21,
242
- /** Total election duration: 35 days (7 + 7 + 21) */
243
- TOTAL_ELECTION_SECONDS: 35 * 24 * 60 * 60,
247
+ /** Total election duration: 49 days (7 + 7 + 14 + 21) */
248
+ TOTAL_ELECTION_SECONDS: 49 * 24 * 60 * 60,
244
249
  /** Total election duration in days */
245
- TOTAL_ELECTION_DAYS: 35,
246
- /** Voting delay for elections: 7 days in L1 blocks */
250
+ TOTAL_ELECTION_DAYS: 49,
251
+ /** Voting delay for elections: 7 days in L1 blocks (contender submission period) */
247
252
  VOTING_DELAY_L1_BLOCKS: 7 * 24 * 60 * 5, // 50400 blocks at 12s/block
248
253
  };
249
254
  // Chunking Configuration