mepcli 2.0.0-beta.2 → 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 (356) hide show
  1. package/dist/ansi.d.ts +36 -0
  2. package/dist/ansi.js +1 -0
  3. package/dist/base.d.ts +60 -0
  4. package/dist/base.js +1 -0
  5. package/dist/{src/core.js → core.d.ts} +175 -345
  6. package/dist/core.js +1 -0
  7. package/dist/data/countries.d.ts +2 -0
  8. package/dist/data/countries.js +1 -0
  9. package/dist/data/licenses.d.ts +2 -0
  10. package/dist/data/licenses.js +1 -0
  11. package/dist/highlight.d.ts +7 -0
  12. package/dist/highlight.js +1 -0
  13. package/dist/index.d.ts +48 -0
  14. package/dist/index.js +1 -0
  15. package/dist/input.d.ts +14 -0
  16. package/dist/input.js +1 -0
  17. package/dist/pipeline.d.ts +90 -0
  18. package/dist/pipeline.js +1 -0
  19. package/dist/prompts/autocomplete.d.ts +22 -0
  20. package/dist/prompts/autocomplete.js +1 -0
  21. package/dist/prompts/box.d.ts +21 -0
  22. package/dist/prompts/box.js +4 -0
  23. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  24. package/dist/prompts/breadcrumb-search.js +2 -0
  25. package/dist/prompts/breadcrumb.d.ts +32 -0
  26. package/dist/prompts/breadcrumb.js +3 -0
  27. package/dist/prompts/byte.d.ts +13 -0
  28. package/dist/prompts/byte.js +5 -0
  29. package/dist/prompts/calculator.d.ts +17 -0
  30. package/dist/prompts/calculator.js +3 -0
  31. package/dist/prompts/calendar.d.ts +33 -0
  32. package/dist/prompts/calendar.js +3 -0
  33. package/dist/prompts/checkbox.d.ts +13 -0
  34. package/dist/prompts/checkbox.js +2 -0
  35. package/dist/prompts/code.d.ts +19 -0
  36. package/dist/prompts/code.js +4 -0
  37. package/dist/prompts/color.d.ts +14 -0
  38. package/dist/prompts/color.js +10 -0
  39. package/dist/prompts/confirm.d.ts +8 -0
  40. package/dist/prompts/confirm.js +1 -0
  41. package/dist/prompts/connection-string.d.ts +18 -0
  42. package/dist/prompts/connection-string.js +1 -0
  43. package/dist/prompts/cron.d.ts +13 -0
  44. package/dist/prompts/cron.js +4 -0
  45. package/dist/prompts/curl-utils.d.ts +25 -0
  46. package/dist/prompts/curl-utils.js +1 -0
  47. package/dist/prompts/curl.d.ts +41 -0
  48. package/dist/prompts/curl.js +12 -0
  49. package/dist/prompts/data-inspector.d.ts +22 -0
  50. package/dist/prompts/data-inspector.js +5 -0
  51. package/dist/prompts/date.d.ts +12 -0
  52. package/dist/prompts/date.js +2 -0
  53. package/dist/prompts/dependency.d.ts +16 -0
  54. package/dist/prompts/dependency.js +3 -0
  55. package/dist/prompts/dial.d.ts +10 -0
  56. package/dist/prompts/dial.js +3 -0
  57. package/dist/prompts/diff.d.ts +10 -0
  58. package/dist/prompts/diff.js +10 -0
  59. package/dist/prompts/draw.d.ts +20 -0
  60. package/dist/prompts/draw.js +6 -0
  61. package/dist/prompts/editor.d.ts +14 -0
  62. package/dist/prompts/editor.js +2 -0
  63. package/dist/prompts/emoji.d.ts +18 -0
  64. package/dist/prompts/emoji.js +5 -0
  65. package/dist/prompts/exec.d.ts +17 -0
  66. package/dist/prompts/exec.js +1 -0
  67. package/dist/prompts/file.d.ts +21 -0
  68. package/dist/prompts/file.js +2 -0
  69. package/dist/prompts/form.d.ts +18 -0
  70. package/dist/prompts/form.js +1 -0
  71. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  72. package/dist/prompts/fuzzy-multi-column.js +2 -0
  73. package/dist/prompts/fuzzy.d.ts +12 -0
  74. package/dist/prompts/fuzzy.js +2 -0
  75. package/dist/prompts/gauge.d.ts +21 -0
  76. package/dist/prompts/gauge.js +4 -0
  77. package/dist/prompts/grid.d.ts +14 -0
  78. package/dist/prompts/grid.js +2 -0
  79. package/dist/prompts/heatmap.d.ts +13 -0
  80. package/dist/prompts/heatmap.js +2 -0
  81. package/dist/prompts/ip.d.ts +11 -0
  82. package/dist/prompts/ip.js +3 -0
  83. package/dist/prompts/kanban.d.ts +17 -0
  84. package/dist/prompts/kanban.js +4 -0
  85. package/dist/prompts/keypress.d.ts +7 -0
  86. package/dist/prompts/keypress.js +1 -0
  87. package/dist/prompts/license.d.ts +9 -0
  88. package/dist/prompts/license.js +13 -0
  89. package/dist/prompts/list.d.ts +9 -0
  90. package/dist/prompts/list.js +1 -0
  91. package/dist/prompts/map.d.ts +17 -0
  92. package/dist/prompts/map.js +5 -0
  93. package/dist/prompts/match.d.ts +19 -0
  94. package/dist/prompts/match.js +7 -0
  95. package/dist/prompts/miller.d.ts +15 -0
  96. package/dist/prompts/miller.js +2 -0
  97. package/dist/prompts/multi-column-select.d.ts +10 -0
  98. package/dist/prompts/multi-column-select.js +2 -0
  99. package/dist/prompts/multi-range.d.ts +9 -0
  100. package/dist/prompts/multi-range.js +3 -0
  101. package/dist/prompts/multi-select.d.ts +15 -0
  102. package/dist/prompts/multi-select.js +4 -0
  103. package/dist/prompts/number.d.ts +11 -0
  104. package/dist/prompts/number.js +2 -0
  105. package/dist/prompts/otp.d.ts +10 -0
  106. package/dist/prompts/otp.js +2 -0
  107. package/dist/prompts/pattern.d.ts +22 -0
  108. package/dist/prompts/pattern.js +4 -0
  109. package/dist/prompts/phone.d.ts +41 -0
  110. package/dist/prompts/phone.js +3 -0
  111. package/dist/prompts/quiz-select.d.ts +10 -0
  112. package/dist/prompts/quiz-select.js +7 -0
  113. package/dist/prompts/quiz-text.d.ts +11 -0
  114. package/dist/prompts/quiz-text.js +8 -0
  115. package/dist/prompts/range.d.ts +9 -0
  116. package/dist/prompts/range.js +1 -0
  117. package/dist/prompts/rating.d.ts +8 -0
  118. package/dist/prompts/rating.js +1 -0
  119. package/dist/prompts/regex.d.ts +13 -0
  120. package/dist/prompts/regex.js +5 -0
  121. package/dist/prompts/region.d.ts +11 -0
  122. package/dist/prompts/region.js +5 -0
  123. package/dist/prompts/schedule.d.ts +20 -0
  124. package/dist/prompts/schedule.js +5 -0
  125. package/dist/prompts/scroll.d.ts +13 -0
  126. package/dist/prompts/scroll.js +1 -0
  127. package/dist/prompts/seat.d.ts +17 -0
  128. package/dist/prompts/seat.js +5 -0
  129. package/dist/prompts/select-range.d.ts +8 -0
  130. package/dist/prompts/select-range.js +3 -0
  131. package/dist/prompts/select.d.ts +15 -0
  132. package/dist/prompts/select.js +2 -0
  133. package/dist/prompts/semver.d.ts +6 -0
  134. package/dist/prompts/semver.js +1 -0
  135. package/dist/prompts/shortcut.d.ts +9 -0
  136. package/dist/prompts/shortcut.js +1 -0
  137. package/dist/prompts/slider.d.ts +8 -0
  138. package/dist/prompts/slider.js +1 -0
  139. package/dist/prompts/slot.d.ts +16 -0
  140. package/dist/prompts/slot.js +8 -0
  141. package/dist/prompts/snippet.d.ts +19 -0
  142. package/dist/prompts/snippet.js +4 -0
  143. package/dist/prompts/sort-grid.d.ts +16 -0
  144. package/dist/prompts/sort-grid.js +2 -0
  145. package/dist/prompts/sort.d.ts +14 -0
  146. package/dist/prompts/sort.js +2 -0
  147. package/dist/prompts/spam.d.ts +17 -0
  148. package/dist/prompts/spam.js +2 -0
  149. package/dist/prompts/spreadsheet.d.ts +21 -0
  150. package/dist/prompts/spreadsheet.js +7 -0
  151. package/dist/prompts/table.d.ts +14 -0
  152. package/dist/prompts/table.js +3 -0
  153. package/dist/prompts/text.d.ts +17 -0
  154. package/dist/prompts/text.js +2 -0
  155. package/dist/prompts/time.d.ts +12 -0
  156. package/dist/prompts/time.js +2 -0
  157. package/dist/prompts/toggle.d.ts +8 -0
  158. package/dist/prompts/toggle.js +1 -0
  159. package/dist/prompts/transfer.d.ts +18 -0
  160. package/dist/prompts/transfer.js +5 -0
  161. package/dist/prompts/tree-select.d.ts +31 -0
  162. package/dist/prompts/tree-select.js +3 -0
  163. package/dist/prompts/tree.d.ts +20 -0
  164. package/dist/prompts/tree.js +3 -0
  165. package/dist/prompts/wait.d.ts +18 -0
  166. package/dist/prompts/wait.js +1 -0
  167. package/dist/spinner.d.ts +33 -0
  168. package/dist/spinner.js +3 -0
  169. package/dist/symbols.d.ts +33 -0
  170. package/dist/symbols.js +1 -0
  171. package/dist/tasks.d.ts +57 -0
  172. package/dist/tasks.js +1 -0
  173. package/dist/theme.d.ts +2 -0
  174. package/dist/theme.js +1 -0
  175. package/dist/types.d.ts +503 -0
  176. package/dist/types.js +1 -0
  177. package/dist/utils.d.ts +81 -0
  178. package/dist/utils.js +1 -0
  179. package/package.json +8 -9
  180. package/dist/src/ansi.js +0 -50
  181. package/dist/src/ansi.js.map +0 -1
  182. package/dist/src/base.js +0 -258
  183. package/dist/src/base.js.map +0 -1
  184. package/dist/src/core.js.map +0 -1
  185. package/dist/src/data/countries.js +0 -569
  186. package/dist/src/data/countries.js.map +0 -1
  187. package/dist/src/data/licenses.js +0 -480
  188. package/dist/src/data/licenses.js.map +0 -1
  189. package/dist/src/highlight.js +0 -185
  190. package/dist/src/highlight.js.map +0 -1
  191. package/dist/src/index.js +0 -66
  192. package/dist/src/index.js.map +0 -1
  193. package/dist/src/input.js +0 -158
  194. package/dist/src/input.js.map +0 -1
  195. package/dist/src/pipeline.js +0 -273
  196. package/dist/src/pipeline.js.map +0 -1
  197. package/dist/src/prompts/autocomplete.js +0 -171
  198. package/dist/src/prompts/autocomplete.js.map +0 -1
  199. package/dist/src/prompts/box.js +0 -225
  200. package/dist/src/prompts/box.js.map +0 -1
  201. package/dist/src/prompts/breadcrumb-search.js +0 -260
  202. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  203. package/dist/src/prompts/breadcrumb.js +0 -307
  204. package/dist/src/prompts/breadcrumb.js.map +0 -1
  205. package/dist/src/prompts/byte.js +0 -176
  206. package/dist/src/prompts/byte.js.map +0 -1
  207. package/dist/src/prompts/calculator.js +0 -243
  208. package/dist/src/prompts/calculator.js.map +0 -1
  209. package/dist/src/prompts/calendar.js +0 -430
  210. package/dist/src/prompts/calendar.js.map +0 -1
  211. package/dist/src/prompts/checkbox.js +0 -159
  212. package/dist/src/prompts/checkbox.js.map +0 -1
  213. package/dist/src/prompts/code.js +0 -271
  214. package/dist/src/prompts/code.js.map +0 -1
  215. package/dist/src/prompts/color.js +0 -165
  216. package/dist/src/prompts/color.js.map +0 -1
  217. package/dist/src/prompts/confirm.js +0 -55
  218. package/dist/src/prompts/confirm.js.map +0 -1
  219. package/dist/src/prompts/connection-string.js +0 -120
  220. package/dist/src/prompts/connection-string.js.map +0 -1
  221. package/dist/src/prompts/cron.js +0 -207
  222. package/dist/src/prompts/cron.js.map +0 -1
  223. package/dist/src/prompts/curl-utils.js +0 -71
  224. package/dist/src/prompts/curl-utils.js.map +0 -1
  225. package/dist/src/prompts/curl.js +0 -431
  226. package/dist/src/prompts/curl.js.map +0 -1
  227. package/dist/src/prompts/data-inspector.js +0 -261
  228. package/dist/src/prompts/data-inspector.js.map +0 -1
  229. package/dist/src/prompts/date.js +0 -185
  230. package/dist/src/prompts/date.js.map +0 -1
  231. package/dist/src/prompts/dependency.js +0 -283
  232. package/dist/src/prompts/dependency.js.map +0 -1
  233. package/dist/src/prompts/dial.js +0 -124
  234. package/dist/src/prompts/dial.js.map +0 -1
  235. package/dist/src/prompts/diff.js +0 -118
  236. package/dist/src/prompts/diff.js.map +0 -1
  237. package/dist/src/prompts/draw.js +0 -191
  238. package/dist/src/prompts/draw.js.map +0 -1
  239. package/dist/src/prompts/editor.js +0 -234
  240. package/dist/src/prompts/editor.js.map +0 -1
  241. package/dist/src/prompts/emoji.js +0 -226
  242. package/dist/src/prompts/emoji.js.map +0 -1
  243. package/dist/src/prompts/exec.js +0 -151
  244. package/dist/src/prompts/exec.js.map +0 -1
  245. package/dist/src/prompts/file.js +0 -217
  246. package/dist/src/prompts/file.js.map +0 -1
  247. package/dist/src/prompts/form.js +0 -241
  248. package/dist/src/prompts/form.js.map +0 -1
  249. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  250. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  251. package/dist/src/prompts/fuzzy.js +0 -147
  252. package/dist/src/prompts/fuzzy.js.map +0 -1
  253. package/dist/src/prompts/gauge.js +0 -137
  254. package/dist/src/prompts/gauge.js.map +0 -1
  255. package/dist/src/prompts/grid.js +0 -191
  256. package/dist/src/prompts/grid.js.map +0 -1
  257. package/dist/src/prompts/heatmap.js +0 -147
  258. package/dist/src/prompts/heatmap.js.map +0 -1
  259. package/dist/src/prompts/ip.js +0 -138
  260. package/dist/src/prompts/ip.js.map +0 -1
  261. package/dist/src/prompts/kanban.js +0 -233
  262. package/dist/src/prompts/kanban.js.map +0 -1
  263. package/dist/src/prompts/keypress.js +0 -54
  264. package/dist/src/prompts/keypress.js.map +0 -1
  265. package/dist/src/prompts/license.js +0 -144
  266. package/dist/src/prompts/license.js.map +0 -1
  267. package/dist/src/prompts/list.js +0 -124
  268. package/dist/src/prompts/list.js.map +0 -1
  269. package/dist/src/prompts/map.js +0 -262
  270. package/dist/src/prompts/map.js.map +0 -1
  271. package/dist/src/prompts/match.js +0 -271
  272. package/dist/src/prompts/match.js.map +0 -1
  273. package/dist/src/prompts/miller.js +0 -228
  274. package/dist/src/prompts/miller.js.map +0 -1
  275. package/dist/src/prompts/multi-column-select.js +0 -176
  276. package/dist/src/prompts/multi-column-select.js.map +0 -1
  277. package/dist/src/prompts/multi-range.js +0 -189
  278. package/dist/src/prompts/multi-range.js.map +0 -1
  279. package/dist/src/prompts/multi-select.js +0 -183
  280. package/dist/src/prompts/multi-select.js.map +0 -1
  281. package/dist/src/prompts/number.js +0 -166
  282. package/dist/src/prompts/number.js.map +0 -1
  283. package/dist/src/prompts/otp.js +0 -107
  284. package/dist/src/prompts/otp.js.map +0 -1
  285. package/dist/src/prompts/pattern.js +0 -252
  286. package/dist/src/prompts/pattern.js.map +0 -1
  287. package/dist/src/prompts/phone.js +0 -398
  288. package/dist/src/prompts/phone.js.map +0 -1
  289. package/dist/src/prompts/quiz-select.js +0 -114
  290. package/dist/src/prompts/quiz-select.js.map +0 -1
  291. package/dist/src/prompts/quiz-text.js +0 -98
  292. package/dist/src/prompts/quiz-text.js.map +0 -1
  293. package/dist/src/prompts/range.js +0 -164
  294. package/dist/src/prompts/range.js.map +0 -1
  295. package/dist/src/prompts/rating.js +0 -83
  296. package/dist/src/prompts/rating.js.map +0 -1
  297. package/dist/src/prompts/regex.js +0 -145
  298. package/dist/src/prompts/regex.js.map +0 -1
  299. package/dist/src/prompts/region.js +0 -170
  300. package/dist/src/prompts/region.js.map +0 -1
  301. package/dist/src/prompts/schedule.js +0 -270
  302. package/dist/src/prompts/schedule.js.map +0 -1
  303. package/dist/src/prompts/scroll.js +0 -155
  304. package/dist/src/prompts/scroll.js.map +0 -1
  305. package/dist/src/prompts/seat.js +0 -164
  306. package/dist/src/prompts/seat.js.map +0 -1
  307. package/dist/src/prompts/select-range.js +0 -148
  308. package/dist/src/prompts/select-range.js.map +0 -1
  309. package/dist/src/prompts/select.js +0 -163
  310. package/dist/src/prompts/select.js.map +0 -1
  311. package/dist/src/prompts/semver.js +0 -43
  312. package/dist/src/prompts/semver.js.map +0 -1
  313. package/dist/src/prompts/shortcut.js +0 -133
  314. package/dist/src/prompts/shortcut.js.map +0 -1
  315. package/dist/src/prompts/slider.js +0 -69
  316. package/dist/src/prompts/slider.js.map +0 -1
  317. package/dist/src/prompts/slot.js +0 -117
  318. package/dist/src/prompts/slot.js.map +0 -1
  319. package/dist/src/prompts/snippet.js +0 -228
  320. package/dist/src/prompts/snippet.js.map +0 -1
  321. package/dist/src/prompts/sort-grid.js +0 -151
  322. package/dist/src/prompts/sort-grid.js.map +0 -1
  323. package/dist/src/prompts/sort.js +0 -166
  324. package/dist/src/prompts/sort.js.map +0 -1
  325. package/dist/src/prompts/spam.js +0 -80
  326. package/dist/src/prompts/spam.js.map +0 -1
  327. package/dist/src/prompts/spreadsheet.js +0 -240
  328. package/dist/src/prompts/spreadsheet.js.map +0 -1
  329. package/dist/src/prompts/table.js +0 -120
  330. package/dist/src/prompts/table.js.map +0 -1
  331. package/dist/src/prompts/text.js +0 -317
  332. package/dist/src/prompts/text.js.map +0 -1
  333. package/dist/src/prompts/time.js +0 -211
  334. package/dist/src/prompts/time.js.map +0 -1
  335. package/dist/src/prompts/toggle.js +0 -53
  336. package/dist/src/prompts/toggle.js.map +0 -1
  337. package/dist/src/prompts/transfer.js +0 -207
  338. package/dist/src/prompts/transfer.js.map +0 -1
  339. package/dist/src/prompts/tree-select.js +0 -270
  340. package/dist/src/prompts/tree-select.js.map +0 -1
  341. package/dist/src/prompts/tree.js +0 -233
  342. package/dist/src/prompts/tree.js.map +0 -1
  343. package/dist/src/prompts/wait.js +0 -79
  344. package/dist/src/prompts/wait.js.map +0 -1
  345. package/dist/src/spinner.js +0 -105
  346. package/dist/src/spinner.js.map +0 -1
  347. package/dist/src/symbols.js +0 -66
  348. package/dist/src/symbols.js.map +0 -1
  349. package/dist/src/tasks.js +0 -231
  350. package/dist/src/tasks.js.map +0 -1
  351. package/dist/src/theme.js +0 -29
  352. package/dist/src/theme.js.map +0 -1
  353. package/dist/src/types.js +0 -8
  354. package/dist/src/types.js.map +0 -1
  355. package/dist/src/utils.js +0 -480
  356. 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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"}