@calltelemetry/cli 0.6.13 → 0.7.1

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 (436) hide show
  1. package/dist/commands/config.d.ts.map +1 -1
  2. package/dist/commands/config.js +0 -42
  3. package/dist/commands/config.js.map +1 -1
  4. package/dist/commands/loadtest.d.ts.map +1 -1
  5. package/dist/commands/loadtest.js +214 -1
  6. package/dist/commands/loadtest.js.map +1 -1
  7. package/dist/commands/otel.d.ts +3 -0
  8. package/dist/commands/otel.d.ts.map +1 -0
  9. package/dist/commands/otel.js +89 -0
  10. package/dist/commands/otel.js.map +1 -0
  11. package/dist/commands/seed.d.ts +3 -0
  12. package/dist/commands/seed.d.ts.map +1 -0
  13. package/dist/commands/seed.js +106 -0
  14. package/dist/commands/seed.js.map +1 -0
  15. package/dist/commands/storage.d.ts +3 -0
  16. package/dist/commands/storage.d.ts.map +1 -0
  17. package/dist/commands/storage.js +66 -0
  18. package/dist/commands/storage.js.map +1 -0
  19. package/dist/index.js +6 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/lib/migration-004-systemd-docker.js +3 -3
  22. package/dist/lib/migration-004-systemd-docker.js.map +1 -1
  23. package/dist/lib/migration-005-ssh-keys.js +3 -3
  24. package/dist/lib/migration-005-ssh-keys.js.map +1 -1
  25. package/dist/lib/migration-013-grafana-password.d.ts +15 -0
  26. package/dist/lib/migration-013-grafana-password.d.ts.map +1 -0
  27. package/dist/lib/migration-013-grafana-password.js +80 -0
  28. package/dist/lib/migration-013-grafana-password.js.map +1 -0
  29. package/dist/lib/migration-014-docker-firewall-backend.d.ts +16 -0
  30. package/dist/lib/migration-014-docker-firewall-backend.d.ts.map +1 -0
  31. package/dist/lib/migration-014-docker-firewall-backend.js +72 -0
  32. package/dist/lib/migration-014-docker-firewall-backend.js.map +1 -0
  33. package/dist/lib/migrations.d.ts +8 -0
  34. package/dist/lib/migrations.d.ts.map +1 -1
  35. package/dist/lib/migrations.js +52 -0
  36. package/dist/lib/migrations.js.map +1 -1
  37. package/dist/lib/otel.d.ts +7 -7
  38. package/dist/lib/otel.d.ts.map +1 -1
  39. package/dist/lib/otel.js +18 -25
  40. package/dist/lib/otel.js.map +1 -1
  41. package/dist/lib/prefs.d.ts +1 -0
  42. package/dist/lib/prefs.d.ts.map +1 -1
  43. package/dist/lib/prefs.js +1 -0
  44. package/dist/lib/prefs.js.map +1 -1
  45. package/dist/lib/prompts.d.ts +3 -0
  46. package/dist/lib/prompts.d.ts.map +1 -0
  47. package/dist/lib/prompts.js +39 -0
  48. package/dist/lib/prompts.js.map +1 -0
  49. package/dist/lib/rpc-scripts.d.ts +4 -0
  50. package/dist/lib/rpc-scripts.d.ts.map +1 -1
  51. package/dist/lib/rpc-scripts.js +235 -0
  52. package/dist/lib/rpc-scripts.js.map +1 -1
  53. package/dist/lib/secrets.d.ts +2 -2
  54. package/dist/lib/secrets.d.ts.map +1 -1
  55. package/dist/lib/secrets.js +2 -1
  56. package/dist/lib/secrets.js.map +1 -1
  57. package/dist/lib/seed/connection.d.ts +5 -0
  58. package/dist/lib/seed/connection.d.ts.map +1 -0
  59. package/dist/lib/seed/connection.js +168 -0
  60. package/dist/lib/seed/connection.js.map +1 -0
  61. package/dist/lib/seed/copy.d.ts +4 -0
  62. package/dist/lib/seed/copy.d.ts.map +1 -0
  63. package/dist/lib/seed/copy.js +74 -0
  64. package/dist/lib/seed/copy.js.map +1 -0
  65. package/dist/lib/seed/dashboard-templates.d.ts +22 -0
  66. package/dist/lib/seed/dashboard-templates.d.ts.map +1 -0
  67. package/dist/lib/seed/dashboard-templates.js +268 -0
  68. package/dist/lib/seed/dashboard-templates.js.map +1 -0
  69. package/dist/lib/seed/families.d.ts +5 -0
  70. package/dist/lib/seed/families.d.ts.map +1 -0
  71. package/dist/lib/seed/families.js +1541 -0
  72. package/dist/lib/seed/families.js.map +1 -0
  73. package/dist/lib/seed/index.d.ts +12 -0
  74. package/dist/lib/seed/index.d.ts.map +1 -0
  75. package/dist/lib/seed/index.js +327 -0
  76. package/dist/lib/seed/index.js.map +1 -0
  77. package/dist/lib/seed/presets.d.ts +5 -0
  78. package/dist/lib/seed/presets.d.ts.map +1 -0
  79. package/dist/lib/seed/presets.js +114 -0
  80. package/dist/lib/seed/presets.js.map +1 -0
  81. package/dist/lib/seed/schema/columns.d.ts +35 -0
  82. package/dist/lib/seed/schema/columns.d.ts.map +1 -0
  83. package/dist/lib/seed/schema/columns.js +497 -0
  84. package/dist/lib/seed/schema/columns.js.map +1 -0
  85. package/dist/lib/seed/schema/fingerprint.d.ts +2 -0
  86. package/dist/lib/seed/schema/fingerprint.d.ts.map +1 -0
  87. package/dist/lib/seed/schema/fingerprint.js +4 -0
  88. package/dist/lib/seed/schema/fingerprint.js.map +1 -0
  89. package/dist/lib/seed/schema/index.d.ts +4 -0
  90. package/dist/lib/seed/schema/index.d.ts.map +1 -0
  91. package/dist/lib/seed/schema/index.js +6 -0
  92. package/dist/lib/seed/schema/index.js.map +1 -0
  93. package/dist/lib/seed/schema/spec.d.ts +8 -0
  94. package/dist/lib/seed/schema/spec.d.ts.map +1 -0
  95. package/dist/lib/seed/schema/spec.js +655 -0
  96. package/dist/lib/seed/schema/spec.js.map +1 -0
  97. package/dist/lib/seed/schema/tables.d.ts +132 -0
  98. package/dist/lib/seed/schema/tables.d.ts.map +1 -0
  99. package/dist/lib/seed/schema/tables.js +37 -0
  100. package/dist/lib/seed/schema/tables.js.map +1 -0
  101. package/dist/lib/seed/store.d.ts +26 -0
  102. package/dist/lib/seed/store.d.ts.map +1 -0
  103. package/dist/lib/seed/store.js +111 -0
  104. package/dist/lib/seed/store.js.map +1 -0
  105. package/dist/lib/seed/types.d.ts +71 -0
  106. package/dist/lib/seed/types.d.ts.map +1 -0
  107. package/dist/lib/seed/types.js +2 -0
  108. package/dist/lib/seed/types.js.map +1 -0
  109. package/dist/lib/storage.d.ts +4 -0
  110. package/dist/lib/storage.d.ts.map +1 -0
  111. package/dist/lib/storage.js +36 -0
  112. package/dist/lib/storage.js.map +1 -0
  113. package/dist/lib/update-steps.d.ts.map +1 -1
  114. package/dist/lib/update-steps.js +15 -0
  115. package/dist/lib/update-steps.js.map +1 -1
  116. package/dist/lib/update.d.ts.map +1 -1
  117. package/dist/lib/update.js +28 -2
  118. package/dist/lib/update.js.map +1 -1
  119. package/dist/lib/version.d.ts +1 -1
  120. package/dist/lib/version.d.ts.map +1 -1
  121. package/dist/lib/version.js +1 -1
  122. package/dist/lib/version.js.map +1 -1
  123. package/dist/lib/xcc-loadtest-types.d.ts +232 -0
  124. package/dist/lib/xcc-loadtest-types.d.ts.map +1 -0
  125. package/dist/lib/xcc-loadtest-types.js +2 -0
  126. package/dist/lib/xcc-loadtest-types.js.map +1 -0
  127. package/dist/lib/xcc-loadtest.d.ts +4 -0
  128. package/dist/lib/xcc-loadtest.d.ts.map +1 -0
  129. package/dist/lib/xcc-loadtest.js +616 -0
  130. package/dist/lib/xcc-loadtest.js.map +1 -0
  131. package/dist/lib/xcc-overlay.d.ts +3 -0
  132. package/dist/lib/xcc-overlay.d.ts.map +1 -0
  133. package/dist/lib/xcc-overlay.js +74 -0
  134. package/dist/lib/xcc-overlay.js.map +1 -0
  135. package/dist/lib/xcc-scenarios.d.ts +8 -0
  136. package/dist/lib/xcc-scenarios.d.ts.map +1 -0
  137. package/dist/lib/xcc-scenarios.js +129 -0
  138. package/dist/lib/xcc-scenarios.js.map +1 -0
  139. package/dist/lib/xcc-xml.d.ts +18 -0
  140. package/dist/lib/xcc-xml.d.ts.map +1 -0
  141. package/dist/lib/xcc-xml.js +210 -0
  142. package/dist/lib/xcc-xml.js.map +1 -0
  143. package/dist/shell/commands/appliance-migrations.d.ts +7 -0
  144. package/dist/shell/commands/appliance-migrations.d.ts.map +1 -0
  145. package/dist/shell/commands/appliance-migrations.js +128 -0
  146. package/dist/shell/commands/appliance-migrations.js.map +1 -0
  147. package/dist/shell/commands/appliance-performance.js +6 -6
  148. package/dist/shell/commands/appliance-performance.js.map +1 -1
  149. package/dist/shell/commands/config.d.ts.map +1 -1
  150. package/dist/shell/commands/config.js +6 -5
  151. package/dist/shell/commands/config.js.map +1 -1
  152. package/dist/shell/commands/connect.d.ts.map +1 -1
  153. package/dist/shell/commands/connect.js +3 -2
  154. package/dist/shell/commands/connect.js.map +1 -1
  155. package/dist/shell/commands/db.d.ts.map +1 -1
  156. package/dist/shell/commands/db.js +5 -4
  157. package/dist/shell/commands/db.js.map +1 -1
  158. package/dist/shell/commands/debug.d.ts.map +1 -1
  159. package/dist/shell/commands/debug.js +5 -4
  160. package/dist/shell/commands/debug.js.map +1 -1
  161. package/dist/shell/commands/diag.js +10 -10
  162. package/dist/shell/commands/diag.js.map +1 -1
  163. package/dist/shell/commands/registry.d.ts.map +1 -1
  164. package/dist/shell/commands/registry.js +56 -1
  165. package/dist/shell/commands/registry.js.map +1 -1
  166. package/dist/shell/commands/secrets.d.ts.map +1 -1
  167. package/dist/shell/commands/secrets.js +2 -1
  168. package/dist/shell/commands/secrets.js.map +1 -1
  169. package/dist/shell/commands/seed.d.ts +9 -0
  170. package/dist/shell/commands/seed.d.ts.map +1 -0
  171. package/dist/shell/commands/seed.js +197 -0
  172. package/dist/shell/commands/seed.js.map +1 -0
  173. package/dist/shell/commands/services.d.ts.map +1 -1
  174. package/dist/shell/commands/services.js +5 -4
  175. package/dist/shell/commands/services.js.map +1 -1
  176. package/dist/shell/commands/test.d.ts.map +1 -1
  177. package/dist/shell/commands/test.js +3 -2
  178. package/dist/shell/commands/test.js.map +1 -1
  179. package/dist/shell/commands/users.d.ts.map +1 -1
  180. package/dist/shell/commands/users.js +5 -39
  181. package/dist/shell/commands/users.js.map +1 -1
  182. package/dist/shell/network-onboarding.d.ts.map +1 -1
  183. package/dist/shell/network-onboarding.js +11 -45
  184. package/dist/shell/network-onboarding.js.map +1 -1
  185. package/dist/ui/components/ActionBar.d.ts +13 -0
  186. package/dist/ui/components/ActionBar.d.ts.map +1 -0
  187. package/dist/ui/components/ActionBar.js +7 -0
  188. package/dist/ui/components/ActionBar.js.map +1 -0
  189. package/dist/ui/components/AppShell.d.ts +6 -1
  190. package/dist/ui/components/AppShell.d.ts.map +1 -1
  191. package/dist/ui/components/AppShell.js +32 -10
  192. package/dist/ui/components/AppShell.js.map +1 -1
  193. package/dist/ui/components/DashboardBlock.d.ts +11 -0
  194. package/dist/ui/components/DashboardBlock.d.ts.map +1 -0
  195. package/dist/ui/components/DashboardBlock.js +6 -0
  196. package/dist/ui/components/DashboardBlock.js.map +1 -0
  197. package/dist/ui/components/DataTable.d.ts +6 -1
  198. package/dist/ui/components/DataTable.d.ts.map +1 -1
  199. package/dist/ui/components/DataTable.js +71 -7
  200. package/dist/ui/components/DataTable.js.map +1 -1
  201. package/dist/ui/components/ErrorBoundary.d.ts +1 -1
  202. package/dist/ui/components/FieldList.d.ts +24 -0
  203. package/dist/ui/components/FieldList.d.ts.map +1 -0
  204. package/dist/ui/components/FieldList.js +67 -0
  205. package/dist/ui/components/FieldList.js.map +1 -0
  206. package/dist/ui/components/KeyValue.d.ts +4 -2
  207. package/dist/ui/components/KeyValue.d.ts.map +1 -1
  208. package/dist/ui/components/KeyValue.js +4 -2
  209. package/dist/ui/components/KeyValue.js.map +1 -1
  210. package/dist/ui/components/KeyboardHint.d.ts +10 -0
  211. package/dist/ui/components/KeyboardHint.d.ts.map +1 -0
  212. package/dist/ui/components/KeyboardHint.js +6 -0
  213. package/dist/ui/components/KeyboardHint.js.map +1 -0
  214. package/dist/ui/components/MenuList.d.ts +10 -0
  215. package/dist/ui/components/MenuList.d.ts.map +1 -0
  216. package/dist/ui/components/MenuList.js +7 -0
  217. package/dist/ui/components/MenuList.js.map +1 -0
  218. package/dist/ui/components/MetricsFooter.d.ts +10 -7
  219. package/dist/ui/components/MetricsFooter.d.ts.map +1 -1
  220. package/dist/ui/components/MetricsFooter.js +16 -3
  221. package/dist/ui/components/MetricsFooter.js.map +1 -1
  222. package/dist/ui/components/PaneSection.d.ts +9 -0
  223. package/dist/ui/components/PaneSection.d.ts.map +1 -0
  224. package/dist/ui/components/PaneSection.js +6 -0
  225. package/dist/ui/components/PaneSection.js.map +1 -0
  226. package/dist/ui/components/PanelState.d.ts +8 -0
  227. package/dist/ui/components/PanelState.d.ts.map +1 -0
  228. package/dist/ui/components/PanelState.js +7 -0
  229. package/dist/ui/components/PanelState.js.map +1 -0
  230. package/dist/ui/components/ScrollViewport.d.ts +16 -0
  231. package/dist/ui/components/ScrollViewport.d.ts.map +1 -0
  232. package/dist/ui/components/ScrollViewport.js +54 -0
  233. package/dist/ui/components/ScrollViewport.js.map +1 -0
  234. package/dist/ui/components/Section.js +1 -1
  235. package/dist/ui/components/Section.js.map +1 -1
  236. package/dist/ui/components/SelectMenu.d.ts.map +1 -1
  237. package/dist/ui/components/SelectMenu.js +3 -3
  238. package/dist/ui/components/SelectMenu.js.map +1 -1
  239. package/dist/ui/components/ShellOutput.d.ts +2 -1
  240. package/dist/ui/components/ShellOutput.d.ts.map +1 -1
  241. package/dist/ui/components/ShellOutput.js +6 -2
  242. package/dist/ui/components/ShellOutput.js.map +1 -1
  243. package/dist/ui/components/SplitPane.d.ts +18 -0
  244. package/dist/ui/components/SplitPane.d.ts.map +1 -0
  245. package/dist/ui/components/SplitPane.js +9 -0
  246. package/dist/ui/components/SplitPane.js.map +1 -0
  247. package/dist/ui/components/StatusList.d.ts +18 -0
  248. package/dist/ui/components/StatusList.d.ts.map +1 -0
  249. package/dist/ui/components/StatusList.js +13 -0
  250. package/dist/ui/components/StatusList.js.map +1 -0
  251. package/dist/ui/components/SummaryStrip.d.ts +9 -0
  252. package/dist/ui/components/SummaryStrip.d.ts.map +1 -0
  253. package/dist/ui/components/SummaryStrip.js +6 -0
  254. package/dist/ui/components/SummaryStrip.js.map +1 -0
  255. package/dist/ui/components/app-shell-viewport.d.ts +7 -0
  256. package/dist/ui/components/app-shell-viewport.d.ts.map +1 -0
  257. package/dist/ui/components/app-shell-viewport.js +6 -0
  258. package/dist/ui/components/app-shell-viewport.js.map +1 -0
  259. package/dist/ui/components/index.d.ts +14 -0
  260. package/dist/ui/components/index.d.ts.map +1 -1
  261. package/dist/ui/components/index.js +12 -0
  262. package/dist/ui/components/index.js.map +1 -1
  263. package/dist/ui/context/MetricsContext.d.ts.map +1 -1
  264. package/dist/ui/context/MetricsContext.js +15 -12
  265. package/dist/ui/context/MetricsContext.js.map +1 -1
  266. package/dist/ui/hooks/index.d.ts +9 -1
  267. package/dist/ui/hooks/index.d.ts.map +1 -1
  268. package/dist/ui/hooks/index.js +7 -0
  269. package/dist/ui/hooks/index.js.map +1 -1
  270. package/dist/ui/hooks/useAsyncTask.d.ts +7 -1
  271. package/dist/ui/hooks/useAsyncTask.d.ts.map +1 -1
  272. package/dist/ui/hooks/useAsyncTask.js +30 -6
  273. package/dist/ui/hooks/useAsyncTask.js.map +1 -1
  274. package/dist/ui/hooks/useBoundedCursor.d.ts +7 -0
  275. package/dist/ui/hooks/useBoundedCursor.d.ts.map +1 -0
  276. package/dist/ui/hooks/useBoundedCursor.js +19 -0
  277. package/dist/ui/hooks/useBoundedCursor.js.map +1 -0
  278. package/dist/ui/hooks/useConfirmBackNav.d.ts +7 -0
  279. package/dist/ui/hooks/useConfirmBackNav.d.ts.map +1 -0
  280. package/dist/ui/hooks/useConfirmBackNav.js +10 -0
  281. package/dist/ui/hooks/useConfirmBackNav.js.map +1 -0
  282. package/dist/ui/hooks/useDismissKeys.d.ts +10 -0
  283. package/dist/ui/hooks/useDismissKeys.d.ts.map +1 -0
  284. package/dist/ui/hooks/useDismissKeys.js +17 -0
  285. package/dist/ui/hooks/useDismissKeys.js.map +1 -0
  286. package/dist/ui/hooks/useListCursor.d.ts +7 -0
  287. package/dist/ui/hooks/useListCursor.d.ts.map +1 -0
  288. package/dist/ui/hooks/useListCursor.js +29 -0
  289. package/dist/ui/hooks/useListCursor.js.map +1 -0
  290. package/dist/ui/hooks/useTwoPaneCursor.d.ts +12 -0
  291. package/dist/ui/hooks/useTwoPaneCursor.d.ts.map +1 -0
  292. package/dist/ui/hooks/useTwoPaneCursor.js +36 -0
  293. package/dist/ui/hooks/useTwoPaneCursor.js.map +1 -0
  294. package/dist/ui/hooks/useXccBackendOverlay.d.ts +9 -0
  295. package/dist/ui/hooks/useXccBackendOverlay.d.ts.map +1 -0
  296. package/dist/ui/hooks/useXccBackendOverlay.js +14 -0
  297. package/dist/ui/hooks/useXccBackendOverlay.js.map +1 -0
  298. package/dist/ui/hooks/useXccLoadTest.d.ts +11 -0
  299. package/dist/ui/hooks/useXccLoadTest.d.ts.map +1 -0
  300. package/dist/ui/hooks/useXccLoadTest.js +37 -0
  301. package/dist/ui/hooks/useXccLoadTest.js.map +1 -0
  302. package/dist/ui/palette.d.ts +23 -0
  303. package/dist/ui/palette.d.ts.map +1 -0
  304. package/dist/ui/palette.js +22 -0
  305. package/dist/ui/palette.js.map +1 -0
  306. package/dist/ui/views/DbHealthView.js +4 -4
  307. package/dist/ui/views/DbHealthView.js.map +1 -1
  308. package/dist/ui/views/DbSizeView.d.ts.map +1 -1
  309. package/dist/ui/views/DbSizeView.js +2 -2
  310. package/dist/ui/views/DbSizeView.js.map +1 -1
  311. package/dist/ui/views/DbTablesView.d.ts.map +1 -1
  312. package/dist/ui/views/DbTablesView.js +2 -2
  313. package/dist/ui/views/DbTablesView.js.map +1 -1
  314. package/dist/ui/views/DiagDatabaseView.d.ts.map +1 -1
  315. package/dist/ui/views/DiagDatabaseView.js +4 -3
  316. package/dist/ui/views/DiagDatabaseView.js.map +1 -1
  317. package/dist/ui/views/DiagNetworkView.js +2 -2
  318. package/dist/ui/views/DiagNetworkView.js.map +1 -1
  319. package/dist/ui/views/DiagServiceView.js +1 -1
  320. package/dist/ui/views/DiagServiceView.js.map +1 -1
  321. package/dist/ui/views/DockerPruneView.d.ts.map +1 -1
  322. package/dist/ui/views/DockerPruneView.js +4 -8
  323. package/dist/ui/views/DockerPruneView.js.map +1 -1
  324. package/dist/ui/views/K8sDeployView.d.ts.map +1 -1
  325. package/dist/ui/views/K8sDeployView.js +5 -5
  326. package/dist/ui/views/K8sDeployView.js.map +1 -1
  327. package/dist/ui/views/K8sServicesView.d.ts.map +1 -1
  328. package/dist/ui/views/K8sServicesView.js +6 -11
  329. package/dist/ui/views/K8sServicesView.js.map +1 -1
  330. package/dist/ui/views/K8sStatusView.d.ts.map +1 -1
  331. package/dist/ui/views/K8sStatusView.js +14 -19
  332. package/dist/ui/views/K8sStatusView.js.map +1 -1
  333. package/dist/ui/views/LoadTestConfigView.d.ts.map +1 -1
  334. package/dist/ui/views/LoadTestConfigView.js +45 -43
  335. package/dist/ui/views/LoadTestConfigView.js.map +1 -1
  336. package/dist/ui/views/LoadTestSummaryView.d.ts.map +1 -1
  337. package/dist/ui/views/LoadTestSummaryView.js +7 -2
  338. package/dist/ui/views/LoadTestSummaryView.js.map +1 -1
  339. package/dist/ui/views/MainMenu.d.ts.map +1 -1
  340. package/dist/ui/views/MainMenu.js +254 -55
  341. package/dist/ui/views/MainMenu.js.map +1 -1
  342. package/dist/ui/views/MigrateHistoryView.d.ts.map +1 -1
  343. package/dist/ui/views/MigrateHistoryView.js +11 -2
  344. package/dist/ui/views/MigrateHistoryView.js.map +1 -1
  345. package/dist/ui/views/MigrateRollbackView.d.ts.map +1 -1
  346. package/dist/ui/views/MigrateRollbackView.js +4 -8
  347. package/dist/ui/views/MigrateRollbackView.js.map +1 -1
  348. package/dist/ui/views/MigrateRunView.d.ts.map +1 -1
  349. package/dist/ui/views/MigrateRunView.js +4 -8
  350. package/dist/ui/views/MigrateRunView.js.map +1 -1
  351. package/dist/ui/views/MigrateStatusView.js +1 -1
  352. package/dist/ui/views/MigrateStatusView.js.map +1 -1
  353. package/dist/ui/views/MigrateWatchView.js +1 -1
  354. package/dist/ui/views/MigrateWatchView.js.map +1 -1
  355. package/dist/ui/views/OfflineApplyView.d.ts.map +1 -1
  356. package/dist/ui/views/OfflineApplyView.js +17 -7
  357. package/dist/ui/views/OfflineApplyView.js.map +1 -1
  358. package/dist/ui/views/OfflineDownloadView.d.ts.map +1 -1
  359. package/dist/ui/views/OfflineDownloadView.js +17 -7
  360. package/dist/ui/views/OfflineDownloadView.js.map +1 -1
  361. package/dist/ui/views/OfflineFetchView.d.ts.map +1 -1
  362. package/dist/ui/views/OfflineFetchView.js +17 -7
  363. package/dist/ui/views/OfflineFetchView.js.map +1 -1
  364. package/dist/ui/views/OfflineInspectView.d.ts.map +1 -1
  365. package/dist/ui/views/OfflineInspectView.js +17 -7
  366. package/dist/ui/views/OfflineInspectView.js.map +1 -1
  367. package/dist/ui/views/OsUpdatesEnableView.js +4 -4
  368. package/dist/ui/views/OsUpdatesEnableView.js.map +1 -1
  369. package/dist/ui/views/OsUpdatesLogView.js +1 -1
  370. package/dist/ui/views/OsUpdatesLogView.js.map +1 -1
  371. package/dist/ui/views/OsUpdatesStatusView.d.ts.map +1 -1
  372. package/dist/ui/views/OsUpdatesStatusView.js +12 -12
  373. package/dist/ui/views/OsUpdatesStatusView.js.map +1 -1
  374. package/dist/ui/views/PowerActionView.d.ts.map +1 -1
  375. package/dist/ui/views/PowerActionView.js +3 -8
  376. package/dist/ui/views/PowerActionView.js.map +1 -1
  377. package/dist/ui/views/SecretsResetPasswordView.d.ts.map +1 -1
  378. package/dist/ui/views/SecretsResetPasswordView.js +23 -7
  379. package/dist/ui/views/SecretsResetPasswordView.js.map +1 -1
  380. package/dist/ui/views/SecretsSetupView.d.ts.map +1 -1
  381. package/dist/ui/views/SecretsSetupView.js +39 -22
  382. package/dist/ui/views/SecretsSetupView.js.map +1 -1
  383. package/dist/ui/views/ServiceLogsView.d.ts.map +1 -1
  384. package/dist/ui/views/ServiceLogsView.js +9 -9
  385. package/dist/ui/views/ServiceLogsView.js.map +1 -1
  386. package/dist/ui/views/ServicesView.d.ts.map +1 -1
  387. package/dist/ui/views/ServicesView.js +51 -28
  388. package/dist/ui/views/ServicesView.js.map +1 -1
  389. package/dist/ui/views/SettingsView.d.ts.map +1 -1
  390. package/dist/ui/views/SettingsView.js +5 -4
  391. package/dist/ui/views/SettingsView.js.map +1 -1
  392. package/dist/ui/views/SetupWizardView.d.ts.map +1 -1
  393. package/dist/ui/views/SetupWizardView.js +37 -32
  394. package/dist/ui/views/SetupWizardView.js.map +1 -1
  395. package/dist/ui/views/StatusView.d.ts.map +1 -1
  396. package/dist/ui/views/StatusView.js +44 -31
  397. package/dist/ui/views/StatusView.js.map +1 -1
  398. package/dist/ui/views/UpdateView.d.ts.map +1 -1
  399. package/dist/ui/views/UpdateView.js +28 -14
  400. package/dist/ui/views/UpdateView.js.map +1 -1
  401. package/dist/ui/views/UserResetPasswordView.d.ts.map +1 -1
  402. package/dist/ui/views/UserResetPasswordView.js +26 -8
  403. package/dist/ui/views/UserResetPasswordView.js.map +1 -1
  404. package/dist/ui/views/XccLoadTestConfigView.d.ts +29 -0
  405. package/dist/ui/views/XccLoadTestConfigView.d.ts.map +1 -0
  406. package/dist/ui/views/XccLoadTestConfigView.js +210 -0
  407. package/dist/ui/views/XccLoadTestConfigView.js.map +1 -0
  408. package/dist/ui/views/XccLoadTestRunView.d.ts +9 -0
  409. package/dist/ui/views/XccLoadTestRunView.d.ts.map +1 -0
  410. package/dist/ui/views/XccLoadTestRunView.js +154 -0
  411. package/dist/ui/views/XccLoadTestRunView.js.map +1 -0
  412. package/dist/ui/views/XccLoadTestSummaryView.d.ts +9 -0
  413. package/dist/ui/views/XccLoadTestSummaryView.d.ts.map +1 -0
  414. package/dist/ui/views/XccLoadTestSummaryView.js +63 -0
  415. package/dist/ui/views/XccLoadTestSummaryView.js.map +1 -0
  416. package/dist/ui/views/XccLoadTestView.d.ts +8 -0
  417. package/dist/ui/views/XccLoadTestView.d.ts.map +1 -0
  418. package/dist/ui/views/XccLoadTestView.js +40 -0
  419. package/dist/ui/views/XccLoadTestView.js.map +1 -0
  420. package/package.json +6 -1
  421. package/dist/ui/views/JtapiDisableView.d.ts +0 -6
  422. package/dist/ui/views/JtapiDisableView.d.ts.map +0 -1
  423. package/dist/ui/views/JtapiDisableView.js +0 -52
  424. package/dist/ui/views/JtapiDisableView.js.map +0 -1
  425. package/dist/ui/views/JtapiEnableView.d.ts +0 -6
  426. package/dist/ui/views/JtapiEnableView.d.ts.map +0 -1
  427. package/dist/ui/views/JtapiEnableView.js +0 -40
  428. package/dist/ui/views/JtapiEnableView.js.map +0 -1
  429. package/dist/ui/views/JtapiStatusView.d.ts +0 -6
  430. package/dist/ui/views/JtapiStatusView.d.ts.map +0 -1
  431. package/dist/ui/views/JtapiStatusView.js +0 -11
  432. package/dist/ui/views/JtapiStatusView.js.map +0 -1
  433. package/dist/ui/views/JtapiTroubleshootView.d.ts +0 -6
  434. package/dist/ui/views/JtapiTroubleshootView.d.ts.map +0 -1
  435. package/dist/ui/views/JtapiTroubleshootView.js +0 -114
  436. package/dist/ui/views/JtapiTroubleshootView.js.map +0 -1
