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,6 +0,0 @@
1
- import { SelectPrompt } from './select';
2
- import { SemVerOptions } from '../types';
3
- export declare class SemVerPrompt extends SelectPrompt<string> {
4
- constructor(options: SemVerOptions);
5
- private static parseVersion;
6
- }
@@ -1,9 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { ShortcutOptions, ShortcutResult } from '../types';
3
- export declare class ShortcutPrompt extends Prompt<ShortcutResult, ShortcutOptions> {
4
- private currentKey?;
5
- constructor(options: ShortcutOptions);
6
- protected render(_firstRender: boolean): void;
7
- protected handleInput(char: string, buffer: Buffer): void;
8
- private parseKey;
9
- }
@@ -1,135 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ShortcutPrompt = void 0;
4
- const base_1 = require("../base");
5
- const ansi_1 = require("../ansi");
6
- const theme_1 = require("../theme");
7
- class ShortcutPrompt extends base_1.Prompt {
8
- constructor(options) {
9
- super(options);
10
- this.currentKey = options.initial;
11
- }
12
- render(_firstRender) {
13
- let text = `${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} `;
14
- if (this.currentKey) {
15
- const parts = [];
16
- if (this.currentKey.ctrl)
17
- parts.push(`${ansi_1.ANSI.REVERSE} Ctrl ${ansi_1.ANSI.RESET}`);
18
- if (this.currentKey.meta)
19
- parts.push(`${ansi_1.ANSI.REVERSE} Alt ${ansi_1.ANSI.RESET}`);
20
- if (this.currentKey.shift)
21
- parts.push(`${ansi_1.ANSI.REVERSE} Shift ${ansi_1.ANSI.RESET}`);
22
- if (this.currentKey.name) {
23
- parts.push(`${ansi_1.ANSI.FG_CYAN}[${this.currentKey.name}]${ansi_1.ANSI.RESET}`);
24
- }
25
- text += parts.join(' + ');
26
- text += ` ${theme_1.theme.muted}(Press Enter to confirm)${ansi_1.ANSI.RESET}`;
27
- }
28
- else {
29
- text += `${theme_1.theme.muted}Press any key combination...${ansi_1.ANSI.RESET}`;
30
- }
31
- this.renderFrame(text);
32
- }
33
- handleInput(char, buffer) {
34
- const raw = buffer.toString();
35
- // Enter to confirm
36
- if (char === '\r' || char === '\n') {
37
- if (this.currentKey) {
38
- this.submit(this.currentKey);
39
- }
40
- return;
41
- }
42
- // Parse the key
43
- const parsed = this.parseKey(char, raw);
44
- if (parsed) {
45
- this.currentKey = parsed;
46
- this.render(false);
47
- }
48
- }
49
- parseKey(char, raw) {
50
- let name = '';
51
- let ctrl = false;
52
- let meta = false;
53
- let shift = false;
54
- const code = raw.charCodeAt(0);
55
- // Control Keys (1-26, except Backspace, Tab, Enter, Esc)
56
- if (code >= 1 && code <= 26) {
57
- // Exclude special control codes
58
- if (char === '\t') { // Ctrl+I
59
- name = 'Tab';
60
- }
61
- else if (char === '\n' || char === '\r') { // Ctrl+J / Ctrl+M
62
- name = 'Enter';
63
- }
64
- else if (char === '\b') { // Ctrl+H
65
- name = 'Backspace';
66
- }
67
- else {
68
- ctrl = true;
69
- name = String.fromCharCode(code + 64); // 1 -> 'A'
70
- }
71
- }
72
- else if (code === 27) { // Escape
73
- if (raw.length === 1) {
74
- name = 'Escape';
75
- }
76
- else {
77
- // Sequence starting with ESC
78
- meta = true; // Assume Alt for ESC+Char
79
- if (raw.length === 2) {
80
- // Alt + Char
81
- name = raw[1].toUpperCase();
82
- // Check shift for Alt+Shift+Char logic?
83
- if (raw[1] >= 'A' && raw[1] <= 'Z')
84
- shift = true;
85
- }
86
- else {
87
- // CSI sequences
88
- meta = false; // Usually these are navigation
89
- if (raw === '\u001b[A')
90
- name = 'Up';
91
- else if (raw === '\u001b[B')
92
- name = 'Down';
93
- else if (raw === '\u001b[C')
94
- name = 'Right';
95
- else if (raw === '\u001b[D')
96
- name = 'Left';
97
- else if (raw === '\u001b[H')
98
- name = 'Home';
99
- else if (raw === '\u001b[F')
100
- name = 'End';
101
- else if (raw === '\u001b[3~')
102
- name = 'Delete';
103
- else if (raw === '\u001b[Z') {
104
- name = 'Tab';
105
- shift = true;
106
- } // Shift+Tab
107
- else {
108
- name = 'Unknown';
109
- }
110
- }
111
- }
112
- }
113
- else if (code === 127) {
114
- name = 'Backspace';
115
- }
116
- else {
117
- // Regular char
118
- name = char.toUpperCase();
119
- if (char >= 'A' && char <= 'Z')
120
- shift = true;
121
- if (char === ' ')
122
- name = 'Space';
123
- // Special Symbols map?
124
- // Keep it simple for now.
125
- }
126
- return {
127
- name,
128
- ctrl,
129
- shift,
130
- meta,
131
- sequence: raw
132
- };
133
- }
134
- }
135
- exports.ShortcutPrompt = ShortcutPrompt;
@@ -1,8 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { SliderOptions, MouseEvent } from '../types';
3
- export declare class SliderPrompt extends Prompt<number, SliderOptions> {
4
- constructor(options: SliderOptions);
5
- protected render(_firstRender: boolean): void;
6
- protected handleInput(char: string): void;
7
- protected handleMouse(event: MouseEvent): void;
8
- }
@@ -1,16 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { SlotOptions } from '../types';
3
- export declare class SlotPrompt extends Prompt<string, SlotOptions> {
4
- private selectedIndex;
5
- private isSpinning;
6
- private isStopping;
7
- private spinSpeed;
8
- private spinTimer?;
9
- private rows;
10
- constructor(options: SlotOptions);
11
- private spin;
12
- private finish;
13
- protected handleInput(char: string, _key: Buffer): void;
14
- protected render(_firstRender: boolean): void;
15
- protected cleanup(): void;
16
- }
@@ -1,107 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SlotPrompt = 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 SlotPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.isSpinning = false;
13
- this.isStopping = false;
14
- this.spinSpeed = 50; // Initial speed (ms)
15
- this.rows = options.rows || 3;
16
- // Ensure rows is odd to have a center
17
- if (this.rows % 2 === 0)
18
- this.rows++;
19
- this.selectedIndex = options.initial || 0;
20
- }
21
- spin() {
22
- if (!this.isSpinning)
23
- return;
24
- this.selectedIndex = (this.selectedIndex + 1) % this.options.choices.length;
25
- this.render(false);
26
- if (this.isStopping) {
27
- // Deceleration physics
28
- this.spinSpeed = Math.floor(this.spinSpeed * 1.1);
29
- if (this.spinSpeed > 400) {
30
- this.isSpinning = false;
31
- this.finish();
32
- return;
33
- }
34
- }
35
- this.spinTimer = setTimeout(() => this.spin(), this.spinSpeed);
36
- }
37
- finish() {
38
- if (this.spinTimer)
39
- clearTimeout(this.spinTimer);
40
- this.submit(this.options.choices[this.selectedIndex]);
41
- }
42
- handleInput(char, _key) {
43
- if (char === ' ' || char === '\r' || char === '\n') {
44
- if (!this.isSpinning) {
45
- // Start spinning
46
- this.isSpinning = true;
47
- this.isStopping = false;
48
- this.spinSpeed = 50; // Reset speed
49
- this.spin();
50
- }
51
- else if (!this.isStopping) {
52
- // Initiate stop sequence
53
- this.isStopping = true;
54
- }
55
- }
56
- }
57
- render(_firstRender) {
58
- let output = '';
59
- // Header
60
- output += `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
61
- // Calculate dynamic width
62
- const maxLen = Math.max(...this.options.choices.map(c => (0, utils_1.stringWidth)(c)));
63
- const boxWidth = Math.max(20, maxLen + 6);
64
- const border = symbols_1.symbols.line.repeat(boxWidth - 2);
65
- output += `┌${border}┐\n`;
66
- const centerRow = Math.floor(this.rows / 2);
67
- for (let i = 0; i < this.rows; i++) {
68
- const offset = i - centerRow;
69
- let index = (this.selectedIndex + offset) % this.options.choices.length;
70
- if (index < 0)
71
- index += this.options.choices.length;
72
- const item = this.options.choices[index];
73
- const content = this.truncate(item, boxWidth - 4);
74
- const contentWidth = (0, utils_1.stringWidth)(content);
75
- const padding = boxWidth - 4 - contentWidth;
76
- const leftPad = ' '.repeat(Math.floor(padding / 2));
77
- const rightPad = ' '.repeat(Math.ceil(padding / 2));
78
- const lineContent = `${leftPad}${content}${rightPad}`;
79
- if (i === centerRow) {
80
- // Highlight
81
- output += `│ ${theme_1.theme.main}${ansi_1.ANSI.REVERSE} ${lineContent} ${ansi_1.ANSI.RESET} │ ${theme_1.theme.main}◄${ansi_1.ANSI.RESET}\n`;
82
- }
83
- else {
84
- output += `│ ${lineContent} │\n`;
85
- }
86
- }
87
- output += `└${border}┘`;
88
- // Instructions
89
- if (!this.isSpinning) {
90
- output += `\n${theme_1.theme.muted}(Press Space/Enter to Spin)${ansi_1.ANSI.RESET}`;
91
- }
92
- else if (this.isStopping) {
93
- output += `\n${theme_1.theme.muted}(Stopping...)${ansi_1.ANSI.RESET}`;
94
- }
95
- else {
96
- output += `\n${theme_1.theme.muted}(Press Space/Enter to Stop)${ansi_1.ANSI.RESET}`;
97
- }
98
- this.renderFrame(output);
99
- }
100
- // Override cleanup to ensure timer is cleared if user Ctrl+C
101
- cleanup() {
102
- if (this.spinTimer)
103
- clearTimeout(this.spinTimer);
104
- super.cleanup();
105
- }
106
- }
107
- exports.SlotPrompt = SlotPrompt;
@@ -1,19 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { SnippetOptions, MouseEvent } from '../types';
3
- export declare class SnippetPrompt extends Prompt<string, SnippetOptions> {
4
- private tokens;
5
- private variableTokens;
6
- private values;
7
- private activeVarIndex;
8
- private cursor;
9
- private errorMsg;
10
- private lastLinesUp;
11
- constructor(options: SnippetOptions);
12
- private parseTemplate;
13
- protected render(firstRender: boolean): void;
14
- protected cleanup(): void;
15
- protected handleInput(char: string, _key: Buffer): void;
16
- protected handleMouse(event: MouseEvent): void;
17
- private moveFocus;
18
- private submitSnippet;
19
- }
@@ -1,16 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { SortGridOptions, MouseEvent } from '../types';
3
- export declare class SortGridPrompt extends Prompt<string[][], SortGridOptions> {
4
- protected cursorX: number;
5
- protected cursorY: number;
6
- protected grabbedX: number | null;
7
- protected grabbedY: number | null;
8
- private gridData;
9
- private columnWidths;
10
- constructor(options: SortGridOptions);
11
- private calculateLayout;
12
- protected render(_firstRender: boolean): void;
13
- protected handleInput(char: string, _key: Buffer): void;
14
- protected handleMouse(event: MouseEvent): void;
15
- protected move(direction: 'up' | 'down' | 'left' | 'right'): void;
16
- }
@@ -1,14 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { SortOptions, MouseEvent } from '../types';
3
- export declare class SortPrompt extends Prompt<string[], SortOptions> {
4
- private items;
5
- private selectedIndex;
6
- private grabbedIndex;
7
- private scrollTop;
8
- private readonly pageSize;
9
- constructor(options: SortOptions);
10
- protected render(_firstRender: boolean): void;
11
- protected handleInput(char: string): void;
12
- private swap;
13
- protected handleMouse(event: MouseEvent): void;
14
- }
@@ -1,17 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { BaseOptions } from '../types';
3
- interface SpamOptions extends BaseOptions {
4
- threshold: number;
5
- spamKey?: string;
6
- decay?: boolean;
7
- }
8
- export declare class SpamPrompt extends Prompt<boolean, SpamOptions> {
9
- private count;
10
- private width;
11
- private decayTimer?;
12
- constructor(options: SpamOptions);
13
- protected cleanup(): void;
14
- protected render(_firstRender: boolean): void;
15
- protected handleInput(char: string): void;
16
- }
17
- export {};
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SpamPrompt = 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 SpamPrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- this.count = 0;
12
- this.width = 20; // Visual width of the bar
13
- if (options.decay) {
14
- this.decayTimer = setInterval(() => {
15
- if (this.count > 0) {
16
- this.count = Math.max(0, this.count - 1);
17
- this.render(false);
18
- }
19
- }, 200); // Drop 5 presses per second
20
- }
21
- }
22
- cleanup() {
23
- if (this.decayTimer)
24
- clearInterval(this.decayTimer);
25
- super.cleanup();
26
- }
27
- render(_firstRender) {
28
- const progress = Math.min(this.count / this.options.threshold, 1);
29
- const filledLen = Math.round(progress * this.width);
30
- const emptyLen = this.width - filledLen;
31
- // Visual Bar: [#####-----]
32
- const filled = symbols_1.symbols.line.repeat(filledLen).replace(/./g, '#'); // Or use block char
33
- const empty = symbols_1.symbols.line.repeat(emptyLen);
34
- const barColor = progress === 1 ? theme_1.theme.success : theme_1.theme.error;
35
- const bar = `${theme_1.theme.muted}[${barColor}${filled}${theme_1.theme.muted}${empty}]${ansi_1.ANSI.RESET}`;
36
- let output = `${theme_1.theme.error}${symbols_1.symbols.cross} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
37
- output += ` ${bar} ${Math.floor(progress * 100)}%`;
38
- if (this.count >= this.options.threshold) {
39
- output += ` ${theme_1.theme.success} READY! Press Enter${ansi_1.ANSI.RESET}`;
40
- }
41
- else {
42
- output += ` ${theme_1.theme.muted}(Mash '${this.options.spamKey || 'Space'}' to fill)${ansi_1.ANSI.RESET}`;
43
- }
44
- this.renderFrame(output);
45
- }
46
- handleInput(char) {
47
- // Confirm execution
48
- if (this.count >= this.options.threshold && (char === '\r' || char === '\n')) {
49
- this.submit(true);
50
- return;
51
- }
52
- const trigger = this.options.spamKey || ' ';
53
- // Check if key matches (or any key if not specified)
54
- if (char === trigger) {
55
- if (this.count < this.options.threshold) {
56
- this.count++;
57
- this.render(false);
58
- }
59
- }
60
- }
61
- }
62
- exports.SpamPrompt = SpamPrompt;
@@ -1,21 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { SpreadsheetOptions, MouseEvent } from '../types';
3
- export declare class SpreadsheetPrompt extends Prompt<Record<string, any>[], SpreadsheetOptions> {
4
- private cursorRow;
5
- private cursorCol;
6
- private scrollRow;
7
- private scrollCol;
8
- private editMode;
9
- private tempValue;
10
- private colWidths;
11
- private viewportHeight;
12
- constructor(options: SpreadsheetOptions);
13
- private calculateColWidths;
14
- protected render(_firstRender: boolean): void;
15
- private pad;
16
- protected handleInput(char: string, _key: Buffer): void;
17
- private handleNavInput;
18
- private startEditing;
19
- private handleEditInput;
20
- protected handleMouse(event: MouseEvent): void;
21
- }
@@ -1,14 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { TableOptions, MouseEvent } from '../types';
3
- export declare class TablePrompt<V> extends Prompt<V, TableOptions<V>> {
4
- private selectedIndex;
5
- private scrollTop;
6
- private readonly pageSize;
7
- private colWidths;
8
- constructor(options: TableOptions<V>);
9
- private calculateColWidths;
10
- protected render(_firstRender: boolean): void;
11
- private pad;
12
- protected handleInput(char: string): void;
13
- protected handleMouse(event: MouseEvent): void;
14
- }
@@ -1,17 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { TextOptions } from '../types';
3
- export declare class TextPrompt<O extends TextOptions = TextOptions> extends Prompt<string, O> {
4
- protected errorMsg: string;
5
- protected cursor: number;
6
- protected hasTyped: boolean;
7
- protected segments: string[];
8
- protected lastLinesUp: number;
9
- private ghost;
10
- constructor(options: O);
11
- private triggerSuggest;
12
- protected render(firstRender: boolean): void;
13
- private getSegmentWidth;
14
- protected cleanup(): void;
15
- protected handleInput(char: string): void;
16
- private validateAndSubmit;
17
- }
@@ -1,12 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { TimeOptions, MouseEvent } from '../types';
3
- export declare class TimePrompt extends Prompt<string, TimeOptions> {
4
- private hour;
5
- private minute;
6
- private activeCol;
7
- constructor(options: TimeOptions);
8
- protected render(_firstRender: boolean): void;
9
- protected handleMouse(event: MouseEvent): void;
10
- protected handleInput(char: string, _key: Buffer): void;
11
- private adjustValue;
12
- }
@@ -1,8 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { ToggleOptions, MouseEvent } from '../types';
3
- export declare class TogglePrompt extends Prompt<boolean, ToggleOptions> {
4
- constructor(options: ToggleOptions);
5
- protected render(_firstRender: boolean): void;
6
- protected handleInput(char: string): void;
7
- protected handleMouse(event: MouseEvent): void;
8
- }
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TogglePrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- // --- Implementation: Toggle Prompt ---
8
- class TogglePrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- this.value = options.initial ?? false;
12
- }
13
- render(_firstRender) {
14
- const activeText = this.options.activeText || 'ON';
15
- const inactiveText = this.options.inactiveText || 'OFF';
16
- let toggleDisplay = '';
17
- if (this.value) {
18
- toggleDisplay = `${theme_1.theme.main}[${ansi_1.ANSI.BOLD}${activeText}${ansi_1.ANSI.RESET}${theme_1.theme.main}]${ansi_1.ANSI.RESET} ${theme_1.theme.muted}${inactiveText}${ansi_1.ANSI.RESET}`;
19
- }
20
- else {
21
- toggleDisplay = `${theme_1.theme.muted}${activeText}${ansi_1.ANSI.RESET} ${theme_1.theme.main}[${ansi_1.ANSI.BOLD}${inactiveText}${ansi_1.ANSI.RESET}${theme_1.theme.main}]${ansi_1.ANSI.RESET}`;
22
- }
23
- const output = `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} ${toggleDisplay}`;
24
- this.renderFrame(output);
25
- }
26
- handleInput(char) {
27
- if (char === '\r' || char === '\n') {
28
- this.submit(this.value);
29
- return;
30
- }
31
- if (this.isLeft(char) || this.isRight(char) || char === 'h' || char === 'l') { // Left/Right
32
- this.value = !this.value;
33
- this.render(false);
34
- }
35
- if (char === ' ') {
36
- this.value = !this.value;
37
- this.render(false);
38
- }
39
- }
40
- handleMouse(event) {
41
- if (event.action === 'scroll') {
42
- this.value = !this.value;
43
- this.render(false);
44
- }
45
- }
46
- }
47
- exports.TogglePrompt = TogglePrompt;
@@ -1,18 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { TransferOptions, MouseEvent } from '../types';
3
- export declare class TransferPrompt<V> extends Prompt<[V[], V[]], TransferOptions<V>> {
4
- private leftList;
5
- private rightList;
6
- private cursorLeft;
7
- private cursorRight;
8
- private scrollTopLeft;
9
- private scrollTopRight;
10
- private activeSide;
11
- private readonly pageSize;
12
- constructor(options: TransferOptions<V>);
13
- private normalize;
14
- protected truncate(str: string, width: number): string;
15
- protected render(_firstRender: boolean): void;
16
- protected handleInput(char: string): void;
17
- protected handleMouse(event: MouseEvent): void;
18
- }
@@ -1,31 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { TreeSelectOptions, MouseEvent } from '../types';
3
- /**
4
- * FIXED-ISH: This prompt may hang on Windows TTY after multiple prompt cycles.
5
- * Current workaround: User must press 'Enter' to flush the stdin buffer.
6
- * Potential root cause: Synchronous recursion during initialization blocking setRawMode.
7
- */
8
- export declare class TreeSelectPrompt<V> extends Prompt<V[], TreeSelectOptions<V>> {
9
- private cursor;
10
- private expandedNodes;
11
- private flatList;
12
- private scrollTop;
13
- private readonly pageSize;
14
- private parentMap;
15
- private readonly ICON_CLOSED;
16
- private readonly ICON_OPEN;
17
- constructor(options: TreeSelectOptions<V>);
18
- private buildParentMap;
19
- private initializeExpanded;
20
- private initializeSelection;
21
- private recalculateAllParents;
22
- private updateNodeStateFromChildren;
23
- private setNodeState;
24
- private recalculateFlatList;
25
- private traverse;
26
- private toggleRecursive;
27
- protected render(_firstRender: boolean): void;
28
- protected handleInput(char: string, _key: Buffer): void;
29
- private collectSelected;
30
- protected handleMouse(event: MouseEvent): void;
31
- }
@@ -1,20 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { TreeOptions, MouseEvent } from '../types';
3
- export declare class TreePrompt<V> extends Prompt<V, TreeOptions<V>> {
4
- private cursor;
5
- private expandedNodes;
6
- private flatList;
7
- private scrollTop;
8
- private readonly pageSize;
9
- private readonly ICON_CLOSED;
10
- private readonly ICON_OPEN;
11
- constructor(options: TreeOptions<V>);
12
- private expandPathTo;
13
- private initializeExpanded;
14
- private recalculateFlatList;
15
- private traverse;
16
- private toggleRecursive;
17
- protected render(_firstRender: boolean): void;
18
- protected handleInput(char: string, _key: Buffer): void;
19
- protected handleMouse(event: MouseEvent): void;
20
- }
@@ -1,18 +0,0 @@
1
- import { Prompt } from '../base';
2
- import { BaseOptions } from '../types';
3
- interface WaitOptions extends BaseOptions {
4
- seconds: number;
5
- autoSubmit?: boolean;
6
- }
7
- export declare class WaitPrompt extends Prompt<void, WaitOptions> {
8
- private remaining;
9
- private timer?;
10
- private isDone;
11
- constructor(options: WaitOptions);
12
- run(): Promise<void>;
13
- private stopTimer;
14
- protected cleanup(): void;
15
- protected render(_firstRender: boolean): void;
16
- protected handleInput(char: string): void;
17
- }
18
- export {};