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,27 +1,36 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CheckboxPrompt = 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: Checkbox Prompt ---
9
- class CheckboxPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.selectedIndex = 0;
13
- this.errorMsg = '';
14
- // Pagination state
15
- this.scrollTop = 0;
16
- this.pageSize = 10;
17
- this.checkedState = options.choices.map(c => !!c.selected);
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "CheckboxPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return CheckboxPrompt;
18
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 CheckboxPrompt = class CheckboxPrompt extends _base.Prompt {
19
29
  render(_firstRender) {
20
30
  // Adjust Scroll Top
21
31
  if (this.selectedIndex < this.scrollTop) {
22
32
  this.scrollTop = this.selectedIndex;
23
- }
24
- else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
33
+ } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
25
34
  this.scrollTop = this.selectedIndex - this.pageSize + 1;
26
35
  }
27
36
  // Ensure we don't scroll past bounds if list is small
@@ -30,30 +39,26 @@ class CheckboxPrompt extends base_1.Prompt {
30
39
  }
31
40
  let output = '';
32
41
  // Header
33
- const icon = this.errorMsg ? `${theme_1.theme.error}${symbols_1.symbols.cross}` : `${theme_1.theme.success}?`;
34
- output += `${icon} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} ${theme_1.theme.muted}(Space: toggle, a: all, x: none, Enter: submit)${ansi_1.ANSI.RESET}`;
42
+ const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
43
+ output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(Space: toggle, a: all, x: none, Enter: submit)${_ansi.ANSI.RESET}`;
35
44
  // List
36
45
  const choices = this.options.choices;
37
46
  const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
38
- visibleChoices.forEach((choice, index) => {
47
+ visibleChoices.forEach((choice, index)=>{
39
48
  const actualIndex = this.scrollTop + index;
40
49
  output += '\n'; // New line for each item
41
- const cursor = actualIndex === this.selectedIndex ? `${theme_1.theme.main}${symbols_1.symbols.pointer}${ansi_1.ANSI.RESET}` : ' ';
50
+ const cursor = actualIndex === this.selectedIndex ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET}` : ' ';
42
51
  const isChecked = this.checkedState[actualIndex];
43
- const checkbox = isChecked
44
- ? `${theme_1.theme.success}${symbols_1.symbols.checked}${ansi_1.ANSI.RESET}`
45
- : `${theme_1.theme.muted}${symbols_1.symbols.unchecked}${ansi_1.ANSI.RESET}`;
46
- const title = actualIndex === this.selectedIndex
47
- ? `${theme_1.theme.main}${choice.title}${ansi_1.ANSI.RESET}`
48
- : choice.title;
52
+ const checkbox = isChecked ? `${_theme.theme.success}${_symbols.symbols.checked}${_ansi.ANSI.RESET}` : `${_theme.theme.muted}${_symbols.symbols.unchecked}${_ansi.ANSI.RESET}`;
53
+ const title = actualIndex === this.selectedIndex ? `${_theme.theme.main}${choice.title}${_ansi.ANSI.RESET}` : choice.title;
49
54
  output += `${cursor} ${checkbox} ${title}`;
50
55
  });
51
56
  // Indication of more items
52
57
  if (choices.length > this.pageSize) {
53
- // const progress = ` ${this.scrollTop + 1}-${Math.min(this.scrollTop + this.pageSize, choices.length)} of ${choices.length}`;
58
+ // const progress = ` ${this.scrollTop + 1}-${Math.min(this.scrollTop + this.pageSize, choices.length)} of ${choices.length}`;
54
59
  }
55
60
  if (this.errorMsg) {
56
- output += `\n${theme_1.theme.error}>> ${this.errorMsg}${ansi_1.ANSI.RESET}`;
61
+ output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
57
62
  }
58
63
  this.renderFrame(output);
59
64
  }
@@ -72,11 +77,8 @@ class CheckboxPrompt extends base_1.Prompt {
72
77
  return;
73
78
  }
74
79
  this.cleanup();
75
- const results = this.options.choices
76
- .filter((_, i) => this.checkedState[i])
77
- .map(c => c.value);
78
- if (this._resolve)
79
- this._resolve(results);
80
+ const results = this.options.choices.filter((_, i)=>this.checkedState[i]).map((c)=>c.value);
81
+ if (this._resolve) this._resolve(results);
80
82
  return;