@@ -1,25 +1,47 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useEffect } from 'react';
3
- import { Box, Text, useApp, useInput } from 'ink';
3
+ import { Box, Text, useApp, useInput, useStdin, useStdout } from 'ink';
4
+ import { AppShellViewportContext } from './app-shell-viewport.js';
4
5
  import { LogLevelBadge } from './LogLevelBadge.js';
5
6
  import { MetricsFooter } from './MetricsFooter.js';
6
- import { useMetrics, useMetricsHistory } from '../context/MetricsContext.js';
7
- export function AppShell({ title = 'CallTelemetry CLI', command, children, onBack, isComplete, breadcrumb, logLevel, hideMetrics, }) {
7
+ export function AppShell({ title = 'CallTelemetry CLI', command, children, onBack, isComplete, breadcrumb, logLevel, hideMetrics, backKeys = ['q', 'escape'], footerHint, }) {
8
8
  const { exit } = useApp();
9
- const metrics = useMetrics();
10
- const metricsHistory = useMetricsHistory();
9
+ const { stdout } = useStdout();
10
+ const { isRawModeSupported } = useStdin();
11
+ const termHeight = stdout?.rows ?? 24;
12
+ const activeBackKeys = backKeys === false ? [] : backKeys;
13
+ const derivedFooterHint = footerHint ?? (activeBackKeys.includes('q')
14
+ ? (onBack ? (isComplete ? 'q Back' : 'q Cancel') : 'q Quit')
15
+ : '');
16
+ const hasFooterHint = derivedFooterHint.length > 0;
11
17
  // Auto-exit when complete with no back handler (standalone mode)
12
18
  useEffect(() => {
13
19
  if (isComplete && !onBack) {
14
20
  exit();
15
21
  }
16
22
  }, [isComplete, onBack, exit]);
17
- // Register q/Escape/leftArrow whenever a back handler is provided
23
+ // q/Escape/leftArrow navigate back when embedded, exit when standalone.
24
+ // Disable when stdin is not a TTY (piped input, VS Code terminal without PTY,
25
+ // tmux without raw mode support) — prevents "Raw mode is not supported" crash.
18
26
  useInput((input, key) => {
19
- if (input === 'q' || key.escape || key.leftArrow) {
20
- onBack();
27
+ const wantsBack = (input === 'q' && activeBackKeys.includes('q')) ||
28
+ (key.escape && activeBackKeys.includes('escape')) ||
29
+ (key.leftArrow && activeBackKeys.includes('leftArrow'));
30
+ if (wantsBack) {
31
+ if (onBack) {
32
+ onBack();
33
+ }
34
+ else {
35
+ exit();
36
+ }
21
37
  }
22
- }, { isActive: Boolean(onBack) });
23
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { borderStyle: "single", paddingX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: title }), breadcrumb && _jsxs(Text, { dimColor: true, children: [" ", breadcrumb] }), logLevel && logLevel !== 'normal' && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(LogLevelBadge, { level: logLevel })] }))] }), command && _jsx(Text, { dimColor: true, children: command })] }), _jsx(Box, { flexDirection: "column", paddingTop: 1, children: children }), onBack && (_jsx(Box, { paddingTop: 1, children: _jsx(Text, { dimColor: true, children: isComplete ? 'q Back' : 'q Cancel' }) })), !hideMetrics && metrics && (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, marginTop: 1, children: _jsx(MetricsFooter, { metrics: metrics, history: metricsHistory }) }))] }));
38
+ }, { isActive: activeBackKeys.length > 0 && isRawModeSupported });
39
+ // Header = 3 rows (border top + content + border bottom)
40
+ // Footer hint = 2 rows (padding + text)
41
+ // Metrics footer = 3 rows (border top + content + border bottom) when visible
42
+ const hasMetrics = !hideMetrics;
43
+ const chromeRows = 3 + (hasFooterHint ? 2 : 0) + (hasMetrics ? 4 : 0);
44
+ const contentHeight = Math.max(4, termHeight - chromeRows);
45
+ return (_jsxs(Box, { flexDirection: "column", height: termHeight, children: [_jsxs(Box, { borderStyle: "single", paddingX: 1, justifyContent: "space-between", flexShrink: 0, children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", bold: true, children: title }), breadcrumb && _jsxs(Text, { dimColor: true, children: [" ", breadcrumb] }), logLevel && logLevel !== 'normal' && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(LogLevelBadge, { level: logLevel })] }))] }), command && _jsx(Text, { dimColor: true, children: command })] }), _jsx(AppShellViewportContext.Provider, { value: { contentHeight }, children: _jsx(Box, { flexDirection: "column", paddingTop: 1, height: contentHeight, overflowY: "hidden", children: children }) }), hasFooterHint && (_jsx(Box, { paddingTop: 1, flexShrink: 0, children: _jsx(Text, { dimColor: true, children: derivedFooterHint }) })), hasMetrics && (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, marginTop: 1, flexShrink: 0, children: _jsx(MetricsFooter, {}) }))] }));
24
46
  }
25
47
  //# sourceMappingURL=AppShell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAgB7E,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,GAAG,mBAAmB,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,GACG;IACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,iEAAiE;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAE/B,kEAAkE;IAClE,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACjD,MAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAC9B,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IACF,WAAW,EAAC,QAAQ,EACpB,QAAQ,EAAE,CAAC,EACX,cAAc,EAAC,eAAe,aAE9B,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,YAAE,KAAK,GAAQ,EACrC,UAAU,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,UAAU,IAAQ,EAClD,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,CACpC,8BACE,KAAC,IAAI,oBAAS,EACd,KAAC,aAAa,IAAC,KAAK,EAAE,QAAQ,GAAI,IACjC,CACJ,IACG,EACL,OAAO,IAAI,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,GAAQ,IACvC,EACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,YACtC,QAAQ,GACL,EACL,MAAM,IAAI,CACT,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,QAAQ,kBAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAQ,GACtD,CACP,EACA,CAAC,WAAW,IAAI,OAAO,IAAI,CAC1B,KAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,YACpE,KAAC,aAAa,IAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAI,GACxD,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAsBnD,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,GAAG,mBAAmB,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,QAAQ,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,EAC1B,UAAU,GACI;IACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,EAAE,kBAAkB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1D,MAAM,iBAAiB,GAAG,UAAU,IAAI,CACtC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5D,CAAC,CAAC,EAAE,CACP,CAAC;IACF,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;IAEnD,iEAAiE;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAE/B,0EAA0E;IAC1E,8EAA8E;IAC9E,+EAA+E;IAC/E,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,MAAM,SAAS,GACb,CAAC,KAAK,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/C,CAAC,GAAG,CAAC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACjD,CAAC,GAAG,CAAC,SAAS,IAAI,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAE1D,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,EAAE,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,IAAI,EAAE,CAAC;YACT,CAAC;QACH,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAC9D,CAAC;IAEF,yDAAyD;IACzD,wCAAwC;IACxC,8EAA8E;IAC9E,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC;IAChC,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;IAE3D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,MAAM,EAAE,UAAU,aAE5C,MAAC,GAAG,IACF,WAAW,EAAC,QAAQ,EACpB,QAAQ,EAAE,CAAC,EACX,cAAc,EAAC,eAAe,EAC9B,UAAU,EAAE,CAAC,aAEb,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,kBAAE,KAAK,GAAQ,EACrC,UAAU,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,UAAU,IAAQ,EAClD,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,CACpC,8BACE,KAAC,IAAI,oBAAS,EACd,KAAC,aAAa,IAAC,KAAK,EAAE,QAAQ,GAAI,IACjC,CACJ,IACG,EACL,OAAO,IAAI,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,GAAQ,IACvC,EAGN,KAAC,uBAAuB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,aAAa,EAAE,YACxD,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAC,QAAQ,YACjF,QAAQ,GACL,GAC2B,EAGlC,aAAa,IAAI,CAChB,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAC/B,KAAC,IAAI,IAAC,QAAQ,kBAAE,iBAAiB,GAAQ,GACrC,CACP,EACA,UAAU,IAAI,CACb,KAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YACnF,KAAC,aAAa,KAAG,GACb,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from 'react';
2
+ interface DashboardBlockProps {
3
+ title: string;
4
+ meta?: ReactNode;
5
+ children: ReactNode;
6
+ paddingLeft?: number;
7
+ marginBottom?: number;
8
+ }
9
+ export declare function DashboardBlock({ title, meta, children, paddingLeft, marginBottom, }: DashboardBlockProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=DashboardBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardBlock.d.ts","sourceRoot":"","sources":["../../../src/ui/components/DashboardBlock.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,WAAe,EACf,YAAgB,GACjB,EAAE,mBAAmB,2CAUrB"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ export function DashboardBlock({ title, meta, children, paddingLeft = 2, marginBottom = 1, }) {
4
+ return (_jsxs(Box, { flexDirection: "column", paddingLeft: paddingLeft, marginBottom: marginBottom, children: [_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { bold: true, children: title }), meta] }), children] }));
5
+ }
6
+ //# sourceMappingURL=DashboardBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardBlock.js","sourceRoot":"","sources":["../../../src/ui/components/DashboardBlock.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,WAAW,GAAG,CAAC,EACf,YAAY,GAAG,CAAC,GACI;IACpB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,aAC9E,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,IAAI,kBAAE,KAAK,GAAQ,EACxB,IAAI,IACD,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -2,11 +2,16 @@ interface Column {
2
2
  key: string;
3
3
  label: string;
4
4
  width?: number;
5
+ minWidth?: number;
6
+ maxWidth?: number;
7
+ priority?: number;
5
8
  }
