@knpkv/codecommit 0.1.0

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 (233) hide show
  1. package/README.md +216 -0
  2. package/dist/package.json +50 -0
  3. package/dist/src/bin.d.ts +3 -0
  4. package/dist/src/bin.d.ts.map +1 -0
  5. package/dist/src/bin.js +204 -0
  6. package/dist/src/bin.js.map +1 -0
  7. package/dist/src/main.d.ts +2 -0
  8. package/dist/src/main.d.ts.map +1 -0
  9. package/dist/src/main.js +25 -0
  10. package/dist/src/main.js.map +1 -0
  11. package/dist/src/tui/App.d.ts +6 -0
  12. package/dist/src/tui/App.d.ts.map +1 -0
  13. package/dist/src/tui/App.js +40 -0
  14. package/dist/src/tui/App.js.map +1 -0
  15. package/dist/src/tui/Constants.d.ts +11 -0
  16. package/dist/src/tui/Constants.d.ts.map +1 -0
  17. package/dist/src/tui/Constants.js +40 -0
  18. package/dist/src/tui/Constants.js.map +1 -0
  19. package/dist/src/tui/ListBuilder.d.ts +32 -0
  20. package/dist/src/tui/ListBuilder.d.ts.map +1 -0
  21. package/dist/src/tui/ListBuilder.js +145 -0
  22. package/dist/src/tui/ListBuilder.js.map +1 -0
  23. package/dist/src/tui/atoms/actions.d.ts +39 -0
  24. package/dist/src/tui/atoms/actions.d.ts.map +1 -0
  25. package/dist/src/tui/atoms/actions.js +149 -0
  26. package/dist/src/tui/atoms/actions.js.map +1 -0
  27. package/dist/src/tui/atoms/app.d.ts +42 -0
  28. package/dist/src/tui/atoms/app.d.ts.map +1 -0
  29. package/dist/src/tui/atoms/app.js +69 -0
  30. package/dist/src/tui/atoms/app.js.map +1 -0
  31. package/dist/src/tui/atoms/index.d.ts +6 -0
  32. package/dist/src/tui/atoms/index.d.ts.map +1 -0
  33. package/dist/src/tui/atoms/index.js +7 -0
  34. package/dist/src/tui/atoms/index.js.map +1 -0
  35. package/dist/src/tui/atoms/runtime.d.ts +9 -0
  36. package/dist/src/tui/atoms/runtime.d.ts.map +1 -0
  37. package/dist/src/tui/atoms/runtime.js +22 -0
  38. package/dist/src/tui/atoms/runtime.js.map +1 -0
  39. package/dist/src/tui/atoms/ui.d.ts +103 -0
  40. package/dist/src/tui/atoms/ui.d.ts.map +1 -0
  41. package/dist/src/tui/atoms/ui.js +97 -0
  42. package/dist/src/tui/atoms/ui.js.map +1 -0
  43. package/dist/src/tui/components/Badge.d.ts +13 -0
  44. package/dist/src/tui/components/Badge.d.ts.map +1 -0
  45. package/dist/src/tui/components/Badge.js +48 -0
  46. package/dist/src/tui/components/Badge.js.map +1 -0
  47. package/dist/src/tui/components/DetailsView.d.ts +6 -0
  48. package/dist/src/tui/components/DetailsView.d.ts.map +1 -0
  49. package/dist/src/tui/components/DetailsView.js +81 -0
  50. package/dist/src/tui/components/DetailsView.js.map +1 -0
  51. package/dist/src/tui/components/ErrorBoundary.d.ts +20 -0
  52. package/dist/src/tui/components/ErrorBoundary.d.ts.map +1 -0
  53. package/dist/src/tui/components/ErrorBoundary.js +33 -0
  54. package/dist/src/tui/components/ErrorBoundary.js.map +1 -0
  55. package/dist/src/tui/components/Footer.d.ts +6 -0
  56. package/dist/src/tui/components/Footer.d.ts.map +1 -0
  57. package/dist/src/tui/components/Footer.js +29 -0
  58. package/dist/src/tui/components/Footer.js.map +1 -0
  59. package/dist/src/tui/components/Header.d.ts +6 -0
  60. package/dist/src/tui/components/Header.d.ts.map +1 -0
  61. package/dist/src/tui/components/Header.js +58 -0
  62. package/dist/src/tui/components/Header.js.map +1 -0
  63. package/dist/src/tui/components/ListItemRow.d.ts +13 -0
  64. package/dist/src/tui/components/ListItemRow.d.ts.map +1 -0
  65. package/dist/src/tui/components/ListItemRow.js +52 -0
  66. package/dist/src/tui/components/ListItemRow.js.map +1 -0
  67. package/dist/src/tui/components/MainList.d.ts +11 -0
  68. package/dist/src/tui/components/MainList.d.ts.map +1 -0
  69. package/dist/src/tui/components/MainList.js +124 -0
  70. package/dist/src/tui/components/MainList.js.map +1 -0
  71. package/dist/src/tui/components/NotificationsTable.d.ts +12 -0
  72. package/dist/src/tui/components/NotificationsTable.d.ts.map +1 -0
  73. package/dist/src/tui/components/NotificationsTable.js +72 -0
  74. package/dist/src/tui/components/NotificationsTable.js.map +1 -0
  75. package/dist/src/tui/components/QuickFilters.d.ts +6 -0
  76. package/dist/src/tui/components/QuickFilters.d.ts.map +1 -0
  77. package/dist/src/tui/components/QuickFilters.js +74 -0
  78. package/dist/src/tui/components/QuickFilters.js.map +1 -0
  79. package/dist/src/tui/components/SettingsTable.d.ts +12 -0
  80. package/dist/src/tui/components/SettingsTable.d.ts.map +1 -0
  81. package/dist/src/tui/components/SettingsTable.js +62 -0
  82. package/dist/src/tui/components/SettingsTable.js.map +1 -0
  83. package/dist/src/tui/components/Spinner.d.ts +11 -0
  84. package/dist/src/tui/components/Spinner.d.ts.map +1 -0
  85. package/dist/src/tui/components/Spinner.js +24 -0
  86. package/dist/src/tui/components/Spinner.js.map +1 -0
  87. package/dist/src/tui/components/StatusRow.d.ts +11 -0
  88. package/dist/src/tui/components/StatusRow.d.ts.map +1 -0
  89. package/dist/src/tui/components/StatusRow.js +11 -0
  90. package/dist/src/tui/components/StatusRow.js.map +1 -0
  91. package/dist/src/tui/components/Table.d.ts +20 -0
  92. package/dist/src/tui/components/Table.d.ts.map +1 -0
  93. package/dist/src/tui/components/Table.js +38 -0
  94. package/dist/src/tui/components/Table.js.map +1 -0
  95. package/dist/src/tui/components/index.d.ts +14 -0
  96. package/dist/src/tui/components/index.d.ts.map +1 -0
  97. package/dist/src/tui/components/index.js +14 -0
  98. package/dist/src/tui/components/index.js.map +1 -0
  99. package/dist/src/tui/components/mainlist-utils.d.ts +22 -0
  100. package/dist/src/tui/components/mainlist-utils.d.ts.map +1 -0
  101. package/dist/src/tui/components/mainlist-utils.js +71 -0
  102. package/dist/src/tui/components/mainlist-utils.js.map +1 -0
  103. package/dist/src/tui/components/table-utils.d.ts +25 -0
  104. package/dist/src/tui/components/table-utils.d.ts.map +1 -0
  105. package/dist/src/tui/components/table-utils.js +25 -0
  106. package/dist/src/tui/components/table-utils.js.map +1 -0
  107. package/dist/src/tui/context/dialog.d.ts +32 -0
  108. package/dist/src/tui/context/dialog.d.ts.map +1 -0
  109. package/dist/src/tui/context/dialog.js +41 -0
  110. package/dist/src/tui/context/dialog.js.map +1 -0
  111. package/dist/src/tui/context/theme.d.ts +25 -0
  112. package/dist/src/tui/context/theme.d.ts.map +1 -0
  113. package/dist/src/tui/context/theme.js +31 -0
  114. package/dist/src/tui/context/theme.js.map +1 -0
  115. package/dist/src/tui/hooks/index.d.ts +2 -0
  116. package/dist/src/tui/hooks/index.d.ts.map +1 -0
  117. package/dist/src/tui/hooks/index.js +2 -0
  118. package/dist/src/tui/hooks/index.js.map +1 -0
  119. package/dist/src/tui/hooks/useKeyboardNav.d.ts +16 -0
  120. package/dist/src/tui/hooks/useKeyboardNav.d.ts.map +1 -0
  121. package/dist/src/tui/hooks/useKeyboardNav.js +429 -0
  122. package/dist/src/tui/hooks/useKeyboardNav.js.map +1 -0
  123. package/dist/src/tui/hooks/useListNavigation.d.ts +3 -0
  124. package/dist/src/tui/hooks/useListNavigation.d.ts.map +1 -0
  125. package/dist/src/tui/hooks/useListNavigation.js +123 -0
  126. package/dist/src/tui/hooks/useListNavigation.js.map +1 -0
  127. package/dist/src/tui/mocks.d.ts +6 -0
  128. package/dist/src/tui/mocks.d.ts.map +1 -0
  129. package/dist/src/tui/mocks.js +36 -0
  130. package/dist/src/tui/mocks.js.map +1 -0
  131. package/dist/src/tui/theme/Resolver.d.ts +6 -0
  132. package/dist/src/tui/theme/Resolver.d.ts.map +1 -0
  133. package/dist/src/tui/theme/Resolver.js +73 -0
  134. package/dist/src/tui/theme/Resolver.js.map +1 -0
  135. package/dist/src/tui/theme/ThemeRegistry.d.ts +3 -0
  136. package/dist/src/tui/theme/ThemeRegistry.d.ts.map +1 -0
  137. package/dist/src/tui/theme/ThemeRegistry.js +70 -0
  138. package/dist/src/tui/theme/ThemeRegistry.js.map +1 -0
  139. package/dist/src/tui/theme/data/aura.json +69 -0
  140. package/dist/src/tui/theme/data/ayu.json +80 -0
  141. package/dist/src/tui/theme/data/carbonfox.json +248 -0
  142. package/dist/src/tui/theme/data/catppuccin-frappe.json +233 -0
  143. package/dist/src/tui/theme/data/catppuccin-macchiato.json +233 -0
  144. package/dist/src/tui/theme/data/catppuccin.json +112 -0
  145. package/dist/src/tui/theme/data/cobalt2.json +228 -0
  146. package/dist/src/tui/theme/data/cursor.json +249 -0
  147. package/dist/src/tui/theme/data/dracula.json +219 -0
  148. package/dist/src/tui/theme/data/everforest.json +241 -0
  149. package/dist/src/tui/theme/data/flexoki.json +237 -0
  150. package/dist/src/tui/theme/data/github.json +233 -0
  151. package/dist/src/tui/theme/data/gruvbox.json +242 -0
  152. package/dist/src/tui/theme/data/kanagawa.json +77 -0
  153. package/dist/src/tui/theme/data/lucent-orng.json +237 -0
  154. package/dist/src/tui/theme/data/material.json +235 -0
  155. package/dist/src/tui/theme/data/matrix.json +77 -0
  156. package/dist/src/tui/theme/data/mercury.json +245 -0
  157. package/dist/src/tui/theme/data/monokai.json +221 -0
  158. package/dist/src/tui/theme/data/nightowl.json +221 -0
  159. package/dist/src/tui/theme/data/nord.json +223 -0
  160. package/dist/src/tui/theme/data/one-dark.json +84 -0
  161. package/dist/src/tui/theme/data/opencode.json +245 -0
  162. package/dist/src/tui/theme/data/orng.json +249 -0
  163. package/dist/src/tui/theme/data/osaka-jade.json +93 -0
  164. package/dist/src/tui/theme/data/palenight.json +222 -0
  165. package/dist/src/tui/theme/data/rosepine.json +234 -0
  166. package/dist/src/tui/theme/data/solarized.json +223 -0
  167. package/dist/src/tui/theme/data/synthwave84.json +226 -0
  168. package/dist/src/tui/theme/data/tokyonight.json +243 -0
  169. package/dist/src/tui/theme/data/vercel.json +245 -0
  170. package/dist/src/tui/theme/data/vesper.json +218 -0
  171. package/dist/src/tui/theme/data/zenburn.json +223 -0
  172. package/dist/src/tui/theme/default.d.ts +40 -0
  173. package/dist/src/tui/theme/default.d.ts.map +1 -0
  174. package/dist/src/tui/theme/default.js +35 -0
  175. package/dist/src/tui/theme/default.js.map +1 -0
  176. package/dist/src/tui/theme/resolver-utils.d.ts +28 -0
  177. package/dist/src/tui/theme/resolver-utils.d.ts.map +1 -0
  178. package/dist/src/tui/theme/resolver-utils.js +19 -0
  179. package/dist/src/tui/theme/resolver-utils.js.map +1 -0
  180. package/dist/src/tui/theme/themes.d.ts +3 -0
  181. package/dist/src/tui/theme/themes.d.ts.map +1 -0
  182. package/dist/src/tui/theme/themes.js +13 -0
  183. package/dist/src/tui/theme/themes.js.map +1 -0
  184. package/dist/src/tui/ui/Dialog.d.ts +19 -0
  185. package/dist/src/tui/ui/Dialog.d.ts.map +1 -0
  186. package/dist/src/tui/ui/Dialog.js +39 -0
  187. package/dist/src/tui/ui/Dialog.js.map +1 -0
  188. package/dist/src/tui/ui/DialogCommand.d.ts +2 -0
  189. package/dist/src/tui/ui/DialogCommand.d.ts.map +1 -0
  190. package/dist/src/tui/ui/DialogCommand.js +182 -0
  191. package/dist/src/tui/ui/DialogCommand.js.map +1 -0
  192. package/dist/src/tui/ui/DialogCreatePR.d.ts +2 -0
  193. package/dist/src/tui/ui/DialogCreatePR.d.ts.map +1 -0
  194. package/dist/src/tui/ui/DialogCreatePR.js +397 -0
  195. package/dist/src/tui/ui/DialogCreatePR.js.map +1 -0
  196. package/dist/src/tui/ui/DialogHelp.d.ts +6 -0
  197. package/dist/src/tui/ui/DialogHelp.d.ts.map +1 -0
  198. package/dist/src/tui/ui/DialogHelp.js +93 -0
  199. package/dist/src/tui/ui/DialogHelp.js.map +1 -0
  200. package/dist/src/tui/ui/DialogTheme.d.ts +2 -0
  201. package/dist/src/tui/ui/DialogTheme.d.ts.map +1 -0
  202. package/dist/src/tui/ui/DialogTheme.js +124 -0
  203. package/dist/src/tui/ui/DialogTheme.js.map +1 -0
  204. package/dist/src/tui/ui/index.d.ts +6 -0
  205. package/dist/src/tui/ui/index.d.ts.map +1 -0
  206. package/dist/src/tui/ui/index.js +6 -0
  207. package/dist/src/tui/ui/index.js.map +1 -0
  208. package/dist/src/tui/utils/prTemplates.d.ts +19 -0
  209. package/dist/src/tui/utils/prTemplates.d.ts.map +1 -0
  210. package/dist/src/tui/utils/prTemplates.js +46 -0
  211. package/dist/src/tui/utils/prTemplates.js.map +1 -0
  212. package/dist/test/ConfigService.test.d.ts +2 -0
  213. package/dist/test/ConfigService.test.d.ts.map +1 -0
  214. package/dist/test/ConfigService.test.js +40 -0
  215. package/dist/test/ConfigService.test.js.map +1 -0
  216. package/dist/test/ListBuilder.test.d.ts +2 -0
  217. package/dist/test/ListBuilder.test.d.ts.map +1 -0
  218. package/dist/test/ListBuilder.test.js +246 -0
  219. package/dist/test/ListBuilder.test.js.map +1 -0
  220. package/dist/test/MainList.test.d.ts +2 -0
  221. package/dist/test/MainList.test.d.ts.map +1 -0
  222. package/dist/test/MainList.test.js +228 -0
  223. package/dist/test/MainList.test.js.map +1 -0
  224. package/dist/test/Resolver.test.d.ts +2 -0
  225. package/dist/test/Resolver.test.d.ts.map +1 -0
  226. package/dist/test/Resolver.test.js +81 -0
  227. package/dist/test/Resolver.test.js.map +1 -0
  228. package/dist/test/Table.test.d.ts +2 -0
  229. package/dist/test/Table.test.d.ts.map +1 -0
  230. package/dist/test/Table.test.js +100 -0
  231. package/dist/test/Table.test.js.map +1 -0
  232. package/dist/tsconfig.tsbuildinfo +1 -0
  233. package/package.json +50 -0