81
83
  }
82
84
  // --- Batch Shortcuts ---
@@ -84,8 +86,7 @@ class CheckboxPrompt extends base_1.Prompt {
84
86
  if (char === 'a') {
85
87
  if (this.options.max && this.options.choices.length > this.options.max) {
86
88
  this.errorMsg = `Cannot select all: Max limit is ${this.options.max}`;
87
- }
88
- else {
89
+ } else {
89
90
  this.checkedState.fill(true);
90
91
  this.errorMsg = '';
91
92
  }
@@ -101,12 +102,11 @@ class CheckboxPrompt extends base_1.Prompt {
101
102
  }
102
103
  // 'i': Invert Selection
103
104
  if (char === 'i') {
104
- const potentialCount = this.checkedState.filter(s => !s).length;
105
+ const potentialCount = this.checkedState.filter((s)=>!s).length;
105
106
  if (this.options.max && potentialCount > this.options.max) {
106
107
  this.errorMsg = `Cannot invert: Result exceeds max limit ${this.options.max}`;
107
- }
108
- else {
109
- this.checkedState = this.checkedState.map(s => !s);
108
+ } else {
109
+ this.checkedState = this.checkedState.map((s)=>!s);
110
110
  this.errorMsg = '';
111
111
  }
112
112
  this.render(false);
@@ -119,19 +119,18 @@ class CheckboxPrompt extends base_1.Prompt {
119
119
  const { max } = this.options;
120
120
  if (!currentChecked && max && selectedCount >= max) {
121
121
  this.errorMsg = `Max ${max} selections allowed.`;
122
- }
123
- else {
122
+ } else {
124
123
  this.checkedState[this.selectedIndex] = !currentChecked;
125
124
  this.errorMsg = '';
126
125
  }
127
126
  this.render(false);
128
127
  }
129
- if (this.isUp(char)) { // Up
128
+ if (this.isUp(char)) {
130
129
  this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;
131
130
  this.errorMsg = '';
132
131
  this.render(false);
133
132
  }
134
- if (this.isDown(char)) { // Down
133
+ if (this.isDown(char)) {
135
134
  this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;
136
135
  this.errorMsg = '';
137
136
  this.render(false);
@@ -143,13 +142,18 @@ class CheckboxPrompt extends base_1.Prompt {
143
142
  this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;
144
143
  this.errorMsg = '';
145
144
  this.render(false);
146
- }
147
- else if (event.scroll === 'down') {
145
+ } else if (event.scroll === 'down') {
148
146
  this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;
149
147
  this.errorMsg = '';
150
148
  this.render(false);
151
149
  }
152
150
  }
153
151
  }
154
- }
155
- exports.CheckboxPrompt = CheckboxPrompt;
152
+ constructor(options){
153
+ super(options), _define_property(this, "selectedIndex", 0), _define_property(this, "checkedState", void 0), _define_property(this, "errorMsg", ''), // Pagination state
154
+ _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 10);
155
+ this.checkedState = options.choices.map((c)=>!!c.selected);
156
+ }
157
+ };
158
+
159
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/checkbox.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { CheckboxOptions, MouseEvent } from '../types';\n\n// --- Implementation: Checkbox Prompt ---\nexport class CheckboxPrompt<V> extends Prompt<any[], CheckboxOptions<V>> {\n private selectedIndex: number = 0;\n private checkedState: boolean[];\n private errorMsg: string = '';\n // Pagination state\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n constructor(options: CheckboxOptions<V>) {\n super(options);\n this.checkedState = options.choices.map(c => !!c.selected);\n }\n\n protected render(_firstRender: boolean) {\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\n // Ensure we don't scroll past bounds if list is small\n if (this.options.choices.length <= this.pageSize) {\n this.scrollTop = 0;\n }\n\n let output = '';\n\n // Header\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(Space: toggle, a: all, x: none, Enter: submit)${ANSI.RESET}`;\n\n // List\n const choices = this.options.choices;\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n output += '\\n'; // New line for each item\n\n const cursor = actualIndex === this.selectedIndex ? `${theme.main}${symbols.pointer}${ANSI.RESET}` : ' ';\n const isChecked = this.checkedState[actualIndex];\n const checkbox = isChecked\n ? `${theme.success}${symbols.checked}${ANSI.RESET}`\n : `${theme.muted}${symbols.unchecked}${ANSI.RESET}`;\n\n const title = actualIndex === this.selectedIndex\n ? `${theme.main}${choice.title}${ANSI.RESET}`\n : choice.title;\n\n output += `${cursor} ${checkbox} ${title}`;\n });\n\n // Indication of more items\n if (choices.length > this.pageSize) {\n // const progress = ` ${this.scrollTop + 1}-${Math.min(this.scrollTop + this.pageSize, choices.length)} of ${choices.length}`;\n }\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { min = 0, max } = this.options;\n\n if (selectedCount < min) {\n this.errorMsg = `You must select at least ${min} options.`;\n this.render(false);\n return;\n }\n if (max && selectedCount > max) {\n this.errorMsg = `You can only select up to ${max} options.`;\n this.render(false);\n return;\n }\n\n this.cleanup();\n\n const results = this.options.choices\n .filter((_, i) => this.checkedState[i])\n .map(c => c.value);\n\n if ((this as any)._resolve) (this as any)._resolve(results);\n return;\n }\n\n // --- Batch Shortcuts ---\n\n // 'a': Select All\n if (char === 'a') {\n if (this.options.max && this.options.choices.length > this.options.max) {\n this.errorMsg = `Cannot select all: Max limit is ${this.options.max}`;\n } else {\n this.checkedState.fill(true);\n this.errorMsg = '';\n }\n this.render(false);\n return;\n }\n\n // 'x' or 'n': Select None\n if (char === 'x' || char === 'n') {\n this.checkedState.fill(false);\n this.errorMsg = '';\n this.render(false);\n return;\n }\n\n // 'i': Invert Selection\n if (char === 'i') {\n const potentialCount = this.checkedState.filter(s => !s).length;\n if (this.options.max && potentialCount > this.options.max) {\n this.errorMsg = `Cannot invert: Result exceeds max limit ${this.options.max}`;\n } else {\n this.checkedState = this.checkedState.map(s => !s);\n this.errorMsg = '';\n }\n this.render(false);\n return;\n }\n\n // Space Toggle\n if (char === ' ') {\n const currentChecked = this.checkedState[this.selectedIndex];\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { max } = this.options;\n\n if (!currentChecked && max && selectedCount >= max) {\n this.errorMsg = `Max ${max} selections allowed.`;\n } else {\n this.checkedState[this.selectedIndex] = !currentChecked;\n this.errorMsg = '';\n }\n this.render(false);\n }\n\n if (this.isUp(char)) { // Up\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;\n this.errorMsg = '';\n this.render(false);\n }\n if (this.isDown(char)) { // Down\n this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.errorMsg = '';\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;\n this.errorMsg = '';\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.errorMsg = '';\n this.render(false);\n }\n }\n }\n}\n"],"names":["CheckboxPrompt","Prompt","render","_firstRender","selectedIndex","scrollTop","pageSize","options","choices","length","output","icon","errorMsg","theme","error","symbols","cross","success","ANSI","BOLD","title","message","RESET","muted","visibleChoices","slice","forEach","choice","index","actualIndex","cursor","main","pointer","isChecked","checkedState","checkbox","checked","unchecked","renderFrame","handleInput","char","selectedCount","filter","Boolean","min","max","cleanup","results","_","i","map","c","value","_resolve","fill","potentialCount","s","currentChecked","isUp","isDown","handleMouse","event","action","scroll","selected"],"mappings":"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"}
@@ -1,46 +1,55 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CodePrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- const utils_1 = require("../utils");
8
- const highlight_1 = require("../highlight");
9
- class CodePrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.tokens = [];
13
- this.variableTokens = [];
14
- this.values = {};
15
- this.activeVarIndex = 0;
16
- this.cursor = 0;
17
- this.lastLinesUp = 0;
18
- this.parseTemplate();
19
- // Init values
20
- this.variableTokens.forEach(idx => {
21
- const name = this.tokens[idx].value;
22
- this.values[name] = (this.options.values && this.options.values[name]) || '';
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "CodePrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return CodePrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ const _utils = require("../utils");
15
+ const _highlight = require("../highlight");
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
23
  });
24
- // Init cursor at end of first var
25
- if (this.variableTokens.length > 0) {
26
- const activeName = this.tokens[this.variableTokens[0]].value;
27
- this.cursor = this.values[activeName].length;
28
- }
24
+ } else {
25
+ obj[key] = value;
29
26
  }