6
9
  interface DataTableProps {
7
10
  columns: Column[];
8
11
  rows: Array<Record<string, string>>;
12
+ paddingLeft?: number;
13
+ maxWidth?: number;
9
14
  }
10
- export declare function DataTable({ columns, rows }: DataTableProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function DataTable({ columns, rows, paddingLeft, maxWidth }: DataTableProps): import("react/jsx-runtime").JSX.Element;
11
16
  export {};
12
17
  //# sourceMappingURL=DataTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/ui/components/DataTable.tsx"],"names":[],"mappings":"AAEA,UAAU,MAAM;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrC;AAkBD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,cAAc,2CAwB1D"}
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/ui/components/DataTable.tsx"],"names":[],"mappings":"AAEA,UAAU,MAAM;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiFD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAe,EAAE,QAAQ,EAAE,EAAE,cAAc,2CA4BrF"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from 'ink';
2
+ import { Box, Text, useStdout } from 'ink';
3
3
  function computeWidths(columns, rows) {
4
4
  return columns.map((col) => {
5
5
  if (col.width)
@@ -10,19 +10,83 @@ function computeWidths(columns, rows) {
10
10
  if (val.length > max)
11
11
  max = val.length;
12
12
  }
13
+ if (col.maxWidth)
14
+ return Math.min(max, col.maxWidth);
13
15
  return max;
14
16
  });
15
17
  }
18
+ function truncate(str, width) {
19
+ if (width <= 0)
20
+ return '';
21
+ if (str.length <= width)
22
+ return str;
23
+ if (width === 1)
24
+ return '…';
25
+ return `${str.slice(0, width - 1)}…`;
26
+ }
27
+ function totalWidth(widths) {
28
+ return widths.reduce((sum, width) => sum + width, 0) + widths.length * 3 + 1;
29
+ }
16
30
  function pad(str, width) {
17
- return str + ' '.repeat(Math.max(0, width - str.length));
31
+ const value = truncate(str, width);
32
+ return value + ' '.repeat(Math.max(0, width - value.length));
33
+ }
34
+ function fitColumns(columns, widths, availableWidth) {
35
+ let nextColumns = [...columns];
36
+ let nextWidths = [...widths];
37
+ const getMinWidth = (column) => column.minWidth ?? Math.min(Math.max(column.label.length, 4), 16);
38
+ while (totalWidth(nextWidths) > availableWidth) {
39
+ let shrunk = false;
40
+ const shrinkOrder = nextColumns
41
+ .map((column, index) => ({ column, index }))
42
+ .sort((a, b) => {
43
+ const priorityDiff = (a.column.priority ?? 0) - (b.column.priority ?? 0);
44
+ if (priorityDiff !== 0)
45
+ return priorityDiff;
46
+ return b.index - a.index;
47
+ });
48
+ for (const { column, index } of shrinkOrder) {
49
+ const minWidth = getMinWidth(column);
50
+ if (nextWidths[index] > minWidth) {
51
+ nextWidths[index] = nextWidths[index] - 1;
52
+ shrunk = true;
53
+ if (totalWidth(nextWidths) <= availableWidth)
54
+ break;
55
+ }
56
+ }
57
+ if (totalWidth(nextWidths) <= availableWidth)
58
+ break;
59
+ if (!shrunk) {
60
+ if (nextColumns.length <= 1)
61
+ break;
62
+ const dropCandidates = nextColumns
63
+ .map((column, index) => ({ column, index }))
64
+ .sort((a, b) => {
65
+ const priorityDiff = (a.column.priority ?? 0) - (b.column.priority ?? 0);
66
+ if (priorityDiff !== 0)
67
+ return priorityDiff;
68
+ return b.index - a.index;
69
+ });
70
+ const dropIndex = dropCandidates[0]?.index;
71
+ if (dropIndex === undefined)
72
+ break;
73
+ nextColumns.splice(dropIndex, 1);
74
+ nextWidths.splice(dropIndex, 1);
75
+ }
76
+ }
77
+ return { columns: nextColumns, widths: nextWidths };
18
78
  }
19
- export function DataTable({ columns, rows }) {
20
- const widths = computeWidths(columns, rows);
79
+ export function DataTable({ columns, rows, paddingLeft = 2, maxWidth }) {
80
+ const { stdout } = useStdout();
81
+ const termWidth = stdout?.columns ?? 80;
82
+ const availableWidth = Math.max(24, (maxWidth ?? termWidth) - paddingLeft - 1);
83
+ const computedWidths = computeWidths(columns, rows);
84
+ const { columns: visibleColumns, widths } = fitColumns(columns, computedWidths, availableWidth);
21
85
  const topBorder = '┌' + widths.map(w => '─'.repeat(w + 2)).join('┬') + '┐';
22
86
  const headerSep = '├' + widths.map(w => '─'.repeat(w + 2)).join('┼') + '┤';
23
87
  const bottomBorder = '└' + widths.map(w => '─'.repeat(w + 2)).join('┴') + '┘';
24
- const headerRow = '│' + columns.map((col, i) => ` ${pad(col.label, widths[i])} `).join('│') + '│';
25
- const dataRows = rows.map(row => '│' + columns.map((col, i) => ` ${pad(row[col.key] ?? '', widths[i])} `).join('│') + '│');
26
- return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(Text, { children: topBorder }), _jsx(Text, { bold: true, children: headerRow }), _jsx(Text, { children: headerSep }), dataRows.map((row, i) => (_jsx(Text, { children: row }, i))), _jsx(Text, { children: bottomBorder })] }));
88
+ const headerRow = '│' + visibleColumns.map((col, i) => ` ${pad(col.label, widths[i])} `).join('│') + '│';
89
+ const dataRows = rows.map(row => '│' + visibleColumns.map((col, i) => ` ${pad(row[col.key] ?? '', widths[i])} `).join('│') + '│');
90
+ return (_jsxs(Box, { flexDirection: "column", paddingLeft: paddingLeft, children: [_jsx(Text, { children: topBorder }), _jsx(Text, { bold: true, children: headerRow }), _jsx(Text, { children: headerSep }), dataRows.map((row, i) => (_jsx(Text, { children: row }, i))), _jsx(Text, { children: bottomBorder })] }));
27
91
  }