@@ -0,0 +1,429 @@
1
+ import { jsx as _jsx } from "@opentui/react/jsx-runtime";
2
+ import { Result, useAtomSet, useAtomValue } from "@effect-atom/atom-react";
3
+ import { useKeyboard } from "@opentui/react";
4
+ import { useMemo, useRef } from "react";
5
+ import { loginToAwsAtom } from "../atoms/actions.js";
6
+ import { appStateAtom, clearNotificationsAtom, notificationsAtom, refreshAtom, setAllAccountsAtom } from "../atoms/app.js";
7
+ import { currentPRAtom, currentUserAtom, exitPendingAtom, filterTextAtom, isFilteringAtom, isSettingsFilteringAtom, quickFilterTypeAtom, quickFilterValuesAtom, selectedIndexAtom, settingsFilterAtom, viewAtom } from "../atoms/ui.js";
8
+ import { useDialog } from "../context/dialog.js";
9
+ import { extractScope } from "../ListBuilder.js";
10
+ import { DialogCommand } from "../ui/DialogCommand.js";
11
+ import { DialogCreatePR } from "../ui/DialogCreatePR.js";
12
+ import { DialogHelp } from "../ui/DialogHelp.js";
13
+ import { DialogTheme } from "../ui/DialogTheme.js";
14
+ const defaultState = {
15
+ status: "loading",
16
+ pullRequests: [],
17
+ accounts: []
18
+ };
19
+ /**
20
+ * Keyboard navigation hook for the TUI
21
+ * Handles global keybindings for view switching, filtering, help, etc.
22
+ * @category hooks
23
+ */
24
+ export function useKeyboardNav({ onOpenInBrowser, onQuit }) {
25
+ const view = useAtomValue(viewAtom);
26
+ const setView = useAtomSet(viewAtom);
27
+ const filterText = useAtomValue(filterTextAtom);
28
+ const setFilterText = useAtomSet(filterTextAtom);
29
+ const isFiltering = useAtomValue(isFilteringAtom);
30
+ const setIsFiltering = useAtomSet(isFilteringAtom);
31
+ const currentPR = useAtomValue(currentPRAtom);
32
+ const selectedIndex = useAtomValue(selectedIndexAtom);
33
+ const refresh = useAtomSet(refreshAtom);
34
+ const clearNotifications = useAtomSet(clearNotificationsAtom);
35
+ const notificationsResult = useAtomValue(notificationsAtom);
36
+ const notifications = Result.getOrElse(notificationsResult, () => ({ items: [] }));
37
+ const loginToAws = useAtomSet(loginToAwsAtom);
38
+ const exitPending = useAtomValue(exitPendingAtom);
39
+ const setExitPending = useAtomSet(exitPendingAtom);
40
+ const exitTimeoutRef = useRef(null);
41
+ // Quick filter state
42
+ const quickFilterType = useAtomValue(quickFilterTypeAtom);
43
+ const setQuickFilterType = useAtomSet(quickFilterTypeAtom);
44
+ const quickFilterValues = useAtomValue(quickFilterValuesAtom);
45
+ const setQuickFilterValues = useAtomSet(quickFilterValuesAtom);
46
+ const currentUser = useAtomValue(currentUserAtom);
47
+ const setCurrentUser = useAtomSet(currentUserAtom);
48
+ const appStateResult = useAtomValue(appStateAtom);
49
+ const appState = Result.getOrElse(appStateResult, () => defaultState);
50
+ // Settings filter state
51
+ const settingsFilter = useAtomValue(settingsFilterAtom);
52
+ const setSettingsFilter = useAtomSet(settingsFilterAtom);
53
+ const isSettingsFiltering = useAtomValue(isSettingsFilteringAtom);
54
+ const setIsSettingsFiltering = useAtomSet(isSettingsFilteringAtom);
55
+ const setAllAccounts = useAtomSet(setAllAccountsAtom);
56
+ // Extract unique authors, accounts, scopes, and repos
57
+ const { accounts, authors, myScopes, repos, scopes } = useMemo(() => {
58
+ const authorSet = new Set();
59
+ const accountSet = new Set();
60
+ const scopeSet = new Set();
61
+ const myScopeSet = new Set();
62
+ const repoSet = new Set();
63
+ for (const pr of appState.pullRequests) {
64
+ authorSet.add(pr.author);
65
+ accountSet.add(pr.account.id);
66
+ repoSet.add(pr.repositoryName);
67
+ const scope = extractScope(pr.title);
68
+ if (scope) {
69
+ scopeSet.add(scope);
70
+ if (currentUser && pr.author === currentUser) {
71
+ myScopeSet.add(scope);
72
+ }
73
+ }
74
+ }
75
+ return {
76
+ authors: Array.from(authorSet).sort(),
77
+ accounts: Array.from(accountSet).sort(),
78
+ scopes: Array.from(scopeSet).sort(),
79
+ myScopes: Array.from(myScopeSet).sort(),
80
+ repos: Array.from(repoSet).sort()
81
+ };
82
+ }, [appState.pullRequests, currentUser]);
83
+ // Sync currentUser from appState (set via STS getCallerIdentity)
84
+ useMemo(() => {
85
+ if (appState.currentUser && appState.currentUser !== currentUser) {
86
+ setCurrentUser(appState.currentUser);
87
+ }
88
+ }, [appState.currentUser, currentUser, setCurrentUser]);
89
+ const dialog = useDialog();
90
+ useKeyboard((key) => {
91
+ // If a dialog is open, don't process global keys (except command palette trigger)
92
+ if (dialog.current) {
93
+ return;
94
+ }
95
+ // Handle Ctrl+P, Cmd+P, or ":" for command palette
96
+ if ((key.name === "p" && (key.meta || key.ctrl)) || key.char === ":" || key.name === ":") {
97
+ dialog.show(() => _jsx(DialogCommand, {}));
98
+ return;
99
+ }
100
+ // Handle Ctrl+C (Double press to exit)
101
+ if (key.name === "c" && key.ctrl) {
102
+ if (exitPending) {
103
+ onQuit();
104
+ }
105
+ else {
106
+ setExitPending(true);
107
+ if (exitTimeoutRef.current)
108
+ clearTimeout(exitTimeoutRef.current);
109
+ exitTimeoutRef.current = setTimeout(() => {
110
+ setExitPending(false);
111
+ }, 3000);
112
+ }
113
+ return;
114
+ }
115
+ // Handle filter mode input (PRs)
116
+ if (isFiltering) {
117
+ if (key.name === "escape") {
118
+ setIsFiltering(false);
119
+ setFilterText("");
120
+ }
121
+ else if (key.name === "return") {
122
+ setIsFiltering(false);
123
+ }
124
+ else if (key.name === "backspace") {
125
+ setFilterText(filterText.slice(0, -1));
126
+ }
127
+ else {
128
+ // Try key.char first, fallback to key.name for single printable chars
129
+ const char = key.char || (key.name?.length === 1 ? key.name : null);
130
+ if (char && char.length === 1) {
131
+ setFilterText(filterText + char);
132
+ }
133
+ }
134
+ return;
135
+ }
136
+ // Handle settings filter mode input
137
+ if (isSettingsFiltering) {
138
+ if (key.name === "escape") {
139
+ setIsSettingsFiltering(false);
140
+ setSettingsFilter("");
141
+ }
142
+ else if (key.name === "return") {
143
+ setIsSettingsFiltering(false);
144
+ }
145
+ else if (key.name === "backspace") {
146
+ setSettingsFilter(settingsFilter.slice(0, -1));
147
+ }
148
+ else if (key.name === "left" || key.name === "right") {
149
+ // Cycle through filter modes: "" <-> "on:" <-> "off:"
150
+ const modes = ["", "on:", "off:"];
151
+ const currentPrefix = settingsFilter.startsWith("on:") ? "on:" : settingsFilter.startsWith("off:") ? "off:" : "";
152
+ const nameFilter = currentPrefix ? settingsFilter.slice(currentPrefix.length) : settingsFilter;
153
+ const idx = modes.indexOf(currentPrefix);
154
+ const nextIdx = key.name === "right" ? (idx + 1) % modes.length : (idx - 1 + modes.length) % modes.length;
155
+ const nextMode = modes[nextIdx] ?? "";
156
+ setSettingsFilter(nextMode + nameFilter);
157
+ return;
158
+ }
159
+ else {
160
+ const char = key.char || (key.name?.length === 1 ? key.name : null);
161
+ if (char && char.length === 1) {
162
+ setSettingsFilter(settingsFilter + char);
163
+ }
164
+ }
165
+ return;
166
+ }
167
+ // Handle "/" or "f" filter shortcut
168
+ if (key.name === "/" || key.char === "/" || key.name === "f") {
169
+ if (view === "settings") {
170
+ setIsSettingsFiltering(true);
171
+ }
172
+ else {
173
+ setIsFiltering(true);
174
+ setView("prs");
175
+ }
176
+ return;
177
+ }
178
+ // Handle settings view shortcuts
179
+ if (view === "settings") {
180
+ if (key.name === "a") {
181
+ // Get filtered profiles if filter is active
182
+ const profiles = settingsFilter
183
+ ? appState.accounts
184
+ .filter((a) => a.profile.toLowerCase().includes(settingsFilter.toLowerCase()))
185
+ .map((a) => a.profile)
186
+ : null;
187
+ setAllAccounts({ enabled: true, ...(profiles && { profiles }) });
188
+ return;
189
+ }
190
+ if (key.name === "d") {
191
+ const profiles = settingsFilter
192
+ ? appState.accounts
193
+ .filter((a) => a.profile.toLowerCase().includes(settingsFilter.toLowerCase()))
194
+ .map((a) => a.profile)
195
+ : null;
196
+ setAllAccounts({ enabled: false, ...(profiles && { profiles }) });
197
+ return;
198
+ }
199
+ // Cycle filter modes with arrows (even when not in filter input mode)
200
+ if (key.name === "left" || key.name === "right") {
201
+ const modes = ["", "on:", "off:"];
202
+ const currentPrefix = settingsFilter.startsWith("on:") ? "on:" : settingsFilter.startsWith("off:") ? "off:" : "";
203
+ const nameFilter = currentPrefix ? settingsFilter.slice(currentPrefix.length) : settingsFilter;
204
+ const idx = modes.indexOf(currentPrefix);
205
+ const nextIdx = key.name === "right" ? (idx + 1) % modes.length : (idx - 1 + modes.length) % modes.length;
206
+ const nextMode = modes[nextIdx] ?? "";
207
+ setSettingsFilter(nextMode + nameFilter);
208
+ return;
209
+ }
210
+ }
211
+ // Handle details view
212
+ if (view === "details") {
213
+ if (key.name === "escape") {
214
+ setView("prs");
215
+ }
216
+ else if (key.name === "return" && currentPR && onOpenInBrowser) {
217
+ onOpenInBrowser(currentPR);
218
+ }
219
+ return;
220
+ }
221
+ // Global keybindings
222
+ switch (key.name) {
223
+ case "q":
224
+ onQuit();
225
+ break;
226
+ case "h":
227
+ dialog.show(() => _jsx(DialogHelp, {}));
228
+ break;
229
+ case "r":
230
+ refresh();
231
+ break;
232
+ case "l": {
233
+ const authError = notifications.items.find((e) => /ExpiredToken|Unauthorized|AuthFailure|SSO|token|credentials/i.test(e.message));
234
+ if (authError) {
235
+ const profile = authError.title.replace(/\s*\(.*$/, "");
236
+ if (profile)
237
+ loginToAws(profile);
238
+ }
239
+ break;
240
+ }
241
+ case "c":
242
+ if (view === "notifications") {
243
+ clearNotifications();
244
+ }
245
+ else if (view === "prs") {
246
+ dialog.show(() => _jsx(DialogCreatePR, {}));
247
+ }
248
+ break;
249
+ case "t":
250
+ dialog.show(() => _jsx(DialogTheme, {}));
251
+ break;
252
+ case "escape":
253
+ if (filterText) {
254
+ setFilterText("");
255
+ }
256
+ else if (view !== "prs") {
257
+ setView("prs");
258
+ }
259
+ break;
260
+ case "s":
261
+ setView(view === "settings" ? "prs" : "settings");
262
+ break;
263
+ case "n":
264
+ setView(view === "notifications" ? "prs" : "notifications");
265
+ break;
266
+ case "return":
267
+ if (view === "prs" && currentPR) {
268
+ setView("details");
269
+ }
270
+ else if (view === "notifications") {
271
+ const selected = notifications.items[selectedIndex];
272
+ if (selected) {
273
+ const profile = selected.title.replace(/\s*\(.*$/, "");
274
+ if (/ExpiredToken|Unauthorized|AuthFailure|SSO|token|credentials/i.test(selected.message)) {
275
+ loginToAws((profile || selected.title));
276
+ }
277
+ }
278
+ }
279
+ break;
280
+ case "o":
281
+ if (view === "prs" && currentPR && onOpenInBrowser) {
282
+ onOpenInBrowser(currentPR);
283
+ }
284
+ break;
285
+ // Quick filter shortcuts (1-4)
286
+ case "1":
287
+ if (view === "prs")
288
+ setQuickFilterType("all");
289
+ break;
290
+ case "2":
291
+ if (view === "prs") {
292
+ setQuickFilterType("mine");
293
+ if (!quickFilterValues.mine && myScopes.length > 0) {
294
+ setQuickFilterValues({ ...quickFilterValues, mine: myScopes[0] });
295
+ }
296
+ }
297
+ break;
298
+ case "3":
299
+ if (view === "prs") {
300
+ setQuickFilterType("account");
301
+ // Initialize value for this type if empty
302
+ if (!quickFilterValues.account && accounts.length > 0) {
303
+ setQuickFilterValues({ ...quickFilterValues, account: accounts[0] });
304
+ }
305
+ }
306
+ break;
307
+ case "4":
308
+ if (view === "prs") {
309
+ setQuickFilterType("author");
310
+ if (!quickFilterValues.author && authors.length > 0) {
311
+ setQuickFilterValues({ ...quickFilterValues, author: authors[0] });
312
+ }
313
+ }
314
+ break;
315
+ case "5":
316
+ if (view === "prs") {
317
+ setQuickFilterType("scope");
318
+ if (!quickFilterValues.scope && scopes.length > 0) {
319
+ setQuickFilterValues({ ...quickFilterValues, scope: scopes[0] });
320
+ }
321
+ }
322
+ break;
323
+ case "6":
324
+ if (view === "prs") {
325
+ setQuickFilterType("date");
326
+ // date already has default "today"
327
+ }
328
+ break;
329
+ case "7":
330
+ if (view === "prs") {
331
+ setQuickFilterType("repo");
332
+ if (!quickFilterValues.repo && repos.length > 0) {
333
+ setQuickFilterValues({ ...quickFilterValues, repo: repos[0] });
334
+ }
335
+ }
336
+ break;
337
+ case "8":
338
+ if (view === "prs") {
339
+ setQuickFilterType("status");
340
+ // status already has default "approved"
341
+ }
342
+ break;
343
+ // Cycle quick filter values with left/right
344
+ case "left":
345
+ if (view === "prs") {
346
+ if (quickFilterType === "date") {
347
+ const dateValues = ["today", "week", "month", "older"];
348
+ const currentVal = quickFilterValues.date || "today";
349
+ const idx = dateValues.indexOf(currentVal);
350
+ const nextIdx = idx <= 0 ? dateValues.length - 1 : idx - 1;
351
+ setQuickFilterValues({ ...quickFilterValues, date: dateValues[nextIdx] });
352
+ }
353
+ else if (quickFilterType === "status") {
354
+ const statusValues = ["approved", "pending", "mergeable", "conflicts"];
355
+ const currentVal = quickFilterValues.status || "approved";
356
+ const idx = statusValues.indexOf(currentVal);
357
+ const nextIdx = idx <= 0 ? statusValues.length - 1 : idx - 1;
358
+ setQuickFilterValues({ ...quickFilterValues, status: statusValues[nextIdx] });
359
+ }
360
+ else if (quickFilterType === "mine" ||
361
+ quickFilterType === "account" ||
362
+ quickFilterType === "author" ||
363
+ quickFilterType === "scope" ||
364
+ quickFilterType === "repo") {
365
+ const list = quickFilterType === "mine"
366
+ ? myScopes
367
+ : quickFilterType === "account"
368
+ ? accounts
369
+ : quickFilterType === "author"
370
+ ? authors
371
+ : quickFilterType === "repo"
372
+ ? repos
373
+ : scopes;
374
+ const currentVal = quickFilterValues[quickFilterType];
375
+ if (list.length > 0) {
376
+ const idx = list.indexOf(currentVal);
377
+ const nextIdx = idx <= 0 ? list.length - 1 : idx - 1;
378
+ setQuickFilterValues({ ...quickFilterValues, [quickFilterType]: list[nextIdx] });
379
+ }
380
+ }
381
+ }
382
+ break;
383
+ case "right":
384
+ if (view === "prs") {
385
+ if (quickFilterType === "date") {
386
+ const dateValues = ["today", "week", "month", "older"];
387
+ const currentVal = quickFilterValues.date || "today";
388
+ const idx = dateValues.indexOf(currentVal);
389
+ const nextIdx = idx >= dateValues.length - 1 ? 0 : idx + 1;
390
+ setQuickFilterValues({ ...quickFilterValues, date: dateValues[nextIdx] });
391
+ }
392
+ else if (quickFilterType === "status") {
393
+ const statusValues = ["approved", "pending", "mergeable", "conflicts"];
394
+ const currentVal = quickFilterValues.status || "approved";
395
+ const idx = statusValues.indexOf(currentVal);
396
+ const nextIdx = idx >= statusValues.length - 1 ? 0 : idx + 1;
397
+ setQuickFilterValues({ ...quickFilterValues, status: statusValues[nextIdx] });
398
+ }
399
+ else if (quickFilterType === "mine" ||
400
+ quickFilterType === "account" ||
401
+ quickFilterType === "author" ||
402
+ quickFilterType === "scope" ||
403
+ quickFilterType === "repo") {
404
+ const list = quickFilterType === "mine"
405
+ ? myScopes
406
+ : quickFilterType === "account"
407
+ ? accounts
408
+ : quickFilterType === "author"
409
+ ? authors
410
+ : quickFilterType === "repo"
411
+ ? repos
412
+ : scopes;
413
+ const currentVal = quickFilterValues[quickFilterType];
414
+ if (list.length > 0) {
415
+ const idx = list.indexOf(currentVal);
416
+ const nextIdx = idx >= list.length - 1 ? 0 : idx + 1;
417
+ setQuickFilterValues({ ...quickFilterValues, [quickFilterType]: list[nextIdx] });
418
+ }
419
+ }
420
+ }
421
+ break;
422
+ }
423
+ });
424
+ return {
425
+ view,
426
+ isFiltering
427
+ };
428
+ }
429
+ //# sourceMappingURL=useKeyboardNav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardNav.js","sourceRoot":"","sources":["../../../../src/tui/hooks/useKeyboardNav.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ListItem } from "../ListBuilder.js";
2
+ export declare function useListNavigation(items: ReadonlyArray<ListItem>, onSelect: () => void, onToggle?: () => void): void;
3
+ //# sourceMappingURL=useListNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useListNavigation.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/useListNavigation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAOjD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,QA6F5G"}
@@ -0,0 +1,123 @@
1
+ import { useAtomSet, useAtomValue } from "@effect-atom/atom-react";
2
+ import { useKeyboard } from "@opentui/react";
3
+ import { useEffect } from "react";
4
+ import { selectedIndexAtom, selectedPrIdAtom, viewAtom } from "../atoms/ui.js";
5
+ import { useDialog } from "../context/dialog.js";
6
+ function isSelectable(item) {
7
+ if (!item)
8
+ return false;
9
+ return item.type === "pr" || item.type === "account" || item.type === "notification";
10
+ }
11
+ export function useListNavigation(items, onSelect, onToggle) {
12
+ const selectedIndex = useAtomValue(selectedIndexAtom);
13
+ const setSelectedIndex = useAtomSet(selectedIndexAtom);
14
+ const setSelectedPrId = useAtomSet(selectedPrIdAtom);
15
+ const view = useAtomValue(viewAtom);
16
+ const dialog = useDialog();
17
+ // Helper to update both index and PR ID atomically
18
+ const navigate = (newIndex) => {
19
+ setSelectedIndex(newIndex);
20
+ const item = items[newIndex];
21
+ if (item?.type === "pr") {
22
+ setSelectedPrId(item.pr.id);
23
+ }
24
+ };
25
+ // Sync selected index when items change or become unselectable
26
+ useEffect(() => {
27
+ if (items.length === 0)
28
+ return;
29
+ let index = selectedIndex;
30
+ if (index >= items.length)
31
+ index = items.length - 1;
32
+ if (index < 0)
33
+ index = 0;
34
+ // If current item is not selectable, find nearest
35
+ if (items[index] && !isSelectable(items[index])) {
36
+ // Search down
37
+ let found = -1;
38
+ for (let i = index; i < items.length; i++) {
39
+ if (items[i] && isSelectable(items[i])) {
40
+ found = i;
41
+ break;
42
+ }
43
+ }
44
+ // Search up if not found down
45
+ if (found === -1) {
46
+ for (let i = index; i >= 0; i--) {
47
+ if (items[i] && isSelectable(items[i])) {
48
+ found = i;
49
+ break;
50
+ }
51
+ }
52
+ }
53
+ if (found !== -1)
54
+ index = found;
55
+ }
56
+ if (index !== selectedIndex) {
57
+ setSelectedIndex(index);
58
+ }
59
+ }, [items, selectedIndex, setSelectedIndex]);
60
+ useKeyboard((key) => {
61
+ if (dialog.current)
62
+ return;
63
+ if (view === "details")
64
+ return;
65
+ if (key.name === "down") {
66
+ let next = selectedIndex + 1;
67
+ while (next < items.length && (!items[next] || !isSelectable(items[next]))) {
68
+ next++;
69
+ }
70
+ if (next < items.length)
71
+ navigate(next);
72
+ }
73
+ else if (key.name === "up") {
74
+ let prev = selectedIndex - 1;
75
+ while (prev >= 0 && (!items[prev] || !isSelectable(items[prev]))) {
76
+ prev--;
77
+ }
78
+ if (prev >= 0)
79
+ navigate(prev);
80
+ }
81
+ else if (key.name === "pageup") {
82
+ let prev = Math.max(selectedIndex - 10, 0);
83
+ while (prev > 0 && (!items[prev] || !isSelectable(items[prev])))
84
+ prev--;
85
+ if (prev >= 0 && items[prev] && isSelectable(items[prev]))
86
+ navigate(prev);
87
+ }
88
+ else if (key.name === "pagedown") {
89
+ let next = Math.min(selectedIndex + 10, items.length - 1);
90
+ while (next < items.length && (!items[next] || !isSelectable(items[next])))
91
+ next++;
92
+ if (next >= items.length) {
93
+ next = items.length - 1;
94
+ while (next > selectedIndex && (!items[next] || !isSelectable(items[next])))
95
+ next--;
96
+ }
97
+ if (next >= 0 && items[next] && isSelectable(items[next]))
98
+ navigate(next);
99
+ }
100
+ else if (key.name === "home") {
101
+ let next = 0;
102
+ while (next < items.length && (!items[next] || !isSelectable(items[next])))
103
+ next++;
104
+ if (next < items.length)
105
+ navigate(next);
106
+ }
107
+ else if (key.name === "end") {
108
+ let prev = items.length - 1;
109
+ while (prev >= 0 && (!items[prev] || !isSelectable(items[prev])))
110
+ prev--;
111
+ if (prev >= 0)
112
+ navigate(prev);
113
+ }
114
+ else if (key.name === "return") {
115
+ onSelect();
116
+ }
117
+ else if (key.name === "space") {
118
+ if (onToggle)
119
+ onToggle();
120
+ }
121
+ });
122
+ }
123
+ //# sourceMappingURL=useListNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useListNavigation.js","sourceRoot":"","sources":["../../../../src/tui/hooks/useListNavigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Domain } from "@knpkv/codecommit-core";
2
+ export declare const mockAccount: Domain.Account;
3
+ export declare const mockPR: Domain.PullRequest;
4
+ export declare const mockPRConflict: Domain.PullRequest;
5
+ export declare const mockPRList: Array<Domain.PullRequest>;
6
+ //# sourceMappingURL=mocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../../src/tui/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAM/C,eAAO,MAAM,WAAW,gBAGtB,CAAA;AAEF,eAAO,MAAM,MAAM,oBAejB,CAAA;AAEF,eAAO,MAAM,cAAc,oBAIzB,CAAA;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAOhD,CAAA"}
@@ -0,0 +1,36 @@
1
+ import { Domain } from "@knpkv/codecommit-core";
2
+ import { Schema } from "effect";
3
+ const decodeAccount = Schema.decodeSync(Domain.Account);
4
+ const decodePullRequest = Schema.decodeSync(Domain.PullRequest);
5
+ export const mockAccount = decodeAccount({
6
+ id: "123456789012",
7
+ region: "us-east-1"
8
+ });
9
+ export const mockPR = decodePullRequest({
10
+ id: "pr-1",
11
+ title: "Update README.md",
12
+ description: "Fixing typos in documentation",
13
+ author: "jdoe",
14
+ repositoryName: "my-repo",
15
+ creationDate: new Date("2023-10-25T10:00:00Z"),
16
+ lastModifiedDate: new Date("2023-10-25T11:00:00Z"),
17
+ link: "https://console.aws.amazon.com/codesuite/codecommit/repositories/my-repo/pull-requests/1",
18
+ account: mockAccount,
19
+ status: "OPEN",
20
+ sourceBranch: "feature/docs",
21
+ destinationBranch: "main",
22
+ isMergeable: true,
23
+ isApproved: false
24
+ });
25
+ export const mockPRConflict = decodePullRequest({
26
+ ...mockPR,
27
+ id: "pr-conflict",
28
+ isMergeable: false
29
+ });
30
+ export const mockPRList = Array.from({ length: 10 }).map((_, i) => decodePullRequest({
31
+ ...mockPR,
32
+ id: `pr-${i + 1}`,
33
+ title: `Feature ${i + 1}`,
34
+ author: i % 2 === 0 ? "jdoe" : "alice"
35
+ }));
36
+ //# sourceMappingURL=mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../../src/tui/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACvD,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,EAAE,EAAE,cAAc;IAClB,MAAM,EAAE,WAAW;CACpB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,iBAAiB,CAAC;IACtC,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,kBAAkB;IACzB,WAAW,EAAE,+BAA+B;IAC5C,MAAM,EAAE,MAAM;IACd,cAAc,EAAE,SAAS;IACzB,YAAY,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;IAC9C,gBAAgB,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;IAClD,IAAI,EAAE,0FAA0F;IAChG,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,MAAM;IACzB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,KAAK;CAClB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;IAC9C,GAAG,MAAM;IACT,EAAE,EAAE,aAAa;IACjB,WAAW,EAAE,KAAK;CACnB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAA8B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3F,iBAAiB,CAAC;IAChB,GAAG,MAAM;IACT,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;IACjB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE;IACzB,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;CACvC,CAAC,CACH,CAAA"}