mepcli 2.0.0-beta.2 → 2.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/dist/ansi.d.ts +36 -0
  2. package/dist/ansi.js +1 -0
  3. package/dist/base.d.ts +60 -0
  4. package/dist/base.js +1 -0
  5. package/dist/{src/core.js → core.d.ts} +175 -345
  6. package/dist/core.js +1 -0
  7. package/dist/data/countries.d.ts +2 -0
  8. package/dist/data/countries.js +1 -0
  9. package/dist/data/licenses.d.ts +2 -0
  10. package/dist/data/licenses.js +1 -0
  11. package/dist/highlight.d.ts +7 -0
  12. package/dist/highlight.js +1 -0
  13. package/dist/index.d.ts +48 -0
  14. package/dist/index.js +1 -0
  15. package/dist/input.d.ts +14 -0
  16. package/dist/input.js +1 -0
  17. package/dist/pipeline.d.ts +90 -0
  18. package/dist/pipeline.js +1 -0
  19. package/dist/prompts/autocomplete.d.ts +22 -0
  20. package/dist/prompts/autocomplete.js +1 -0
  21. package/dist/prompts/box.d.ts +21 -0
  22. package/dist/prompts/box.js +4 -0
  23. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  24. package/dist/prompts/breadcrumb-search.js +2 -0
  25. package/dist/prompts/breadcrumb.d.ts +32 -0
  26. package/dist/prompts/breadcrumb.js +3 -0
  27. package/dist/prompts/byte.d.ts +13 -0
  28. package/dist/prompts/byte.js +5 -0
  29. package/dist/prompts/calculator.d.ts +17 -0
  30. package/dist/prompts/calculator.js +3 -0
  31. package/dist/prompts/calendar.d.ts +33 -0
  32. package/dist/prompts/calendar.js +3 -0
  33. package/dist/prompts/checkbox.d.ts +13 -0
  34. package/dist/prompts/checkbox.js +2 -0
  35. package/dist/prompts/code.d.ts +19 -0
  36. package/dist/prompts/code.js +4 -0
  37. package/dist/prompts/color.d.ts +14 -0
  38. package/dist/prompts/color.js +10 -0
  39. package/dist/prompts/confirm.d.ts +8 -0
  40. package/dist/prompts/confirm.js +1 -0
  41. package/dist/prompts/connection-string.d.ts +18 -0
  42. package/dist/prompts/connection-string.js +1 -0
  43. package/dist/prompts/cron.d.ts +13 -0
  44. package/dist/prompts/cron.js +4 -0
  45. package/dist/prompts/curl-utils.d.ts +25 -0
  46. package/dist/prompts/curl-utils.js +1 -0
  47. package/dist/prompts/curl.d.ts +41 -0
  48. package/dist/prompts/curl.js +12 -0
  49. package/dist/prompts/data-inspector.d.ts +22 -0
  50. package/dist/prompts/data-inspector.js +5 -0
  51. package/dist/prompts/date.d.ts +12 -0
  52. package/dist/prompts/date.js +2 -0
  53. package/dist/prompts/dependency.d.ts +16 -0
  54. package/dist/prompts/dependency.js +3 -0
  55. package/dist/prompts/dial.d.ts +10 -0
  56. package/dist/prompts/dial.js +3 -0
  57. package/dist/prompts/diff.d.ts +10 -0
  58. package/dist/prompts/diff.js +10 -0
  59. package/dist/prompts/draw.d.ts +20 -0
  60. package/dist/prompts/draw.js +6 -0
  61. package/dist/prompts/editor.d.ts +14 -0
  62. package/dist/prompts/editor.js +2 -0
  63. package/dist/prompts/emoji.d.ts +18 -0
  64. package/dist/prompts/emoji.js +5 -0
  65. package/dist/prompts/exec.d.ts +17 -0
  66. package/dist/prompts/exec.js +1 -0
  67. package/dist/prompts/file.d.ts +21 -0
  68. package/dist/prompts/file.js +2 -0
  69. package/dist/prompts/form.d.ts +18 -0
  70. package/dist/prompts/form.js +1 -0
  71. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  72. package/dist/prompts/fuzzy-multi-column.js +2 -0
  73. package/dist/prompts/fuzzy.d.ts +12 -0
  74. package/dist/prompts/fuzzy.js +2 -0
  75. package/dist/prompts/gauge.d.ts +21 -0
  76. package/dist/prompts/gauge.js +4 -0
  77. package/dist/prompts/grid.d.ts +14 -0
  78. package/dist/prompts/grid.js +2 -0
  79. package/dist/prompts/heatmap.d.ts +13 -0
  80. package/dist/prompts/heatmap.js +2 -0
  81. package/dist/prompts/ip.d.ts +11 -0
  82. package/dist/prompts/ip.js +3 -0
  83. package/dist/prompts/kanban.d.ts +17 -0
  84. package/dist/prompts/kanban.js +4 -0
  85. package/dist/prompts/keypress.d.ts +7 -0
  86. package/dist/prompts/keypress.js +1 -0
  87. package/dist/prompts/license.d.ts +9 -0
  88. package/dist/prompts/license.js +13 -0
  89. package/dist/prompts/list.d.ts +9 -0
  90. package/dist/prompts/list.js +1 -0
  91. package/dist/prompts/map.d.ts +17 -0
  92. package/dist/prompts/map.js +5 -0
  93. package/dist/prompts/match.d.ts +19 -0
  94. package/dist/prompts/match.js +7 -0
  95. package/dist/prompts/miller.d.ts +15 -0
  96. package/dist/prompts/miller.js +2 -0
  97. package/dist/prompts/multi-column-select.d.ts +10 -0
  98. package/dist/prompts/multi-column-select.js +2 -0
  99. package/dist/prompts/multi-range.d.ts +9 -0
  100. package/dist/prompts/multi-range.js +3 -0
  101. package/dist/prompts/multi-select.d.ts +15 -0
  102. package/dist/prompts/multi-select.js +4 -0
  103. package/dist/prompts/number.d.ts +11 -0
  104. package/dist/prompts/number.js +2 -0
  105. package/dist/prompts/otp.d.ts +10 -0
  106. package/dist/prompts/otp.js +2 -0
  107. package/dist/prompts/pattern.d.ts +22 -0
  108. package/dist/prompts/pattern.js +4 -0
  109. package/dist/prompts/phone.d.ts +41 -0
  110. package/dist/prompts/phone.js +3 -0
  111. package/dist/prompts/quiz-select.d.ts +10 -0
  112. package/dist/prompts/quiz-select.js +7 -0
  113. package/dist/prompts/quiz-text.d.ts +11 -0
  114. package/dist/prompts/quiz-text.js +8 -0
  115. package/dist/prompts/range.d.ts +9 -0
  116. package/dist/prompts/range.js +1 -0
  117. package/dist/prompts/rating.d.ts +8 -0
  118. package/dist/prompts/rating.js +1 -0
  119. package/dist/prompts/regex.d.ts +13 -0
  120. package/dist/prompts/regex.js +5 -0
  121. package/dist/prompts/region.d.ts +11 -0
  122. package/dist/prompts/region.js +5 -0
  123. package/dist/prompts/schedule.d.ts +20 -0
  124. package/dist/prompts/schedule.js +5 -0
  125. package/dist/prompts/scroll.d.ts +13 -0
  126. package/dist/prompts/scroll.js +1 -0
  127. package/dist/prompts/seat.d.ts +17 -0
  128. package/dist/prompts/seat.js +5 -0
  129. package/dist/prompts/select-range.d.ts +8 -0
  130. package/dist/prompts/select-range.js +3 -0
  131. package/dist/prompts/select.d.ts +15 -0
  132. package/dist/prompts/select.js +2 -0
  133. package/dist/prompts/semver.d.ts +6 -0
  134. package/dist/prompts/semver.js +1 -0
  135. package/dist/prompts/shortcut.d.ts +9 -0
  136. package/dist/prompts/shortcut.js +1 -0
  137. package/dist/prompts/slider.d.ts +8 -0
  138. package/dist/prompts/slider.js +1 -0
  139. package/dist/prompts/slot.d.ts +16 -0
  140. package/dist/prompts/slot.js +8 -0
  141. package/dist/prompts/snippet.d.ts +19 -0
  142. package/dist/prompts/snippet.js +4 -0
  143. package/dist/prompts/sort-grid.d.ts +16 -0
  144. package/dist/prompts/sort-grid.js +2 -0
  145. package/dist/prompts/sort.d.ts +14 -0
  146. package/dist/prompts/sort.js +2 -0
  147. package/dist/prompts/spam.d.ts +17 -0
  148. package/dist/prompts/spam.js +2 -0
  149. package/dist/prompts/spreadsheet.d.ts +21 -0
  150. package/dist/prompts/spreadsheet.js +7 -0
  151. package/dist/prompts/table.d.ts +14 -0
  152. package/dist/prompts/table.js +3 -0
  153. package/dist/prompts/text.d.ts +17 -0
  154. package/dist/prompts/text.js +2 -0
  155. package/dist/prompts/time.d.ts +12 -0
  156. package/dist/prompts/time.js +2 -0
  157. package/dist/prompts/toggle.d.ts +8 -0
  158. package/dist/prompts/toggle.js +1 -0
  159. package/dist/prompts/transfer.d.ts +18 -0
  160. package/dist/prompts/transfer.js +5 -0
  161. package/dist/prompts/tree-select.d.ts +31 -0
  162. package/dist/prompts/tree-select.js +3 -0
  163. package/dist/prompts/tree.d.ts +20 -0
  164. package/dist/prompts/tree.js +3 -0
  165. package/dist/prompts/wait.d.ts +18 -0
  166. package/dist/prompts/wait.js +1 -0
  167. package/dist/spinner.d.ts +33 -0
  168. package/dist/spinner.js +3 -0
  169. package/dist/symbols.d.ts +33 -0
  170. package/dist/symbols.js +1 -0
  171. package/dist/tasks.d.ts +57 -0
  172. package/dist/tasks.js +1 -0
  173. package/dist/theme.d.ts +2 -0
  174. package/dist/theme.js +1 -0
  175. package/dist/types.d.ts +503 -0
  176. package/dist/types.js +1 -0
  177. package/dist/utils.d.ts +81 -0
  178. package/dist/utils.js +1 -0
  179. package/package.json +8 -9
  180. package/dist/src/ansi.js +0 -50
  181. package/dist/src/ansi.js.map +0 -1
  182. package/dist/src/base.js +0 -258
  183. package/dist/src/base.js.map +0 -1
  184. package/dist/src/core.js.map +0 -1
  185. package/dist/src/data/countries.js +0 -569
  186. package/dist/src/data/countries.js.map +0 -1
  187. package/dist/src/data/licenses.js +0 -480
  188. package/dist/src/data/licenses.js.map +0 -1
  189. package/dist/src/highlight.js +0 -185
  190. package/dist/src/highlight.js.map +0 -1
  191. package/dist/src/index.js +0 -66
  192. package/dist/src/index.js.map +0 -1
  193. package/dist/src/input.js +0 -158
  194. package/dist/src/input.js.map +0 -1
  195. package/dist/src/pipeline.js +0 -273
  196. package/dist/src/pipeline.js.map +0 -1
  197. package/dist/src/prompts/autocomplete.js +0 -171
  198. package/dist/src/prompts/autocomplete.js.map +0 -1
  199. package/dist/src/prompts/box.js +0 -225
  200. package/dist/src/prompts/box.js.map +0 -1
  201. package/dist/src/prompts/breadcrumb-search.js +0 -260
  202. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  203. package/dist/src/prompts/breadcrumb.js +0 -307
  204. package/dist/src/prompts/breadcrumb.js.map +0 -1
  205. package/dist/src/prompts/byte.js +0 -176
  206. package/dist/src/prompts/byte.js.map +0 -1
  207. package/dist/src/prompts/calculator.js +0 -243
  208. package/dist/src/prompts/calculator.js.map +0 -1
  209. package/dist/src/prompts/calendar.js +0 -430
  210. package/dist/src/prompts/calendar.js.map +0 -1
  211. package/dist/src/prompts/checkbox.js +0 -159
  212. package/dist/src/prompts/checkbox.js.map +0 -1
  213. package/dist/src/prompts/code.js +0 -271
  214. package/dist/src/prompts/code.js.map +0 -1
  215. package/dist/src/prompts/color.js +0 -165
  216. package/dist/src/prompts/color.js.map +0 -1
  217. package/dist/src/prompts/confirm.js +0 -55
  218. package/dist/src/prompts/confirm.js.map +0 -1
  219. package/dist/src/prompts/connection-string.js +0 -120
  220. package/dist/src/prompts/connection-string.js.map +0 -1
  221. package/dist/src/prompts/cron.js +0 -207
  222. package/dist/src/prompts/cron.js.map +0 -1
  223. package/dist/src/prompts/curl-utils.js +0 -71
  224. package/dist/src/prompts/curl-utils.js.map +0 -1
  225. package/dist/src/prompts/curl.js +0 -431
  226. package/dist/src/prompts/curl.js.map +0 -1
  227. package/dist/src/prompts/data-inspector.js +0 -261
  228. package/dist/src/prompts/data-inspector.js.map +0 -1
  229. package/dist/src/prompts/date.js +0 -185
  230. package/dist/src/prompts/date.js.map +0 -1
  231. package/dist/src/prompts/dependency.js +0 -283
  232. package/dist/src/prompts/dependency.js.map +0 -1
  233. package/dist/src/prompts/dial.js +0 -124
  234. package/dist/src/prompts/dial.js.map +0 -1
  235. package/dist/src/prompts/diff.js +0 -118
  236. package/dist/src/prompts/diff.js.map +0 -1
  237. package/dist/src/prompts/draw.js +0 -191
  238. package/dist/src/prompts/draw.js.map +0 -1
  239. package/dist/src/prompts/editor.js +0 -234
  240. package/dist/src/prompts/editor.js.map +0 -1
  241. package/dist/src/prompts/emoji.js +0 -226
  242. package/dist/src/prompts/emoji.js.map +0 -1
  243. package/dist/src/prompts/exec.js +0 -151
  244. package/dist/src/prompts/exec.js.map +0 -1
  245. package/dist/src/prompts/file.js +0 -217
  246. package/dist/src/prompts/file.js.map +0 -1
  247. package/dist/src/prompts/form.js +0 -241
  248. package/dist/src/prompts/form.js.map +0 -1
  249. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  250. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  251. package/dist/src/prompts/fuzzy.js +0 -147
  252. package/dist/src/prompts/fuzzy.js.map +0 -1
  253. package/dist/src/prompts/gauge.js +0 -137
  254. package/dist/src/prompts/gauge.js.map +0 -1
  255. package/dist/src/prompts/grid.js +0 -191
  256. package/dist/src/prompts/grid.js.map +0 -1
  257. package/dist/src/prompts/heatmap.js +0 -147
  258. package/dist/src/prompts/heatmap.js.map +0 -1
  259. package/dist/src/prompts/ip.js +0 -138
  260. package/dist/src/prompts/ip.js.map +0 -1
  261. package/dist/src/prompts/kanban.js +0 -233
  262. package/dist/src/prompts/kanban.js.map +0 -1
  263. package/dist/src/prompts/keypress.js +0 -54
  264. package/dist/src/prompts/keypress.js.map +0 -1
  265. package/dist/src/prompts/license.js +0 -144
  266. package/dist/src/prompts/license.js.map +0 -1
  267. package/dist/src/prompts/list.js +0 -124
  268. package/dist/src/prompts/list.js.map +0 -1
  269. package/dist/src/prompts/map.js +0 -262
  270. package/dist/src/prompts/map.js.map +0 -1
  271. package/dist/src/prompts/match.js +0 -271
  272. package/dist/src/prompts/match.js.map +0 -1
  273. package/dist/src/prompts/miller.js +0 -228
  274. package/dist/src/prompts/miller.js.map +0 -1
  275. package/dist/src/prompts/multi-column-select.js +0 -176
  276. package/dist/src/prompts/multi-column-select.js.map +0 -1
  277. package/dist/src/prompts/multi-range.js +0 -189
  278. package/dist/src/prompts/multi-range.js.map +0 -1
  279. package/dist/src/prompts/multi-select.js +0 -183
  280. package/dist/src/prompts/multi-select.js.map +0 -1
  281. package/dist/src/prompts/number.js +0 -166
  282. package/dist/src/prompts/number.js.map +0 -1
  283. package/dist/src/prompts/otp.js +0 -107
  284. package/dist/src/prompts/otp.js.map +0 -1
  285. package/dist/src/prompts/pattern.js +0 -252
  286. package/dist/src/prompts/pattern.js.map +0 -1
  287. package/dist/src/prompts/phone.js +0 -398
  288. package/dist/src/prompts/phone.js.map +0 -1
  289. package/dist/src/prompts/quiz-select.js +0 -114
  290. package/dist/src/prompts/quiz-select.js.map +0 -1
  291. package/dist/src/prompts/quiz-text.js +0 -98
  292. package/dist/src/prompts/quiz-text.js.map +0 -1
  293. package/dist/src/prompts/range.js +0 -164
  294. package/dist/src/prompts/range.js.map +0 -1
  295. package/dist/src/prompts/rating.js +0 -83
  296. package/dist/src/prompts/rating.js.map +0 -1
  297. package/dist/src/prompts/regex.js +0 -145
  298. package/dist/src/prompts/regex.js.map +0 -1
  299. package/dist/src/prompts/region.js +0 -170
  300. package/dist/src/prompts/region.js.map +0 -1
  301. package/dist/src/prompts/schedule.js +0 -270
  302. package/dist/src/prompts/schedule.js.map +0 -1
  303. package/dist/src/prompts/scroll.js +0 -155
  304. package/dist/src/prompts/scroll.js.map +0 -1
  305. package/dist/src/prompts/seat.js +0 -164
  306. package/dist/src/prompts/seat.js.map +0 -1
  307. package/dist/src/prompts/select-range.js +0 -148
  308. package/dist/src/prompts/select-range.js.map +0 -1
  309. package/dist/src/prompts/select.js +0 -163
  310. package/dist/src/prompts/select.js.map +0 -1
  311. package/dist/src/prompts/semver.js +0 -43
  312. package/dist/src/prompts/semver.js.map +0 -1
  313. package/dist/src/prompts/shortcut.js +0 -133
  314. package/dist/src/prompts/shortcut.js.map +0 -1
  315. package/dist/src/prompts/slider.js +0 -69
  316. package/dist/src/prompts/slider.js.map +0 -1
  317. package/dist/src/prompts/slot.js +0 -117
  318. package/dist/src/prompts/slot.js.map +0 -1
  319. package/dist/src/prompts/snippet.js +0 -228
  320. package/dist/src/prompts/snippet.js.map +0 -1
  321. package/dist/src/prompts/sort-grid.js +0 -151
  322. package/dist/src/prompts/sort-grid.js.map +0 -1
  323. package/dist/src/prompts/sort.js +0 -166
  324. package/dist/src/prompts/sort.js.map +0 -1
  325. package/dist/src/prompts/spam.js +0 -80
  326. package/dist/src/prompts/spam.js.map +0 -1
  327. package/dist/src/prompts/spreadsheet.js +0 -240
  328. package/dist/src/prompts/spreadsheet.js.map +0 -1
  329. package/dist/src/prompts/table.js +0 -120
  330. package/dist/src/prompts/table.js.map +0 -1
  331. package/dist/src/prompts/text.js +0 -317
  332. package/dist/src/prompts/text.js.map +0 -1
  333. package/dist/src/prompts/time.js +0 -211
  334. package/dist/src/prompts/time.js.map +0 -1
  335. package/dist/src/prompts/toggle.js +0 -53
  336. package/dist/src/prompts/toggle.js.map +0 -1
  337. package/dist/src/prompts/transfer.js +0 -207
  338. package/dist/src/prompts/transfer.js.map +0 -1
  339. package/dist/src/prompts/tree-select.js +0 -270
  340. package/dist/src/prompts/tree-select.js.map +0 -1
  341. package/dist/src/prompts/tree.js +0 -233
  342. package/dist/src/prompts/tree.js.map +0 -1
  343. package/dist/src/prompts/wait.js +0 -79
  344. package/dist/src/prompts/wait.js.map +0 -1
  345. package/dist/src/spinner.js +0 -105
  346. package/dist/src/spinner.js.map +0 -1
  347. package/dist/src/symbols.js +0 -66
  348. package/dist/src/symbols.js.map +0 -1
  349. package/dist/src/tasks.js +0 -231
  350. package/dist/src/tasks.js.map +0 -1
  351. package/dist/src/theme.js +0 -29
  352. package/dist/src/theme.js.map +0 -1
  353. package/dist/src/types.js +0 -8
  354. package/dist/src/types.js.map +0 -1
  355. package/dist/src/utils.js +0 -480
  356. package/dist/src/utils.js.map +0 -1
