mepcli 1.3.2 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/README.md +11 -2
  2. package/dist/{ansi.js → src/ansi.js} +17 -9
  3. package/dist/src/ansi.js.map +1 -0
  4. package/dist/{base.js → src/base.js} +82 -70
  5. package/dist/src/base.js.map +1 -0
  6. package/dist/{core.js → src/core.js} +266 -320
  7. package/dist/src/core.js.map +1 -0
  8. package/dist/src/data/countries.js +569 -0
  9. package/dist/src/data/countries.js.map +1 -0
  10. package/dist/src/data/licenses.js +480 -0
  11. package/dist/src/data/licenses.js.map +1 -0
  12. package/dist/{highlight.js → src/highlight.js} +77 -69
  13. package/dist/src/highlight.js.map +1 -0
  14. package/dist/src/index.js +66 -0
  15. package/dist/src/index.js.map +1 -0
  16. package/dist/{input.js → src/input.js} +47 -41
  17. package/dist/src/input.js.map +1 -0
  18. package/dist/src/pipeline.js +273 -0
  19. package/dist/src/pipeline.js.map +1 -0
  20. package/dist/{prompts → src/prompts}/autocomplete.js +58 -57
  21. package/dist/src/prompts/autocomplete.js.map +1 -0
  22. package/dist/{prompts → src/prompts}/box.js +86 -53
  23. package/dist/src/prompts/box.js.map +1 -0
  24. package/dist/{prompts → src/prompts}/breadcrumb-search.js +110 -98
  25. package/dist/src/prompts/breadcrumb-search.js.map +1 -0
  26. package/dist/{prompts → src/prompts}/breadcrumb.js +126 -121
  27. package/dist/src/prompts/breadcrumb.js.map +1 -0
  28. package/dist/{prompts → src/prompts}/byte.js +69 -52
  29. package/dist/src/prompts/byte.js.map +1 -0
  30. package/dist/{prompts → src/prompts}/calculator.js +79 -56
  31. package/dist/src/prompts/calculator.js.map +1 -0
  32. package/dist/{prompts → src/prompts}/calendar.js +167 -127
  33. package/dist/src/prompts/calendar.js.map +1 -0
  34. package/dist/{prompts → src/prompts}/checkbox.js +53 -49
  35. package/dist/src/prompts/checkbox.js.map +1 -0
  36. package/dist/{prompts → src/prompts}/code.js +88 -76
  37. package/dist/src/prompts/code.js.map +1 -0
  38. package/dist/{prompts → src/prompts}/color.js +68 -50
  39. package/dist/src/prompts/color.js.map +1 -0
  40. package/dist/{prompts → src/prompts}/confirm.js +22 -15
  41. package/dist/src/prompts/confirm.js.map +1 -0
  42. package/dist/{prompts → src/prompts}/connection-string.js +59 -36
  43. package/dist/src/prompts/connection-string.js.map +1 -0
  44. package/dist/{prompts → src/prompts}/cron.js +90 -59
  45. package/dist/src/prompts/cron.js.map +1 -0
  46. package/dist/src/prompts/curl-utils.js +71 -0
  47. package/dist/src/prompts/curl-utils.js.map +1 -0
  48. package/dist/{prompts → src/prompts}/curl.js +153 -132
  49. package/dist/src/prompts/curl.js.map +1 -0
  50. package/dist/{prompts → src/prompts}/data-inspector.js +96 -91
  51. package/dist/src/prompts/data-inspector.js.map +1 -0
  52. package/dist/{prompts → src/prompts}/date.js +64 -57
  53. package/dist/src/prompts/date.js.map +1 -0
  54. package/dist/{prompts → src/prompts}/dependency.js +84 -80
  55. package/dist/src/prompts/dependency.js.map +1 -0
  56. package/dist/{prompts → src/prompts}/dial.js +49 -35
  57. package/dist/src/prompts/dial.js.map +1 -0
  58. package/dist/src/prompts/diff.js +118 -0
  59. package/dist/src/prompts/diff.js.map +1 -0
  60. package/dist/{prompts → src/prompts}/draw.js +83 -80
  61. package/dist/src/prompts/draw.js.map +1 -0
  62. package/dist/src/prompts/editor.js +234 -0
  63. package/dist/src/prompts/editor.js.map +1 -0
  64. package/dist/{prompts → src/prompts}/emoji.js +80 -82
  65. package/dist/src/prompts/emoji.js.map +1 -0
  66. package/dist/{prompts → src/prompts}/exec.js +60 -46
  67. package/dist/src/prompts/exec.js.map +1 -0
  68. package/dist/src/prompts/file.js +217 -0
  69. package/dist/src/prompts/file.js.map +1 -0
  70. package/dist/{prompts → src/prompts}/form.js +63 -54
  71. package/dist/src/prompts/form.js.map +1 -0
  72. package/dist/{prompts → src/prompts}/fuzzy-multi-column.js +65 -53
  73. package/dist/src/prompts/fuzzy-multi-column.js.map +1 -0
  74. package/dist/{prompts → src/prompts}/fuzzy.js +66 -55
  75. package/dist/src/prompts/fuzzy.js.map +1 -0
  76. package/dist/src/prompts/gauge.js +137 -0
  77. package/dist/src/prompts/gauge.js.map +1 -0
  78. package/dist/{prompts → src/prompts}/grid.js +70 -57
  79. package/dist/src/prompts/grid.js.map +1 -0
  80. package/dist/{prompts → src/prompts}/heatmap.js +70 -64
  81. package/dist/src/prompts/heatmap.js.map +1 -0
  82. package/dist/{prompts → src/prompts}/ip.js +56 -36
  83. package/dist/src/prompts/ip.js.map +1 -0
  84. package/dist/{prompts → src/prompts}/kanban.js +63 -58
  85. package/dist/src/prompts/kanban.js.map +1 -0
  86. package/dist/src/prompts/keypress.js +54 -0
  87. package/dist/src/prompts/keypress.js.map +1 -0
  88. package/dist/src/prompts/license.js +144 -0
  89. package/dist/src/prompts/license.js.map +1 -0
  90. package/dist/{prompts → src/prompts}/list.js +46 -31
  91. package/dist/src/prompts/list.js.map +1 -0
  92. package/dist/{prompts → src/prompts}/map.js +93 -77
  93. package/dist/src/prompts/map.js.map +1 -0
  94. package/dist/{prompts → src/prompts}/match.js +91 -95
  95. package/dist/src/prompts/match.js.map +1 -0
  96. package/dist/{prompts → src/prompts}/miller.js +74 -67
  97. package/dist/src/prompts/miller.js.map +1 -0
  98. package/dist/{prompts → src/prompts}/multi-column-select.js +54 -44
  99. package/dist/src/prompts/multi-column-select.js.map +1 -0
  100. package/dist/{prompts → src/prompts}/multi-range.js +70 -52
  101. package/dist/src/prompts/multi-range.js.map +1 -0
  102. package/dist/{prompts → src/prompts}/multi-select.js +67 -58
  103. package/dist/src/prompts/multi-select.js.map +1 -0
  104. package/dist/{prompts → src/prompts}/number.js +51 -39
  105. package/dist/src/prompts/number.js.map +1 -0
  106. package/dist/{prompts → src/prompts}/otp.js +43 -27
  107. package/dist/src/prompts/otp.js.map +1 -0
  108. package/dist/{prompts → src/prompts}/pattern.js +74 -71
  109. package/dist/src/prompts/pattern.js.map +1 -0
  110. package/dist/{prompts → src/prompts}/phone.js +107 -118
  111. package/dist/src/prompts/phone.js.map +1 -0
  112. package/dist/src/prompts/quiz-select.js +114 -0
  113. package/dist/src/prompts/quiz-select.js.map +1 -0
  114. package/dist/src/prompts/quiz-text.js +98 -0
  115. package/dist/src/prompts/quiz-text.js.map +1 -0
  116. package/dist/{prompts → src/prompts}/range.js +85 -61
  117. package/dist/src/prompts/range.js.map +1 -0
  118. package/dist/{prompts → src/prompts}/rating.js +29 -24
  119. package/dist/src/prompts/rating.js.map +1 -0
  120. package/dist/{prompts → src/prompts}/regex.js +50 -36
  121. package/dist/src/prompts/regex.js.map +1 -0
  122. package/dist/{prompts → src/prompts}/region.js +62 -56
  123. package/dist/src/prompts/region.js.map +1 -0
  124. package/dist/{prompts → src/prompts}/schedule.js +82 -75
  125. package/dist/src/prompts/schedule.js.map +1 -0
  126. package/dist/{prompts → src/prompts}/scroll.js +61 -58
  127. package/dist/src/prompts/scroll.js.map +1 -0
  128. package/dist/src/prompts/seat.js +164 -0
  129. package/dist/src/prompts/seat.js.map +1 -0
  130. package/dist/{prompts → src/prompts}/select-range.js +58 -46
  131. package/dist/src/prompts/select-range.js.map +1 -0
  132. package/dist/{prompts → src/prompts}/select.js +65 -66
  133. package/dist/src/prompts/select.js.map +1 -0
  134. package/dist/{prompts → src/prompts}/semver.js +24 -13
  135. package/dist/src/prompts/semver.js.map +1 -0
  136. package/dist/src/prompts/shortcut.js +133 -0
  137. package/dist/src/prompts/shortcut.js.map +1 -0
  138. package/dist/{prompts → src/prompts}/slider.js +28 -23
  139. package/dist/src/prompts/slider.js.map +1 -0
  140. package/dist/src/prompts/slot.js +117 -0
  141. package/dist/src/prompts/slot.js.map +1 -0
  142. package/dist/{prompts → src/prompts}/snippet.js +82 -61
  143. package/dist/src/prompts/snippet.js.map +1 -0
  144. package/dist/{prompts → src/prompts}/sort-grid.js +64 -59
  145. package/dist/src/prompts/sort-grid.js.map +1 -0
  146. package/dist/{prompts → src/prompts}/sort.js +59 -49
  147. package/dist/src/prompts/sort.js.map +1 -0
  148. package/dist/src/prompts/spam.js +80 -0
  149. package/dist/src/prompts/spam.js.map +1 -0
  150. package/dist/{prompts → src/prompts}/spreadsheet.js +71 -70
  151. package/dist/src/prompts/spreadsheet.js.map +1 -0
  152. package/dist/{prompts → src/prompts}/table.js +52 -38
  153. package/dist/src/prompts/table.js.map +1 -0
  154. package/dist/{prompts → src/prompts}/text.js +74 -70
  155. package/dist/src/prompts/text.js.map +1 -0
  156. package/dist/{prompts → src/prompts}/time.js +105 -96
  157. package/dist/src/prompts/time.js.map +1 -0
  158. package/dist/src/prompts/toggle.js +53 -0
  159. package/dist/src/prompts/toggle.js.map +1 -0
  160. package/dist/{prompts → src/prompts}/transfer.js +71 -67
  161. package/dist/src/prompts/transfer.js.map +1 -0
  162. package/dist/{prompts → src/prompts}/tree-select.js +83 -86
  163. package/dist/src/prompts/tree-select.js.map +1 -0
  164. package/dist/{prompts → src/prompts}/tree.js +69 -67
  165. package/dist/src/prompts/tree.js.map +1 -0
  166. package/dist/src/prompts/wait.js +79 -0
  167. package/dist/src/prompts/wait.js.map +1 -0
  168. package/dist/src/spinner.js +105 -0
  169. package/dist/src/spinner.js.map +1 -0
  170. package/dist/{symbols.js → src/symbols.js} +32 -7
  171. package/dist/src/symbols.js.map +1 -0
  172. package/dist/{tasks.js → src/tasks.js} +104 -79
  173. package/dist/src/tasks.js.map +1 -0
  174. package/dist/src/theme.js +29 -0
  175. package/dist/src/theme.js.map +1 -0
  176. package/dist/src/types.js +8 -0
  177. package/dist/src/types.js.map +1 -0
  178. package/dist/{utils.js → src/utils.js} +196 -152
  179. package/dist/src/utils.js.map +1 -0
  180. package/package.json +16 -13
  181. package/dist/ansi.d.ts +0 -36
  182. package/dist/base.d.ts +0 -60
  183. package/dist/core.d.ts +0 -1072
  184. package/dist/data/countries.d.ts +0 -2
  185. package/dist/data/countries.js +0 -105
  186. package/dist/data/licenses.d.ts +0 -2
  187. package/dist/data/licenses.js +0 -109
  188. package/dist/highlight.d.ts +0 -7
  189. package/dist/index.d.ts +0 -48
  190. package/dist/index.js +0 -64
  191. package/dist/input.d.ts +0 -14
  192. package/dist/pipeline.d.ts +0 -39
  193. package/dist/pipeline.js +0 -54
  194. package/dist/prompts/autocomplete.d.ts +0 -22
  195. package/dist/prompts/box.d.ts +0 -21
  196. package/dist/prompts/breadcrumb-search.d.ts +0 -14
  197. package/dist/prompts/breadcrumb.d.ts +0 -32
  198. package/dist/prompts/byte.d.ts +0 -13
  199. package/dist/prompts/calculator.d.ts +0 -17
  200. package/dist/prompts/calendar.d.ts +0 -33
  201. package/dist/prompts/checkbox.d.ts +0 -13
  202. package/dist/prompts/code.d.ts +0 -19
  203. package/dist/prompts/color.d.ts +0 -14
  204. package/dist/prompts/confirm.d.ts +0 -8
  205. package/dist/prompts/connection-string.d.ts +0 -18
  206. package/dist/prompts/cron.d.ts +0 -13
  207. package/dist/prompts/curl-utils.d.ts +0 -25
  208. package/dist/prompts/curl-utils.js +0 -41
  209. package/dist/prompts/curl.d.ts +0 -41
  210. package/dist/prompts/data-inspector.d.ts +0 -22
  211. package/dist/prompts/date.d.ts +0 -12
  212. package/dist/prompts/dependency.d.ts +0 -16
  213. package/dist/prompts/dial.d.ts +0 -10
  214. package/dist/prompts/diff.d.ts +0 -10
  215. package/dist/prompts/diff.js +0 -101
  216. package/dist/prompts/draw.d.ts +0 -20
  217. package/dist/prompts/editor.d.ts +0 -14
  218. package/dist/prompts/editor.js +0 -203
  219. package/dist/prompts/emoji.d.ts +0 -18
  220. package/dist/prompts/exec.d.ts +0 -17
  221. package/dist/prompts/file.d.ts +0 -21
  222. package/dist/prompts/file.js +0 -210
  223. package/dist/prompts/form.d.ts +0 -18
  224. package/dist/prompts/fuzzy-multi-column.d.ts +0 -12
  225. package/dist/prompts/fuzzy.d.ts +0 -12
  226. package/dist/prompts/gauge.d.ts +0 -21
  227. package/dist/prompts/gauge.js +0 -130
  228. package/dist/prompts/grid.d.ts +0 -14
  229. package/dist/prompts/heatmap.d.ts +0 -13
  230. package/dist/prompts/ip.d.ts +0 -11
  231. package/dist/prompts/kanban.d.ts +0 -17
  232. package/dist/prompts/keypress.d.ts +0 -7
  233. package/dist/prompts/keypress.js +0 -55
  234. package/dist/prompts/license.d.ts +0 -9
  235. package/dist/prompts/license.js +0 -105
  236. package/dist/prompts/list.d.ts +0 -9
  237. package/dist/prompts/map.d.ts +0 -17
  238. package/dist/prompts/match.d.ts +0 -19
  239. package/dist/prompts/miller.d.ts +0 -15
  240. package/dist/prompts/multi-column-select.d.ts +0 -10
  241. package/dist/prompts/multi-range.d.ts +0 -9
  242. package/dist/prompts/multi-select.d.ts +0 -15
  243. package/dist/prompts/number.d.ts +0 -11
  244. package/dist/prompts/otp.d.ts +0 -10
  245. package/dist/prompts/pattern.d.ts +0 -22
  246. package/dist/prompts/phone.d.ts +0 -41
  247. package/dist/prompts/quiz-select.d.ts +0 -10
  248. package/dist/prompts/quiz-select.js +0 -104
  249. package/dist/prompts/quiz-text.d.ts +0 -11
  250. package/dist/prompts/quiz-text.js +0 -82
  251. package/dist/prompts/range.d.ts +0 -9
  252. package/dist/prompts/rating.d.ts +0 -8
  253. package/dist/prompts/regex.d.ts +0 -13
  254. package/dist/prompts/region.d.ts +0 -11
  255. package/dist/prompts/schedule.d.ts +0 -20
  256. package/dist/prompts/scroll.d.ts +0 -13
  257. package/dist/prompts/seat.d.ts +0 -17
  258. package/dist/prompts/seat.js +0 -165
  259. package/dist/prompts/select-range.d.ts +0 -8
  260. package/dist/prompts/select.d.ts +0 -15
  261. package/dist/prompts/semver.d.ts +0 -6
  262. package/dist/prompts/shortcut.d.ts +0 -9
  263. package/dist/prompts/shortcut.js +0 -135
  264. package/dist/prompts/slider.d.ts +0 -8
  265. package/dist/prompts/slot.d.ts +0 -16
  266. package/dist/prompts/slot.js +0 -107
  267. package/dist/prompts/snippet.d.ts +0 -19
  268. package/dist/prompts/sort-grid.d.ts +0 -16
  269. package/dist/prompts/sort.d.ts +0 -14
  270. package/dist/prompts/spam.d.ts +0 -17
  271. package/dist/prompts/spam.js +0 -62
  272. package/dist/prompts/spreadsheet.d.ts +0 -21
  273. package/dist/prompts/table.d.ts +0 -14
  274. package/dist/prompts/text.d.ts +0 -17
  275. package/dist/prompts/time.d.ts +0 -12
  276. package/dist/prompts/toggle.d.ts +0 -8
  277. package/dist/prompts/toggle.js +0 -47
  278. package/dist/prompts/transfer.d.ts +0 -18
  279. package/dist/prompts/tree-select.d.ts +0 -31
  280. package/dist/prompts/tree.d.ts +0 -20
  281. package/dist/prompts/wait.d.ts +0 -18
  282. package/dist/prompts/wait.js +0 -62
  283. package/dist/spinner.d.ts +0 -33
  284. package/dist/spinner.js +0 -89
  285. package/dist/symbols.d.ts +0 -33
  286. package/dist/tasks.d.ts +0 -57
  287. package/dist/theme.d.ts +0 -2
  288. package/dist/theme.js +0 -20
  289. package/dist/types.d.ts +0 -503
  290. package/dist/types.js +0 -5
  291. package/dist/utils.d.ts +0 -81