27
+ return obj;
28
+ }
29
+ let CodePrompt = class CodePrompt extends _base.Prompt {
30
30
  parseTemplate() {
31
31
  const regex = /\$\{([a-zA-Z0-9_]+)\}/g;
32
32
  let lastIndex = 0;
33
33
  let match;
34
- while ((match = regex.exec(this.options.template)) !== null) {
34
+ while((match = regex.exec(this.options.template)) !== null){
35
35
  if (match.index > lastIndex) {
36
- this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex, match.index) });
36
+ this.tokens.push({
37
+ type: 'static',
38
+ value: this.options.template.substring(lastIndex, match.index)
39
+ });
37
40
  }
38
- this.tokens.push({ type: 'variable', value: match[1] });
41
+ this.tokens.push({
42
+ type: 'variable',
43
+ value: match[1]
44
+ });
39
45
  this.variableTokens.push(this.tokens.length - 1);
40
46
  lastIndex = regex.lastIndex;
41
47
  }
42
48
  if (lastIndex < this.options.template.length) {
43
- this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex) });
49
+ this.tokens.push({
50
+ type: 'static',
51
+ value: this.options.template.substring(lastIndex)
52
+ });
44
53
  }
45
54
  }
46
55
  // FIX: Override cleanup to ensure cursor is reset to bottom
