mepcli 2.0.0-beta.2 → 2.0.0-beta.4

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 (358) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +20 -0
  3. package/dist/ansi.d.ts +36 -0
  4. package/dist/ansi.js +1 -0
  5. package/dist/base.d.ts +61 -0
  6. package/dist/base.js +1 -0
  7. package/dist/{src/core.js → core.d.ts} +181 -345
  8. package/dist/core.js +1 -0
  9. package/dist/data/countries.d.ts +2 -0
  10. package/dist/data/countries.js +1 -0
  11. package/dist/data/licenses.d.ts +2 -0
  12. package/dist/data/licenses.js +1 -0
  13. package/dist/highlight.d.ts +7 -0
  14. package/dist/highlight.js +1 -0
  15. package/dist/index.d.ts +52 -0
  16. package/dist/index.js +1 -0
  17. package/dist/input.d.ts +14 -0
  18. package/dist/input.js +1 -0
  19. package/dist/pipeline.d.ts +90 -0
  20. package/dist/pipeline.js +1 -0
  21. package/dist/prompts/autocomplete.d.ts +22 -0
  22. package/dist/prompts/autocomplete.js +1 -0
  23. package/dist/prompts/box.d.ts +21 -0
  24. package/dist/prompts/box.js +4 -0
  25. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  26. package/dist/prompts/breadcrumb-search.js +2 -0
  27. package/dist/prompts/breadcrumb.d.ts +32 -0
  28. package/dist/prompts/breadcrumb.js +3 -0
  29. package/dist/prompts/byte.d.ts +13 -0
  30. package/dist/prompts/byte.js +5 -0
  31. package/dist/prompts/calculator.d.ts +17 -0
  32. package/dist/prompts/calculator.js +3 -0
  33. package/dist/prompts/calendar.d.ts +33 -0
  34. package/dist/prompts/calendar.js +3 -0
  35. package/dist/prompts/checkbox.d.ts +13 -0
  36. package/dist/prompts/checkbox.js +2 -0
  37. package/dist/prompts/code.d.ts +19 -0
  38. package/dist/prompts/code.js +4 -0
  39. package/dist/prompts/color.d.ts +14 -0
  40. package/dist/prompts/color.js +10 -0
  41. package/dist/prompts/confirm.d.ts +8 -0
  42. package/dist/prompts/confirm.js +1 -0
  43. package/dist/prompts/connection-string.d.ts +18 -0
  44. package/dist/prompts/connection-string.js +1 -0
  45. package/dist/prompts/cron.d.ts +13 -0
  46. package/dist/prompts/cron.js +4 -0
  47. package/dist/prompts/curl-utils.d.ts +25 -0
  48. package/dist/prompts/curl-utils.js +1 -0
  49. package/dist/prompts/curl.d.ts +41 -0
  50. package/dist/prompts/curl.js +12 -0
  51. package/dist/prompts/data-inspector.d.ts +22 -0
  52. package/dist/prompts/data-inspector.js +5 -0
  53. package/dist/prompts/date.d.ts +12 -0
  54. package/dist/prompts/date.js +2 -0
  55. package/dist/prompts/dependency.d.ts +16 -0
  56. package/dist/prompts/dependency.js +3 -0
  57. package/dist/prompts/dial.d.ts +10 -0
  58. package/dist/prompts/dial.js +3 -0
  59. package/dist/prompts/diff.d.ts +10 -0
  60. package/dist/prompts/diff.js +10 -0
  61. package/dist/prompts/draw.d.ts +20 -0
  62. package/dist/prompts/draw.js +6 -0
  63. package/dist/prompts/editor.d.ts +14 -0
  64. package/dist/prompts/editor.js +2 -0
  65. package/dist/prompts/emoji.d.ts +18 -0
  66. package/dist/prompts/emoji.js +5 -0
  67. package/dist/prompts/exec.d.ts +17 -0
  68. package/dist/prompts/exec.js +1 -0
  69. package/dist/prompts/file.d.ts +21 -0
  70. package/dist/prompts/file.js +2 -0
  71. package/dist/prompts/form.d.ts +18 -0
  72. package/dist/prompts/form.js +1 -0
  73. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  74. package/dist/prompts/fuzzy-multi-column.js +2 -0
  75. package/dist/prompts/fuzzy.d.ts +12 -0
  76. package/dist/prompts/fuzzy.js +2 -0
  77. package/dist/prompts/gauge.d.ts +21 -0
  78. package/dist/prompts/gauge.js +4 -0
  79. package/dist/prompts/grid.d.ts +14 -0
  80. package/dist/prompts/grid.js +2 -0
  81. package/dist/prompts/heatmap.d.ts +13 -0
  82. package/dist/prompts/heatmap.js +2 -0
  83. package/dist/prompts/ip.d.ts +11 -0
  84. package/dist/prompts/ip.js +3 -0
  85. package/dist/prompts/kanban.d.ts +17 -0
  86. package/dist/prompts/kanban.js +4 -0
  87. package/dist/prompts/keypress.d.ts +7 -0
  88. package/dist/prompts/keypress.js +1 -0
  89. package/dist/prompts/license.d.ts +9 -0
  90. package/dist/prompts/license.js +13 -0
  91. package/dist/prompts/list.d.ts +9 -0
  92. package/dist/prompts/list.js +1 -0
  93. package/dist/prompts/map.d.ts +17 -0
  94. package/dist/prompts/map.js +5 -0
  95. package/dist/prompts/match.d.ts +19 -0
  96. package/dist/prompts/match.js +7 -0
  97. package/dist/prompts/miller.d.ts +15 -0
  98. package/dist/prompts/miller.js +2 -0
  99. package/dist/prompts/multi-column-select.d.ts +10 -0
  100. package/dist/prompts/multi-column-select.js +2 -0
  101. package/dist/prompts/multi-range.d.ts +9 -0
  102. package/dist/prompts/multi-range.js +3 -0
  103. package/dist/prompts/multi-select.d.ts +15 -0
  104. package/dist/prompts/multi-select.js +4 -0
  105. package/dist/prompts/number.d.ts +11 -0
  106. package/dist/prompts/number.js +2 -0
  107. package/dist/prompts/otp.d.ts +10 -0
  108. package/dist/prompts/otp.js +2 -0
  109. package/dist/prompts/pattern.d.ts +22 -0
  110. package/dist/prompts/pattern.js +4 -0
  111. package/dist/prompts/phone.d.ts +41 -0
  112. package/dist/prompts/phone.js +3 -0
  113. package/dist/prompts/quiz-select.d.ts +10 -0
  114. package/dist/prompts/quiz-select.js +7 -0
  115. package/dist/prompts/quiz-text.d.ts +11 -0
  116. package/dist/prompts/quiz-text.js +8 -0
  117. package/dist/prompts/range.d.ts +9 -0
  118. package/dist/prompts/range.js +1 -0
  119. package/dist/prompts/rating.d.ts +8 -0
  120. package/dist/prompts/rating.js +1 -0
  121. package/dist/prompts/regex.d.ts +13 -0
  122. package/dist/prompts/regex.js +5 -0
  123. package/dist/prompts/region.d.ts +11 -0
  124. package/dist/prompts/region.js +5 -0
  125. package/dist/prompts/schedule.d.ts +20 -0
  126. package/dist/prompts/schedule.js +5 -0
  127. package/dist/prompts/scroll.d.ts +13 -0
  128. package/dist/prompts/scroll.js +1 -0
  129. package/dist/prompts/seat.d.ts +17 -0
  130. package/dist/prompts/seat.js +5 -0
  131. package/dist/prompts/select-range.d.ts +8 -0
  132. package/dist/prompts/select-range.js +3 -0
  133. package/dist/prompts/select.d.ts +15 -0
  134. package/dist/prompts/select.js +2 -0
  135. package/dist/prompts/semver.d.ts +6 -0
  136. package/dist/prompts/semver.js +1 -0
  137. package/dist/prompts/shortcut.d.ts +9 -0
  138. package/dist/prompts/shortcut.js +1 -0
  139. package/dist/prompts/slider.d.ts +8 -0
  140. package/dist/prompts/slider.js +1 -0
  141. package/dist/prompts/slot.d.ts +16 -0
  142. package/dist/prompts/slot.js +8 -0
  143. package/dist/prompts/snippet.d.ts +19 -0
  144. package/dist/prompts/snippet.js +4 -0
  145. package/dist/prompts/sort-grid.d.ts +16 -0
  146. package/dist/prompts/sort-grid.js +2 -0
  147. package/dist/prompts/sort.d.ts +14 -0
  148. package/dist/prompts/sort.js +2 -0
  149. package/dist/prompts/spam.d.ts +17 -0
  150. package/dist/prompts/spam.js +2 -0
  151. package/dist/prompts/spreadsheet.d.ts +21 -0
  152. package/dist/prompts/spreadsheet.js +7 -0
  153. package/dist/prompts/table.d.ts +14 -0
  154. package/dist/prompts/table.js +3 -0
  155. package/dist/prompts/text.d.ts +17 -0
  156. package/dist/prompts/text.js +2 -0
  157. package/dist/prompts/time.d.ts +12 -0
  158. package/dist/prompts/time.js +2 -0
  159. package/dist/prompts/toggle.d.ts +8 -0
  160. package/dist/prompts/toggle.js +1 -0
  161. package/dist/prompts/transfer.d.ts +18 -0
  162. package/dist/prompts/transfer.js +5 -0
  163. package/dist/prompts/tree-select.d.ts +31 -0
  164. package/dist/prompts/tree-select.js +3 -0
  165. package/dist/prompts/tree.d.ts +20 -0
  166. package/dist/prompts/tree.js +3 -0
  167. package/dist/prompts/wait.d.ts +18 -0
  168. package/dist/prompts/wait.js +1 -0
  169. package/dist/spinner.d.ts +33 -0
  170. package/dist/spinner.js +3 -0
  171. package/dist/symbols.d.ts +33 -0
  172. package/dist/symbols.js +1 -0
  173. package/dist/tasks.d.ts +57 -0
  174. package/dist/tasks.js +1 -0
  175. package/dist/theme.d.ts +2 -0
  176. package/dist/theme.js +1 -0
  177. package/dist/types.d.ts +519 -0
  178. package/dist/types.js +1 -0
  179. package/dist/utils.d.ts +82 -0
  180. package/dist/utils.js +1 -0
  181. package/package.json +10 -10
  182. package/dist/src/ansi.js +0 -50
  183. package/dist/src/ansi.js.map +0 -1
  184. package/dist/src/base.js +0 -258
  185. package/dist/src/base.js.map +0 -1
  186. package/dist/src/core.js.map +0 -1
  187. package/dist/src/data/countries.js +0 -569
  188. package/dist/src/data/countries.js.map +0 -1
  189. package/dist/src/data/licenses.js +0 -480
  190. package/dist/src/data/licenses.js.map +0 -1
  191. package/dist/src/highlight.js +0 -185
  192. package/dist/src/highlight.js.map +0 -1
  193. package/dist/src/index.js +0 -66
  194. package/dist/src/index.js.map +0 -1
  195. package/dist/src/input.js +0 -158
  196. package/dist/src/input.js.map +0 -1
  197. package/dist/src/pipeline.js +0 -273
  198. package/dist/src/pipeline.js.map +0 -1
  199. package/dist/src/prompts/autocomplete.js +0 -171
  200. package/dist/src/prompts/autocomplete.js.map +0 -1
  201. package/dist/src/prompts/box.js +0 -225
  202. package/dist/src/prompts/box.js.map +0 -1
  203. package/dist/src/prompts/breadcrumb-search.js +0 -260
  204. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  205. package/dist/src/prompts/breadcrumb.js +0 -307
  206. package/dist/src/prompts/breadcrumb.js.map +0 -1
  207. package/dist/src/prompts/byte.js +0 -176
  208. package/dist/src/prompts/byte.js.map +0 -1
  209. package/dist/src/prompts/calculator.js +0 -243
  210. package/dist/src/prompts/calculator.js.map +0 -1
  211. package/dist/src/prompts/calendar.js +0 -430
  212. package/dist/src/prompts/calendar.js.map +0 -1
  213. package/dist/src/prompts/checkbox.js +0 -159
  214. package/dist/src/prompts/checkbox.js.map +0 -1
  215. package/dist/src/prompts/code.js +0 -271
  216. package/dist/src/prompts/code.js.map +0 -1
  217. package/dist/src/prompts/color.js +0 -165
  218. package/dist/src/prompts/color.js.map +0 -1
  219. package/dist/src/prompts/confirm.js +0 -55
  220. package/dist/src/prompts/confirm.js.map +0 -1
  221. package/dist/src/prompts/connection-string.js +0 -120
  222. package/dist/src/prompts/connection-string.js.map +0 -1
  223. package/dist/src/prompts/cron.js +0 -207
  224. package/dist/src/prompts/cron.js.map +0 -1
  225. package/dist/src/prompts/curl-utils.js +0 -71
  226. package/dist/src/prompts/curl-utils.js.map +0 -1
  227. package/dist/src/prompts/curl.js +0 -431
  228. package/dist/src/prompts/curl.js.map +0 -1
  229. package/dist/src/prompts/data-inspector.js +0 -261
  230. package/dist/src/prompts/data-inspector.js.map +0 -1
  231. package/dist/src/prompts/date.js +0 -185
  232. package/dist/src/prompts/date.js.map +0 -1
  233. package/dist/src/prompts/dependency.js +0 -283
  234. package/dist/src/prompts/dependency.js.map +0 -1
  235. package/dist/src/prompts/dial.js +0 -124
  236. package/dist/src/prompts/dial.js.map +0 -1
  237. package/dist/src/prompts/diff.js +0 -118
  238. package/dist/src/prompts/diff.js.map +0 -1
  239. package/dist/src/prompts/draw.js +0 -191
  240. package/dist/src/prompts/draw.js.map +0 -1
  241. package/dist/src/prompts/editor.js +0 -234
  242. package/dist/src/prompts/editor.js.map +0 -1
  243. package/dist/src/prompts/emoji.js +0 -226
  244. package/dist/src/prompts/emoji.js.map +0 -1
  245. package/dist/src/prompts/exec.js +0 -151
  246. package/dist/src/prompts/exec.js.map +0 -1
  247. package/dist/src/prompts/file.js +0 -217
  248. package/dist/src/prompts/file.js.map +0 -1
  249. package/dist/src/prompts/form.js +0 -241
  250. package/dist/src/prompts/form.js.map +0 -1
  251. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  252. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  253. package/dist/src/prompts/fuzzy.js +0 -147
  254. package/dist/src/prompts/fuzzy.js.map +0 -1
  255. package/dist/src/prompts/gauge.js +0 -137
  256. package/dist/src/prompts/gauge.js.map +0 -1
  257. package/dist/src/prompts/grid.js +0 -191
  258. package/dist/src/prompts/grid.js.map +0 -1
  259. package/dist/src/prompts/heatmap.js +0 -147
  260. package/dist/src/prompts/heatmap.js.map +0 -1
  261. package/dist/src/prompts/ip.js +0 -138
  262. package/dist/src/prompts/ip.js.map +0 -1
  263. package/dist/src/prompts/kanban.js +0 -233
  264. package/dist/src/prompts/kanban.js.map +0 -1
  265. package/dist/src/prompts/keypress.js +0 -54
  266. package/dist/src/prompts/keypress.js.map +0 -1
  267. package/dist/src/prompts/license.js +0 -144
  268. package/dist/src/prompts/license.js.map +0 -1
  269. package/dist/src/prompts/list.js +0 -124
  270. package/dist/src/prompts/list.js.map +0 -1
  271. package/dist/src/prompts/map.js +0 -262
  272. package/dist/src/prompts/map.js.map +0 -1
  273. package/dist/src/prompts/match.js +0 -271
  274. package/dist/src/prompts/match.js.map +0 -1
  275. package/dist/src/prompts/miller.js +0 -228
  276. package/dist/src/prompts/miller.js.map +0 -1
  277. package/dist/src/prompts/multi-column-select.js +0 -176
  278. package/dist/src/prompts/multi-column-select.js.map +0 -1
  279. package/dist/src/prompts/multi-range.js +0 -189
  280. package/dist/src/prompts/multi-range.js.map +0 -1
  281. package/dist/src/prompts/multi-select.js +0 -183
  282. package/dist/src/prompts/multi-select.js.map +0 -1
  283. package/dist/src/prompts/number.js +0 -166
  284. package/dist/src/prompts/number.js.map +0 -1
  285. package/dist/src/prompts/otp.js +0 -107
  286. package/dist/src/prompts/otp.js.map +0 -1
  287. package/dist/src/prompts/pattern.js +0 -252
  288. package/dist/src/prompts/pattern.js.map +0 -1
  289. package/dist/src/prompts/phone.js +0 -398
  290. package/dist/src/prompts/phone.js.map +0 -1
  291. package/dist/src/prompts/quiz-select.js +0 -114
  292. package/dist/src/prompts/quiz-select.js.map +0 -1
  293. package/dist/src/prompts/quiz-text.js +0 -98
  294. package/dist/src/prompts/quiz-text.js.map +0 -1
  295. package/dist/src/prompts/range.js +0 -164
  296. package/dist/src/prompts/range.js.map +0 -1
  297. package/dist/src/prompts/rating.js +0 -83
  298. package/dist/src/prompts/rating.js.map +0 -1
  299. package/dist/src/prompts/regex.js +0 -145
  300. package/dist/src/prompts/regex.js.map +0 -1
  301. package/dist/src/prompts/region.js +0 -170
  302. package/dist/src/prompts/region.js.map +0 -1
  303. package/dist/src/prompts/schedule.js +0 -270
  304. package/dist/src/prompts/schedule.js.map +0 -1
  305. package/dist/src/prompts/scroll.js +0 -155
  306. package/dist/src/prompts/scroll.js.map +0 -1
  307. package/dist/src/prompts/seat.js +0 -164
  308. package/dist/src/prompts/seat.js.map +0 -1
  309. package/dist/src/prompts/select-range.js +0 -148
  310. package/dist/src/prompts/select-range.js.map +0 -1
  311. package/dist/src/prompts/select.js +0 -163
  312. package/dist/src/prompts/select.js.map +0 -1
  313. package/dist/src/prompts/semver.js +0 -43
  314. package/dist/src/prompts/semver.js.map +0 -1
  315. package/dist/src/prompts/shortcut.js +0 -133
  316. package/dist/src/prompts/shortcut.js.map +0 -1
  317. package/dist/src/prompts/slider.js +0 -69
  318. package/dist/src/prompts/slider.js.map +0 -1
  319. package/dist/src/prompts/slot.js +0 -117
  320. package/dist/src/prompts/slot.js.map +0 -1
  321. package/dist/src/prompts/snippet.js +0 -228
  322. package/dist/src/prompts/snippet.js.map +0 -1
  323. package/dist/src/prompts/sort-grid.js +0 -151
  324. package/dist/src/prompts/sort-grid.js.map +0 -1
  325. package/dist/src/prompts/sort.js +0 -166
  326. package/dist/src/prompts/sort.js.map +0 -1
  327. package/dist/src/prompts/spam.js +0 -80
  328. package/dist/src/prompts/spam.js.map +0 -1
  329. package/dist/src/prompts/spreadsheet.js +0 -240
  330. package/dist/src/prompts/spreadsheet.js.map +0 -1
  331. package/dist/src/prompts/table.js +0 -120
  332. package/dist/src/prompts/table.js.map +0 -1
  333. package/dist/src/prompts/text.js +0 -317
  334. package/dist/src/prompts/text.js.map +0 -1
  335. package/dist/src/prompts/time.js +0 -211
  336. package/dist/src/prompts/time.js.map +0 -1
  337. package/dist/src/prompts/toggle.js +0 -53
  338. package/dist/src/prompts/toggle.js.map +0 -1
  339. package/dist/src/prompts/transfer.js +0 -207
  340. package/dist/src/prompts/transfer.js.map +0 -1
  341. package/dist/src/prompts/tree-select.js +0 -270
  342. package/dist/src/prompts/tree-select.js.map +0 -1
  343. package/dist/src/prompts/tree.js +0 -233
  344. package/dist/src/prompts/tree.js.map +0 -1
  345. package/dist/src/prompts/wait.js +0 -79
  346. package/dist/src/prompts/wait.js.map +0 -1
  347. package/dist/src/spinner.js +0 -105
  348. package/dist/src/spinner.js.map +0 -1
  349. package/dist/src/symbols.js +0 -66
  350. package/dist/src/symbols.js.map +0 -1
  351. package/dist/src/tasks.js +0 -231
  352. package/dist/src/tasks.js.map +0 -1
  353. package/dist/src/theme.js +0 -29
  354. package/dist/src/theme.js.map +0 -1
  355. package/dist/src/types.js +0 -8
  356. package/dist/src/types.js.map +0 -1
  357. package/dist/src/utils.js +0 -480
  358. package/dist/src/utils.js.map +0 -1