@@ -1,52 +1,55 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelectPrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- const symbols_1 = require("../symbols");
8
- // --- Implementation: Select Prompt ---
9
- class SelectPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.selectedIndex = 0;
13
- this.searchBuffer = '';
14
- this.scrollTop = 0;
15
- this.pageSize = 7;
16
- // Find first non-separator index
17
- this.selectedIndex = this.findNextSelectableIndex(-1, 1);
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;
18
25
  }
26
+ return obj;
27
+ }
28
+ let SelectPrompt = class SelectPrompt extends _base.Prompt {
19
29
  isSeparator(item) {
20
- return item && item.separator === true;
30
+ return item && 'separator' in item;
21
31
  }
22
32
  findNextSelectableIndex(currentIndex, direction) {
23
33
  let nextIndex = currentIndex + direction;
24
34
  const choices = this.getFilteredChoices();
25
35
  // Loop around logic
26
- if (nextIndex < 0)
27
- nextIndex = choices.length - 1;
28
- if (nextIndex >= choices.length)
29
- nextIndex = 0;
30
- if (choices.length === 0)
31
- return 0;
36
+ if (nextIndex < 0) nextIndex = choices.length - 1;
37
+ if (nextIndex >= choices.length) nextIndex = 0;
38
+ if (choices.length === 0) return 0;
32
39
  // Safety check to prevent infinite loop if all are separators (shouldn't happen in practice)
33
40
  let count = 0;
34
- while (this.isSeparator(choices[nextIndex]) && count < choices.length) {
41
+ while(this.isSeparator(choices[nextIndex]) && count < choices.length){
35
42
  nextIndex += direction;
36
- if (nextIndex < 0)
37
- nextIndex = choices.length - 1;
38
- if (nextIndex >= choices.length)
39
- nextIndex = 0;
43
+ if (nextIndex < 0) nextIndex = choices.length - 1;
44
+ if (nextIndex >= choices.length) nextIndex = 0;
40
45
  count++;
41
46
  }
42
47
  return nextIndex;
43
48
  }
44
49
  getFilteredChoices() {
45
- if (!this.searchBuffer)
46
- return this.options.choices;
47
- return this.options.choices.filter(c => {
48
- if (this.isSeparator(c))
49
- return false; // Hide separators when searching
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
50
53
  return c.title.toLowerCase().includes(this.searchBuffer.toLowerCase());
51
54
  });
52
55
  }
@@ -56,8 +59,7 @@ class SelectPrompt extends base_1.Prompt {
56
59
  // Adjust Scroll Top
57
60
  if (this.selectedIndex < this.scrollTop) {
58
61
  this.scrollTop = this.selectedIndex;
59
- }
60
- else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
62
+ } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
61
63
  this.scrollTop = this.selectedIndex - this.pageSize + 1;
62
64
  }
63
65
  // Handle Filtering Edge Case: if list shrinks, scrollTop might be too high
@@ -65,29 +67,25 @@ class SelectPrompt extends base_1.Prompt {
65
67
  this.scrollTop = Math.max(0, choices.length - this.pageSize);
66
68
  }
67
69
  // Header
68
- const searchStr = this.searchBuffer ? ` ${theme_1.theme.muted}(Filter: ${this.searchBuffer})${ansi_1.ANSI.RESET}` : '';
70
+ const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Filter: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
69
71
  // Note: We avoid ERASE_LINE here because renderFrame handles full redraw
70
- output += `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}${searchStr}\n`;
72
+ output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr}\n`;
71
73
  if (choices.length === 0) {
72
- output += ` ${theme_1.theme.muted}No results found${ansi_1.ANSI.RESET}`;
73
- // We can omit newline at the very end if we want, but usually it's better to be consistent.
74
- // renderFrame adds newline via truncate logic? No, it joins.
75
- // So if I want a line break, I must add it.
76
- }
77
- else {
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 {
78
79
  const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
79
- visibleChoices.forEach((choice, index) => {
80
+ visibleChoices.forEach((choice, index)=>{
80
81
  const actualIndex = this.scrollTop + index;
81
- if (index > 0)
82
- output += '\n'; // Separator between items
82
+ if (index > 0) output += '\n'; // Separator between items
83
83
  if (this.isSeparator(choice)) {
84
- output += ` ${ansi_1.ANSI.DIM}${choice.text || symbols_1.symbols.line.repeat(8)}${ansi_1.ANSI.RESET}`;
85
- }
86
- else {
84
+ output += ` ${_ansi.ANSI.DIM}${choice.text || _symbols.symbols.line.repeat(8)}${_ansi.ANSI.RESET}`;
85
+ } else {
87
86
  if (actualIndex === this.selectedIndex) {
88
- output += `${theme_1.theme.main}${symbols_1.symbols.pointer} ${choice.title}${ansi_1.ANSI.RESET}`;
89
- }
90
- else {
87
+ output += `${_theme.theme.main}${_symbols.symbols.pointer} ${choice.title}${_ansi.ANSI.RESET}`;
88
+ } else {
91
89
  output += ` ${choice.title}`;
92
90
  }
93
91
  }
@@ -105,22 +103,19 @@ class SelectPrompt extends base_1.Prompt {
105
103
  this.render(false);
106
104
  return;
107
105
  }
108
- if (this.isSeparator(choices[this.selectedIndex]))
109
- return;
110
- this.cleanup();
111
- // Cursor is shown by cleanup
112
- if (this._resolve)
113
- this._resolve(choices[this.selectedIndex].value);
106
+ const choice = choices[this.selectedIndex];
107
+ if (this.isSeparator(choice)) return;
108
+ this.submit(choice.value);
114
109
  return;
115
110
  }
116
- if (this.isUp(char)) { // Up
111
+ if (this.isUp(char)) {
117
112
  if (choices.length > 0) {
118
113
  this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);
119
114
  this.render(false);
120
115
  }
121
116
  return;
122
117
  }
123
- if (this.isDown(char)) { // Down
118
+ if (this.isDown(char)) {
124
119
  if (choices.length > 0) {
125
120
  this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);
126
121
  this.render(false);
@@ -147,18 +142,22 @@ class SelectPrompt extends base_1.Prompt {
147
142
  }
148
143
  handleMouse(event) {
149
144
  const choices = this.getFilteredChoices();
150
- if (choices.length === 0)
151
- return;
145
+ if (choices.length === 0) return;
152
146
  if (event.action === 'scroll') {
153
147
  if (event.scroll === 'up') {
154
148
  this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);
155
149
  this.render(false);
156
- }
157
- else if (event.scroll === 'down') {
150
+ } else if (event.scroll === 'down') {
158
151
  this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);
159
152
  this.render(false);
160
153
  }
161
154
  }
162
155
  }
163
- }
164
- exports.SelectPrompt = SelectPrompt;
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
@@ -0,0 +1 @@
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":";;;;+BAOaA;;;eAAAA;;;sBAPQ;sBACE;uBACD;yBACE;;;;;;;;;;;;;;AAIjB,IAAA,AAAMA,eAAN,MAAMA,qBAAuEC,YAAM;IAY5EC,YAAYC,IAAiC,EAAqB;QACxE,OAAOA,QAAQ,eAAeA;IAClC;IAEUC,wBAAwBC,YAAoB,EAAEC,SAAiB,EAAU;QAC/E,IAAIC,YAAYF,eAAeC;QAC/B,MAAME,UAAU,IAAI,CAACC,kBAAkB;QAEvC,oBAAoB;QACpB,IAAIF,YAAY,GAAGA,YAAYC,QAAQE,MAAM,GAAG;QAChD,IAAIH,aAAaC,QAAQE,MAAM,EAAEH,YAAY;QAE7C,IAAIC,QAAQE,MAAM,KAAK,GAAG,OAAO;QAEjC,6FAA6F;QAC7F,IAAIC,QAAQ;QACZ,MAAO,IAAI,CAACT,WAAW,CAACM,OAAO,CAACD,UAAU,KAAKI,QAAQH,QAAQE,MAAM,CAAE;YACnEH,aAAaD;YACb,IAAIC,YAAY,GAAGA,YAAYC,QAAQE,MAAM,GAAG;YAChD,IAAIH,aAAaC,QAAQE,MAAM,EAAEH,YAAY;YAC7CI;QACJ;QACA,OAAOJ;IACX;IAEUE,qBAAsD;QAC5D,IAAI,CAAC,IAAI,CAACG,YAAY,EAAE,OAAO,IAAI,CAACC,OAAO,CAACL,OAAO;QACnD,OAAO,AAAC,IAAI,CAACK,OAAO,CAACL,OAAO,CAAqCM,MAAM,CAACC,CAAAA;YACpE,IAAI,IAAI,CAACb,WAAW,CAACa,IAAI,OAAO,OAAO,iCAAiC;YACxE,OAAOA,EAAEC,KAAK,CAACC,WAAW,GAAGC,QAAQ,CAAC,IAAI,CAACN,YAAY,CAACK,WAAW;QACvE;IACJ;IAEUE,OAAOC,YAAqB,EAAE;QACpC,IAAIC,SAAS;QACb,MAAMb,UAAU,IAAI,CAACC,kBAAkB;QAEvC,oBAAoB;QACpB,IAAI,IAAI,CAACa,aAAa,GAAG,IAAI,CAACC,SAAS,EAAE;YACrC,IAAI,CAACA,SAAS,GAAG,IAAI,CAACD,aAAa;QACvC,OAAO,IAAI,IAAI,CAACA,aAAa,IAAI,IAAI,CAACC,SAAS,GAAG,IAAI,CAACC,QAAQ,EAAE;YAC7D,IAAI,CAACD,SAAS,GAAG,IAAI,CAACD,aAAa,GAAG,IAAI,CAACE,QAAQ,GAAG;QAC1D;QACA,2EAA2E;QAC3E,IAAI,IAAI,CAACD,SAAS,GAAGf,QAAQE,MAAM,GAAG,GAAG;YACrC,IAAI,CAACa,SAAS,GAAGE,KAAKC,GAAG,CAAC,GAAGlB,QAAQE,MAAM,GAAG,IAAI,CAACc,QAAQ;QAC/D;QAEA,SAAS;QACT,MAAMG,YAAY,IAAI,CAACf,YAAY,GAAG,CAAC,CAAC,EAAEgB,YAAK,CAACC,KAAK,CAAC,SAAS,EAAE,IAAI,CAACjB,YAAY,CAAC,CAAC,EAAEkB,UAAI,CAACC,KAAK,EAAE,GAAG;QACrG,yEAAyE;QACzEV,UAAU,GAAGO,YAAK,CAACI,OAAO,CAAC,CAAC,EAAEF,UAAI,CAACC,KAAK,CAAC,CAAC,EAAED,UAAI,CAACG,IAAI,GAAGL,YAAK,CAACZ,KAAK,GAAG,IAAI,CAACH,OAAO,CAACqB,OAAO,GAAGJ,UAAI,CAACC,KAAK,GAAGJ,UAAU,EAAE,CAAC;QAEvH,IAAInB,QAAQE,MAAM,KAAK,GAAG;YACtBW,UAAU,CAAC,EAAE,EAAEO,YAAK,CAACC,KAAK,CAAC,gBAAgB,EAAEC,UAAI,CAACC,KAAK,EAAE;QACzD,4FAA4F;QAC5F,6DAA6D;QAC7D,4CAA4C;QAChD,OAAO;YACH,MAAMI,iBAAiB3B,QAAQ4B,KAAK,CAAC,IAAI,CAACb,SAAS,EAAE,IAAI,CAACA,SAAS,GAAG,IAAI,CAACC,QAAQ;YAEnFW,eAAeE,OAAO,CAAC,CAACC,QAAQC;gBAC5B,MAAMC,cAAc,IAAI,CAACjB,SAAS,GAAGgB;gBACrC,IAAIA,QAAQ,GAAGlB,UAAU,MAAM,0BAA0B;gBAEzD,IAAI,IAAI,CAACnB,WAAW,CAACoC,SAAS;oBAC1BjB,UAAU,CAAC,EAAE,EAAES,UAAI,CAACW,GAAG,GAAGH,OAAOI,IAAI,IAAIC,gBAAO,CAACC,IAAI,CAACC,MAAM,CAAC,KAAKf,UAAI,CAACC,KAAK,EAAE;gBAClF,OAAO;oBACH,IAAIS,gBAAgB,IAAI,CAAClB,aAAa,EAAE;wBACpCD,UAAU,GAAGO,YAAK,CAACkB,IAAI,GAAGH,gBAAO,CAACI,OAAO,CAAC,CAAC,EAAET,OAAOtB,KAAK,GAAGc,UAAI,CAACC,KAAK,EAAE;oBAC5E,OAAO;wBACHV,UAAU,CAAC,EAAE,EAAEiB,OAAOtB,KAAK,EAAE;oBACjC;gBACJ;YACJ;QACJ;QAEA,2CAA2C;QAC3C,IAAI,CAACgC,WAAW,CAAC3B;IACrB;IAEU4B,YAAYC,IAAY,EAAE;QAChC,MAAM1C,UAAU,IAAI,CAACC,kBAAkB;QAEvC,IAAIyC,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI1C,QAAQE,MAAM,KAAK,GAAG;gBACtB,IAAI,CAACE,YAAY,GAAG;gBACpB,IAAI,CAACU,aAAa,GAAG,IAAI,CAAClB,uBAAuB,CAAC,CAAC,GAAG;gBACtD,IAAI,CAACe,MAAM,CAAC;gBACZ;YACJ;YAEA,MAAMmB,SAAS9B,OAAO,CAAC,IAAI,CAACc,aAAa,CAAC;YAC1C,IAAI,IAAI,CAACpB,WAAW,CAACoC,SAAS;YAE9B,IAAI,CAACa,MAAM,CAACb,OAAOc,KAAK;YACxB;QACJ;QAEA,IAAI,IAAI,CAACC,IAAI,CAACH,OAAO;YACjB,IAAI1C,QAAQE,MAAM,GAAG,GAAG;gBACpB,IAAI,CAACY,aAAa,GAAG,IAAI,CAAClB,uBAAuB,CAAC,IAAI,CAACkB,aAAa,EAAE,CAAC;gBACvE,IAAI,CAACH,MAAM,CAAC;YAChB;YACA;QACJ;QACA,IAAI,IAAI,CAACmC,MAAM,CAACJ,OAAO;YACnB,IAAI1C,QAAQE,MAAM,GAAG,GAAG;gBACpB,IAAI,CAACY,aAAa,GAAG,IAAI,CAAClB,uBAAuB,CAAC,IAAI,CAACkB,aAAa,EAAE;gBACtE,IAAI,CAACH,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,YAAY;QACZ,IAAI+B,SAAS,YAAYA,SAAS,QAAQ;YACtC,IAAI,IAAI,CAACtC,YAAY,CAACF,MAAM,GAAG,GAAG;gBAC9B,IAAI,CAACE,YAAY,GAAG,IAAI,CAACA,YAAY,CAACwB,KAAK,CAAC,GAAG,CAAC;gBAChD,IAAI,CAACd,aAAa,GAAG,GAAG,kBAAkB;gBAC1C,IAAI,CAACA,aAAa,GAAG,IAAI,CAAClB,uBAAuB,CAAC,CAAC,GAAG;gBACtD,IAAI,CAACe,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,SAAS;QACT,IAAI+B,KAAKxC,MAAM,KAAK,KAAK,CAAC,eAAe6C,IAAI,CAACL,OAAO;YACjD,IAAI,CAACtC,YAAY,IAAIsC;YACrB,IAAI,CAAC5B,aAAa,GAAG,GAAG,kBAAkB;YAC1C,IAAI,CAACA,aAAa,GAAG,IAAI,CAAClB,uBAAuB,CAAC,CAAC,GAAG;YACtD,IAAI,CAACe,MAAM,CAAC;QAChB;IACJ;IAEUqC,YAAYC,KAAiB,EAAE;QACrC,MAAMjD,UAAU,IAAI,CAACC,kBAAkB;QACvC,IAAID,QAAQE,MAAM,KAAK,GAAG;QAE1B,IAAI+C,MAAMC,MAAM,KAAK,UAAU;YAC3B,IAAID,MAAME,MAAM,KAAK,MAAM;gBACvB,IAAI,CAACrC,aAAa,GAAG,IAAI,CAAClB,uBAAuB,CAAC,IAAI,CAACkB,aAAa,EAAE,CAAC;gBACvE,IAAI,CAACH,MAAM,CAAC;YAChB,OAAO,IAAIsC,MAAME,MAAM,KAAK,QAAQ;gBAChC,IAAI,CAACrC,aAAa,GAAG,IAAI,CAAClB,uBAAuB,CAAC,IAAI,CAACkB,aAAa,EAAE;gBACtE,IAAI,CAACH,MAAM,CAAC;YAChB;QACJ;IACJ;IAzJA,YAAYN,OAAU,CAAE;QACpB,KAAK,CAACA,UANV,uBAAUS,iBAAwB,IAClC,uBAAUV,gBAAuB,KACjC,uBAAUW,aAAoB,IAC9B,uBAAmBC,YAAmB;QAIlC,iCAAiC;QACjC,IAAI,CAACF,aAAa,GAAG,IAAI,CAAClB,uBAAuB,CAAC,CAAC,GAAG;IAC1D;AAsJJ"}
@@ -1,9 +1,21 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SemVerPrompt = void 0;
4
- const select_1 = require("./select");
5
- class SemVerPrompt extends select_1.SelectPrompt {
6
- constructor(options) {
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){
7
19
  const { currentVersion, ...baseOptions } = options;
8
20
  const validVersion = SemVerPrompt.parseVersion(currentVersion) || '0.0.1';
9
21
  const [major, minor, patch] = validVersion.split('.').map(Number);
@@ -21,12 +33,11 @@ class SemVerPrompt extends select_1.SelectPrompt {
21
33
  value: `${major + 1}.0.0`
22
34
  }
23
35
  ];
24
- super({ ...baseOptions, choices });
25
- }
26
- static parseVersion(version) {
27
- // Simple SemVer regex: x.y.z
28
- const match = version.match(/^(\d+)\.(\d+)\.(\d+)$/);
29
- return match ? match[0] : null;
36
+ super({
37
+ ...baseOptions,
38
+ choices
39
+ });
30
40
  }
31
- }
32
- exports.SemVerPrompt = SemVerPrompt;
41
+ };
42
+
43
+ //# sourceMappingURL=semver.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,133 @@
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
@@ -0,0 +1 @@
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":"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"}
@@ -1,30 +1,30 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SliderPrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- const symbols_1 = require("../symbols");
8
- // --- Implementation: Slider Prompt ---
9
- class SliderPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.value = options.initial ?? options.min;
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "SliderPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return SliderPrompt;
13
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 {
14
16
  render(_firstRender) {
15
17
  const width = 20;
16
18
  const range = this.options.max - this.options.min;
17
19
  const ratio = (this.value - this.options.min) / range;
18
20
  const pos = Math.round(ratio * width);
19
21
  let bar = '';
20
- for (let i = 0; i <= width; i++) {
21
- if (i === pos)
22
- bar += `${theme_1.theme.main}O${ansi_1.ANSI.RESET}`;
23
- else
24
- bar += symbols_1.symbols.line;
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
25
  }
26
26
  const unit = this.options.unit || '';
27
- const output = `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} [${bar}] ${this.value}${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
28
  this.renderFrame(output);
29
29
  }
