mepcli 2.0.0-beta.1 → 2.0.0-beta.3

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 (357) hide show
  1. package/README.md +32 -10
  2. package/dist/ansi.d.ts +36 -0
  3. package/dist/ansi.js +1 -0
  4. package/dist/base.d.ts +60 -0
  5. package/dist/base.js +1 -0
  6. package/dist/{src/core.js → core.d.ts} +175 -347
  7. package/dist/core.js +1 -0
  8. package/dist/data/countries.d.ts +2 -0
  9. package/dist/data/countries.js +1 -0
  10. package/dist/data/licenses.d.ts +2 -0
  11. package/dist/data/licenses.js +1 -0
  12. package/dist/highlight.d.ts +7 -0
  13. package/dist/highlight.js +1 -0
  14. package/dist/index.d.ts +48 -0
  15. package/dist/index.js +1 -0
  16. package/dist/input.d.ts +14 -0
  17. package/dist/input.js +1 -0
  18. package/dist/pipeline.d.ts +90 -0
  19. package/dist/pipeline.js +1 -0
  20. package/dist/prompts/autocomplete.d.ts +22 -0
  21. package/dist/prompts/autocomplete.js +1 -0
  22. package/dist/prompts/box.d.ts +21 -0
  23. package/dist/prompts/box.js +4 -0
  24. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  25. package/dist/prompts/breadcrumb-search.js +2 -0
  26. package/dist/prompts/breadcrumb.d.ts +32 -0
  27. package/dist/prompts/breadcrumb.js +3 -0
  28. package/dist/prompts/byte.d.ts +13 -0
  29. package/dist/prompts/byte.js +5 -0
  30. package/dist/prompts/calculator.d.ts +17 -0
  31. package/dist/prompts/calculator.js +3 -0
  32. package/dist/prompts/calendar.d.ts +33 -0
  33. package/dist/prompts/calendar.js +3 -0
  34. package/dist/prompts/checkbox.d.ts +13 -0
  35. package/dist/prompts/checkbox.js +2 -0
  36. package/dist/prompts/code.d.ts +19 -0
  37. package/dist/prompts/code.js +4 -0
  38. package/dist/prompts/color.d.ts +14 -0
  39. package/dist/prompts/color.js +10 -0
  40. package/dist/prompts/confirm.d.ts +8 -0
  41. package/dist/prompts/confirm.js +1 -0
  42. package/dist/prompts/connection-string.d.ts +18 -0
  43. package/dist/prompts/connection-string.js +1 -0
  44. package/dist/prompts/cron.d.ts +13 -0
  45. package/dist/prompts/cron.js +4 -0
  46. package/dist/prompts/curl-utils.d.ts +25 -0
  47. package/dist/prompts/curl-utils.js +1 -0
  48. package/dist/prompts/curl.d.ts +41 -0
  49. package/dist/prompts/curl.js +12 -0
  50. package/dist/prompts/data-inspector.d.ts +22 -0
  51. package/dist/prompts/data-inspector.js +5 -0
  52. package/dist/prompts/date.d.ts +12 -0
  53. package/dist/prompts/date.js +2 -0
  54. package/dist/prompts/dependency.d.ts +16 -0
  55. package/dist/prompts/dependency.js +3 -0
  56. package/dist/prompts/dial.d.ts +10 -0
  57. package/dist/prompts/dial.js +3 -0
  58. package/dist/prompts/diff.d.ts +10 -0
  59. package/dist/prompts/diff.js +10 -0
  60. package/dist/prompts/draw.d.ts +20 -0
  61. package/dist/prompts/draw.js +6 -0
  62. package/dist/prompts/editor.d.ts +14 -0
  63. package/dist/prompts/editor.js +2 -0
  64. package/dist/prompts/emoji.d.ts +18 -0
  65. package/dist/prompts/emoji.js +5 -0
  66. package/dist/prompts/exec.d.ts +17 -0
  67. package/dist/prompts/exec.js +1 -0
  68. package/dist/prompts/file.d.ts +21 -0
  69. package/dist/prompts/file.js +2 -0
  70. package/dist/prompts/form.d.ts +18 -0
  71. package/dist/prompts/form.js +1 -0
  72. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  73. package/dist/prompts/fuzzy-multi-column.js +2 -0
  74. package/dist/prompts/fuzzy.d.ts +12 -0
  75. package/dist/prompts/fuzzy.js +2 -0
  76. package/dist/prompts/gauge.d.ts +21 -0
  77. package/dist/prompts/gauge.js +4 -0
  78. package/dist/prompts/grid.d.ts +14 -0
  79. package/dist/prompts/grid.js +2 -0
  80. package/dist/prompts/heatmap.d.ts +13 -0
  81. package/dist/prompts/heatmap.js +2 -0
  82. package/dist/prompts/ip.d.ts +11 -0
  83. package/dist/prompts/ip.js +3 -0
  84. package/dist/prompts/kanban.d.ts +17 -0
  85. package/dist/prompts/kanban.js +4 -0
  86. package/dist/prompts/keypress.d.ts +7 -0
  87. package/dist/prompts/keypress.js +1 -0
  88. package/dist/prompts/license.d.ts +9 -0
  89. package/dist/prompts/license.js +13 -0
  90. package/dist/prompts/list.d.ts +9 -0
  91. package/dist/prompts/list.js +1 -0
  92. package/dist/prompts/map.d.ts +17 -0
  93. package/dist/prompts/map.js +5 -0
  94. package/dist/prompts/match.d.ts +19 -0
  95. package/dist/prompts/match.js +7 -0
  96. package/dist/prompts/miller.d.ts +15 -0
  97. package/dist/prompts/miller.js +2 -0
  98. package/dist/prompts/multi-column-select.d.ts +10 -0
  99. package/dist/prompts/multi-column-select.js +2 -0
  100. package/dist/prompts/multi-range.d.ts +9 -0
  101. package/dist/prompts/multi-range.js +3 -0
  102. package/dist/prompts/multi-select.d.ts +15 -0
  103. package/dist/prompts/multi-select.js +4 -0
  104. package/dist/prompts/number.d.ts +11 -0
  105. package/dist/prompts/number.js +2 -0
  106. package/dist/prompts/otp.d.ts +10 -0
  107. package/dist/prompts/otp.js +2 -0
  108. package/dist/prompts/pattern.d.ts +22 -0
  109. package/dist/prompts/pattern.js +4 -0
  110. package/dist/prompts/phone.d.ts +41 -0
  111. package/dist/prompts/phone.js +3 -0
  112. package/dist/prompts/quiz-select.d.ts +10 -0
  113. package/dist/prompts/quiz-select.js +7 -0
  114. package/dist/prompts/quiz-text.d.ts +11 -0
  115. package/dist/prompts/quiz-text.js +8 -0
  116. package/dist/prompts/range.d.ts +9 -0
  117. package/dist/prompts/range.js +1 -0
  118. package/dist/prompts/rating.d.ts +8 -0
  119. package/dist/prompts/rating.js +1 -0
  120. package/dist/prompts/regex.d.ts +13 -0
  121. package/dist/prompts/regex.js +5 -0
  122. package/dist/prompts/region.d.ts +11 -0
  123. package/dist/prompts/region.js +5 -0
  124. package/dist/prompts/schedule.d.ts +20 -0
  125. package/dist/prompts/schedule.js +5 -0
  126. package/dist/prompts/scroll.d.ts +13 -0
  127. package/dist/prompts/scroll.js +1 -0
  128. package/dist/prompts/seat.d.ts +17 -0
  129. package/dist/prompts/seat.js +5 -0
  130. package/dist/prompts/select-range.d.ts +8 -0
  131. package/dist/prompts/select-range.js +3 -0
  132. package/dist/prompts/select.d.ts +15 -0
  133. package/dist/prompts/select.js +2 -0
  134. package/dist/prompts/semver.d.ts +6 -0
  135. package/dist/prompts/semver.js +1 -0
  136. package/dist/prompts/shortcut.d.ts +9 -0
  137. package/dist/prompts/shortcut.js +1 -0
  138. package/dist/prompts/slider.d.ts +8 -0
  139. package/dist/prompts/slider.js +1 -0
  140. package/dist/prompts/slot.d.ts +16 -0
  141. package/dist/prompts/slot.js +8 -0
  142. package/dist/prompts/snippet.d.ts +19 -0
  143. package/dist/prompts/snippet.js +4 -0
  144. package/dist/prompts/sort-grid.d.ts +16 -0
  145. package/dist/prompts/sort-grid.js +2 -0
  146. package/dist/prompts/sort.d.ts +14 -0
  147. package/dist/prompts/sort.js +2 -0
  148. package/dist/prompts/spam.d.ts +17 -0
  149. package/dist/prompts/spam.js +2 -0
  150. package/dist/prompts/spreadsheet.d.ts +21 -0
  151. package/dist/prompts/spreadsheet.js +7 -0
  152. package/dist/prompts/table.d.ts +14 -0
  153. package/dist/prompts/table.js +3 -0
  154. package/dist/prompts/text.d.ts +17 -0
  155. package/dist/prompts/text.js +2 -0
  156. package/dist/prompts/time.d.ts +12 -0
  157. package/dist/prompts/time.js +2 -0
  158. package/dist/prompts/toggle.d.ts +8 -0
  159. package/dist/prompts/toggle.js +1 -0
  160. package/dist/prompts/transfer.d.ts +18 -0
  161. package/dist/prompts/transfer.js +5 -0
  162. package/dist/prompts/tree-select.d.ts +31 -0
  163. package/dist/prompts/tree-select.js +3 -0
  164. package/dist/prompts/tree.d.ts +20 -0
  165. package/dist/prompts/tree.js +3 -0
  166. package/dist/prompts/wait.d.ts +18 -0
  167. package/dist/prompts/wait.js +1 -0
  168. package/dist/spinner.d.ts +33 -0
  169. package/dist/spinner.js +3 -0
  170. package/dist/symbols.d.ts +33 -0
  171. package/dist/symbols.js +1 -0
  172. package/dist/tasks.d.ts +57 -0
  173. package/dist/tasks.js +1 -0
  174. package/dist/theme.d.ts +2 -0
  175. package/dist/theme.js +1 -0
  176. package/dist/types.d.ts +503 -0
  177. package/dist/types.js +1 -0
  178. package/dist/utils.d.ts +81 -0
  179. package/dist/utils.js +1 -0
  180. package/package.json +12 -17
  181. package/dist/src/ansi.js +0 -50
  182. package/dist/src/ansi.js.map +0 -1
  183. package/dist/src/base.js +0 -258
  184. package/dist/src/base.js.map +0 -1
  185. package/dist/src/core.js.map +0 -1
  186. package/dist/src/data/countries.js +0 -569
  187. package/dist/src/data/countries.js.map +0 -1
  188. package/dist/src/data/licenses.js +0 -480
  189. package/dist/src/data/licenses.js.map +0 -1
  190. package/dist/src/highlight.js +0 -185
  191. package/dist/src/highlight.js.map +0 -1
  192. package/dist/src/index.js +0 -66
  193. package/dist/src/index.js.map +0 -1
  194. package/dist/src/input.js +0 -158
  195. package/dist/src/input.js.map +0 -1
  196. package/dist/src/pipeline.js +0 -273
  197. package/dist/src/pipeline.js.map +0 -1
  198. package/dist/src/prompts/autocomplete.js +0 -171
  199. package/dist/src/prompts/autocomplete.js.map +0 -1
  200. package/dist/src/prompts/box.js +0 -225
  201. package/dist/src/prompts/box.js.map +0 -1
  202. package/dist/src/prompts/breadcrumb-search.js +0 -260
  203. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  204. package/dist/src/prompts/breadcrumb.js +0 -307
  205. package/dist/src/prompts/breadcrumb.js.map +0 -1
  206. package/dist/src/prompts/byte.js +0 -176
  207. package/dist/src/prompts/byte.js.map +0 -1
  208. package/dist/src/prompts/calculator.js +0 -243
  209. package/dist/src/prompts/calculator.js.map +0 -1
  210. package/dist/src/prompts/calendar.js +0 -430
  211. package/dist/src/prompts/calendar.js.map +0 -1
  212. package/dist/src/prompts/checkbox.js +0 -159
  213. package/dist/src/prompts/checkbox.js.map +0 -1
  214. package/dist/src/prompts/code.js +0 -271
  215. package/dist/src/prompts/code.js.map +0 -1
  216. package/dist/src/prompts/color.js +0 -165
  217. package/dist/src/prompts/color.js.map +0 -1
  218. package/dist/src/prompts/confirm.js +0 -55
  219. package/dist/src/prompts/confirm.js.map +0 -1
  220. package/dist/src/prompts/connection-string.js +0 -120
  221. package/dist/src/prompts/connection-string.js.map +0 -1
  222. package/dist/src/prompts/cron.js +0 -207
  223. package/dist/src/prompts/cron.js.map +0 -1
  224. package/dist/src/prompts/curl-utils.js +0 -71
  225. package/dist/src/prompts/curl-utils.js.map +0 -1
  226. package/dist/src/prompts/curl.js +0 -431
  227. package/dist/src/prompts/curl.js.map +0 -1
  228. package/dist/src/prompts/data-inspector.js +0 -261
  229. package/dist/src/prompts/data-inspector.js.map +0 -1
  230. package/dist/src/prompts/date.js +0 -185
  231. package/dist/src/prompts/date.js.map +0 -1
  232. package/dist/src/prompts/dependency.js +0 -283
  233. package/dist/src/prompts/dependency.js.map +0 -1
  234. package/dist/src/prompts/dial.js +0 -124
  235. package/dist/src/prompts/dial.js.map +0 -1
  236. package/dist/src/prompts/diff.js +0 -118
  237. package/dist/src/prompts/diff.js.map +0 -1
  238. package/dist/src/prompts/draw.js +0 -191
  239. package/dist/src/prompts/draw.js.map +0 -1
  240. package/dist/src/prompts/editor.js +0 -234
  241. package/dist/src/prompts/editor.js.map +0 -1
  242. package/dist/src/prompts/emoji.js +0 -226
  243. package/dist/src/prompts/emoji.js.map +0 -1
  244. package/dist/src/prompts/exec.js +0 -151
  245. package/dist/src/prompts/exec.js.map +0 -1
  246. package/dist/src/prompts/file.js +0 -217
  247. package/dist/src/prompts/file.js.map +0 -1
  248. package/dist/src/prompts/form.js +0 -241
  249. package/dist/src/prompts/form.js.map +0 -1
  250. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  251. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  252. package/dist/src/prompts/fuzzy.js +0 -147
  253. package/dist/src/prompts/fuzzy.js.map +0 -1
  254. package/dist/src/prompts/gauge.js +0 -137
  255. package/dist/src/prompts/gauge.js.map +0 -1
  256. package/dist/src/prompts/grid.js +0 -191
  257. package/dist/src/prompts/grid.js.map +0 -1
  258. package/dist/src/prompts/heatmap.js +0 -147
  259. package/dist/src/prompts/heatmap.js.map +0 -1
  260. package/dist/src/prompts/ip.js +0 -138
  261. package/dist/src/prompts/ip.js.map +0 -1
  262. package/dist/src/prompts/kanban.js +0 -233
  263. package/dist/src/prompts/kanban.js.map +0 -1
  264. package/dist/src/prompts/keypress.js +0 -54
  265. package/dist/src/prompts/keypress.js.map +0 -1
  266. package/dist/src/prompts/license.js +0 -144
  267. package/dist/src/prompts/license.js.map +0 -1
  268. package/dist/src/prompts/list.js +0 -124
  269. package/dist/src/prompts/list.js.map +0 -1
  270. package/dist/src/prompts/map.js +0 -262
  271. package/dist/src/prompts/map.js.map +0 -1
  272. package/dist/src/prompts/match.js +0 -271
  273. package/dist/src/prompts/match.js.map +0 -1
  274. package/dist/src/prompts/miller.js +0 -228
  275. package/dist/src/prompts/miller.js.map +0 -1
  276. package/dist/src/prompts/multi-column-select.js +0 -176
  277. package/dist/src/prompts/multi-column-select.js.map +0 -1
  278. package/dist/src/prompts/multi-range.js +0 -189
  279. package/dist/src/prompts/multi-range.js.map +0 -1
  280. package/dist/src/prompts/multi-select.js +0 -183
  281. package/dist/src/prompts/multi-select.js.map +0 -1
  282. package/dist/src/prompts/number.js +0 -166
  283. package/dist/src/prompts/number.js.map +0 -1
  284. package/dist/src/prompts/otp.js +0 -107
  285. package/dist/src/prompts/otp.js.map +0 -1
  286. package/dist/src/prompts/pattern.js +0 -252
  287. package/dist/src/prompts/pattern.js.map +0 -1
  288. package/dist/src/prompts/phone.js +0 -398
  289. package/dist/src/prompts/phone.js.map +0 -1
  290. package/dist/src/prompts/quiz-select.js +0 -114
  291. package/dist/src/prompts/quiz-select.js.map +0 -1
  292. package/dist/src/prompts/quiz-text.js +0 -98
  293. package/dist/src/prompts/quiz-text.js.map +0 -1
  294. package/dist/src/prompts/range.js +0 -164
  295. package/dist/src/prompts/range.js.map +0 -1
  296. package/dist/src/prompts/rating.js +0 -83
  297. package/dist/src/prompts/rating.js.map +0 -1
  298. package/dist/src/prompts/regex.js +0 -145
  299. package/dist/src/prompts/regex.js.map +0 -1
  300. package/dist/src/prompts/region.js +0 -170
  301. package/dist/src/prompts/region.js.map +0 -1
  302. package/dist/src/prompts/schedule.js +0 -270
  303. package/dist/src/prompts/schedule.js.map +0 -1
  304. package/dist/src/prompts/scroll.js +0 -155
  305. package/dist/src/prompts/scroll.js.map +0 -1
  306. package/dist/src/prompts/seat.js +0 -164
  307. package/dist/src/prompts/seat.js.map +0 -1
  308. package/dist/src/prompts/select-range.js +0 -148
  309. package/dist/src/prompts/select-range.js.map +0 -1
  310. package/dist/src/prompts/select.js +0 -163
  311. package/dist/src/prompts/select.js.map +0 -1
  312. package/dist/src/prompts/semver.js +0 -43
  313. package/dist/src/prompts/semver.js.map +0 -1
  314. package/dist/src/prompts/shortcut.js +0 -133
  315. package/dist/src/prompts/shortcut.js.map +0 -1
  316. package/dist/src/prompts/slider.js +0 -69
  317. package/dist/src/prompts/slider.js.map +0 -1
  318. package/dist/src/prompts/slot.js +0 -117
  319. package/dist/src/prompts/slot.js.map +0 -1
  320. package/dist/src/prompts/snippet.js +0 -228
  321. package/dist/src/prompts/snippet.js.map +0 -1
  322. package/dist/src/prompts/sort-grid.js +0 -151
  323. package/dist/src/prompts/sort-grid.js.map +0 -1
  324. package/dist/src/prompts/sort.js +0 -166
  325. package/dist/src/prompts/sort.js.map +0 -1
  326. package/dist/src/prompts/spam.js +0 -80
  327. package/dist/src/prompts/spam.js.map +0 -1
  328. package/dist/src/prompts/spreadsheet.js +0 -240
  329. package/dist/src/prompts/spreadsheet.js.map +0 -1
  330. package/dist/src/prompts/table.js +0 -120
  331. package/dist/src/prompts/table.js.map +0 -1
  332. package/dist/src/prompts/text.js +0 -317
  333. package/dist/src/prompts/text.js.map +0 -1
  334. package/dist/src/prompts/time.js +0 -211
  335. package/dist/src/prompts/time.js.map +0 -1
  336. package/dist/src/prompts/toggle.js +0 -53
  337. package/dist/src/prompts/toggle.js.map +0 -1
  338. package/dist/src/prompts/transfer.js +0 -207
  339. package/dist/src/prompts/transfer.js.map +0 -1
  340. package/dist/src/prompts/tree-select.js +0 -270
  341. package/dist/src/prompts/tree-select.js.map +0 -1
  342. package/dist/src/prompts/tree.js +0 -233
  343. package/dist/src/prompts/tree.js.map +0 -1
  344. package/dist/src/prompts/wait.js +0 -79
  345. package/dist/src/prompts/wait.js.map +0 -1
  346. package/dist/src/spinner.js +0 -105
  347. package/dist/src/spinner.js.map +0 -1
  348. package/dist/src/symbols.js +0 -66
  349. package/dist/src/symbols.js.map +0 -1
  350. package/dist/src/tasks.js +0 -231
  351. package/dist/src/tasks.js.map +0 -1
  352. package/dist/src/theme.js +0 -29
  353. package/dist/src/theme.js.map +0 -1
  354. package/dist/src/types.js +0 -8
  355. package/dist/src/types.js.map +0 -1
  356. package/dist/src/utils.js +0 -480
  357. package/dist/src/utils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/fuzzy.ts"],"sourcesContent":["import { SelectPrompt } from './select';\nimport { FuzzySelectOptions } from '../types';\nimport { theme } from '../theme';\nimport { ANSI } from '../ansi';\nimport { fuzzyMatch } from '../utils';\nimport { symbols } from '../symbols';\n\nexport class FuzzySelectPrompt<V> extends SelectPrompt<V, FuzzySelectOptions<V>> {\n private filteredResults: any[] = [];\n private debounceTimer: any;\n\n constructor(options: FuzzySelectOptions<V>) {\n super(options);\n this.filteredResults = this.options.choices;\n }\n\n protected getFilteredChoices() {\n // Safety check: this.filteredResults might be undefined if called from super() constructor\n return this.filteredResults || this.options.choices;\n }\n\n protected handleInput(char: string) {\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.searchBuffer.length > 0) {\n this.searchBuffer = this.searchBuffer.slice(0, -1);\n this.performSearch();\n }\n return;\n }\n\n // Intercept typing to add debounce\n if (char.length === 1 && !/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n this.searchBuffer += char;\n\n // Check if debounce is needed\n if (this.options.choices.length > 1000) {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => {\n this.performSearch();\n }, 150); // 150ms debounce\n } else {\n this.performSearch();\n }\n return; // Skip super.handleInput for typing\n }\n\n super.handleInput(char);\n }\n\n private performSearch() {\n if (!this.searchBuffer) {\n this.filteredResults = this.options.choices;\n } else {\n const results = this.options.choices.map(c => {\n if (this.isSeparator(c)) return null;\n const match = fuzzyMatch(this.searchBuffer, (c as any).title);\n return { choice: c, match };\n }).filter(item => item && item.match !== null)\n // Sort by score descending\n .sort((a, b) => b!.match!.score - a!.match!.score);\n\n this.filteredResults = results.map(r => {\n (r!.choice as any)._match = r!.match;\n return r!.choice;\n });\n }\n\n this.selectedIndex = 0;\n this.render(false);\n }\n\n private highlight(text: string, indices: number[], isSelected: boolean): string {\n let output = '';\n const indexSet = new Set(indices);\n for (let i = 0; i < text.length; i++) {\n if (indexSet.has(i)) {\n if (isSelected) {\n output += `${ANSI.BOLD}${ANSI.FG_WHITE}${text[i]}${theme.main}`; // Reset to main theme\n } else {\n output += `${ANSI.BOLD}${ANSI.FG_CYAN}${text[i]}${ANSI.RESET}`;\n }\n } else {\n output += text[i];\n }\n }\n return output;\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n const choices = this.getFilteredChoices();\n\n // Adjust Scroll Top\n if (this.selectedIndex < this.scrollTop) {\n this.scrollTop = this.selectedIndex;\n } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.selectedIndex - this.pageSize + 1;\n }\n if (this.scrollTop > choices.length - 1) {\n this.scrollTop = Math.max(0, choices.length - this.pageSize);\n }\n\n // Header\n const searchStr = this.searchBuffer ? ` ${theme.muted}(Fuzzy: ${this.searchBuffer})${ANSI.RESET}` : '';\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}${searchStr}\\n`;\n\n if (choices.length === 0) {\n output += ` ${theme.muted}No results found${ANSI.RESET}`;\n } else {\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n if (this.isSeparator(choice)) {\n output += ` ${ANSI.DIM}${(choice as any).text || symbols.line.repeat(8)}${ANSI.RESET}`;\n } else {\n let title = (choice as any).title;\n const match = (choice as any)._match;\n const isSelected = actualIndex === this.selectedIndex;\n\n if (match && this.searchBuffer) {\n title = this.highlight(title, match.indices, isSelected);\n }\n\n if (isSelected) {\n output += `${theme.main}${symbols.pointer} ${title}${ANSI.RESET}`;\n if (match && this.searchBuffer) {\n // Show score\n // output += ` ${theme.muted}(${Math.round(match.score)})${ANSI.RESET}`;\n }\n } else {\n output += ` ${title}`;\n }\n }\n });\n }\n\n this.renderFrame(output);\n }\n}\n"],"names":["FuzzySelectPrompt","SelectPrompt","getFilteredChoices","filteredResults","options","choices","handleInput","char","searchBuffer","length","slice","performSearch","test","startsWith","debounceTimer","clearTimeout","setTimeout","results","map","c","isSeparator","match","fuzzyMatch","title","choice","filter","item","sort","a","b","score","r","_match","selectedIndex","render","highlight","text","indices","isSelected","output","indexSet","Set","i","has","ANSI","BOLD","FG_WHITE","theme","main","FG_CYAN","RESET","_firstRender","scrollTop","pageSize","Math","max","searchStr","muted","success","message","visibleChoices","forEach","index","actualIndex","DIM","symbols","line","repeat","pointer","renderFrame"],"mappings":"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"}
@@ -1,137 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "GaugePrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return GaugePrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- function _define_property(obj, key, value) {
15
- if (key in obj) {
16
- Object.defineProperty(obj, key, {
17
- value: value,
18
- enumerable: true,
19
- configurable: true,
20
- writable: true
21
- });
22
- } else {
23
- obj[key] = value;
24
- }
25
- return obj;
26
- }
27
- let GaugePrompt = class GaugePrompt extends _base.Prompt {
28
- run() {
29
- // Start the loop when run is called (after initial render)
30
- const p = super.run();
31
- this.startLoop();
32
- return p;
33
- }
34
- startLoop() {
35
- if (!this.running) return;
36
- this.timer = setTimeout(()=>{
37
- this.tick();
38
- this.startLoop();
39
- }, 30); // ~33 FPS
40
- }
41
- tick() {
42
- this.cursor += this.direction * 2; // Speed multiplier
43
- if (this.cursor >= 100) {
44
- this.cursor = 100;
45
- this.direction = -1;
46
- } else if (this.cursor <= 0) {
47
- this.cursor = 0;
48
- this.direction = 1;
49
- }
50
- this.render(false);
51
- }
52
- stop() {
53
- this.running = false;
54
- if (this.timer) clearTimeout(this.timer);
55
- // Calculate score
56
- const center = 50;
57
- const distance = Math.abs(this.cursor - center);
58
- if (distance <= this.safeZoneHalf) {
59
- this.result = 'PERFECT!';
60
- this.resultColor = _theme.theme.success;
61
- } else if (distance <= this.warnZoneHalf) {
62
- this.result = 'GOOD';
63
- this.resultColor = _ansi.ANSI.FG_YELLOW;
64
- } else {
65
- this.result = 'MISS';
66
- this.resultColor = _theme.theme.error;
67
- }
68
- this.render(false);
69
- // Wait a moment to show result, then submit
70
- setTimeout(()=>{
71
- this.submit(this.result); // Force non-null
72
- }, 800);
73
- }
74
- handleInput(char, _key) {
75
- if (!this.running) return;
76
- if (char === ' ') {
77
- this.stop();
78
- }
79
- }
80
- render(_firstRender) {
81
- let output = '';
82
- // Header
83
- output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
84
- // Draw Gauge Bar
85
- let barStr = '';
86
- const center = 50;
87
- for(let i = 0; i < this.width; i++){
88
- const pct = i / this.width * 100;
89
- const dist = Math.abs(pct - center);
90
- let charColor = _theme.theme.error; // Default Miss (Red)
91
- if (dist <= this.safeZoneHalf) {
92
- charColor = _theme.theme.success; // Perfect (Green)
93
- } else if (dist <= this.warnZoneHalf) {
94
- charColor = _ansi.ANSI.FG_YELLOW; // Good (Yellow)
95
- }
96
- // Using block characters for the bar
97
- barStr += `${charColor}━${_ansi.ANSI.RESET}`;
98
- }
99
- output += ` ${barStr}\n`;
100
- // Draw Cursor
101
- // Position relative to width
102
- const pos = Math.floor(this.cursor / 100 * (this.width - 1));
103
- const padding = ' '.repeat(pos);
104
- output += ` ${padding}${_theme.theme.main}▲${_ansi.ANSI.RESET}\n`;
105
- // Instructions or Result
106
- if (this.running) {
107
- output += `${_theme.theme.muted}(Press Space to Stop)${_ansi.ANSI.RESET}`;
108
- } else {
109
- output += `${_ansi.ANSI.BOLD}${this.resultColor}${this.result}${_ansi.ANSI.RESET}`;
110
- }
111
- this.renderFrame(output);
112
- }
113
- cleanup() {
114
- if (this.timer) clearTimeout(this.timer);
115
- super.cleanup();
116
- }
117
- constructor(options){
118
- super(options), _define_property(this, "cursor", 0) // 0 to 100
119
- , _define_property(this, "direction", 1), _define_property(this, "running", true), _define_property(this, "timer", void 0), _define_property(this, "width", void 0), _define_property(this, "safeZoneHalf", void 0), _define_property(this, "warnZoneHalf", void 0), _define_property(this, "result", null), _define_property(this, "resultColor", '');
120
- this.width = options.width || 40;
121
- // Calculate safe zone logic (0-100 scale)
122
- // Default safe width: 20% ( +/- 10%)
123
- const safeParam = options.safeZone ?? 0.2;
124
- // Convert to percentage (0-100)
125
- let safeWidthPct;
126
- if (safeParam <= 1) {
127
- safeWidthPct = safeParam * 100;
128
- } else {
129
- safeWidthPct = safeParam / this.width * 100;
130
- }
131
- this.safeZoneHalf = safeWidthPct / 2;
132
- // Arbitrary "Good" zone is 3x the safe zone (or until limits)
133
- this.warnZoneHalf = Math.max(this.safeZoneHalf * 3, 30);
134
- }
135
- };
136
-
137
- //# sourceMappingURL=gauge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/gauge.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { GaugeOptions } from '../types';\n\nexport class GaugePrompt extends Prompt<string, GaugeOptions> {\n private cursor: number = 0; // 0 to 100\n private direction: 1 | -1 = 1;\n private running: boolean = true;\n private timer?: NodeJS.Timeout;\n private readonly width: number;\n private readonly safeZoneHalf: number;\n private readonly warnZoneHalf: number;\n private result: string | null = null;\n private resultColor: string = '';\n\n constructor(options: GaugeOptions) {\n super(options);\n this.width = options.width || 40;\n\n // Calculate safe zone logic (0-100 scale)\n // Default safe width: 20% ( +/- 10%)\n const safeParam = options.safeZone ?? 0.2;\n\n // Convert to percentage (0-100)\n let safeWidthPct: number;\n if (safeParam <= 1) {\n safeWidthPct = safeParam * 100;\n } else {\n safeWidthPct = (safeParam / this.width) * 100;\n }\n\n this.safeZoneHalf = safeWidthPct / 2;\n // Arbitrary \"Good\" zone is 3x the safe zone (or until limits)\n this.warnZoneHalf = Math.max(this.safeZoneHalf * 3, 30);\n }\n\n public run(): Promise<string> {\n // Start the loop when run is called (after initial render)\n const p = super.run();\n this.startLoop();\n return p;\n }\n\n private startLoop() {\n if (!this.running) return;\n this.timer = setTimeout(() => {\n this.tick();\n this.startLoop();\n }, 30); // ~33 FPS\n }\n\n private tick() {\n this.cursor += this.direction * 2; // Speed multiplier\n if (this.cursor >= 100) {\n this.cursor = 100;\n this.direction = -1;\n } else if (this.cursor <= 0) {\n this.cursor = 0;\n this.direction = 1;\n }\n this.render(false);\n }\n\n private stop() {\n this.running = false;\n if (this.timer) clearTimeout(this.timer);\n\n // Calculate score\n const center = 50;\n const distance = Math.abs(this.cursor - center);\n\n if (distance <= this.safeZoneHalf) {\n this.result = 'PERFECT!';\n this.resultColor = theme.success;\n } else if (distance <= this.warnZoneHalf) {\n this.result = 'GOOD';\n this.resultColor = ANSI.FG_YELLOW;\n } else {\n this.result = 'MISS';\n this.resultColor = theme.error;\n }\n\n this.render(false);\n\n // Wait a moment to show result, then submit\n setTimeout(() => {\n this.submit(this.result!); // Force non-null\n }, 800);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (!this.running) return;\n\n if (char === ' ') {\n this.stop();\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Header\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Draw Gauge Bar\n let barStr = '';\n const center = 50;\n\n for (let i = 0; i < this.width; i++) {\n const pct = (i / this.width) * 100;\n const dist = Math.abs(pct - center);\n\n let charColor = theme.error; // Default Miss (Red)\n\n if (dist <= this.safeZoneHalf) {\n charColor = theme.success; // Perfect (Green)\n } else if (dist <= this.warnZoneHalf) {\n charColor = ANSI.FG_YELLOW; // Good (Yellow)\n }\n\n // Using block characters for the bar\n barStr += `${charColor}━${ANSI.RESET}`;\n }\n\n output += ` ${barStr}\\n`;\n\n // Draw Cursor\n // Position relative to width\n const pos = Math.floor((this.cursor / 100) * (this.width - 1));\n const padding = ' '.repeat(pos);\n output += ` ${padding}${theme.main}▲${ANSI.RESET}\\n`;\n\n // Instructions or Result\n if (this.running) {\n output += `${theme.muted}(Press Space to Stop)${ANSI.RESET}`;\n } else {\n output += `${ANSI.BOLD}${this.resultColor}${this.result}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected cleanup() {\n if (this.timer) clearTimeout(this.timer);\n super.cleanup();\n }\n}\n"],"names":["GaugePrompt","Prompt","run","p","startLoop","running","timer","setTimeout","tick","cursor","direction","render","stop","clearTimeout","center","distance","Math","abs","safeZoneHalf","result","resultColor","theme","success","warnZoneHalf","ANSI","FG_YELLOW","error","submit","handleInput","char","_key","_firstRender","output","RESET","BOLD","title","options","message","barStr","i","width","pct","dist","charColor","pos","floor","padding","repeat","main","muted","renderFrame","cleanup","safeParam","safeZone","safeWidthPct","max"],"mappings":"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"}
@@ -1,191 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "GridPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return GridPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _utils = require("../utils");
15
- function _define_property(obj, key, value) {
16
- if (key in obj) {
17
- Object.defineProperty(obj, key, {
18
- value: value,
19
- enumerable: true,
20
- configurable: true,
21
- writable: true
22
- });
23
- } else {
24
- obj[key] = value;
25
- }
26
- return obj;
27
- }
28
- let GridPrompt = class GridPrompt extends _base.Prompt {
29
- calculateLayout() {
30
- // Calculate max width for row labels
31
- this.rowLabelWidth = 0;
32
- for (const row of this.options.rows){
33
- this.rowLabelWidth = Math.max(this.rowLabelWidth, (0, _utils.stringWidth)(row));
34
- }
35
- // Calculate width for each column
36
- this.columnWidths = this.options.columns.map((col)=>{
37
- // Header width vs Cell width (3 chars for "[ ]")
38
- return Math.max((0, _utils.stringWidth)(col), 3);
39
- });
40
- }
41
- render(_firstRender) {
42
- const { rows, columns } = this.options;
43
- let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
44
- // Render Header
45
- // Padding for the row label column
46
- output += ' '.repeat(this.rowLabelWidth + 2); // +2 for spacing/border
47
- output += columns.map((col, i)=>{
48
- const width = this.columnWidths[i];
49
- const padding = width - (0, _utils.stringWidth)(col);
50
- const leftPad = Math.floor(padding / 2);
51
- const rightPad = padding - leftPad;
52
- return `${_theme.theme.muted}${' '.repeat(leftPad)}${col}${' '.repeat(rightPad)}${_ansi.ANSI.RESET}`;
53
- }).join(' ') + '\n';
54
- // Render Rows
55
- for(let r = 0; r < rows.length; r++){
56
- const rowLabel = rows[r];
57
- const labelPadding = this.rowLabelWidth - (0, _utils.stringWidth)(rowLabel);
58
- // Row Label
59
- output += `${_theme.theme.muted}${rowLabel}${' '.repeat(labelPadding)}${_ansi.ANSI.RESET} `;
60
- // Cells
61
- const cells = this.selected[r].map((isChecked, c)=>{
62
- const isFocused = r === this.cursorRow && c === this.cursorCol;
63
- const width = this.columnWidths[c];
64
- const content = isChecked ? `[${_theme.theme.success}x${_ansi.ANSI.RESET}]` : '[ ]';
65
- // content string width is 3 (ignoring ansi)
66
- const padding = width - 3;
67
- const leftPad = Math.floor(padding / 2);
68
- const rightPad = padding - leftPad;
69
- let cellStr = `${' '.repeat(leftPad)}${content}${' '.repeat(rightPad)}`;
70
- if (isFocused) {
71
- // Highlight the focused cell
72
- // If we use ANSI.REVERSE on the whole cell including padding:
73
- cellStr = `${_ansi.ANSI.REVERSE}${cellStr}${_ansi.ANSI.RESET}`;
74
- }
75
- return cellStr;
76
- });
77
- output += cells.join(' ') + '\n';
78
- }
79
- output += `${_theme.theme.muted}Arrows to move, Space to toggle, Enter to submit${_ansi.ANSI.RESET}`;
80
- this.renderFrame(output);
81
- }
82
- handleInput(char, _key) {
83
- const isUp = this.isUp(char);
84
- const isDown = this.isDown(char);
85
- const isLeft = this.isLeft(char);
86
- const isRight = this.isRight(char);
87
- if (isUp || isDown || isLeft || isRight) {
88
- if (isUp) this.cursorRow = Math.max(0, this.cursorRow - 1);
89
- if (isDown) this.cursorRow = Math.min(this.options.rows.length - 1, this.cursorRow + 1);
90
- if (isLeft) this.cursorCol = Math.max(0, this.cursorCol - 1);
91
- if (isRight) this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);
92
- this.render(false);
93
- return;
94
- }
95
- if (char === ' ') {
96
- this.selected[this.cursorRow][this.cursorCol] = !this.selected[this.cursorRow][this.cursorCol];
97
- this.render(false);
98
- return;
99
- }
100
- if (char === '\r' || char === '\n') {
101
- this.submit(this.selected);
102
- return;
103
- }
104
- // PageUp (First Row)
105
- if (char === '\x1b[5~') {
106
- this.cursorRow = 0;
107
- this.render(false);
108
- return;
109
- }
110
- // PageDown (Last Row)
111
- if (char === '\x1b[6~') {
112
- this.cursorRow = this.options.rows.length - 1;
113
- this.render(false);
114
- return;
115
- }
116
- // Home (First Column)
117
- if (char === '\x1b[H' || char === '\x1b[1~') {
118
- this.cursorCol = 0;
119
- this.render(false);
120
- return;
121
- }
122
- // End (Last Column)
123
- if (char === '\x1b[F' || char === '\x1b[4~') {
124
- this.cursorCol = this.options.columns.length - 1;
125
- this.render(false);
126
- return;
127
- }
128
- // r: Toggle Row
129
- if (char === 'r') {
130
- const row = this.selected[this.cursorRow];
131
- const allSelected = row.every((c)=>c);
132
- this.selected[this.cursorRow] = row.map(()=>!allSelected);
133
- this.render(false);
134
- return;
135
- }
136
- // c: Toggle Column
137
- if (char === 'c') {
138
- const colIdx = this.cursorCol;
139
- const colValues = this.selected.map((row)=>row[colIdx]);
140
- const allSelected = colValues.every((c)=>c);
141
- this.selected.forEach((row)=>row[colIdx] = !allSelected);
142
- this.render(false);
143
- return;
144
- }
145
- // a: Select All
146
- if (char === 'a') {
147
- this.selected = this.selected.map((row)=>row.map(()=>true));
148
- this.render(false);
149
- return;
150
- }
151
- // x: Deselect All
152
- if (char === 'x') {
153
- this.selected = this.selected.map((row)=>row.map(()=>false));
154
- this.render(false);
155
- return;
156
- }
157
- // i: Invert
158
- if (char === 'i') {
159
- this.selected = this.selected.map((row)=>row.map((v)=>!v));
160
- this.render(false);
161
- return;
162
- }
163
- }
164
- handleMouse(event) {
165
- if (event.action === 'scroll') {
166
- const direction = event.scroll === 'up' ? -1 : 1;
167
- if (event.shift) {
168
- // Horizontal (Column)
169
- this.cursorCol = Math.max(0, Math.min(this.options.columns.length - 1, this.cursorCol + direction));
170
- } else {
171
- // Vertical (Row)
172
- this.cursorRow = Math.max(0, Math.min(this.options.rows.length - 1, this.cursorRow + direction));
173
- }
174
- this.render(false);
175
- }
176
- }
177
- constructor(options){
178
- super(options), _define_property(this, "cursorRow", 0), _define_property(this, "cursorCol", 0), _define_property(this, "selected", void 0), _define_property(this, "columnWidths", []), _define_property(this, "rowLabelWidth", 0);
179
- // Initialize selection matrix
180
- if (options.initial) {
181
- this.selected = options.initial.map((row)=>[
182
- ...row
183
- ]);
184
- } else {
185
- this.selected = options.rows.map(()=>new Array(options.columns.length).fill(false));
186
- }
187
- this.calculateLayout();
188
- }
189
- };
190
-
191
- //# sourceMappingURL=grid.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/grid.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { GridOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class GridPrompt extends Prompt<boolean[][], GridOptions> {\n private cursorRow: number = 0;\n private cursorCol: number = 0;\n private selected: boolean[][];\n private columnWidths: number[] = [];\n private rowLabelWidth: number = 0;\n\n constructor(options: GridOptions) {\n super(options);\n // Initialize selection matrix\n if (options.initial) {\n this.selected = options.initial.map(row => [...row]);\n } else {\n this.selected = options.rows.map(() =>\n new Array(options.columns.length).fill(false)\n );\n }\n\n this.calculateLayout();\n }\n\n private calculateLayout() {\n // Calculate max width for row labels\n this.rowLabelWidth = 0;\n for (const row of this.options.rows) {\n this.rowLabelWidth = Math.max(this.rowLabelWidth, stringWidth(row));\n }\n\n // Calculate width for each column\n this.columnWidths = this.options.columns.map(col => {\n // Header width vs Cell width (3 chars for \"[ ]\")\n return Math.max(stringWidth(col), 3);\n });\n }\n\n protected render(_firstRender: boolean): void {\n const { rows, columns } = this.options;\n\n let output = `${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Render Header\n // Padding for the row label column\n output += ' '.repeat(this.rowLabelWidth + 2); // +2 for spacing/border\n\n output += columns.map((col, i) => {\n const width = this.columnWidths[i];\n const padding = width - stringWidth(col);\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return `${theme.muted}${' '.repeat(leftPad)}${col}${' '.repeat(rightPad)}${ANSI.RESET}`;\n }).join(' ') + '\\n';\n\n // Render Rows\n for (let r = 0; r < rows.length; r++) {\n const rowLabel = rows[r];\n const labelPadding = this.rowLabelWidth - stringWidth(rowLabel);\n\n // Row Label\n output += `${theme.muted}${rowLabel}${' '.repeat(labelPadding)}${ANSI.RESET} `;\n\n // Cells\n const cells = this.selected[r].map((isChecked, c) => {\n const isFocused = (r === this.cursorRow && c === this.cursorCol);\n const width = this.columnWidths[c];\n const content = isChecked ? `[${theme.success}x${ANSI.RESET}]` : '[ ]';\n // content string width is 3 (ignoring ansi)\n const padding = width - 3;\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n\n let cellStr = `${' '.repeat(leftPad)}${content}${' '.repeat(rightPad)}`;\n\n if (isFocused) {\n // Highlight the focused cell\n // If we use ANSI.REVERSE on the whole cell including padding:\n cellStr = `${ANSI.REVERSE}${cellStr}${ANSI.RESET}`;\n }\n\n return cellStr;\n });\n\n output += cells.join(' ') + '\\n';\n }\n\n output += `${theme.muted}Arrows to move, Space to toggle, Enter to submit${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n const isUp = this.isUp(char);\n const isDown = this.isDown(char);\n const isLeft = this.isLeft(char);\n const isRight = this.isRight(char);\n\n if (isUp || isDown || isLeft || isRight) {\n if (isUp) this.cursorRow = Math.max(0, this.cursorRow - 1);\n if (isDown) this.cursorRow = Math.min(this.options.rows.length - 1, this.cursorRow + 1);\n if (isLeft) this.cursorCol = Math.max(0, this.cursorCol - 1);\n if (isRight) this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);\n\n this.render(false);\n return;\n }\n\n if (char === ' ') {\n this.selected[this.cursorRow][this.cursorCol] = !this.selected[this.cursorRow][this.cursorCol];\n this.render(false);\n return;\n }\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.selected);\n return;\n }\n\n // PageUp (First Row)\n if (char === '\\x1b[5~') {\n this.cursorRow = 0;\n this.render(false);\n return;\n }\n // PageDown (Last Row)\n if (char === '\\x1b[6~') {\n this.cursorRow = this.options.rows.length - 1;\n this.render(false);\n return;\n }\n // Home (First Column)\n if (char === '\\x1b[H' || char === '\\x1b[1~') {\n this.cursorCol = 0;\n this.render(false);\n return;\n }\n // End (Last Column)\n if (char === '\\x1b[F' || char === '\\x1b[4~') {\n this.cursorCol = this.options.columns.length - 1;\n this.render(false);\n return;\n }\n\n // r: Toggle Row\n if (char === 'r') {\n const row = this.selected[this.cursorRow];\n const allSelected = row.every(c => c);\n this.selected[this.cursorRow] = row.map(() => !allSelected);\n this.render(false);\n return;\n }\n\n // c: Toggle Column\n if (char === 'c') {\n const colIdx = this.cursorCol;\n const colValues = this.selected.map(row => row[colIdx]);\n const allSelected = colValues.every(c => c);\n this.selected.forEach(row => row[colIdx] = !allSelected);\n this.render(false);\n return;\n }\n\n // a: Select All\n if (char === 'a') {\n this.selected = this.selected.map(row => row.map(() => true));\n this.render(false);\n return;\n }\n\n // x: Deselect All\n if (char === 'x') {\n this.selected = this.selected.map(row => row.map(() => false));\n this.render(false);\n return;\n }\n\n // i: Invert\n if (char === 'i') {\n this.selected = this.selected.map(row => row.map(v => !v));\n this.render(false);\n return;\n }\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n const direction = event.scroll === 'up' ? -1 : 1;\n\n if (event.shift) {\n // Horizontal (Column)\n this.cursorCol = Math.max(0, Math.min(this.options.columns.length - 1, this.cursorCol + direction));\n } else {\n // Vertical (Row)\n this.cursorRow = Math.max(0, Math.min(this.options.rows.length - 1, this.cursorRow + direction));\n }\n this.render(false);\n }\n }\n}\n"],"names":["GridPrompt","Prompt","calculateLayout","rowLabelWidth","row","options","rows","Math","max","stringWidth","columnWidths","columns","map","col","render","_firstRender","output","theme","title","message","ANSI","RESET","repeat","i","width","padding","leftPad","floor","rightPad","muted","join","r","length","rowLabel","labelPadding","cells","selected","isChecked","c","isFocused","cursorRow","cursorCol","content","success","cellStr","REVERSE","renderFrame","handleInput","char","_key","isUp","isDown","isLeft","isRight","min","submit","allSelected","every","colIdx","colValues","forEach","v","handleMouse","event","action","direction","scroll","shift","initial","Array","fill"],"mappings":"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"}
@@ -1,147 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "HeatmapPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return HeatmapPrompt;
9
- }
10
- });
11
- const _base = require("../base");
12
- const _ansi = require("../ansi");
13
- function _define_property(obj, key, value) {
14
- if (key in obj) {
15
- Object.defineProperty(obj, key, {
16
- value: value,
17
- enumerable: true,
18
- configurable: true,
19
- writable: true
20
- });
21
- } else {
22
- obj[key] = value;
23
- }
24
- return obj;
25
- }
26
- let HeatmapPrompt = class HeatmapPrompt extends _base.Prompt {
27
- render(_firstRender) {
28
- let output = `${_ansi.ANSI.FG_CYAN}? ${this.options.message}${_ansi.ANSI.RESET}\n`;
29
- // Render Column Headers
30
- output += ' '; // Offset for row labels
31
- this.options.columns.forEach((col)=>{
32
- // Show first 2 chars
33
- const label = col.substring(0, 2).padEnd(2);
34
- output += ` ${label} `;
35
- });
36
- output += '\n';
37
- // Grid
38
- for(let r = 0; r < this.options.rows.length; r++){
39
- const rowLabel = this.options.rows[r].substring(0, 4).padStart(4);
40
- output += `${_ansi.ANSI.FG_GRAY}${rowLabel} ${_ansi.ANSI.RESET}`;
41
- for(let c = 0; c < this.options.columns.length; c++){
42
- const val = this.grid[r][c];
43
- const legend = this.getLegend(val);
44
- const char = legend?.char || '?';
45
- const color = legend?.color || ((s)=>s);
46
- const isCursor = r === this.cursorRow && c === this.cursorCol;
47
- const cellContent = color(char);
48
- if (isCursor) {
49
- output += `[${cellContent}]`; // Brackets around
50
- } else {
51
- output += ` ${cellContent} `;
52
- }
53
- }
54
- output += '\n';
55
- }
56
- // Legend
57
- output += '\nLegend: ';
58
- this.options.legend.forEach((l)=>{
59
- output += `${l.value}:${l.color(l.char)} `;
60
- });
61
- output += '\n' + _ansi.ANSI.FG_GRAY + "(Arrows to move, Space to cycle, 0-9 to set)" + _ansi.ANSI.RESET;
62
- this.renderFrame(output);
63
- }
64
- getLegend(val) {
65
- return this.options.legend.find((l)=>l.value === val);
66
- }
67
- handleMouse(event) {
68
- if (event.action === 'scroll') {
69
- if (event.scroll === 'up') {
70
- if (this.cursorRow > 0) this.cursorRow--;
71
- } else if (event.scroll === 'down') {
72
- if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;
73
- }
74
- this.render(false);
75
- }
76
- }
77
- handleInput(char, _key) {
78
- if (char === '\r' || char === '\n') {
79
- this.submit(this.grid);
80
- return;
81
- }
82
- if (this.isUp(char)) {
83
- if (this.cursorRow > 0) this.cursorRow--;
84
- } else if (this.isDown(char)) {
85
- if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;
86
- } else if (this.isLeft(char)) {
87
- if (this.cursorCol > 0) this.cursorCol--;
88
- } else if (this.isRight(char)) {
89
- if (this.cursorCol < this.options.columns.length - 1) this.cursorCol++;
90
- } else if (char === '\t') {
91
- this.cursorCol++;
92
- if (this.cursorCol >= this.options.columns.length) {
93
- this.cursorCol = 0;
94
- this.cursorRow++;
95
- if (this.cursorRow >= this.options.rows.length) {
96
- this.cursorRow = 0;
97
- }
98
- }
99
- } else if (char === '\u001b[Z') {
100
- this.cursorCol--;
101
- if (this.cursorCol < 0) {
102
- this.cursorCol = this.options.columns.length - 1;
103
- this.cursorRow--;
104
- if (this.cursorRow < 0) {
105
- this.cursorRow = this.options.rows.length - 1;
106
- }
107
- }
108
- } else if (char === ' ') {
109
- const val = this.grid[this.cursorRow][this.cursorCol];
110
- const idx = this.validValues.indexOf(val);
111
- let nextVal;
112
- if (idx === -1) {
113
- // If current val not in legend (maybe init with invalid), reset to first
114
- nextVal = this.validValues[0];
115
- } else {
116
- nextVal = this.validValues[(idx + 1) % this.validValues.length];
117
- }
118
- this.grid[this.cursorRow][this.cursorCol] = nextVal;
119
- } else if (/[0-9]/.test(char)) {
120
- const num = parseInt(char, 10);
121
- // Only set if valid in legend
122
- if (this.validValues.includes(num)) {
123
- this.grid[this.cursorRow][this.cursorCol] = num;
124
- }
125
- }
126
- this.render(false);
127
- }
128
- constructor(options){
129
- super(options), _define_property(this, "grid", void 0), _define_property(this, "cursorRow", 0), _define_property(this, "cursorCol", 0), _define_property(this, "validValues", void 0);
130
- // Initialize grid
131
- const rows = options.rows.length;
132
- const cols = options.columns.length;
133
- if (options.initial) {
134
- this.grid = options.initial.map((row)=>[
135
- ...row
136
- ]);
137
- } else {
138
- this.grid = Array.from({
139
- length: rows
140
- }, ()=>Array(cols).fill(0));
141
- }
142
- // Get sorted valid values for cycling
143
- this.validValues = options.legend.map((l)=>l.value).sort((a, b)=>a - b);
144
- }
145
- };
146
-
147
- //# sourceMappingURL=heatmap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/heatmap.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { HeatmapOptions, HeatmapLegend, MouseEvent } from '../types';\nimport { ANSI } from '../ansi';\n\nexport class HeatmapPrompt extends Prompt<number[][], HeatmapOptions> {\n private grid: number[][];\n private cursorRow: number = 0;\n private cursorCol: number = 0;\n private validValues: number[];\n\n constructor(options: HeatmapOptions) {\n super(options);\n // Initialize grid\n const rows = options.rows.length;\n const cols = options.columns.length;\n if (options.initial) {\n this.grid = options.initial.map(row => [...row]);\n } else {\n this.grid = Array.from({ length: rows }, () => Array(cols).fill(0));\n }\n\n // Get sorted valid values for cycling\n this.validValues = options.legend.map(l => l.value).sort((a, b) => a - b);\n }\n\n protected render(_firstRender: boolean): void {\n let output = `${ANSI.FG_CYAN}? ${this.options.message}${ANSI.RESET}\\n`;\n\n // Render Column Headers\n output += ' '; // Offset for row labels\n this.options.columns.forEach(col => {\n // Show first 2 chars\n const label = col.substring(0, 2).padEnd(2);\n output += ` ${label} `;\n });\n output += '\\n';\n\n // Grid\n for (let r = 0; r < this.options.rows.length; r++) {\n const rowLabel = this.options.rows[r].substring(0, 4).padStart(4);\n output += `${ANSI.FG_GRAY}${rowLabel} ${ANSI.RESET}`;\n\n for (let c = 0; c < this.options.columns.length; c++) {\n const val = this.grid[r][c];\n const legend = this.getLegend(val);\n const char = legend?.char || '?';\n const color = legend?.color || ((s: string) => s);\n\n const isCursor = r === this.cursorRow && c === this.cursorCol;\n\n const cellContent = color(char);\n if (isCursor) {\n output += `[${cellContent}]`; // Brackets around\n } else {\n output += ` ${cellContent} `;\n }\n }\n output += '\\n';\n }\n\n // Legend\n output += '\\nLegend: ';\n this.options.legend.forEach(l => {\n output += `${l.value}:${l.color(l.char)} `;\n });\n output += '\\n' + ANSI.FG_GRAY + \"(Arrows to move, Space to cycle, 0-9 to set)\" + ANSI.RESET;\n\n this.renderFrame(output);\n }\n\n private getLegend(val: number): HeatmapLegend | undefined {\n return this.options.legend.find(l => l.value === val);\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.cursorRow > 0) this.cursorRow--;\n } else if (event.scroll === 'down') {\n if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;\n }\n this.render(false);\n }\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n if (char === '\\r' || char === '\\n') { // Enter\n this.submit(this.grid);\n return;\n }\n\n if (this.isUp(char)) {\n if (this.cursorRow > 0) this.cursorRow--;\n } else if (this.isDown(char)) {\n if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;\n } else if (this.isLeft(char)) {\n if (this.cursorCol > 0) this.cursorCol--;\n } else if (this.isRight(char)) {\n if (this.cursorCol < this.options.columns.length - 1) this.cursorCol++;\n } else if (char === '\\t') { // Tab -> Right (Cycle)\n this.cursorCol++;\n if (this.cursorCol >= this.options.columns.length) {\n this.cursorCol = 0;\n this.cursorRow++;\n if (this.cursorRow >= this.options.rows.length) {\n this.cursorRow = 0;\n }\n }\n } else if (char === '\\u001b[Z') { // Shift+Tab -> Left (Cycle)\n this.cursorCol--;\n if (this.cursorCol < 0) {\n this.cursorCol = this.options.columns.length - 1;\n this.cursorRow--;\n if (this.cursorRow < 0) {\n this.cursorRow = this.options.rows.length - 1;\n }\n }\n } else if (char === ' ') {\n const val = this.grid[this.cursorRow][this.cursorCol];\n const idx = this.validValues.indexOf(val);\n let nextVal;\n if (idx === -1) {\n // If current val not in legend (maybe init with invalid), reset to first\n nextVal = this.validValues[0];\n } else {\n nextVal = this.validValues[(idx + 1) % this.validValues.length];\n }\n this.grid[this.cursorRow][this.cursorCol] = nextVal;\n } else if (/[0-9]/.test(char)) {\n const num = parseInt(char, 10);\n // Only set if valid in legend\n if (this.validValues.includes(num)) {\n this.grid[this.cursorRow][this.cursorCol] = num;\n }\n }\n\n this.render(false);\n }\n}\n"],"names":["HeatmapPrompt","Prompt","render","_firstRender","output","ANSI","FG_CYAN","options","message","RESET","columns","forEach","col","label","substring","padEnd","r","rows","length","rowLabel","padStart","FG_GRAY","c","val","grid","legend","getLegend","char","color","s","isCursor","cursorRow","cursorCol","cellContent","l","value","renderFrame","find","handleMouse","event","action","scroll","handleInput","_key","submit","isUp","isDown","isLeft","isRight","idx","validValues","indexOf","nextVal","test","num","parseInt","includes","cols","initial","map","row","Array","from","fill","sort","a","b"],"mappings":"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"}