28
92
  //# sourceMappingURL=DataTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../../src/ui/components/DataTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../../src/ui/components/DataTable.tsx"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ interface ErrorBoundaryState {
8
8
  export declare class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {
9
9
  constructor(props: ErrorBoundaryProps);
10
10
  static getDerivedStateFromError(error: Error): ErrorBoundaryState;
11
- render(): string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
11
+ render(): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
12
12
  }
13
13
  export {};
14
14
  //# sourceMappingURL=ErrorBoundary.d.ts.map
@@ -0,0 +1,24 @@
1
+ export type FieldListValidator = (value: string, fields: FieldListField[]) => string | null;
2
+ export interface FieldListField {
3
+ label: string;
4
+ key: string;
5
+ value: string;
6
+ placeholder: string;
7
+ helpText?: string;
8
+ validate?: FieldListValidator;
9
+ mask?: boolean;
10
+ }
11
+ interface FieldListProps {
12
+ fields: FieldListField[];
13
+ focusIndex: number;
14
+ onFocusIndexChange: (index: number) => void;
15
+ onFieldChange: (index: number, value: string) => void;
16
+ onComplete: (values: Record<string, string>) => void;
17
+ onBack?: () => void;
18
+ labelWidth?: number;
19
+ emptyUsesPlaceholder?: boolean;
20
+ footerHint?: string;
21
+ }
22
+ export declare function FieldList({ fields, focusIndex, onFocusIndexChange, onFieldChange, onComplete, onBack, labelWidth, emptyUsesPlaceholder, footerHint, }: FieldListProps): import("react/jsx-runtime").JSX.Element;
23
+ export {};
24
+ //# sourceMappingURL=FieldList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldList.d.ts","sourceRoot":"","sources":["../../../src/ui/components/FieldList.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,cAAc,EAAE,KACrB,MAAM,GAAG,IAAI,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,MAAM,EACN,UAAe,EACf,oBAA4B,EAC5B,UAAmD,GACpD,EAAE,cAAc,2CAoHhB"}
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import InkTextInput from 'ink-text-input';
5
+ export function FieldList({ fields, focusIndex, onFocusIndexChange, onFieldChange, onComplete, onBack, labelWidth = 14, emptyUsesPlaceholder = false, footerHint = '↑↓ Navigate Enter Start Esc Back', }) {
6
+ const [touchedKeys, setTouchedKeys] = React.useState({});
7
+ const [submitAttempted, setSubmitAttempted] = React.useState(false);
8
+ const errors = React.useMemo(() => Object.fromEntries(fields.map((field) => [field.key, field.validate?.(field.value, fields) ?? null])), [fields]);
9
+ const markTouched = React.useCallback((index) => {
10
+ const field = fields[index];
11
+ if (!field)
12
+ return;
13
+ setTouchedKeys((prev) => ({ ...prev, [field.key]: true }));
14
+ }, [fields]);
15
+ const moveFocus = React.useCallback((nextIndex) => {
16
+ markTouched(focusIndex);
17
+ onFocusIndexChange(nextIndex);
18
+ }, [focusIndex, markTouched, onFocusIndexChange]);
19
+ const handleSubmit = React.useCallback((index, submittedValue) => {
20
+ const nextFields = fields.map((field, fieldIndex) => (fieldIndex === index
21
+ ? { ...field, value: submittedValue ?? field.value }
22
+ : field));
23
+ const currentField = nextFields[index];
24
+ if (!currentField)
25
+ return;
26
+ markTouched(index);
27
+ const currentError = currentField.validate?.(currentField.value, nextFields) ?? null;
28
+ if (currentError) {
29
+ setSubmitAttempted(true);
30
+ return;
31
+ }
32
+ if (index < fields.length - 1) {
33
+ onFocusIndexChange(index + 1);
34
+ return;
35
+ }
36
+ const firstInvalidIndex = nextFields.findIndex((field) => (field.validate?.(field.value, nextFields) ?? null));
37
+ if (firstInvalidIndex !== -1) {
38
+ setSubmitAttempted(true);
39
+ onFocusIndexChange(firstInvalidIndex);
40
+ return;
41
+ }
42
+ onComplete(Object.fromEntries(nextFields.map((field) => [field.key, field.value])));
43
+ }, [fields, markTouched, onComplete, onFocusIndexChange]);
44
+ useInput((input, key) => {
45
+ if (key.upArrow || (key.shift && key.tab)) {
46
+ moveFocus(focusIndex > 0 ? focusIndex - 1 : fields.length - 1);
47
+ }
48
+ else if (key.downArrow || key.tab) {
49
+ moveFocus(focusIndex < fields.length - 1 ? focusIndex + 1 : 0);
50
+ }
51
+ else if (key.escape) {
52
+ onBack?.();
53
+ }
54
+ });
55
+ return (_jsxs(Box, { flexDirection: "column", children: [fields.map((field, index) => {
56
+ const showPlaceholder = emptyUsesPlaceholder ? field.value === '' : field.value === field.placeholder;
57
+ const error = errors[field.key];
58
+ const showError = Boolean(error) && (submitAttempted ||
59
+ touchedKeys[field.key] ||
60
+ (index === focusIndex && field.value.trim().length > 0));
61
+ const displayValue = field.mask && field.value
62
+ ? '*'.repeat(Math.min(field.value.length, 24))
63
+ : field.value;
64
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, children: field.label.padEnd(labelWidth) }), index === focusIndex ? (_jsx(InkTextInput, { value: field.value, onChange: (value) => onFieldChange(index, value), onSubmit: (value) => handleSubmit(index, value), mask: field.mask ? '*' : undefined, placeholder: field.placeholder })) : (_jsx(Text, { dimColor: showPlaceholder, children: displayValue || field.placeholder }))] }), showError && (_jsx(Box, { paddingLeft: labelWidth, children: _jsx(Text, { color: "red", children: error }) })), field.helpText && index === focusIndex && (_jsx(Box, { paddingLeft: labelWidth, children: _jsx(Text, { dimColor: true, children: field.helpText }) }))] }, field.key));
65
+ }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: footerHint }) })] }));
66
+ }
67
+ //# sourceMappingURL=FieldList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldList.js","sourceRoot":"","sources":["../../../src/ui/components/FieldList.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
+ import type { ReactNode } from 'react';
1
2
  interface KeyValueItem {
2
3
  key: string;
3
- value: string;
4
+ value: ReactNode;
4
5
  }
