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,17 +1,32 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FuzzyMultiColumnPrompt = void 0;
4
- const multi_column_select_1 = require("./multi-column-select");
5
- const theme_1 = require("../theme");
6
- const ansi_1 = require("../ansi");
7
- const utils_1 = require("../utils");
8
- const symbols_1 = require("../symbols");
9
- class FuzzyMultiColumnPrompt extends multi_column_select_1.MultiColumnSelectPrompt {
10
- constructor(options) {
11
- super(options);
12
- this.filteredResults = [];
13
- this.filteredResults = this.options.choices;
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "FuzzyMultiColumnPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return FuzzyMultiColumnPrompt;
9
+ }
10
+ });
11
+ const _multicolumnselect = require("./multi-column-select");
12
+ const _theme = require("../theme");
13
+ const _ansi = require("../ansi");
14
+ const _utils = require("../utils");
15
+ const _symbols = require("../symbols");
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;
14
26
  }
27
+ return obj;
28
+ }
29
+ let FuzzyMultiColumnPrompt = class FuzzyMultiColumnPrompt extends _multicolumnselect.MultiColumnSelectPrompt {
15
30
  getFilteredChoices() {
16
31
  return this.filteredResults || this.options.choices;
17
32
  }
@@ -29,13 +44,11 @@ class FuzzyMultiColumnPrompt extends multi_column_select_1.MultiColumnSelectProm
29
44
  this.searchBuffer += char;
30
45
  // Check if debounce is needed
31
46
  if (this.options.choices.length > 1000) {
32
- if (this.debounceTimer)
33
- clearTimeout(this.debounceTimer);
34
- this.debounceTimer = setTimeout(() => {
47
+ if (this.debounceTimer) clearTimeout(this.debounceTimer);
48
+ this.debounceTimer = setTimeout(()=>{
35
49
  this.performSearch();
36
50
  }, 150); // 150ms debounce
37
- }
38
- else {
51
+ } else {
39
52
  this.performSearch();
40
53
  }
41
54
  return;
@@ -45,17 +58,17 @@ class FuzzyMultiColumnPrompt extends multi_column_select_1.MultiColumnSelectProm
45
58
  performSearch() {
46
59
  if (!this.searchBuffer) {
47
60
  this.filteredResults = this.options.choices;
48
- }
49
- else {
50
- const results = this.options.choices.map(c => {
51
- if (this.isSeparator(c))
52
- return null;
53
- const match = (0, utils_1.fuzzyMatch)(this.searchBuffer, c.title);
54
- return { choice: c, match };
55
- }).filter(item => item && item.match !== null)
56
- // Sort by score descending
57
- .sort((a, b) => b.match.score - a.match.score);
58
- this.filteredResults = results.map(r => {
61
+ } else {
62
+ const results = this.options.choices.map((c)=>{
63
+ if (this.isSeparator(c)) return null;
64
+ const match = (0, _utils.fuzzyMatch)(this.searchBuffer, c.title);
65
+ return {
66
+ choice: c,
67
+ match
68
+ };
69
+ }).filter((item)=>item && item.match !== null)// Sort by score descending
70
+ .sort((a, b)=>b.match.score - a.match.score);
71
+ this.filteredResults = results.map((r)=>{
59
72
  r.choice._match = r.match;
60
73
  return r.choice;
61
74
  });
@@ -66,16 +79,14 @@ class FuzzyMultiColumnPrompt extends multi_column_select_1.MultiColumnSelectProm
66
79
  highlight(text, indices, isSelected) {
67
80
  let output = '';
68
81
  const indexSet = new Set(indices);
69
- for (let i = 0; i < text.length; i++) {
82
+ for(let i = 0; i < text.length; i++){
70
83
  if (indexSet.has(i)) {
71
84
  if (isSelected) {
72
- output += `${ansi_1.ANSI.BOLD}${ansi_1.ANSI.FG_WHITE}${text[i]}${theme_1.theme.main}`; // Reset to main theme
73
- }
74
- else {
75
- output += `${ansi_1.ANSI.BOLD}${ansi_1.ANSI.FG_CYAN}${text[i]}${ansi_1.ANSI.RESET}`;
85
+ output += `${_ansi.ANSI.BOLD}${_ansi.ANSI.FG_WHITE}${text[i]}${_theme.theme.main}`; // Reset to main theme
86
+ } else {
87
+ output += `${_ansi.ANSI.BOLD}${_ansi.ANSI.FG_CYAN}${text[i]}${_ansi.ANSI.RESET}`;
76
88
  }
77
- }
78
- else {
89
+ } else {
79
90
  output += text[i];
80
91
  }
81
92
  }
@@ -85,10 +96,10 @@ class FuzzyMultiColumnPrompt extends multi_column_select_1.MultiColumnSelectProm
85
96
  let output = '';
86
97
  const choices = this.getFilteredChoices();
87
98
  // Header
88
- const searchStr = this.searchBuffer ? ` ${theme_1.theme.muted}(Fuzzy: ${this.searchBuffer})${ansi_1.ANSI.RESET}` : '';
89
- output += `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}${searchStr}\n`;
99
+ const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Fuzzy: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
100
+ output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr}\n`;
90
101
  if (choices.length === 0) {
91
- output += ` ${theme_1.theme.muted}No results found${ansi_1.ANSI.RESET}`;
102
+ output += ` ${_theme.theme.muted}No results found${_ansi.ANSI.RESET}`;
92
103
  this.renderFrame(output);
93
104
  return;
94
105
  }
@@ -98,8 +109,7 @@ class FuzzyMultiColumnPrompt extends multi_column_select_1.MultiColumnSelectProm
98
109
  const currentRow = Math.floor(this.selectedIndex / this.cols);
99
110
  if (currentRow < this.scrollTop) {
100
111
  this.scrollTop = currentRow;
101
- }
102
- else if (currentRow >= this.scrollTop + this.pageSize) {
112
+ } else if (currentRow >= this.scrollTop + this.pageSize) {
103
113
  this.scrollTop = currentRow - this.pageSize + 1;
104
114
  }
105
115
  // Edge case: if list shrinks
@@ -108,16 +118,15 @@ class FuzzyMultiColumnPrompt extends multi_column_select_1.MultiColumnSelectProm
108
118
  }
109
119
  const startRow = this.scrollTop;
110
120
  const endRow = Math.min(totalRows, startRow + this.pageSize);
111
- for (let r = startRow; r < endRow; r++) {
121
+ for(let r = startRow; r < endRow; r++){
112
122
  let rowStr = '';
113
- for (let c = 0; c < this.cols; c++) {
123
+ for(let c = 0; c < this.cols; c++){
114
124
  const idx = r * this.cols + c;
115
- if (idx >= choices.length)
116
- break;
125
+ if (idx >= choices.length) break;
117
126
  const choice = choices[idx];
118
127
  // Truncate if needed
119
128
  let title = choice.title || '';
120
- if ((0, utils_1.stringWidth)(title) > this.colWidth - 3) {
129
+ if ((0, _utils.stringWidth)(title) > this.colWidth - 3) {
121
130
  title = title.slice(0, this.colWidth - 4) + '…';
122
131
  }
123
132
  const match = choice._match;
@@ -127,13 +136,12 @@ class FuzzyMultiColumnPrompt extends multi_column_select_1.MultiColumnSelectProm
127
136
  }
128
137
  let cellContent = '';
129
138
  if (isSelected) {
130
- cellContent = `${theme_1.theme.main}${symbols_1.symbols.pointer} ${title}${ansi_1.ANSI.RESET}`;
131
- }
132
- else {
139
+ cellContent = `${_theme.theme.main}${_symbols.symbols.pointer} ${title}${_ansi.ANSI.RESET}`;
140
+ } else {
133
141
  cellContent = ` ${title}`;
134
142
  }
135
143
  // Pad cell to colWidth
136
- const currentWidth = (0, utils_1.stringWidth)(this.stripAnsi(cellContent));
144
+ const currentWidth = (0, _utils.stringWidth)(this.stripAnsi(cellContent));
137
145
  const padding = Math.max(0, this.colWidth - currentWidth);
138
146
  // Add cell to row
139
147
  rowStr += cellContent + ' '.repeat(padding);
@@ -141,9 +149,13 @@ class FuzzyMultiColumnPrompt extends multi_column_select_1.MultiColumnSelectProm
141
149
  output += rowStr + '\n';
142
150
  }
143
151
  // Remove trailing newline
144
- if (output.endsWith('\n'))
145
- output = output.slice(0, -1);
152
+ if (output.endsWith('\n')) output = output.slice(0, -1);
146
153
  this.renderFrame(output);
147
154
  }
148
- }
149
- exports.FuzzyMultiColumnPrompt = FuzzyMultiColumnPrompt;
155
+ constructor(options){
156
+ super(options), _define_property(this, "filteredResults", []), _define_property(this, "debounceTimer", void 0);
157
+ this.filteredResults = this.options.choices;
158
+ }
159
+ };
160
+
161
+ //# sourceMappingURL=fuzzy-multi-column.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/fuzzy-multi-column.ts"],"sourcesContent":["import { MultiColumnSelectPrompt } from './multi-column-select';\nimport { MultiColumnSelectOptions } from '../types';\nimport { theme } from '../theme';\nimport { ANSI } from '../ansi';\nimport { fuzzyMatch, stringWidth } from '../utils';\nimport { symbols } from '../symbols';\n\nexport class FuzzyMultiColumnPrompt<V> extends MultiColumnSelectPrompt<V> {\n private filteredResults: any[] = [];\n private debounceTimer: any;\n\n constructor(options: MultiColumnSelectOptions<V>) {\n super(options);\n this.filteredResults = this.options.choices;\n }\n\n protected getFilteredChoices() {\n return this.filteredResults || this.options.choices;\n }\n\n protected handleInput(char: string) {\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.searchBuffer.length > 0) {\n this.searchBuffer = this.searchBuffer.slice(0, -1);\n this.performSearch();\n }\n return;\n }\n\n // Intercept typing to add debounce\n if (char.length === 1 && !/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n this.searchBuffer += char;\n\n // Check if debounce is needed\n if (this.options.choices.length > 1000) {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => {\n this.performSearch();\n }, 150); // 150ms debounce\n } else {\n this.performSearch();\n }\n return;\n }\n\n super.handleInput(char);\n }\n\n private performSearch() {\n if (!this.searchBuffer) {\n this.filteredResults = this.options.choices;\n } else {\n const results = this.options.choices.map(c => {\n if (this.isSeparator(c)) return null;\n const match = fuzzyMatch(this.searchBuffer, (c as any).title);\n return { choice: c, match };\n }).filter(item => item && item.match !== null)\n // Sort by score descending\n .sort((a, b) => b!.match!.score - a!.match!.score);\n\n this.filteredResults = results.map(r => {\n (r!.choice as any)._match = r!.match;\n return r!.choice;\n });\n }\n\n this.selectedIndex = 0;\n this.render(false);\n }\n\n private highlight(text: string, indices: number[], isSelected: boolean): string {\n let output = '';\n const indexSet = new Set(indices);\n for (let i = 0; i < text.length; i++) {\n if (indexSet.has(i)) {\n if (isSelected) {\n output += `${ANSI.BOLD}${ANSI.FG_WHITE}${text[i]}${theme.main}`; // Reset to main theme\n } else {\n output += `${ANSI.BOLD}${ANSI.FG_CYAN}${text[i]}${ANSI.RESET}`;\n }\n } else {\n output += text[i];\n }\n }\n return output;\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n const choices = this.getFilteredChoices();\n\n // Header\n const searchStr = this.searchBuffer ? ` ${theme.muted}(Fuzzy: ${this.searchBuffer})${ANSI.RESET}` : '';\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}${searchStr}\\n`;\n\n if (choices.length === 0) {\n output += ` ${theme.muted}No results found${ANSI.RESET}`;\n this.renderFrame(output);\n return;\n }\n\n // Grid Render\n const totalRows = Math.ceil(choices.length / this.cols);\n\n // Adjust Scroll\n const currentRow = Math.floor(this.selectedIndex / this.cols);\n if (currentRow < this.scrollTop) {\n this.scrollTop = currentRow;\n } else if (currentRow >= this.scrollTop + this.pageSize) {\n this.scrollTop = currentRow - this.pageSize + 1;\n }\n\n // Edge case: if list shrinks\n if (this.scrollTop > totalRows - 1) {\n this.scrollTop = Math.max(0, totalRows - this.pageSize);\n }\n\n const startRow = this.scrollTop;\n const endRow = Math.min(totalRows, startRow + this.pageSize);\n\n for (let r = startRow; r < endRow; r++) {\n let rowStr = '';\n for (let c = 0; c < this.cols; c++) {\n const idx = r * this.cols + c;\n if (idx >= choices.length) break;\n\n const choice = choices[idx];\n\n // Truncate if needed\n let title = (choice as any).title || '';\n if (stringWidth(title) > this.colWidth - 3) {\n title = title.slice(0, this.colWidth - 4) + '…';\n }\n\n const match = (choice as any)._match;\n const isSelected = idx === this.selectedIndex;\n\n if (match && this.searchBuffer) {\n title = this.highlight(title, match.indices, isSelected);\n }\n\n let cellContent = '';\n if (isSelected) {\n cellContent = `${theme.main}${symbols.pointer} ${title}${ANSI.RESET}`;\n } else {\n cellContent = ` ${title}`;\n }\n\n // Pad cell to colWidth\n const currentWidth = stringWidth(this.stripAnsi(cellContent));\n const padding = Math.max(0, this.colWidth - currentWidth);\n\n // Add cell to row\n rowStr += cellContent + ' '.repeat(padding);\n }\n output += rowStr + '\\n';\n }\n\n // Remove trailing newline\n if (output.endsWith('\\n')) output = output.slice(0, -1);\n\n this.renderFrame(output);\n }\n}\n"],"names":["FuzzyMultiColumnPrompt","MultiColumnSelectPrompt","getFilteredChoices","filteredResults","options","choices","handleInput","char","searchBuffer","length","slice","performSearch","test","startsWith","debounceTimer","clearTimeout","setTimeout","results","map","c","isSeparator","match","fuzzyMatch","title","choice","filter","item","sort","a","b","score","r","_match","selectedIndex","render","highlight","text","indices","isSelected","output","indexSet","Set","i","has","ANSI","BOLD","FG_WHITE","theme","main","FG_CYAN","RESET","_firstRender","searchStr","muted","success","message","renderFrame","totalRows","Math","ceil","cols","currentRow","floor","scrollTop","pageSize","max","startRow","endRow","min","rowStr","idx","stringWidth","colWidth","cellContent","symbols","pointer","currentWidth","stripAnsi","padding","repeat","endsWith"],"mappings":"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"}
@@ -1,17 +1,32 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FuzzySelectPrompt = void 0;
4
- const select_1 = require("./select");
5
- const theme_1 = require("../theme");
6
- const ansi_1 = require("../ansi");
7
- const utils_1 = require("../utils");
8
- const symbols_1 = require("../symbols");
9
- class FuzzySelectPrompt extends select_1.SelectPrompt {
10
- constructor(options) {
11
- super(options);
12
- this.filteredResults = [];
13
- this.filteredResults = this.options.choices;
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "FuzzySelectPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return FuzzySelectPrompt;
9
+ }
10
+ });
11
+ const _select = require("./select");
12
+ const _theme = require("../theme");
13
+ const _ansi = require("../ansi");
14
+ const _utils = require("../utils");
15
+ const _symbols = require("../symbols");
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;
14
26
  }
27
+ return obj;
28
+ }
29
+ let FuzzySelectPrompt = class FuzzySelectPrompt extends _select.SelectPrompt {
15
30
  getFilteredChoices() {
16
31
  // Safety check: this.filteredResults might be undefined if called from super() constructor
17
32
  return this.filteredResults || this.options.choices;
@@ -30,13 +45,11 @@ class FuzzySelectPrompt extends select_1.SelectPrompt {
30
45
  this.searchBuffer += char;
31
46
  // Check if debounce is needed
32
47
  if (this.options.choices.length > 1000) {
33
- if (this.debounceTimer)
34
- clearTimeout(this.debounceTimer);
35
- this.debounceTimer = setTimeout(() => {
48
+ if (this.debounceTimer) clearTimeout(this.debounceTimer);
49
+ this.debounceTimer = setTimeout(()=>{
36
50
  this.performSearch();
37
51
  }, 150); // 150ms debounce
38
- }
39
- else {
52
+ } else {
40
53
  this.performSearch();
41
54
  }
42
55
  return; // Skip super.handleInput for typing
@@ -46,17 +59,17 @@ class FuzzySelectPrompt extends select_1.SelectPrompt {
46
59
  performSearch() {
47
60
  if (!this.searchBuffer) {
48
61
  this.filteredResults = this.options.choices;
49
- }
50
- else {
51
- const results = this.options.choices.map(c => {
52
- if (this.isSeparator(c))
53
- return null;
54
- const match = (0, utils_1.fuzzyMatch)(this.searchBuffer, c.title);
55
- return { choice: c, match };
56
- }).filter(item => item && item.match !== null)
57
- // Sort by score descending
58
- .sort((a, b) => b.match.score - a.match.score);
59
- this.filteredResults = results.map(r => {
62
+ } else {
63
+ const results = this.options.choices.map((c)=>{
64
+ if (this.isSeparator(c)) return null;
65
+ const match = (0, _utils.fuzzyMatch)(this.searchBuffer, c.title);
66
+ return {
67
+ choice: c,
68
+ match
69
+ };
70
+ }).filter((item)=>item && item.match !== null)// Sort by score descending
71
+ .sort((a, b)=>b.match.score - a.match.score);
72
+ this.filteredResults = results.map((r)=>{
60
73
  r.choice._match = r.match;
61
74
  return r.choice;
62
75
  });
@@ -67,16 +80,14 @@ class FuzzySelectPrompt extends select_1.SelectPrompt {
67
80
  highlight(text, indices, isSelected) {
68
81
  let output = '';
69
82
  const indexSet = new Set(indices);
70
- for (let i = 0; i < text.length; i++) {
83
+ for(let i = 0; i < text.length; i++){
71
84
  if (indexSet.has(i)) {
72
85
  if (isSelected) {
73
- output += `${ansi_1.ANSI.BOLD}${ansi_1.ANSI.FG_WHITE}${text[i]}${theme_1.theme.main}`; // Reset to main theme
74
- }
75
- else {
76
- output += `${ansi_1.ANSI.BOLD}${ansi_1.ANSI.FG_CYAN}${text[i]}${ansi_1.ANSI.RESET}`;
86
+ output += `${_ansi.ANSI.BOLD}${_ansi.ANSI.FG_WHITE}${text[i]}${_theme.theme.main}`; // Reset to main theme
87
+ } else {
88
+ output += `${_ansi.ANSI.BOLD}${_ansi.ANSI.FG_CYAN}${text[i]}${_ansi.ANSI.RESET}`;
77
89
  }
78
- }
79
- else {
90
+ } else {
80
91
  output += text[i];
81
92
  }
82
93
  }
@@ -88,29 +99,25 @@ class FuzzySelectPrompt extends select_1.SelectPrompt {
88
99
  // Adjust Scroll Top
89
100
  if (this.selectedIndex < this.scrollTop) {
90
101
  this.scrollTop = this.selectedIndex;
91
- }
92
- else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
102
+ } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
93
103
  this.scrollTop = this.selectedIndex - this.pageSize + 1;
94
104
  }
95
105
  if (this.scrollTop > choices.length - 1) {
96
106
  this.scrollTop = Math.max(0, choices.length - this.pageSize);
97
107
  }
98
108
  // Header
99
- const searchStr = this.searchBuffer ? ` ${theme_1.theme.muted}(Fuzzy: ${this.searchBuffer})${ansi_1.ANSI.RESET}` : '';
100
- output += `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}${searchStr}\n`;
109
+ const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Fuzzy: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
110
+ output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr}\n`;
101
111
  if (choices.length === 0) {
102
- output += ` ${theme_1.theme.muted}No results found${ansi_1.ANSI.RESET}`;
103
- }
104
- else {
112
+ output += ` ${_theme.theme.muted}No results found${_ansi.ANSI.RESET}`;
113
+ } else {
105
114
  const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
106
- visibleChoices.forEach((choice, index) => {
115
+ visibleChoices.forEach((choice, index)=>{
107
116
  const actualIndex = this.scrollTop + index;
108
- if (index > 0)
109
- output += '\n';
117
+ if (index > 0) output += '\n';
110
118
  if (this.isSeparator(choice)) {
111
- output += ` ${ansi_1.ANSI.DIM}${choice.text || symbols_1.symbols.line.repeat(8)}${ansi_1.ANSI.RESET}`;
112
- }
113
- else {
119
+ output += ` ${_ansi.ANSI.DIM}${choice.text || _symbols.symbols.line.repeat(8)}${_ansi.ANSI.RESET}`;
120
+ } else {
114
121
  let title = choice.title;
115
122
  const match = choice._match;
116
123
  const isSelected = actualIndex === this.selectedIndex;
@@ -118,13 +125,12 @@ class FuzzySelectPrompt extends select_1.SelectPrompt {
118
125
  title = this.highlight(title, match.indices, isSelected);
119
126
  }
120
127
  if (isSelected) {
121
- output += `${theme_1.theme.main}${symbols_1.symbols.pointer} ${title}${ansi_1.ANSI.RESET}`;
128
+ output += `${_theme.theme.main}${_symbols.symbols.pointer} ${title}${_ansi.ANSI.RESET}`;
122
129
  if (match && this.searchBuffer) {
123
- // Show score
124
- // output += ` ${theme.muted}(${Math.round(match.score)})${ANSI.RESET}`;
130
+ // Show score
131
+ // output += ` ${theme.muted}(${Math.round(match.score)})${ANSI.RESET}`;
125
132
  }
126
- }
127
- else {
133
+ } else {
128
134
  output += ` ${title}`;
129
135
  }
130
136
  }
@@ -132,5 +138,10 @@ class FuzzySelectPrompt extends select_1.SelectPrompt {
132
138
  }
133
139
  this.renderFrame(output);
134
140
  }
135
- }
136
- exports.FuzzySelectPrompt = FuzzySelectPrompt;
141
+ constructor(options){
142
+ super(options), _define_property(this, "filteredResults", []), _define_property(this, "debounceTimer", void 0);
143
+ this.filteredResults = this.options.choices;
144
+ }
145
+ };
146
+
147
+ //# sourceMappingURL=fuzzy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/fuzzy.ts"],"sourcesContent":["import { SelectPrompt } from './select';\nimport { FuzzySelectOptions } from '../types';\nimport { theme } from '../theme';\nimport { ANSI } from '../ansi';\nimport { fuzzyMatch } from '../utils';\nimport { symbols } from '../symbols';\n\nexport class FuzzySelectPrompt<V> extends SelectPrompt<V, FuzzySelectOptions<V>> {\n private filteredResults: any[] = [];\n private debounceTimer: any;\n\n constructor(options: FuzzySelectOptions<V>) {\n super(options);\n this.filteredResults = this.options.choices;\n }\n\n protected getFilteredChoices() {\n // Safety check: this.filteredResults might be undefined if called from super() constructor\n return this.filteredResults || this.options.choices;\n }\n\n protected handleInput(char: string) {\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.searchBuffer.length > 0) {\n this.searchBuffer = this.searchBuffer.slice(0, -1);\n this.performSearch();\n }\n return;\n }\n\n // Intercept typing to add debounce\n if (char.length === 1 && !/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n this.searchBuffer += char;\n\n // Check if debounce is needed\n if (this.options.choices.length > 1000) {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => {\n this.performSearch();\n }, 150); // 150ms debounce\n } else {\n this.performSearch();\n }\n return; // Skip super.handleInput for typing\n }\n\n super.handleInput(char);\n }\n\n private performSearch() {\n if (!this.searchBuffer) {\n this.filteredResults = this.options.choices;\n } else {\n const results = this.options.choices.map(c => {\n if (this.isSeparator(c)) return null;\n const match = fuzzyMatch(this.searchBuffer, (c as any).title);\n return { choice: c, match };\n }).filter(item => item && item.match !== null)\n // Sort by score descending\n .sort((a, b) => b!.match!.score - a!.match!.score);\n\n this.filteredResults = results.map(r => {\n (r!.choice as any)._match = r!.match;\n return r!.choice;\n });\n }\n\n this.selectedIndex = 0;\n this.render(false);\n }\n\n private highlight(text: string, indices: number[], isSelected: boolean): string {\n let output = '';\n const indexSet = new Set(indices);\n for (let i = 0; i < text.length; i++) {\n if (indexSet.has(i)) {\n if (isSelected) {\n output += `${ANSI.BOLD}${ANSI.FG_WHITE}${text[i]}${theme.main}`; // Reset to main theme\n } else {\n output += `${ANSI.BOLD}${ANSI.FG_CYAN}${text[i]}${ANSI.RESET}`;\n }\n } else {\n output += text[i];\n }\n }\n return output;\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n const choices = this.getFilteredChoices();\n\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 if (this.scrollTop > choices.length - 1) {\n this.scrollTop = Math.max(0, choices.length - this.pageSize);\n }\n\n // Header\n const searchStr = this.searchBuffer ? ` ${theme.muted}(Fuzzy: ${this.searchBuffer})${ANSI.RESET}` : '';\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}${searchStr}\\n`;\n\n if (choices.length === 0) {\n output += ` ${theme.muted}No results found${ANSI.RESET}`;\n } else {\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n if (this.isSeparator(choice)) {\n output += ` ${ANSI.DIM}${(choice as any).text || symbols.line.repeat(8)}${ANSI.RESET}`;\n } else {\n let title = (choice as any).title;\n const match = (choice as any)._match;\n const isSelected = actualIndex === this.selectedIndex;\n\n if (match && this.searchBuffer) {\n title = this.highlight(title, match.indices, isSelected);\n }\n\n if (isSelected) {\n output += `${theme.main}${symbols.pointer} ${title}${ANSI.RESET}`;\n if (match && this.searchBuffer) {\n // Show score\n // output += ` ${theme.muted}(${Math.round(match.score)})${ANSI.RESET}`;\n }\n } else {\n output += ` ${title}`;\n }\n }\n });\n }\n\n this.renderFrame(output);\n }\n}\n"],"names":["FuzzySelectPrompt","SelectPrompt","getFilteredChoices","filteredResults","options","choices","handleInput","char","searchBuffer","length","slice","performSearch","test","startsWith","debounceTimer","clearTimeout","setTimeout","results","map","c","isSeparator","match","fuzzyMatch","title","choice","filter","item","sort","a","b","score","r","_match","selectedIndex","render","highlight","text","indices","isSelected","output","indexSet","Set","i","has","ANSI","BOLD","FG_WHITE","theme","main","FG_CYAN","RESET","_firstRender","scrollTop","pageSize","Math","max","searchStr","muted","success","message","visibleChoices","forEach","index","actualIndex","DIM","symbols","line","repeat","pointer","renderFrame"],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "GaugePrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return GaugePrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ function _define_property(obj, key, value) {
15
+ if (key in obj) {
16
+ Object.defineProperty(obj, key, {
17
+ value: value,
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true
21
+ });
22
+ } else {
23
+ obj[key] = value;
24
+ }
25
+ return obj;
26
+ }
27
+ let GaugePrompt = class GaugePrompt extends _base.Prompt {
28
+ run() {
29
+ // Start the loop when run is called (after initial render)
30
+ const p = super.run();
31
+ this.startLoop();
32
+ return p;
33
+ }
34
+ startLoop() {
35
+ if (!this.running) return;
36
+ this.timer = setTimeout(()=>{
37
+ this.tick();
38
+ this.startLoop();
39
+ }, 30); // ~33 FPS
40
+ }
41
+ tick() {
42
+ this.cursor += this.direction * 2; // Speed multiplier
43
+ if (this.cursor >= 100) {
44
+ this.cursor = 100;
45
+ this.direction = -1;
46
+ } else if (this.cursor <= 0) {
47
+ this.cursor = 0;
48
+ this.direction = 1;
49
+ }
50
+ this.render(false);
51
+ }
52
+ stop() {
53
+ this.running = false;
54
+ if (this.timer) clearTimeout(this.timer);
55
+ // Calculate score
56
+ const center = 50;
57
+ const distance = Math.abs(this.cursor - center);
58
+ if (distance <= this.safeZoneHalf) {
59
+ this.result = 'PERFECT!';
60
+ this.resultColor = _theme.theme.success;
61
+ } else if (distance <= this.warnZoneHalf) {
62
+ this.result = 'GOOD';
63
+ this.resultColor = _ansi.ANSI.FG_YELLOW;
64
+ } else {
65
+ this.result = 'MISS';
66
+ this.resultColor = _theme.theme.error;
67
+ }
68
+ this.render(false);
69
+ // Wait a moment to show result, then submit
70
+ setTimeout(()=>{
71
+ this.submit(this.result); // Force non-null
72
+ }, 800);
73
+ }
74
+ handleInput(char, _key) {
75
+ if (!this.running) return;
76
+ if (char === ' ') {
77
+ this.stop();
78
+ }
79
+ }
80
+ render(_firstRender) {
81
+ let output = '';
82
+ // Header
83
+ output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
84
+ // Draw Gauge Bar
85
+ let barStr = '';
86
+ const center = 50;
87
+ for(let i = 0; i < this.width; i++){
88
+ const pct = i / this.width * 100;
89
+ const dist = Math.abs(pct - center);
90
+ let charColor = _theme.theme.error; // Default Miss (Red)
91
+ if (dist <= this.safeZoneHalf) {
92
+ charColor = _theme.theme.success; // Perfect (Green)
93
+ } else if (dist <= this.warnZoneHalf) {
94
+ charColor = _ansi.ANSI.FG_YELLOW; // Good (Yellow)
95
+ }
96
+ // Using block characters for the bar
97
+ barStr += `${charColor}━${_ansi.ANSI.RESET}`;
98
+ }
99
+ output += ` ${barStr}\n`;
100
+ // Draw Cursor
101
+ // Position relative to width
102
+ const pos = Math.floor(this.cursor / 100 * (this.width - 1));
103
+ const padding = ' '.repeat(pos);
104
+ output += ` ${padding}${_theme.theme.main}▲${_ansi.ANSI.RESET}\n`;
105
+ // Instructions or Result
106
+ if (this.running) {
107
+ output += `${_theme.theme.muted}(Press Space to Stop)${_ansi.ANSI.RESET}`;
108
+ } else {
109
+ output += `${_ansi.ANSI.BOLD}${this.resultColor}${this.result}${_ansi.ANSI.RESET}`;
110
+ }
111
+ this.renderFrame(output);
112
+ }
113
+ cleanup() {
114
+ if (this.timer) clearTimeout(this.timer);
115
+ super.cleanup();
116
+ }
117
+ constructor(options){
118
+ super(options), _define_property(this, "cursor", 0) // 0 to 100
119
+ , _define_property(this, "direction", 1), _define_property(this, "running", true), _define_property(this, "timer", void 0), _define_property(this, "width", void 0), _define_property(this, "safeZoneHalf", void 0), _define_property(this, "warnZoneHalf", void 0), _define_property(this, "result", null), _define_property(this, "resultColor", '');
120
+ this.width = options.width || 40;
121
+ // Calculate safe zone logic (0-100 scale)
122
+ // Default safe width: 20% ( +/- 10%)
123
+ const safeParam = options.safeZone ?? 0.2;
124
+ // Convert to percentage (0-100)
125
+ let safeWidthPct;
126
+ if (safeParam <= 1) {
127
+ safeWidthPct = safeParam * 100;
128
+ } else {
129
+ safeWidthPct = safeParam / this.width * 100;
130
+ }
131
+ this.safeZoneHalf = safeWidthPct / 2;
132
+ // Arbitrary "Good" zone is 3x the safe zone (or until limits)
133
+ this.warnZoneHalf = Math.max(this.safeZoneHalf * 3, 30);
134
+ }
135
+ };
136
+
137
+ //# sourceMappingURL=gauge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/gauge.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { GaugeOptions } from '../types';\n\nexport class GaugePrompt extends Prompt<string, GaugeOptions> {\n private cursor: number = 0; // 0 to 100\n private direction: 1 | -1 = 1;\n private running: boolean = true;\n private timer?: NodeJS.Timeout;\n private readonly width: number;\n private readonly safeZoneHalf: number;\n private readonly warnZoneHalf: number;\n private result: string | null = null;\n private resultColor: string = '';\n\n constructor(options: GaugeOptions) {\n super(options);\n this.width = options.width || 40;\n\n // Calculate safe zone logic (0-100 scale)\n // Default safe width: 20% ( +/- 10%)\n const safeParam = options.safeZone ?? 0.2;\n\n // Convert to percentage (0-100)\n let safeWidthPct: number;\n if (safeParam <= 1) {\n safeWidthPct = safeParam * 100;\n } else {\n safeWidthPct = (safeParam / this.width) * 100;\n }\n\n this.safeZoneHalf = safeWidthPct / 2;\n // Arbitrary \"Good\" zone is 3x the safe zone (or until limits)\n this.warnZoneHalf = Math.max(this.safeZoneHalf * 3, 30);\n }\n\n public run(): Promise<string> {\n // Start the loop when run is called (after initial render)\n const p = super.run();\n this.startLoop();\n return p;\n }\n\n private startLoop() {\n if (!this.running) return;\n this.timer = setTimeout(() => {\n this.tick();\n this.startLoop();\n }, 30); // ~33 FPS\n }\n\n private tick() {\n this.cursor += this.direction * 2; // Speed multiplier\n if (this.cursor >= 100) {\n this.cursor = 100;\n this.direction = -1;\n } else if (this.cursor <= 0) {\n this.cursor = 0;\n this.direction = 1;\n }\n this.render(false);\n }\n\n private stop() {\n this.running = false;\n if (this.timer) clearTimeout(this.timer);\n\n // Calculate score\n const center = 50;\n const distance = Math.abs(this.cursor - center);\n\n if (distance <= this.safeZoneHalf) {\n this.result = 'PERFECT!';\n this.resultColor = theme.success;\n } else if (distance <= this.warnZoneHalf) {\n this.result = 'GOOD';\n this.resultColor = ANSI.FG_YELLOW;\n } else {\n this.result = 'MISS';\n this.resultColor = theme.error;\n }\n\n this.render(false);\n\n // Wait a moment to show result, then submit\n setTimeout(() => {\n this.submit(this.result!); // Force non-null\n }, 800);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (!this.running) return;\n\n if (char === ' ') {\n this.stop();\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Header\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Draw Gauge Bar\n let barStr = '';\n const center = 50;\n\n for (let i = 0; i < this.width; i++) {\n const pct = (i / this.width) * 100;\n const dist = Math.abs(pct - center);\n\n let charColor = theme.error; // Default Miss (Red)\n\n if (dist <= this.safeZoneHalf) {\n charColor = theme.success; // Perfect (Green)\n } else if (dist <= this.warnZoneHalf) {\n charColor = ANSI.FG_YELLOW; // Good (Yellow)\n }\n\n // Using block characters for the bar\n barStr += `${charColor}━${ANSI.RESET}`;\n }\n\n output += ` ${barStr}\\n`;\n\n // Draw Cursor\n // Position relative to width\n const pos = Math.floor((this.cursor / 100) * (this.width - 1));\n const padding = ' '.repeat(pos);\n output += ` ${padding}${theme.main}▲${ANSI.RESET}\\n`;\n\n // Instructions or Result\n if (this.running) {\n output += `${theme.muted}(Press Space to Stop)${ANSI.RESET}`;\n } else {\n output += `${ANSI.BOLD}${this.resultColor}${this.result}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected cleanup() {\n if (this.timer) clearTimeout(this.timer);\n super.cleanup();\n }\n}\n"],"names":["GaugePrompt","Prompt","run","p","startLoop","running","timer","setTimeout","tick","cursor","direction","render","stop","clearTimeout","center","distance","Math","abs","safeZoneHalf","result","resultColor","theme","success","warnZoneHalf","ANSI","FG_YELLOW","error","submit","handleInput","char","_key","_firstRender","output","RESET","BOLD","title","options","message","barStr","i","width","pct","dist","charColor","pos","floor","padding","repeat","main","muted","renderFrame","cleanup","safeParam","safeZone","safeWidthPct","max"],"mappings":"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"}