@@ -65,8 +74,8 @@ class CodePrompt extends base_1.Prompt {
65
74
  let activeVarEnd = -1;
66
75
  const activeTokenIdx = this.variableTokens[this.activeVarIndex];
67
76
  // const activeVarName = this.tokens[activeTokenIdx].value;
68
- this.tokens.forEach((token, idx) => {
69
- const val = (token.type === 'static') ? token.value : (this.values[token.value] || '');
77
+ this.tokens.forEach((token, idx)=>{
78
+ const val = token.type === 'static' ? token.value : this.values[token.value] || '';
70
79
  if (idx === activeTokenIdx) {
71
80
  activeVarStart = fullRawText.length;
72
81
  activeVarEnd = activeVarStart + val.length;
@@ -78,26 +87,24 @@ class CodePrompt extends base_1.Prompt {
78
87
  const shouldHighlight = this.options.highlight !== false;
79
88
  if (shouldHighlight) {
80
89
  const lang = this.options.language || 'json';
81
- const highlightedText = (0, highlight_1.highlight)(fullRawText, lang);
90
+ const highlightedText = (0, _highlight.highlight)(fullRawText, lang);
82
91
  let visibleIdx = 0;
83
92
  let activeColor = ''; // Tracks the last set color
84
- for (let i = 0; i < highlightedText.length; i++) {
93
+ for(let i = 0; i < highlightedText.length; i++){
85
94
  const char = highlightedText[i];
86
95
  if (char === '\x1b') {
87
96
  // Start of ANSI sequence
88
97
  let sequence = char;
89
98
  i++;
90
- while (i < highlightedText.length && highlightedText[i] !== 'm') {
99
+ while(i < highlightedText.length && highlightedText[i] !== 'm'){
91
100
  sequence += highlightedText[i];
92
101
  i++;
93
102
  }
94
- if (i < highlightedText.length)
95
- sequence += 'm'; // Append terminator
103
+ if (i < highlightedText.length) sequence += 'm'; // Append terminator
96
104
  // Interpret sequence (naive)
97
- if (sequence === ansi_1.ANSI.RESET || sequence === '\x1b[0m') {
105
+ if (sequence === _ansi.ANSI.RESET || sequence === '\x1b[0m') {
98
106
  activeColor = '';
99
- }
100
- else {
107
+ } else {
101
108
  // Assuming it's a color code.
102
109
  activeColor = sequence;
103
110
  }
@@ -107,38 +114,34 @@ class CodePrompt extends base_1.Prompt {
107
114
  // Output the sequence (e.g. a color change)
108
115
  highlighted += sequence;
109
116
  // Then re-assert underline
110
- highlighted += ansi_1.ANSI.UNDERLINE;
111
- }
112
- else {
117
+ highlighted += _ansi.ANSI.UNDERLINE;
118
+ } else {
113
119
  highlighted += sequence;
114
120
  }
115
121
  continue;
116
122
  }
117
123
  // Normal char
118
124
  if (visibleIdx === activeVarStart) {
119
- highlighted += `${theme_1.theme.main}${ansi_1.ANSI.UNDERLINE}`;
125
+ highlighted += `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}`;
120
126
  }
121
127
  highlighted += char;
122
128
  visibleIdx++;
123
129
  if (visibleIdx === activeVarEnd) {
124
- highlighted += ansi_1.ANSI.RESET;
130
+ highlighted += _ansi.ANSI.RESET;
125
131
  // Restore previous color if any
126
132
  if (activeColor) {
127
133
  highlighted += activeColor;
128
134
  }
129
135
  }
130
136
  }
131
- highlighted += ansi_1.ANSI.RESET;
132
- }
133
- else {
134
- this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, ansi_1.ANSI.RESET, (s) => highlighted += s);
137
+ highlighted += _ansi.ANSI.RESET;
138
+ } else {
139
+ this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, _ansi.ANSI.RESET, (s)=>highlighted += s);
135
140
  }
136
141
  // 3. Output Frame
137
- const warningMsg = shouldHighlight
138
- ? `${ansi_1.ANSI.FG_YELLOW}Warning:${ansi_1.ANSI.RESET} Syntax highlighting is an experimental feature.\n`
139
- : '';
140
- const prefix = `${warningMsg}${theme_1.theme.success}? ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
141
- const suffix = `\n${theme_1.theme.muted}(Tab to next, Enter to submit)${ansi_1.ANSI.RESET}`;
142
+ const warningMsg = shouldHighlight ? `${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} Syntax highlighting is an experimental feature.\n` : '';
143
+ const prefix = `${warningMsg}${_theme.theme.success}? ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
144
+ const suffix = `\n${_theme.theme.muted}(Tab to next, Enter to submit)${_ansi.ANSI.RESET}`;
142
145
  const fullOutput = prefix + highlighted + suffix;
143
146
  this.renderFrame(fullOutput);
144
147
  // 4. Cursor Calculation
@@ -146,16 +149,16 @@ class CodePrompt extends base_1.Prompt {
146
149
  const textBeforeCursor = fullRawText.substring(0, cursorAbsPos);
147
150
  const rowsBefore = textBeforeCursor.split('\n');
148
151
  const cursorRow = rowsBefore.length - 1;
149
- const cursorCol = (0, utils_1.stringWidth)(rowsBefore[rowsBefore.length - 1]);
152
+ const cursorCol = (0, _utils.stringWidth)(rowsBefore[rowsBefore.length - 1]);
150
153
  const totalSnippetLines = fullRawText.split('\n').length;
151
154
  // linesUp calculation: 1 (suffix) + remaining snippet lines
152
155
  const linesUp = 1 + (totalSnippetLines - 1 - cursorRow);
153
- this.print(ansi_1.ANSI.SHOW_CURSOR);
156
+ this.print(_ansi.ANSI.SHOW_CURSOR);
154
157
  if (linesUp > 0) {
155
158
  this.print(`\x1b[${linesUp}A`);
156
159
  this.lastLinesUp = linesUp;
157
160
  }
158
- this.print(ansi_1.ANSI.CURSOR_LEFT);
161
+ this.print(_ansi.ANSI.CURSOR_LEFT);
159
162
  if (cursorCol > 0) {
160
163
  this.print(`\x1b[${cursorCol}C`);
161
164
  }
@@ -167,17 +170,16 @@ class CodePrompt extends base_1.Prompt {
167
170
  if (overlapStart < overlapEnd) {
168
171
  if (absStart < overlapStart) {
169
172
  const part = text.substring(0, overlapStart - absStart);
170
- append(`${syntaxColor}${part}${ansi_1.ANSI.RESET}`);
173
+ append(`${syntaxColor}${part}${_ansi.ANSI.RESET}`);
171
174
  }
172
175
  const activePart = text.substring(overlapStart - absStart, overlapEnd - absStart);
173
- append(`${theme_1.theme.main}${ansi_1.ANSI.UNDERLINE}${activePart}${ansi_1.ANSI.RESET}`);
176
+ append(`${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${activePart}${_ansi.ANSI.RESET}`);
174
177
  if (absEnd > overlapEnd) {
175
178
  const part = text.substring(overlapEnd - absStart);
176
- append(`${syntaxColor}${part}${ansi_1.ANSI.RESET}`);
179
+ append(`${syntaxColor}${part}${_ansi.ANSI.RESET}`);
177
180
  }
178
- }
179
- else {
180
- append(`${syntaxColor}${text}${ansi_1.ANSI.RESET}`);
181
+ } else {
182
+ append(`${syntaxColor}${text}${_ansi.ANSI.RESET}`);
181
183
  }
182
184
  }
183
185
  handleInput(char, _key) {
@@ -207,14 +209,12 @@ class CodePrompt extends base_1.Prompt {
207
209
  return;
208
210
  }
209
211
  if (this.isLeft(char)) {
210
- if (this.cursor > 0)
211
- this.cursor--;
212
+ if (this.cursor > 0) this.cursor--;
212
213
  this.render(false);
213
214
  return;
214
215
  }
215
216
  if (this.isRight(char)) {
216
- if (this.cursor < val.length)
217
- this.cursor++;
217
+ if (this.cursor < val.length) this.cursor++;
218
218
  this.render(false);
219
219
  return;
220
220
  }
@@ -228,10 +228,8 @@ class CodePrompt extends base_1.Prompt {
228
228
  }
229
229
  handleMouse(event) {
230
230
  if (event.action === 'scroll') {
231
- if (event.scroll === 'up')
232
- this.moveFocus(-1);
233
- else if (event.scroll === 'down')
234
- this.moveFocus(1);
231
+ if (event.scroll === 'up') this.moveFocus(-1);
232
+ else if (event.scroll === 'down') this.moveFocus(1);
235
233
  }
236
234
  }
237
235
  moveFocus(direction) {
@@ -245,15 +243,29 @@ class CodePrompt extends base_1.Prompt {
245
243
  }
246
244
  submitCode() {
247
245
  let result = '';
248
- this.tokens.forEach(token => {
246
+ this.tokens.forEach((token)=>{
249
247
  if (token.type === 'static') {
250
248
  result += token.value;
251
- }
252
- else {
249
+ } else {
253
250
  result += this.values[token.value] || '';
254
251
  }
255
252
  });
256
253
  this.submit(result);
257
254
  }
258
- }
259
- exports.CodePrompt = CodePrompt;
255
+ constructor(options){
256
+ super(options), _define_property(this, "tokens", []), _define_property(this, "variableTokens", []), _define_property(this, "values", {}), _define_property(this, "activeVarIndex", 0), _define_property(this, "cursor", 0), _define_property(this, "lastLinesUp", 0);
257
+ this.parseTemplate();
258
+ // Init values
259
+ this.variableTokens.forEach((idx)=>{
260
+ const name = this.tokens[idx].value;
261
+ this.values[name] = this.options.values && this.options.values[name] || '';
262
+ });
263
+ // Init cursor at end of first var
264
+ if (this.variableTokens.length > 0) {
265
+ const activeName = this.tokens[this.variableTokens[0]].value;
266
+ this.cursor = this.values[activeName].length;
267
+ }
268
+ }
269
+ };
270
+
271
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/code.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { CodeOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\nimport { highlight } from '../highlight';\n\ninterface Token {\n type: 'static' | 'variable';\n value: string;\n}\n\nexport class CodePrompt extends Prompt<string, CodeOptions> {\n private tokens: Token[] = [];\n private variableTokens: number[] = [];\n private values: Record<string, string> = {};\n private activeVarIndex: number = 0;\n private cursor: number = 0;\n private lastLinesUp: number = 0;\n\n constructor(options: CodeOptions) {\n super(options);\n this.parseTemplate();\n // Init values\n this.variableTokens.forEach(idx => {\n const name = this.tokens[idx].value;\n this.values[name] = (this.options.values && this.options.values[name]) || '';\n });\n\n // Init cursor at end of first var\n if (this.variableTokens.length > 0) {\n const activeName = this.tokens[this.variableTokens[0]].value;\n this.cursor = this.values[activeName].length;\n }\n }\n\n private parseTemplate() {\n const regex = /\\$\\{([a-zA-Z0-9_]+)\\}/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(this.options.template)) !== null) {\n if (match.index > lastIndex) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex, match.index) });\n }\n this.tokens.push({ type: 'variable', value: match[1] });\n this.variableTokens.push(this.tokens.length - 1);\n lastIndex = regex.lastIndex;\n }\n\n if (lastIndex < this.options.template.length) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex) });\n }\n }\n\n // FIX: Override cleanup to ensure cursor is reset to bottom\n protected cleanup() {\n // If the cursor is currently moved up (editing mode), move it back down\n // before the prompt exits. This prevents the next output (or result)\n // from overwriting the bottom part of our UI.\n if (this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n this.lastLinesUp = 0;\n }\n super.cleanup();\n }\n\n protected render(firstRender: boolean) {\n if (!firstRender && this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n }\n this.lastLinesUp = 0;\n\n // 1. Build Full Raw Text & Identify Active Variable Range\n let fullRawText = '';\n let activeVarStart = -1;\n let activeVarEnd = -1;\n\n const activeTokenIdx = this.variableTokens[this.activeVarIndex];\n // const activeVarName = this.tokens[activeTokenIdx].value;\n\n this.tokens.forEach((token, idx) => {\n const val = (token.type === 'static') ? token.value : (this.values[token.value] || '');\n\n if (idx === activeTokenIdx) {\n activeVarStart = fullRawText.length;\n activeVarEnd = activeVarStart + val.length;\n }\n\n fullRawText += val;\n });\n\n // 2. Syntax Highlight with Overlap Logic\n let highlighted = '';\n const shouldHighlight = this.options.highlight !== false;\n\n if (shouldHighlight) {\n const lang = this.options.language || 'json';\n const highlightedText = highlight(fullRawText, lang);\n\n let visibleIdx = 0;\n let activeColor = ''; // Tracks the last set color\n\n for (let i = 0; i < highlightedText.length; i++) {\n const char = highlightedText[i];\n\n if (char === '\\x1b') {\n // Start of ANSI sequence\n let sequence = char;\n i++;\n while (i < highlightedText.length && highlightedText[i] !== 'm') {\n sequence += highlightedText[i];\n i++;\n }\n if (i < highlightedText.length) sequence += 'm'; // Append terminator\n\n // Interpret sequence (naive)\n if (sequence === ANSI.RESET || sequence === '\\x1b[0m') {\n activeColor = '';\n } else {\n // Assuming it's a color code.\n activeColor = sequence;\n }\n\n // If we are INSIDE the active range, and we encounter a color change/reset,\n // we must ensure UNDERLINE is kept/restored.\n if (visibleIdx >= activeVarStart && visibleIdx < activeVarEnd) {\n // Output the sequence (e.g. a color change)\n highlighted += sequence;\n // Then re-assert underline\n highlighted += ANSI.UNDERLINE;\n } else {\n highlighted += sequence;\n }\n continue;\n }\n\n // Normal char\n if (visibleIdx === activeVarStart) {\n highlighted += `${theme.main}${ANSI.UNDERLINE}`;\n }\n\n highlighted += char;\n visibleIdx++;\n\n if (visibleIdx === activeVarEnd) {\n highlighted += ANSI.RESET;\n // Restore previous color if any\n if (activeColor) {\n highlighted += activeColor;\n }\n }\n }\n highlighted += ANSI.RESET;\n } else {\n this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, ANSI.RESET, (s) => highlighted += s);\n }\n\n\n // 3. Output Frame\n const warningMsg = shouldHighlight\n ? `${ANSI.FG_YELLOW}Warning:${ANSI.RESET} Syntax highlighting is an experimental feature.\\n`\n : '';\n\n const prefix = `${warningMsg}${theme.success}? ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n const suffix = `\\n${theme.muted}(Tab to next, Enter to submit)${ANSI.RESET}`;\n const fullOutput = prefix + highlighted + suffix;\n\n this.renderFrame(fullOutput);\n\n // 4. Cursor Calculation\n const cursorAbsPos = activeVarStart + this.cursor;\n const textBeforeCursor = fullRawText.substring(0, cursorAbsPos);\n\n const rowsBefore = textBeforeCursor.split('\\n');\n const cursorRow = rowsBefore.length - 1;\n const cursorCol = stringWidth(rowsBefore[rowsBefore.length - 1]);\n\n const totalSnippetLines = fullRawText.split('\\n').length;\n // linesUp calculation: 1 (suffix) + remaining snippet lines\n const linesUp = 1 + (totalSnippetLines - 1 - cursorRow);\n\n this.print(ANSI.SHOW_CURSOR);\n if (linesUp > 0) {\n this.print(`\\x1b[${linesUp}A`);\n this.lastLinesUp = linesUp;\n }\n\n this.print(ANSI.CURSOR_LEFT);\n if (cursorCol > 0) {\n this.print(`\\x1b[${cursorCol}C`);\n }\n }\n\n private appendSegment(\n text: string,\n absStart: number,\n activeStart: number,\n activeEnd: number,\n syntaxColor: string,\n append: (s: string) => void\n ) {\n const absEnd = absStart + text.length;\n const overlapStart = Math.max(absStart, activeStart);\n const overlapEnd = Math.min(absEnd, activeEnd);\n\n if (overlapStart < overlapEnd) {\n if (absStart < overlapStart) {\n const part = text.substring(0, overlapStart - absStart);\n append(`${syntaxColor}${part}${ANSI.RESET}`);\n }\n const activePart = text.substring(overlapStart - absStart, overlapEnd - absStart);\n append(`${theme.main}${ANSI.UNDERLINE}${activePart}${ANSI.RESET}`);\n\n if (absEnd > overlapEnd) {\n const part = text.substring(overlapEnd - absStart);\n append(`${syntaxColor}${part}${ANSI.RESET}`);\n }\n } else {\n append(`${syntaxColor}${text}${ANSI.RESET}`);\n }\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (char === '\\u001b[Z') {\n this.moveFocus(-1); return;\n }\n if (char === '\\t') {\n this.moveFocus(1); return;\n }\n if (char === '\\r' || char === '\\n') {\n this.submitCode(); return;\n }\n\n const activeTokenIdx = this.variableTokens[this.activeVarIndex];\n const varName = this.tokens[activeTokenIdx].value;\n const val = this.values[varName] || '';\n\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.cursor > 0) {\n const pre = val.slice(0, this.cursor - 1);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + post;\n this.cursor--;\n this.render(false);\n }\n return;\n }\n\n if (this.isLeft(char)) {\n if (this.cursor > 0) this.cursor--;\n this.render(false);\n return;\n }\n if (this.isRight(char)) {\n if (this.cursor < val.length) this.cursor++;\n this.render(false);\n return;\n }\n\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n const pre = val.slice(0, this.cursor);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + char + post;\n this.cursor += char.length;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') this.moveFocus(-1);\n else if (event.scroll === 'down') this.moveFocus(1);\n }\n }\n\n private moveFocus(direction: number) {\n const nextIndex = this.activeVarIndex + direction;\n if (nextIndex >= 0 && nextIndex < this.variableTokens.length) {\n this.activeVarIndex = nextIndex;\n const varName = this.tokens[this.variableTokens[this.activeVarIndex]].value;\n this.cursor = (this.values[varName] || '').length;\n this.render(false);\n }\n }\n\n private submitCode() {\n let result = '';\n this.tokens.forEach(token => {\n if (token.type === 'static') {\n result += token.value;\n } else {\n result += this.values[token.value] || '';\n }\n });\n this.submit(result);\n }\n}\n"],"names":["CodePrompt","Prompt","parseTemplate","regex","lastIndex","match","exec","options","template","index","tokens","push","type","value","substring","variableTokens","length","cleanup","lastLinesUp","print","render","firstRender","fullRawText","activeVarStart","activeVarEnd","activeTokenIdx","activeVarIndex","forEach","token","idx","val","values","highlighted","shouldHighlight","highlight","lang","language","highlightedText","visibleIdx","activeColor","i","char","sequence","ANSI","RESET","UNDERLINE","theme","main","appendSegment","s","warningMsg","FG_YELLOW","prefix","success","BOLD","title","message","suffix","muted","fullOutput","renderFrame","cursorAbsPos","cursor","textBeforeCursor","rowsBefore","split","cursorRow","cursorCol","stringWidth","totalSnippetLines","linesUp","SHOW_CURSOR","CURSOR_LEFT","text","absStart","activeStart","activeEnd","syntaxColor","append","absEnd","overlapStart","Math","max","overlapEnd","min","part","activePart","handleInput","_key","moveFocus","submitCode","varName","pre","slice","post","isLeft","isRight","test","startsWith","handleMouse","event","action","scroll","direction","nextIndex","result","submit","name","activeName"],"mappings":"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"}