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 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/checkbox.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { CheckboxOptions, MouseEvent } from '../types';\n\n// --- Implementation: Checkbox Prompt ---\nexport class CheckboxPrompt<V> extends Prompt<any[], CheckboxOptions<V>> {\n private selectedIndex: number = 0;\n private checkedState: boolean[];\n private errorMsg: string = '';\n // Pagination state\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n constructor(options: CheckboxOptions<V>) {\n super(options);\n this.checkedState = options.choices.map(c => !!c.selected);\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 we don't scroll past bounds if list is small\n if (this.options.choices.length <= this.pageSize) {\n this.scrollTop = 0;\n }\n\n let output = '';\n\n // Header\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(Space: toggle, a: all, x: none, Enter: submit)${ANSI.RESET}`;\n\n // List\n const choices = this.options.choices;\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n output += '\\n'; // New line for each item\n\n const cursor = actualIndex === this.selectedIndex ? `${theme.main}${symbols.pointer}${ANSI.RESET}` : ' ';\n const isChecked = this.checkedState[actualIndex];\n const checkbox = isChecked\n ? `${theme.success}${symbols.checked}${ANSI.RESET}`\n : `${theme.muted}${symbols.unchecked}${ANSI.RESET}`;\n\n const title = actualIndex === this.selectedIndex\n ? `${theme.main}${choice.title}${ANSI.RESET}`\n : choice.title;\n\n output += `${cursor} ${checkbox} ${title}`;\n });\n\n // Indication of more items\n if (choices.length > this.pageSize) {\n // const progress = ` ${this.scrollTop + 1}-${Math.min(this.scrollTop + this.pageSize, choices.length)} of ${choices.length}`;\n }\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { min = 0, max } = this.options;\n\n if (selectedCount < min) {\n this.errorMsg = `You must select at least ${min} options.`;\n this.render(false);\n return;\n }\n if (max && selectedCount > max) {\n this.errorMsg = `You can only select up to ${max} options.`;\n this.render(false);\n return;\n }\n\n this.cleanup();\n\n const results = this.options.choices\n .filter((_, i) => this.checkedState[i])\n .map(c => c.value);\n\n if ((this as any)._resolve) (this as any)._resolve(results);\n return;\n }\n\n // --- Batch Shortcuts ---\n\n // 'a': Select All\n if (char === 'a') {\n if (this.options.max && this.options.choices.length > this.options.max) {\n this.errorMsg = `Cannot select all: Max limit is ${this.options.max}`;\n } else {\n this.checkedState.fill(true);\n this.errorMsg = '';\n }\n this.render(false);\n return;\n }\n\n // 'x' or 'n': Select None\n if (char === 'x' || char === 'n') {\n this.checkedState.fill(false);\n this.errorMsg = '';\n this.render(false);\n return;\n }\n\n // 'i': Invert Selection\n if (char === 'i') {\n const potentialCount = this.checkedState.filter(s => !s).length;\n if (this.options.max && potentialCount > this.options.max) {\n this.errorMsg = `Cannot invert: Result exceeds max limit ${this.options.max}`;\n } else {\n this.checkedState = this.checkedState.map(s => !s);\n this.errorMsg = '';\n }\n this.render(false);\n return;\n }\n\n // Space Toggle\n if (char === ' ') {\n const currentChecked = this.checkedState[this.selectedIndex];\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { max } = this.options;\n\n if (!currentChecked && max && selectedCount >= max) {\n this.errorMsg = `Max ${max} selections allowed.`;\n } else {\n this.checkedState[this.selectedIndex] = !currentChecked;\n this.errorMsg = '';\n }\n this.render(false);\n }\n\n if (this.isUp(char)) { // Up\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;\n this.errorMsg = '';\n this.render(false);\n }\n if (this.isDown(char)) { // Down\n this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.errorMsg = '';\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;\n this.errorMsg = '';\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.errorMsg = '';\n this.render(false);\n }\n }\n }\n}\n"],"names":["CheckboxPrompt","Prompt","render","_firstRender","selectedIndex","scrollTop","pageSize","options","choices","length","output","icon","errorMsg","theme","error","symbols","cross","success","ANSI","BOLD","title","message","RESET","muted","visibleChoices","slice","forEach","choice","index","actualIndex","cursor","main","pointer","isChecked","checkedState","checkbox","checked","unchecked","renderFrame","handleInput","char","selectedCount","filter","Boolean","min","max","cleanup","results","_","i","map","c","value","_resolve","fill","potentialCount","s","currentChecked","isUp","isDown","handleMouse","event","action","scroll","selected"],"mappings":";;;;+BAOaA;;;eAAAA;;;sBAPQ;sBACE;uBACD;yBACE;;;;;;;;;;;;;;AAIjB,IAAA,AAAMA,iBAAN,MAAMA,uBAA0BC,YAAM;IAa/BC,OAAOC,YAAqB,EAAE;QACpC,oBAAoB;QACpB,IAAI,IAAI,CAACC,aAAa,GAAG,IAAI,CAACC,SAAS,EAAE;YACrC,IAAI,CAACA,SAAS,GAAG,IAAI,CAACD,aAAa;QACvC,OAAO,IAAI,IAAI,CAACA,aAAa,IAAI,IAAI,CAACC,SAAS,GAAG,IAAI,CAACC,QAAQ,EAAE;YAC7D,IAAI,CAACD,SAAS,GAAG,IAAI,CAACD,aAAa,GAAG,IAAI,CAACE,QAAQ,GAAG;QAC1D;QAEA,sDAAsD;QACtD,IAAI,IAAI,CAACC,OAAO,CAACC,OAAO,CAACC,MAAM,IAAI,IAAI,CAACH,QAAQ,EAAE;YAC9C,IAAI,CAACD,SAAS,GAAG;QACrB;QAEA,IAAIK,SAAS;QAEb,SAAS;QACT,MAAMC,OAAO,IAAI,CAACC,QAAQ,GAAG,GAAGC,YAAK,CAACC,KAAK,GAAGC,gBAAO,CAACC,KAAK,EAAE,GAAG,GAAGH,YAAK,CAACI,OAAO,CAAC,CAAC,CAAC;QACnFP,UAAU,GAAGC,KAAK,CAAC,EAAEO,UAAI,CAACC,IAAI,GAAGN,YAAK,CAACO,KAAK,GAAG,IAAI,CAACb,OAAO,CAACc,OAAO,GAAGH,UAAI,CAACI,KAAK,CAAC,CAAC,EAAET,YAAK,CAACU,KAAK,CAAC,+CAA+C,EAAEL,UAAI,CAACI,KAAK,EAAE;QAE7J,OAAO;QACP,MAAMd,UAAU,IAAI,CAACD,OAAO,CAACC,OAAO;QACpC,MAAMgB,iBAAiBhB,QAAQiB,KAAK,CAAC,IAAI,CAACpB,SAAS,EAAE,IAAI,CAACA,SAAS,GAAG,IAAI,CAACC,QAAQ;QAEnFkB,eAAeE,OAAO,CAAC,CAACC,QAAQC;YAC5B,MAAMC,cAAc,IAAI,CAACxB,SAAS,GAAGuB;YACrClB,UAAU,MAAM,yBAAyB;YAEzC,MAAMoB,SAASD,gBAAgB,IAAI,CAACzB,aAAa,GAAG,GAAGS,YAAK,CAACkB,IAAI,GAAGhB,gBAAO,CAACiB,OAAO,GAAGd,UAAI,CAACI,KAAK,EAAE,GAAG;YACrG,MAAMW,YAAY,IAAI,CAACC,YAAY,CAACL,YAAY;YAChD,MAAMM,WAAWF,YACX,GAAGpB,YAAK,CAACI,OAAO,GAAGF,gBAAO,CAACqB,OAAO,GAAGlB,UAAI,CAACI,KAAK,EAAE,GACjD,GAAGT,YAAK,CAACU,KAAK,GAAGR,gBAAO,CAACsB,SAAS,GAAGnB,UAAI,CAACI,KAAK,EAAE;YAEvD,MAAMF,QAAQS,gBAAgB,IAAI,CAACzB,aAAa,GAC1C,GAAGS,YAAK,CAACkB,IAAI,GAAGJ,OAAOP,KAAK,GAAGF,UAAI,CAACI,KAAK,EAAE,GAC3CK,OAAOP,KAAK;YAElBV,UAAU,GAAGoB,OAAO,CAAC,EAAEK,SAAS,CAAC,EAAEf,OAAO;QAC9C;QAEA,2BAA2B;QAC3B,IAAIZ,QAAQC,MAAM,GAAG,IAAI,CAACH,QAAQ,EAAE;QAChC,8HAA8H;QAClI;QAEA,IAAI,IAAI,CAACM,QAAQ,EAAE;YACfF,UAAU,CAAC,EAAE,EAAEG,YAAK,CAACC,KAAK,CAAC,GAAG,EAAE,IAAI,CAACF,QAAQ,GAAGM,UAAI,CAACI,KAAK,EAAE;QAChE;QAEA,IAAI,CAACgB,WAAW,CAAC5B;IACrB;IAEU6B,YAAYC,IAAY,EAAE;QAChC,IAAIA,SAAS,QAAQA,SAAS,MAAM;YAChC,MAAMC,gBAAgB,IAAI,CAACP,YAAY,CAACQ,MAAM,CAACC,SAASlC,MAAM;YAC9D,MAAM,EAAEmC,MAAM,CAAC,EAAEC,GAAG,EAAE,GAAG,IAAI,CAACtC,OAAO;YAErC,IAAIkC,gBAAgBG,KAAK;gBACrB,IAAI,CAAChC,QAAQ,GAAG,CAAC,yBAAyB,EAAEgC,IAAI,SAAS,CAAC;gBAC1D,IAAI,CAAC1C,MAAM,CAAC;gBACZ;YACJ;YACA,IAAI2C,OAAOJ,gBAAgBI,KAAK;gBAC5B,IAAI,CAACjC,QAAQ,GAAG,CAAC,0BAA0B,EAAEiC,IAAI,SAAS,CAAC;gBAC3D,IAAI,CAAC3C,MAAM,CAAC;gBACZ;YACJ;YAEA,IAAI,CAAC4C,OAAO;YAEZ,MAAMC,UAAU,IAAI,CAACxC,OAAO,CAACC,OAAO,CAC/BkC,MAAM,CAAC,CAACM,GAAGC,IAAM,IAAI,CAACf,YAAY,CAACe,EAAE,EACrCC,GAAG,CAACC,CAAAA,IAAKA,EAAEC,KAAK;YAErB,IAAI,AAAC,IAAI,CAASC,QAAQ,EAAE,AAAC,IAAI,CAASA,QAAQ,CAACN;YACnD;QACJ;QAEA,0BAA0B;QAE1B,kBAAkB;QAClB,IAAIP,SAAS,KAAK;YACd,IAAI,IAAI,CAACjC,OAAO,CAACsC,GAAG,IAAI,IAAI,CAACtC,OAAO,CAACC,OAAO,CAACC,MAAM,GAAG,IAAI,CAACF,OAAO,CAACsC,GAAG,EAAE;gBACpE,IAAI,CAACjC,QAAQ,GAAG,CAAC,gCAAgC,EAAE,IAAI,CAACL,OAAO,CAACsC,GAAG,EAAE;YACzE,OAAO;gBACH,IAAI,CAACX,YAAY,CAACoB,IAAI,CAAC;gBACvB,IAAI,CAAC1C,QAAQ,GAAG;YACpB;YACA,IAAI,CAACV,MAAM,CAAC;YACZ;QACJ;QAEA,0BAA0B;QAC1B,IAAIsC,SAAS,OAAOA,SAAS,KAAK;YAC9B,IAAI,CAACN,YAAY,CAACoB,IAAI,CAAC;YACvB,IAAI,CAAC1C,QAAQ,GAAG;YAChB,IAAI,CAACV,MAAM,CAAC;YACZ;QACJ;QAEA,wBAAwB;QACxB,IAAIsC,SAAS,KAAK;YACd,MAAMe,iBAAiB,IAAI,CAACrB,YAAY,CAACQ,MAAM,CAACc,CAAAA,IAAK,CAACA,GAAG/C,MAAM;YAC/D,IAAI,IAAI,CAACF,OAAO,CAACsC,GAAG,IAAIU,iBAAiB,IAAI,CAAChD,OAAO,CAACsC,GAAG,EAAE;gBACvD,IAAI,CAACjC,QAAQ,GAAG,CAAC,wCAAwC,EAAE,IAAI,CAACL,OAAO,CAACsC,GAAG,EAAE;YACjF,OAAO;gBACH,IAAI,CAACX,YAAY,GAAG,IAAI,CAACA,YAAY,CAACgB,GAAG,CAACM,CAAAA,IAAK,CAACA;gBAChD,IAAI,CAAC5C,QAAQ,GAAG;YACpB;YACA,IAAI,CAACV,MAAM,CAAC;YACZ;QACJ;QAEA,eAAe;QACf,IAAIsC,SAAS,KAAK;YACd,MAAMiB,iBAAiB,IAAI,CAACvB,YAAY,CAAC,IAAI,CAAC9B,aAAa,CAAC;YAC5D,MAAMqC,gBAAgB,IAAI,CAACP,YAAY,CAACQ,MAAM,CAACC,SAASlC,MAAM;YAC9D,MAAM,EAAEoC,GAAG,EAAE,GAAG,IAAI,CAACtC,OAAO;YAE5B,IAAI,CAACkD,kBAAkBZ,OAAOJ,iBAAiBI,KAAK;gBAChD,IAAI,CAACjC,QAAQ,GAAG,CAAC,IAAI,EAAEiC,IAAI,oBAAoB,CAAC;YACpD,OAAO;gBACH,IAAI,CAACX,YAAY,CAAC,IAAI,CAAC9B,aAAa,CAAC,GAAG,CAACqD;gBACzC,IAAI,CAAC7C,QAAQ,GAAG;YACpB;YACA,IAAI,CAACV,MAAM,CAAC;QAChB;QAEA,IAAI,IAAI,CAACwD,IAAI,CAAClB,OAAO;YACjB,IAAI,CAACpC,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACG,OAAO,CAACC,OAAO,CAACC,MAAM,GAAG;YACrG,IAAI,CAACG,QAAQ,GAAG;YAChB,IAAI,CAACV,MAAM,CAAC;QAChB;QACA,IAAI,IAAI,CAACyD,MAAM,CAACnB,OAAO;YACnB,IAAI,CAACpC,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,CAACG,OAAO,CAACC,OAAO,CAACC,MAAM,GAAG,IAAI,IAAI,CAACL,aAAa,GAAG,IAAI;YACrG,IAAI,CAACQ,QAAQ,GAAG;YAChB,IAAI,CAACV,MAAM,CAAC;QAChB;IACJ;IAEU0D,YAAYC,KAAiB,EAAE;QACrC,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,IAAID,MAAME,MAAM,KAAK,MAAM;gBACvB,IAAI,CAAC3D,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACG,OAAO,CAACC,OAAO,CAACC,MAAM,GAAG;gBACrG,IAAI,CAACG,QAAQ,GAAG;gBAChB,IAAI,CAACV,MAAM,CAAC;YAChB,OAAO,IAAI2D,MAAME,MAAM,KAAK,QAAQ;gBAChC,IAAI,CAAC3D,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,CAACG,OAAO,CAACC,OAAO,CAACC,MAAM,GAAG,IAAI,IAAI,CAACL,aAAa,GAAG,IAAI;gBACrG,IAAI,CAACQ,QAAQ,GAAG;gBAChB,IAAI,CAACV,MAAM,CAAC;YAChB;QACJ;IACJ;IA7JA,YAAYK,OAA2B,CAAE;QACrC,KAAK,CAACA,UARV,uBAAQH,iBAAwB,IAChC,uBAAQ8B,gBAAR,KAAA,IACA,uBAAQtB,YAAmB,KAC3B,mBAAmB;QACnB,uBAAQP,aAAoB,IAC5B,uBAAiBC,YAAmB;QAIhC,IAAI,CAAC4B,YAAY,GAAG3B,QAAQC,OAAO,CAAC0C,GAAG,CAACC,CAAAA,IAAK,CAAC,CAACA,EAAEa,QAAQ;IAC7D;AA2JJ"}
@@ -1,271 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "CodePrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return CodePrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _utils = require("../utils");
15
- const _highlight = require("../highlight");
16
- function _define_property(obj, key, value) {
17
- if (key in obj) {
18
- Object.defineProperty(obj, key, {
19
- value: value,
20
- enumerable: true,
21
- configurable: true,
22
- writable: true
23
- });
24
- } else {
25
- obj[key] = value;
26
- }
27
- return obj;
28
- }
29
- let CodePrompt = class CodePrompt extends _base.Prompt {
30
- parseTemplate() {
31
- const regex = /\$\{([a-zA-Z0-9_]+)\}/g;
32
- let lastIndex = 0;
33
- let match;
34
- while((match = regex.exec(this.options.template)) !== null){
35
- if (match.index > lastIndex) {
36
- this.tokens.push({
37
- type: 'static',
38
- value: this.options.template.substring(lastIndex, match.index)
39
- });
40
- }
41
- this.tokens.push({
42
- type: 'variable',
43
- value: match[1]
44
- });
45
- this.variableTokens.push(this.tokens.length - 1);
46
- lastIndex = regex.lastIndex;
47
- }
48
- if (lastIndex < this.options.template.length) {
49
- this.tokens.push({
50
- type: 'static',
51
- value: this.options.template.substring(lastIndex)
52
- });
53
- }
54
- }
55
- // FIX: Override cleanup to ensure cursor is reset to bottom
56
- cleanup() {
57
- // If the cursor is currently moved up (editing mode), move it back down
58
- // before the prompt exits. This prevents the next output (or result)
59
- // from overwriting the bottom part of our UI.
60
- if (this.lastLinesUp > 0) {
61
- this.print(`\x1b[${this.lastLinesUp}B`);
62
- this.lastLinesUp = 0;
63
- }
64
- super.cleanup();
65
- }
66
- render(firstRender) {
67
- if (!firstRender && this.lastLinesUp > 0) {
68
- this.print(`\x1b[${this.lastLinesUp}B`);
69
- }
70
- this.lastLinesUp = 0;
71
- // 1. Build Full Raw Text & Identify Active Variable Range
72
- let fullRawText = '';
73
- let activeVarStart = -1;
74
- let activeVarEnd = -1;
75
- const activeTokenIdx = this.variableTokens[this.activeVarIndex];
76
- // const activeVarName = this.tokens[activeTokenIdx].value;
77
- this.tokens.forEach((token, idx)=>{
78
- const val = token.type === 'static' ? token.value : this.values[token.value] || '';
79
- if (idx === activeTokenIdx) {
80
- activeVarStart = fullRawText.length;
81
- activeVarEnd = activeVarStart + val.length;
82
- }
83
- fullRawText += val;
84
- });
85
- // 2. Syntax Highlight with Overlap Logic
86
- let highlighted = '';
87
- const shouldHighlight = this.options.highlight !== false;
88
- if (shouldHighlight) {
89
- const lang = this.options.language || 'json';
90
- const highlightedText = (0, _highlight.highlight)(fullRawText, lang);
91
- let visibleIdx = 0;
92
- let activeColor = ''; // Tracks the last set color
93
- for(let i = 0; i < highlightedText.length; i++){
94
- const char = highlightedText[i];
95
- if (char === '\x1b') {
96
- // Start of ANSI sequence
97
- let sequence = char;
98
- i++;
99
- while(i < highlightedText.length && highlightedText[i] !== 'm'){
100
- sequence += highlightedText[i];
101
- i++;
102
- }
103
- if (i < highlightedText.length) sequence += 'm'; // Append terminator
104
- // Interpret sequence (naive)
105
- if (sequence === _ansi.ANSI.RESET || sequence === '\x1b[0m') {
106
- activeColor = '';
107
- } else {
108
- // Assuming it's a color code.
109
- activeColor = sequence;
110
- }
111
- // If we are INSIDE the active range, and we encounter a color change/reset,
112
- // we must ensure UNDERLINE is kept/restored.
113
- if (visibleIdx >= activeVarStart && visibleIdx < activeVarEnd) {
114
- // Output the sequence (e.g. a color change)
115
- highlighted += sequence;
116
- // Then re-assert underline
117
- highlighted += _ansi.ANSI.UNDERLINE;
118
- } else {
119
- highlighted += sequence;
120
- }
121
- continue;
122
- }
123
- // Normal char
124
- if (visibleIdx === activeVarStart) {
125
- highlighted += `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}`;
126
- }
127
- highlighted += char;
128
- visibleIdx++;
129
- if (visibleIdx === activeVarEnd) {
130
- highlighted += _ansi.ANSI.RESET;
131
- // Restore previous color if any
132
- if (activeColor) {
133
- highlighted += activeColor;
134
- }
135
- }
136
- }
137
- highlighted += _ansi.ANSI.RESET;
138
- } else {
139
- this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, _ansi.ANSI.RESET, (s)=>highlighted += s);
140
- }
141
- // 3. Output Frame
142
- const warningMsg = shouldHighlight ? `${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} Syntax highlighting is an experimental feature.\n` : '';
143
- const prefix = `${warningMsg}${_theme.theme.success}? ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
144
- const suffix = `\n${_theme.theme.muted}(Tab to next, Enter to submit)${_ansi.ANSI.RESET}`;
145
- const fullOutput = prefix + highlighted + suffix;
146
- this.renderFrame(fullOutput);
147
- // 4. Cursor Calculation
148
- const cursorAbsPos = activeVarStart + this.cursor;
149
- const textBeforeCursor = fullRawText.substring(0, cursorAbsPos);
150
- const rowsBefore = textBeforeCursor.split('\n');
151
- const cursorRow = rowsBefore.length - 1;
152
- const cursorCol = (0, _utils.stringWidth)(rowsBefore[rowsBefore.length - 1]);
153
- const totalSnippetLines = fullRawText.split('\n').length;
154
- // linesUp calculation: 1 (suffix) + remaining snippet lines
155
- const linesUp = 1 + (totalSnippetLines - 1 - cursorRow);
156
- this.print(_ansi.ANSI.SHOW_CURSOR);
157
- if (linesUp > 0) {
158
- this.print(`\x1b[${linesUp}A`);
159
- this.lastLinesUp = linesUp;
160
- }
161
- this.print(_ansi.ANSI.CURSOR_LEFT);
162
- if (cursorCol > 0) {
163
- this.print(`\x1b[${cursorCol}C`);
164
- }
165
- }
166
- appendSegment(text, absStart, activeStart, activeEnd, syntaxColor, append) {
167
- const absEnd = absStart + text.length;
168
- const overlapStart = Math.max(absStart, activeStart);
169
- const overlapEnd = Math.min(absEnd, activeEnd);
170
- if (overlapStart < overlapEnd) {
171
- if (absStart < overlapStart) {
172
- const part = text.substring(0, overlapStart - absStart);
173
- append(`${syntaxColor}${part}${_ansi.ANSI.RESET}`);
174
- }
175
- const activePart = text.substring(overlapStart - absStart, overlapEnd - absStart);
176
- append(`${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${activePart}${_ansi.ANSI.RESET}`);
177
- if (absEnd > overlapEnd) {
178
- const part = text.substring(overlapEnd - absStart);
179
- append(`${syntaxColor}${part}${_ansi.ANSI.RESET}`);
180
- }
181
- } else {
182
- append(`${syntaxColor}${text}${_ansi.ANSI.RESET}`);
183
- }
184
- }
185
- handleInput(char, _key) {
186
- if (char === '\u001b[Z') {
187
- this.moveFocus(-1);
188
- return;
189
- }
190
- if (char === '\t') {
191
- this.moveFocus(1);
192
- return;
193
- }
194
- if (char === '\r' || char === '\n') {
195
- this.submitCode();
196
- return;
197
- }
198
- const activeTokenIdx = this.variableTokens[this.activeVarIndex];
199
- const varName = this.tokens[activeTokenIdx].value;
200
- const val = this.values[varName] || '';
201
- if (char === '\u0008' || char === '\x7f') {
202
- if (this.cursor > 0) {
203
- const pre = val.slice(0, this.cursor - 1);
204
- const post = val.slice(this.cursor);
205
- this.values[varName] = pre + post;
206
- this.cursor--;
207
- this.render(false);
208
- }
209
- return;
210
- }
211
- if (this.isLeft(char)) {
212
- if (this.cursor > 0) this.cursor--;
213
- this.render(false);
214
- return;
215
- }
216
- if (this.isRight(char)) {
217
- if (this.cursor < val.length) this.cursor++;
218
- this.render(false);
219
- return;
220
- }
221
- if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
222
- const pre = val.slice(0, this.cursor);
223
- const post = val.slice(this.cursor);
224
- this.values[varName] = pre + char + post;
225
- this.cursor += char.length;
226
- this.render(false);
227
- }
228
- }
229
- handleMouse(event) {
230
- if (event.action === 'scroll') {
231
- if (event.scroll === 'up') this.moveFocus(-1);
232
- else if (event.scroll === 'down') this.moveFocus(1);
233
- }
234
- }
235
- moveFocus(direction) {
236
- const nextIndex = this.activeVarIndex + direction;
237
- if (nextIndex >= 0 && nextIndex < this.variableTokens.length) {
238
- this.activeVarIndex = nextIndex;
239
- const varName = this.tokens[this.variableTokens[this.activeVarIndex]].value;
240
- this.cursor = (this.values[varName] || '').length;
241
- this.render(false);
242
- }
243
- }
244
- submitCode() {
245
- let result = '';
246
- this.tokens.forEach((token)=>{
247
- if (token.type === 'static') {
248
- result += token.value;
249
- } else {
250
- result += this.values[token.value] || '';
251
- }
252
- });
253
- this.submit(result);
254
- }
255
- constructor(options){
256
- super(options), _define_property(this, "tokens", []), _define_property(this, "variableTokens", []), _define_property(this, "values", {}), _define_property(this, "activeVarIndex", 0), _define_property(this, "cursor", 0), _define_property(this, "lastLinesUp", 0);
257
- this.parseTemplate();
258
- // Init values
259
- this.variableTokens.forEach((idx)=>{
260
- const name = this.tokens[idx].value;
261
- this.values[name] = this.options.values && this.options.values[name] || '';
262
- });
263
- // Init cursor at end of first var
264
- if (this.variableTokens.length > 0) {
265
- const activeName = this.tokens[this.variableTokens[0]].value;
266
- this.cursor = this.values[activeName].length;
267
- }
268
- }
269
- };
270
-
271
- //# sourceMappingURL=code.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/code.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { CodeOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\nimport { highlight } from '../highlight';\n\ninterface Token {\n type: 'static' | 'variable';\n value: string;\n}\n\nexport class CodePrompt extends Prompt<string, CodeOptions> {\n private tokens: Token[] = [];\n private variableTokens: number[] = [];\n private values: Record<string, string> = {};\n private activeVarIndex: number = 0;\n private cursor: number = 0;\n private lastLinesUp: number = 0;\n\n constructor(options: CodeOptions) {\n super(options);\n this.parseTemplate();\n // Init values\n this.variableTokens.forEach(idx => {\n const name = this.tokens[idx].value;\n this.values[name] = (this.options.values && this.options.values[name]) || '';\n });\n\n // Init cursor at end of first var\n if (this.variableTokens.length > 0) {\n const activeName = this.tokens[this.variableTokens[0]].value;\n this.cursor = this.values[activeName].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 // FIX: Override cleanup to ensure cursor is reset to bottom\n protected cleanup() {\n // If the cursor is currently moved up (editing mode), move it back down\n // before the prompt exits. This prevents the next output (or result)\n // from overwriting the bottom part of our UI.\n if (this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n this.lastLinesUp = 0;\n }\n super.cleanup();\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 // 1. Build Full Raw Text & Identify Active Variable Range\n let fullRawText = '';\n let activeVarStart = -1;\n let activeVarEnd = -1;\n\n const activeTokenIdx = this.variableTokens[this.activeVarIndex];\n // const activeVarName = this.tokens[activeTokenIdx].value;\n\n this.tokens.forEach((token, idx) => {\n const val = (token.type === 'static') ? token.value : (this.values[token.value] || '');\n\n if (idx === activeTokenIdx) {\n activeVarStart = fullRawText.length;\n activeVarEnd = activeVarStart + val.length;\n }\n\n fullRawText += val;\n });\n\n // 2. Syntax Highlight with Overlap Logic\n let highlighted = '';\n const shouldHighlight = this.options.highlight !== false;\n\n if (shouldHighlight) {\n const lang = this.options.language || 'json';\n const highlightedText = highlight(fullRawText, lang);\n\n let visibleIdx = 0;\n let activeColor = ''; // Tracks the last set color\n\n for (let i = 0; i < highlightedText.length; i++) {\n const char = highlightedText[i];\n\n if (char === '\\x1b') {\n // Start of ANSI sequence\n let sequence = char;\n i++;\n while (i < highlightedText.length && highlightedText[i] !== 'm') {\n sequence += highlightedText[i];\n i++;\n }\n if (i < highlightedText.length) sequence += 'm'; // Append terminator\n\n // Interpret sequence (naive)\n if (sequence === ANSI.RESET || sequence === '\\x1b[0m') {\n activeColor = '';\n } else {\n // Assuming it's a color code.\n activeColor = sequence;\n }\n\n // If we are INSIDE the active range, and we encounter a color change/reset,\n // we must ensure UNDERLINE is kept/restored.\n if (visibleIdx >= activeVarStart && visibleIdx < activeVarEnd) {\n // Output the sequence (e.g. a color change)\n highlighted += sequence;\n // Then re-assert underline\n highlighted += ANSI.UNDERLINE;\n } else {\n highlighted += sequence;\n }\n continue;\n }\n\n // Normal char\n if (visibleIdx === activeVarStart) {\n highlighted += `${theme.main}${ANSI.UNDERLINE}`;\n }\n\n highlighted += char;\n visibleIdx++;\n\n if (visibleIdx === activeVarEnd) {\n highlighted += ANSI.RESET;\n // Restore previous color if any\n if (activeColor) {\n highlighted += activeColor;\n }\n }\n }\n highlighted += ANSI.RESET;\n } else {\n this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, ANSI.RESET, (s) => highlighted += s);\n }\n\n\n // 3. Output Frame\n const warningMsg = shouldHighlight\n ? `${ANSI.FG_YELLOW}Warning:${ANSI.RESET} Syntax highlighting is an experimental feature.\\n`\n : '';\n\n const prefix = `${warningMsg}${theme.success}? ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n const suffix = `\\n${theme.muted}(Tab to next, Enter to submit)${ANSI.RESET}`;\n const fullOutput = prefix + highlighted + suffix;\n\n this.renderFrame(fullOutput);\n\n // 4. Cursor Calculation\n const cursorAbsPos = activeVarStart + this.cursor;\n const textBeforeCursor = fullRawText.substring(0, cursorAbsPos);\n\n const rowsBefore = textBeforeCursor.split('\\n');\n const cursorRow = rowsBefore.length - 1;\n const cursorCol = stringWidth(rowsBefore[rowsBefore.length - 1]);\n\n const totalSnippetLines = fullRawText.split('\\n').length;\n // linesUp calculation: 1 (suffix) + remaining snippet lines\n const linesUp = 1 + (totalSnippetLines - 1 - cursorRow);\n\n this.print(ANSI.SHOW_CURSOR);\n if (linesUp > 0) {\n this.print(`\\x1b[${linesUp}A`);\n this.lastLinesUp = linesUp;\n }\n\n this.print(ANSI.CURSOR_LEFT);\n if (cursorCol > 0) {\n this.print(`\\x1b[${cursorCol}C`);\n }\n }\n\n private appendSegment(\n text: string,\n absStart: number,\n activeStart: number,\n activeEnd: number,\n syntaxColor: string,\n append: (s: string) => void\n ) {\n const absEnd = absStart + text.length;\n const overlapStart = Math.max(absStart, activeStart);\n const overlapEnd = Math.min(absEnd, activeEnd);\n\n if (overlapStart < overlapEnd) {\n if (absStart < overlapStart) {\n const part = text.substring(0, overlapStart - absStart);\n append(`${syntaxColor}${part}${ANSI.RESET}`);\n }\n const activePart = text.substring(overlapStart - absStart, overlapEnd - absStart);\n append(`${theme.main}${ANSI.UNDERLINE}${activePart}${ANSI.RESET}`);\n\n if (absEnd > overlapEnd) {\n const part = text.substring(overlapEnd - absStart);\n append(`${syntaxColor}${part}${ANSI.RESET}`);\n }\n } else {\n append(`${syntaxColor}${text}${ANSI.RESET}`);\n }\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (char === '\\u001b[Z') {\n this.moveFocus(-1); return;\n }\n if (char === '\\t') {\n this.moveFocus(1); return;\n }\n if (char === '\\r' || char === '\\n') {\n this.submitCode(); return;\n }\n\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') {\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') this.moveFocus(-1);\n else if (event.scroll === 'down') this.moveFocus(1);\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 submitCode() {\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":["CodePrompt","Prompt","parseTemplate","regex","lastIndex","match","exec","options","template","index","tokens","push","type","value","substring","variableTokens","length","cleanup","lastLinesUp","print","render","firstRender","fullRawText","activeVarStart","activeVarEnd","activeTokenIdx","activeVarIndex","forEach","token","idx","val","values","highlighted","shouldHighlight","highlight","lang","language","highlightedText","visibleIdx","activeColor","i","char","sequence","ANSI","RESET","UNDERLINE","theme","main","appendSegment","s","warningMsg","FG_YELLOW","prefix","success","BOLD","title","message","suffix","muted","fullOutput","renderFrame","cursorAbsPos","cursor","textBeforeCursor","rowsBefore","split","cursorRow","cursorCol","stringWidth","totalSnippetLines","linesUp","SHOW_CURSOR","CURSOR_LEFT","text","absStart","activeStart","activeEnd","syntaxColor","append","absEnd","overlapStart","Math","max","overlapEnd","min","part","activePart","handleInput","_key","moveFocus","submitCode","varName","pre","slice","post","isLeft","isRight","test","startsWith","handleMouse","event","action","scroll","direction","nextIndex","result","submit","name","activeName"],"mappings":"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"}
@@ -1,165 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "ColorPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return ColorPrompt;
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 ColorPrompt = class ColorPrompt extends _base.Prompt {
28
- parseHex(hex) {
29
- const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
30
- return result ? {
31
- r: parseInt(result[1], 16),
32
- g: parseInt(result[2], 16),
33
- b: parseInt(result[3], 16)
34
- } : {
35
- r: 0,
36
- g: 0,
37
- b: 0
38
- };
39
- }
40
- rgbToHex(r, g, b) {
41
- return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();
42
- }
43
- // Helper to format ANSI TrueColor background
44
- getBgColorCode(r, g, b) {
45
- return `\x1b[48;2;${r};${g};${b}m`;
46
- }
47
- render(_firstRender) {
48
- const { r, g, b } = this.rgb;
49
- const hex = this.rgbToHex(r, g, b);
50
- let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
51
- output += `${_ansi.ANSI.BOLD}${hex}${_ansi.ANSI.RESET}\n\n`;
52
- // Preview Block
53
- if (this.capabilities.hasTrueColor) {
54
- const bg = this.getBgColorCode(r, g, b);
55
- const block = `${bg} ${_ansi.ANSI.RESET}`; // 8 spaces
56
- output += ` ${block}\n`;
57
- output += ` ${block}\n`;
58
- output += ` ${block}\n\n`;
59
- } else {
60
- // Fallback for no true color?
61
- // Maybe just show text or use closest 256 color?
62
- // For now, simpler fallback:
63
- output += ` (Preview unavailable in this terminal)\n\n`;
64
- }
65
- // Sliders
66
- const channels = [
67
- 'r',
68
- 'g',
69
- 'b'
70
- ];
71
- const labels = {
72
- r: 'Red ',
73
- g: 'Green',
74
- b: 'Blue '
75
- };
76
- channels.forEach((ch)=>{
77
- const val = this.rgb[ch];
78
- const isActive = this.activeChannel === ch;
79
- // Render slider track
80
- // Width 20 chars for 0-255
81
- const width = 20;
82
- const pos = Math.floor(val / 255 * width);
83
- // Wait, '⚪' might be wide. using simpler char if needed. 'O' or ANSI reverse space.
84
- // Let's use standard chars.
85
- const trackSimple = '━'.repeat(pos) + (isActive ? '●' : '○') + '─'.repeat(width - pos);
86
- let line = `${labels[ch]}: ${val.toString().padStart(3)} [${trackSimple}]`;
87
- if (isActive) {
88
- line = `${_theme.theme.main}${_ansi.ANSI.REVERSE} ${line} ${_ansi.ANSI.RESET}`;
89
- } else {
90
- line = ` ${line} `;
91
- }
92
- output += line + '\n';
93
- });
94
- output += `\n${_theme.theme.muted}Arrows: Adjust/Switch | Shift+Arrows: Adjust fast | Enter: Submit${_ansi.ANSI.RESET}`;
95
- this.renderFrame(output);
96
- }
97
- handleInput(char, _key) {
98
- const isUp = this.isUp(char);
99
- const isDown = this.isDown(char);
100
- const isLeft = this.isLeft(char);
101
- const isRight = this.isRight(char);
102
- // Detect Shift key for faster movement (generic check if possible, or mapping specific codes)
103
- // \x1b[1;2C is Shift+Right usually. \x1b[1;2D is Shift+Left.
104
- // It varies by terminal.
105
- const isShiftRight = char === '\x1b[1;2C';
106
- const isShiftLeft = char === '\x1b[1;2D';
107
- // Channel Switching (Up/Down)
108
- if (isUp) {
109
- if (this.activeChannel === 'g') this.activeChannel = 'r';
110
- else if (this.activeChannel === 'b') this.activeChannel = 'g';
111
- this.render(false);
112
- return;
113
- }
114
- if (isDown) {
115
- if (this.activeChannel === 'r') this.activeChannel = 'g';
116
- else if (this.activeChannel === 'g') this.activeChannel = 'b';
117
- this.render(false);
118
- return;
119
- }
120
- // Value Adjustment (Left/Right)
121
- if (isLeft || isRight || isShiftLeft || isShiftRight) {
122
- let change = 0;
123
- if (isRight) change = 1;
124
- if (isLeft) change = -1;
125
- if (isShiftRight) change = 10;
126
- if (isShiftLeft) change = -10;
127
- const val = this.rgb[this.activeChannel] + change;
128
- this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));
129
- this.render(false);
130
- return;
131
- }
132
- // Tab to cycle channels
133
- if (char === '\t') {
134
- if (this.activeChannel === 'r') this.activeChannel = 'g';
135
- else if (this.activeChannel === 'g') this.activeChannel = 'b';
136
- else this.activeChannel = 'r';
137
- this.render(false);
138
- return;
139
- }
140
- if (char === '\r' || char === '\n') {
141
- this.submit(this.rgbToHex(this.rgb.r, this.rgb.g, this.rgb.b));
142
- return;
143
- }
144
- }
145
- handleMouse(event) {
146
- if (event.action === 'scroll') {
147
- // On scroll, adjust the currently active channel's value.
148
- // If Ctrl is held, adjust by a larger step (fast adjust).
149
- const fast = !!event.ctrl;
150
- const step = fast ? 10 : 1;
151
- const change = event.scroll === 'up' ? step : event.scroll === 'down' ? -step : 0;
152
- if (change !== 0) {
153
- const val = this.rgb[this.activeChannel] + change;
154
- this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));
155
- this.render(false);
156
- }
157
- }
158
- }
159
- constructor(options){
160
- super(options), _define_property(this, "rgb", void 0), _define_property(this, "activeChannel", 'r'), _define_property(this, "inputBuffer", '');
161
- this.rgb = this.parseHex(options.initial || '#000000');
162
- }
163
- };
164
-
165
- //# sourceMappingURL=color.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/color.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { ColorOptions, MouseEvent } from '../types';\n\ninterface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport class ColorPrompt extends Prompt<string, ColorOptions> {\n private rgb: RGB;\n private activeChannel: 'r' | 'g' | 'b' = 'r';\n private inputBuffer: string = '';\n\n constructor(options: ColorOptions) {\n super(options);\n this.rgb = this.parseHex(options.initial || '#000000');\n }\n\n private parseHex(hex: string): RGB {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : { r: 0, g: 0, b: 0 };\n }\n\n private rgbToHex(r: number, g: number, b: number): string {\n return \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();\n }\n\n // Helper to format ANSI TrueColor background\n private getBgColorCode(r: number, g: number, b: number): string {\n return `\\x1b[48;2;${r};${g};${b}m`;\n }\n\n protected render(_firstRender: boolean): void {\n const { r, g, b } = this.rgb;\n const hex = this.rgbToHex(r, g, b);\n\n let output = `${theme.title}${this.options.message}${ANSI.RESET} `;\n output += `${ANSI.BOLD}${hex}${ANSI.RESET}\\n\\n`;\n\n // Preview Block\n if (this.capabilities.hasTrueColor) {\n const bg = this.getBgColorCode(r, g, b);\n const block = `${bg} ${ANSI.RESET}`; // 8 spaces\n output += ` ${block}\\n`;\n output += ` ${block}\\n`;\n output += ` ${block}\\n\\n`;\n } else {\n // Fallback for no true color?\n // Maybe just show text or use closest 256 color?\n // For now, simpler fallback:\n output += ` (Preview unavailable in this terminal)\\n\\n`;\n }\n\n // Sliders\n const channels: ('r' | 'g' | 'b')[] = ['r', 'g', 'b'];\n const labels = { r: 'Red ', g: 'Green', b: 'Blue ' };\n\n channels.forEach(ch => {\n const val = this.rgb[ch];\n const isActive = this.activeChannel === ch;\n\n // Render slider track\n // Width 20 chars for 0-255\n const width = 20;\n const pos = Math.floor((val / 255) * width);\n // Wait, '⚪' might be wide. using simpler char if needed. 'O' or ANSI reverse space.\n // Let's use standard chars.\n const trackSimple = '━'.repeat(pos) + (isActive ? '●' : '○') + '─'.repeat(width - pos);\n\n let line = `${labels[ch]}: ${val.toString().padStart(3)} [${trackSimple}]`;\n\n if (isActive) {\n line = `${theme.main}${ANSI.REVERSE} ${line} ${ANSI.RESET}`;\n } else {\n line = ` ${line} `;\n }\n output += line + '\\n';\n });\n\n output += `\\n${theme.muted}Arrows: Adjust/Switch | Shift+Arrows: Adjust fast | Enter: Submit${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer): void {\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\n // Detect Shift key for faster movement (generic check if possible, or mapping specific codes)\n // \\x1b[1;2C is Shift+Right usually. \\x1b[1;2D is Shift+Left.\n // It varies by terminal.\n const isShiftRight = char === '\\x1b[1;2C';\n const isShiftLeft = char === '\\x1b[1;2D';\n\n // Channel Switching (Up/Down)\n if (isUp) {\n if (this.activeChannel === 'g') this.activeChannel = 'r';\n else if (this.activeChannel === 'b') this.activeChannel = 'g';\n this.render(false);\n return;\n }\n if (isDown) {\n if (this.activeChannel === 'r') this.activeChannel = 'g';\n else if (this.activeChannel === 'g') this.activeChannel = 'b';\n this.render(false);\n return;\n }\n\n // Value Adjustment (Left/Right)\n if (isLeft || isRight || isShiftLeft || isShiftRight) {\n let change = 0;\n if (isRight) change = 1;\n if (isLeft) change = -1;\n if (isShiftRight) change = 10;\n if (isShiftLeft) change = -10;\n\n const val = this.rgb[this.activeChannel] + change;\n this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));\n this.render(false);\n return;\n }\n\n // Tab to cycle channels\n if (char === '\\t') {\n if (this.activeChannel === 'r') this.activeChannel = 'g';\n else if (this.activeChannel === 'g') this.activeChannel = 'b';\n else this.activeChannel = 'r';\n this.render(false);\n return;\n }\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.rgbToHex(this.rgb.r, this.rgb.g, this.rgb.b));\n return;\n }\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n // On scroll, adjust the currently active channel's value.\n // If Ctrl is held, adjust by a larger step (fast adjust).\n const fast = !!event.ctrl;\n const step = fast ? 10 : 1;\n const change = event.scroll === 'up' ? step : (event.scroll === 'down' ? -step : 0);\n if (change !== 0) {\n const val = this.rgb[this.activeChannel] + change;\n this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));\n this.render(false);\n }\n }\n }\n}\n"],"names":["ColorPrompt","Prompt","parseHex","hex","result","exec","r","parseInt","g","b","rgbToHex","toString","slice","toUpperCase","getBgColorCode","render","_firstRender","rgb","output","theme","title","options","message","ANSI","RESET","BOLD","capabilities","hasTrueColor","bg","block","channels","labels","forEach","ch","val","isActive","activeChannel","width","pos","Math","floor","trackSimple","repeat","line","padStart","main","REVERSE","muted","renderFrame","handleInput","char","_key","isUp","isDown","isLeft","isRight","isShiftRight","isShiftLeft","change","max","min","submit","handleMouse","event","action","fast","ctrl","step","scroll","inputBuffer","initial"],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "ConfirmPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return ConfirmPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- let ConfirmPrompt = class ConfirmPrompt extends _base.Prompt {
15
- render(_firstRender) {
16
- // Prepare content
17
- const hint = this.value ? `${_ansi.ANSI.BOLD}Yes${_ansi.ANSI.RESET}/no` : `yes/${_ansi.ANSI.BOLD}No${_ansi.ANSI.RESET}`;
18
- let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(${hint})${_ansi.ANSI.RESET} `;
19
- const text = this.value ? 'Yes' : 'No';
20
- output += `${_theme.theme.main}${text}${_ansi.ANSI.RESET}`;
21
- this.renderFrame(output);
22
- }
23
- handleInput(char) {
24
- const c = char.toLowerCase();
25
- if (c === '\r' || c === '\n') {
26
- this.submit(this.value);
27
- return;
28
- }
29
- if (c === 'y') {
30
- this.value = true;
31
- this.render(false);
32
- }
33
- if (c === 'n') {
34
- this.value = false;
35
- this.render(false);
36
- }
37
- // Allow left/right to toggle as well for better UX
38
- if (this.isLeft(char) || this.isRight(char)) {
39
- this.value = !this.value;
40
- this.render(false);
41
- }
42
- }
43
- handleMouse(event) {
44
- if (event.action === 'scroll') {
45
- this.value = !this.value;
46
- this.render(false);
47
- }
48
- }
49
- constructor(options){
50
- super(options);
51
- this.value = options.initial ?? true;
52
- }
53
- };
54
-
55
- //# sourceMappingURL=confirm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/confirm.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { ConfirmOptions, MouseEvent } from '../types';\n\n// --- Implementation: Confirm Prompt ---\nexport class ConfirmPrompt extends Prompt<boolean, ConfirmOptions> {\n constructor(options: ConfirmOptions) {\n super(options);\n this.value = options.initial ?? true;\n }\n\n protected render(_firstRender: boolean) {\n // Prepare content\n const hint = this.value ? `${ANSI.BOLD}Yes${ANSI.RESET}/no` : `yes/${ANSI.BOLD}No${ANSI.RESET}`;\n let output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(${hint})${ANSI.RESET} `;\n const text = this.value ? 'Yes' : 'No';\n output += `${theme.main}${text}${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n const c = char.toLowerCase();\n if (c === '\\r' || c === '\\n') {\n this.submit(this.value);\n return;\n }\n if (c === 'y') { this.value = true; this.render(false); }\n if (c === 'n') { this.value = false; this.render(false); }\n\n // Allow left/right to toggle as well for better UX\n if (this.isLeft(char) || this.isRight(char)) {\n this.value = !this.value;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n this.value = !this.value;\n this.render(false);\n }\n }\n}\n"],"names":["ConfirmPrompt","Prompt","render","_firstRender","hint","value","ANSI","BOLD","RESET","output","theme","success","title","options","message","muted","text","main","renderFrame","handleInput","char","c","toLowerCase","submit","isLeft","isRight","handleMouse","event","action","initial"],"mappings":";;;;+BAMaA;;;eAAAA;;;sBANQ;sBACE;uBACD;AAIf,IAAA,AAAMA,gBAAN,MAAMA,sBAAsBC,YAAM;IAM3BC,OAAOC,YAAqB,EAAE;QACpC,kBAAkB;QAClB,MAAMC,OAAO,IAAI,CAACC,KAAK,GAAG,GAAGC,UAAI,CAACC,IAAI,CAAC,GAAG,EAAED,UAAI,CAACE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAEF,UAAI,CAACC,IAAI,CAAC,EAAE,EAAED,UAAI,CAACE,KAAK,EAAE;QAC/F,IAAIC,SAAS,GAAGC,YAAK,CAACC,OAAO,CAAC,CAAC,EAAEL,UAAI,CAACE,KAAK,CAAC,CAAC,EAAEF,UAAI,CAACC,IAAI,GAAGG,YAAK,CAACE,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGR,UAAI,CAACE,KAAK,CAAC,CAAC,EAAEE,YAAK,CAACK,KAAK,CAAC,CAAC,EAAEX,KAAK,CAAC,EAAEE,UAAI,CAACE,KAAK,CAAC,CAAC,CAAC;QAClJ,MAAMQ,OAAO,IAAI,CAACX,KAAK,GAAG,QAAQ;QAClCI,UAAU,GAAGC,YAAK,CAACO,IAAI,GAAGD,OAAOV,UAAI,CAACE,KAAK,EAAE;QAE7C,IAAI,CAACU,WAAW,CAACT;IACrB;IAEUU,YAAYC,IAAY,EAAE;QAChC,MAAMC,IAAID,KAAKE,WAAW;QAC1B,IAAID,MAAM,QAAQA,MAAM,MAAM;YAC1B,IAAI,CAACE,MAAM,CAAC,IAAI,CAAClB,KAAK;YACtB;QACJ;QACA,IAAIgB,MAAM,KAAK;YAAE,IAAI,CAAChB,KAAK,GAAG;YAAM,IAAI,CAACH,MAAM,CAAC;QAAQ;QACxD,IAAImB,MAAM,KAAK;YAAE,IAAI,CAAChB,KAAK,GAAG;YAAO,IAAI,CAACH,MAAM,CAAC;QAAQ;QAEzD,mDAAmD;QACnD,IAAI,IAAI,CAACsB,MAAM,CAACJ,SAAS,IAAI,CAACK,OAAO,CAACL,OAAO;YACzC,IAAI,CAACf,KAAK,GAAG,CAAC,IAAI,CAACA,KAAK;YACxB,IAAI,CAACH,MAAM,CAAC;QAChB;IACJ;IAEUwB,YAAYC,KAAiB,EAAE;QACrC,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,IAAI,CAACvB,KAAK,GAAG,CAAC,IAAI,CAACA,KAAK;YACxB,IAAI,CAACH,MAAM,CAAC;QAChB;IACJ;IApCA,YAAYW,OAAuB,CAAE;QACjC,KAAK,CAACA;QACN,IAAI,CAACR,KAAK,GAAGQ,QAAQgB,OAAO,IAAI;IACpC;AAkCJ"}