mepcli 2.0.0-beta.1 → 2.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/README.md +32 -10
  2. package/dist/ansi.d.ts +36 -0
  3. package/dist/ansi.js +1 -0
  4. package/dist/base.d.ts +60 -0
  5. package/dist/base.js +1 -0
  6. package/dist/{src/core.js → core.d.ts} +175 -347
  7. package/dist/core.js +1 -0
  8. package/dist/data/countries.d.ts +2 -0
  9. package/dist/data/countries.js +1 -0
  10. package/dist/data/licenses.d.ts +2 -0
  11. package/dist/data/licenses.js +1 -0
  12. package/dist/highlight.d.ts +7 -0
  13. package/dist/highlight.js +1 -0
  14. package/dist/index.d.ts +48 -0
  15. package/dist/index.js +1 -0
  16. package/dist/input.d.ts +14 -0
  17. package/dist/input.js +1 -0
  18. package/dist/pipeline.d.ts +90 -0
  19. package/dist/pipeline.js +1 -0
  20. package/dist/prompts/autocomplete.d.ts +22 -0
  21. package/dist/prompts/autocomplete.js +1 -0
  22. package/dist/prompts/box.d.ts +21 -0
  23. package/dist/prompts/box.js +4 -0
  24. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  25. package/dist/prompts/breadcrumb-search.js +2 -0
  26. package/dist/prompts/breadcrumb.d.ts +32 -0
  27. package/dist/prompts/breadcrumb.js +3 -0
  28. package/dist/prompts/byte.d.ts +13 -0
  29. package/dist/prompts/byte.js +5 -0
  30. package/dist/prompts/calculator.d.ts +17 -0
  31. package/dist/prompts/calculator.js +3 -0
  32. package/dist/prompts/calendar.d.ts +33 -0
  33. package/dist/prompts/calendar.js +3 -0
  34. package/dist/prompts/checkbox.d.ts +13 -0
  35. package/dist/prompts/checkbox.js +2 -0
  36. package/dist/prompts/code.d.ts +19 -0
  37. package/dist/prompts/code.js +4 -0
  38. package/dist/prompts/color.d.ts +14 -0
  39. package/dist/prompts/color.js +10 -0
  40. package/dist/prompts/confirm.d.ts +8 -0
  41. package/dist/prompts/confirm.js +1 -0
  42. package/dist/prompts/connection-string.d.ts +18 -0
  43. package/dist/prompts/connection-string.js +1 -0
  44. package/dist/prompts/cron.d.ts +13 -0
  45. package/dist/prompts/cron.js +4 -0
  46. package/dist/prompts/curl-utils.d.ts +25 -0
  47. package/dist/prompts/curl-utils.js +1 -0
  48. package/dist/prompts/curl.d.ts +41 -0
  49. package/dist/prompts/curl.js +12 -0
  50. package/dist/prompts/data-inspector.d.ts +22 -0
  51. package/dist/prompts/data-inspector.js +5 -0
  52. package/dist/prompts/date.d.ts +12 -0
  53. package/dist/prompts/date.js +2 -0
  54. package/dist/prompts/dependency.d.ts +16 -0
  55. package/dist/prompts/dependency.js +3 -0
  56. package/dist/prompts/dial.d.ts +10 -0
  57. package/dist/prompts/dial.js +3 -0
  58. package/dist/prompts/diff.d.ts +10 -0
  59. package/dist/prompts/diff.js +10 -0
  60. package/dist/prompts/draw.d.ts +20 -0
  61. package/dist/prompts/draw.js +6 -0
  62. package/dist/prompts/editor.d.ts +14 -0
  63. package/dist/prompts/editor.js +2 -0
  64. package/dist/prompts/emoji.d.ts +18 -0
  65. package/dist/prompts/emoji.js +5 -0
  66. package/dist/prompts/exec.d.ts +17 -0
  67. package/dist/prompts/exec.js +1 -0
  68. package/dist/prompts/file.d.ts +21 -0
  69. package/dist/prompts/file.js +2 -0
  70. package/dist/prompts/form.d.ts +18 -0
  71. package/dist/prompts/form.js +1 -0
  72. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  73. package/dist/prompts/fuzzy-multi-column.js +2 -0
  74. package/dist/prompts/fuzzy.d.ts +12 -0
  75. package/dist/prompts/fuzzy.js +2 -0
  76. package/dist/prompts/gauge.d.ts +21 -0
  77. package/dist/prompts/gauge.js +4 -0
  78. package/dist/prompts/grid.d.ts +14 -0
  79. package/dist/prompts/grid.js +2 -0
  80. package/dist/prompts/heatmap.d.ts +13 -0
  81. package/dist/prompts/heatmap.js +2 -0
  82. package/dist/prompts/ip.d.ts +11 -0
  83. package/dist/prompts/ip.js +3 -0
  84. package/dist/prompts/kanban.d.ts +17 -0
  85. package/dist/prompts/kanban.js +4 -0
  86. package/dist/prompts/keypress.d.ts +7 -0
  87. package/dist/prompts/keypress.js +1 -0
  88. package/dist/prompts/license.d.ts +9 -0
  89. package/dist/prompts/license.js +13 -0
  90. package/dist/prompts/list.d.ts +9 -0
  91. package/dist/prompts/list.js +1 -0
  92. package/dist/prompts/map.d.ts +17 -0
  93. package/dist/prompts/map.js +5 -0
  94. package/dist/prompts/match.d.ts +19 -0
  95. package/dist/prompts/match.js +7 -0
  96. package/dist/prompts/miller.d.ts +15 -0
  97. package/dist/prompts/miller.js +2 -0
  98. package/dist/prompts/multi-column-select.d.ts +10 -0
  99. package/dist/prompts/multi-column-select.js +2 -0
  100. package/dist/prompts/multi-range.d.ts +9 -0
  101. package/dist/prompts/multi-range.js +3 -0
  102. package/dist/prompts/multi-select.d.ts +15 -0
  103. package/dist/prompts/multi-select.js +4 -0
  104. package/dist/prompts/number.d.ts +11 -0
  105. package/dist/prompts/number.js +2 -0
  106. package/dist/prompts/otp.d.ts +10 -0
  107. package/dist/prompts/otp.js +2 -0
  108. package/dist/prompts/pattern.d.ts +22 -0
  109. package/dist/prompts/pattern.js +4 -0
  110. package/dist/prompts/phone.d.ts +41 -0
  111. package/dist/prompts/phone.js +3 -0
  112. package/dist/prompts/quiz-select.d.ts +10 -0
  113. package/dist/prompts/quiz-select.js +7 -0
  114. package/dist/prompts/quiz-text.d.ts +11 -0
  115. package/dist/prompts/quiz-text.js +8 -0
  116. package/dist/prompts/range.d.ts +9 -0
  117. package/dist/prompts/range.js +1 -0
  118. package/dist/prompts/rating.d.ts +8 -0
  119. package/dist/prompts/rating.js +1 -0
  120. package/dist/prompts/regex.d.ts +13 -0
  121. package/dist/prompts/regex.js +5 -0
  122. package/dist/prompts/region.d.ts +11 -0
  123. package/dist/prompts/region.js +5 -0
  124. package/dist/prompts/schedule.d.ts +20 -0
  125. package/dist/prompts/schedule.js +5 -0
  126. package/dist/prompts/scroll.d.ts +13 -0
  127. package/dist/prompts/scroll.js +1 -0
  128. package/dist/prompts/seat.d.ts +17 -0
  129. package/dist/prompts/seat.js +5 -0
  130. package/dist/prompts/select-range.d.ts +8 -0
  131. package/dist/prompts/select-range.js +3 -0
  132. package/dist/prompts/select.d.ts +15 -0
  133. package/dist/prompts/select.js +2 -0
  134. package/dist/prompts/semver.d.ts +6 -0
  135. package/dist/prompts/semver.js +1 -0
  136. package/dist/prompts/shortcut.d.ts +9 -0
  137. package/dist/prompts/shortcut.js +1 -0
  138. package/dist/prompts/slider.d.ts +8 -0
  139. package/dist/prompts/slider.js +1 -0
  140. package/dist/prompts/slot.d.ts +16 -0
  141. package/dist/prompts/slot.js +8 -0
  142. package/dist/prompts/snippet.d.ts +19 -0
  143. package/dist/prompts/snippet.js +4 -0
  144. package/dist/prompts/sort-grid.d.ts +16 -0
  145. package/dist/prompts/sort-grid.js +2 -0
  146. package/dist/prompts/sort.d.ts +14 -0
  147. package/dist/prompts/sort.js +2 -0
  148. package/dist/prompts/spam.d.ts +17 -0
  149. package/dist/prompts/spam.js +2 -0
  150. package/dist/prompts/spreadsheet.d.ts +21 -0
  151. package/dist/prompts/spreadsheet.js +7 -0
  152. package/dist/prompts/table.d.ts +14 -0
  153. package/dist/prompts/table.js +3 -0
  154. package/dist/prompts/text.d.ts +17 -0
  155. package/dist/prompts/text.js +2 -0
  156. package/dist/prompts/time.d.ts +12 -0
  157. package/dist/prompts/time.js +2 -0
  158. package/dist/prompts/toggle.d.ts +8 -0
  159. package/dist/prompts/toggle.js +1 -0
  160. package/dist/prompts/transfer.d.ts +18 -0
  161. package/dist/prompts/transfer.js +5 -0
  162. package/dist/prompts/tree-select.d.ts +31 -0
  163. package/dist/prompts/tree-select.js +3 -0
  164. package/dist/prompts/tree.d.ts +20 -0
  165. package/dist/prompts/tree.js +3 -0
  166. package/dist/prompts/wait.d.ts +18 -0
  167. package/dist/prompts/wait.js +1 -0
  168. package/dist/spinner.d.ts +33 -0
  169. package/dist/spinner.js +3 -0
  170. package/dist/symbols.d.ts +33 -0
  171. package/dist/symbols.js +1 -0
  172. package/dist/tasks.d.ts +57 -0
  173. package/dist/tasks.js +1 -0
  174. package/dist/theme.d.ts +2 -0
  175. package/dist/theme.js +1 -0
  176. package/dist/types.d.ts +503 -0
  177. package/dist/types.js +1 -0
  178. package/dist/utils.d.ts +81 -0
  179. package/dist/utils.js +1 -0
  180. package/package.json +12 -17
  181. package/dist/src/ansi.js +0 -50
  182. package/dist/src/ansi.js.map +0 -1
  183. package/dist/src/base.js +0 -258
  184. package/dist/src/base.js.map +0 -1
  185. package/dist/src/core.js.map +0 -1
  186. package/dist/src/data/countries.js +0 -569
  187. package/dist/src/data/countries.js.map +0 -1
  188. package/dist/src/data/licenses.js +0 -480
  189. package/dist/src/data/licenses.js.map +0 -1
  190. package/dist/src/highlight.js +0 -185
  191. package/dist/src/highlight.js.map +0 -1
  192. package/dist/src/index.js +0 -66
  193. package/dist/src/index.js.map +0 -1
  194. package/dist/src/input.js +0 -158
  195. package/dist/src/input.js.map +0 -1
  196. package/dist/src/pipeline.js +0 -273
  197. package/dist/src/pipeline.js.map +0 -1
  198. package/dist/src/prompts/autocomplete.js +0 -171
  199. package/dist/src/prompts/autocomplete.js.map +0 -1
  200. package/dist/src/prompts/box.js +0 -225
  201. package/dist/src/prompts/box.js.map +0 -1
  202. package/dist/src/prompts/breadcrumb-search.js +0 -260
  203. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  204. package/dist/src/prompts/breadcrumb.js +0 -307
  205. package/dist/src/prompts/breadcrumb.js.map +0 -1
  206. package/dist/src/prompts/byte.js +0 -176
  207. package/dist/src/prompts/byte.js.map +0 -1
  208. package/dist/src/prompts/calculator.js +0 -243
  209. package/dist/src/prompts/calculator.js.map +0 -1
  210. package/dist/src/prompts/calendar.js +0 -430
  211. package/dist/src/prompts/calendar.js.map +0 -1
  212. package/dist/src/prompts/checkbox.js +0 -159
  213. package/dist/src/prompts/checkbox.js.map +0 -1
  214. package/dist/src/prompts/code.js +0 -271
  215. package/dist/src/prompts/code.js.map +0 -1
  216. package/dist/src/prompts/color.js +0 -165
  217. package/dist/src/prompts/color.js.map +0 -1
  218. package/dist/src/prompts/confirm.js +0 -55
  219. package/dist/src/prompts/confirm.js.map +0 -1
  220. package/dist/src/prompts/connection-string.js +0 -120
  221. package/dist/src/prompts/connection-string.js.map +0 -1
  222. package/dist/src/prompts/cron.js +0 -207
  223. package/dist/src/prompts/cron.js.map +0 -1
  224. package/dist/src/prompts/curl-utils.js +0 -71
  225. package/dist/src/prompts/curl-utils.js.map +0 -1
  226. package/dist/src/prompts/curl.js +0 -431
  227. package/dist/src/prompts/curl.js.map +0 -1
  228. package/dist/src/prompts/data-inspector.js +0 -261
  229. package/dist/src/prompts/data-inspector.js.map +0 -1
  230. package/dist/src/prompts/date.js +0 -185
  231. package/dist/src/prompts/date.js.map +0 -1
  232. package/dist/src/prompts/dependency.js +0 -283
  233. package/dist/src/prompts/dependency.js.map +0 -1
  234. package/dist/src/prompts/dial.js +0 -124
  235. package/dist/src/prompts/dial.js.map +0 -1
  236. package/dist/src/prompts/diff.js +0 -118
  237. package/dist/src/prompts/diff.js.map +0 -1
  238. package/dist/src/prompts/draw.js +0 -191
  239. package/dist/src/prompts/draw.js.map +0 -1
  240. package/dist/src/prompts/editor.js +0 -234
  241. package/dist/src/prompts/editor.js.map +0 -1
  242. package/dist/src/prompts/emoji.js +0 -226
  243. package/dist/src/prompts/emoji.js.map +0 -1
  244. package/dist/src/prompts/exec.js +0 -151
  245. package/dist/src/prompts/exec.js.map +0 -1
  246. package/dist/src/prompts/file.js +0 -217
  247. package/dist/src/prompts/file.js.map +0 -1
  248. package/dist/src/prompts/form.js +0 -241
  249. package/dist/src/prompts/form.js.map +0 -1
  250. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  251. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  252. package/dist/src/prompts/fuzzy.js +0 -147
  253. package/dist/src/prompts/fuzzy.js.map +0 -1
  254. package/dist/src/prompts/gauge.js +0 -137
  255. package/dist/src/prompts/gauge.js.map +0 -1
  256. package/dist/src/prompts/grid.js +0 -191
  257. package/dist/src/prompts/grid.js.map +0 -1
  258. package/dist/src/prompts/heatmap.js +0 -147
  259. package/dist/src/prompts/heatmap.js.map +0 -1
  260. package/dist/src/prompts/ip.js +0 -138
  261. package/dist/src/prompts/ip.js.map +0 -1
  262. package/dist/src/prompts/kanban.js +0 -233
  263. package/dist/src/prompts/kanban.js.map +0 -1
  264. package/dist/src/prompts/keypress.js +0 -54
  265. package/dist/src/prompts/keypress.js.map +0 -1
  266. package/dist/src/prompts/license.js +0 -144
  267. package/dist/src/prompts/license.js.map +0 -1
  268. package/dist/src/prompts/list.js +0 -124
  269. package/dist/src/prompts/list.js.map +0 -1
  270. package/dist/src/prompts/map.js +0 -262
  271. package/dist/src/prompts/map.js.map +0 -1
  272. package/dist/src/prompts/match.js +0 -271
  273. package/dist/src/prompts/match.js.map +0 -1
  274. package/dist/src/prompts/miller.js +0 -228
  275. package/dist/src/prompts/miller.js.map +0 -1
  276. package/dist/src/prompts/multi-column-select.js +0 -176
  277. package/dist/src/prompts/multi-column-select.js.map +0 -1
  278. package/dist/src/prompts/multi-range.js +0 -189
  279. package/dist/src/prompts/multi-range.js.map +0 -1
  280. package/dist/src/prompts/multi-select.js +0 -183
  281. package/dist/src/prompts/multi-select.js.map +0 -1
  282. package/dist/src/prompts/number.js +0 -166
  283. package/dist/src/prompts/number.js.map +0 -1
  284. package/dist/src/prompts/otp.js +0 -107
  285. package/dist/src/prompts/otp.js.map +0 -1
  286. package/dist/src/prompts/pattern.js +0 -252
  287. package/dist/src/prompts/pattern.js.map +0 -1
  288. package/dist/src/prompts/phone.js +0 -398
  289. package/dist/src/prompts/phone.js.map +0 -1
  290. package/dist/src/prompts/quiz-select.js +0 -114
  291. package/dist/src/prompts/quiz-select.js.map +0 -1
  292. package/dist/src/prompts/quiz-text.js +0 -98
  293. package/dist/src/prompts/quiz-text.js.map +0 -1
  294. package/dist/src/prompts/range.js +0 -164
  295. package/dist/src/prompts/range.js.map +0 -1
  296. package/dist/src/prompts/rating.js +0 -83
  297. package/dist/src/prompts/rating.js.map +0 -1
  298. package/dist/src/prompts/regex.js +0 -145
  299. package/dist/src/prompts/regex.js.map +0 -1
  300. package/dist/src/prompts/region.js +0 -170
  301. package/dist/src/prompts/region.js.map +0 -1
  302. package/dist/src/prompts/schedule.js +0 -270
  303. package/dist/src/prompts/schedule.js.map +0 -1
  304. package/dist/src/prompts/scroll.js +0 -155
  305. package/dist/src/prompts/scroll.js.map +0 -1
  306. package/dist/src/prompts/seat.js +0 -164
  307. package/dist/src/prompts/seat.js.map +0 -1
  308. package/dist/src/prompts/select-range.js +0 -148
  309. package/dist/src/prompts/select-range.js.map +0 -1
  310. package/dist/src/prompts/select.js +0 -163
  311. package/dist/src/prompts/select.js.map +0 -1
  312. package/dist/src/prompts/semver.js +0 -43
  313. package/dist/src/prompts/semver.js.map +0 -1
  314. package/dist/src/prompts/shortcut.js +0 -133
  315. package/dist/src/prompts/shortcut.js.map +0 -1
  316. package/dist/src/prompts/slider.js +0 -69
  317. package/dist/src/prompts/slider.js.map +0 -1
  318. package/dist/src/prompts/slot.js +0 -117
  319. package/dist/src/prompts/slot.js.map +0 -1
  320. package/dist/src/prompts/snippet.js +0 -228
  321. package/dist/src/prompts/snippet.js.map +0 -1
  322. package/dist/src/prompts/sort-grid.js +0 -151
  323. package/dist/src/prompts/sort-grid.js.map +0 -1
  324. package/dist/src/prompts/sort.js +0 -166
  325. package/dist/src/prompts/sort.js.map +0 -1
  326. package/dist/src/prompts/spam.js +0 -80
  327. package/dist/src/prompts/spam.js.map +0 -1
  328. package/dist/src/prompts/spreadsheet.js +0 -240
  329. package/dist/src/prompts/spreadsheet.js.map +0 -1
  330. package/dist/src/prompts/table.js +0 -120
  331. package/dist/src/prompts/table.js.map +0 -1
  332. package/dist/src/prompts/text.js +0 -317
  333. package/dist/src/prompts/text.js.map +0 -1
  334. package/dist/src/prompts/time.js +0 -211
  335. package/dist/src/prompts/time.js.map +0 -1
  336. package/dist/src/prompts/toggle.js +0 -53
  337. package/dist/src/prompts/toggle.js.map +0 -1
  338. package/dist/src/prompts/transfer.js +0 -207
  339. package/dist/src/prompts/transfer.js.map +0 -1
  340. package/dist/src/prompts/tree-select.js +0 -270
  341. package/dist/src/prompts/tree-select.js.map +0 -1
  342. package/dist/src/prompts/tree.js +0 -233
  343. package/dist/src/prompts/tree.js.map +0 -1
  344. package/dist/src/prompts/wait.js +0 -79
  345. package/dist/src/prompts/wait.js.map +0 -1
  346. package/dist/src/spinner.js +0 -105
  347. package/dist/src/spinner.js.map +0 -1
  348. package/dist/src/symbols.js +0 -66
  349. package/dist/src/symbols.js.map +0 -1
  350. package/dist/src/tasks.js +0 -231
  351. package/dist/src/tasks.js.map +0 -1
  352. package/dist/src/theme.js +0 -29
  353. package/dist/src/theme.js.map +0 -1
  354. package/dist/src/types.js +0 -8
  355. package/dist/src/types.js.map +0 -1
  356. package/dist/src/utils.js +0 -480
  357. package/dist/src/utils.js.map +0 -1