5
6
  interface KeyValueProps {
6
7
  items: KeyValueItem[];
7
8
  keyWidth?: number;
9
+ paddingLeft?: number;
8
10
  }
9
- export declare function KeyValue({ items, keyWidth }: KeyValueProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function KeyValue({ items, keyWidth, paddingLeft }: KeyValueProps): import("react/jsx-runtime").JSX.Element;
10
12
  export {};
11
13
  //# sourceMappingURL=KeyValue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KeyValue.d.ts","sourceRoot":"","sources":["../../../src/ui/components/KeyValue.tsx"],"names":[],"mappings":"AAEA,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAa1D"}
1
+ {"version":3,"file":"KeyValue.d.ts","sourceRoot":"","sources":["../../../src/ui/components/KeyValue.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAe,EAAE,EAAE,aAAa,2CAe3E"}
@@ -1,7 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from 'ink';
3
- export function KeyValue({ items, keyWidth }) {
3
+ export function KeyValue({ items, keyWidth, paddingLeft = 2 }) {
4
4
  const width = keyWidth ?? Math.max(...items.map(item => item.key.length)) + 2;
5
- return (_jsx(Box, { flexDirection: "column", paddingLeft: 2, children: items.map((item, i) => (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: item.key.padEnd(width) }), _jsx(Text, { children: item.value })] }, i))) }));
5
+ return (_jsx(Box, { flexDirection: "column", paddingLeft: paddingLeft, children: items.map((item, i) => (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: item.key.padEnd(width) }), typeof item.value === 'string' || typeof item.value === 'number'
6
+ ? _jsx(Text, { children: String(item.value) })
7
+ : item.value] }, i))) }));
6
8
  }
