mepcli 2.0.0-beta.2 → 2.0.0-beta.4

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 (358) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +20 -0
  3. package/dist/ansi.d.ts +36 -0
  4. package/dist/ansi.js +1 -0
  5. package/dist/base.d.ts +61 -0
  6. package/dist/base.js +1 -0
  7. package/dist/{src/core.js → core.d.ts} +181 -345
  8. package/dist/core.js +1 -0
  9. package/dist/data/countries.d.ts +2 -0
  10. package/dist/data/countries.js +1 -0
  11. package/dist/data/licenses.d.ts +2 -0
  12. package/dist/data/licenses.js +1 -0
  13. package/dist/highlight.d.ts +7 -0
  14. package/dist/highlight.js +1 -0
  15. package/dist/index.d.ts +52 -0
  16. package/dist/index.js +1 -0
  17. package/dist/input.d.ts +14 -0
  18. package/dist/input.js +1 -0
  19. package/dist/pipeline.d.ts +90 -0
  20. package/dist/pipeline.js +1 -0
  21. package/dist/prompts/autocomplete.d.ts +22 -0
  22. package/dist/prompts/autocomplete.js +1 -0
  23. package/dist/prompts/box.d.ts +21 -0
  24. package/dist/prompts/box.js +4 -0
  25. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  26. package/dist/prompts/breadcrumb-search.js +2 -0
  27. package/dist/prompts/breadcrumb.d.ts +32 -0
  28. package/dist/prompts/breadcrumb.js +3 -0
  29. package/dist/prompts/byte.d.ts +13 -0
  30. package/dist/prompts/byte.js +5 -0
  31. package/dist/prompts/calculator.d.ts +17 -0
  32. package/dist/prompts/calculator.js +3 -0
  33. package/dist/prompts/calendar.d.ts +33 -0
  34. package/dist/prompts/calendar.js +3 -0
  35. package/dist/prompts/checkbox.d.ts +13 -0
  36. package/dist/prompts/checkbox.js +2 -0
  37. package/dist/prompts/code.d.ts +19 -0
  38. package/dist/prompts/code.js +4 -0
  39. package/dist/prompts/color.d.ts +14 -0
  40. package/dist/prompts/color.js +10 -0
  41. package/dist/prompts/confirm.d.ts +8 -0
  42. package/dist/prompts/confirm.js +1 -0
  43. package/dist/prompts/connection-string.d.ts +18 -0
  44. package/dist/prompts/connection-string.js +1 -0
  45. package/dist/prompts/cron.d.ts +13 -0
  46. package/dist/prompts/cron.js +4 -0
  47. package/dist/prompts/curl-utils.d.ts +25 -0
  48. package/dist/prompts/curl-utils.js +1 -0
  49. package/dist/prompts/curl.d.ts +41 -0
  50. package/dist/prompts/curl.js +12 -0
  51. package/dist/prompts/data-inspector.d.ts +22 -0
  52. package/dist/prompts/data-inspector.js +5 -0
  53. package/dist/prompts/date.d.ts +12 -0
  54. package/dist/prompts/date.js +2 -0
  55. package/dist/prompts/dependency.d.ts +16 -0
  56. package/dist/prompts/dependency.js +3 -0
  57. package/dist/prompts/dial.d.ts +10 -0
  58. package/dist/prompts/dial.js +3 -0
  59. package/dist/prompts/diff.d.ts +10 -0
  60. package/dist/prompts/diff.js +10 -0
  61. package/dist/prompts/draw.d.ts +20 -0
  62. package/dist/prompts/draw.js +6 -0
  63. package/dist/prompts/editor.d.ts +14 -0
  64. package/dist/prompts/editor.js +2 -0
  65. package/dist/prompts/emoji.d.ts +18 -0
  66. package/dist/prompts/emoji.js +5 -0
  67. package/dist/prompts/exec.d.ts +17 -0
  68. package/dist/prompts/exec.js +1 -0
  69. package/dist/prompts/file.d.ts +21 -0
  70. package/dist/prompts/file.js +2 -0
  71. package/dist/prompts/form.d.ts +18 -0
  72. package/dist/prompts/form.js +1 -0
  73. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  74. package/dist/prompts/fuzzy-multi-column.js +2 -0
  75. package/dist/prompts/fuzzy.d.ts +12 -0
  76. package/dist/prompts/fuzzy.js +2 -0
  77. package/dist/prompts/gauge.d.ts +21 -0
  78. package/dist/prompts/gauge.js +4 -0
  79. package/dist/prompts/grid.d.ts +14 -0
  80. package/dist/prompts/grid.js +2 -0
  81. package/dist/prompts/heatmap.d.ts +13 -0
  82. package/dist/prompts/heatmap.js +2 -0
  83. package/dist/prompts/ip.d.ts +11 -0
  84. package/dist/prompts/ip.js +3 -0
  85. package/dist/prompts/kanban.d.ts +17 -0
  86. package/dist/prompts/kanban.js +4 -0
  87. package/dist/prompts/keypress.d.ts +7 -0
  88. package/dist/prompts/keypress.js +1 -0
  89. package/dist/prompts/license.d.ts +9 -0
  90. package/dist/prompts/license.js +13 -0
  91. package/dist/prompts/list.d.ts +9 -0
  92. package/dist/prompts/list.js +1 -0
  93. package/dist/prompts/map.d.ts +17 -0
  94. package/dist/prompts/map.js +5 -0
  95. package/dist/prompts/match.d.ts +19 -0
  96. package/dist/prompts/match.js +7 -0
  97. package/dist/prompts/miller.d.ts +15 -0
  98. package/dist/prompts/miller.js +2 -0
  99. package/dist/prompts/multi-column-select.d.ts +10 -0
  100. package/dist/prompts/multi-column-select.js +2 -0
  101. package/dist/prompts/multi-range.d.ts +9 -0
  102. package/dist/prompts/multi-range.js +3 -0
  103. package/dist/prompts/multi-select.d.ts +15 -0
  104. package/dist/prompts/multi-select.js +4 -0
  105. package/dist/prompts/number.d.ts +11 -0
  106. package/dist/prompts/number.js +2 -0
  107. package/dist/prompts/otp.d.ts +10 -0
  108. package/dist/prompts/otp.js +2 -0
  109. package/dist/prompts/pattern.d.ts +22 -0
  110. package/dist/prompts/pattern.js +4 -0
  111. package/dist/prompts/phone.d.ts +41 -0
  112. package/dist/prompts/phone.js +3 -0
  113. package/dist/prompts/quiz-select.d.ts +10 -0
  114. package/dist/prompts/quiz-select.js +7 -0
  115. package/dist/prompts/quiz-text.d.ts +11 -0
  116. package/dist/prompts/quiz-text.js +8 -0
  117. package/dist/prompts/range.d.ts +9 -0
  118. package/dist/prompts/range.js +1 -0
  119. package/dist/prompts/rating.d.ts +8 -0
  120. package/dist/prompts/rating.js +1 -0
  121. package/dist/prompts/regex.d.ts +13 -0
  122. package/dist/prompts/regex.js +5 -0
  123. package/dist/prompts/region.d.ts +11 -0
  124. package/dist/prompts/region.js +5 -0
  125. package/dist/prompts/schedule.d.ts +20 -0
  126. package/dist/prompts/schedule.js +5 -0
  127. package/dist/prompts/scroll.d.ts +13 -0
  128. package/dist/prompts/scroll.js +1 -0
  129. package/dist/prompts/seat.d.ts +17 -0
  130. package/dist/prompts/seat.js +5 -0
  131. package/dist/prompts/select-range.d.ts +8 -0
  132. package/dist/prompts/select-range.js +3 -0
  133. package/dist/prompts/select.d.ts +15 -0
  134. package/dist/prompts/select.js +2 -0
  135. package/dist/prompts/semver.d.ts +6 -0
  136. package/dist/prompts/semver.js +1 -0
  137. package/dist/prompts/shortcut.d.ts +9 -0
  138. package/dist/prompts/shortcut.js +1 -0
  139. package/dist/prompts/slider.d.ts +8 -0
  140. package/dist/prompts/slider.js +1 -0
  141. package/dist/prompts/slot.d.ts +16 -0
  142. package/dist/prompts/slot.js +8 -0
  143. package/dist/prompts/snippet.d.ts +19 -0
  144. package/dist/prompts/snippet.js +4 -0
  145. package/dist/prompts/sort-grid.d.ts +16 -0
  146. package/dist/prompts/sort-grid.js +2 -0
  147. package/dist/prompts/sort.d.ts +14 -0
  148. package/dist/prompts/sort.js +2 -0
  149. package/dist/prompts/spam.d.ts +17 -0
  150. package/dist/prompts/spam.js +2 -0
  151. package/dist/prompts/spreadsheet.d.ts +21 -0
  152. package/dist/prompts/spreadsheet.js +7 -0
  153. package/dist/prompts/table.d.ts +14 -0
  154. package/dist/prompts/table.js +3 -0
  155. package/dist/prompts/text.d.ts +17 -0
  156. package/dist/prompts/text.js +2 -0
  157. package/dist/prompts/time.d.ts +12 -0
  158. package/dist/prompts/time.js +2 -0
  159. package/dist/prompts/toggle.d.ts +8 -0
  160. package/dist/prompts/toggle.js +1 -0
  161. package/dist/prompts/transfer.d.ts +18 -0
  162. package/dist/prompts/transfer.js +5 -0
  163. package/dist/prompts/tree-select.d.ts +31 -0
  164. package/dist/prompts/tree-select.js +3 -0
  165. package/dist/prompts/tree.d.ts +20 -0
  166. package/dist/prompts/tree.js +3 -0
  167. package/dist/prompts/wait.d.ts +18 -0
  168. package/dist/prompts/wait.js +1 -0
  169. package/dist/spinner.d.ts +33 -0
  170. package/dist/spinner.js +3 -0
  171. package/dist/symbols.d.ts +33 -0
  172. package/dist/symbols.js +1 -0
  173. package/dist/tasks.d.ts +57 -0
  174. package/dist/tasks.js +1 -0
  175. package/dist/theme.d.ts +2 -0
  176. package/dist/theme.js +1 -0
  177. package/dist/types.d.ts +519 -0
  178. package/dist/types.js +1 -0
  179. package/dist/utils.d.ts +82 -0
  180. package/dist/utils.js +1 -0
  181. package/package.json +10 -10
  182. package/dist/src/ansi.js +0 -50
  183. package/dist/src/ansi.js.map +0 -1
  184. package/dist/src/base.js +0 -258
  185. package/dist/src/base.js.map +0 -1
  186. package/dist/src/core.js.map +0 -1
  187. package/dist/src/data/countries.js +0 -569
  188. package/dist/src/data/countries.js.map +0 -1
  189. package/dist/src/data/licenses.js +0 -480
  190. package/dist/src/data/licenses.js.map +0 -1
  191. package/dist/src/highlight.js +0 -185
  192. package/dist/src/highlight.js.map +0 -1
  193. package/dist/src/index.js +0 -66
  194. package/dist/src/index.js.map +0 -1
  195. package/dist/src/input.js +0 -158
  196. package/dist/src/input.js.map +0 -1
  197. package/dist/src/pipeline.js +0 -273
  198. package/dist/src/pipeline.js.map +0 -1
  199. package/dist/src/prompts/autocomplete.js +0 -171
  200. package/dist/src/prompts/autocomplete.js.map +0 -1
  201. package/dist/src/prompts/box.js +0 -225
  202. package/dist/src/prompts/box.js.map +0 -1
  203. package/dist/src/prompts/breadcrumb-search.js +0 -260
  204. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  205. package/dist/src/prompts/breadcrumb.js +0 -307
  206. package/dist/src/prompts/breadcrumb.js.map +0 -1
  207. package/dist/src/prompts/byte.js +0 -176
  208. package/dist/src/prompts/byte.js.map +0 -1
  209. package/dist/src/prompts/calculator.js +0 -243
  210. package/dist/src/prompts/calculator.js.map +0 -1
  211. package/dist/src/prompts/calendar.js +0 -430
  212. package/dist/src/prompts/calendar.js.map +0 -1
  213. package/dist/src/prompts/checkbox.js +0 -159
  214. package/dist/src/prompts/checkbox.js.map +0 -1
  215. package/dist/src/prompts/code.js +0 -271
  216. package/dist/src/prompts/code.js.map +0 -1
  217. package/dist/src/prompts/color.js +0 -165
  218. package/dist/src/prompts/color.js.map +0 -1
  219. package/dist/src/prompts/confirm.js +0 -55
  220. package/dist/src/prompts/confirm.js.map +0 -1
  221. package/dist/src/prompts/connection-string.js +0 -120
  222. package/dist/src/prompts/connection-string.js.map +0 -1
  223. package/dist/src/prompts/cron.js +0 -207
  224. package/dist/src/prompts/cron.js.map +0 -1
  225. package/dist/src/prompts/curl-utils.js +0 -71
  226. package/dist/src/prompts/curl-utils.js.map +0 -1
  227. package/dist/src/prompts/curl.js +0 -431
  228. package/dist/src/prompts/curl.js.map +0 -1
  229. package/dist/src/prompts/data-inspector.js +0 -261
  230. package/dist/src/prompts/data-inspector.js.map +0 -1
  231. package/dist/src/prompts/date.js +0 -185
  232. package/dist/src/prompts/date.js.map +0 -1
  233. package/dist/src/prompts/dependency.js +0 -283
  234. package/dist/src/prompts/dependency.js.map +0 -1
  235. package/dist/src/prompts/dial.js +0 -124
  236. package/dist/src/prompts/dial.js.map +0 -1
  237. package/dist/src/prompts/diff.js +0 -118
  238. package/dist/src/prompts/diff.js.map +0 -1
  239. package/dist/src/prompts/draw.js +0 -191
  240. package/dist/src/prompts/draw.js.map +0 -1
  241. package/dist/src/prompts/editor.js +0 -234
  242. package/dist/src/prompts/editor.js.map +0 -1
  243. package/dist/src/prompts/emoji.js +0 -226
  244. package/dist/src/prompts/emoji.js.map +0 -1
  245. package/dist/src/prompts/exec.js +0 -151
  246. package/dist/src/prompts/exec.js.map +0 -1
  247. package/dist/src/prompts/file.js +0 -217
  248. package/dist/src/prompts/file.js.map +0 -1
  249. package/dist/src/prompts/form.js +0 -241
  250. package/dist/src/prompts/form.js.map +0 -1
  251. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  252. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  253. package/dist/src/prompts/fuzzy.js +0 -147
  254. package/dist/src/prompts/fuzzy.js.map +0 -1
  255. package/dist/src/prompts/gauge.js +0 -137
  256. package/dist/src/prompts/gauge.js.map +0 -1
  257. package/dist/src/prompts/grid.js +0 -191
  258. package/dist/src/prompts/grid.js.map +0 -1
  259. package/dist/src/prompts/heatmap.js +0 -147
  260. package/dist/src/prompts/heatmap.js.map +0 -1
  261. package/dist/src/prompts/ip.js +0 -138
  262. package/dist/src/prompts/ip.js.map +0 -1
  263. package/dist/src/prompts/kanban.js +0 -233
  264. package/dist/src/prompts/kanban.js.map +0 -1
  265. package/dist/src/prompts/keypress.js +0 -54
  266. package/dist/src/prompts/keypress.js.map +0 -1
  267. package/dist/src/prompts/license.js +0 -144
  268. package/dist/src/prompts/license.js.map +0 -1
  269. package/dist/src/prompts/list.js +0 -124
  270. package/dist/src/prompts/list.js.map +0 -1
  271. package/dist/src/prompts/map.js +0 -262
  272. package/dist/src/prompts/map.js.map +0 -1
  273. package/dist/src/prompts/match.js +0 -271
  274. package/dist/src/prompts/match.js.map +0 -1
  275. package/dist/src/prompts/miller.js +0 -228
  276. package/dist/src/prompts/miller.js.map +0 -1
  277. package/dist/src/prompts/multi-column-select.js +0 -176
  278. package/dist/src/prompts/multi-column-select.js.map +0 -1
  279. package/dist/src/prompts/multi-range.js +0 -189
  280. package/dist/src/prompts/multi-range.js.map +0 -1
  281. package/dist/src/prompts/multi-select.js +0 -183
  282. package/dist/src/prompts/multi-select.js.map +0 -1
  283. package/dist/src/prompts/number.js +0 -166
  284. package/dist/src/prompts/number.js.map +0 -1
  285. package/dist/src/prompts/otp.js +0 -107
  286. package/dist/src/prompts/otp.js.map +0 -1
  287. package/dist/src/prompts/pattern.js +0 -252
  288. package/dist/src/prompts/pattern.js.map +0 -1
  289. package/dist/src/prompts/phone.js +0 -398
  290. package/dist/src/prompts/phone.js.map +0 -1
  291. package/dist/src/prompts/quiz-select.js +0 -114
  292. package/dist/src/prompts/quiz-select.js.map +0 -1
  293. package/dist/src/prompts/quiz-text.js +0 -98
  294. package/dist/src/prompts/quiz-text.js.map +0 -1
  295. package/dist/src/prompts/range.js +0 -164
  296. package/dist/src/prompts/range.js.map +0 -1
  297. package/dist/src/prompts/rating.js +0 -83
  298. package/dist/src/prompts/rating.js.map +0 -1
  299. package/dist/src/prompts/regex.js +0 -145
  300. package/dist/src/prompts/regex.js.map +0 -1
  301. package/dist/src/prompts/region.js +0 -170
  302. package/dist/src/prompts/region.js.map +0 -1
  303. package/dist/src/prompts/schedule.js +0 -270
  304. package/dist/src/prompts/schedule.js.map +0 -1
  305. package/dist/src/prompts/scroll.js +0 -155
  306. package/dist/src/prompts/scroll.js.map +0 -1
  307. package/dist/src/prompts/seat.js +0 -164
  308. package/dist/src/prompts/seat.js.map +0 -1
  309. package/dist/src/prompts/select-range.js +0 -148
  310. package/dist/src/prompts/select-range.js.map +0 -1
  311. package/dist/src/prompts/select.js +0 -163
  312. package/dist/src/prompts/select.js.map +0 -1
  313. package/dist/src/prompts/semver.js +0 -43
  314. package/dist/src/prompts/semver.js.map +0 -1
  315. package/dist/src/prompts/shortcut.js +0 -133
  316. package/dist/src/prompts/shortcut.js.map +0 -1
  317. package/dist/src/prompts/slider.js +0 -69
  318. package/dist/src/prompts/slider.js.map +0 -1
  319. package/dist/src/prompts/slot.js +0 -117
  320. package/dist/src/prompts/slot.js.map +0 -1
  321. package/dist/src/prompts/snippet.js +0 -228
  322. package/dist/src/prompts/snippet.js.map +0 -1
  323. package/dist/src/prompts/sort-grid.js +0 -151
  324. package/dist/src/prompts/sort-grid.js.map +0 -1
  325. package/dist/src/prompts/sort.js +0 -166
  326. package/dist/src/prompts/sort.js.map +0 -1
  327. package/dist/src/prompts/spam.js +0 -80
  328. package/dist/src/prompts/spam.js.map +0 -1
  329. package/dist/src/prompts/spreadsheet.js +0 -240
  330. package/dist/src/prompts/spreadsheet.js.map +0 -1
  331. package/dist/src/prompts/table.js +0 -120
  332. package/dist/src/prompts/table.js.map +0 -1
  333. package/dist/src/prompts/text.js +0 -317
  334. package/dist/src/prompts/text.js.map +0 -1
  335. package/dist/src/prompts/time.js +0 -211
  336. package/dist/src/prompts/time.js.map +0 -1
  337. package/dist/src/prompts/toggle.js +0 -53
  338. package/dist/src/prompts/toggle.js.map +0 -1
  339. package/dist/src/prompts/transfer.js +0 -207
  340. package/dist/src/prompts/transfer.js.map +0 -1
  341. package/dist/src/prompts/tree-select.js +0 -270
  342. package/dist/src/prompts/tree-select.js.map +0 -1
  343. package/dist/src/prompts/tree.js +0 -233
  344. package/dist/src/prompts/tree.js.map +0 -1
  345. package/dist/src/prompts/wait.js +0 -79
  346. package/dist/src/prompts/wait.js.map +0 -1
  347. package/dist/src/spinner.js +0 -105
  348. package/dist/src/spinner.js.map +0 -1
  349. package/dist/src/symbols.js +0 -66
  350. package/dist/src/symbols.js.map +0 -1
  351. package/dist/src/tasks.js +0 -231
  352. package/dist/src/tasks.js.map +0 -1
  353. package/dist/src/theme.js +0 -29
  354. package/dist/src/theme.js.map +0 -1
  355. package/dist/src/types.js +0 -8
  356. package/dist/src/types.js.map +0 -1
  357. package/dist/src/utils.js +0 -480
  358. package/dist/src/utils.js.map +0 -1
