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,66 +1,76 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TablePrompt = 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
- const utils_1 = require("../utils");
9
- class TablePrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.selectedIndex = 0;
13
- this.scrollTop = 0;
14
- this.colWidths = [];
15
- this.pageSize = options.rows || 7;
16
- this.calculateColWidths();
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "TablePrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return TablePrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ const _symbols = require("../symbols");
15
+ const _utils = require("../utils");
16
+ function _define_property(obj, key, value) {
17
+ if (key in obj) {
18
+ Object.defineProperty(obj, key, {
19
+ value: value,
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true
23
+ });
24
+ } else {
25
+ obj[key] = value;
17
26
  }
27
+ return obj;
28
+ }
29
+ let TablePrompt = class TablePrompt extends _base.Prompt {
18
30
  calculateColWidths() {
19
31
  const { columns, data } = this.options;
20
- this.colWidths = columns.map(c => (0, utils_1.stringWidth)(c));
21
- data.forEach(row => {
22
- row.row.forEach((cell, idx) => {
32
+ this.colWidths = columns.map((c)=>(0, _utils.stringWidth)(c));
33
+ data.forEach((row)=>{
34
+ row.row.forEach((cell, idx)=>{
23
35
  if (idx < this.colWidths.length) {
24
- this.colWidths[idx] = Math.max(this.colWidths[idx], (0, utils_1.stringWidth)(cell));
36
+ this.colWidths[idx] = Math.max(this.colWidths[idx], (0, _utils.stringWidth)(cell));
25
37
  }
26
38
  });
27
39
  });
28
40
  // Add padding
29
- this.colWidths = this.colWidths.map(w => w + 2);
41
+ this.colWidths = this.colWidths.map((w)=>w + 2);
30
42
  }
31
43
  render(_firstRender) {
32
44
  // Scroll Logic
33
45
  if (this.selectedIndex < this.scrollTop) {
34
46
  this.scrollTop = this.selectedIndex;
35
- }
36
- else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
47
+ } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
37
48
  this.scrollTop = this.selectedIndex - this.pageSize + 1;
38
49
  }
39
50
  const maxScroll = Math.max(0, this.options.data.length - this.pageSize);
40
51
  this.scrollTop = Math.min(this.scrollTop, maxScroll);
41
52
  let output = '';
42
53
  // Title
43
- output += `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
54
+ output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
44
55
  // Table Header
45
56
  let headerStr = ' '; // Indent for pointer space
46
- this.options.columns.forEach((col, i) => {
57
+ this.options.columns.forEach((col, i)=>{
47
58
  headerStr += this.pad(col, this.colWidths[i]);
48
59
  });
49
- output += `${ansi_1.ANSI.BOLD}${headerStr}${ansi_1.ANSI.RESET}\n`;
60
+ output += `${_ansi.ANSI.BOLD}${headerStr}${_ansi.ANSI.RESET}\n`;
50
61
  // Table Body
51
62
  const visibleRows = this.options.data.slice(this.scrollTop, this.scrollTop + this.pageSize);
52
- visibleRows.forEach((item, index) => {
63
+ visibleRows.forEach((item, index)=>{
53
64
  const actualIndex = this.scrollTop + index;
54
- if (index > 0)
55
- output += '\n';
65
+ if (index > 0) output += '\n';
56
66
  const isSelected = actualIndex === this.selectedIndex;
57
- const pointer = isSelected ? `${theme_1.theme.main}${symbols_1.symbols.pointer}${ansi_1.ANSI.RESET} ` : ' ';
67
+ const pointer = isSelected ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET} ` : ' ';
58
68
  let rowStr = '';
59
- item.row.forEach((cell, colIdx) => {
69
+ item.row.forEach((cell, colIdx)=>{
60
70
  const width = this.colWidths[colIdx];
61
71
  let cellStr = this.pad(cell, width);
62
72
  if (isSelected) {
63
- cellStr = `${theme_1.theme.main}${cellStr}${ansi_1.ANSI.RESET}`;
73
+ cellStr = `${_theme.theme.main}${cellStr}${_ansi.ANSI.RESET}`;
64
74
  }
65
75
  rowStr += cellStr;
66
76
  });
@@ -69,9 +79,8 @@ class TablePrompt extends base_1.Prompt {
69
79
  this.renderFrame(output);
70
80
  }
71
81
  pad(str, width) {
72
- const len = (0, utils_1.stringWidth)(str);
73
- if (len >= width)
74
- return str;
82
+ const len = (0, _utils.stringWidth)(str);
83
+ if (len >= width) return str;
75
84
  return str + ' '.repeat(width - len);
76
85
  }
77
86
  handleInput(char) {
@@ -95,12 +104,17 @@ class TablePrompt extends base_1.Prompt {
95
104
  if (event.scroll === 'up') {
96
105
  this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.data.length - 1;
97
106
  this.render(false);
98
- }
99
- else if (event.scroll === 'down') {
107
+ } else if (event.scroll === 'down') {
100
108
  this.selectedIndex = this.selectedIndex < this.options.data.length - 1 ? this.selectedIndex + 1 : 0;
101
109
  this.render(false);
102
110
  }
103
111
  }
104
112
  }
105
- }
106
- exports.TablePrompt = TablePrompt;
113
+ constructor(options){
114
+ super(options), _define_property(this, "selectedIndex", 0), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", void 0), _define_property(this, "colWidths", []);
115
+ this.pageSize = options.rows || 7;
116
+ this.calculateColWidths();
117
+ }
118
+ };
119
+
120
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/table.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { TableOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class TablePrompt<V> extends Prompt<V, TableOptions<V>> {\n private selectedIndex: number = 0;\n private scrollTop: number = 0;\n private readonly pageSize: number;\n private colWidths: number[] = [];\n\n constructor(options: TableOptions<V>) {\n super(options);\n this.pageSize = options.rows || 7;\n this.calculateColWidths();\n }\n\n private calculateColWidths() {\n const { columns, data } = this.options;\n this.colWidths = columns.map(c => stringWidth(c));\n\n data.forEach(row => {\n row.row.forEach((cell, idx) => {\n if (idx < this.colWidths.length) {\n this.colWidths[idx] = Math.max(this.colWidths[idx], stringWidth(cell));\n }\n });\n });\n\n // Add padding\n this.colWidths = this.colWidths.map(w => w + 2);\n }\n\n protected render(_firstRender: boolean) {\n // Scroll Logic\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 const maxScroll = Math.max(0, this.options.data.length - this.pageSize);\n this.scrollTop = Math.min(this.scrollTop, maxScroll);\n\n let output = '';\n\n // Title\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Table Header\n let headerStr = ' '; // Indent for pointer space\n this.options.columns.forEach((col, i) => {\n headerStr += this.pad(col, this.colWidths[i]);\n });\n output += `${ANSI.BOLD}${headerStr}${ANSI.RESET}\\n`;\n\n // Table Body\n const visibleRows = this.options.data.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleRows.forEach((item, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n const isSelected = actualIndex === this.selectedIndex;\n const pointer = isSelected ? `${theme.main}${symbols.pointer}${ANSI.RESET} ` : ' ';\n\n let rowStr = '';\n item.row.forEach((cell, colIdx) => {\n const width = this.colWidths[colIdx];\n let cellStr = this.pad(cell, width);\n\n if (isSelected) {\n cellStr = `${theme.main}${cellStr}${ANSI.RESET}`;\n }\n rowStr += cellStr;\n });\n\n output += `${pointer}${rowStr}`;\n });\n\n this.renderFrame(output);\n }\n\n private pad(str: string, width: number): string {\n const len = stringWidth(str);\n if (len >= width) return str;\n return str + ' '.repeat(width - len);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n this.submit(this.options.data[this.selectedIndex].value);\n return;\n }\n\n if (this.isUp(char)) {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.data.length - 1;\n this.render(false);\n return;\n }\n\n if (this.isDown(char)) {\n this.selectedIndex = this.selectedIndex < this.options.data.length - 1 ? this.selectedIndex + 1 : 0;\n this.render(false);\n return;\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.data.length - 1;\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = this.selectedIndex < this.options.data.length - 1 ? this.selectedIndex + 1 : 0;\n this.render(false);\n }\n }\n }\n}\n"],"names":["TablePrompt","Prompt","calculateColWidths","columns","data","options","colWidths","map","c","stringWidth","forEach","row","cell","idx","length","Math","max","w","render","_firstRender","selectedIndex","scrollTop","pageSize","maxScroll","min","output","theme","success","ANSI","RESET","BOLD","title","message","headerStr","col","i","pad","visibleRows","slice","item","index","actualIndex","isSelected","pointer","main","symbols","rowStr","colIdx","width","cellStr","renderFrame","str","len","repeat","handleInput","char","submit","value","isUp","isDown","handleMouse","event","action","scroll","rows"],"mappings":"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"}
@@ -1,27 +1,32 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TextPrompt = 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
- const utils_1 = require("../utils");
9
- // --- Implementation: Text Prompt ---
10
- class TextPrompt extends base_1.Prompt {
11
- constructor(options) {
12
- super(options);
13
- this.errorMsg = '';
14
- // cursor is now an index into the grapheme segments array
15
- this.cursor = 0;
16
- this.hasTyped = false;
17
- this.segments = [];
18
- this.lastLinesUp = 0;
19
- this.ghost = '';
20
- this.value = options.initial || '';
21
- // Initialize segments from value
22
- this.segments = (0, utils_1.safeSplit)(this.value);
23
- this.cursor = this.segments.length;
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "TextPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return TextPrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ const _symbols = require("../symbols");
15
+ const _utils = require("../utils");
16
+ function _define_property(obj, key, value) {
17
+ if (key in obj) {
18
+ Object.defineProperty(obj, key, {
19
+ value: value,
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true
23
+ });
24
+ } else {
25
+ obj[key] = value;
24
26
  }
27
+ return obj;
28
+ }
29
+ let TextPrompt = class TextPrompt extends _base.Prompt {
25
30
  triggerSuggest() {
26
31
  if (!this.options.suggest || this.cursor !== this.segments.length) {
27
32
  this.ghost = '';
@@ -30,27 +35,24 @@ class TextPrompt extends base_1.Prompt {
30
35
  const currentValue = this.segments.join('');
31
36
  const result = this.options.suggest(currentValue);
32
37
  if (result instanceof Promise) {
33
- result.then(suggestion => {
38
+ result.then((suggestion)=>{
34
39
  // Check if value is still the same (avoid race condition)
35
40
  if (this.segments.join('') === currentValue) {
36
41
  if (suggestion.startsWith(currentValue) && suggestion.length > currentValue.length) {
37
42
  this.ghost = suggestion.slice(currentValue.length);
38
- }
39
- else {
43
+ } else {
40
44
  this.ghost = '';
41
45
  }
42
46
  this.render(false);
43
47
  }
44
48
  });
45
- }
46
- else {
49
+ } else {
47
50
  if (result.startsWith(currentValue) && result.length > currentValue.length) {
48
51
  this.ghost = result.slice(currentValue.length);
49
- }
50
- else {
52
+ } else {
51
53
  this.ghost = '';
52
54
  }
53
- // render will be called by the caller of triggerSuggest usually, but here we might need to ensure it
55
+ // render will be called by the caller of triggerSuggest usually, but here we might need to ensure it
54
56
  }
55
57
  }
56
58
  render(firstRender) {
@@ -60,9 +62,9 @@ class TextPrompt extends base_1.Prompt {
60
62
  this.lastLinesUp = 0;
61
63
  // Calculate available width
62
64
  // 1. Prepare Prompt Label
63
- const icon = this.errorMsg ? `${theme_1.theme.error}${symbols_1.symbols.cross}` : `${theme_1.theme.success}?`;
64
- const hint = this.options.multiline ? ` ${theme_1.theme.muted}(Press Ctrl+D to submit)${ansi_1.ANSI.RESET}` : '';
65
- const prefix = `${icon} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}${hint} `;
65
+ const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
66
+ const hint = this.options.multiline ? ` ${_theme.theme.muted}(Press Ctrl+D to submit)${_ansi.ANSI.RESET}` : '';
67
+ const prefix = `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${hint} `;
66
68
  // We need visual length of prefix to calculate available space for input on the first line
67
69
  const prefixVisualLen = this.stripAnsi(prefix).length;
68
70
  // 2. Prepare Value Display
@@ -73,12 +75,13 @@ class TextPrompt extends base_1.Prompt {
73
75
  this.value = this.segments.join('');
74
76
  if (this.segments.length === 0 && this.options.placeholder && !this.errorMsg && !this.hasTyped) {
75
77
  // Placeholder case
76
- const placeholder = `${theme_1.theme.muted}${this.options.placeholder}${ansi_1.ANSI.RESET}`;
77
- displayValueLines = [placeholder];
78
+ const placeholder = `${_theme.theme.muted}${this.options.placeholder}${_ansi.ANSI.RESET}`;
79
+ displayValueLines = [
80
+ placeholder
81
+ ];
78
82
  cursorRelativeRow = 0;
79
83
  cursorRelativeCol = 0;
80
- }
81
- else {
84
+ } else {
82
85
  const maskChar = this.options.mask ?? (this.options.isPassword ? '*' : undefined);
83
86
  // Note: password masking replaces each grapheme with '*'
84
87
  // Split by lines (for multiline support)
@@ -91,17 +94,15 @@ class TextPrompt extends base_1.Prompt {
91
94
  cursorLineIndex = 0;
92
95
  // If we want visual cursor position, we need visual width of segments.
93
96
  let visualColIndex = 0;
94
- for (let i = 0; i < this.cursor; i++) {
97
+ for(let i = 0; i < this.cursor; i++){
95
98
  const seg = this.segments[i];
96
99
  if (seg === '\n') {
97
100
  cursorLineIndex++;
98
101
  visualColIndex = 0;
99
- }
100
- else {
102
+ } else {
101
103
  if (maskChar !== undefined) {
102
104
  visualColIndex += maskChar.length;
103
- }
104
- else {
105
+ } else {
105
106
  visualColIndex += this.getSegmentWidth(seg);
106
107
  }
107
108
  }
@@ -112,53 +113,50 @@ class TextPrompt extends base_1.Prompt {
112
113
  // We need to reconstruct lines from segments to apply styling/truncation logic per line.
113
114
  let currentLineSegments = [];
114
115
  const processedLines = []; // Array of segment arrays
115
- for (const seg of this.segments) {
116
+ for (const seg of this.segments){
116
117
  if (seg === '\n') {
117
118
  processedLines.push(currentLineSegments);
118
119
  currentLineSegments = [];
119
- }
120
- else {
120
+ } else {
121
121
  currentLineSegments.push(seg);
122
122
  }
123
123
  }
124
124
  processedLines.push(currentLineSegments); // Last line
125
- processedLines.forEach((lineSegs) => {
125
+ processedLines.forEach((lineSegs)=>{
126
126
  // Reconstruct line string for display calculation
127
127
  // If password, join with *?
128
128
  let visibleLine = '';
129
129
  if (maskChar !== undefined) {
130
130
  visibleLine = maskChar.repeat(lineSegs.length);
131
- }
132
- else {
131
+ } else {
133
132
  visibleLine = lineSegs.join('');
134
133
  }
135
- displayValueLines.push(theme_1.theme.main + visibleLine + ansi_1.ANSI.RESET);
134
+ displayValueLines.push(_theme.theme.main + visibleLine + _ansi.ANSI.RESET);
136
135
  });
137
136
  // Append ghost text if applicable
138
137
  if (this.ghost && this.cursor === this.segments.length && displayValueLines.length > 0) {
139
- displayValueLines[displayValueLines.length - 1] += theme_1.theme.muted + this.ghost + ansi_1.ANSI.RESET;
138
+ displayValueLines[displayValueLines.length - 1] += _theme.theme.muted + this.ghost + _ansi.ANSI.RESET;
140
139
  }
141
140
  }
142
141
  // 3. Assemble Output
143
142
  let output = '';
144
- displayValueLines.forEach((lineStr, idx) => {
143
+ displayValueLines.forEach((lineStr, idx)=>{
145
144
  if (idx === 0) {
146
145
  output += prefix + lineStr;
147
- }
148
- else {
146
+ } else {
149
147
  output += '\n' + lineStr;
150
148
  }
151
149
  });
152
150
  if (this.errorMsg) {
153
- output += `\n${theme_1.theme.error}>> ${this.errorMsg}${ansi_1.ANSI.RESET}`;
151
+ output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
154
152
  }
155
153
  // 4. Render Frame
156
154
  this.renderFrame(output);
157
- this.print(ansi_1.ANSI.SHOW_CURSOR);
155
+ this.print(_ansi.ANSI.SHOW_CURSOR);
158
156
  // 5. Move Cursor
159
157
  const errorOffset = this.errorMsg ? 1 : 0;
160
158
  const totalRows = displayValueLines.length + errorOffset;
161
- const linesUp = (totalRows - 1) - cursorRelativeRow;
159
+ const linesUp = totalRows - 1 - cursorRelativeRow;
162
160
  if (linesUp > 0) {
163
161
  this.print(`\x1b[${linesUp}A`);
164
162
  }
@@ -166,18 +164,17 @@ class TextPrompt extends base_1.Prompt {
166
164
  let targetCol = 0;
167
165
  if (cursorRelativeRow === 0) {
168
166
  targetCol = prefixVisualLen + cursorRelativeCol;
169
- }
170
- else {
167
+ } else {
171
168
  targetCol = cursorRelativeCol;
172
169
  }
173
- this.print(ansi_1.ANSI.CURSOR_LEFT);
170
+ this.print(_ansi.ANSI.CURSOR_LEFT);
174
171
  if (targetCol > 0) {
175
172
  this.print(`\x1b[${targetCol}C`);
176
173
  }
177
174
  }
178
175
  // Helper to get width of a segment
179
176
  getSegmentWidth(seg) {
180
- return (0, utils_1.stringWidth)(seg);
177
+ return (0, _utils.stringWidth)(seg);
181
178
  }
182
179
  cleanup() {
183
180
  if (this.lastLinesUp > 0) {
@@ -190,7 +187,7 @@ class TextPrompt extends base_1.Prompt {
190
187
  // Tab (Accept Suggestion)
191
188
  if (char === '\t') {
192
189
  if (this.ghost) {
193
- const ghostSegments = (0, utils_1.safeSplit)(this.ghost);
190
+ const ghostSegments = (0, _utils.safeSplit)(this.ghost);
194
191
  this.segments.splice(this.cursor, 0, ...ghostSegments);
195
192
  this.cursor += ghostSegments.length;
196
193
  this.ghost = '';
@@ -261,7 +258,7 @@ class TextPrompt extends base_1.Prompt {
261
258
  // safeSplit the input char(s) - could be pasted text
262
259
  if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
263
260
  this.hasTyped = true;
264
- const newSegments = (0, utils_1.safeSplit)(char);
261
+ const newSegments = (0, _utils.safeSplit)(char);
265
262
  this.segments.splice(this.cursor, 0, ...newSegments);
266
263
  this.cursor += newSegments.length;
267
264
  this.errorMsg = '';
@@ -276,21 +273,19 @@ class TextPrompt extends base_1.Prompt {
276
273
  if (result instanceof Promise) {
277
274
  this.errorMsg = 'Validating...';
278
275
  this.render(false);
279
- result.then(valid => {
276
+ result.then((valid)=>{
280
277
  if (typeof valid === 'string' && valid.length > 0) {
281
278
  this.errorMsg = valid;
282
279
  this.render(false);
283
- }
284
- else if (valid === false) {
280
+ } else if (valid === false) {
285
281
  this.errorMsg = 'Invalid input';
286
282
  this.render(false);
287
- }
288
- else {
283
+ } else {
289
284
  this.errorMsg = '';
290
285
  this.render(false);
291
286
  this.submit(this.value);
292
287
  }
293
- }).catch(err => {
288
+ }).catch((err)=>{
294
289
  this.errorMsg = err.message || 'Validation failed';
295
290
  this.render(false);
296
291
  });
@@ -309,5 +304,14 @@ class TextPrompt extends base_1.Prompt {
309
304
  }
310
305
  this.submit(this.value);
311
306
  }
312
- }
313
- exports.TextPrompt = TextPrompt;
307
+ constructor(options){
308
+ super(options), _define_property(this, "errorMsg", ''), // cursor is now an index into the grapheme segments array
309
+ _define_property(this, "cursor", 0), _define_property(this, "hasTyped", false), _define_property(this, "segments", []), _define_property(this, "lastLinesUp", 0), _define_property(this, "ghost", '');
310
+ this.value = options.initial || '';
311
+ // Initialize segments from value
312
+ this.segments = (0, _utils.safeSplit)(this.value);
313
+ this.cursor = this.segments.length;
314
+ }
315
+ };
316
+
317
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/text.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { TextOptions } from '../types';\nimport { safeSplit, stringWidth } from '../utils';\n\n// --- Implementation: Text Prompt ---\nexport class TextPrompt<O extends TextOptions = TextOptions> extends Prompt<string, O> {\n protected errorMsg: string = '';\n // cursor is now an index into the grapheme segments array\n protected cursor: number = 0;\n protected hasTyped: boolean = false;\n protected segments: string[] = [];\n protected lastLinesUp: number = 0;\n private ghost: string = '';\n\n constructor(options: O) {\n super(options);\n this.value = options.initial || '';\n // Initialize segments from value\n this.segments = safeSplit(this.value);\n this.cursor = this.segments.length;\n }\n\n private triggerSuggest() {\n if (!this.options.suggest || this.cursor !== this.segments.length) {\n this.ghost = '';\n return;\n }\n\n const currentValue = this.segments.join('');\n const result = this.options.suggest(currentValue);\n\n if (result instanceof Promise) {\n result.then(suggestion => {\n // Check if value is still the same (avoid race condition)\n if (this.segments.join('') === currentValue) {\n if (suggestion.startsWith(currentValue) && suggestion.length > currentValue.length) {\n this.ghost = suggestion.slice(currentValue.length);\n } else {\n this.ghost = '';\n }\n this.render(false);\n }\n });\n } else {\n if (result.startsWith(currentValue) && result.length > currentValue.length) {\n this.ghost = result.slice(currentValue.length);\n } else {\n this.ghost = '';\n }\n // render will be called by the caller of triggerSuggest usually, but here we might need to ensure it\n }\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 // Calculate available width\n // 1. Prepare Prompt Label\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n const hint = this.options.multiline ? ` ${theme.muted}(Press Ctrl+D to submit)${ANSI.RESET}` : '';\n const prefix = `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}${hint} `;\n\n // We need visual length of prefix to calculate available space for input on the first line\n const prefixVisualLen = this.stripAnsi(prefix).length;\n\n // 2. Prepare Value Display\n let displayValueLines: string[] = [];\n let cursorRelativeRow = 0;\n let cursorRelativeCol = 0; // Visual column index\n\n // Reconstruct value from segments for logic that needs raw string\n this.value = this.segments.join('');\n\n if (this.segments.length === 0 && this.options.placeholder && !this.errorMsg && !this.hasTyped) {\n // Placeholder case\n const placeholder = `${theme.muted}${this.options.placeholder}${ANSI.RESET}`;\n displayValueLines = [placeholder];\n cursorRelativeRow = 0;\n cursorRelativeCol = 0;\n } else {\n const maskChar = this.options.mask ?? (this.options.isPassword ? '*' : undefined);\n // Note: password masking replaces each grapheme with '*'\n\n // Split by lines (for multiline support)\n\n // Determine which line the cursor is on\n // We need to map 'cursor' (segments index) to line/col.\n // This is tricky because segments might contain '\\n'.\n // safeSplit treats '\\n' as a segment.\n\n let cursorLineIndex = 0;\n\n // Let's iterate segments to find cursor position (row, col)\n cursorLineIndex = 0;\n // If we want visual cursor position, we need visual width of segments.\n let visualColIndex = 0;\n\n for (let i = 0; i < this.cursor; i++) {\n const seg = this.segments[i];\n if (seg === '\\n') {\n cursorLineIndex++;\n visualColIndex = 0;\n } else {\n if (maskChar !== undefined) {\n visualColIndex += maskChar.length;\n } else {\n visualColIndex += this.getSegmentWidth(seg);\n }\n }\n }\n\n cursorRelativeRow = cursorLineIndex;\n cursorRelativeCol = visualColIndex;\n\n // Now prepare lines for display (scrolling/truncation)\n // We need to reconstruct lines from segments to apply styling/truncation logic per line.\n\n let currentLineSegments: string[] = [];\n const processedLines: string[][] = []; // Array of segment arrays\n\n for (const seg of this.segments) {\n if (seg === '\\n') {\n processedLines.push(currentLineSegments);\n currentLineSegments = [];\n } else {\n currentLineSegments.push(seg);\n }\n }\n processedLines.push(currentLineSegments); // Last line\n\n processedLines.forEach((lineSegs: string[]) => {\n\n // Reconstruct line string for display calculation\n // If password, join with *?\n let visibleLine = '';\n if (maskChar !== undefined) {\n visibleLine = maskChar.repeat(lineSegs.length);\n } else {\n visibleLine = lineSegs.join('');\n }\n\n displayValueLines.push(theme.main + visibleLine + ANSI.RESET);\n });\n\n // Append ghost text if applicable\n if (this.ghost && this.cursor === this.segments.length && displayValueLines.length > 0) {\n displayValueLines[displayValueLines.length - 1] += theme.muted + this.ghost + ANSI.RESET;\n }\n }\n\n // 3. Assemble Output\n let output = '';\n displayValueLines.forEach((lineStr, idx) => {\n if (idx === 0) {\n output += prefix + lineStr;\n } else {\n output += '\\n' + lineStr;\n }\n });\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n // 4. Render Frame\n this.renderFrame(output);\n\n this.print(ANSI.SHOW_CURSOR);\n\n // 5. Move Cursor\n const errorOffset = this.errorMsg ? 1 : 0;\n const totalRows = displayValueLines.length + errorOffset;\n\n const linesUp = (totalRows - 1) - cursorRelativeRow;\n if (linesUp > 0) {\n this.print(`\\x1b[${linesUp}A`);\n }\n this.lastLinesUp = linesUp;\n\n let targetCol = 0;\n if (cursorRelativeRow === 0) {\n targetCol = prefixVisualLen + cursorRelativeCol;\n } else {\n targetCol = cursorRelativeCol;\n }\n\n this.print(ANSI.CURSOR_LEFT);\n if (targetCol > 0) {\n this.print(`\\x1b[${targetCol}C`);\n }\n }\n\n // Helper to get width of a segment\n private getSegmentWidth(seg: string): number {\n return stringWidth(seg);\n }\n\n protected cleanup() {\n if (this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n this.lastLinesUp = 0;\n }\n super.cleanup();\n }\n\n protected handleInput(char: string) {\n // Tab (Accept Suggestion)\n if (char === '\\t') {\n if (this.ghost) {\n const ghostSegments = safeSplit(this.ghost);\n this.segments.splice(this.cursor, 0, ...ghostSegments);\n this.cursor += ghostSegments.length;\n this.ghost = '';\n this.errorMsg = '';\n this.triggerSuggest(); // Maybe fetch next suggestion?\n this.render(false);\n }\n return;\n }\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n if (this.options.multiline) {\n // Insert newline segment\n this.segments.splice(this.cursor, 0, '\\n');\n this.cursor++;\n this.render(false);\n return;\n }\n\n this.validateAndSubmit();\n return;\n }\n\n // Ctrl+D / Ctrl+S\n if (this.options.multiline && (char === '\\u0004' || char === '\\u0013')) {\n this.validateAndSubmit();\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n this.hasTyped = true;\n if (this.cursor > 0) {\n // Remove segment at cursor - 1\n this.segments.splice(this.cursor - 1, 1);\n this.cursor--;\n this.errorMsg = '';\n this.triggerSuggest();\n this.render(false);\n }\n return;\n }\n\n // Arrow Left\n if (this.isLeft(char)) {\n if (this.cursor > 0) {\n this.cursor--;\n this.render(false);\n }\n return;\n }\n\n // Arrow Right\n if (this.isRight(char)) {\n if (this.cursor < this.segments.length) {\n this.cursor++;\n this.render(false);\n }\n return;\n }\n\n // Delete key\n if (char === '\\u001b[3~') {\n this.hasTyped = true;\n if (this.cursor < this.segments.length) {\n this.segments.splice(this.cursor, 1);\n this.errorMsg = '';\n this.triggerSuggest();\n this.render(false);\n }\n return;\n }\n\n // Regular Typing & Paste\n // safeSplit the input char(s) - could be pasted text\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n this.hasTyped = true;\n const newSegments = safeSplit(char);\n this.segments.splice(this.cursor, 0, ...newSegments);\n this.cursor += newSegments.length;\n this.errorMsg = '';\n this.triggerSuggest();\n this.render(false);\n }\n }\n\n private validateAndSubmit() {\n this.value = this.segments.join('');\n if (this.options.validate) {\n const result = this.options.validate(this.value);\n\n if (result instanceof Promise) {\n this.errorMsg = 'Validating...';\n this.render(false);\n\n result.then(valid => {\n if (typeof valid === 'string' && valid.length > 0) {\n this.errorMsg = valid;\n this.render(false);\n } else if (valid === false) {\n this.errorMsg = 'Invalid input';\n this.render(false);\n } else {\n this.errorMsg = '';\n this.render(false);\n this.submit(this.value);\n }\n }).catch(err => {\n this.errorMsg = err.message || 'Validation failed';\n this.render(false);\n });\n return;\n }\n\n if (typeof result === 'string' && result.length > 0) {\n this.errorMsg = result;\n this.render(false);\n return;\n }\n if (result === false) {\n this.errorMsg = 'Invalid input';\n this.render(false);\n return;\n }\n }\n\n this.submit(this.value);\n }\n}\n"],"names":["TextPrompt","Prompt","triggerSuggest","options","suggest","cursor","segments","length","ghost","currentValue","join","result","Promise","then","suggestion","startsWith","slice","render","firstRender","lastLinesUp","print","icon","errorMsg","theme","error","symbols","cross","success","hint","multiline","muted","ANSI","RESET","prefix","BOLD","title","message","prefixVisualLen","stripAnsi","displayValueLines","cursorRelativeRow","cursorRelativeCol","value","placeholder","hasTyped","maskChar","mask","isPassword","undefined","cursorLineIndex","visualColIndex","i","seg","getSegmentWidth","currentLineSegments","processedLines","push","forEach","lineSegs","visibleLine","repeat","main","output","lineStr","idx","renderFrame","SHOW_CURSOR","errorOffset","totalRows","linesUp","targetCol","CURSOR_LEFT","stringWidth","cleanup","handleInput","char","ghostSegments","safeSplit","splice","validateAndSubmit","isLeft","isRight","test","newSegments","validate","valid","submit","catch","err","initial"],"mappings":"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"}