7
9
  //# sourceMappingURL=KeyValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KeyValue.js","sourceRoot":"","sources":["../../../src/ui/components/KeyValue.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAYhC,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAiB;IACzD,MAAM,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IAE9E,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,YACvC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,EAC9C,KAAC,IAAI,cAAE,IAAI,CAAC,KAAK,GAAQ,KAFjB,CAAC,CAGL,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"KeyValue.js","sourceRoot":"","sources":["../../../src/ui/components/KeyValue.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAchC,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,CAAC,EAAiB;IAC1E,MAAM,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IAE9E,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,WAAW,YACjD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAQ,EAC7C,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;oBAC/D,CAAC,CAAC,KAAC,IAAI,cAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAQ;oBACnC,CAAC,CAAC,IAAI,CAAC,KAAK,KAJN,CAAC,CAKL,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ interface KeyboardAction {
2
+ key: string;
3
+ label: string;
4
+ }
5
+ interface KeyboardHintProps {
6
+ actions: KeyboardAction[];
7
+ }
8
+ export declare function KeyboardHint({ actions }: KeyboardHintProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=KeyboardHint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyboardHint.d.ts","sourceRoot":"","sources":["../../../src/ui/components/KeyboardHint.tsx"],"names":[],"mappings":"AAGA,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,2CAQ1D"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ export function KeyboardHint({ actions }) {
4
+ return (_jsx(Box, { paddingTop: 1, children: _jsx(Text, { dimColor: true, children: actions.map(a => `${a.key} ${a.label}`).join(' ') }) }));
5
+ }
6
+ //# sourceMappingURL=KeyboardHint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyboardHint.js","sourceRoot":"","sources":["../../../src/ui/components/KeyboardHint.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAAqB;IACzD,OAAO,CACL,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,QAAQ,kBACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAC/C,GACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from 'react';
2
+ interface MenuListRowProps {
3
+ label: string;
4
+ description?: ReactNode;
5
+ labelWidth?: number;
6
+ active?: boolean;
7
+ }
8
+ export declare function MenuListRow({ label, description, labelWidth, active, }: MenuListRowProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=MenuList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MenuList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,UAAU,EACV,MAAc,GACf,EAAE,gBAAgB,2CAWlB"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ export function MenuListRow({ label, description, labelWidth, active = false, }) {
4
+ const paddedLabel = labelWidth ? label.padEnd(labelWidth) : label;
5
+ return (_jsxs(Box, { children: [_jsx(Text, { color: active ? 'cyan' : undefined, bold: active, children: `${active ? '❯' : ' '} ${paddedLabel}` }), description] }));
6
+ }
7
+ //# sourceMappingURL=MenuList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuList.js","sourceRoot":"","sources":["../../../src/ui/components/MenuList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAUhC,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,UAAU,EACV,MAAM,GAAG,KAAK,GACG;IACjB,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAElE,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,YACnD,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,WAAW,EAAE,GAClC,EACN,WAAW,IACR,CACP,CAAC;AACJ,CAAC"}
@@ -1,8 +1,11 @@
1
- import type { SystemMetrics } from '../../lib/system.js';
2
- interface MetricsFooterProps {
3
- metrics: SystemMetrics;
4
- history: SystemMetrics[];
5
- }
6
- export declare function MetricsFooter({ metrics, history }: MetricsFooterProps): import("react/jsx-runtime").JSX.Element;
7
- export {};
1
+ import React from 'react';
2
+ /**
3
+ * Self-contained metrics footer — subscribes to MetricsContext directly so that
4
+ * AppShell does not need to subscribe. This prevents metrics polling from
5
+ * triggering re-renders of the entire view tree every 30 seconds.
6
+ *
7
+ * Memoized: only re-renders when metrics context changes, not when the parent
8
+ * view re-renders due to its own polling (services, health checks, etc.).
9
+ */
10
+ export declare const MetricsFooter: React.NamedExoticComponent<object>;
8
11
  //# sourceMappingURL=MetricsFooter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsFooter.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,kBAAkB,2CAiDrE"}