@@ -1,228 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SnippetPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SnippetPrompt;
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 SnippetPrompt = class SnippetPrompt extends _base.Prompt {
28
- parseTemplate() {
29
- const regex = /\$\{([a-zA-Z0-9_]+)\}/g;
30
- let lastIndex = 0;
31
- let match;
32
- while((match = regex.exec(this.options.template)) !== null){
33
- if (match.index > lastIndex) {
34
- this.tokens.push({
35
- type: 'static',
36
- value: this.options.template.substring(lastIndex, match.index)
37
- });
38
- }
39
- this.tokens.push({
40
- type: 'variable',
41
- value: match[1]
42
- });
43
- this.variableTokens.push(this.tokens.length - 1);
44
- lastIndex = regex.lastIndex;
45
- }
46
- if (lastIndex < this.options.template.length) {
47
- this.tokens.push({
48
- type: 'static',
49
- value: this.options.template.substring(lastIndex)
50
- });
51
- }
52
- }
53
- render(firstRender) {
54
- if (!firstRender && this.lastLinesUp > 0) {
55
- this.print(`\x1b[${this.lastLinesUp}B`);
56
- }
57
- this.lastLinesUp = 0;
58
- // Build the string
59
- let output = '';
60
- let cursorVisualIndex = 0;
61
- let currentVisualIndex = 0;
62
- // Prefix/Message
63
- const prefix = `${_theme.theme.success}? ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message || 'Fill snippet'}${_ansi.ANSI.RESET}\n`;
64
- output += prefix;
65
- let snippetLine = '';
66
- this.tokens.forEach((token, index)=>{
67
- if (token.type === 'static') {
68
- snippetLine += `${_theme.theme.muted}${token.value}${_ansi.ANSI.RESET}`;
69
- currentVisualIndex += token.value.length; // assuming simple ascii/static length
70
- } else {
71
- const isFocused = this.variableTokens[this.activeVarIndex] === index;
72
- const val = this.values[token.value] || '';
73
- // Placeholder if empty?
74
- const displayVal = val.length === 0 && isFocused ? '' : val; // maybe show placeholder?
75
- let styledVal = displayVal;
76
- if (isFocused) {
77
- styledVal = `${_ansi.ANSI.UNDERLINE}${_theme.theme.main}${displayVal}${_ansi.ANSI.RESET}`;
78
- // Calculate cursor position
79
- cursorVisualIndex = currentVisualIndex + this.cursor;
80
- } else {
81
- styledVal = `${_theme.theme.main}${displayVal}${_ansi.ANSI.RESET}`;
82
- }
83
- snippetLine += styledVal;
84
- currentVisualIndex += displayVal.length;
85
- }
86
- });
87
- output += snippetLine;
88
- if (this.errorMsg) {
89
- output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
90
- }
91
- output += `\n${_theme.theme.muted}(Tab to next variable, Enter to submit)${_ansi.ANSI.RESET}`;
92
- this.renderFrame(output);
93
- // Position Cursor
94
- this.print(_ansi.ANSI.SHOW_CURSOR);
95
- // We need to move to correct line and column
96
- // Lines:
97
- // 1. Message
98
- // 2. Snippet (cursor here)
99
- // 3. Error (optional)
100
- // 4. Hint
101
- // snippetLine is at index 1 (0-based) if Message has no newlines.
102
- // Prefix ends with \n. So snippetLine is on 2nd line.
103
- // Calculate which row relative to bottom the snippet line is.
104
- // If error: 4 lines total. Snippet is line 1 (2nd). Lines up = 2.
105
- // If no error: 3 lines total. Snippet is line 1. Lines up = 1.
106
- let linesUp = 1;
107
- if (this.errorMsg) linesUp++;
108
- if (linesUp > 0) {
109
- this.print(`\x1b[${linesUp}A`);
110
- this.lastLinesUp = linesUp;
111
- }
112
- this.print(_ansi.ANSI.CURSOR_LEFT);
113
- if (cursorVisualIndex > 0) {
114
- this.print(`\x1b[${cursorVisualIndex}C`);
115
- }
116
- }
117
- cleanup() {
118
- if (this.lastLinesUp > 0) {
119
- this.print(`\x1b[${this.lastLinesUp}B`);
120
- this.lastLinesUp = 0;
121
- }
122
- super.cleanup();
123
- }
124
- handleInput(char, _key) {
125
- // Navigation: Tab / Shift+Tab
126
- if (char === '\u001b[Z') {
127
- // Shift Tab -> Prev
128
- this.moveFocus(-1);
129
- return;
130
- }
131
- if (char === '\t') {
132
- this.moveFocus(1);
133
- return;
134
- }
135
- // Enter
136
- if (char === '\r' || char === '\n') {
137
- this.submitSnippet();
138
- return;
139
- }
140
- // Editing
141
- const activeTokenIdx = this.variableTokens[this.activeVarIndex];
142
- const varName = this.tokens[activeTokenIdx].value;
143
- const val = this.values[varName];
144
- if (char === '\u0008' || char === '\x7f') {
145
- if (this.cursor > 0) {
146
- const pre = val.slice(0, this.cursor - 1);
147
- const post = val.slice(this.cursor);
148
- this.values[varName] = pre + post;
149
- this.cursor--;
150
- this.render(false);
151
- }
152
- return;
153
- }
154
- if (this.isLeft(char)) {
155
- if (this.cursor > 0) this.cursor--;
156
- this.render(false);
157
- return;
158
- }
159
- if (this.isRight(char)) {
160
- if (this.cursor < val.length) this.cursor++;
161
- this.render(false);
162
- return;
163
- }
164
- if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
165
- const pre = val.slice(0, this.cursor);
166
- const post = val.slice(this.cursor);
167
- this.values[varName] = pre + char + post;
168
- this.cursor += char.length;
169
- this.render(false);
170
- }
171
- }
172
- handleMouse(event) {
173
- if (event.action === 'scroll') {
174
- if (event.scroll === 'up') {
175
- this.moveFocus(-1);
176
- } else if (event.scroll === 'down') {
177
- this.moveFocus(1);
178
- }
179
- }
180
- }
181
- moveFocus(direction) {
182
- const nextIndex = this.activeVarIndex + direction;
183
- if (nextIndex >= 0 && nextIndex < this.variableTokens.length) {
184
- this.activeVarIndex = nextIndex;
185
- const varName = this.tokens[this.variableTokens[this.activeVarIndex]].value;
186
- this.cursor = this.values[varName].length;
187
- this.render(false);
188
- }
189
- }
190
- submitSnippet() {
191
- // Construct final string
192
- let result = '';
193
- this.tokens.forEach((token)=>{
194
- if (token.type === 'static') {
195
- result += token.value;
196
- } else {
197
- result += this.values[token.value] || '';
198
- }
199
- });
200
- this.submit(result);
201
- }
202
- constructor(options){
203
- super(options), _define_property(this, "tokens", []), _define_property(this, "variableTokens", []) // Indices in this.tokens
204
- , _define_property(this, "values", {}), _define_property(this, "activeVarIndex", 0) // Index in variableTokens
205
- , _define_property(this, "cursor", 0) // Cursor in active variable value
206
- , _define_property(this, "errorMsg", ''), _define_property(this, "lastLinesUp", 0);
207
- this.parseTemplate();
208
- // Initialize values
209
- if (options.values) {
210
- this.values = {
211
- ...options.values
212
- };
213
- }
214
- // Ensure all vars have entries
215
- this.variableTokens.forEach((idx)=>{
216
- const varName = this.tokens[idx].value;
217
- if (this.values[varName] === undefined) {
218
- this.values[varName] = '';
219
- }
220
- });
221
- if (this.variableTokens.length > 0) {
222
- const firstVar = this.tokens[this.variableTokens[0]].value;
223
- this.cursor = this.values[firstVar].length;
224
- }
225
- }
226
- };
227
-
228
- //# sourceMappingURL=snippet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/snippet.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { SnippetOptions, MouseEvent } from '../types';\n\ninterface Token {\n type: 'static' | 'variable';\n value: string; // For static: text. For variable: name.\n}\n\nexport class SnippetPrompt extends Prompt<string, SnippetOptions> {\n private tokens: Token[] = [];\n private variableTokens: number[] = []; // Indices in this.tokens\n private values: Record<string, string> = {};\n private activeVarIndex: number = 0; // Index in variableTokens\n private cursor: number = 0; // Cursor in active variable value\n private errorMsg: string = '';\n private lastLinesUp: number = 0;\n\n constructor(options: SnippetOptions) {\n super(options);\n this.parseTemplate();\n\n // Initialize values\n if (options.values) {\n this.values = { ...options.values };\n }\n // Ensure all vars have entries\n this.variableTokens.forEach(idx => {\n const varName = this.tokens[idx].value;\n if (this.values[varName] === undefined) {\n this.values[varName] = '';\n }\n });\n\n if (this.variableTokens.length > 0) {\n const firstVar = this.tokens[this.variableTokens[0]].value;\n this.cursor = this.values[firstVar].length;\n }\n }\n\n private parseTemplate() {\n const regex = /\\$\\{([a-zA-Z0-9_]+)\\}/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(this.options.template)) !== null) {\n if (match.index > lastIndex) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex, match.index) });\n }\n this.tokens.push({ type: 'variable', value: match[1] });\n this.variableTokens.push(this.tokens.length - 1);\n lastIndex = regex.lastIndex;\n }\n\n if (lastIndex < this.options.template.length) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex) });\n }\n }\n\n protected render(firstRender: boolean) {\n if (!firstRender && this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n }\n this.lastLinesUp = 0;\n\n // Build the string\n let output = '';\n let cursorVisualIndex = 0;\n let currentVisualIndex = 0;\n\n // Prefix/Message\n const prefix = `${theme.success}? ${ANSI.BOLD}${theme.title}${this.options.message || 'Fill snippet'}${ANSI.RESET}\\n`;\n output += prefix;\n\n let snippetLine = '';\n\n this.tokens.forEach((token, index) => {\n if (token.type === 'static') {\n snippetLine += `${theme.muted}${token.value}${ANSI.RESET}`;\n currentVisualIndex += token.value.length; // assuming simple ascii/static length\n } else {\n const isFocused = this.variableTokens[this.activeVarIndex] === index;\n const val = this.values[token.value] || '';\n // Placeholder if empty?\n const displayVal = val.length === 0 && isFocused ? '' : val; // maybe show placeholder?\n\n let styledVal = displayVal;\n if (isFocused) {\n styledVal = `${ANSI.UNDERLINE}${theme.main}${displayVal}${ANSI.RESET}`;\n // Calculate cursor position\n cursorVisualIndex = currentVisualIndex + this.cursor;\n } else {\n styledVal = `${theme.main}${displayVal}${ANSI.RESET}`;\n }\n\n snippetLine += styledVal;\n currentVisualIndex += displayVal.length;\n }\n });\n\n output += snippetLine;\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n output += `\\n${theme.muted}(Tab to next variable, Enter to submit)${ANSI.RESET}`;\n\n this.renderFrame(output);\n\n // Position Cursor\n this.print(ANSI.SHOW_CURSOR);\n\n // We need to move to correct line and column\n // Lines:\n // 1. Message\n // 2. Snippet (cursor here)\n // 3. Error (optional)\n // 4. Hint\n\n // snippetLine is at index 1 (0-based) if Message has no newlines.\n // Prefix ends with \\n. So snippetLine is on 2nd line.\n\n // Calculate which row relative to bottom the snippet line is.\n // If error: 4 lines total. Snippet is line 1 (2nd). Lines up = 2.\n // If no error: 3 lines total. Snippet is line 1. Lines up = 1.\n\n let linesUp = 1;\n if (this.errorMsg) linesUp++;\n\n if (linesUp > 0) {\n this.print(`\\x1b[${linesUp}A`);\n this.lastLinesUp = linesUp;\n }\n\n this.print(ANSI.CURSOR_LEFT);\n if (cursorVisualIndex > 0) {\n this.print(`\\x1b[${cursorVisualIndex}C`);\n }\n }\n\n protected cleanup() {\n if (this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n this.lastLinesUp = 0;\n }\n super.cleanup();\n }\n\n protected handleInput(char: string, _key: Buffer) {\n // Navigation: Tab / Shift+Tab\n if (char === '\\u001b[Z') {\n // Shift Tab -> Prev\n this.moveFocus(-1);\n return;\n }\n\n if (char === '\\t') {\n this.moveFocus(1);\n return;\n }\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n this.submitSnippet();\n return;\n }\n\n // Editing\n const activeTokenIdx = this.variableTokens[this.activeVarIndex];\n const varName = this.tokens[activeTokenIdx].value;\n const val = this.values[varName];\n\n if (char === '\\u0008' || char === '\\x7f') { // Backspace\n if (this.cursor > 0) {\n const pre = val.slice(0, this.cursor - 1);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + post;\n this.cursor--;\n this.render(false);\n }\n return;\n }\n\n if (this.isLeft(char)) {\n if (this.cursor > 0) this.cursor--;\n this.render(false);\n return;\n }\n if (this.isRight(char)) {\n if (this.cursor < val.length) this.cursor++;\n this.render(false);\n return;\n }\n\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n const pre = val.slice(0, this.cursor);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + char + post;\n this.cursor += char.length;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.moveFocus(-1);\n } else if (event.scroll === 'down') {\n this.moveFocus(1);\n }\n }\n }\n\n private moveFocus(direction: number) {\n const nextIndex = this.activeVarIndex + direction;\n if (nextIndex >= 0 && nextIndex < this.variableTokens.length) {\n this.activeVarIndex = nextIndex;\n const varName = this.tokens[this.variableTokens[this.activeVarIndex]].value;\n this.cursor = this.values[varName].length;\n this.render(false);\n }\n }\n\n private submitSnippet() {\n // Construct final string\n let result = '';\n this.tokens.forEach(token => {\n if (token.type === 'static') {\n result += token.value;\n } else {\n result += this.values[token.value] || '';\n }\n });\n this.submit(result);\n }\n}\n"],"names":["SnippetPrompt","Prompt","parseTemplate","regex","lastIndex","match","exec","options","template","index","tokens","push","type","value","substring","variableTokens","length","render","firstRender","lastLinesUp","print","output","cursorVisualIndex","currentVisualIndex","prefix","theme","success","ANSI","BOLD","title","message","RESET","snippetLine","forEach","token","muted","isFocused","activeVarIndex","val","values","displayVal","styledVal","UNDERLINE","main","cursor","errorMsg","error","renderFrame","SHOW_CURSOR","linesUp","CURSOR_LEFT","cleanup","handleInput","char","_key","moveFocus","submitSnippet","activeTokenIdx","varName","pre","slice","post","isLeft","isRight","test","startsWith","handleMouse","event","action","scroll","direction","nextIndex","result","submit","idx","undefined","firstVar"],"mappings":"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"}
@@ -1,151 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SortGridPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SortGridPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _utils = require("../utils");
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 SortGridPrompt = class SortGridPrompt extends _base.Prompt {
29
- calculateLayout() {
30
- const rows = this.gridData.length;
31
- if (rows === 0) return;
32
- // Assume consistent column count, use max found if ragged
33
- const cols = this.gridData.reduce((max, row)=>Math.max(max, row.length), 0);
34
- this.columnWidths = new Array(cols).fill(0);
35
- for(let r = 0; r < rows; r++){
36
- for(let c = 0; c < this.gridData[r].length; c++){
37
- const cell = this.gridData[r][c] || '';
38
- this.columnWidths[c] = Math.max(this.columnWidths[c], (0, _utils.stringWidth)(cell) + 2); // +2 padding
39
- }
40
- }
41
- }
42
- render(_firstRender) {
43
- this.calculateLayout();
44
- let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
45
- this.gridData.forEach((row, r)=>{
46
- const rowStr = row.map((cell, c)=>{
47
- const width = this.columnWidths[c] || (0, _utils.stringWidth)(cell) + 2;
48
- const content = cell || '';
49
- // Padding
50
- const padding = Math.max(0, width - (0, _utils.stringWidth)(content));
51
- const leftPad = Math.floor(padding / 2);
52
- const rightPad = padding - leftPad;
53
- let cellStr = ' '.repeat(leftPad) + content + ' '.repeat(rightPad);
54
- // Styling
55
- const isFocused = r === this.cursorY && c === this.cursorX;
56
- const isGrabbed = r === this.grabbedY && c === this.grabbedX;
57
- if (isGrabbed) {
58
- // Grabbed item style
59
- cellStr = `${_ansi.ANSI.BG_RED}${_ansi.ANSI.FG_WHITE}${cellStr}${_ansi.ANSI.RESET}`;
60
- } else if (isFocused) {
61
- // Focused item style
62
- cellStr = `${_ansi.ANSI.REVERSE}${cellStr}${_ansi.ANSI.RESET}`;
63
- }
64
- return cellStr;
65
- }).join(' '); // Space between columns
66
- output += rowStr + '\n';
67
- });
68
- output += `${_theme.theme.muted}Arrows to move, Space to grab/drop, Enter to submit${_ansi.ANSI.RESET}`;
69
- this.renderFrame(output);
70
- }
71
- handleInput(char, _key) {
72
- if (char === '\r' || char === '\n') {
73
- if (this.grabbedX !== null) {
74
- this.grabbedX = null;
75
- this.grabbedY = null;
76
- }
77
- this.submit(this.gridData);
78
- return;
79
- }
80
- if (char === ' ') {
81
- if (this.grabbedX === null) {
82
- // Grab
83
- this.grabbedX = this.cursorX;
84
- this.grabbedY = this.cursorY;
85
- } else {
86
- // Drop
87
- this.grabbedX = null;
88
- this.grabbedY = null;
89
- }
90
- this.render(false);
91
- return;
92
- }
93
- const isUp = this.isUp(char);
94
- const isDown = this.isDown(char);
95
- const isLeft = this.isLeft(char);
96
- const isRight = this.isRight(char);
97
- const isTab = char === '\t';
98
- const isShiftTab = char === '\u001b[Z';
99
- if (isUp) this.move('up');
100
- if (isDown) this.move('down');
101
- if (isLeft || isShiftTab) this.move('left');
102
- if (isRight || isTab) this.move('right');
103
- }
104
- handleMouse(event) {
105
- if (event.scroll === 'up') {
106
- this.move('up');
107
- } else if (event.scroll === 'down') {
108
- this.move('down');
109
- }
110
- }
111
- move(direction) {
112
- if (this.gridData.length === 0) return;
113
- const oldX = this.cursorX;
114
- const oldY = this.cursorY;
115
- if (direction === 'up') this.cursorY = Math.max(0, this.cursorY - 1);
116
- if (direction === 'down') this.cursorY = Math.min(this.gridData.length - 1, this.cursorY + 1);
117
- // Clamp cursorX if we moved to a shorter row
118
- if (this.gridData.length > 0) {
119
- const rowLen = this.gridData[this.cursorY] ? this.gridData[this.cursorY].length : 0;
120
- if (this.cursorX >= rowLen) this.cursorX = Math.max(0, rowLen - 1);
121
- }
122
- if (direction === 'left') this.cursorX = Math.max(0, this.cursorX - 1);
123
- if (direction === 'right') {
124
- const rowLen = this.gridData.length > 0 && this.gridData[this.cursorY] ? this.gridData[this.cursorY].length : 0;
125
- this.cursorX = Math.min(rowLen - 1, this.cursorX + 1);
126
- }
127
- // If Grabbed, swap content
128
- if (this.grabbedX !== null) {
129
- // If we moved
130
- if (oldX !== this.cursorX || oldY !== this.cursorY) {
131
- const valA = this.gridData[oldY][oldX];
132
- const valB = this.gridData[this.cursorY][this.cursorX];
133
- this.gridData[oldY][oldX] = valB;
134
- this.gridData[this.cursorY][this.cursorX] = valA;
135
- this.grabbedX = this.cursorX;
136
- this.grabbedY = this.cursorY;
137
- }
138
- }
139
- this.render(false);
140
- }
141
- constructor(options){
142
- super(options), _define_property(this, "cursorX", 0), _define_property(this, "cursorY", 0), _define_property(this, "grabbedX", null), _define_property(this, "grabbedY", null), _define_property(this, "gridData", void 0), _define_property(this, "columnWidths", []);
143
- // Deep copy grid data
144
- this.gridData = options.data.map((row)=>[
145
- ...row
146
- ]);
147
- this.calculateLayout();
148
- }
149
- };
150
-
151
- //# sourceMappingURL=sort-grid.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/sort-grid.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { SortGridOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class SortGridPrompt extends Prompt<string[][], SortGridOptions> {\n protected cursorX: number = 0;\n protected cursorY: number = 0;\n protected grabbedX: number | null = null;\n protected grabbedY: number | null = null;\n private gridData: string[][];\n private columnWidths: number[] = [];\n\n constructor(options: SortGridOptions) {\n super(options);\n // Deep copy grid data\n this.gridData = options.data.map(row => [...row]);\n this.calculateLayout();\n }\n\n private calculateLayout() {\n const rows = this.gridData.length;\n if (rows === 0) return;\n // Assume consistent column count, use max found if ragged\n const cols = this.gridData.reduce((max, row) => Math.max(max, row.length), 0);\n\n this.columnWidths = new Array(cols).fill(0);\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < this.gridData[r].length; c++) {\n const cell = this.gridData[r][c] || '';\n this.columnWidths[c] = Math.max(this.columnWidths[c], stringWidth(cell) + 2); // +2 padding\n }\n }\n }\n\n protected render(_firstRender: boolean): void {\n this.calculateLayout();\n let output = `${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n this.gridData.forEach((row, r) => {\n const rowStr = row.map((cell, c) => {\n const width = this.columnWidths[c] || stringWidth(cell) + 2;\n const content = cell || '';\n\n // Padding\n const padding = Math.max(0, width - stringWidth(content));\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n\n let cellStr = ' '.repeat(leftPad) + content + ' '.repeat(rightPad);\n\n // Styling\n const isFocused = (r === this.cursorY && c === this.cursorX);\n const isGrabbed = (r === this.grabbedY && c === this.grabbedX);\n\n if (isGrabbed) {\n // Grabbed item style\n cellStr = `${ANSI.BG_RED}${ANSI.FG_WHITE}${cellStr}${ANSI.RESET}`;\n } else if (isFocused) {\n // Focused item style\n cellStr = `${ANSI.REVERSE}${cellStr}${ANSI.RESET}`;\n }\n\n return cellStr;\n }).join(' '); // Space between columns\n\n output += rowStr + '\\n';\n });\n\n output += `${theme.muted}Arrows to move, Space to grab/drop, Enter to submit${ANSI.RESET}`;\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n if (char === '\\r' || char === '\\n') {\n if (this.grabbedX !== null) {\n this.grabbedX = null;\n this.grabbedY = null;\n }\n this.submit(this.gridData);\n return;\n }\n\n if (char === ' ') {\n if (this.grabbedX === null) {\n // Grab\n this.grabbedX = this.cursorX;\n this.grabbedY = this.cursorY;\n } else {\n // Drop\n this.grabbedX = null;\n this.grabbedY = null;\n }\n this.render(false);\n return;\n }\n\n const isUp = this.isUp(char);\n const isDown = this.isDown(char);\n const isLeft = this.isLeft(char);\n const isRight = this.isRight(char);\n const isTab = char === '\\t';\n const isShiftTab = char === '\\u001b[Z';\n\n if (isUp) this.move('up');\n if (isDown) this.move('down');\n if (isLeft || isShiftTab) this.move('left');\n if (isRight || isTab) this.move('right');\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.scroll === 'up') {\n this.move('up');\n } else if (event.scroll === 'down') {\n this.move('down');\n }\n }\n\n protected move(direction: 'up' | 'down' | 'left' | 'right'): void {\n if (this.gridData.length === 0) return;\n\n const oldX = this.cursorX;\n const oldY = this.cursorY;\n\n if (direction === 'up') this.cursorY = Math.max(0, this.cursorY - 1);\n if (direction === 'down') this.cursorY = Math.min(this.gridData.length - 1, this.cursorY + 1);\n\n // Clamp cursorX if we moved to a shorter row\n if (this.gridData.length > 0) {\n const rowLen = this.gridData[this.cursorY] ? this.gridData[this.cursorY].length : 0;\n if (this.cursorX >= rowLen) this.cursorX = Math.max(0, rowLen - 1);\n }\n\n if (direction === 'left') this.cursorX = Math.max(0, this.cursorX - 1);\n if (direction === 'right') {\n const rowLen = this.gridData.length > 0 && this.gridData[this.cursorY] ? this.gridData[this.cursorY].length : 0;\n this.cursorX = Math.min(rowLen - 1, this.cursorX + 1);\n }\n\n // If Grabbed, swap content\n if (this.grabbedX !== null) {\n // If we moved\n if (oldX !== this.cursorX || oldY !== this.cursorY) {\n const valA = this.gridData[oldY][oldX];\n const valB = this.gridData[this.cursorY][this.cursorX];\n\n this.gridData[oldY][oldX] = valB;\n this.gridData[this.cursorY][this.cursorX] = valA;\n\n this.grabbedX = this.cursorX;\n this.grabbedY = this.cursorY;\n }\n }\n\n this.render(false);\n }\n}\n"],"names":["SortGridPrompt","Prompt","calculateLayout","rows","gridData","length","cols","reduce","max","row","Math","columnWidths","Array","fill","r","c","cell","stringWidth","render","_firstRender","output","theme","title","options","message","ANSI","RESET","forEach","rowStr","map","width","content","padding","leftPad","floor","rightPad","cellStr","repeat","isFocused","cursorY","cursorX","isGrabbed","grabbedY","grabbedX","BG_RED","FG_WHITE","REVERSE","join","muted","renderFrame","handleInput","char","_key","submit","isUp","isDown","isLeft","isRight","isTab","isShiftTab","move","handleMouse","event","scroll","direction","oldX","oldY","min","rowLen","valA","valB","data"],"mappings":"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"}
@@ -1,166 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SortPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SortPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _symbols = require("../symbols");
15
- function _define_property(obj, key, value) {
16
- if (key in obj) {
17
- Object.defineProperty(obj, key, {
18
- value: value,
19
- enumerable: true,
20
- configurable: true,
21
- writable: true
22
- });
23
- } else {
24
- obj[key] = value;
25
- }
26
- return obj;
27
- }
28
- let SortPrompt = class SortPrompt extends _base.Prompt {
29
- render(_firstRender) {
30
- // Adjust Scroll Top
31
- if (this.selectedIndex < this.scrollTop) {
32
- this.scrollTop = this.selectedIndex;
33
- } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
34
- this.scrollTop = this.selectedIndex - this.pageSize + 1;
35
- }
36
- // Ensure valid scroll (handle list shrinking?) - list doesn't shrink here but good practice
37
- this.scrollTop = Math.max(0, Math.min(this.scrollTop, this.items.length - this.pageSize));
38
- if (this.scrollTop < 0) this.scrollTop = 0;
39
- let output = '';
40
- // Header
41
- output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(Press <space> to grab, arrows to move, <enter> to confirm)${_ansi.ANSI.RESET}\n`;
42
- const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);
43
- visibleItems.forEach((item, index)=>{
44
- const actualIndex = this.scrollTop + index;
45
- if (index > 0) output += '\n';
46
- const isSelected = actualIndex === this.selectedIndex;
47
- const isGrabbed = actualIndex === this.grabbedIndex;
48
- // Pointer
49
- let prefix = ' ';
50
- if (isSelected) {
51
- if (isGrabbed) {
52
- prefix = `${_theme.theme.main}${_symbols.symbols.pointer}${_symbols.symbols.pointer} `; // Double pointer for grabbed?
53
- } else {
54
- prefix = `${_theme.theme.main}${_symbols.symbols.pointer} `;
55
- }
56
- } else if (isGrabbed) {
57
- // Should not happen if we move grabbed item with cursor
58
- // But if logic differs, maybe.
59
- }
60
- // Item Content
61
- let content = item;
62
- if (isGrabbed) {
63
- content = `${_ansi.ANSI.BOLD}${_theme.theme.main}${content}${_ansi.ANSI.RESET}`;
64
- } else if (isSelected) {
65
- content = `${_theme.theme.main}${content}${_ansi.ANSI.RESET}`;
66
- }
67
- output += `${prefix}${content}`;
68
- });
69
- this.renderFrame(output);
70
- }
71
- handleInput(char) {
72
- // Enter
73
- if (char === '\r' || char === '\n') {
74
- this.submit(this.items);
75
- return;
76
- }
77
- // Space (Grab/Drop)
78
- if (char === ' ') {
79
- if (this.grabbedIndex === null) {
80
- this.grabbedIndex = this.selectedIndex;
81
- } else {
82
- this.grabbedIndex = null;
83
- }
84
- this.render(false);
85
- return;
86
- }
87
- // Up
88
- if (this.isUp(char)) {
89
- if (this.grabbedIndex !== null) {
90
- // Move item up
91
- if (this.selectedIndex > 0) {
92
- const newIndex = this.selectedIndex - 1;
93
- this.swap(this.selectedIndex, newIndex);
94
- this.selectedIndex = newIndex;
95
- this.grabbedIndex = newIndex;
96
- }
97
- } else {
98
- // Move cursor up
99
- this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;
100
- }
101
- this.render(false);
102
- return;
103
- }
104
- // Down
105
- if (this.isDown(char)) {
106
- if (this.grabbedIndex !== null) {
107
- // Move item down
108
- if (this.selectedIndex < this.items.length - 1) {
109
- const newIndex = this.selectedIndex + 1;
110
- this.swap(this.selectedIndex, newIndex);
111
- this.selectedIndex = newIndex;
112
- this.grabbedIndex = newIndex;
113
- }
114
- } else {
115
- // Move cursor down
116
- this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;
117
- }
118
- this.render(false);
119
- return;
120
- }
121
- }
122
- swap(i, j) {
123
- [this.items[i], this.items[j]] = [
124
- this.items[j],
125
- this.items[i]
126
- ];
127
- }
128
- handleMouse(event) {
129
- // Simple scroll support for navigation
130
- if (event.action === 'scroll') {
131
- if (event.scroll === 'up') {
132
- if (this.grabbedIndex !== null) {
133
- if (this.selectedIndex > 0) {
134
- const newIndex = this.selectedIndex - 1;
135
- this.swap(this.selectedIndex, newIndex);
136
- this.selectedIndex = newIndex;
137
- this.grabbedIndex = newIndex;
138
- }
139
- } else {
140
- this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;
141
- }
142
- this.render(false);
143
- } else if (event.scroll === 'down') {
144
- if (this.grabbedIndex !== null) {
145
- if (this.selectedIndex < this.items.length - 1) {
146
- const newIndex = this.selectedIndex + 1;
147
- this.swap(this.selectedIndex, newIndex);
148
- this.selectedIndex = newIndex;
149
- this.grabbedIndex = newIndex;
150
- }
151
- } else {
152
- this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;
153
- }
154
- this.render(false);
155
- }
156
- }
157
- }
158
- constructor(options){
159
- super(options), _define_property(this, "items", void 0), _define_property(this, "selectedIndex", 0), _define_property(this, "grabbedIndex", null), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 10);
160
- this.items = [
161
- ...options.items
162
- ];
163
- }
164
- };
165
-
166
- //# sourceMappingURL=sort.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/sort.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SortOptions, MouseEvent } from '../types';\n\nexport class SortPrompt extends Prompt<string[], SortOptions> {\n private items: string[];\n private selectedIndex: number = 0;\n private grabbedIndex: number | null = null;\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n constructor(options: SortOptions) {\n super(options);\n this.items = [...options.items];\n }\n\n protected render(_firstRender: boolean) {\n // Adjust Scroll Top\n if (this.selectedIndex < this.scrollTop) {\n this.scrollTop = this.selectedIndex;\n } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.selectedIndex - this.pageSize + 1;\n }\n\n // Ensure valid scroll (handle list shrinking?) - list doesn't shrink here but good practice\n this.scrollTop = Math.max(0, Math.min(this.scrollTop, this.items.length - this.pageSize));\n if (this.scrollTop < 0) this.scrollTop = 0;\n\n let output = '';\n\n // Header\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(Press <space> to grab, arrows to move, <enter> to confirm)${ANSI.RESET}\\n`;\n\n const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleItems.forEach((item, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n const isSelected = actualIndex === this.selectedIndex;\n const isGrabbed = actualIndex === this.grabbedIndex;\n\n // Pointer\n let prefix = ' ';\n if (isSelected) {\n if (isGrabbed) {\n prefix = `${theme.main}${symbols.pointer}${symbols.pointer} `; // Double pointer for grabbed?\n } else {\n prefix = `${theme.main}${symbols.pointer} `;\n }\n } else if (isGrabbed) {\n // Should not happen if we move grabbed item with cursor\n // But if logic differs, maybe.\n }\n\n // Item Content\n let content = item;\n if (isGrabbed) {\n content = `${ANSI.BOLD}${theme.main}${content}${ANSI.RESET}`;\n } else if (isSelected) {\n content = `${theme.main}${content}${ANSI.RESET}`;\n }\n\n output += `${prefix}${content}`;\n });\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n // Enter\n if (char === '\\r' || char === '\\n') {\n this.submit(this.items);\n return;\n }\n\n // Space (Grab/Drop)\n if (char === ' ') {\n if (this.grabbedIndex === null) {\n this.grabbedIndex = this.selectedIndex;\n } else {\n this.grabbedIndex = null;\n }\n this.render(false);\n return;\n }\n\n // Up\n if (this.isUp(char)) {\n if (this.grabbedIndex !== null) {\n // Move item up\n if (this.selectedIndex > 0) {\n const newIndex = this.selectedIndex - 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n // Move cursor up\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;\n }\n this.render(false);\n return;\n }\n\n // Down\n if (this.isDown(char)) {\n if (this.grabbedIndex !== null) {\n // Move item down\n if (this.selectedIndex < this.items.length - 1) {\n const newIndex = this.selectedIndex + 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n // Move cursor down\n this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;\n }\n this.render(false);\n return;\n }\n }\n\n private swap(i: number, j: number) {\n [this.items[i], this.items[j]] = [this.items[j], this.items[i]];\n }\n\n protected handleMouse(event: MouseEvent) {\n // Simple scroll support for navigation\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.grabbedIndex !== null) {\n if (this.selectedIndex > 0) {\n const newIndex = this.selectedIndex - 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;\n }\n this.render(false);\n } else if (event.scroll === 'down') {\n if (this.grabbedIndex !== null) {\n if (this.selectedIndex < this.items.length - 1) {\n const newIndex = this.selectedIndex + 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;\n }\n this.render(false);\n }\n }\n }\n}\n"],"names":["SortPrompt","Prompt","render","_firstRender","selectedIndex","scrollTop","pageSize","Math","max","min","items","length","output","theme","success","ANSI","RESET","BOLD","title","options","message","muted","visibleItems","slice","forEach","item","index","actualIndex","isSelected","isGrabbed","grabbedIndex","prefix","main","symbols","pointer","content","renderFrame","handleInput","char","submit","isUp","newIndex","swap","isDown","i","j","handleMouse","event","action","scroll"],"mappings":"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"}