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
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 CodeTease
3
+ Copyright (c) 2025-2026 CodeTease
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -255,6 +255,26 @@ const result = await new Pipeline<Context>()
255
255
  .run();
256
256
  ```
257
257
 
258
+ ## Extensions (Custom Prompts)
259
+
260
+ Mep is fully extensible. You can register your own prompt components and access them through the unified `MepCLI.prompt()` API with full Type Safety.
261
+
262
+ ```typescript
263
+ import { MepCLI } from 'mepcli';
264
+ import { MyPrompt } from './MyPrompt';
265
+
266
+ // 1. Register
267
+ MepCLI.register('custom', MyPrompt);
268
+
269
+ // 2. Use with full type support
270
+ const result = await MepCLI.prompt({
271
+ type: 'custom',
272
+ message: 'Hello from extension!'
273
+ });
274
+ ```
275
+
276
+ See the **[Extension Registry Guide](./docs/guides/extension-registry.md)** for more details.
277
+
258
278
  ## Keyboard & Mouse Support
259
279
 
260
280
  For a detailed list of shortcuts and mouse interactions, please refer to the **[Shortcuts Documentation](./docs/features/shortcuts.md)**.
package/dist/ansi.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * ANSI Escape Codes
3
+ * Manual definitions to maintain zero-dependency status.
4
+ */
5
+ export declare const ANSI: {
6
+ RESET: string;
7
+ BOLD: string;
8
+ DIM: string;
9
+ ITALIC: string;
10
+ UNDERLINE: string;
11
+ REVERSE: string;
12
+ FG_GREEN: string;
13
+ FG_CYAN: string;
14
+ FG_YELLOW: string;
15
+ FG_RED: string;
16
+ FG_GRAY: string;
17
+ FG_WHITE: string;
18
+ FG_BLUE: string;
19
+ FG_MAGENTA: string;
20
+ FG_BLACK: string;
21
+ BG_YELLOW: string;
22
+ BG_BLUE: string;
23
+ BG_CYAN: string;
24
+ BG_GREEN: string;
25
+ BG_RED: string;
26
+ ERASE_LINE: string;
27
+ ERASE_DOWN: string;
28
+ CURSOR_LEFT: string;
29
+ HIDE_CURSOR: string;
30
+ SHOW_CURSOR: string;
31
+ UP: string;
32
+ DOWN: string;
33
+ SET_ANY_EVENT_MOUSE: string;
34
+ SET_SGR_EXT_MODE_MOUSE: string;
35
+ DISABLE_MOUSE: string;
36
+ };
package/dist/ansi.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ANSI",{enumerable:true,get:function(){return ANSI}});const ANSI={RESET:"\x1b[0m",BOLD:"\x1b[1m",DIM:"\x1b[2m",ITALIC:"\x1b[3m",UNDERLINE:"\x1b[4m",REVERSE:"\x1b[7m",FG_GREEN:"\x1b[32m",FG_CYAN:"\x1b[36m",FG_YELLOW:"\x1b[33m",FG_RED:"\x1b[31m",FG_GRAY:"\x1b[90m",FG_WHITE:"\x1b[37m",FG_BLUE:"\x1b[34m",FG_MAGENTA:"\x1b[35m",FG_BLACK:"\x1b[30m",BG_YELLOW:"\x1b[43m",BG_BLUE:"\x1b[44m",BG_CYAN:"\x1b[46m",BG_GREEN:"\x1b[42m",BG_RED:"\x1b[41m",ERASE_LINE:"\x1b[2K",ERASE_DOWN:"\x1b[J",CURSOR_LEFT:"\x1b[1000D",HIDE_CURSOR:"\x1b[?25l",SHOW_CURSOR:"\x1b[?25h",UP:"\x1b[A",DOWN:"\x1b[B",SET_ANY_EVENT_MOUSE:"\x1b[?1003h",SET_SGR_EXT_MODE_MOUSE:"\x1b[?1006h",DISABLE_MOUSE:"\x1b[?1003l\x1b[?1006l"};
package/dist/base.d.ts ADDED
@@ -0,0 +1,61 @@
1
+ import { MouseEvent } from './types';
2
+ import { detectCapabilities } from './utils';
3
+ /**
4
+ * Abstract base class for all prompts.
5
+ * Implements a Robust Linear Scan Diffing Engine.
6
+ */
7
+ export type PromptConstructor<T, O> = new (options: O) => Prompt<T, O>;
8
+ export declare abstract class Prompt<T, O> {
9
+ protected options: O;
10
+ protected value: any;
11
+ protected stdin: NodeJS.ReadStream;
12
+ protected stdout: NodeJS.WriteStream;
13
+ private _resolve?;
14
+ private _reject?;
15
+ private _inputParser;
16
+ private _onKeyHandler?;
17
+ private _onDataHandler?;
18
+ private static warnedComponents;
19
+ protected lastRenderLines: string[];
20
+ protected lastRenderHeight: number;
21
+ protected capabilities: ReturnType<typeof detectCapabilities>;
22
+ constructor(options: O);
23
+ /**
24
+ * Checks if running on Windows and logs a warning message once per component type.
25
+ * Call this in the constructor of problematic prompts.
26
+ */
27
+ protected checkWindowsAttention(): void;
28
+ /**
29
+ * Warn about experimental prompts.
30
+ * Call this in the constructor of experimental prompts.
31
+ */
32
+ protected warnExperimental(): void;
33
+ protected abstract render(firstRender: boolean): void;
34
+ protected abstract handleInput(char: string, key: Buffer): void;
35
+ protected handleMouse(_event: MouseEvent): void;
36
+ protected print(text: string): void;
37
+ run(): Promise<T>;
38
+ /**
39
+ * Pauses the input stream and removes listeners.
40
+ * Useful for yielding control to child processes.
41
+ */
42
+ protected pauseInput(): void;
43
+ /**
44
+ * Resumes the input stream and re-attaches listeners.
45
+ */
46
+ protected resumeInput(): void;
47
+ protected cleanup(): void;
48
+ protected submit(result: T): void;
49
+ protected cancel(reason: any): void;
50
+ /**
51
+ * Renders the frame using a linear scan diffing algorithm.
52
+ * Prevents flicker and handles height changes (expand/collapse) robustly.
53
+ */
54
+ protected renderFrame(content: string): void;
55
+ protected stripAnsi(str: string): string;
56
+ protected truncate(str: string, width: number): string;
57
+ protected isUp(char: string): boolean;
58
+ protected isDown(char: string): boolean;
59
+ protected isRight(char: string): boolean;
60
+ protected isLeft(char: string): boolean;
61
+ }
package/dist/base.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Prompt",{enumerable:true,get:function(){return Prompt}});const _ansi=require("./ansi");const _input=require("./input");const _utils=require("./utils");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let Prompt=class Prompt{checkWindowsAttention(){const componentName=this.constructor.name;if(process.platform==="win32"&&!Prompt.warnedComponents.has(componentName)){console.warn(`${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} ${componentName} may hang on Windows TTY after multiple cycles. `+`Press 'Enter' if unresponsive.`);Prompt.warnedComponents.add(componentName)}}warnExperimental(){const componentName=this.constructor.name;if(!Prompt.warnedComponents.has(componentName)){console.warn(`${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} ${componentName} is an experimental prompt and may have bugs or unexpected behavior. `+`Use with caution.`);Prompt.warnedComponents.add(componentName)}}handleMouse(_event){}print(text){this.stdout.write(text)}run(){return new Promise((resolve,reject)=>{this._resolve=resolve;this._reject=reject;if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(true)}this.stdin.resume();this.stdin.setEncoding("utf8");const shouldEnableMouse=this.options.mouse!==false&&this.capabilities.hasMouse;if(shouldEnableMouse){this.print(_ansi.ANSI.SET_ANY_EVENT_MOUSE+_ansi.ANSI.SET_SGR_EXT_MODE_MOUSE)}this.print(_ansi.ANSI.HIDE_CURSOR);this.render(true);this._onKeyHandler=(char,buffer)=>{if(char==="\x03"){this.cleanup();this.print(_ansi.ANSI.SHOW_CURSOR+"\n");if(this._reject)this._reject(new Error("User force closed"));return}this.handleInput(char,buffer)};this._inputParser.on("keypress",this._onKeyHandler);this._inputParser.on("mouse",event=>{this.handleMouse(event)});this._onDataHandler=buffer=>{this._inputParser.feed(buffer)};this.stdin.on("data",this._onDataHandler)})}pauseInput(){if(this._onDataHandler){this.stdin.removeListener("data",this._onDataHandler)}if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(false)}this.stdin.pause()}resumeInput(){if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(true)}this.stdin.resume();if(this._onDataHandler){this.stdin.on("data",this._onDataHandler)}}cleanup(){if(this._onDataHandler){this.stdin.removeListener("data",this._onDataHandler)}if(this._onKeyHandler){this._inputParser.removeListener("keypress",this._onKeyHandler)}this.print(_ansi.ANSI.DISABLE_MOUSE);if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(false)}this.stdin.pause();this.print(_ansi.ANSI.SHOW_CURSOR)}submit(result){this.cleanup();this.print("\n");if(this._resolve)this._resolve(result)}cancel(reason){this.cleanup();this.print("\n");if(this._reject)this._reject(reason)}renderFrame(content){const width=this.stdout.columns||80;const rawLines=content.split("\n");const newLines=rawLines.map(line=>this.truncate(line,width));if(this.lastRenderLines.length===0){this.print(newLines.join("\n"));this.lastRenderLines=newLines;this.lastRenderHeight=newLines.length;return}let outputBuffer="";if(this.lastRenderHeight>1){outputBuffer+=`\x1b[${this.lastRenderHeight-1}A`}outputBuffer+="\r";for(let i=0;i<newLines.length;i++){const newLine=newLines[i];if(i>0){if(i<this.lastRenderLines.length){outputBuffer+="\x1b[B\r"}else{outputBuffer+="\n"}}if(i<this.lastRenderLines.length){const oldLine=this.lastRenderLines[i];if(newLine!==oldLine){outputBuffer+=_ansi.ANSI.ERASE_LINE+newLine}}else{outputBuffer+=newLine}}if(newLines.length<this.lastRenderLines.length){outputBuffer+="\n";outputBuffer+=_ansi.ANSI.ERASE_DOWN;outputBuffer+=`\x1b[A`}this.print(outputBuffer);this.lastRenderLines=newLines;this.lastRenderHeight=newLines.length}stripAnsi(str){return(0,_utils.stripAnsi)(str)}truncate(str,width){const visualWidth=(0,_utils.stringWidth)(str);if(visualWidth<=width){return str}let currentWidth=0;let cutIndex=0;let inAnsi=false;for(let i=0;i<str.length;i++){if(str[i]==="\x1b")inAnsi=true;if(!inAnsi){const code=str.charCodeAt(i);const charWidth=code>255?2:1;if(currentWidth+charWidth>width-3){break}currentWidth+=charWidth}else{if(str[i]==="m"||str[i]>="A"&&str[i]<="Z")inAnsi=false}cutIndex=i+1}return str.substring(0,cutIndex)+"..."+_ansi.ANSI.RESET}isUp(char){return char==="\x1b[A"||char==="\x1bOA"}isDown(char){return char==="\x1b[B"||char==="\x1bOB"}isRight(char){return char==="\x1b[C"||char==="\x1bOC"}isLeft(char){return char==="\x1b[D"||char==="\x1bOD"}constructor(options){_define_property(this,"options",void 0);_define_property(this,"value",void 0);_define_property(this,"stdin",void 0);_define_property(this,"stdout",void 0);_define_property(this,"_resolve",void 0);_define_property(this,"_reject",void 0);_define_property(this,"_inputParser",void 0);_define_property(this,"_onKeyHandler",void 0);_define_property(this,"_onDataHandler",void 0);_define_property(this,"lastRenderLines",[]);_define_property(this,"lastRenderHeight",0);_define_property(this,"capabilities",void 0);this.options=options;this.stdin=process.stdin;this.stdout=process.stdout;this._inputParser=new _input.InputParser;this.capabilities=(0,_utils.detectCapabilities)()}};_define_property(Prompt,"warnedComponents",new Set);