1
+ {"version":3,"file":"MetricsFooter.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,oCAqDxB,CAAC"}
@@ -1,8 +1,22 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
2
3
  import { Box, useStdout } from 'ink';
3
4
  import { Sparkline } from './Sparkline.js';
4
- export function MetricsFooter({ metrics, history }) {
5
+ import { useMetrics, useMetricsHistory } from '../context/MetricsContext.js';
6
+ /**
7
+ * Self-contained metrics footer — subscribes to MetricsContext directly so that
8
+ * AppShell does not need to subscribe. This prevents metrics polling from
9
+ * triggering re-renders of the entire view tree every 30 seconds.
10
+ *
11
+ * Memoized: only re-renders when metrics context changes, not when the parent
12
+ * view re-renders due to its own polling (services, health checks, etc.).
13
+ */
14
+ export const MetricsFooter = React.memo(function MetricsFooter() {
15
+ const metrics = useMetrics();
16
+ const history = useMetricsHistory();
5
17
  const { stdout } = useStdout();
18
+ if (!metrics)
19
+ return null;
6
20
  const width = stdout?.columns ?? 80;
7
21
  // Sparkline width adapts to terminal — leave room for label (11) + trend (2) + detail (~14)
8
22
  const sparkWidth = Math.max(10, Math.min(40, width - 34));
@@ -11,9 +25,8 @@ export function MetricsFooter({ metrics, history }) {
11
25
  const diskData = history.map(m => m.disk.usedPercent);
12
26
  const swapData = history.map(m => m.swap?.percent ?? 0);
13
27
  const loadData = history.map(m => m.cpu.load1m);
14
- // Load max is based on CPU core count (100% per core)
15
28
  const cpuCount = metrics.cpu.label?.match(/(\d+)\s*core/i)?.[1];
16
29
  const loadMax = cpuCount ? parseInt(cpuCount, 10) : 8;
17
30
  return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Sparkline, { data: ramData, width: sparkWidth, label: "RAM", detail: `${metrics.ram.percent}% ${metrics.ram.label}`, min: 0, max: 100, thresholdColor: true, showTrend: true }), _jsx(Sparkline, { data: cpuData, width: sparkWidth, label: "CPU", detail: `${metrics.cpu.percent}% ${metrics.cpu.label}`, min: 0, max: 100, thresholdColor: true, showTrend: true }), _jsx(Sparkline, { data: diskData, width: sparkWidth, label: "Disk", detail: `${metrics.disk.usedPercent}% ${metrics.disk.label}`, min: 0, max: 100, thresholdColor: true, thresholds: [80, 95] }), metrics.swap && (_jsx(Sparkline, { data: swapData, width: sparkWidth, label: "Swap", detail: `${metrics.swap.percent}% ${metrics.swap.label}`, min: 0, max: 100, thresholdColor: true, thresholds: [70, 90], showTrend: true })), _jsx(Sparkline, { data: loadData, width: sparkWidth, label: "Load", detail: `${metrics.cpu.load1m.toFixed(1)}`, min: 0, max: loadMax, thresholdColor: true, thresholds: [loadMax * 0.7, loadMax * 0.9], showTrend: true })] }));
