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
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "QuizTextPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return QuizTextPrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _theme = require("../theme");
13
+ const _symbols = require("../symbols");
14
+ const _text = require("./text");
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 QuizTextPrompt = class QuizTextPrompt extends _text.TextPrompt {
29
+ handleInput(char) {
30
+ if (this.status === 'revealed') {
31
+ if (char === '\r' || char === '\n') {
32
+ this.submit(this.value);
33
+ }
34
+ return;
35
+ }
36
+ super.handleInput(char);
37
+ }
38
+ submit(value) {
39
+ if (this.status === 'pending') {
40
+ // We caught the submission from TextPrompt logic.
41
+ // Now verify correctness.
42
+ this.checkCorrectness(value).then((correct)=>{
43
+ this.isCorrect = correct;
44
+ this.status = 'revealed';
45
+ this.render(false);
46
+ });
47
+ } else {
48
+ // If revealed (or anything else), we proceed to final submission.
49
+ // This calls Prompt.submit
50
+ super.submit(value);
51
+ }
52
+ }
53
+ async checkCorrectness(value) {
54
+ try {
55
+ if (this.options.verify) {
56
+ return await this.options.verify(value);
57
+ }
58
+ if (this.options.correctAnswer) {
59
+ return value.trim().toLowerCase() === this.options.correctAnswer.trim().toLowerCase();
60
+ }
61
+ return false;
62
+ } catch (_e) {
63
+ return false;
64
+ }
65
+ }
66
+ render(firstRender) {
67
+ if (this.status === 'pending') {
68
+ super.render(firstRender);
69
+ return;
70
+ }
71
+ // Revealed State
72
+ let output = '';
73
+ const icon = this.isCorrect ? `${_theme.theme.success}${_symbols.symbols.tick}` : `${_theme.theme.error}${_symbols.symbols.cross}`;
74
+ output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
75
+ const userValue = this.segments.join('');
76
+ // Display user input
77
+ if (this.isCorrect) {
78
+ output += ` ${_theme.theme.success}${userValue}${_ansi.ANSI.RESET} ${_theme.theme.success}(Correct)${_ansi.ANSI.RESET}`;
79
+ } else {
80
+ output += ` ${_theme.theme.error}${userValue}${_ansi.ANSI.RESET} ${_theme.theme.error}(Wrong)${_ansi.ANSI.RESET}`;
81
+ }
82
+ // Show correct answer if wrong
83
+ if (!this.isCorrect && this.options.correctAnswer) {
84
+ output += `\n ${_theme.theme.success}Correct Answer: ${this.options.correctAnswer}${_ansi.ANSI.RESET}`;
85
+ }
86
+ // Explanation
87
+ if (this.options.explanation) {
88
+ output += `\n\n${_ansi.ANSI.BOLD}Explanation:${_ansi.ANSI.RESET}\n${_theme.theme.muted}${this.options.explanation}${_ansi.ANSI.RESET}`;
89
+ }
90
+ output += `\n\n${_ansi.ANSI.DIM}(Press Enter to continue)${_ansi.ANSI.RESET}`;
91
+ this.renderFrame(output);
92
+ }
93
+ constructor(options){
94
+ super(options), _define_property(this, "status", 'pending'), _define_property(this, "isCorrect", false);
95
+ }
96
+ };
97
+
98
+ //# sourceMappingURL=quiz-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/quiz-text.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { QuizTextOptions } from '../types';\nimport { TextPrompt } from './text';\n\nexport class QuizTextPrompt extends TextPrompt<QuizTextOptions> {\n private status: 'pending' | 'revealed' = 'pending';\n private isCorrect: boolean = false;\n\n constructor(options: QuizTextOptions) {\n super(options);\n }\n\n protected handleInput(char: string) {\n if (this.status === 'revealed') {\n if (char === '\\r' || char === '\\n') {\n this.submit(this.value);\n }\n return;\n }\n\n super.handleInput(char);\n }\n\n protected submit(value: string) {\n if (this.status === 'pending') {\n // We caught the submission from TextPrompt logic.\n // Now verify correctness.\n\n this.checkCorrectness(value).then(correct => {\n this.isCorrect = correct;\n this.status = 'revealed';\n this.render(false);\n });\n } else {\n // If revealed (or anything else), we proceed to final submission.\n // This calls Prompt.submit\n super.submit(value);\n }\n }\n\n private async checkCorrectness(value: string): Promise<boolean> {\n try {\n if (this.options.verify) {\n return await this.options.verify(value);\n }\n if (this.options.correctAnswer) {\n return value.trim().toLowerCase() === this.options.correctAnswer.trim().toLowerCase();\n }\n return false;\n } catch (_e) {\n return false;\n }\n }\n\n protected render(firstRender: boolean) {\n if (this.status === 'pending') {\n super.render(firstRender);\n return;\n }\n\n // Revealed State\n let output = '';\n const icon = this.isCorrect ? `${theme.success}${symbols.tick}` : `${theme.error}${symbols.cross}`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n const userValue = this.segments.join('');\n\n // Display user input\n if (this.isCorrect) {\n output += ` ${theme.success}${userValue}${ANSI.RESET} ${theme.success}(Correct)${ANSI.RESET}`;\n } else {\n output += ` ${theme.error}${userValue}${ANSI.RESET} ${theme.error}(Wrong)${ANSI.RESET}`;\n }\n\n // Show correct answer if wrong\n if (!this.isCorrect && this.options.correctAnswer) {\n output += `\\n ${theme.success}Correct Answer: ${this.options.correctAnswer}${ANSI.RESET}`;\n }\n\n // Explanation\n if (this.options.explanation) {\n output += `\\n\\n${ANSI.BOLD}Explanation:${ANSI.RESET}\\n${theme.muted}${this.options.explanation}${ANSI.RESET}`;\n }\n\n output += `\\n\\n${ANSI.DIM}(Press Enter to continue)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n}\n"],"names":["QuizTextPrompt","TextPrompt","handleInput","char","status","submit","value","checkCorrectness","then","correct","isCorrect","render","options","verify","correctAnswer","trim","toLowerCase","_e","firstRender","output","icon","theme","success","symbols","tick","error","cross","ANSI","BOLD","title","message","RESET","userValue","segments","join","explanation","muted","DIM","renderFrame"],"mappings":"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"}
@@ -1,25 +1,31 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RangePrompt = 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 RangePrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- this.activeHandle = 'low';
12
- // Ensure initial is sorted and within bounds, default to [min, max] if not provided
13
- const initial = options.initial || [options.min, options.max];
14
- // Basic validation for initial
15
- let [low, high] = initial;
16
- low = Math.max(options.min, Math.min(low, options.max));
17
- high = Math.max(options.min, Math.min(high, options.max));
18
- if (low > high) {
19
- [low, high] = [high, low];
20
- }
21
- this.value = [low, high];
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "RangePrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return RangePrompt;
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;
22
25
  }