30
30
  handleInput(char) {
@@ -33,13 +33,13 @@ class SliderPrompt extends base_1.Prompt {
33
33
  return;
34
34
  }
35
35
  const step = this.options.step || 1;
36
- if (this.isLeft(char)) { // Left
36
+ if (this.isLeft(char)) {
37
37
  this.value = Math.max(this.options.min, this.value - step);
38
38
  // Round to avoid float errors
39
39
  this.value = Math.round(this.value * 10000) / 10000;
40
40
  this.render(false);
41
41
  }
42
- if (this.isRight(char)) { // Right
42
+ if (this.isRight(char)) {
43
43
  this.value = Math.min(this.options.max, this.value + step);
44
44
  // Round to avoid float errors
45
45
  this.value = Math.round(this.value * 10000) / 10000;
@@ -49,10 +49,10 @@ class SliderPrompt extends base_1.Prompt {
49
49
  handleMouse(event) {
50
50
  if (event.action === 'scroll') {
51
51
  const step = this.options.step || 1;
52
- if (event.scroll === 'up') { // Scroll Up -> Increase
52
+ if (event.scroll === 'up') {
53
53
  this.value = Math.min(this.options.max, this.value + step);
54
54
  }
55
- if (event.scroll === 'down') { // Scroll Down -> Decrease
55
+ if (event.scroll === 'down') {
56
56
  this.value = Math.max(this.options.min, this.value - step);
57
57
  }
58
58
  // Round to avoid float errors
@@ -60,5 +60,10 @@ class SliderPrompt extends base_1.Prompt {
60
60
  this.render(false);
61
61
  }
62
62
  }
63
- }
64
- exports.SliderPrompt = SliderPrompt;
63
+ constructor(options){
64
+ super(options);
65
+ this.value = options.initial ?? options.min;
66
+ }
67
+ };
68
+
69
+ //# sourceMappingURL=slider.js.map
@@ -0,0 +1 @@
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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"}