@@ -1,80 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SpamPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SpamPrompt;
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 SpamPrompt = class SpamPrompt extends _base.Prompt {
29
- cleanup() {
30
- if (this.decayTimer) clearInterval(this.decayTimer);
31
- super.cleanup();
32
- }
33
- render(_firstRender) {
34
- const progress = Math.min(this.count / this.options.threshold, 1);
35
- const filledLen = Math.round(progress * this.width);
36
- const emptyLen = this.width - filledLen;
37
- // Visual Bar: [#####-----]
38
- const filled = _symbols.symbols.line.repeat(filledLen).replace(/./g, '#'); // Or use block char
39
- const empty = _symbols.symbols.line.repeat(emptyLen);
40
- const barColor = progress === 1 ? _theme.theme.success : _theme.theme.error;
41
- const bar = `${_theme.theme.muted}[${barColor}${filled}${_theme.theme.muted}${empty}]${_ansi.ANSI.RESET}`;
42
- let output = `${_theme.theme.error}${_symbols.symbols.cross} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
43
- output += ` ${bar} ${Math.floor(progress * 100)}%`;
44
- if (this.count >= this.options.threshold) {
45
- output += ` ${_theme.theme.success} READY! Press Enter${_ansi.ANSI.RESET}`;
46
- } else {
47
- output += ` ${_theme.theme.muted}(Mash '${this.options.spamKey || 'Space'}' to fill)${_ansi.ANSI.RESET}`;
48
- }
49
- this.renderFrame(output);
50
- }
51
- handleInput(char) {
52
- // Confirm execution
53
- if (this.count >= this.options.threshold && (char === '\r' || char === '\n')) {
54
- this.submit(true);
55
- return;
56
- }
57
- const trigger = this.options.spamKey || ' ';
58
- // Check if key matches (or any key if not specified)
59
- if (char === trigger) {
60
- if (this.count < this.options.threshold) {
61
- this.count++;
62
- this.render(false);
63
- }
64
- }
65
- }
66
- constructor(options){
67
- super(options), _define_property(this, "count", 0), _define_property(this, "width", 20) // Visual width of the bar
68
- , _define_property(this, "decayTimer", void 0);
69
- if (options.decay) {
70
- this.decayTimer = setInterval(()=>{
71
- if (this.count > 0) {
72
- this.count = Math.max(0, this.count - 1);
73
- this.render(false);
74
- }
75
- }, 200); // Drop 5 presses per second
76
- }
77
- }
78
- };
79
-
80
- //# sourceMappingURL=spam.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/spam.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { BaseOptions } from '../types';\n\ninterface SpamOptions extends BaseOptions {\n threshold: number; // Number of presses required\n spamKey?: string; // Default to 'space' or generic 'any'\n decay?: boolean; // Evil mode: progress drops if you stop spamming!\n}\n\nexport class SpamPrompt extends Prompt<boolean, SpamOptions> {\n private count: number = 0;\n private width: number = 20; // Visual width of the bar\n private decayTimer?: NodeJS.Timeout;\n\n constructor(options: SpamOptions) {\n super(options);\n\n if (options.decay) {\n this.decayTimer = setInterval(() => {\n if (this.count > 0) {\n this.count = Math.max(0, this.count - 1);\n this.render(false);\n }\n }, 200); // Drop 5 presses per second\n }\n }\n\n protected cleanup() {\n if (this.decayTimer) clearInterval(this.decayTimer);\n super.cleanup();\n }\n\n protected render(_firstRender: boolean) {\n const progress = Math.min(this.count / this.options.threshold, 1);\n const filledLen = Math.round(progress * this.width);\n const emptyLen = this.width - filledLen;\n\n // Visual Bar: [#####-----]\n const filled = symbols.line.repeat(filledLen).replace(/./g, '#'); // Or use block char\n const empty = symbols.line.repeat(emptyLen);\n\n const barColor = progress === 1 ? theme.success : theme.error;\n const bar = `${theme.muted}[${barColor}${filled}${theme.muted}${empty}]${ANSI.RESET}`;\n\n let output = `${theme.error}${symbols.cross} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n output += ` ${bar} ${Math.floor(progress * 100)}%`;\n\n if (this.count >= this.options.threshold) {\n output += ` ${theme.success} READY! Press Enter${ANSI.RESET}`;\n } else {\n output += ` ${theme.muted}(Mash '${this.options.spamKey || 'Space'}' to fill)${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n // Confirm execution\n if (this.count >= this.options.threshold && (char === '\\r' || char === '\\n')) {\n this.submit(true);\n return;\n }\n\n const trigger = this.options.spamKey || ' ';\n\n // Check if key matches (or any key if not specified)\n if (char === trigger) {\n if (this.count < this.options.threshold) {\n this.count++;\n this.render(false);\n }\n }\n }\n}"],"names":["SpamPrompt","Prompt","cleanup","decayTimer","clearInterval","render","_firstRender","progress","Math","min","count","options","threshold","filledLen","round","width","emptyLen","filled","symbols","line","repeat","replace","empty","barColor","theme","success","error","bar","muted","ANSI","RESET","output","cross","BOLD","title","message","floor","spamKey","renderFrame","handleInput","char","submit","trigger","decay","setInterval","max"],"mappings":"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"}
@@ -1,240 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SpreadsheetPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SpreadsheetPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _symbols = require("../symbols");
15
- const _utils = require("../utils");
16
- function _define_property(obj, key, value) {
17
- if (key in obj) {
18
- Object.defineProperty(obj, key, {
19
- value: value,
20
- enumerable: true,
21
- configurable: true,
22
- writable: true
23
- });
24
- } else {
25
- obj[key] = value;
26
- }
27
- return obj;
28
- }
29
- let SpreadsheetPrompt = class SpreadsheetPrompt extends _base.Prompt {
30
- calculateColWidths() {
31
- this.colWidths = this.options.columns.map((col)=>{
32
- if (col.width) return col.width;
33
- // Auto calculate based on header and data
34
- let max = (0, _utils.stringWidth)(col.name);
35
- this.options.data.forEach((row)=>{
36
- const val = String(row[col.key] || '');
37
- max = Math.max(max, (0, _utils.stringWidth)(val));
38
- });
39
- return Math.min(max + 2, 30); // Cap at 30 chars
40
- });
41
- }
42
- render(_firstRender) {
43
- let output = '';
44
- // Title
45
- const mode = this.editMode ? `${_ansi.ANSI.FG_YELLOW}[EDIT]${_ansi.ANSI.RESET}` : `${_ansi.ANSI.FG_BLUE}[NAV]${_ansi.ANSI.RESET}`;
46
- output += `${_theme.theme.title}${this.options.message} ${mode}${_ansi.ANSI.RESET}\n`;
47
- output += `${_ansi.ANSI.DIM}(Arrows: Move, Enter/Type: Edit, Esc: Cancel)${_ansi.ANSI.RESET}\n`;
48
- // Viewport Logic (Rows)
49
- const maxScrollRow = Math.max(0, this.options.data.length - this.viewportHeight);
50
- if (this.cursorRow < this.scrollRow) this.scrollRow = this.cursorRow;
51
- if (this.cursorRow >= this.scrollRow + this.viewportHeight) this.scrollRow = this.cursorRow - this.viewportHeight + 1;
52
- this.scrollRow = Math.min(maxScrollRow, this.scrollRow);
53
- // Viewport Logic (Columns - Horizontal Scroll)
54
- const termWidth = this.stdout.columns || 80;
55
- let currentWidth = 4; // Row number column (3 digits + space)
56
- const visibleCols = [];
57
- for(let i = this.scrollCol; i < this.options.columns.length; i++){
58
- const w = this.colWidths[i];
59
- // Check if adding this column exceeds width
60
- // We allow at least one column even if it exceeds? No, standard behavior.
61
- if (currentWidth + w + 1 > termWidth && visibleCols.length > 0) break;
62
- visibleCols.push(i);
63
- currentWidth += w + 1;
64
- }
65
- // Render Header
66
- let headerStr = ' ';
67
- let totalWidth = 3;
68
- visibleCols.forEach((idx)=>{
69
- const col = this.options.columns[idx];
70
- const w = this.colWidths[idx];
71
- headerStr += this.pad(col.name, w) + ' ';
72
- totalWidth += w + 1;
73
- });
74
- output += `${_ansi.ANSI.BOLD}${headerStr}${_ansi.ANSI.RESET}\n`;
75
- output += `${_ansi.ANSI.DIM} ${_symbols.symbols.horizontal.repeat(Math.max(0, totalWidth - 3))}${_ansi.ANSI.RESET}\n`;
76
- // Render Rows
77
- for(let i = 0; i < this.viewportHeight; i++){
78
- const rowIndex = this.scrollRow + i;
79
- if (rowIndex >= this.options.data.length) break;
80
- const rowData = this.options.data[rowIndex];
81
- // Row Number
82
- let rowStr = `${_ansi.ANSI.DIM}${String(rowIndex + 1).padEnd(3)}${_ansi.ANSI.RESET}`;
83
- visibleCols.forEach((colIndex)=>{
84
- const col = this.options.columns[colIndex];
85
- const w = this.colWidths[colIndex];
86
- const isCursor = rowIndex === this.cursorRow && colIndex === this.cursorCol;
87
- let val = String(rowData[col.key] || '');
88
- if (isCursor && this.editMode) {
89
- val = this.tempValue;
90
- }
91
- let displayVal = this.truncate(val, w);
92
- displayVal = this.pad(displayVal, w);
93
- if (isCursor) {
94
- if (this.editMode) {
95
- // Highlight editing
96
- displayVal = `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${displayVal}${_ansi.ANSI.RESET}`;
97
- } else {
98
- // Highlight selection
99
- displayVal = `${_ansi.ANSI.REVERSE}${displayVal}${_ansi.ANSI.RESET}`;
100
- }
101
- }
102
- rowStr += displayVal + ' ';
103
- });
104
- output += rowStr + '\n';
105
- }
106
- // Footer / Status
107
- if (this.editMode) {
108
- output += `\n${_ansi.ANSI.FG_YELLOW}Editing cell (${this.cursorRow + 1}, ${this.options.columns[this.cursorCol].name}). Press Enter to save.${_ansi.ANSI.RESET}`;
109
- } else {
110
- output += `\n${_ansi.ANSI.DIM}Press 's' or Enter to Save & Exit${_ansi.ANSI.RESET}`;
111
- }
112
- this.renderFrame(output);
113
- }
114
- pad(str, width) {
115
- const w = (0, _utils.stringWidth)(str);
116
- if (w >= width) return str;
117
- return str + ' '.repeat(width - w);
118
- }
119
- handleInput(char, _key) {
120
- if (this.editMode) {
121
- this.handleEditInput(char);
122
- } else {
123
- this.handleNavInput(char);
124
- }
125
- }
126
- handleNavInput(char) {
127
- // Navigation
128
- if (this.isUp(char)) {
129
- this.cursorRow = Math.max(0, this.cursorRow - 1);
130
- this.render(false);
131
- return;
132
- }
133
- if (this.isDown(char)) {
134
- this.cursorRow = Math.min(this.options.data.length - 1, this.cursorRow + 1);
135
- this.render(false);
136
- return;
137
- }
138
- if (this.isLeft(char) || char === '\x1b[Z') {
139
- this.cursorCol = Math.max(0, this.cursorCol - 1);
140
- if (this.cursorCol < this.scrollCol) {
141
- this.scrollCol = this.cursorCol;
142
- }
143
- this.render(false);
144
- return;
145
- }
146
- if (this.isRight(char) || char === '\t') {
147
- this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);
148
- // Adjust scrollCol to keep cursor visible
149
- // Loop until cursorCol is within visible range
150
- while(true){
151
- const termWidth = this.stdout.columns || 80;
152
- let w = 4; // Row num
153
- let isVisible = false;
154
- for(let i = this.scrollCol; i < this.options.columns.length; i++){
155
- w += this.colWidths[i] + 1;
156
- if (w > termWidth && i > this.scrollCol) break; // Allow at least one
157
- if (i === this.cursorCol) {
158
- isVisible = true;
159
- break;
160
- }
161
- }
162
- if (isVisible) break;
163
- this.scrollCol++;
164
- if (this.scrollCol > this.cursorCol) {
165
- this.scrollCol = this.cursorCol;
166
- break;
167
- }
168
- }
169
- this.render(false);
170
- return;
171
- }
172
- // Enter Edit Mode
173
- if (char === '\r' || char === '\n') {
174
- this.startEditing();
175
- return;
176
- }
177
- // Shortcuts
178
- if (char === 's') {
179
- this.submit(this.options.data);
180
- return;
181
- }
182
- // Removed 'q' unsafe exit.
183
- // Typing starts editing
184
- if (!/^[\x00-\x1F]/.test(char)) {
185
- this.startEditing(char);
186
- }
187
- }
188
- startEditing(initialChar = '') {
189
- const col = this.options.columns[this.cursorCol];
190
- if (col.editable === false) return;
191
- this.editMode = true;
192
- const currentVal = String(this.options.data[this.cursorRow][col.key] || '');
193
- this.tempValue = initialChar ? initialChar : currentVal;
194
- this.render(false);
195
- }
196
- handleEditInput(char) {
197
- if (char === '\r' || char === '\n') {
198
- // Save
199
- const col = this.options.columns[this.cursorCol];
200
- this.options.data[this.cursorRow][col.key] = this.tempValue;
201
- this.editMode = false;
202
- // Recalculate width if needed?
203
- this.calculateColWidths(); // Update widths
204
- this.render(false);
205
- return;
206
- }
207
- if (char === '\x1b') {
208
- this.editMode = false;
209
- this.render(false);
210
- return;
211
- }
212
- if (char === '\x7f' || char === '\b') {
213
- this.tempValue = this.tempValue.slice(0, -1);
214
- this.render(false);
215
- return;
216
- }
217
- if (!/^[\x00-\x1F]/.test(char)) {
218
- this.tempValue += char;
219
- this.render(false);
220
- }
221
- }
222
- handleMouse(event) {
223
- if (event.action === 'scroll') {
224
- if (event.scroll === 'up') {
225
- this.cursorRow = Math.max(0, this.cursorRow - 1);
226
- this.render(false);
227
- } else {
228
- this.cursorRow = Math.min(this.options.data.length - 1, this.cursorRow + 1);
229
- this.render(false);
230
- }
231
- }
232
- }
233
- constructor(options){
234
- super(options), _define_property(this, "cursorRow", 0), _define_property(this, "cursorCol", 0), _define_property(this, "scrollRow", 0), _define_property(this, "scrollCol", 0), _define_property(this, "editMode", false), _define_property(this, "tempValue", ''), _define_property(this, "colWidths", []), _define_property(this, "viewportHeight", void 0);
235
- this.viewportHeight = options.rows || 10;
236
- this.calculateColWidths();
237
- }
238
- };
239
-
240
- //# sourceMappingURL=spreadsheet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/spreadsheet.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SpreadsheetOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class SpreadsheetPrompt extends Prompt<Record<string, any>[], SpreadsheetOptions> {\n private cursorRow: number = 0;\n private cursorCol: number = 0;\n private scrollRow: number = 0;\n private scrollCol: number = 0;\n\n private editMode: boolean = false;\n private tempValue: string = '';\n\n private colWidths: number[] = [];\n private viewportHeight: number;\n\n constructor(options: SpreadsheetOptions) {\n super(options);\n this.viewportHeight = options.rows || 10;\n this.calculateColWidths();\n }\n\n private calculateColWidths() {\n this.colWidths = this.options.columns.map(col => {\n if (col.width) return col.width;\n\n // Auto calculate based on header and data\n let max = stringWidth(col.name);\n this.options.data.forEach(row => {\n const val = String(row[col.key] || '');\n max = Math.max(max, stringWidth(val));\n });\n return Math.min(max + 2, 30); // Cap at 30 chars\n });\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Title\n const mode = this.editMode ? `${ANSI.FG_YELLOW}[EDIT]${ANSI.RESET}` : `${ANSI.FG_BLUE}[NAV]${ANSI.RESET}`;\n output += `${theme.title}${this.options.message} ${mode}${ANSI.RESET}\\n`;\n\n output += `${ANSI.DIM}(Arrows: Move, Enter/Type: Edit, Esc: Cancel)${ANSI.RESET}\\n`;\n\n // Viewport Logic (Rows)\n const maxScrollRow = Math.max(0, this.options.data.length - this.viewportHeight);\n if (this.cursorRow < this.scrollRow) this.scrollRow = this.cursorRow;\n if (this.cursorRow >= this.scrollRow + this.viewportHeight) this.scrollRow = this.cursorRow - this.viewportHeight + 1;\n this.scrollRow = Math.min(maxScrollRow, this.scrollRow);\n\n // Viewport Logic (Columns - Horizontal Scroll)\n const termWidth = this.stdout.columns || 80;\n let currentWidth = 4; // Row number column (3 digits + space)\n const visibleCols: number[] = [];\n\n for (let i = this.scrollCol; i < this.options.columns.length; i++) {\n const w = this.colWidths[i];\n // Check if adding this column exceeds width\n // We allow at least one column even if it exceeds? No, standard behavior.\n if (currentWidth + w + 1 > termWidth && visibleCols.length > 0) break;\n\n visibleCols.push(i);\n currentWidth += w + 1;\n }\n\n // Render Header\n let headerStr = ' ';\n let totalWidth = 3;\n\n visibleCols.forEach(idx => {\n const col = this.options.columns[idx];\n const w = this.colWidths[idx];\n headerStr += this.pad(col.name, w) + ' ';\n totalWidth += w + 1;\n });\n\n output += `${ANSI.BOLD}${headerStr}${ANSI.RESET}\\n`;\n output += `${ANSI.DIM} ${symbols.horizontal.repeat(Math.max(0, totalWidth - 3))}${ANSI.RESET}\\n`;\n\n // Render Rows\n for (let i = 0; i < this.viewportHeight; i++) {\n const rowIndex = this.scrollRow + i;\n if (rowIndex >= this.options.data.length) break;\n\n const rowData = this.options.data[rowIndex];\n // Row Number\n let rowStr = `${ANSI.DIM}${String(rowIndex + 1).padEnd(3)}${ANSI.RESET}`;\n\n visibleCols.forEach(colIndex => {\n const col = this.options.columns[colIndex];\n const w = this.colWidths[colIndex];\n const isCursor = (rowIndex === this.cursorRow) && (colIndex === this.cursorCol);\n\n let val = String(rowData[col.key] || '');\n if (isCursor && this.editMode) {\n val = this.tempValue;\n }\n\n let displayVal = this.truncate(val, w);\n displayVal = this.pad(displayVal, w);\n\n if (isCursor) {\n if (this.editMode) {\n // Highlight editing\n displayVal = `${theme.main}${ANSI.UNDERLINE}${displayVal}${ANSI.RESET}`;\n } else {\n // Highlight selection\n displayVal = `${ANSI.REVERSE}${displayVal}${ANSI.RESET}`;\n }\n }\n\n rowStr += displayVal + ' ';\n });\n output += rowStr + '\\n';\n }\n\n // Footer / Status\n if (this.editMode) {\n output += `\\n${ANSI.FG_YELLOW}Editing cell (${this.cursorRow + 1}, ${this.options.columns[this.cursorCol].name}). Press Enter to save.${ANSI.RESET}`;\n } else {\n output += `\\n${ANSI.DIM}Press 's' or Enter to Save & Exit${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n private pad(str: string, width: number): string {\n const w = stringWidth(str);\n if (w >= width) return str;\n return str + ' '.repeat(width - w);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (this.editMode) {\n this.handleEditInput(char);\n } else {\n this.handleNavInput(char);\n }\n }\n\n private handleNavInput(char: string) {\n // Navigation\n if (this.isUp(char)) {\n this.cursorRow = Math.max(0, this.cursorRow - 1);\n this.render(false);\n return;\n }\n if (this.isDown(char)) {\n this.cursorRow = Math.min(this.options.data.length - 1, this.cursorRow + 1);\n this.render(false);\n return;\n }\n if (this.isLeft(char) || char === '\\x1b[Z') {\n this.cursorCol = Math.max(0, this.cursorCol - 1);\n if (this.cursorCol < this.scrollCol) {\n this.scrollCol = this.cursorCol;\n }\n this.render(false);\n return;\n }\n if (this.isRight(char) || char === '\\t') {\n this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);\n\n // Adjust scrollCol to keep cursor visible\n // Loop until cursorCol is within visible range\n while (true) {\n const termWidth = this.stdout.columns || 80;\n let w = 4; // Row num\n let isVisible = false;\n\n for (let i = this.scrollCol; i < this.options.columns.length; i++) {\n w += this.colWidths[i] + 1;\n if (w > termWidth && i > this.scrollCol) break; // Allow at least one\n\n if (i === this.cursorCol) {\n isVisible = true;\n break;\n }\n }\n\n if (isVisible) break;\n this.scrollCol++;\n if (this.scrollCol > this.cursorCol) {\n this.scrollCol = this.cursorCol;\n break;\n }\n }\n\n this.render(false);\n return;\n }\n\n // Enter Edit Mode\n if (char === '\\r' || char === '\\n') {\n this.startEditing();\n return;\n }\n\n // Shortcuts\n if (char === 's') {\n this.submit(this.options.data);\n return;\n }\n\n // Removed 'q' unsafe exit.\n\n // Typing starts editing\n if (!/^[\\x00-\\x1F]/.test(char)) {\n this.startEditing(char);\n }\n }\n\n private startEditing(initialChar: string = '') {\n const col = this.options.columns[this.cursorCol];\n if (col.editable === false) return;\n\n this.editMode = true;\n const currentVal = String(this.options.data[this.cursorRow][col.key] || '');\n this.tempValue = initialChar ? initialChar : currentVal;\n this.render(false);\n }\n\n private handleEditInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n // Save\n const col = this.options.columns[this.cursorCol];\n this.options.data[this.cursorRow][col.key] = this.tempValue;\n this.editMode = false;\n // Recalculate width if needed?\n this.calculateColWidths(); // Update widths\n this.render(false);\n return;\n }\n\n if (char === '\\x1b') { // Esc\n this.editMode = false;\n this.render(false);\n return;\n }\n\n if (char === '\\x7f' || char === '\\b') {\n this.tempValue = this.tempValue.slice(0, -1);\n this.render(false);\n return;\n }\n\n if (!/^[\\x00-\\x1F]/.test(char)) {\n this.tempValue += char;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.cursorRow = Math.max(0, this.cursorRow - 1);\n this.render(false);\n } else {\n this.cursorRow = Math.min(this.options.data.length - 1, this.cursorRow + 1);\n this.render(false);\n }\n }\n }\n}\n"],"names":["SpreadsheetPrompt","Prompt","calculateColWidths","colWidths","options","columns","map","col","width","max","stringWidth","name","data","forEach","row","val","String","key","Math","min","render","_firstRender","output","mode","editMode","ANSI","FG_YELLOW","RESET","FG_BLUE","theme","title","message","DIM","maxScrollRow","length","viewportHeight","cursorRow","scrollRow","termWidth","stdout","currentWidth","visibleCols","i","scrollCol","w","push","headerStr","totalWidth","idx","pad","BOLD","symbols","horizontal","repeat","rowIndex","rowData","rowStr","padEnd","colIndex","isCursor","cursorCol","tempValue","displayVal","truncate","main","UNDERLINE","REVERSE","renderFrame","str","handleInput","char","_key","handleEditInput","handleNavInput","isUp","isDown","isLeft","isRight","isVisible","startEditing","submit","test","initialChar","editable","currentVal","slice","handleMouse","event","action","scroll","rows"],"mappings":"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"}
@@ -1,120 +0,0 @@
1
- "use strict";
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;
26
- }
27
- return obj;
28
- }
29
- let TablePrompt = class TablePrompt extends _base.Prompt {
30
- calculateColWidths() {
31
- const { columns, data } = this.options;
32
- this.colWidths = columns.map((c)=>(0, _utils.stringWidth)(c));
33
- data.forEach((row)=>{
34
- row.row.forEach((cell, idx)=>{
35
- if (idx < this.colWidths.length) {
36
- this.colWidths[idx] = Math.max(this.colWidths[idx], (0, _utils.stringWidth)(cell));
37
- }
38
- });
39
- });
40
- // Add padding
41
- this.colWidths = this.colWidths.map((w)=>w + 2);
42
- }
43
- render(_firstRender) {
44
- // Scroll Logic
45
- if (this.selectedIndex < this.scrollTop) {
46
- this.scrollTop = this.selectedIndex;
47
- } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
48
- this.scrollTop = this.selectedIndex - this.pageSize + 1;
49
- }
50
- const maxScroll = Math.max(0, this.options.data.length - this.pageSize);
51
- this.scrollTop = Math.min(this.scrollTop, maxScroll);
52
- let output = '';
53
- // Title
54
- output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
55
- // Table Header
56
- let headerStr = ' '; // Indent for pointer space
57
- this.options.columns.forEach((col, i)=>{
58
- headerStr += this.pad(col, this.colWidths[i]);
59
- });
60
- output += `${_ansi.ANSI.BOLD}${headerStr}${_ansi.ANSI.RESET}\n`;
61
- // Table Body
62
- const visibleRows = this.options.data.slice(this.scrollTop, this.scrollTop + this.pageSize);
63
- visibleRows.forEach((item, index)=>{
64
- const actualIndex = this.scrollTop + index;
65
- if (index > 0) output += '\n';
66
- const isSelected = actualIndex === this.selectedIndex;
67
- const pointer = isSelected ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET} ` : ' ';
68
- let rowStr = '';
69
- item.row.forEach((cell, colIdx)=>{
70
- const width = this.colWidths[colIdx];
71
- let cellStr = this.pad(cell, width);
72
- if (isSelected) {
73
- cellStr = `${_theme.theme.main}${cellStr}${_ansi.ANSI.RESET}`;
74
- }
75
- rowStr += cellStr;
76
- });
77
- output += `${pointer}${rowStr}`;
78
- });
79
- this.renderFrame(output);
80
- }
81
- pad(str, width) {
82
- const len = (0, _utils.stringWidth)(str);
83
- if (len >= width) return str;
84
- return str + ' '.repeat(width - len);
85
- }
86
- handleInput(char) {
87
- if (char === '\r' || char === '\n') {
88
- this.submit(this.options.data[this.selectedIndex].value);
89
- return;
90
- }
91
- if (this.isUp(char)) {
92
- this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.data.length - 1;
93
- this.render(false);
94
- return;
95
- }
96
- if (this.isDown(char)) {
97
- this.selectedIndex = this.selectedIndex < this.options.data.length - 1 ? this.selectedIndex + 1 : 0;
98
- this.render(false);
99
- return;
100
- }
101
- }
102
- handleMouse(event) {
103
- if (event.action === 'scroll') {
104
- if (event.scroll === 'up') {
105
- this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.data.length - 1;
106
- this.render(false);
107
- } else if (event.scroll === 'down') {
108
- this.selectedIndex = this.selectedIndex < this.options.data.length - 1 ? this.selectedIndex + 1 : 0;
109
- this.render(false);
110
- }
111
- }
112
- }
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
@@ -1 +0,0 @@
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":";;;;+BAOaA;;;eAAAA;;;sBAPQ;sBACE;uBACD;yBACE;uBAEI;;;;;;;;;;;;;;AAErB,IAAA,AAAMA,cAAN,MAAMA,oBAAuBC,YAAM;IAY9BC,qBAAqB;QACzB,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAG,IAAI,CAACC,OAAO;QACtC,IAAI,CAACC,SAAS,GAAGH,QAAQI,GAAG,CAACC,CAAAA,IAAKC,IAAAA,kBAAW,EAACD;QAE9CJ,KAAKM,OAAO,CAACC,CAAAA;YACTA,IAAIA,GAAG,CAACD,OAAO,CAAC,CAACE,MAAMC;gBACnB,IAAIA,MAAM,IAAI,CAACP,SAAS,CAACQ,MAAM,EAAE;oBAC7B,IAAI,CAACR,SAAS,CAACO,IAAI,GAAGE,KAAKC,GAAG,CAAC,IAAI,CAACV,SAAS,CAACO,IAAI,EAAEJ,IAAAA,kBAAW,EAACG;gBACpE;YACJ;QACJ;QAEA,cAAc;QACd,IAAI,CAACN,SAAS,GAAG,IAAI,CAACA,SAAS,CAACC,GAAG,CAACU,CAAAA,IAAKA,IAAI;IACjD;IAEUC,OAAOC,YAAqB,EAAE;QACpC,eAAe;QACf,IAAI,IAAI,CAACC,aAAa,GAAG,IAAI,CAACC,SAAS,EAAE;YACrC,IAAI,CAACA,SAAS,GAAG,IAAI,CAACD,aAAa;QACvC,OAAO,IAAI,IAAI,CAACA,aAAa,IAAI,IAAI,CAACC,SAAS,GAAG,IAAI,CAACC,QAAQ,EAAE;YAC7D,IAAI,CAACD,SAAS,GAAG,IAAI,CAACD,aAAa,GAAG,IAAI,CAACE,QAAQ,GAAG;QAC1D;QAEA,MAAMC,YAAYR,KAAKC,GAAG,CAAC,GAAG,IAAI,CAACX,OAAO,CAACD,IAAI,CAACU,MAAM,GAAG,IAAI,CAACQ,QAAQ;QACtE,IAAI,CAACD,SAAS,GAAGN,KAAKS,GAAG,CAAC,IAAI,CAACH,SAAS,EAAEE;QAE1C,IAAIE,SAAS;QAEb,QAAQ;QACRA,UAAU,GAAGC,YAAK,CAACC,OAAO,CAAC,CAAC,EAAEC,UAAI,CAACC,KAAK,CAAC,CAAC,EAAED,UAAI,CAACE,IAAI,GAAGJ,YAAK,CAACK,KAAK,GAAG,IAAI,CAAC1B,OAAO,CAAC2B,OAAO,GAAGJ,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAE3G,eAAe;QACf,IAAII,YAAY,MAAM,2BAA2B;QACjD,IAAI,CAAC5B,OAAO,CAACF,OAAO,CAACO,OAAO,CAAC,CAACwB,KAAKC;YAC/BF,aAAa,IAAI,CAACG,GAAG,CAACF,KAAK,IAAI,CAAC5B,SAAS,CAAC6B,EAAE;QAChD;QACAV,UAAU,GAAGG,UAAI,CAACE,IAAI,GAAGG,YAAYL,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAEnD,aAAa;QACb,MAAMQ,cAAc,IAAI,CAAChC,OAAO,CAACD,IAAI,CAACkC,KAAK,CAAC,IAAI,CAACjB,SAAS,EAAE,IAAI,CAACA,SAAS,GAAG,IAAI,CAACC,QAAQ;QAE1Fe,YAAY3B,OAAO,CAAC,CAAC6B,MAAMC;YACvB,MAAMC,cAAc,IAAI,CAACpB,SAAS,GAAGmB;YACrC,IAAIA,QAAQ,GAAGf,UAAU;YAEzB,MAAMiB,aAAaD,gBAAgB,IAAI,CAACrB,aAAa;YACrD,MAAMuB,UAAUD,aAAa,GAAGhB,YAAK,CAACkB,IAAI,GAAGC,gBAAO,CAACF,OAAO,GAAGf,UAAI,CAACC,KAAK,CAAC,CAAC,CAAC,GAAG;YAE/E,IAAIiB,SAAS;YACbP,KAAK5B,GAAG,CAACD,OAAO,CAAC,CAACE,MAAMmC;gBACpB,MAAMC,QAAQ,IAAI,CAAC1C,SAAS,CAACyC,OAAO;gBACpC,IAAIE,UAAU,IAAI,CAACb,GAAG,CAACxB,MAAMoC;gBAE7B,IAAIN,YAAY;oBACZO,UAAU,GAAGvB,YAAK,CAACkB,IAAI,GAAGK,UAAUrB,UAAI,CAACC,KAAK,EAAE;gBACpD;gBACAiB,UAAUG;YACd;YAEAxB,UAAU,GAAGkB,UAAUG,QAAQ;QACnC;QAEA,IAAI,CAACI,WAAW,CAACzB;IACrB;IAEQW,IAAIe,GAAW,EAAEH,KAAa,EAAU;QAC5C,MAAMI,MAAM3C,IAAAA,kBAAW,EAAC0C;QACxB,IAAIC,OAAOJ,OAAO,OAAOG;QACzB,OAAOA,MAAM,IAAIE,MAAM,CAACL,QAAQI;IACpC;IAEUE,YAAYC,IAAY,EAAE;QAChC,IAAIA,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,CAACC,MAAM,CAAC,IAAI,CAACnD,OAAO,CAACD,IAAI,CAAC,IAAI,CAACgB,aAAa,CAAC,CAACqC,KAAK;YACvD;QACJ;QAEA,IAAI,IAAI,CAACC,IAAI,CAACH,OAAO;YACjB,IAAI,CAACnC,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACf,OAAO,CAACD,IAAI,CAACU,MAAM,GAAG;YAClG,IAAI,CAACI,MAAM,CAAC;YACZ;QACJ;QAEA,IAAI,IAAI,CAACyC,MAAM,CAACJ,OAAO;YACnB,IAAI,CAACnC,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,CAACf,OAAO,CAACD,IAAI,CAACU,MAAM,GAAG,IAAI,IAAI,CAACM,aAAa,GAAG,IAAI;YAClG,IAAI,CAACF,MAAM,CAAC;YACZ;QACJ;IACJ;IAEU0C,YAAYC,KAAiB,EAAE;QACrC,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,IAAID,MAAME,MAAM,KAAK,MAAM;gBACvB,IAAI,CAAC3C,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACf,OAAO,CAACD,IAAI,CAACU,MAAM,GAAG;gBAClG,IAAI,CAACI,MAAM,CAAC;YAChB,OAAO,IAAI2C,MAAME,MAAM,KAAK,QAAQ;gBAChC,IAAI,CAAC3C,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,CAACf,OAAO,CAACD,IAAI,CAACU,MAAM,GAAG,IAAI,IAAI,CAACM,aAAa,GAAG,IAAI;gBAClG,IAAI,CAACF,MAAM,CAAC;YAChB;QACJ;IACJ;IA3GA,YAAYb,OAAwB,CAAE;QAClC,KAAK,CAACA,UANV,uBAAQe,iBAAwB,IAChC,uBAAQC,aAAoB,IAC5B,uBAAiBC,YAAjB,KAAA,IACA,uBAAQhB,aAAsB,EAAE;QAI5B,IAAI,CAACgB,QAAQ,GAAGjB,QAAQ2D,IAAI,IAAI;QAChC,IAAI,CAAC9D,kBAAkB;IAC3B;AAwGJ"}