26
+ return obj;
27
+ }
28
+ let RangePrompt = class RangePrompt extends _base.Prompt {
23
29
  render(_firstRender) {
24
30
  const width = 20;
25
31
  const range = this.options.max - this.options.min;
@@ -31,48 +37,41 @@ class RangePrompt extends base_1.Prompt {
31
37
  const ratioHigh = range === 0 ? 1 : (high - this.options.min) / range;
32
38
  const posHigh = Math.round(ratioHigh * width);
33
39
  let bar = '';
34
- for (let i = 0; i <= width; i++) {
40
+ for(let i = 0; i <= width; i++){
35
41
  if (i === posLow && i === posHigh) {
36
42
  // Collision
37
- bar += `${theme_1.theme.main}|${ansi_1.ANSI.RESET}`;
38
- }
39
- else if (i === posLow) {
43
+ bar += `${_theme.theme.main}|${_ansi.ANSI.RESET}`;
44
+ } else if (i === posLow) {
40
45
  if (this.activeHandle === 'low') {
41
46
  // Highlight active handle
42
- bar += `${theme_1.theme.main}${ansi_1.ANSI.REVERSE}O${ansi_1.ANSI.RESET}`;
47
+ bar += `${_theme.theme.main}${_ansi.ANSI.REVERSE}O${_ansi.ANSI.RESET}`;
48
+ } else {
49
+ bar += `${_theme.theme.main}O${_ansi.ANSI.RESET}`;
43
50
  }
44
- else {
45
- bar += `${theme_1.theme.main}O${ansi_1.ANSI.RESET}`;
46
- }
47
- }
48
- else if (i === posHigh) {
51
+ } else if (i === posHigh) {
49
52
  if (this.activeHandle === 'high') {
50
53
  // Highlight active handle
51
- bar += `${theme_1.theme.main}${ansi_1.ANSI.REVERSE}O${ansi_1.ANSI.RESET}`;
54
+ bar += `${_theme.theme.main}${_ansi.ANSI.REVERSE}O${_ansi.ANSI.RESET}`;
55
+ } else {
56
+ bar += `${_theme.theme.main}O${_ansi.ANSI.RESET}`;
52
57
  }
53
- else {
54
- bar += `${theme_1.theme.main}O${ansi_1.ANSI.RESET}`;
55
- }
56
- }
57
- else if (i > posLow && i < posHigh) {
58
+ } else if (i > posLow && i < posHigh) {
58
59
  // Active range
59
- bar += `${theme_1.theme.main}=${ansi_1.ANSI.RESET}`;
60
- }
61
- else {
60
+ bar += `${_theme.theme.main}=${_ansi.ANSI.RESET}`;
61
+ } else {
62
62
  // Dimmed
63
- bar += symbols_1.symbols.line;
63
+ bar += _symbols.symbols.line;
64
64
  }
65
65
  }
66
66
  const unit = this.options.unit || '';
67
67
  // Format the value display
68
68
  let valueDisplay = '';
69
69
  if (this.activeHandle === 'low') {
70
- valueDisplay = `${ansi_1.ANSI.UNDERLINE}${low}${ansi_1.ANSI.RESET}-${high}`;
70
+ valueDisplay = `${_ansi.ANSI.UNDERLINE}${low}${_ansi.ANSI.RESET}-${high}`;
71
+ } else {
72
+ valueDisplay = `${low}-${_ansi.ANSI.UNDERLINE}${high}${_ansi.ANSI.RESET}`;
71
73
  }
72
- else {
73
- valueDisplay = `${low}-${ansi_1.ANSI.UNDERLINE}${high}${ansi_1.ANSI.RESET}`;
74
- }
75
- 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} [${bar}] ${valueDisplay}${unit}`;
74
+ const output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} [${bar}] ${valueDisplay}${unit}`;
76
75
  this.renderFrame(output);
77
76
  }
78
77
  handleInput(char) {
@@ -87,54 +86,79 @@ class RangePrompt extends base_1.Prompt {
87
86
  }
88
87
  const step = this.options.step || 1;
89
88
  let [low, high] = this.value;
90
- if (this.isLeft(char)) { // Left
89
+ if (this.isLeft(char)) {
91
90
  if (this.activeHandle === 'low') {
92
91
  low = Math.max(this.options.min, low - step);
93
- }
94
- else {
92
+ } else {
95
93
  high = Math.max(low, high - step);
96
94
  }
97
95
  }
98
- if (this.isRight(char)) { // Right
96
+ if (this.isRight(char)) {
99
97
  if (this.activeHandle === 'low') {
100
98
  low = Math.min(high, low + step);
101
- }
102
- else {
99
+ } else {
103
100
  high = Math.min(this.options.max, high + step);
104
101
  }
105
102
  }
106
103
  // Rounding to avoid floating point errors
107
104
  low = Math.round(low * 10000) / 10000;
108
105
  high = Math.round(high * 10000) / 10000;
109
- this.value = [low, high];
106
+ this.value = [
107
+ low,
108
+ high
109
+ ];
110
110
  this.render(false);
111
111
  }
112
112
  handleMouse(event) {
113
113
  if (event.action === 'scroll') {
114
114
  const step = this.options.step || 1;
115
115
  let [low, high] = this.value;
116
- if (event.scroll === 'up') { // Increase
116
+ if (event.scroll === 'up') {
117
117
  if (this.activeHandle === 'low') {
118
118
  low = Math.min(high, low + step);
119
- }
120
- else {
119
+ } else {
121
120
  high = Math.min(this.options.max, high + step);
122
121
  }
123
122
  }
124
- if (event.scroll === 'down') { // Decrease
123
+ if (event.scroll === 'down') {
125
124
  if (this.activeHandle === 'low') {
126
125
  low = Math.max(this.options.min, low - step);
127
- }
128
- else {
126
+ } else {
129
127
  high = Math.max(low, high - step);
130
128
  }
131
129
  }
132
130
  // Rounding
133
131
  low = Math.round(low * 10000) / 10000;
134
132
  high = Math.round(high * 10000) / 10000;
135
- this.value = [low, high];
133
+ this.value = [
134
+ low,
135
+ high
136
+ ];
136
137
  this.render(false);
137
138
  }
138
139
  }
139
- }
140
- exports.RangePrompt = RangePrompt;
140
+ constructor(options){
141
+ super(options), _define_property(this, "activeHandle", 'low');
142
+ // Ensure initial is sorted and within bounds, default to [min, max] if not provided
143
+ const initial = options.initial || [
144
+ options.min,
145
+ options.max
146
+ ];
147
+ // Basic validation for initial
148
+ let [low, high] = initial;
149
+ low = Math.max(options.min, Math.min(low, options.max));
150
+ high = Math.max(options.min, Math.min(high, options.max));
151
+ if (low > high) {
152
+ [low, high] = [
153
+ high,
154
+ low
155
+ ];
156
+ }
157
+ this.value = [
158
+ low,
159
+ high
160
+ ];
161
+ }
162
+ };
163
+
164
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/range.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { RangeOptions, MouseEvent } from '../types';\n\nexport class RangePrompt extends Prompt<[number, number], RangeOptions> {\n private activeHandle: 'low' | 'high' = 'low';\n\n constructor(options: RangeOptions) {\n super(options);\n // Ensure initial is sorted and within bounds, default to [min, max] if not provided\n const initial = options.initial || [options.min, options.max];\n // Basic validation for initial\n let [low, high] = initial;\n low = Math.max(options.min, Math.min(low, options.max));\n high = Math.max(options.min, Math.min(high, options.max));\n if (low > high) {\n [low, high] = [high, low];\n }\n this.value = [low, high];\n }\n\n protected render(_firstRender: boolean) {\n const width = 20;\n const range = this.options.max - this.options.min;\n const [low, high] = this.value;\n\n // Calculate positions (0 to width)\n // Avoid division by zero if min == max\n const ratioLow = range === 0 ? 0 : (low - this.options.min) / range;\n const posLow = Math.round(ratioLow * width);\n\n const ratioHigh = range === 0 ? 1 : (high - this.options.min) / range;\n const posHigh = Math.round(ratioHigh * width);\n\n let bar = '';\n for (let i = 0; i <= width; i++) {\n if (i === posLow && i === posHigh) {\n // Collision\n bar += `${theme.main}|${ANSI.RESET}`;\n } else if (i === posLow) {\n if (this.activeHandle === 'low') {\n // Highlight active handle\n bar += `${theme.main}${ANSI.REVERSE}O${ANSI.RESET}`;\n } else {\n bar += `${theme.main}O${ANSI.RESET}`;\n }\n } else if (i === posHigh) {\n if (this.activeHandle === 'high') {\n // Highlight active handle\n bar += `${theme.main}${ANSI.REVERSE}O${ANSI.RESET}`;\n } else {\n bar += `${theme.main}O${ANSI.RESET}`;\n }\n } else if (i > posLow && i < posHigh) {\n // Active range\n bar += `${theme.main}=${ANSI.RESET}`;\n } else {\n // Dimmed\n bar += symbols.line;\n }\n }\n\n const unit = this.options.unit || '';\n\n // Format the value display\n let valueDisplay = '';\n if (this.activeHandle === 'low') {\n valueDisplay = `${ANSI.UNDERLINE}${low}${ANSI.RESET}-${high}`;\n } else {\n valueDisplay = `${low}-${ANSI.UNDERLINE}${high}${ANSI.RESET}`;\n }\n\n const output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} [${bar}] ${valueDisplay}${unit}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n this.submit(this.value);\n return;\n }\n\n if (char === ' ' || char === '\\t') {\n this.activeHandle = this.activeHandle === 'low' ? 'high' : 'low';\n this.render(false);\n return;\n }\n\n const step = this.options.step || 1;\n let [low, high] = this.value;\n\n if (this.isLeft(char)) { // Left\n if (this.activeHandle === 'low') {\n low = Math.max(this.options.min, low - step);\n } else {\n high = Math.max(low, high - step);\n }\n }\n if (this.isRight(char)) { // Right\n if (this.activeHandle === 'low') {\n low = Math.min(high, low + step);\n } else {\n high = Math.min(this.options.max, high + step);\n }\n }\n\n // Rounding to avoid floating point errors\n low = Math.round(low * 10000) / 10000;\n high = Math.round(high * 10000) / 10000;\n\n this.value = [low, high];\n this.render(false);\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n const step = this.options.step || 1;\n let [low, high] = this.value;\n\n if (event.scroll === 'up') { // Increase\n if (this.activeHandle === 'low') {\n low = Math.min(high, low + step);\n } else {\n high = Math.min(this.options.max, high + step);\n }\n }\n if (event.scroll === 'down') { // Decrease\n if (this.activeHandle === 'low') {\n low = Math.max(this.options.min, low - step);\n } else {\n high = Math.max(low, high - step);\n }\n }\n\n // Rounding\n low = Math.round(low * 10000) / 10000;\n high = Math.round(high * 10000) / 10000;\n\n this.value = [low, high];\n this.render(false);\n }\n }\n}\n"],"names":["RangePrompt","Prompt","render","_firstRender","width","range","options","max","min","low","high","value","ratioLow","posLow","Math","round","ratioHigh","posHigh","bar","i","theme","main","ANSI","RESET","activeHandle","REVERSE","symbols","line","unit","valueDisplay","UNDERLINE","output","success","BOLD","title","message","renderFrame","handleInput","char","submit","step","isLeft","isRight","handleMouse","event","action","scroll","initial"],"mappings":";;;;+BAMaA;;;eAAAA;;;sBANQ;sBACE;uBACD;yBACE;;;;;;;;;;;;;;AAGjB,IAAA,AAAMA,cAAN,MAAMA,oBAAoBC,YAAM;IAiBzBC,OAAOC,YAAqB,EAAE;QACpC,MAAMC,QAAQ;QACd,MAAMC,QAAQ,IAAI,CAACC,OAAO,CAACC,GAAG,GAAG,IAAI,CAACD,OAAO,CAACE,GAAG;QACjD,MAAM,CAACC,KAAKC,KAAK,GAAG,IAAI,CAACC,KAAK;QAE9B,mCAAmC;QACnC,uCAAuC;QACvC,MAAMC,WAAWP,UAAU,IAAI,IAAI,AAACI,CAAAA,MAAM,IAAI,CAACH,OAAO,CAACE,GAAG,AAAD,IAAKH;QAC9D,MAAMQ,SAASC,KAAKC,KAAK,CAACH,WAAWR;QAErC,MAAMY,YAAYX,UAAU,IAAI,IAAI,AAACK,CAAAA,OAAO,IAAI,CAACJ,OAAO,CAACE,GAAG,AAAD,IAAKH;QAChE,MAAMY,UAAUH,KAAKC,KAAK,CAACC,YAAYZ;QAEvC,IAAIc,MAAM;QACV,IAAK,IAAIC,IAAI,GAAGA,KAAKf,OAAOe,IAAK;YAC7B,IAAIA,MAAMN,UAAUM,MAAMF,SAAS;gBAC/B,YAAY;gBACZC,OAAO,GAAGE,YAAK,CAACC,IAAI,CAAC,CAAC,EAAEC,UAAI,CAACC,KAAK,EAAE;YACxC,OAAO,IAAIJ,MAAMN,QAAQ;gBACrB,IAAI,IAAI,CAACW,YAAY,KAAK,OAAO;oBAC7B,0BAA0B;oBAC1BN,OAAO,GAAGE,YAAK,CAACC,IAAI,GAAGC,UAAI,CAACG,OAAO,CAAC,CAAC,EAAEH,UAAI,CAACC,KAAK,EAAE;gBACvD,OAAO;oBACHL,OAAO,GAAGE,YAAK,CAACC,IAAI,CAAC,CAAC,EAAEC,UAAI,CAACC,KAAK,EAAE;gBACxC;YACJ,OAAO,IAAIJ,MAAMF,SAAS;gBACtB,IAAI,IAAI,CAACO,YAAY,KAAK,QAAQ;oBAC9B,0BAA0B;oBAC1BN,OAAO,GAAGE,YAAK,CAACC,IAAI,GAAGC,UAAI,CAACG,OAAO,CAAC,CAAC,EAAEH,UAAI,CAACC,KAAK,EAAE;gBACvD,OAAO;oBACHL,OAAO,GAAGE,YAAK,CAACC,IAAI,CAAC,CAAC,EAAEC,UAAI,CAACC,KAAK,EAAE;gBACxC;YACJ,OAAO,IAAIJ,IAAIN,UAAUM,IAAIF,SAAS;gBAClC,eAAe;gBACfC,OAAO,GAAGE,YAAK,CAACC,IAAI,CAAC,CAAC,EAAEC,UAAI,CAACC,KAAK,EAAE;YACxC,OAAO;gBACH,SAAS;gBACTL,OAAOQ,gBAAO,CAACC,IAAI;YACvB;QACJ;QAEA,MAAMC,OAAO,IAAI,CAACtB,OAAO,CAACsB,IAAI,IAAI;QAElC,2BAA2B;QAC3B,IAAIC,eAAe;QACnB,IAAI,IAAI,CAACL,YAAY,KAAK,OAAO;YAC7BK,eAAe,GAAGP,UAAI,CAACQ,SAAS,GAAGrB,MAAMa,UAAI,CAACC,KAAK,CAAC,CAAC,EAAEb,MAAM;QACjE,OAAO;YACHmB,eAAe,GAAGpB,IAAI,CAAC,EAAEa,UAAI,CAACQ,SAAS,GAAGpB,OAAOY,UAAI,CAACC,KAAK,EAAE;QACjE;QAEA,MAAMQ,SAAS,GAAGX,YAAK,CAACY,OAAO,CAAC,CAAC,EAAEV,UAAI,CAACC,KAAK,CAAC,CAAC,EAAED,UAAI,CAACW,IAAI,GAAGb,YAAK,CAACc,KAAK,GAAG,IAAI,CAAC5B,OAAO,CAAC6B,OAAO,GAAGb,UAAI,CAACC,KAAK,CAAC,EAAE,EAAEL,IAAI,EAAE,EAAEW,eAAeD,MAAM;QAE9I,IAAI,CAACQ,WAAW,CAACL;IACrB;IAEUM,YAAYC,IAAY,EAAE;QAChC,IAAIA,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,CAACC,MAAM,CAAC,IAAI,CAAC5B,KAAK;YACtB;QACJ;QAEA,IAAI2B,SAAS,OAAOA,SAAS,MAAM;YAC/B,IAAI,CAACd,YAAY,GAAG,IAAI,CAACA,YAAY,KAAK,QAAQ,SAAS;YAC3D,IAAI,CAACtB,MAAM,CAAC;YACZ;QACJ;QAEA,MAAMsC,OAAO,IAAI,CAAClC,OAAO,CAACkC,IAAI,IAAI;QAClC,IAAI,CAAC/B,KAAKC,KAAK,GAAG,IAAI,CAACC,KAAK;QAE5B,IAAI,IAAI,CAAC8B,MAAM,CAACH,OAAO;YACnB,IAAI,IAAI,CAACd,YAAY,KAAK,OAAO;gBAC7Bf,MAAMK,KAAKP,GAAG,CAAC,IAAI,CAACD,OAAO,CAACE,GAAG,EAAEC,MAAM+B;YAC3C,OAAO;gBACH9B,OAAOI,KAAKP,GAAG,CAACE,KAAKC,OAAO8B;YAChC;QACJ;QACA,IAAI,IAAI,CAACE,OAAO,CAACJ,OAAO;YACpB,IAAI,IAAI,CAACd,YAAY,KAAK,OAAO;gBAC7Bf,MAAMK,KAAKN,GAAG,CAACE,MAAMD,MAAM+B;YAC/B,OAAO;gBACH9B,OAAOI,KAAKN,GAAG,CAAC,IAAI,CAACF,OAAO,CAACC,GAAG,EAAEG,OAAO8B;YAC7C;QACJ;QAEA,0CAA0C;QAC1C/B,MAAMK,KAAKC,KAAK,CAACN,MAAM,SAAS;QAChCC,OAAOI,KAAKC,KAAK,CAACL,OAAO,SAAS;QAElC,IAAI,CAACC,KAAK,GAAG;YAACF;YAAKC;SAAK;QACxB,IAAI,CAACR,MAAM,CAAC;IAChB;IAEUyC,YAAYC,KAAiB,EAAE;QACrC,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,MAAML,OAAO,IAAI,CAAClC,OAAO,CAACkC,IAAI,IAAI;YAClC,IAAI,CAAC/B,KAAKC,KAAK,GAAG,IAAI,CAACC,KAAK;YAE5B,IAAIiC,MAAME,MAAM,KAAK,MAAM;gBACvB,IAAI,IAAI,CAACtB,YAAY,KAAK,OAAO;oBAC7Bf,MAAMK,KAAKN,GAAG,CAACE,MAAMD,MAAM+B;gBAC/B,OAAO;oBACH9B,OAAOI,KAAKN,GAAG,CAAC,IAAI,CAACF,OAAO,CAACC,GAAG,EAAEG,OAAO8B;gBAC7C;YACJ;YACA,IAAII,MAAME,MAAM,KAAK,QAAQ;gBACzB,IAAI,IAAI,CAACtB,YAAY,KAAK,OAAO;oBAC7Bf,MAAMK,KAAKP,GAAG,CAAC,IAAI,CAACD,OAAO,CAACE,GAAG,EAAEC,MAAM+B;gBAC3C,OAAO;oBACH9B,OAAOI,KAAKP,GAAG,CAACE,KAAKC,OAAO8B;gBAChC;YACJ;YAEA,WAAW;YACX/B,MAAMK,KAAKC,KAAK,CAACN,MAAM,SAAS;YAChCC,OAAOI,KAAKC,KAAK,CAACL,OAAO,SAAS;YAElC,IAAI,CAACC,KAAK,GAAG;gBAACF;gBAAKC;aAAK;YACxB,IAAI,CAACR,MAAM,CAAC;QAChB;IACJ;IAvIA,YAAYI,OAAqB,CAAE;QAC/B,KAAK,CAACA,UAHV,uBAAQkB,gBAA+B;QAInC,oFAAoF;QACpF,MAAMuB,UAAUzC,QAAQyC,OAAO,IAAI;YAACzC,QAAQE,GAAG;YAAEF,QAAQC,GAAG;SAAC;QAC7D,+BAA+B;QAC/B,IAAI,CAACE,KAAKC,KAAK,GAAGqC;QAClBtC,MAAMK,KAAKP,GAAG,CAACD,QAAQE,GAAG,EAAEM,KAAKN,GAAG,CAACC,KAAKH,QAAQC,GAAG;QACrDG,OAAOI,KAAKP,GAAG,CAACD,QAAQE,GAAG,EAAEM,KAAKN,GAAG,CAACE,MAAMJ,QAAQC,GAAG;QACvD,IAAIE,MAAMC,MAAM;YACZ,CAACD,KAAKC,KAAK,GAAG;gBAACA;gBAAMD;aAAI;QAC7B;QACA,IAAI,CAACE,KAAK,GAAG;YAACF;YAAKC;SAAK;IAC5B;AA4HJ"}
@@ -1,30 +1,31 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RatingPrompt = 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 RatingPrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- // Default to min if initial is not provided
12
- this.value = options.initial ?? (options.min || 1);
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "RatingPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return RatingPrompt;
13
9
  }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ const _symbols = require("../symbols");
15
+ let RatingPrompt = class RatingPrompt extends _base.Prompt {
14
16
  render(_firstRender) {
15
17
  const min = this.options.min || 1;
16
18
  const max = this.options.max || 5;
17
19
  // Render stars
18
20
  let stars = '';
19
- for (let i = min; i <= max; i++) {
21
+ for(let i = min; i <= max; i++){
20
22
  if (i <= this.value) {
21
- stars += `${theme_1.theme.success}${symbols_1.symbols.star}${ansi_1.ANSI.RESET} `;
22
- }
23
- else {
24
- stars += `${theme_1.theme.muted}${symbols_1.symbols.starEmpty}${ansi_1.ANSI.RESET} `;
23
+ stars += `${_theme.theme.success}${_symbols.symbols.star}${_ansi.ANSI.RESET} `;
24
+ } else {
25
+ stars += `${_theme.theme.muted}${_symbols.symbols.starEmpty}${_ansi.ANSI.RESET} `;
25
26
  }
26
27
  }
27
- 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} ${stars}`;
28
+ const output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${stars}`;
28
29
  this.renderFrame(output);
29
30
  }
30
31
  handleInput(char) {
@@ -35,13 +36,12 @@ class RatingPrompt extends base_1.Prompt {
35
36
  return;
36
37
  }
37
38
  // Arrow keys
38
- if (this.isLeft(char) || this.isDown(char)) { // Left/Down decreases
39
+ if (this.isLeft(char) || this.isDown(char)) {
39
40
  if (this.value > min) {
40
41
  this.value--;
41
42
  this.render(false);
42
43
  }
43
- }
44
- else if (this.isRight(char) || this.isUp(char)) { // Right/Up increases
44
+ } else if (this.isRight(char) || this.isUp(char)) {
45
45
  if (this.value < max) {
46
46
  this.value++;
47
47
  this.render(false);
@@ -65,8 +65,7 @@ class RatingPrompt extends base_1.Prompt {
65
65
  this.value++;
66
66
  this.render(false);
67
67
  }
68
- }
69
- else if (event.scroll === 'down') {
68
+ } else if (event.scroll === 'down') {
70
69
  if (this.value > min) {
71
70
  this.value--;
72
71
  this.render(false);
@@ -74,5 +73,11 @@ class RatingPrompt extends base_1.Prompt {
74
73
  }
75
74
  }
76
75
  }
77
- }
78
- exports.RatingPrompt = RatingPrompt;
76
+ constructor(options){
77
+ super(options);
78
+ // Default to min if initial is not provided
79
+ this.value = options.initial ?? (options.min || 1);
80
+ }
81
+ };
82
+
83
+ //# sourceMappingURL=rating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/rating.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { RatingOptions, MouseEvent } from '../types';\n\nexport class RatingPrompt extends Prompt<number, RatingOptions> {\n constructor(options: RatingOptions) {\n super(options);\n // Default to min if initial is not provided\n this.value = options.initial ?? (options.min || 1);\n }\n\n protected render(_firstRender: boolean) {\n const min = this.options.min || 1;\n const max = this.options.max || 5;\n\n // Render stars\n let stars = '';\n for (let i = min; i <= max; i++) {\n if (i <= this.value) {\n stars += `${theme.success}${symbols.star}${ANSI.RESET} `;\n } else {\n stars += `${theme.muted}${symbols.starEmpty}${ANSI.RESET} `;\n }\n }\n\n const output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${stars}`;\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n const min = this.options.min || 1;\n const max = this.options.max || 5;\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.value);\n return;\n }\n\n // Arrow keys\n if (this.isLeft(char) || this.isDown(char)) { // Left/Down decreases\n if (this.value > min) {\n this.value--;\n this.render(false);\n }\n }\n else if (this.isRight(char) || this.isUp(char)) { // Right/Up increases\n if (this.value < max) {\n this.value++;\n this.render(false);\n }\n }\n\n // Number keys (1-9)\n const num = parseInt(char);\n if (!isNaN(num)) {\n if (num >= min && num <= max) {\n this.value = num;\n this.render(false);\n }\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n const min = this.options.min || 1;\n const max = this.options.max || 5;\n\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.value < max) {\n this.value++;\n this.render(false);\n }\n } else if (event.scroll === 'down') {\n if (this.value > min) {\n this.value--;\n this.render(false);\n }\n }\n }\n }\n}\n"],"names":["RatingPrompt","Prompt","render","_firstRender","min","options","max","stars","i","value","theme","success","symbols","star","ANSI","RESET","muted","starEmpty","output","BOLD","title","message","renderFrame","handleInput","char","submit","isLeft","isDown","isRight","isUp","num","parseInt","isNaN","handleMouse","event","action","scroll","initial"],"mappings":"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"}
@@ -1,23 +1,32 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RegexPrompt = void 0;
4
- const base_1 = require("../base");
5
- const ansi_1 = require("../ansi");
6
- const theme_1 = require("../theme");
7
- const symbols_1 = require("../symbols");
8
- const utils_1 = require("../utils");
9
- class RegexPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.input = '';
13
- this.cursor = 0;
14
- this.segments = [];
15
- this.error = '';
16
- this.regex = null;
17
- this.input = '';
18
- this.segments = [];
19
- this.validateRegex();
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "RegexPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return RegexPrompt;
9
+ }
10
+ });
11
+ const _base = require("../base");
12
+ const _ansi = require("../ansi");
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;
20
26
  }
27
+ return obj;
28
+ }
29
+ let RegexPrompt = class RegexPrompt extends _base.Prompt {
21
30
  validateRegex() {
22
31
  try {
23
32
  if (this.input.length === 0) {
@@ -27,48 +36,46 @@ class RegexPrompt extends base_1.Prompt {
27
36
  }
28
37
  this.regex = new RegExp(this.input, this.options.flags);
29
38
  this.error = '';
30
- }
31
- catch (e) {
39
+ } catch (e) {
32
40
  this.regex = null;
33
41
  this.error = e.message.replace(/^Invalid regular expression: \/.*?\/: /, '');
34
42
  }
35
43
  }
36
44
  render(_firstRender) {
37
45
  // Line 1: Header + Input
38
- const icon = this.error ? `${theme_1.theme.error}${symbols_1.symbols.cross}` : `${theme_1.theme.success}?`;
39
- const prefix = `${icon} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} `;
46
+ const icon = this.error ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
47
+ const prefix = `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
40
48
  let displayInput = '';
41
49
  // Reconstruct input with cursor handling
42
50
  // Simple rendering for now, mimicking text prompt logic simplified
43
51
  const beforeCursor = this.segments.slice(0, this.cursor).join('');
44
52
  const afterCursor = this.segments.slice(this.cursor).join('');
45
- displayInput = theme_1.theme.main + beforeCursor + ansi_1.ANSI.UNDERLINE + (afterCursor[0] || ' ') + ansi_1.ANSI.RESET + '\x1b[24m' + theme_1.theme.main + afterCursor.slice(1);
53
+ displayInput = _theme.theme.main + beforeCursor + _ansi.ANSI.UNDERLINE + (afterCursor[0] || ' ') + _ansi.ANSI.RESET + '\x1b[24m' + _theme.theme.main + afterCursor.slice(1);
46
54
  if (this.segments.length === 0) {
47
55
  const placeholder = '(Type regex pattern)';
48
56
  // If empty, show cursor on the start of placeholder
49
- displayInput = theme_1.theme.muted + ansi_1.ANSI.UNDERLINE + placeholder[0] + ansi_1.ANSI.RESET + '\x1b[24m' + theme_1.theme.muted + placeholder.slice(1) + ansi_1.ANSI.RESET;
50
- }
51
- else if (this.cursor >= this.segments.length) {
57
+ displayInput = _theme.theme.muted + _ansi.ANSI.UNDERLINE + placeholder[0] + _ansi.ANSI.RESET + '\x1b[24m' + _theme.theme.muted + placeholder.slice(1) + _ansi.ANSI.RESET;
58
+ } else if (this.cursor >= this.segments.length) {
52
59
  // Cursor at end
53
- displayInput = theme_1.theme.main + this.segments.join('') + ansi_1.ANSI.UNDERLINE + ' ' + ansi_1.ANSI.RESET + '\x1b[24m';
60
+ displayInput = _theme.theme.main + this.segments.join('') + _ansi.ANSI.UNDERLINE + ' ' + _ansi.ANSI.RESET + '\x1b[24m';
54
61
  }
55
62
  let output = `${prefix}${displayInput}`;
56
63
  // Line 2: Error (if any)
57
64
  if (this.error && this.input.length > 0) {
58
- output += `\n${theme_1.theme.error}>> Invalid Regex: ${this.error}${ansi_1.ANSI.RESET}`;
65
+ output += `\n${_theme.theme.error}>> Invalid Regex: ${this.error}${_ansi.ANSI.RESET}`;
59
66
  }
60
67
  // Line 3+: Test Cases
61
- output += `\n\n${ansi_1.ANSI.BOLD}Test Cases:${ansi_1.ANSI.RESET}`;
62
- this.options.tests.forEach(testCase => {
68
+ output += `\n\n${_ansi.ANSI.BOLD}Test Cases:${_ansi.ANSI.RESET}`;
69
+ this.options.tests.forEach((testCase)=>{
63
70
  let isMatch = false;
64
71
  if (this.regex) {
65
72
  isMatch = this.regex.test(testCase);
66
73
  }
67
- const statusIcon = isMatch ? `${theme_1.theme.success}${symbols_1.symbols.tick}` : `${theme_1.theme.error}${symbols_1.symbols.cross}`;
74
+ const statusIcon = isMatch ? `${_theme.theme.success}${_symbols.symbols.tick}` : `${_theme.theme.error}${_symbols.symbols.cross}`;
68
75
  // Highlight the match if possible? simpler to just show status for now
69
76
  // Maybe color the text green/red based on match
70
- const color = isMatch ? theme_1.theme.success : theme_1.theme.muted;
71
- output += `\n ${statusIcon} ${color}${testCase}${ansi_1.ANSI.RESET}`;
77
+ const color = isMatch ? _theme.theme.success : _theme.theme.muted;
78
+ output += `\n ${statusIcon} ${color}${testCase}${_ansi.ANSI.RESET}`;
72
79
  });
73
80
  this.renderFrame(output);
74
81
  }
@@ -119,7 +126,7 @@ class RegexPrompt extends base_1.Prompt {
119
126
  }
120
127
  // Regular Typing
121
128
  if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
122
- const newSegments = (0, utils_1.safeSplit)(char);
129
+ const newSegments = (0, _utils.safeSplit)(char);
123
130
  this.segments.splice(this.cursor, 0, ...newSegments);
124
131
  this.cursor += newSegments.length;
125
132
  this.input = this.segments.join('');
@@ -127,5 +134,12 @@ class RegexPrompt extends base_1.Prompt {
127
134
  this.render(false);
128
135
  }
129
136
  }
130
- }
131
- exports.RegexPrompt = RegexPrompt;
137
+ constructor(options){
138
+ super(options), _define_property(this, "input", ''), _define_property(this, "cursor", 0), _define_property(this, "segments", []), _define_property(this, "error", ''), _define_property(this, "regex", null);
139
+ this.input = '';
140
+ this.segments = [];
141
+ this.validateRegex();
142
+ }
143
+ };
144
+
145
+ //# sourceMappingURL=regex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/regex.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { RegexOptions } from '../types';\nimport { ANSI } from '../ansi';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { safeSplit } from '../utils';\n\nexport class RegexPrompt extends Prompt<RegExp, RegexOptions> {\n private input: string = '';\n private cursor: number = 0;\n private segments: string[] = [];\n private error: string = '';\n private regex: RegExp | null = null;\n\n constructor(options: RegexOptions) {\n super(options);\n this.input = '';\n this.segments = [];\n this.validateRegex();\n }\n\n private validateRegex() {\n try {\n if (this.input.length === 0) {\n this.regex = null;\n this.error = 'Regex is empty';\n return;\n }\n this.regex = new RegExp(this.input, this.options.flags);\n this.error = '';\n } catch (e: any) {\n this.regex = null;\n this.error = e.message.replace(/^Invalid regular expression: \\/.*?\\/: /, '');\n }\n }\n\n protected render(_firstRender: boolean) {\n // Line 1: Header + Input\n const icon = this.error ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n const prefix = `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} `;\n\n let displayInput = '';\n // Reconstruct input with cursor handling\n // Simple rendering for now, mimicking text prompt logic simplified\n const beforeCursor = this.segments.slice(0, this.cursor).join('');\n const afterCursor = this.segments.slice(this.cursor).join('');\n\n displayInput = theme.main + beforeCursor + ANSI.UNDERLINE + (afterCursor[0] || ' ') + ANSI.RESET + '\\x1b[24m' + theme.main + afterCursor.slice(1);\n\n if (this.segments.length === 0) {\n const placeholder = '(Type regex pattern)';\n // If empty, show cursor on the start of placeholder\n displayInput = theme.muted + ANSI.UNDERLINE + placeholder[0] + ANSI.RESET + '\\x1b[24m' + theme.muted + placeholder.slice(1) + ANSI.RESET;\n } else if (this.cursor >= this.segments.length) {\n // Cursor at end\n displayInput = theme.main + this.segments.join('') + ANSI.UNDERLINE + ' ' + ANSI.RESET + '\\x1b[24m';\n }\n\n let output = `${prefix}${displayInput}`;\n\n // Line 2: Error (if any)\n if (this.error && this.input.length > 0) {\n output += `\\n${theme.error}>> Invalid Regex: ${this.error}${ANSI.RESET}`;\n }\n\n // Line 3+: Test Cases\n output += `\\n\\n${ANSI.BOLD}Test Cases:${ANSI.RESET}`;\n\n this.options.tests.forEach(testCase => {\n let isMatch = false;\n if (this.regex) {\n isMatch = this.regex.test(testCase);\n }\n\n const statusIcon = isMatch ? `${theme.success}${symbols.tick}` : `${theme.error}${symbols.cross}`;\n // Highlight the match if possible? simpler to just show status for now\n // Maybe color the text green/red based on match\n const color = isMatch ? theme.success : theme.muted;\n output += `\\n ${statusIcon} ${color}${testCase}${ANSI.RESET}`;\n });\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n // Enter\n if (char === '\\r' || char === '\\n') {\n if (this.regex && !this.error) {\n this.submit(this.regex);\n }\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.cursor > 0) {\n this.segments.splice(this.cursor - 1, 1);\n this.cursor--;\n this.input = this.segments.join('');\n this.validateRegex();\n this.render(false);\n }\n return;\n }\n\n // Left Arrow\n if (this.isLeft(char)) {\n if (this.cursor > 0) {\n this.cursor--;\n this.render(false);\n }\n return;\n }\n\n // Right Arrow\n if (this.isRight(char)) {\n if (this.cursor < this.segments.length) {\n this.cursor++;\n this.render(false);\n }\n return;\n }\n\n // Delete\n if (char === '\\u001b[3~') {\n if (this.cursor < this.segments.length) {\n this.segments.splice(this.cursor, 1);\n this.input = this.segments.join('');\n this.validateRegex();\n this.render(false);\n }\n return;\n }\n\n // Regular Typing\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n const newSegments = safeSplit(char);\n this.segments.splice(this.cursor, 0, ...newSegments);\n this.cursor += newSegments.length;\n this.input = this.segments.join('');\n this.validateRegex();\n this.render(false);\n }\n }\n}\n"],"names":["RegexPrompt","Prompt","validateRegex","input","length","regex","error","RegExp","options","flags","e","message","replace","render","_firstRender","icon","theme","symbols","cross","success","prefix","ANSI","BOLD","title","RESET","displayInput","beforeCursor","segments","slice","cursor","join","afterCursor","main","UNDERLINE","placeholder","muted","output","tests","forEach","testCase","isMatch","test","statusIcon","tick","color","renderFrame","handleInput","char","_key","submit","splice","isLeft","isRight","startsWith","newSegments","safeSplit"],"mappings":"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"}