18
- }
31
+ });
19
32
  //# sourceMappingURL=MetricsFooter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsFooter.js","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MetricsFooter.js","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ interface PaneSectionProps {
3
+ title: string;
4
+ children: ReactNode;
5
+ marginTop?: number;
6
+ }
7
+ export declare function PaneSection({ title, children, marginTop }: PaneSectionProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=PaneSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaneSection.d.ts","sourceRoot":"","sources":["../../../src/ui/components/PaneSection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAa,EAAE,EAAE,gBAAgB,2CAO/E"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ export function PaneSection({ title, children, marginTop = 1 }) {
4
+ return (_jsxs(Box, { flexDirection: "column", marginTop: marginTop, children: [_jsx(Text, { bold: true, children: title }), children] }));
5
+ }
6
+ //# sourceMappingURL=PaneSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaneSection.js","sourceRoot":"","sources":["../../../src/ui/components/PaneSection.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAShC,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,GAAG,CAAC,EAAoB;IAC9E,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,SAAS,aAC9C,KAAC,IAAI,IAAC,IAAI,kBAAE,KAAK,GAAQ,EACxB,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface PanelStateProps {
2
+ state: 'loading' | 'error' | 'empty';
3
+ message: string;
4
+ paddingLeft?: number;
5
+ }
6
+ export declare function PanelState({ state, message, paddingLeft }: PanelStateProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=PanelState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PanelState.d.ts","sourceRoot":"","sources":["../../../src/ui/components/PanelState.tsx"],"names":[],"mappings":"AAIA,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAe,EAAE,EAAE,eAAe,2CAQ9E"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { Spinner } from './Spinner.js';
4
+ export function PanelState({ state, message, paddingLeft = 2 }) {
5
+ return (_jsxs(Box, { paddingLeft: paddingLeft, children: [state === 'loading' && _jsx(Spinner, { label: message }), state === 'error' && _jsx(Text, { color: "red", children: message }), state === 'empty' && _jsx(Text, { dimColor: true, children: message })] }));
6
+ }
7
+ //# sourceMappingURL=PanelState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PanelState.js","sourceRoot":"","sources":["../../../src/ui/components/PanelState.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,EAAmB;IAC7E,OAAO,CACL,MAAC,GAAG,IAAC,WAAW,EAAE,WAAW,aAC1B,KAAK,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAE,OAAO,GAAI,EAClD,KAAK,KAAK,OAAO,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,OAAO,GAAQ,EACvD,KAAK,KAAK,OAAO,IAAI,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,GAAQ,IACjD,CACP,CAAC;AACJ,CAAC"}