@@ -1,163 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SelectPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SelectPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _symbols = require("../symbols");
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 SelectPrompt = class SelectPrompt extends _base.Prompt {
29
- isSeparator(item) {
30
- return item && 'separator' in item;
31
- }
32
- findNextSelectableIndex(currentIndex, direction) {
33
- let nextIndex = currentIndex + direction;
34
- const choices = this.getFilteredChoices();
35
- // Loop around logic
36
- if (nextIndex < 0) nextIndex = choices.length - 1;
37
- if (nextIndex >= choices.length) nextIndex = 0;
38
- if (choices.length === 0) return 0;
39
- // Safety check to prevent infinite loop if all are separators (shouldn't happen in practice)
40
- let count = 0;
41
- while(this.isSeparator(choices[nextIndex]) && count < choices.length){
42
- nextIndex += direction;
43
- if (nextIndex < 0) nextIndex = choices.length - 1;
44
- if (nextIndex >= choices.length) nextIndex = 0;
45
- count++;
46
- }
47
- return nextIndex;
48
- }
49
- getFilteredChoices() {
50
- if (!this.searchBuffer) return this.options.choices;
51
- return this.options.choices.filter((c)=>{
52
- if (this.isSeparator(c)) return false; // Hide separators when searching
53
- return c.title.toLowerCase().includes(this.searchBuffer.toLowerCase());
54
- });
55
- }
56
- render(_firstRender) {
57
- let output = '';
58
- const choices = this.getFilteredChoices();
59
- // Adjust Scroll Top
60
- if (this.selectedIndex < this.scrollTop) {
61
- this.scrollTop = this.selectedIndex;
62
- } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
63
- this.scrollTop = this.selectedIndex - this.pageSize + 1;
64
- }
65
- // Handle Filtering Edge Case: if list shrinks, scrollTop might be too high
66
- if (this.scrollTop > choices.length - 1) {
67
- this.scrollTop = Math.max(0, choices.length - this.pageSize);
68
- }
69
- // Header
70
- const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Filter: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
71
- // Note: We avoid ERASE_LINE here because renderFrame handles full redraw
72
- output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr}\n`;
73
- if (choices.length === 0) {
74
- output += ` ${_theme.theme.muted}No results found${_ansi.ANSI.RESET}`;
75
- // We can omit newline at the very end if we want, but usually it's better to be consistent.
76
- // renderFrame adds newline via truncate logic? No, it joins.
77
- // So if I want a line break, I must add it.
78
- } else {
79
- const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
80
- visibleChoices.forEach((choice, index)=>{
81
- const actualIndex = this.scrollTop + index;
82
- if (index > 0) output += '\n'; // Separator between items
83
- if (this.isSeparator(choice)) {
84
- output += ` ${_ansi.ANSI.DIM}${choice.text || _symbols.symbols.line.repeat(8)}${_ansi.ANSI.RESET}`;
85
- } else {
86
- if (actualIndex === this.selectedIndex) {
87
- output += `${_theme.theme.main}${_symbols.symbols.pointer} ${choice.title}${_ansi.ANSI.RESET}`;
88
- } else {
89
- output += ` ${choice.title}`;
90
- }
91
- }
92
- });
93
- }
94
- // No manual printing. Pass to renderFrame.
95
- this.renderFrame(output);
96
- }
97
- handleInput(char) {
98
- const choices = this.getFilteredChoices();
99
- if (char === '\r' || char === '\n') {
100
- if (choices.length === 0) {
101
- this.searchBuffer = '';
102
- this.selectedIndex = this.findNextSelectableIndex(-1, 1);
103
- this.render(false);
104
- return;
105
- }
106
- const choice = choices[this.selectedIndex];
107
- if (this.isSeparator(choice)) return;
108
- this.submit(choice.value);
109
- return;
110
- }
111
- if (this.isUp(char)) {
112
- if (choices.length > 0) {
113
- this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);
114
- this.render(false);
115
- }
116
- return;
117
- }
118
- if (this.isDown(char)) {
119
- if (choices.length > 0) {
120
- this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);
121
- this.render(false);
122
- }
123
- return;
124
- }
125
- // Backspace
126
- if (char === '\u0008' || char === '\x7f') {
127
- if (this.searchBuffer.length > 0) {
128
- this.searchBuffer = this.searchBuffer.slice(0, -1);
129
- this.selectedIndex = 0; // Reset selection
130
- this.selectedIndex = this.findNextSelectableIndex(-1, 1);
131
- this.render(false);
132
- }
133
- return;
134
- }
135
- // Typing
136
- if (char.length === 1 && !/^[\x00-\x1F]/.test(char)) {
137
- this.searchBuffer += char;
138
- this.selectedIndex = 0; // Reset selection
139
- this.selectedIndex = this.findNextSelectableIndex(-1, 1);
140
- this.render(false);
141
- }
142
- }
143
- handleMouse(event) {
144
- const choices = this.getFilteredChoices();
145
- if (choices.length === 0) return;
146
- if (event.action === 'scroll') {
147
- if (event.scroll === 'up') {
148
- this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);
149
- this.render(false);
150
- } else if (event.scroll === 'down') {
151
- this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);
152
- this.render(false);
153
- }
154
- }
155
- }
156
- constructor(options){
157
- super(options), _define_property(this, "selectedIndex", 0), _define_property(this, "searchBuffer", ''), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 7);
158
- // Find first non-separator index
159
- this.selectedIndex = this.findNextSelectableIndex(-1, 1);
160
- }
161
- };
162
-
163
- //# sourceMappingURL=select.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/select.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SelectOptions, MouseEvent, SelectChoice, Separator } from '../types';\n\n// --- Implementation: Select Prompt ---\nexport class SelectPrompt<V, O extends SelectOptions<V> = SelectOptions<V>> extends Prompt<any, O> {\n protected selectedIndex: number = 0;\n protected searchBuffer: string = '';\n protected scrollTop: number = 0;\n protected readonly pageSize: number = 7;\n\n constructor(options: O) {\n super(options);\n // Find first non-separator index\n this.selectedIndex = this.findNextSelectableIndex(-1, 1);\n }\n\n protected isSeparator(item: SelectChoice<V> | Separator): item is Separator {\n return item && 'separator' in item;\n }\n\n protected findNextSelectableIndex(currentIndex: number, direction: 1 | -1): number {\n let nextIndex = currentIndex + direction;\n const choices = this.getFilteredChoices();\n\n // Loop around logic\n if (nextIndex < 0) nextIndex = choices.length - 1;\n if (nextIndex >= choices.length) nextIndex = 0;\n\n if (choices.length === 0) return 0;\n\n // Safety check to prevent infinite loop if all are separators (shouldn't happen in practice)\n let count = 0;\n while (this.isSeparator(choices[nextIndex]) && count < choices.length) {\n nextIndex += direction;\n if (nextIndex < 0) nextIndex = choices.length - 1;\n if (nextIndex >= choices.length) nextIndex = 0;\n count++;\n }\n return nextIndex;\n }\n\n protected getFilteredChoices(): (SelectChoice<V> | Separator)[] {\n if (!this.searchBuffer) return this.options.choices;\n return (this.options.choices as (SelectChoice<V> | Separator)[]).filter(c => {\n if (this.isSeparator(c)) return false; // Hide separators when searching\n return c.title.toLowerCase().includes(this.searchBuffer.toLowerCase());\n });\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 // Handle Filtering Edge Case: if list shrinks, scrollTop might be too high\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}(Filter: ${this.searchBuffer})${ANSI.RESET}` : '';\n // Note: We avoid ERASE_LINE here because renderFrame handles full redraw\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 // We can omit newline at the very end if we want, but usually it's better to be consistent.\n // renderFrame adds newline via truncate logic? No, it joins.\n // So if I want a line break, I must add it.\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'; // Separator between items\n\n if (this.isSeparator(choice)) {\n output += ` ${ANSI.DIM}${choice.text || symbols.line.repeat(8)}${ANSI.RESET}`;\n } else {\n if (actualIndex === this.selectedIndex) {\n output += `${theme.main}${symbols.pointer} ${choice.title}${ANSI.RESET}`;\n } else {\n output += ` ${choice.title}`;\n }\n }\n });\n }\n\n // No manual printing. Pass to renderFrame.\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n const choices = this.getFilteredChoices();\n\n if (char === '\\r' || char === '\\n') {\n if (choices.length === 0) {\n this.searchBuffer = '';\n this.selectedIndex = this.findNextSelectableIndex(-1, 1);\n this.render(false);\n return;\n }\n\n const choice = choices[this.selectedIndex];\n if (this.isSeparator(choice)) return;\n\n this.submit(choice.value);\n return;\n }\n\n if (this.isUp(char)) { // Up\n if (choices.length > 0) {\n this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);\n this.render(false);\n }\n return;\n }\n if (this.isDown(char)) { // Down\n if (choices.length > 0) {\n this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);\n this.render(false);\n }\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.searchBuffer.length > 0) {\n this.searchBuffer = this.searchBuffer.slice(0, -1);\n this.selectedIndex = 0; // Reset selection\n this.selectedIndex = this.findNextSelectableIndex(-1, 1);\n this.render(false);\n }\n return;\n }\n\n // Typing\n if (char.length === 1 && !/^[\\x00-\\x1F]/.test(char)) {\n this.searchBuffer += char;\n this.selectedIndex = 0; // Reset selection\n this.selectedIndex = this.findNextSelectableIndex(-1, 1);\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n const choices = this.getFilteredChoices();\n if (choices.length === 0) return;\n\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);\n this.render(false);\n }\n }\n }\n}\n"],"names":["SelectPrompt","Prompt","isSeparator","item","findNextSelectableIndex","currentIndex","direction","nextIndex","choices","getFilteredChoices","length","count","searchBuffer","options","filter","c","title","toLowerCase","includes","render","_firstRender","output","selectedIndex","scrollTop","pageSize","Math","max","searchStr","theme","muted","ANSI","RESET","success","BOLD","message","visibleChoices","slice","forEach","choice","index","actualIndex","DIM","text","symbols","line","repeat","main","pointer","renderFrame","handleInput","char","submit","value","isUp","isDown","test","handleMouse","event","action","scroll"],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SemVerPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SemVerPrompt;
9
- }
10
- });
11
- const _select = require("./select");
12
- let SemVerPrompt = class SemVerPrompt extends _select.SelectPrompt {
13
- static parseVersion(version) {
14
- // Simple SemVer regex: x.y.z
15
- const match = version.match(/^(\d+)\.(\d+)\.(\d+)$/);
16
- return match ? match[0] : null;
17
- }
18
- constructor(options){
19
- const { currentVersion, ...baseOptions } = options;
20
- const validVersion = SemVerPrompt.parseVersion(currentVersion) || '0.0.1';
21
- const [major, minor, patch] = validVersion.split('.').map(Number);
22
- const choices = [
23
- {
24
- title: `Patch (${validVersion} -> ${major}.${minor}.${patch + 1})`,
25
- value: `${major}.${minor}.${patch + 1}`
26
- },
27
- {
28
- title: `Minor (${validVersion} -> ${major}.${minor + 1}.0)`,
29
- value: `${major}.${minor + 1}.0`
30
- },
31
- {
32
- title: `Major (${validVersion} -> ${major + 1}.0.0)`,
33
- value: `${major + 1}.0.0`
34
- }
35
- ];
36
- super({
37
- ...baseOptions,
38
- choices
39
- });
40
- }
41
- };
42
-
43
- //# sourceMappingURL=semver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/semver.ts"],"sourcesContent":["import { SelectPrompt } from './select';\nimport { SemVerOptions, SelectChoice } from '../types';\n\nexport class SemVerPrompt extends SelectPrompt<string> {\n constructor(options: SemVerOptions) {\n const { currentVersion, ...baseOptions } = options;\n const validVersion = SemVerPrompt.parseVersion(currentVersion) || '0.0.1';\n const [major, minor, patch] = validVersion.split('.').map(Number);\n\n const choices: SelectChoice<string>[] = [\n {\n title: `Patch (${validVersion} -> ${major}.${minor}.${patch + 1})`,\n value: `${major}.${minor}.${patch + 1}`\n },\n {\n title: `Minor (${validVersion} -> ${major}.${minor + 1}.0)`,\n value: `${major}.${minor + 1}.0`\n },\n {\n title: `Major (${validVersion} -> ${major + 1}.0.0)`,\n value: `${major + 1}.0.0`\n }\n ];\n\n super({ ...baseOptions, choices });\n }\n\n private static parseVersion(version: string): string | null {\n // Simple SemVer regex: x.y.z\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)$/);\n return match ? match[0] : null;\n }\n}\n"],"names":["SemVerPrompt","SelectPrompt","parseVersion","version","match","options","currentVersion","baseOptions","validVersion","major","minor","patch","split","map","Number","choices","title","value"],"mappings":";;;;+BAGaA;;;eAAAA;;;wBAHgB;AAGtB,IAAA,AAAMA,eAAN,MAAMA,qBAAqBC,oBAAY;IAwB1C,OAAeC,aAAaC,OAAe,EAAiB;QACxD,6BAA6B;QAC7B,MAAMC,QAAQD,QAAQC,KAAK,CAAC;QAC5B,OAAOA,QAAQA,KAAK,CAAC,EAAE,GAAG;IAC9B;IA3BA,YAAYC,OAAsB,CAAE;QAChC,MAAM,EAAEC,cAAc,EAAE,GAAGC,aAAa,GAAGF;QAC3C,MAAMG,eAAeR,aAAaE,YAAY,CAACI,mBAAmB;QAClE,MAAM,CAACG,OAAOC,OAAOC,MAAM,GAAGH,aAAaI,KAAK,CAAC,KAAKC,GAAG,CAACC;QAE1D,MAAMC,UAAkC;YACpC;gBACIC,OAAO,CAAC,OAAO,EAAER,aAAa,IAAI,EAAEC,MAAM,CAAC,EAAEC,MAAM,CAAC,EAAEC,QAAQ,EAAE,CAAC,CAAC;gBAClEM,OAAO,GAAGR,MAAM,CAAC,EAAEC,MAAM,CAAC,EAAEC,QAAQ,GAAG;YAC3C;YACA;gBACIK,OAAO,CAAC,OAAO,EAAER,aAAa,IAAI,EAAEC,MAAM,CAAC,EAAEC,QAAQ,EAAE,GAAG,CAAC;gBAC3DO,OAAO,GAAGR,MAAM,CAAC,EAAEC,QAAQ,EAAE,EAAE,CAAC;YACpC;YACA;gBACIM,OAAO,CAAC,OAAO,EAAER,aAAa,IAAI,EAAEC,QAAQ,EAAE,KAAK,CAAC;gBACpDQ,OAAO,GAAGR,QAAQ,EAAE,IAAI,CAAC;YAC7B;SACH;QAED,KAAK,CAAC;YAAE,GAAGF,WAAW;YAAEQ;QAAQ;IACpC;AAOJ"}
@@ -1,133 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "ShortcutPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return ShortcutPrompt;
9
- }
10
- });
11
- const _base = require("../base");
12
- const _ansi = require("../ansi");
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 ShortcutPrompt = class ShortcutPrompt extends _base.Prompt {
28
- render(_firstRender) {
29
- let text = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
30
- if (this.currentKey) {
31
- const parts = [];
32
- if (this.currentKey.ctrl) parts.push(`${_ansi.ANSI.REVERSE} Ctrl ${_ansi.ANSI.RESET}`);
33
- if (this.currentKey.meta) parts.push(`${_ansi.ANSI.REVERSE} Alt ${_ansi.ANSI.RESET}`);
34
- if (this.currentKey.shift) parts.push(`${_ansi.ANSI.REVERSE} Shift ${_ansi.ANSI.RESET}`);
35
- if (this.currentKey.name) {
36
- parts.push(`${_ansi.ANSI.FG_CYAN}[${this.currentKey.name}]${_ansi.ANSI.RESET}`);
37
- }
38
- text += parts.join(' + ');
39
- text += ` ${_theme.theme.muted}(Press Enter to confirm)${_ansi.ANSI.RESET}`;
40
- } else {
41
- text += `${_theme.theme.muted}Press any key combination...${_ansi.ANSI.RESET}`;
42
- }
43
- this.renderFrame(text);
44
- }
45
- handleInput(char, buffer) {
46
- const raw = buffer.toString();
47
- // Enter to confirm
48
- if (char === '\r' || char === '\n') {
49
- if (this.currentKey) {
50
- this.submit(this.currentKey);
51
- }
52
- return;
53
- }
54
- // Parse the key
55
- const parsed = this.parseKey(char, raw);
56
- if (parsed) {
57
- this.currentKey = parsed;
58
- this.render(false);
59
- }
60
- }
61
- parseKey(char, raw) {
62
- let name = '';
63
- let ctrl = false;
64
- let meta = false;
65
- let shift = false;
66
- const code = raw.charCodeAt(0);
67
- // Control Keys (1-26, except Backspace, Tab, Enter, Esc)
68
- if (code >= 1 && code <= 26) {
69
- // Exclude special control codes
70
- if (char === '\t') {
71
- name = 'Tab';
72
- } else if (char === '\n' || char === '\r') {
73
- name = 'Enter';
74
- } else if (char === '\b') {
75
- name = 'Backspace';
76
- } else {
77
- ctrl = true;
78
- name = String.fromCharCode(code + 64); // 1 -> 'A'
79
- }
80
- } else if (code === 27) {
81
- if (raw.length === 1) {
82
- name = 'Escape';
83
- } else {
84
- // Sequence starting with ESC
85
- meta = true; // Assume Alt for ESC+Char
86
- if (raw.length === 2) {
87
- // Alt + Char
88
- name = raw[1].toUpperCase();
89
- // Check shift for Alt+Shift+Char logic?
90
- if (raw[1] >= 'A' && raw[1] <= 'Z') shift = true;
91
- } else {
92
- // CSI sequences
93
- meta = false; // Usually these are navigation
94
- if (raw === '\u001b[A') name = 'Up';
95
- else if (raw === '\u001b[B') name = 'Down';
96
- else if (raw === '\u001b[C') name = 'Right';
97
- else if (raw === '\u001b[D') name = 'Left';
98
- else if (raw === '\u001b[H') name = 'Home';
99
- else if (raw === '\u001b[F') name = 'End';
100
- else if (raw === '\u001b[3~') name = 'Delete';
101
- else if (raw === '\u001b[Z') {
102
- name = 'Tab';
103
- shift = true;
104
- } else {
105
- name = 'Unknown';
106
- }
107
- }
108
- }
109
- } else if (code === 127) {
110
- name = 'Backspace';
111
- } else {
112
- // Regular char
113
- name = char.toUpperCase();
114
- if (char >= 'A' && char <= 'Z') shift = true;
115
- if (char === ' ') name = 'Space';
116
- // Special Symbols map?
117
- // Keep it simple for now.
118
- }
119
- return {
120
- name,
121
- ctrl,
122
- shift,
123
- meta,
124
- sequence: raw
125
- };
126
- }
127
- constructor(options){
128
- super(options), _define_property(this, "currentKey", void 0);
129
- this.currentKey = options.initial;
130
- }
131
- };
132
-
133
- //# sourceMappingURL=shortcut.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/shortcut.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { ShortcutOptions, ShortcutResult } from '../types';\nimport { ANSI } from '../ansi';\nimport { theme } from '../theme';\n\nexport class ShortcutPrompt extends Prompt<ShortcutResult, ShortcutOptions> {\n private currentKey?: ShortcutResult;\n\n constructor(options: ShortcutOptions) {\n super(options);\n this.currentKey = options.initial;\n }\n\n protected render(_firstRender: boolean) {\n let text = `${theme.title}${this.options.message}${ANSI.RESET} `;\n\n if (this.currentKey) {\n const parts: string[] = [];\n if (this.currentKey.ctrl) parts.push(`${ANSI.REVERSE} Ctrl ${ANSI.RESET}`);\n if (this.currentKey.meta) parts.push(`${ANSI.REVERSE} Alt ${ANSI.RESET}`);\n if (this.currentKey.shift) parts.push(`${ANSI.REVERSE} Shift ${ANSI.RESET}`);\n\n if (this.currentKey.name) {\n parts.push(`${ANSI.FG_CYAN}[${this.currentKey.name}]${ANSI.RESET}`);\n }\n\n text += parts.join(' + ');\n text += ` ${theme.muted}(Press Enter to confirm)${ANSI.RESET}`;\n } else {\n text += `${theme.muted}Press any key combination...${ANSI.RESET}`;\n }\n\n this.renderFrame(text);\n }\n\n protected handleInput(char: string, buffer: Buffer) {\n const raw = buffer.toString();\n\n // Enter to confirm\n if (char === '\\r' || char === '\\n') {\n if (this.currentKey) {\n this.submit(this.currentKey);\n }\n return;\n }\n\n // Parse the key\n const parsed = this.parseKey(char, raw);\n if (parsed) {\n this.currentKey = parsed;\n this.render(false);\n }\n }\n\n private parseKey(char: string, raw: string): ShortcutResult | null {\n let name = '';\n let ctrl = false;\n let meta = false;\n let shift = false;\n\n const code = raw.charCodeAt(0);\n\n // Control Keys (1-26, except Backspace, Tab, Enter, Esc)\n if (code >= 1 && code <= 26) {\n // Exclude special control codes\n if (char === '\\t') { // Ctrl+I\n name = 'Tab';\n } else if (char === '\\n' || char === '\\r') { // Ctrl+J / Ctrl+M\n name = 'Enter';\n } else if (char === '\\b') { // Ctrl+H\n name = 'Backspace';\n } else {\n ctrl = true;\n name = String.fromCharCode(code + 64); // 1 -> 'A'\n }\n } else if (code === 27) { // Escape\n if (raw.length === 1) {\n name = 'Escape';\n } else {\n // Sequence starting with ESC\n meta = true; // Assume Alt for ESC+Char\n if (raw.length === 2) {\n // Alt + Char\n name = raw[1].toUpperCase();\n // Check shift for Alt+Shift+Char logic?\n if (raw[1] >= 'A' && raw[1] <= 'Z') shift = true;\n } else {\n // CSI sequences\n meta = false; // Usually these are navigation\n if (raw === '\\u001b[A') name = 'Up';\n else if (raw === '\\u001b[B') name = 'Down';\n else if (raw === '\\u001b[C') name = 'Right';\n else if (raw === '\\u001b[D') name = 'Left';\n else if (raw === '\\u001b[H') name = 'Home';\n else if (raw === '\\u001b[F') name = 'End';\n else if (raw === '\\u001b[3~') name = 'Delete';\n else if (raw === '\\u001b[Z') { name = 'Tab'; shift = true; } // Shift+Tab\n else {\n name = 'Unknown';\n }\n }\n }\n } else if (code === 127) {\n name = 'Backspace';\n } else {\n // Regular char\n name = char.toUpperCase();\n if (char >= 'A' && char <= 'Z') shift = true;\n\n if (char === ' ') name = 'Space';\n\n // Special Symbols map? \n // Keep it simple for now.\n }\n\n return {\n name,\n ctrl,\n shift,\n meta,\n sequence: raw\n };\n }\n}\n"],"names":["ShortcutPrompt","Prompt","render","_firstRender","text","theme","title","options","message","ANSI","RESET","currentKey","parts","ctrl","push","REVERSE","meta","shift","name","FG_CYAN","join","muted","renderFrame","handleInput","char","buffer","raw","toString","submit","parsed","parseKey","code","charCodeAt","String","fromCharCode","length","toUpperCase","sequence","initial"],"mappings":";;;;+BAKaA;;;eAAAA;;;sBALU;sBAEF;uBACC;;;;;;;;;;;;;;AAEf,IAAA,AAAMA,iBAAN,MAAMA,uBAAuBC,YAAM;IAQ5BC,OAAOC,YAAqB,EAAE;QACpC,IAAIC,OAAO,GAAGC,YAAK,CAACC,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGC,UAAI,CAACC,KAAK,CAAC,CAAC,CAAC;QAEhE,IAAI,IAAI,CAACC,UAAU,EAAE;YACjB,MAAMC,QAAkB,EAAE;YAC1B,IAAI,IAAI,CAACD,UAAU,CAACE,IAAI,EAAED,MAAME,IAAI,CAAC,GAAGL,UAAI,CAACM,OAAO,CAAC,MAAM,EAAEN,UAAI,CAACC,KAAK,EAAE;YACzE,IAAI,IAAI,CAACC,UAAU,CAACK,IAAI,EAAEJ,MAAME,IAAI,CAAC,GAAGL,UAAI,CAACM,OAAO,CAAC,KAAK,EAAEN,UAAI,CAACC,KAAK,EAAE;YACxE,IAAI,IAAI,CAACC,UAAU,CAACM,KAAK,EAAEL,MAAME,IAAI,CAAC,GAAGL,UAAI,CAACM,OAAO,CAAC,OAAO,EAAEN,UAAI,CAACC,KAAK,EAAE;YAE3E,IAAI,IAAI,CAACC,UAAU,CAACO,IAAI,EAAE;gBACtBN,MAAME,IAAI,CAAC,GAAGL,UAAI,CAACU,OAAO,CAAC,CAAC,EAAE,IAAI,CAACR,UAAU,CAACO,IAAI,CAAC,CAAC,EAAET,UAAI,CAACC,KAAK,EAAE;YACtE;YAEAN,QAAQQ,MAAMQ,IAAI,CAAC;YACnBhB,QAAQ,CAAC,CAAC,EAAEC,YAAK,CAACgB,KAAK,CAAC,wBAAwB,EAAEZ,UAAI,CAACC,KAAK,EAAE;QAClE,OAAO;YACHN,QAAQ,GAAGC,YAAK,CAACgB,KAAK,CAAC,4BAA4B,EAAEZ,UAAI,CAACC,KAAK,EAAE;QACrE;QAEA,IAAI,CAACY,WAAW,CAAClB;IACrB;IAEUmB,YAAYC,IAAY,EAAEC,MAAc,EAAE;QAChD,MAAMC,MAAMD,OAAOE,QAAQ;QAE3B,mBAAmB;QACnB,IAAIH,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,IAAI,CAACb,UAAU,EAAE;gBACjB,IAAI,CAACiB,MAAM,CAAC,IAAI,CAACjB,UAAU;YAC/B;YACA;QACJ;QAEA,gBAAgB;QAChB,MAAMkB,SAAS,IAAI,CAACC,QAAQ,CAACN,MAAME;QACnC,IAAIG,QAAQ;YACR,IAAI,CAAClB,UAAU,GAAGkB;YAClB,IAAI,CAAC3B,MAAM,CAAC;QAChB;IACJ;IAEQ4B,SAASN,IAAY,EAAEE,GAAW,EAAyB;QAC/D,IAAIR,OAAO;QACX,IAAIL,OAAO;QACX,IAAIG,OAAO;QACX,IAAIC,QAAQ;QAEZ,MAAMc,OAAOL,IAAIM,UAAU,CAAC;QAE5B,yDAAyD;QACzD,IAAID,QAAQ,KAAKA,QAAQ,IAAI;YACzB,gCAAgC;YAChC,IAAIP,SAAS,MAAM;gBACfN,OAAO;YACX,OAAO,IAAIM,SAAS,QAAQA,SAAS,MAAM;gBACvCN,OAAO;YACX,OAAO,IAAIM,SAAS,MAAM;gBACtBN,OAAO;YACX,OAAO;gBACHL,OAAO;gBACPK,OAAOe,OAAOC,YAAY,CAACH,OAAO,KAAK,WAAW;YACtD;QACJ,OAAO,IAAIA,SAAS,IAAI;YACpB,IAAIL,IAAIS,MAAM,KAAK,GAAG;gBAClBjB,OAAO;YACX,OAAO;gBACH,6BAA6B;gBAC7BF,OAAO,MAAM,0BAA0B;gBACvC,IAAIU,IAAIS,MAAM,KAAK,GAAG;oBAClB,aAAa;oBACbjB,OAAOQ,GAAG,CAAC,EAAE,CAACU,WAAW;oBACzB,wCAAwC;oBACxC,IAAIV,GAAG,CAAC,EAAE,IAAI,OAAOA,GAAG,CAAC,EAAE,IAAI,KAAKT,QAAQ;gBAChD,OAAO;oBACH,gBAAgB;oBAChBD,OAAO,OAAO,+BAA+B;oBAC7C,IAAIU,QAAQ,YAAYR,OAAO;yBAC1B,IAAIQ,QAAQ,YAAYR,OAAO;yBAC/B,IAAIQ,QAAQ,YAAYR,OAAO;yBAC/B,IAAIQ,QAAQ,YAAYR,OAAO;yBAC/B,IAAIQ,QAAQ,YAAYR,OAAO;yBAC/B,IAAIQ,QAAQ,YAAYR,OAAO;yBAC/B,IAAIQ,QAAQ,aAAaR,OAAO;yBAChC,IAAIQ,QAAQ,YAAY;wBAAER,OAAO;wBAAOD,QAAQ;oBAAM,OACtD;wBACDC,OAAO;oBACX;gBACJ;YACJ;QACJ,OAAO,IAAIa,SAAS,KAAK;YACrBb,OAAO;QACX,OAAO;YACH,eAAe;YACfA,OAAOM,KAAKY,WAAW;YACvB,IAAIZ,QAAQ,OAAOA,QAAQ,KAAKP,QAAQ;YAExC,IAAIO,SAAS,KAAKN,OAAO;QAEzB,wBAAwB;QACxB,0BAA0B;QAC9B;QAEA,OAAO;YACHA;YACAL;YACAI;YACAD;YACAqB,UAAUX;QACd;IACJ;IAlHA,YAAYnB,OAAwB,CAAE;QAClC,KAAK,CAACA,UAHV,uBAAQI,cAAR,KAAA;QAII,IAAI,CAACA,UAAU,GAAGJ,QAAQ+B,OAAO;IACrC;AAgHJ"}
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SliderPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SliderPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _symbols = require("../symbols");
15
- let SliderPrompt = class SliderPrompt extends _base.Prompt {
16
- render(_firstRender) {
17
- const width = 20;
18
- const range = this.options.max - this.options.min;
19
- const ratio = (this.value - this.options.min) / range;
20
- const pos = Math.round(ratio * width);
21
- let bar = '';
22
- for(let i = 0; i <= width; i++){
23
- if (i === pos) bar += `${_theme.theme.main}O${_ansi.ANSI.RESET}`;
24
- else bar += _symbols.symbols.line;
25
- }
26
- const unit = this.options.unit || '';
27
- const output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} [${bar}] ${this.value}${unit}`;
28
- this.renderFrame(output);
29
- }
30
- handleInput(char) {
31
- if (char === '\r' || char === '\n') {
32
- this.submit(this.value);
33
- return;
34
- }
35
- const step = this.options.step || 1;
36
- if (this.isLeft(char)) {
37
- this.value = Math.max(this.options.min, this.value - step);
38
- // Round to avoid float errors
39
- this.value = Math.round(this.value * 10000) / 10000;
40
- this.render(false);
41
- }
42
- if (this.isRight(char)) {
43
- this.value = Math.min(this.options.max, this.value + step);
44
- // Round to avoid float errors
45
- this.value = Math.round(this.value * 10000) / 10000;
46
- this.render(false);
47
- }
48
- }
49
- handleMouse(event) {
50
- if (event.action === 'scroll') {
51
- const step = this.options.step || 1;
52
- if (event.scroll === 'up') {
53
- this.value = Math.min(this.options.max, this.value + step);
54
- }
55
- if (event.scroll === 'down') {
56
- this.value = Math.max(this.options.min, this.value - step);
57
- }
58
- // Round to avoid float errors
59
- this.value = Math.round(this.value * 10000) / 10000;
60
- this.render(false);
61
- }
62
- }
63
- constructor(options){
64
- super(options);
65
- this.value = options.initial ?? options.min;
66
- }
67
- };
68
-
69
- //# sourceMappingURL=slider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/slider.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SliderOptions, MouseEvent } from '../types';\n\n// --- Implementation: Slider Prompt ---\nexport class SliderPrompt extends Prompt<number, SliderOptions> {\n constructor(options: SliderOptions) {\n super(options);\n this.value = options.initial ?? options.min;\n }\n\n protected render(_firstRender: boolean) {\n const width = 20;\n const range = this.options.max - this.options.min;\n const ratio = (this.value - this.options.min) / range;\n const pos = Math.round(ratio * width);\n\n let bar = '';\n for (let i = 0; i <= width; i++) {\n if (i === pos) bar += `${theme.main}O${ANSI.RESET}`;\n else bar += symbols.line;\n }\n\n const unit = this.options.unit || '';\n const output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} [${bar}] ${this.value}${unit}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n this.submit(this.value);\n return;\n }\n\n const step = this.options.step || 1;\n\n if (this.isLeft(char)) { // Left\n this.value = Math.max(this.options.min, this.value - step);\n // Round to avoid float errors\n this.value = Math.round(this.value * 10000) / 10000;\n this.render(false);\n }\n if (this.isRight(char)) { // Right\n this.value = Math.min(this.options.max, this.value + step);\n // Round to avoid float errors\n this.value = Math.round(this.value * 10000) / 10000;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n const step = this.options.step || 1;\n\n if (event.scroll === 'up') { // Scroll Up -> Increase\n this.value = Math.min(this.options.max, this.value + step);\n }\n if (event.scroll === 'down') { // Scroll Down -> Decrease\n this.value = Math.max(this.options.min, this.value - step);\n }\n\n // Round to avoid float errors\n this.value = Math.round(this.value * 10000) / 10000;\n this.render(false);\n }\n }\n}\n"],"names":["SliderPrompt","Prompt","render","_firstRender","width","range","options","max","min","ratio","value","pos","Math","round","bar","i","theme","main","ANSI","RESET","symbols","line","unit","output","success","BOLD","title","message","renderFrame","handleInput","char","submit","step","isLeft","isRight","handleMouse","event","action","scroll","initial"],"mappings":"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"}
@@ -1,117 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SlotPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SlotPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _symbols = require("../symbols");
15
- const _utils = require("../utils");
16
- function _define_property(obj, key, value) {
17
- if (key in obj) {
18
- Object.defineProperty(obj, key, {
19
- value: value,
20
- enumerable: true,
21
- configurable: true,
22
- writable: true
23
- });
24
- } else {
25
- obj[key] = value;
26
- }
27
- return obj;
28
- }
29
- let SlotPrompt = class SlotPrompt extends _base.Prompt {
30
- spin() {
31
- if (!this.isSpinning) return;
32
- this.selectedIndex = (this.selectedIndex + 1) % this.options.choices.length;
33
- this.render(false);
34
- if (this.isStopping) {
35
- // Deceleration physics
36
- this.spinSpeed = Math.floor(this.spinSpeed * 1.1);
37
- if (this.spinSpeed > 400) {
38
- this.isSpinning = false;
39
- this.finish();
40
- return;
41
- }
42
- }
43
- this.spinTimer = setTimeout(()=>this.spin(), this.spinSpeed);
44
- }
45
- finish() {
46
- if (this.spinTimer) clearTimeout(this.spinTimer);
47
- this.submit(this.options.choices[this.selectedIndex]);
48
- }
49
- handleInput(char, _key) {
50
- if (char === ' ' || char === '\r' || char === '\n') {
51
- if (!this.isSpinning) {
52
- // Start spinning
53
- this.isSpinning = true;
54
- this.isStopping = false;
55
- this.spinSpeed = 50; // Reset speed
56
- this.spin();
57
- } else if (!this.isStopping) {
58
- // Initiate stop sequence
59
- this.isStopping = true;
60
- }
61
- }
62
- }
63
- render(_firstRender) {
64
- let output = '';
65
- // Header
66
- output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
67
- // Calculate dynamic width
68
- const maxLen = Math.max(...this.options.choices.map((c)=>(0, _utils.stringWidth)(c)));
69
- const boxWidth = Math.max(20, maxLen + 6);
70
- const border = _symbols.symbols.line.repeat(boxWidth - 2);
71
- output += `┌${border}┐\n`;
72
- const centerRow = Math.floor(this.rows / 2);
73
- for(let i = 0; i < this.rows; i++){
74
- const offset = i - centerRow;
75
- let index = (this.selectedIndex + offset) % this.options.choices.length;
76
- if (index < 0) index += this.options.choices.length;
77
- const item = this.options.choices[index];
78
- const content = this.truncate(item, boxWidth - 4);
79
- const contentWidth = (0, _utils.stringWidth)(content);
80
- const padding = boxWidth - 4 - contentWidth;
81
- const leftPad = ' '.repeat(Math.floor(padding / 2));
82
- const rightPad = ' '.repeat(Math.ceil(padding / 2));
83
- const lineContent = `${leftPad}${content}${rightPad}`;
84
- if (i === centerRow) {
85
- // Highlight
86
- output += `│ ${_theme.theme.main}${_ansi.ANSI.REVERSE} ${lineContent} ${_ansi.ANSI.RESET} │ ${_theme.theme.main}◄${_ansi.ANSI.RESET}\n`;
87
- } else {
88
- output += `│ ${lineContent} │\n`;
89
- }
90
- }
91
- output += `└${border}┘`;
92
- // Instructions
93
- if (!this.isSpinning) {
94
- output += `\n${_theme.theme.muted}(Press Space/Enter to Spin)${_ansi.ANSI.RESET}`;
95
- } else if (this.isStopping) {
96
- output += `\n${_theme.theme.muted}(Stopping...)${_ansi.ANSI.RESET}`;
97
- } else {
98
- output += `\n${_theme.theme.muted}(Press Space/Enter to Stop)${_ansi.ANSI.RESET}`;
99
- }
100
- this.renderFrame(output);
101
- }
102
- // Override cleanup to ensure timer is cleared if user Ctrl+C
103
- cleanup() {
104
- if (this.spinTimer) clearTimeout(this.spinTimer);
105
- super.cleanup();
106
- }
107
- constructor(options){
108
- super(options), _define_property(this, "selectedIndex", void 0), _define_property(this, "isSpinning", false), _define_property(this, "isStopping", false), _define_property(this, "spinSpeed", 50) // Initial speed (ms)
109
- , _define_property(this, "spinTimer", void 0), _define_property(this, "rows", void 0);
110
- this.rows = options.rows || 3;
111
- // Ensure rows is odd to have a center
112
- if (this.rows % 2 === 0) this.rows++;
113
- this.selectedIndex = options.initial || 0;
114
- }
115
- };
116
-
117
- //# sourceMappingURL=slot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/slot.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SlotOptions } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class SlotPrompt extends Prompt<string, SlotOptions> {\n private selectedIndex: number;\n private isSpinning: boolean = false;\n private isStopping: boolean = false;\n private spinSpeed: number = 50; // Initial speed (ms)\n private spinTimer?: NodeJS.Timeout;\n private rows: number;\n\n constructor(options: SlotOptions) {\n super(options);\n this.rows = options.rows || 3;\n // Ensure rows is odd to have a center\n if (this.rows % 2 === 0) this.rows++;\n this.selectedIndex = options.initial || 0;\n }\n\n private spin() {\n if (!this.isSpinning) return;\n\n this.selectedIndex = (this.selectedIndex + 1) % this.options.choices.length;\n this.render(false);\n\n if (this.isStopping) {\n // Deceleration physics\n this.spinSpeed = Math.floor(this.spinSpeed * 1.1);\n if (this.spinSpeed > 400) {\n this.isSpinning = false;\n this.finish();\n return;\n }\n }\n\n this.spinTimer = setTimeout(() => this.spin(), this.spinSpeed);\n }\n\n private finish() {\n if (this.spinTimer) clearTimeout(this.spinTimer);\n this.submit(this.options.choices[this.selectedIndex]);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (char === ' ' || char === '\\r' || char === '\\n') {\n if (!this.isSpinning) {\n // Start spinning\n this.isSpinning = true;\n this.isStopping = false;\n this.spinSpeed = 50; // Reset speed\n this.spin();\n } else if (!this.isStopping) {\n // Initiate stop sequence\n this.isStopping = true;\n }\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 // Calculate dynamic width\n const maxLen = Math.max(...this.options.choices.map(c => stringWidth(c)));\n const boxWidth = Math.max(20, maxLen + 6);\n\n const border = symbols.line.repeat(boxWidth - 2);\n output += `┌${border}┐\\n`;\n\n const centerRow = Math.floor(this.rows / 2);\n\n for (let i = 0; i < this.rows; i++) {\n const offset = i - centerRow;\n let index = (this.selectedIndex + offset) % this.options.choices.length;\n if (index < 0) index += this.options.choices.length;\n\n const item = this.options.choices[index];\n const content = this.truncate(item, boxWidth - 4);\n const contentWidth = stringWidth(content);\n const padding = boxWidth - 4 - contentWidth;\n const leftPad = ' '.repeat(Math.floor(padding / 2));\n const rightPad = ' '.repeat(Math.ceil(padding / 2));\n\n const lineContent = `${leftPad}${content}${rightPad}`;\n\n if (i === centerRow) {\n // Highlight\n output += `│ ${theme.main}${ANSI.REVERSE} ${lineContent} ${ANSI.RESET} │ ${theme.main}◄${ANSI.RESET}\\n`;\n } else {\n output += `│ ${lineContent} │\\n`;\n }\n }\n\n output += `└${border}┘`;\n\n // Instructions\n if (!this.isSpinning) {\n output += `\\n${theme.muted}(Press Space/Enter to Spin)${ANSI.RESET}`;\n } else if (this.isStopping) {\n output += `\\n${theme.muted}(Stopping...)${ANSI.RESET}`;\n } else {\n output += `\\n${theme.muted}(Press Space/Enter to Stop)${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n // Override cleanup to ensure timer is cleared if user Ctrl+C\n protected cleanup() {\n if (this.spinTimer) clearTimeout(this.spinTimer);\n super.cleanup();\n }\n}\n"],"names":["SlotPrompt","Prompt","spin","isSpinning","selectedIndex","options","choices","length","render","isStopping","spinSpeed","Math","floor","finish","spinTimer","setTimeout","clearTimeout","submit","handleInput","char","_key","_firstRender","output","theme","success","ANSI","RESET","BOLD","title","message","maxLen","max","map","c","stringWidth","boxWidth","border","symbols","line","repeat","centerRow","rows","i","offset","index","item","content","truncate","contentWidth","padding","leftPad","rightPad","ceil","lineContent","main","REVERSE","muted","renderFrame","cleanup","initial"],"mappings":"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"}