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,62 +1,68 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SortPrompt = 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
- class SortPrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- this.selectedIndex = 0;
12
- this.grabbedIndex = null;
13
- this.scrollTop = 0;
14
- this.pageSize = 10;
15
- this.items = [...options.items];
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "SortPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return SortPrompt;
16
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 SortPrompt = class SortPrompt extends _base.Prompt {
17
29
  render(_firstRender) {
18
30
  // Adjust Scroll Top
19
31
  if (this.selectedIndex < this.scrollTop) {
20
32
  this.scrollTop = this.selectedIndex;
21
- }
22
- else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
33
+ } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
23
34
  this.scrollTop = this.selectedIndex - this.pageSize + 1;
24
35
  }
25
36
  // Ensure valid scroll (handle list shrinking?) - list doesn't shrink here but good practice
26
37
  this.scrollTop = Math.max(0, Math.min(this.scrollTop, this.items.length - this.pageSize));
27
- if (this.scrollTop < 0)
28
- this.scrollTop = 0;
38
+ if (this.scrollTop < 0) this.scrollTop = 0;
29
39
  let output = '';
30
40
  // Header
31
- output += `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} ${theme_1.theme.muted}(Press <space> to grab, arrows to move, <enter> to confirm)${ansi_1.ANSI.RESET}\n`;
41
+ output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(Press <space> to grab, arrows to move, <enter> to confirm)${_ansi.ANSI.RESET}\n`;
32
42
  const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);
33
- visibleItems.forEach((item, index) => {
43
+ visibleItems.forEach((item, index)=>{
34
44
  const actualIndex = this.scrollTop + index;
35
- if (index > 0)
36
- output += '\n';
45
+ if (index > 0) output += '\n';
37
46
  const isSelected = actualIndex === this.selectedIndex;
38
47
  const isGrabbed = actualIndex === this.grabbedIndex;
39
48
  // Pointer
40
49
  let prefix = ' ';
41
50
  if (isSelected) {
42
51
  if (isGrabbed) {
43
- prefix = `${theme_1.theme.main}${symbols_1.symbols.pointer}${symbols_1.symbols.pointer} `; // Double pointer for grabbed?
52
+ prefix = `${_theme.theme.main}${_symbols.symbols.pointer}${_symbols.symbols.pointer} `; // Double pointer for grabbed?
53
+ } else {
54
+ prefix = `${_theme.theme.main}${_symbols.symbols.pointer} `;
44
55
  }
45
- else {
46
- prefix = `${theme_1.theme.main}${symbols_1.symbols.pointer} `;
47
- }
48
- }
49
- else if (isGrabbed) {
50
- // Should not happen if we move grabbed item with cursor
51
- // But if logic differs, maybe.
56
+ } else if (isGrabbed) {
57
+ // Should not happen if we move grabbed item with cursor
58
+ // But if logic differs, maybe.
52
59
  }
53
60
  // Item Content
54
61
  let content = item;
55
62
  if (isGrabbed) {
56
- content = `${ansi_1.ANSI.BOLD}${theme_1.theme.main}${content}${ansi_1.ANSI.RESET}`;
57
- }
58
- else if (isSelected) {
59
- content = `${theme_1.theme.main}${content}${ansi_1.ANSI.RESET}`;
63
+ content = `${_ansi.ANSI.BOLD}${_theme.theme.main}${content}${_ansi.ANSI.RESET}`;
64
+ } else if (isSelected) {
65
+ content = `${_theme.theme.main}${content}${_ansi.ANSI.RESET}`;
60
66
  }
61
67
  output += `${prefix}${content}`;
62
68
  });
@@ -72,8 +78,7 @@ class SortPrompt extends base_1.Prompt {
72
78
  if (char === ' ') {
73
79
  if (this.grabbedIndex === null) {
74
80
  this.grabbedIndex = this.selectedIndex;
75
- }
76
- else {
81
+ } else {
77
82
  this.grabbedIndex = null;
78
83
  }
79
84
  this.render(false);
@@ -89,8 +94,7 @@ class SortPrompt extends base_1.Prompt {
89
94
  this.selectedIndex = newIndex;
90
95
  this.grabbedIndex = newIndex;
91
96
  }
92
- }
93
- else {
97
+ } else {
94
98
  // Move cursor up
95
99
  this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;
96
100
  }
@@ -107,8 +111,7 @@ class SortPrompt extends base_1.Prompt {
107
111
  this.selectedIndex = newIndex;
108
112
  this.grabbedIndex = newIndex;
109
113
  }
110
- }
111
- else {
114
+ } else {
112
115
  // Move cursor down
113
116
  this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;
114
117
  }
@@ -117,7 +120,10 @@ class SortPrompt extends base_1.Prompt {
117
120
  }
118
121
  }
119
122
  swap(i, j) {
120
- [this.items[i], this.items[j]] = [this.items[j], this.items[i]];
123
+ [this.items[i], this.items[j]] = [
124
+ this.items[j],
125
+ this.items[i]
126
+ ];
121
127
  }
122
128
  handleMouse(event) {
123
129
  // Simple scroll support for navigation
@@ -130,13 +136,11 @@ class SortPrompt extends base_1.Prompt {
130
136
  this.selectedIndex = newIndex;
131
137
  this.grabbedIndex = newIndex;
132
138
  }
133
- }
134
- else {
139
+ } else {
135
140
  this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;
136
141
  }
137
142
  this.render(false);
138
- }
139
- else if (event.scroll === 'down') {
143
+ } else if (event.scroll === 'down') {
140
144
  if (this.grabbedIndex !== null) {
141
145
  if (this.selectedIndex < this.items.length - 1) {
142
146
  const newIndex = this.selectedIndex + 1;
@@ -144,13 +148,19 @@ class SortPrompt extends base_1.Prompt {
144
148
  this.selectedIndex = newIndex;
145
149
  this.grabbedIndex = newIndex;
146
150
  }
147
- }
148
- else {
151
+ } else {
149
152
  this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;
150
153
  }
151
154
  this.render(false);
152
155
  }
153
156
  }
154
157
  }
155
- }
156
- exports.SortPrompt = SortPrompt;
158
+ constructor(options){
159
+ super(options), _define_property(this, "items", void 0), _define_property(this, "selectedIndex", 0), _define_property(this, "grabbedIndex", null), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 10);
160
+ this.items = [
161
+ ...options.items
162
+ ];
163
+ }
164
+ };
165
+
166
+ //# sourceMappingURL=sort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/sort.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SortOptions, MouseEvent } from '../types';\n\nexport class SortPrompt extends Prompt<string[], SortOptions> {\n private items: string[];\n private selectedIndex: number = 0;\n private grabbedIndex: number | null = null;\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n constructor(options: SortOptions) {\n super(options);\n this.items = [...options.items];\n }\n\n protected render(_firstRender: boolean) {\n // Adjust Scroll Top\n if (this.selectedIndex < this.scrollTop) {\n this.scrollTop = this.selectedIndex;\n } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.selectedIndex - this.pageSize + 1;\n }\n\n // Ensure valid scroll (handle list shrinking?) - list doesn't shrink here but good practice\n this.scrollTop = Math.max(0, Math.min(this.scrollTop, this.items.length - this.pageSize));\n if (this.scrollTop < 0) this.scrollTop = 0;\n\n let output = '';\n\n // Header\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(Press <space> to grab, arrows to move, <enter> to confirm)${ANSI.RESET}\\n`;\n\n const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleItems.forEach((item, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n const isSelected = actualIndex === this.selectedIndex;\n const isGrabbed = actualIndex === this.grabbedIndex;\n\n // Pointer\n let prefix = ' ';\n if (isSelected) {\n if (isGrabbed) {\n prefix = `${theme.main}${symbols.pointer}${symbols.pointer} `; // Double pointer for grabbed?\n } else {\n prefix = `${theme.main}${symbols.pointer} `;\n }\n } else if (isGrabbed) {\n // Should not happen if we move grabbed item with cursor\n // But if logic differs, maybe.\n }\n\n // Item Content\n let content = item;\n if (isGrabbed) {\n content = `${ANSI.BOLD}${theme.main}${content}${ANSI.RESET}`;\n } else if (isSelected) {\n content = `${theme.main}${content}${ANSI.RESET}`;\n }\n\n output += `${prefix}${content}`;\n });\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n // Enter\n if (char === '\\r' || char === '\\n') {\n this.submit(this.items);\n return;\n }\n\n // Space (Grab/Drop)\n if (char === ' ') {\n if (this.grabbedIndex === null) {\n this.grabbedIndex = this.selectedIndex;\n } else {\n this.grabbedIndex = null;\n }\n this.render(false);\n return;\n }\n\n // Up\n if (this.isUp(char)) {\n if (this.grabbedIndex !== null) {\n // Move item up\n if (this.selectedIndex > 0) {\n const newIndex = this.selectedIndex - 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n // Move cursor up\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;\n }\n this.render(false);\n return;\n }\n\n // Down\n if (this.isDown(char)) {\n if (this.grabbedIndex !== null) {\n // Move item down\n if (this.selectedIndex < this.items.length - 1) {\n const newIndex = this.selectedIndex + 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n // Move cursor down\n this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;\n }\n this.render(false);\n return;\n }\n }\n\n private swap(i: number, j: number) {\n [this.items[i], this.items[j]] = [this.items[j], this.items[i]];\n }\n\n protected handleMouse(event: MouseEvent) {\n // Simple scroll support for navigation\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.grabbedIndex !== null) {\n if (this.selectedIndex > 0) {\n const newIndex = this.selectedIndex - 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;\n }\n this.render(false);\n } else if (event.scroll === 'down') {\n if (this.grabbedIndex !== null) {\n if (this.selectedIndex < this.items.length - 1) {\n const newIndex = this.selectedIndex + 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;\n }\n this.render(false);\n }\n }\n }\n}\n"],"names":["SortPrompt","Prompt","render","_firstRender","selectedIndex","scrollTop","pageSize","Math","max","min","items","length","output","theme","success","ANSI","RESET","BOLD","title","options","message","muted","visibleItems","slice","forEach","item","index","actualIndex","isSelected","isGrabbed","grabbedIndex","prefix","main","symbols","pointer","content","renderFrame","handleInput","char","submit","isUp","newIndex","swap","isDown","i","j","handleMouse","event","action","scroll"],"mappings":";;;;+BAMaA;;;eAAAA;;;sBANQ;sBACE;uBACD;yBACE;;;;;;;;;;;;;;AAGjB,IAAA,AAAMA,aAAN,MAAMA,mBAAmBC,YAAM;IAYxBC,OAAOC,YAAqB,EAAE;QACpC,oBAAoB;QACpB,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,4FAA4F;QAC5F,IAAI,CAACD,SAAS,GAAGE,KAAKC,GAAG,CAAC,GAAGD,KAAKE,GAAG,CAAC,IAAI,CAACJ,SAAS,EAAE,IAAI,CAACK,KAAK,CAACC,MAAM,GAAG,IAAI,CAACL,QAAQ;QACvF,IAAI,IAAI,CAACD,SAAS,GAAG,GAAG,IAAI,CAACA,SAAS,GAAG;QAEzC,IAAIO,SAAS;QAEb,SAAS;QACTA,UAAU,GAAGC,YAAK,CAACC,OAAO,CAAC,CAAC,EAAEC,UAAI,CAACC,KAAK,CAAC,CAAC,EAAED,UAAI,CAACE,IAAI,GAAGJ,YAAK,CAACK,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGL,UAAI,CAACC,KAAK,CAAC,CAAC,EAAEH,YAAK,CAACQ,KAAK,CAAC,2DAA2D,EAAEN,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAElM,MAAMM,eAAe,IAAI,CAACZ,KAAK,CAACa,KAAK,CAAC,IAAI,CAAClB,SAAS,EAAE,IAAI,CAACA,SAAS,GAAG,IAAI,CAACC,QAAQ;QAEpFgB,aAAaE,OAAO,CAAC,CAACC,MAAMC;YACxB,MAAMC,cAAc,IAAI,CAACtB,SAAS,GAAGqB;YACrC,IAAIA,QAAQ,GAAGd,UAAU;YAEzB,MAAMgB,aAAaD,gBAAgB,IAAI,CAACvB,aAAa;YACrD,MAAMyB,YAAYF,gBAAgB,IAAI,CAACG,YAAY;YAEnD,UAAU;YACV,IAAIC,SAAS;YACb,IAAIH,YAAY;gBACZ,IAAIC,WAAW;oBACXE,SAAS,GAAGlB,YAAK,CAACmB,IAAI,GAAGC,gBAAO,CAACC,OAAO,GAAGD,gBAAO,CAACC,OAAO,CAAC,CAAC,CAAC,EAAE,8BAA8B;gBACjG,OAAO;oBACHH,SAAS,GAAGlB,YAAK,CAACmB,IAAI,GAAGC,gBAAO,CAACC,OAAO,CAAC,CAAC,CAAC;gBAC/C;YACJ,OAAO,IAAIL,WAAW;YAClB,wDAAwD;YACxD,+BAA+B;YACnC;YAEA,eAAe;YACf,IAAIM,UAAUV;YACd,IAAII,WAAW;gBACXM,UAAU,GAAGpB,UAAI,CAACE,IAAI,GAAGJ,YAAK,CAACmB,IAAI,GAAGG,UAAUpB,UAAI,CAACC,KAAK,EAAE;YAChE,OAAO,IAAIY,YAAY;gBACnBO,UAAU,GAAGtB,YAAK,CAACmB,IAAI,GAAGG,UAAUpB,UAAI,CAACC,KAAK,EAAE;YACpD;YAEAJ,UAAU,GAAGmB,SAASI,SAAS;QACnC;QAEA,IAAI,CAACC,WAAW,CAACxB;IACrB;IAEUyB,YAAYC,IAAY,EAAE;QAChC,QAAQ;QACR,IAAIA,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,CAACC,MAAM,CAAC,IAAI,CAAC7B,KAAK;YACtB;QACJ;QAEA,oBAAoB;QACpB,IAAI4B,SAAS,KAAK;YACd,IAAI,IAAI,CAACR,YAAY,KAAK,MAAM;gBAC5B,IAAI,CAACA,YAAY,GAAG,IAAI,CAAC1B,aAAa;YAC1C,OAAO;gBACH,IAAI,CAAC0B,YAAY,GAAG;YACxB;YACA,IAAI,CAAC5B,MAAM,CAAC;YACZ;QACJ;QAEA,KAAK;QACL,IAAI,IAAI,CAACsC,IAAI,CAACF,OAAO;YACjB,IAAI,IAAI,CAACR,YAAY,KAAK,MAAM;gBAC5B,eAAe;gBACf,IAAI,IAAI,CAAC1B,aAAa,GAAG,GAAG;oBACxB,MAAMqC,WAAW,IAAI,CAACrC,aAAa,GAAG;oBACtC,IAAI,CAACsC,IAAI,CAAC,IAAI,CAACtC,aAAa,EAAEqC;oBAC9B,IAAI,CAACrC,aAAa,GAAGqC;oBACrB,IAAI,CAACX,YAAY,GAAGW;gBACxB;YACJ,OAAO;gBACH,iBAAiB;gBACjB,IAAI,CAACrC,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACM,KAAK,CAACC,MAAM,GAAG;YAC/F;YACA,IAAI,CAACT,MAAM,CAAC;YACZ;QACJ;QAEA,OAAO;QACP,IAAI,IAAI,CAACyC,MAAM,CAACL,OAAO;YACnB,IAAI,IAAI,CAACR,YAAY,KAAK,MAAM;gBAC5B,iBAAiB;gBACjB,IAAI,IAAI,CAAC1B,aAAa,GAAG,IAAI,CAACM,KAAK,CAACC,MAAM,GAAG,GAAG;oBAC5C,MAAM8B,WAAW,IAAI,CAACrC,aAAa,GAAG;oBACtC,IAAI,CAACsC,IAAI,CAAC,IAAI,CAACtC,aAAa,EAAEqC;oBAC9B,IAAI,CAACrC,aAAa,GAAGqC;oBACrB,IAAI,CAACX,YAAY,GAAGW;gBACxB;YACJ,OAAO;gBACH,mBAAmB;gBACnB,IAAI,CAACrC,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,CAACM,KAAK,CAACC,MAAM,GAAG,IAAI,IAAI,CAACP,aAAa,GAAG,IAAI;YAC/F;YACA,IAAI,CAACF,MAAM,CAAC;YACZ;QACJ;IACJ;IAEQwC,KAAKE,CAAS,EAAEC,CAAS,EAAE;QAC/B,CAAC,IAAI,CAACnC,KAAK,CAACkC,EAAE,EAAE,IAAI,CAAClC,KAAK,CAACmC,EAAE,CAAC,GAAG;YAAC,IAAI,CAACnC,KAAK,CAACmC,EAAE;YAAE,IAAI,CAACnC,KAAK,CAACkC,EAAE;SAAC;IACnE;IAEUE,YAAYC,KAAiB,EAAE;QACrC,uCAAuC;QACvC,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,IAAID,MAAME,MAAM,KAAK,MAAM;gBACvB,IAAI,IAAI,CAACnB,YAAY,KAAK,MAAM;oBAC5B,IAAI,IAAI,CAAC1B,aAAa,GAAG,GAAG;wBACxB,MAAMqC,WAAW,IAAI,CAACrC,aAAa,GAAG;wBACtC,IAAI,CAACsC,IAAI,CAAC,IAAI,CAACtC,aAAa,EAAEqC;wBAC9B,IAAI,CAACrC,aAAa,GAAGqC;wBACrB,IAAI,CAACX,YAAY,GAAGW;oBACxB;gBACJ,OAAO;oBACH,IAAI,CAACrC,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACM,KAAK,CAACC,MAAM,GAAG;gBAC/F;gBACA,IAAI,CAACT,MAAM,CAAC;YAChB,OAAO,IAAI6C,MAAME,MAAM,KAAK,QAAQ;gBAChC,IAAI,IAAI,CAACnB,YAAY,KAAK,MAAM;oBAC5B,IAAI,IAAI,CAAC1B,aAAa,GAAG,IAAI,CAACM,KAAK,CAACC,MAAM,GAAG,GAAG;wBAC5C,MAAM8B,WAAW,IAAI,CAACrC,aAAa,GAAG;wBACtC,IAAI,CAACsC,IAAI,CAAC,IAAI,CAACtC,aAAa,EAAEqC;wBAC9B,IAAI,CAACrC,aAAa,GAAGqC;wBACrB,IAAI,CAACX,YAAY,GAAGW;oBACxB;gBACJ,OAAO;oBACH,IAAI,CAACrC,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,CAACM,KAAK,CAACC,MAAM,GAAG,IAAI,IAAI,CAACP,aAAa,GAAG,IAAI;gBAC/F;gBACA,IAAI,CAACF,MAAM,CAAC;YAChB;QACJ;IACJ;IAlJA,YAAYiB,OAAoB,CAAE;QAC9B,KAAK,CAACA,UAPV,uBAAQT,SAAR,KAAA,IACA,uBAAQN,iBAAwB,IAChC,uBAAQ0B,gBAA8B,OACtC,uBAAQzB,aAAoB,IAC5B,uBAAiBC,YAAmB;QAIhC,IAAI,CAACI,KAAK,GAAG;eAAIS,QAAQT,KAAK;SAAC;IACnC;AAgJJ"}
@@ -0,0 +1,80 @@
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
@@ -0,0 +1 @@
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,33 +1,40 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SpreadsheetPrompt = 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 SpreadsheetPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.cursorRow = 0;
13
- this.cursorCol = 0;
14
- this.scrollRow = 0;
15
- this.scrollCol = 0;
16
- this.editMode = false;
17
- this.tempValue = '';
18
- this.colWidths = [];
19
- this.viewportHeight = options.rows || 10;
20
- this.calculateColWidths();
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;
21
26
  }
27
+ return obj;
28
+ }
29
+ let SpreadsheetPrompt = class SpreadsheetPrompt extends _base.Prompt {
22
30
  calculateColWidths() {
23
- this.colWidths = this.options.columns.map(col => {
24
- if (col.width)
25
- return col.width;
31
+ this.colWidths = this.options.columns.map((col)=>{
32
+ if (col.width) return col.width;
26
33
  // Auto calculate based on header and data
27
- let max = (0, utils_1.stringWidth)(col.name);
28
- this.options.data.forEach(row => {
34
+ let max = (0, _utils.stringWidth)(col.name);
35
+ this.options.data.forEach((row)=>{
29
36
  const val = String(row[col.key] || '');
30
- max = Math.max(max, (0, utils_1.stringWidth)(val));
37
+ max = Math.max(max, (0, _utils.stringWidth)(val));
31
38
  });
32
39
  return Math.min(max + 2, 30); // Cap at 30 chars
33
40
  });
@@ -35,52 +42,48 @@ class SpreadsheetPrompt extends base_1.Prompt {
35
42
  render(_firstRender) {
36
43
  let output = '';
37
44
  // Title
38
- const mode = this.editMode ? `${ansi_1.ANSI.FG_YELLOW}[EDIT]${ansi_1.ANSI.RESET}` : `${ansi_1.ANSI.FG_BLUE}[NAV]${ansi_1.ANSI.RESET}`;
39
- output += `${theme_1.theme.title}${this.options.message} ${mode}${ansi_1.ANSI.RESET}\n`;
40
- output += `${ansi_1.ANSI.DIM}(Arrows: Move, Enter/Type: Edit, Esc: Cancel)${ansi_1.ANSI.RESET}\n`;
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`;
41
48
  // Viewport Logic (Rows)
42
49
  const maxScrollRow = Math.max(0, this.options.data.length - this.viewportHeight);
43
- if (this.cursorRow < this.scrollRow)
44
- this.scrollRow = this.cursorRow;
45
- if (this.cursorRow >= this.scrollRow + this.viewportHeight)
46
- this.scrollRow = this.cursorRow - this.viewportHeight + 1;
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;
47
52
  this.scrollRow = Math.min(maxScrollRow, this.scrollRow);
48
53
  // Viewport Logic (Columns - Horizontal Scroll)
49
54
  const termWidth = this.stdout.columns || 80;
50
55
  let currentWidth = 4; // Row number column (3 digits + space)
51
56
  const visibleCols = [];
52
- for (let i = this.scrollCol; i < this.options.columns.length; i++) {
57
+ for(let i = this.scrollCol; i < this.options.columns.length; i++){
53
58
  const w = this.colWidths[i];
54
59
  // Check if adding this column exceeds width
55
60
  // We allow at least one column even if it exceeds? No, standard behavior.
56
- if (currentWidth + w + 1 > termWidth && visibleCols.length > 0)
57
- break;
61
+ if (currentWidth + w + 1 > termWidth && visibleCols.length > 0) break;
58
62
  visibleCols.push(i);
59
63
  currentWidth += w + 1;
60
64
  }
61
65
  // Render Header
62
66
  let headerStr = ' ';
63
67
  let totalWidth = 3;
64
- visibleCols.forEach(idx => {
68
+ visibleCols.forEach((idx)=>{
65
69
  const col = this.options.columns[idx];
66
70
  const w = this.colWidths[idx];
67
71
  headerStr += this.pad(col.name, w) + ' ';
68
72
  totalWidth += w + 1;
69
73
  });
70
- output += `${ansi_1.ANSI.BOLD}${headerStr}${ansi_1.ANSI.RESET}\n`;
71
- output += `${ansi_1.ANSI.DIM} ${symbols_1.symbols.horizontal.repeat(Math.max(0, totalWidth - 3))}${ansi_1.ANSI.RESET}\n`;
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`;
72
76
  // Render Rows
73
- for (let i = 0; i < this.viewportHeight; i++) {
77
+ for(let i = 0; i < this.viewportHeight; i++){
74
78
  const rowIndex = this.scrollRow + i;
75
- if (rowIndex >= this.options.data.length)
76
- break;
79
+ if (rowIndex >= this.options.data.length) break;
77
80
  const rowData = this.options.data[rowIndex];
78
81
  // Row Number
79
- let rowStr = `${ansi_1.ANSI.DIM}${String(rowIndex + 1).padEnd(3)}${ansi_1.ANSI.RESET}`;
80
- visibleCols.forEach(colIndex => {
82
+ let rowStr = `${_ansi.ANSI.DIM}${String(rowIndex + 1).padEnd(3)}${_ansi.ANSI.RESET}`;
83
+ visibleCols.forEach((colIndex)=>{
81
84
  const col = this.options.columns[colIndex];
82
85
  const w = this.colWidths[colIndex];
83
- const isCursor = (rowIndex === this.cursorRow) && (colIndex === this.cursorCol);
86
+ const isCursor = rowIndex === this.cursorRow && colIndex === this.cursorCol;
84
87
  let val = String(rowData[col.key] || '');
85
88
  if (isCursor && this.editMode) {
86
89
  val = this.tempValue;
@@ -90,11 +93,10 @@ class SpreadsheetPrompt extends base_1.Prompt {
90
93
  if (isCursor) {
91
94
  if (this.editMode) {
92
95
  // Highlight editing
93
- displayVal = `${theme_1.theme.main}${ansi_1.ANSI.UNDERLINE}${displayVal}${ansi_1.ANSI.RESET}`;
94
- }
95
- else {
96
+ displayVal = `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${displayVal}${_ansi.ANSI.RESET}`;
97
+ } else {
96
98
  // Highlight selection
97
- displayVal = `${ansi_1.ANSI.REVERSE}${displayVal}${ansi_1.ANSI.RESET}`;
99
+ displayVal = `${_ansi.ANSI.REVERSE}${displayVal}${_ansi.ANSI.RESET}`;
98
100
  }
99
101
  }
100
102
  rowStr += displayVal + ' ';
@@ -103,24 +105,21 @@ class SpreadsheetPrompt extends base_1.Prompt {
103
105
  }
104
106
  // Footer / Status
105
107
  if (this.editMode) {
106
- output += `\n${ansi_1.ANSI.FG_YELLOW}Editing cell (${this.cursorRow + 1}, ${this.options.columns[this.cursorCol].name}). Press Enter to save.${ansi_1.ANSI.RESET}`;
107
- }
108
- else {
109
- output += `\n${ansi_1.ANSI.DIM}Press 's' or Enter to Save & Exit${ansi_1.ANSI.RESET}`;
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}`;
110
111
  }
111
112
  this.renderFrame(output);
112
113
  }
113
114
  pad(str, width) {
114
- const w = (0, utils_1.stringWidth)(str);
115
- if (w >= width)
116
- return str;
115
+ const w = (0, _utils.stringWidth)(str);
116
+ if (w >= width) return str;
117
117
  return str + ' '.repeat(width - w);
118
118
  }
119
119
  handleInput(char, _key) {
120
120
  if (this.editMode) {
121
121
  this.handleEditInput(char);
122
- }
123
- else {
122
+ } else {
124
123
  this.handleNavInput(char);
125
124
  }
126
125
  }
@@ -148,21 +147,19 @@ class SpreadsheetPrompt extends base_1.Prompt {
148
147
  this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);
149
148
  // Adjust scrollCol to keep cursor visible
150
149
  // Loop until cursorCol is within visible range
151
- while (true) {
150
+ while(true){
152
151
  const termWidth = this.stdout.columns || 80;
153
152
  let w = 4; // Row num
154
153
  let isVisible = false;
155
- for (let i = this.scrollCol; i < this.options.columns.length; i++) {
154
+ for(let i = this.scrollCol; i < this.options.columns.length; i++){
156
155
  w += this.colWidths[i] + 1;
157
- if (w > termWidth && i > this.scrollCol)
158
- break; // Allow at least one
156
+ if (w > termWidth && i > this.scrollCol) break; // Allow at least one
159
157
  if (i === this.cursorCol) {
160
158
  isVisible = true;
161
159
  break;
162
160
  }
163
161
  }
164
- if (isVisible)
165
- break;
162
+ if (isVisible) break;
166
163
  this.scrollCol++;
167
164
  if (this.scrollCol > this.cursorCol) {
168
165
  this.scrollCol = this.cursorCol;
@@ -190,8 +187,7 @@ class SpreadsheetPrompt extends base_1.Prompt {
190
187
  }
191
188
  startEditing(initialChar = '') {
192
189
  const col = this.options.columns[this.cursorCol];
193
- if (col.editable === false)
194
- return;
190
+ if (col.editable === false) return;
195
191
  this.editMode = true;
196
192
  const currentVal = String(this.options.data[this.cursorRow][col.key] || '');
197
193
  this.tempValue = initialChar ? initialChar : currentVal;
@@ -208,7 +204,7 @@ class SpreadsheetPrompt extends base_1.Prompt {
208
204
  this.render(false);
209
205
  return;
210
206
  }
211
- if (char === '\x1b') { // Esc
207
+ if (char === '\x1b') {
212
208
  this.editMode = false;
213
209
  this.render(false);
214
210
  return;
@@ -228,12 +224,17 @@ class SpreadsheetPrompt extends base_1.Prompt {
228
224
  if (event.scroll === 'up') {
229
225
  this.cursorRow = Math.max(0, this.cursorRow - 1);
230
226
  this.render(false);
231
- }
232
- else {
227
+ } else {
233
228
  this.cursorRow = Math.min(this.options.data.length - 1, this.cursorRow + 1);
234
229
  this.render(false);
235
230
  }
236
231
  }
237
232
  }
238
- }
239
- exports.SpreadsheetPrompt = SpreadsheetPrompt;
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
@@ -0,0 +1 @@
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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"}