@@ -1,191 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "DrawPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return DrawPrompt;
9
- }
10
- });
11
- const _base = require("../base");
12
- const _theme = require("../theme");
13
- const _ansi = require("../ansi");
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 DrawPrompt = class DrawPrompt extends _base.Prompt {
28
- getBrailleChar(x, y) {
29
- const baseX = x * 2;
30
- const baseY = y * 4;
31
- let code = 0x2800; // Base Braille
32
- // Column 0
33
- if (this.getPixel(baseX, baseY)) code |= 0x1; // Dot 1
34
- if (this.getPixel(baseX, baseY + 1)) code |= 0x2; // Dot 2
35
- if (this.getPixel(baseX, baseY + 2)) code |= 0x4; // Dot 3
36
- if (this.getPixel(baseX, baseY + 3)) code |= 0x40; // Dot 7 (Bottom-left)
37
- // Column 1
38
- if (this.getPixel(baseX + 1, baseY)) code |= 0x8; // Dot 4
39
- if (this.getPixel(baseX + 1, baseY + 1)) code |= 0x10; // Dot 5
40
- if (this.getPixel(baseX + 1, baseY + 2)) code |= 0x20; // Dot 6
41
- if (this.getPixel(baseX + 1, baseY + 3)) code |= 0x80; // Dot 8 (Bottom-right)
42
- return String.fromCharCode(code);
43
- }
44
- getPixel(x, y) {
45
- if (y >= 0 && y < this.gridHeight && x >= 0 && x < this.gridWidth) {
46
- return this.grid[y][x];
47
- }
48
- return false;
49
- }
50
- setPixel(x, y, val) {
51
- if (y >= 0 && y < this.gridHeight && x >= 0 && x < this.gridWidth) {
52
- this.grid[y][x] = val;
53
- }
54
- }
55
- render(_firstRender) {
56
- let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
57
- output += `${_ansi.ANSI.FG_GRAY}┌${'─'.repeat(this.options.width + 2)}┐${_ansi.ANSI.RESET}\n`;
58
- for(let y = 0; y < this.options.height; y++){
59
- let line = '';
60
- for(let x = 0; x < this.options.width; x++){
61
- const char = this.getBrailleChar(x, y);
62
- // Highlight cursor position (pixel level approximation)
63
- // If cursor is within this character block
64
- const containsCursor = Math.floor(this.cursorX / 2) === x && Math.floor(this.cursorY / 4) === y;
65
- if (containsCursor) {
66
- line += _ansi.ANSI.REVERSE + char + _ansi.ANSI.RESET;
67
- } else {
68
- line += char;
69
- }
70
- }
71
- output += `${_ansi.ANSI.FG_GRAY}│ ${_ansi.ANSI.RESET}${line} ${_ansi.ANSI.FG_GRAY}│${_ansi.ANSI.RESET}\n`;
72
- }
73
- output += `${_ansi.ANSI.FG_GRAY}└${'─'.repeat(this.options.width + 2)}┘${_ansi.ANSI.RESET}\n`;
74
- output += `\n${_ansi.ANSI.FG_GRAY}(Arrows: move, Space: toggle, Mouse: drag, 'c': clear, 'i': invert, Enter: done)${_ansi.ANSI.RESET}`;
75
- this.renderFrame(output);
76
- }
77
- handleInput(char, _key) {
78
- if (this.isLeft(char)) {
79
- this.cursorX = Math.max(0, this.cursorX - 1);
80
- this.render(false);
81
- } else if (this.isRight(char)) {
82
- this.cursorX = Math.min(this.gridWidth - 1, this.cursorX + 1);
83
- this.render(false);
84
- } else if (this.isUp(char)) {
85
- this.cursorY = Math.max(0, this.cursorY - 1);
86
- this.render(false);
87
- } else if (this.isDown(char)) {
88
- this.cursorY = Math.min(this.gridHeight - 1, this.cursorY + 1);
89
- this.render(false);
90
- } else if (char === ' ') {
91
- const current = this.getPixel(this.cursorX, this.cursorY);
92
- this.setPixel(this.cursorX, this.cursorY, !current);
93
- this.render(false);
94
- } else if (char === 'c') {
95
- this.clearGrid();
96
- this.render(false);
97
- } else if (char === 'i') {
98
- this.invertGrid();
99
- this.render(false);
100
- } else if (char === '\r' || char === '\n') {
101
- this.handleSubmit();
102
- }
103
- }
104
- handleMouse(event) {
105
- if (event.action === 'release') {
106
- this.lastMouse = null;
107
- return;
108
- }
109
- if (this.lastMouse) {
110
- const dx = event.x - this.lastMouse.x;
111
- const dy = event.y - this.lastMouse.y;
112
- // Relative movement: scale to grid density
113
- // X: 1 char = 2 pixels
114
- // Y: 1 char = 4 pixels
115
- if (dx !== 0 || dy !== 0) {
116
- this.cursorX += dx * 2;
117
- this.cursorY += dy * 4;
118
- // Clamp
119
- this.cursorX = Math.max(0, Math.min(this.gridWidth - 1, this.cursorX));
120
- this.cursorY = Math.max(0, Math.min(this.gridHeight - 1, this.cursorY));
121
- // Draw if pressing (Left Button = 0)
122
- if (event.action === 'press' || event.action === 'move' && event.button === 0) {
123
- this.setPixel(this.cursorX, this.cursorY, true);
124
- }
125
- // Eraser (Right Button = 2)
126
- if ((event.action === 'press' || event.action === 'move') && event.button === 2) {
127
- this.setPixel(this.cursorX, this.cursorY, false);
128
- }
129
- this.render(false);
130
- }
131
- } else {
132
- if (event.action === 'press' && event.button === 0) {
133
- this.setPixel(this.cursorX, this.cursorY, true);
134
- this.render(false);
135
- }
136
- }
137
- this.lastMouse = {
138
- x: event.x,
139
- y: event.y
140
- };
141
- }
142
- clearGrid() {
143
- for(let y = 0; y < this.gridHeight; y++){
144
- for(let x = 0; x < this.gridWidth; x++){
145
- this.grid[y][x] = false;
146
- }
147
- }
148
- }
149
- invertGrid() {
150
- for(let y = 0; y < this.gridHeight; y++){
151
- for(let x = 0; x < this.gridWidth; x++){
152
- this.grid[y][x] = !this.grid[y][x];
153
- }
154
- }
155
- }
156
- handleSubmit() {
157
- if (this.options.exportType === 'text') {
158
- // Render to string
159
- let result = '';
160
- for(let y = 0; y < this.options.height; y++){
161
- for(let x = 0; x < this.options.width; x++){
162
- result += this.getBrailleChar(x, y);
163
- }
164
- result += '\n';
165
- }
166
- this.submit(result.trim());
167
- } else {
168
- // Default: return matrix
169
- this.submit(this.grid);
170
- }
171
- }
172
- constructor(options){
173
- super(options), _define_property(this, "grid", void 0), _define_property(this, "cursorX", 0), _define_property(this, "cursorY", 0), _define_property(this, "gridWidth", void 0), _define_property(this, "gridHeight", void 0), _define_property(this, "lastMouse", null);
174
- this.gridWidth = options.width * 2;
175
- this.gridHeight = options.height * 4;
176
- if (options.initial) {
177
- // Deep copy to avoid mutating original if passed
178
- this.grid = options.initial.map((row)=>[
179
- ...row
180
- ]);
181
- } else {
182
- this.grid = [];
183
- for(let y = 0; y < this.gridHeight; y++){
184
- const row = new Array(this.gridWidth).fill(false);
185
- this.grid.push(row);
186
- }
187
- }
188
- }
189
- };
190
-
191
- //# sourceMappingURL=draw.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/draw.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { DrawOptions, MouseEvent } from '../types';\nimport { theme } from '../theme';\nimport { ANSI } from '../ansi';\n\nexport class DrawPrompt extends Prompt<string | boolean[][], DrawOptions> {\n private grid: boolean[][];\n private cursorX: number = 0;\n private cursorY: number = 0;\n private gridWidth: number;\n private gridHeight: number;\n private lastMouse: { x: number, y: number } | null = null;\n\n constructor(options: DrawOptions) {\n super(options);\n this.gridWidth = options.width * 2;\n this.gridHeight = options.height * 4;\n\n if (options.initial) {\n // Deep copy to avoid mutating original if passed\n this.grid = options.initial.map(row => [...row]);\n } else {\n this.grid = [];\n for (let y = 0; y < this.gridHeight; y++) {\n const row = new Array(this.gridWidth).fill(false);\n this.grid.push(row);\n }\n }\n }\n\n private getBrailleChar(x: number, y: number): string {\n const baseX = x * 2;\n const baseY = y * 4;\n let code = 0x2800; // Base Braille\n\n // Column 0\n if (this.getPixel(baseX, baseY)) code |= 0x1; // Dot 1\n if (this.getPixel(baseX, baseY + 1)) code |= 0x2; // Dot 2\n if (this.getPixel(baseX, baseY + 2)) code |= 0x4; // Dot 3\n if (this.getPixel(baseX, baseY + 3)) code |= 0x40; // Dot 7 (Bottom-left)\n\n // Column 1\n if (this.getPixel(baseX + 1, baseY)) code |= 0x8; // Dot 4\n if (this.getPixel(baseX + 1, baseY + 1)) code |= 0x10; // Dot 5\n if (this.getPixel(baseX + 1, baseY + 2)) code |= 0x20; // Dot 6\n if (this.getPixel(baseX + 1, baseY + 3)) code |= 0x80; // Dot 8 (Bottom-right)\n\n return String.fromCharCode(code);\n }\n\n private getPixel(x: number, y: number): boolean {\n if (y >= 0 && y < this.gridHeight && x >= 0 && x < this.gridWidth) {\n return this.grid[y][x];\n }\n return false;\n }\n\n private setPixel(x: number, y: number, val: boolean) {\n if (y >= 0 && y < this.gridHeight && x >= 0 && x < this.gridWidth) {\n this.grid[y][x] = val;\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = `${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n output += `${ANSI.FG_GRAY}┌${'─'.repeat(this.options.width + 2)}┐${ANSI.RESET}\\n`;\n\n for (let y = 0; y < this.options.height; y++) {\n let line = '';\n for (let x = 0; x < this.options.width; x++) {\n const char = this.getBrailleChar(x, y);\n\n // Highlight cursor position (pixel level approximation)\n // If cursor is within this character block\n const containsCursor =\n Math.floor(this.cursorX / 2) === x &&\n Math.floor(this.cursorY / 4) === y;\n\n if (containsCursor) {\n line += ANSI.REVERSE + char + ANSI.RESET;\n } else {\n line += char;\n }\n }\n output += `${ANSI.FG_GRAY}│ ${ANSI.RESET}${line} ${ANSI.FG_GRAY}│${ANSI.RESET}\\n`;\n }\n\n output += `${ANSI.FG_GRAY}└${'─'.repeat(this.options.width + 2)}┘${ANSI.RESET}\\n`;\n\n output += `\\n${ANSI.FG_GRAY}(Arrows: move, Space: toggle, Mouse: drag, 'c': clear, 'i': invert, Enter: done)${ANSI.RESET}`;\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (this.isLeft(char)) {\n this.cursorX = Math.max(0, this.cursorX - 1);\n this.render(false);\n } else if (this.isRight(char)) {\n this.cursorX = Math.min(this.gridWidth - 1, this.cursorX + 1);\n this.render(false);\n } else if (this.isUp(char)) {\n this.cursorY = Math.max(0, this.cursorY - 1);\n this.render(false);\n } else if (this.isDown(char)) {\n this.cursorY = Math.min(this.gridHeight - 1, this.cursorY + 1);\n this.render(false);\n } else if (char === ' ') {\n const current = this.getPixel(this.cursorX, this.cursorY);\n this.setPixel(this.cursorX, this.cursorY, !current);\n this.render(false);\n } else if (char === 'c') {\n this.clearGrid();\n this.render(false);\n } else if (char === 'i') {\n this.invertGrid();\n this.render(false);\n } else if (char === '\\r' || char === '\\n') {\n this.handleSubmit();\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'release') {\n this.lastMouse = null;\n return;\n }\n\n if (this.lastMouse) {\n const dx = event.x - this.lastMouse.x;\n const dy = event.y - this.lastMouse.y;\n\n // Relative movement: scale to grid density\n // X: 1 char = 2 pixels\n // Y: 1 char = 4 pixels\n if (dx !== 0 || dy !== 0) {\n this.cursorX += dx * 2;\n this.cursorY += dy * 4;\n\n // Clamp\n this.cursorX = Math.max(0, Math.min(this.gridWidth - 1, this.cursorX));\n this.cursorY = Math.max(0, Math.min(this.gridHeight - 1, this.cursorY));\n\n // Draw if pressing (Left Button = 0)\n if (event.action === 'press' || (event.action === 'move' && event.button === 0)) {\n this.setPixel(this.cursorX, this.cursorY, true);\n }\n // Eraser (Right Button = 2)\n if ((event.action === 'press' || event.action === 'move') && event.button === 2) {\n this.setPixel(this.cursorX, this.cursorY, false);\n }\n\n this.render(false);\n }\n } else {\n if (event.action === 'press' && event.button === 0) {\n this.setPixel(this.cursorX, this.cursorY, true);\n this.render(false);\n }\n }\n\n this.lastMouse = { x: event.x, y: event.y };\n }\n\n private clearGrid() {\n for (let y = 0; y < this.gridHeight; y++) {\n for (let x = 0; x < this.gridWidth; x++) {\n this.grid[y][x] = false;\n }\n }\n }\n\n private invertGrid() {\n for (let y = 0; y < this.gridHeight; y++) {\n for (let x = 0; x < this.gridWidth; x++) {\n this.grid[y][x] = !this.grid[y][x];\n }\n }\n }\n\n private handleSubmit() {\n if (this.options.exportType === 'text') {\n // Render to string\n let result = '';\n for (let y = 0; y < this.options.height; y++) {\n for (let x = 0; x < this.options.width; x++) {\n result += this.getBrailleChar(x, y);\n }\n result += '\\n';\n }\n this.submit(result.trim());\n } else {\n // Default: return matrix\n this.submit(this.grid);\n }\n }\n}\n"],"names":["DrawPrompt","Prompt","getBrailleChar","x","y","baseX","baseY","code","getPixel","String","fromCharCode","gridHeight","gridWidth","grid","setPixel","val","render","_firstRender","output","theme","title","options","message","ANSI","RESET","FG_GRAY","repeat","width","height","line","char","containsCursor","Math","floor","cursorX","cursorY","REVERSE","renderFrame","handleInput","_key","isLeft","max","isRight","min","isUp","isDown","current","clearGrid","invertGrid","handleSubmit","handleMouse","event","action","lastMouse","dx","dy","button","exportType","result","submit","trim","initial","map","row","Array","fill","push"],"mappings":";;;;+BAKaA;;;eAAAA;;;sBALU;uBAED;sBACD;;;;;;;;;;;;;;AAEd,IAAA,AAAMA,aAAN,MAAMA,mBAAmBC,YAAM;IAyB1BC,eAAeC,CAAS,EAAEC,CAAS,EAAU;QACjD,MAAMC,QAAQF,IAAI;QAClB,MAAMG,QAAQF,IAAI;QAClB,IAAIG,OAAO,QAAQ,eAAe;QAElC,WAAW;QACX,IAAI,IAAI,CAACC,QAAQ,CAACH,OAAOC,QAAQC,QAAQ,KAAW,QAAQ;QAC5D,IAAI,IAAI,CAACC,QAAQ,CAACH,OAAOC,QAAQ,IAAIC,QAAQ,KAAO,QAAQ;QAC5D,IAAI,IAAI,CAACC,QAAQ,CAACH,OAAOC,QAAQ,IAAIC,QAAQ,KAAO,QAAQ;QAC5D,IAAI,IAAI,CAACC,QAAQ,CAACH,OAAOC,QAAQ,IAAIC,QAAQ,MAAO,sBAAsB;QAE1E,WAAW;QACX,IAAI,IAAI,CAACC,QAAQ,CAACH,QAAQ,GAAGC,QAAQC,QAAQ,KAAW,QAAQ;QAChE,IAAI,IAAI,CAACC,QAAQ,CAACH,QAAQ,GAAGC,QAAQ,IAAIC,QAAQ,MAAO,QAAQ;QAChE,IAAI,IAAI,CAACC,QAAQ,CAACH,QAAQ,GAAGC,QAAQ,IAAIC,QAAQ,MAAO,QAAQ;QAChE,IAAI,IAAI,CAACC,QAAQ,CAACH,QAAQ,GAAGC,QAAQ,IAAIC,QAAQ,MAAO,uBAAuB;QAE/E,OAAOE,OAAOC,YAAY,CAACH;IAC/B;IAEQC,SAASL,CAAS,EAAEC,CAAS,EAAW;QAC5C,IAAIA,KAAK,KAAKA,IAAI,IAAI,CAACO,UAAU,IAAIR,KAAK,KAAKA,IAAI,IAAI,CAACS,SAAS,EAAE;YAC/D,OAAO,IAAI,CAACC,IAAI,CAACT,EAAE,CAACD,EAAE;QAC1B;QACA,OAAO;IACX;IAEQW,SAASX,CAAS,EAAEC,CAAS,EAAEW,GAAY,EAAE;QACjD,IAAIX,KAAK,KAAKA,IAAI,IAAI,CAACO,UAAU,IAAIR,KAAK,KAAKA,IAAI,IAAI,CAACS,SAAS,EAAE;YAC/D,IAAI,CAACC,IAAI,CAACT,EAAE,CAACD,EAAE,GAAGY;QACtB;IACJ;IAEUC,OAAOC,YAAqB,EAAE;QACpC,IAAIC,SAAS,GAAGC,YAAK,CAACC,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGC,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAEnEN,UAAU,GAAGK,UAAI,CAACE,OAAO,CAAC,CAAC,EAAE,IAAIC,MAAM,CAAC,IAAI,CAACL,OAAO,CAACM,KAAK,GAAG,GAAG,CAAC,EAAEJ,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAEjF,IAAK,IAAIpB,IAAI,GAAGA,IAAI,IAAI,CAACiB,OAAO,CAACO,MAAM,EAAExB,IAAK;YAC1C,IAAIyB,OAAO;YACX,IAAK,IAAI1B,IAAI,GAAGA,IAAI,IAAI,CAACkB,OAAO,CAACM,KAAK,EAAExB,IAAK;gBACzC,MAAM2B,OAAO,IAAI,CAAC5B,cAAc,CAACC,GAAGC;gBAEpC,wDAAwD;gBACxD,2CAA2C;gBAC3C,MAAM2B,iBACFC,KAAKC,KAAK,CAAC,IAAI,CAACC,OAAO,GAAG,OAAO/B,KACjC6B,KAAKC,KAAK,CAAC,IAAI,CAACE,OAAO,GAAG,OAAO/B;gBAErC,IAAI2B,gBAAgB;oBAChBF,QAAQN,UAAI,CAACa,OAAO,GAAGN,OAAOP,UAAI,CAACC,KAAK;gBAC5C,OAAO;oBACHK,QAAQC;gBACZ;YACJ;YACAZ,UAAU,GAAGK,UAAI,CAACE,OAAO,CAAC,EAAE,EAAEF,UAAI,CAACC,KAAK,GAAGK,KAAK,CAAC,EAAEN,UAAI,CAACE,OAAO,CAAC,CAAC,EAAEF,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QACrF;QAEAN,UAAU,GAAGK,UAAI,CAACE,OAAO,CAAC,CAAC,EAAE,IAAIC,MAAM,CAAC,IAAI,CAACL,OAAO,CAACM,KAAK,GAAG,GAAG,CAAC,EAAEJ,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAEjFN,UAAU,CAAC,EAAE,EAAEK,UAAI,CAACE,OAAO,CAAC,gFAAgF,EAAEF,UAAI,CAACC,KAAK,EAAE;QAC1H,IAAI,CAACa,WAAW,CAACnB;IACrB;IAEUoB,YAAYR,IAAY,EAAES,IAAY,EAAE;QAC9C,IAAI,IAAI,CAACC,MAAM,CAACV,OAAO;YACnB,IAAI,CAACI,OAAO,GAAGF,KAAKS,GAAG,CAAC,GAAG,IAAI,CAACP,OAAO,GAAG;YAC1C,IAAI,CAAClB,MAAM,CAAC;QAChB,OAAO,IAAI,IAAI,CAAC0B,OAAO,CAACZ,OAAO;YAC3B,IAAI,CAACI,OAAO,GAAGF,KAAKW,GAAG,CAAC,IAAI,CAAC/B,SAAS,GAAG,GAAG,IAAI,CAACsB,OAAO,GAAG;YAC3D,IAAI,CAAClB,MAAM,CAAC;QAChB,OAAO,IAAI,IAAI,CAAC4B,IAAI,CAACd,OAAO;YACxB,IAAI,CAACK,OAAO,GAAGH,KAAKS,GAAG,CAAC,GAAG,IAAI,CAACN,OAAO,GAAG;YAC1C,IAAI,CAACnB,MAAM,CAAC;QAChB,OAAO,IAAI,IAAI,CAAC6B,MAAM,CAACf,OAAO;YAC1B,IAAI,CAACK,OAAO,GAAGH,KAAKW,GAAG,CAAC,IAAI,CAAChC,UAAU,GAAG,GAAG,IAAI,CAACwB,OAAO,GAAG;YAC5D,IAAI,CAACnB,MAAM,CAAC;QAChB,OAAO,IAAIc,SAAS,KAAK;YACrB,MAAMgB,UAAU,IAAI,CAACtC,QAAQ,CAAC,IAAI,CAAC0B,OAAO,EAAE,IAAI,CAACC,OAAO;YACxD,IAAI,CAACrB,QAAQ,CAAC,IAAI,CAACoB,OAAO,EAAE,IAAI,CAACC,OAAO,EAAE,CAACW;YAC3C,IAAI,CAAC9B,MAAM,CAAC;QAChB,OAAO,IAAIc,SAAS,KAAK;YACrB,IAAI,CAACiB,SAAS;YACd,IAAI,CAAC/B,MAAM,CAAC;QAChB,OAAO,IAAIc,SAAS,KAAK;YACrB,IAAI,CAACkB,UAAU;YACf,IAAI,CAAChC,MAAM,CAAC;QAChB,OAAO,IAAIc,SAAS,QAAQA,SAAS,MAAM;YACvC,IAAI,CAACmB,YAAY;QACrB;IACJ;IAEUC,YAAYC,KAAiB,EAAE;QACrC,IAAIA,MAAMC,MAAM,KAAK,WAAW;YAC5B,IAAI,CAACC,SAAS,GAAG;YACjB;QACJ;QAEA,IAAI,IAAI,CAACA,SAAS,EAAE;YAChB,MAAMC,KAAKH,MAAMhD,CAAC,GAAG,IAAI,CAACkD,SAAS,CAAClD,CAAC;YACrC,MAAMoD,KAAKJ,MAAM/C,CAAC,GAAG,IAAI,CAACiD,SAAS,CAACjD,CAAC;YAErC,2CAA2C;YAC3C,uBAAuB;YACvB,uBAAuB;YACvB,IAAIkD,OAAO,KAAKC,OAAO,GAAG;gBACtB,IAAI,CAACrB,OAAO,IAAIoB,KAAK;gBACrB,IAAI,CAACnB,OAAO,IAAIoB,KAAK;gBAErB,QAAQ;gBACR,IAAI,CAACrB,OAAO,GAAGF,KAAKS,GAAG,CAAC,GAAGT,KAAKW,GAAG,CAAC,IAAI,CAAC/B,SAAS,GAAG,GAAG,IAAI,CAACsB,OAAO;gBACpE,IAAI,CAACC,OAAO,GAAGH,KAAKS,GAAG,CAAC,GAAGT,KAAKW,GAAG,CAAC,IAAI,CAAChC,UAAU,GAAG,GAAG,IAAI,CAACwB,OAAO;gBAErE,qCAAqC;gBACrC,IAAIgB,MAAMC,MAAM,KAAK,WAAYD,MAAMC,MAAM,KAAK,UAAUD,MAAMK,MAAM,KAAK,GAAI;oBAC7E,IAAI,CAAC1C,QAAQ,CAAC,IAAI,CAACoB,OAAO,EAAE,IAAI,CAACC,OAAO,EAAE;gBAC9C;gBACA,4BAA4B;gBAC5B,IAAI,AAACgB,CAAAA,MAAMC,MAAM,KAAK,WAAWD,MAAMC,MAAM,KAAK,MAAK,KAAMD,MAAMK,MAAM,KAAK,GAAG;oBAC7E,IAAI,CAAC1C,QAAQ,CAAC,IAAI,CAACoB,OAAO,EAAE,IAAI,CAACC,OAAO,EAAE;gBAC9C;gBAEA,IAAI,CAACnB,MAAM,CAAC;YAChB;QACJ,OAAO;YACH,IAAImC,MAAMC,MAAM,KAAK,WAAWD,MAAMK,MAAM,KAAK,GAAG;gBAChD,IAAI,CAAC1C,QAAQ,CAAC,IAAI,CAACoB,OAAO,EAAE,IAAI,CAACC,OAAO,EAAE;gBAC1C,IAAI,CAACnB,MAAM,CAAC;YAChB;QACJ;QAEA,IAAI,CAACqC,SAAS,GAAG;YAAElD,GAAGgD,MAAMhD,CAAC;YAAEC,GAAG+C,MAAM/C,CAAC;QAAC;IAC9C;IAEQ2C,YAAY;QAChB,IAAK,IAAI3C,IAAI,GAAGA,IAAI,IAAI,CAACO,UAAU,EAAEP,IAAK;YACtC,IAAK,IAAID,IAAI,GAAGA,IAAI,IAAI,CAACS,SAAS,EAAET,IAAK;gBACrC,IAAI,CAACU,IAAI,CAACT,EAAE,CAACD,EAAE,GAAG;YACtB;QACJ;IACJ;IAEQ6C,aAAa;QACjB,IAAK,IAAI5C,IAAI,GAAGA,IAAI,IAAI,CAACO,UAAU,EAAEP,IAAK;YACtC,IAAK,IAAID,IAAI,GAAGA,IAAI,IAAI,CAACS,SAAS,EAAET,IAAK;gBACrC,IAAI,CAACU,IAAI,CAACT,EAAE,CAACD,EAAE,GAAG,CAAC,IAAI,CAACU,IAAI,CAACT,EAAE,CAACD,EAAE;YACtC;QACJ;IACJ;IAEQ8C,eAAe;QACnB,IAAI,IAAI,CAAC5B,OAAO,CAACoC,UAAU,KAAK,QAAQ;YACpC,mBAAmB;YACnB,IAAIC,SAAS;YACb,IAAK,IAAItD,IAAI,GAAGA,IAAI,IAAI,CAACiB,OAAO,CAACO,MAAM,EAAExB,IAAK;gBAC1C,IAAK,IAAID,IAAI,GAAGA,IAAI,IAAI,CAACkB,OAAO,CAACM,KAAK,EAAExB,IAAK;oBACzCuD,UAAU,IAAI,CAACxD,cAAc,CAACC,GAAGC;gBACrC;gBACAsD,UAAU;YACd;YACA,IAAI,CAACC,MAAM,CAACD,OAAOE,IAAI;QAC3B,OAAO;YACH,yBAAyB;YACzB,IAAI,CAACD,MAAM,CAAC,IAAI,CAAC9C,IAAI;QACzB;IACJ;IAtLA,YAAYQ,OAAoB,CAAE;QAC9B,KAAK,CAACA,UARV,uBAAQR,QAAR,KAAA,IACA,uBAAQqB,WAAkB,IAC1B,uBAAQC,WAAkB,IAC1B,uBAAQvB,aAAR,KAAA,IACA,uBAAQD,cAAR,KAAA,IACA,uBAAQ0C,aAA6C;QAIjD,IAAI,CAACzC,SAAS,GAAGS,QAAQM,KAAK,GAAG;QACjC,IAAI,CAAChB,UAAU,GAAGU,QAAQO,MAAM,GAAG;QAEnC,IAAIP,QAAQwC,OAAO,EAAE;YACjB,iDAAiD;YACjD,IAAI,CAAChD,IAAI,GAAGQ,QAAQwC,OAAO,CAACC,GAAG,CAACC,CAAAA,MAAO;uBAAIA;iBAAI;QACnD,OAAO;YACH,IAAI,CAAClD,IAAI,GAAG,EAAE;YACd,IAAK,IAAIT,IAAI,GAAGA,IAAI,IAAI,CAACO,UAAU,EAAEP,IAAK;gBACtC,MAAM2D,MAAM,IAAIC,MAAM,IAAI,CAACpD,SAAS,EAAEqD,IAAI,CAAC;gBAC3C,IAAI,CAACpD,IAAI,CAACqD,IAAI,CAACH;YACnB;QACJ;IACJ;AAwKJ"}
@@ -1,234 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "EditorPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return EditorPrompt;
9
- }
10
- });
11
- const _fs = /*#__PURE__*/ _interop_require_wildcard(require("fs"));
12
- const _os = /*#__PURE__*/ _interop_require_wildcard(require("os"));
13
- const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
14
- const _child_process = require("child_process");
15
- const _base = require("../base");
16
- const _theme = require("../theme");
17
- const _symbols = require("../symbols");
18
- const _ansi = require("../ansi");
19
- function _define_property(obj, key, value) {
20
- if (key in obj) {
21
- Object.defineProperty(obj, key, {
22
- value: value,
23
- enumerable: true,
24
- configurable: true,
25
- writable: true
26
- });
27
- } else {
28
- obj[key] = value;
29
- }
30
- return obj;
31
- }
32
- function _getRequireWildcardCache(nodeInterop) {
33
- if (typeof WeakMap !== "function") return null;
34
- var cacheBabelInterop = new WeakMap();
35
- var cacheNodeInterop = new WeakMap();
36
- return (_getRequireWildcardCache = function(nodeInterop) {
37
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
38
- })(nodeInterop);
39
- }
40
- function _interop_require_wildcard(obj, nodeInterop) {
41
- if (!nodeInterop && obj && obj.__esModule) {
42
- return obj;
43
- }
44
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
45
- return {
46
- default: obj
47
- };
48
- }
49
- var cache = _getRequireWildcardCache(nodeInterop);
50
- if (cache && cache.has(obj)) {
51
- return cache.get(obj);
52
- }
53
- var newObj = {
54
- __proto__: null
55
- };
56
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
57
- for(var key in obj){
58
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
59
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
60
- if (desc && (desc.get || desc.set)) {
61
- Object.defineProperty(newObj, key, desc);
62
- } else {
63
- newObj[key] = obj[key];
64
- }
65
- }
66
- }
67
- newObj.default = obj;
68
- if (cache) {
69
- cache.set(obj, newObj);
70
- }
71
- return newObj;
72
- }
73
- let EditorPrompt = class EditorPrompt extends _base.Prompt {
74
- cleanup() {
75
- if (this.tempFilePath) {
76
- try {
77
- if (_fs.existsSync(this.tempFilePath)) {
78
- _fs.unlinkSync(this.tempFilePath);
79
- }
80
- } catch (_error) {
81
- // Ignore cleanup errors
82
- }
83
- }
84
- super.cleanup();
85
- }
86
- render(firstRender) {
87
- if (this.status === 'editing') {
88
- return; // Don't render while editor is open (stdio inherited)
89
- }
90
- const icon = this.status === 'done' ? _theme.theme.success + _symbols.symbols.tick : _theme.theme.main + '?';
91
- const message = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}`;
92
- const hint = this.options.waitUserInput ? ` ${_theme.theme.muted}[Press <Enter> to launch editor]${_ansi.ANSI.RESET}` : ` ${_theme.theme.muted}[Launching editor...]${_ansi.ANSI.RESET}`;
93
- let output = `${icon} ${_ansi.ANSI.BOLD}${message}${_ansi.ANSI.RESET}${hint}`;
94
- if (this.errorMsg) {
95
- output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
96
- }
97
- this.renderFrame(output);
98
- // Auto-launch handling
99
- if (firstRender && this.options.waitUserInput === false) {
100
- // We need to delay slightly to ensure the render frame is flushed
101
- // and raw mode setup is complete from .run()
102
- setTimeout(()=>{
103
- this.spawnEditor();
104
- }, 50);
105
- }
106
- }
107
- handleInput(char) {
108
- if (this.status !== 'pending') return;
109
- // Enter
110
- if (char === '\r' || char === '\n') {
111
- this.spawnEditor();
112
- }
113
- }
114
- resolveEditor() {
115
- // 1. Env vars
116
- const envEditor = process.env.VISUAL || process.env.EDITOR;
117
- if (envEditor) {
118
- const parts = envEditor.split(' ');
119
- return {
120
- cmd: parts[0],
121
- args: parts.slice(1)
122
- };
123
- }
124
- // 2. OS specific
125
- if (process.platform === 'win32') {
126
- // Priority: notepad -> code -> wordpad
127
- return {
128
- cmd: 'notepad',
129
- args: []
130
- };
131
- } else {
132
- // Unix/Linux/Mac
133
- // Priority: vim -> nano -> vi
134
- // We'll stick to 'vim' as the default safe bet if we can't detect.
135
- // A more robust solution would check paths, but for now we assume 'vim'.
136
- return {
137
- cmd: 'vim',
138
- args: []
139
- };
140
- }
141
- }
142
- spawnEditor() {
143
- this.status = 'editing';
144
- // 1. Prepare Temp File
145
- const ext = this.options.extension || '.txt';
146
- // Ensure extension has dot
147
- const safeExt = ext.startsWith('.') ? ext : '.' + ext;
148
- const filename = `mep-editor-${Date.now()}-${Math.floor(Math.random() * 1000)}${safeExt}`;
149
- this.tempFilePath = _path.join(_os.tmpdir(), filename);
150
- const initialContent = this.options.initial || '';
151
- try {
152
- _fs.writeFileSync(this.tempFilePath, initialContent, 'utf8');
153
- } catch (e) {
154
- this.errorMsg = `Failed to create temp file: ${e.message}`;
155
- this.status = 'pending';
156
- this.render(false);
157
- return;
158
- }
159
- // 2. Resolve Editor
160
- const { cmd, args } = this.resolveEditor();
161
- const editorArgs = [
162
- ...args,
163
- this.tempFilePath
164
- ];
165
- // 3. Pause Mep
166
- // Temporarily disable mouse tracking if it was enabled
167
- const shouldEnableMouse = this.options.mouse !== false && this.capabilities.hasMouse;
168
- if (shouldEnableMouse) {
169
- this.print(_ansi.ANSI.DISABLE_MOUSE);
170
- }
171
- // Pause stdin and raw mode to allow child process to take over TTY
172
- this.stdin.setRawMode(false);
173
- this.stdin.pause();
174
- // 4. Spawn
175
- const child = (0, _child_process.spawn)(cmd, editorArgs, {
176
- stdio: 'inherit',
177
- shell: true
178
- });
179
- child.on('error', (err)=>{
180
- this.restoreMep();
181
- this.status = 'pending';
182
- this.errorMsg = `Could not launch editor '${cmd}': ${err.message}`;
183
- this.render(false);
184
- });
185
- child.on('exit', (code)=>{
186
- // 5. Read Result
187
- let content = initialContent;
188
- try {
189
- if (this.tempFilePath && _fs.existsSync(this.tempFilePath)) {
190
- content = _fs.readFileSync(this.tempFilePath, 'utf8');
191
- _fs.unlinkSync(this.tempFilePath); // Cleanup
192
- this.tempFilePath = null; // Mark as cleaned
193
- }
194
- } catch (_e) {
195
- // Ignore read/delete errors
196
- }
197
- this.restoreMep();
198
- if (code !== 0) {
199
- this.status = 'pending';
200
- this.errorMsg = `Editor exited with code ${code}`;
201
- this.render(false);
202
- return;
203
- }
204
- // Success
205
- this.status = 'done';
206
- if (content.endsWith('\n')) {
207
- content = content.slice(0, -1);
208
- }
209
- if (content.endsWith('\r')) {
210
- content = content.slice(0, -1);
211
- }
212
- this.submit(content);
213
- });
214
- }
215
- restoreMep() {
216
- this.stdin.resume();
217
- this.stdin.setRawMode(true);
218
- // Re-enable mouse if it was enabled
219
- const shouldEnableMouse = this.options.mouse !== false && this.capabilities.hasMouse;
220
- if (shouldEnableMouse) {
221
- this.print(_ansi.ANSI.SET_ANY_EVENT_MOUSE + _ansi.ANSI.SET_SGR_EXT_MODE_MOUSE);
222
- }
223
- this.print(_ansi.ANSI.HIDE_CURSOR); // Ensure cursor is hidden again for Mep
224
- }
225
- constructor(options){
226
- super(options), _define_property(this, "errorMsg", ''), _define_property(this, "status", 'pending'), _define_property(this, "tempFilePath", null);
227
- // Default waitUserInput to true if not specified
228
- if (this.options.waitUserInput === undefined) {
229
- this.options.waitUserInput = true;
230
- }
231
- }
232
- };
233
-
234
- //# sourceMappingURL=editor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/editor.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { spawn } from 'child_process';\nimport { Prompt } from '../base';\nimport { EditorOptions } from '../types';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { ANSI } from '../ansi';\n\nexport class EditorPrompt extends Prompt<string, EditorOptions> {\n private errorMsg: string = '';\n private status: 'pending' | 'editing' | 'done' = 'pending';\n private tempFilePath: string | null = null;\n\n constructor(options: EditorOptions) {\n super(options);\n // Default waitUserInput to true if not specified\n if (this.options.waitUserInput === undefined) {\n this.options.waitUserInput = true;\n }\n }\n\n protected cleanup() {\n if (this.tempFilePath) {\n try {\n if (fs.existsSync(this.tempFilePath)) {\n fs.unlinkSync(this.tempFilePath);\n }\n } catch (_error) {\n // Ignore cleanup errors\n }\n }\n super.cleanup();\n }\n\n protected render(firstRender: boolean) {\n if (this.status === 'editing') {\n return; // Don't render while editor is open (stdio inherited)\n }\n\n const icon = this.status === 'done' ? theme.success + symbols.tick : theme.main + '?';\n const message = `${theme.title}${this.options.message}${ANSI.RESET}`;\n const hint = this.options.waitUserInput\n ? ` ${theme.muted}[Press <Enter> to launch editor]${ANSI.RESET}`\n : ` ${theme.muted}[Launching editor...]${ANSI.RESET}`;\n\n let output = `${icon} ${ANSI.BOLD}${message}${ANSI.RESET}${hint}`;\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n\n // Auto-launch handling\n if (firstRender && this.options.waitUserInput === false) {\n // We need to delay slightly to ensure the render frame is flushed\n // and raw mode setup is complete from .run()\n setTimeout(() => {\n this.spawnEditor();\n }, 50);\n }\n }\n\n protected handleInput(char: string) {\n if (this.status !== 'pending') return;\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n this.spawnEditor();\n }\n }\n\n private resolveEditor(): { cmd: string, args: string[] } {\n // 1. Env vars\n const envEditor = process.env.VISUAL || process.env.EDITOR;\n if (envEditor) {\n const parts = envEditor.split(' ');\n return { cmd: parts[0], args: parts.slice(1) };\n }\n\n // 2. OS specific\n if (process.platform === 'win32') {\n // Priority: notepad -> code -> wordpad\n return { cmd: 'notepad', args: [] };\n } else {\n // Unix/Linux/Mac\n // Priority: vim -> nano -> vi\n // We'll stick to 'vim' as the default safe bet if we can't detect.\n // A more robust solution would check paths, but for now we assume 'vim'.\n return { cmd: 'vim', args: [] };\n }\n }\n\n private spawnEditor() {\n this.status = 'editing';\n\n // 1. Prepare Temp File\n const ext = this.options.extension || '.txt';\n // Ensure extension has dot\n const safeExt = ext.startsWith('.') ? ext : '.' + ext;\n const filename = `mep-editor-${Date.now()}-${Math.floor(Math.random() * 1000)}${safeExt}`;\n this.tempFilePath = path.join(os.tmpdir(), filename);\n const initialContent = this.options.initial || '';\n\n try {\n fs.writeFileSync(this.tempFilePath, initialContent, 'utf8');\n } catch (e) {\n this.errorMsg = `Failed to create temp file: ${(e as Error).message}`;\n this.status = 'pending';\n this.render(false);\n return;\n }\n\n // 2. Resolve Editor\n const { cmd, args } = this.resolveEditor();\n const editorArgs = [...args, this.tempFilePath];\n\n // 3. Pause Mep\n // Temporarily disable mouse tracking if it was enabled\n const shouldEnableMouse = (this.options as any).mouse !== false && this.capabilities.hasMouse;\n if (shouldEnableMouse) {\n this.print(ANSI.DISABLE_MOUSE);\n }\n\n // Pause stdin and raw mode to allow child process to take over TTY\n this.stdin.setRawMode(false);\n this.stdin.pause();\n\n // 4. Spawn\n const child = spawn(cmd, editorArgs, {\n stdio: 'inherit',\n shell: true\n });\n\n child.on('error', (err) => {\n this.restoreMep();\n this.status = 'pending';\n this.errorMsg = `Could not launch editor '${cmd}': ${err.message}`;\n this.render(false);\n });\n\n child.on('exit', (code) => {\n // 5. Read Result\n let content = initialContent;\n try {\n if (this.tempFilePath && fs.existsSync(this.tempFilePath)) {\n content = fs.readFileSync(this.tempFilePath, 'utf8');\n fs.unlinkSync(this.tempFilePath); // Cleanup\n this.tempFilePath = null; // Mark as cleaned\n }\n } catch (_e) {\n // Ignore read/delete errors\n }\n\n this.restoreMep();\n\n if (code !== 0) {\n this.status = 'pending';\n this.errorMsg = `Editor exited with code ${code}`;\n this.render(false);\n return;\n }\n\n // Success\n this.status = 'done';\n\n if (content.endsWith('\\n')) {\n content = content.slice(0, -1);\n }\n if (content.endsWith('\\r')) {\n content = content.slice(0, -1);\n }\n\n this.submit(content);\n });\n }\n\n private restoreMep() {\n this.stdin.resume();\n this.stdin.setRawMode(true);\n\n // Re-enable mouse if it was enabled\n const shouldEnableMouse = (this.options as any).mouse !== false && this.capabilities.hasMouse;\n if (shouldEnableMouse) {\n this.print(ANSI.SET_ANY_EVENT_MOUSE + ANSI.SET_SGR_EXT_MODE_MOUSE);\n }\n this.print(ANSI.HIDE_CURSOR); // Ensure cursor is hidden again for Mep\n }\n}\n"],"names":["EditorPrompt","Prompt","cleanup","tempFilePath","fs","existsSync","unlinkSync","_error","render","firstRender","status","icon","theme","success","symbols","tick","main","message","title","options","ANSI","RESET","hint","waitUserInput","muted","output","BOLD","errorMsg","error","renderFrame","setTimeout","spawnEditor","handleInput","char","resolveEditor","envEditor","process","env","VISUAL","EDITOR","parts","split","cmd","args","slice","platform","ext","extension","safeExt","startsWith","filename","Date","now","Math","floor","random","path","join","os","tmpdir","initialContent","initial","writeFileSync","e","editorArgs","shouldEnableMouse","mouse","capabilities","hasMouse","print","DISABLE_MOUSE","stdin","setRawMode","pause","child","spawn","stdio","shell","on","err","restoreMep","code","content","readFileSync","_e","endsWith","submit","resume","SET_ANY_EVENT_MOUSE","SET_SGR_EXT_MODE_MOUSE","HIDE_CURSOR","undefined"],"mappings":"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"}