mepcli 1.3.2 → 2.0.0-beta.1

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 (291) hide show
  1. package/README.md +11 -2
  2. package/dist/{ansi.js → src/ansi.js} +17 -9
  3. package/dist/src/ansi.js.map +1 -0
  4. package/dist/{base.js → src/base.js} +82 -70
  5. package/dist/src/base.js.map +1 -0
  6. package/dist/{core.js → src/core.js} +266 -320
  7. package/dist/src/core.js.map +1 -0
  8. package/dist/src/data/countries.js +569 -0
  9. package/dist/src/data/countries.js.map +1 -0
  10. package/dist/src/data/licenses.js +480 -0
  11. package/dist/src/data/licenses.js.map +1 -0
  12. package/dist/{highlight.js → src/highlight.js} +77 -69
  13. package/dist/src/highlight.js.map +1 -0
  14. package/dist/src/index.js +66 -0
  15. package/dist/src/index.js.map +1 -0
  16. package/dist/{input.js → src/input.js} +47 -41
  17. package/dist/src/input.js.map +1 -0
  18. package/dist/src/pipeline.js +273 -0
  19. package/dist/src/pipeline.js.map +1 -0
  20. package/dist/{prompts → src/prompts}/autocomplete.js +58 -57
  21. package/dist/src/prompts/autocomplete.js.map +1 -0
  22. package/dist/{prompts → src/prompts}/box.js +86 -53
  23. package/dist/src/prompts/box.js.map +1 -0
  24. package/dist/{prompts → src/prompts}/breadcrumb-search.js +110 -98
  25. package/dist/src/prompts/breadcrumb-search.js.map +1 -0
  26. package/dist/{prompts → src/prompts}/breadcrumb.js +126 -121
  27. package/dist/src/prompts/breadcrumb.js.map +1 -0
  28. package/dist/{prompts → src/prompts}/byte.js +69 -52
  29. package/dist/src/prompts/byte.js.map +1 -0
  30. package/dist/{prompts → src/prompts}/calculator.js +79 -56
  31. package/dist/src/prompts/calculator.js.map +1 -0
  32. package/dist/{prompts → src/prompts}/calendar.js +167 -127
  33. package/dist/src/prompts/calendar.js.map +1 -0
  34. package/dist/{prompts → src/prompts}/checkbox.js +53 -49
  35. package/dist/src/prompts/checkbox.js.map +1 -0
  36. package/dist/{prompts → src/prompts}/code.js +88 -76
  37. package/dist/src/prompts/code.js.map +1 -0
  38. package/dist/{prompts → src/prompts}/color.js +68 -50
  39. package/dist/src/prompts/color.js.map +1 -0
  40. package/dist/{prompts → src/prompts}/confirm.js +22 -15
  41. package/dist/src/prompts/confirm.js.map +1 -0
  42. package/dist/{prompts → src/prompts}/connection-string.js +59 -36
  43. package/dist/src/prompts/connection-string.js.map +1 -0
  44. package/dist/{prompts → src/prompts}/cron.js +90 -59
  45. package/dist/src/prompts/cron.js.map +1 -0
  46. package/dist/src/prompts/curl-utils.js +71 -0
  47. package/dist/src/prompts/curl-utils.js.map +1 -0
  48. package/dist/{prompts → src/prompts}/curl.js +153 -132
  49. package/dist/src/prompts/curl.js.map +1 -0
  50. package/dist/{prompts → src/prompts}/data-inspector.js +96 -91
  51. package/dist/src/prompts/data-inspector.js.map +1 -0
  52. package/dist/{prompts → src/prompts}/date.js +64 -57
  53. package/dist/src/prompts/date.js.map +1 -0
  54. package/dist/{prompts → src/prompts}/dependency.js +84 -80
  55. package/dist/src/prompts/dependency.js.map +1 -0
  56. package/dist/{prompts → src/prompts}/dial.js +49 -35
  57. package/dist/src/prompts/dial.js.map +1 -0
  58. package/dist/src/prompts/diff.js +118 -0
  59. package/dist/src/prompts/diff.js.map +1 -0
  60. package/dist/{prompts → src/prompts}/draw.js +83 -80
  61. package/dist/src/prompts/draw.js.map +1 -0
  62. package/dist/src/prompts/editor.js +234 -0
  63. package/dist/src/prompts/editor.js.map +1 -0
  64. package/dist/{prompts → src/prompts}/emoji.js +80 -82
  65. package/dist/src/prompts/emoji.js.map +1 -0
  66. package/dist/{prompts → src/prompts}/exec.js +60 -46
  67. package/dist/src/prompts/exec.js.map +1 -0
  68. package/dist/src/prompts/file.js +217 -0
  69. package/dist/src/prompts/file.js.map +1 -0
  70. package/dist/{prompts → src/prompts}/form.js +63 -54
  71. package/dist/src/prompts/form.js.map +1 -0
  72. package/dist/{prompts → src/prompts}/fuzzy-multi-column.js +65 -53
  73. package/dist/src/prompts/fuzzy-multi-column.js.map +1 -0
  74. package/dist/{prompts → src/prompts}/fuzzy.js +66 -55
  75. package/dist/src/prompts/fuzzy.js.map +1 -0
  76. package/dist/src/prompts/gauge.js +137 -0
  77. package/dist/src/prompts/gauge.js.map +1 -0
  78. package/dist/{prompts → src/prompts}/grid.js +70 -57
  79. package/dist/src/prompts/grid.js.map +1 -0
  80. package/dist/{prompts → src/prompts}/heatmap.js +70 -64
  81. package/dist/src/prompts/heatmap.js.map +1 -0
  82. package/dist/{prompts → src/prompts}/ip.js +56 -36
  83. package/dist/src/prompts/ip.js.map +1 -0
  84. package/dist/{prompts → src/prompts}/kanban.js +63 -58
  85. package/dist/src/prompts/kanban.js.map +1 -0
  86. package/dist/src/prompts/keypress.js +54 -0
  87. package/dist/src/prompts/keypress.js.map +1 -0
  88. package/dist/src/prompts/license.js +144 -0
  89. package/dist/src/prompts/license.js.map +1 -0
  90. package/dist/{prompts → src/prompts}/list.js +46 -31
  91. package/dist/src/prompts/list.js.map +1 -0
  92. package/dist/{prompts → src/prompts}/map.js +93 -77
  93. package/dist/src/prompts/map.js.map +1 -0
  94. package/dist/{prompts → src/prompts}/match.js +91 -95
  95. package/dist/src/prompts/match.js.map +1 -0
  96. package/dist/{prompts → src/prompts}/miller.js +74 -67
  97. package/dist/src/prompts/miller.js.map +1 -0
  98. package/dist/{prompts → src/prompts}/multi-column-select.js +54 -44
  99. package/dist/src/prompts/multi-column-select.js.map +1 -0
  100. package/dist/{prompts → src/prompts}/multi-range.js +70 -52
  101. package/dist/src/prompts/multi-range.js.map +1 -0
  102. package/dist/{prompts → src/prompts}/multi-select.js +67 -58
  103. package/dist/src/prompts/multi-select.js.map +1 -0
  104. package/dist/{prompts → src/prompts}/number.js +51 -39
  105. package/dist/src/prompts/number.js.map +1 -0
  106. package/dist/{prompts → src/prompts}/otp.js +43 -27
  107. package/dist/src/prompts/otp.js.map +1 -0
  108. package/dist/{prompts → src/prompts}/pattern.js +74 -71
  109. package/dist/src/prompts/pattern.js.map +1 -0
  110. package/dist/{prompts → src/prompts}/phone.js +107 -118
  111. package/dist/src/prompts/phone.js.map +1 -0
  112. package/dist/src/prompts/quiz-select.js +114 -0
  113. package/dist/src/prompts/quiz-select.js.map +1 -0
  114. package/dist/src/prompts/quiz-text.js +98 -0
  115. package/dist/src/prompts/quiz-text.js.map +1 -0
  116. package/dist/{prompts → src/prompts}/range.js +85 -61
  117. package/dist/src/prompts/range.js.map +1 -0
  118. package/dist/{prompts → src/prompts}/rating.js +29 -24
  119. package/dist/src/prompts/rating.js.map +1 -0
  120. package/dist/{prompts → src/prompts}/regex.js +50 -36
  121. package/dist/src/prompts/regex.js.map +1 -0
  122. package/dist/{prompts → src/prompts}/region.js +62 -56
  123. package/dist/src/prompts/region.js.map +1 -0
  124. package/dist/{prompts → src/prompts}/schedule.js +82 -75
  125. package/dist/src/prompts/schedule.js.map +1 -0
  126. package/dist/{prompts → src/prompts}/scroll.js +61 -58
  127. package/dist/src/prompts/scroll.js.map +1 -0
  128. package/dist/src/prompts/seat.js +164 -0
  129. package/dist/src/prompts/seat.js.map +1 -0
  130. package/dist/{prompts → src/prompts}/select-range.js +58 -46
  131. package/dist/src/prompts/select-range.js.map +1 -0
  132. package/dist/{prompts → src/prompts}/select.js +65 -66
  133. package/dist/src/prompts/select.js.map +1 -0
  134. package/dist/{prompts → src/prompts}/semver.js +24 -13
  135. package/dist/src/prompts/semver.js.map +1 -0
  136. package/dist/src/prompts/shortcut.js +133 -0
  137. package/dist/src/prompts/shortcut.js.map +1 -0
  138. package/dist/{prompts → src/prompts}/slider.js +28 -23
  139. package/dist/src/prompts/slider.js.map +1 -0
  140. package/dist/src/prompts/slot.js +117 -0
  141. package/dist/src/prompts/slot.js.map +1 -0
  142. package/dist/{prompts → src/prompts}/snippet.js +82 -61
  143. package/dist/src/prompts/snippet.js.map +1 -0
  144. package/dist/{prompts → src/prompts}/sort-grid.js +64 -59
  145. package/dist/src/prompts/sort-grid.js.map +1 -0
  146. package/dist/{prompts → src/prompts}/sort.js +59 -49
  147. package/dist/src/prompts/sort.js.map +1 -0
  148. package/dist/src/prompts/spam.js +80 -0
  149. package/dist/src/prompts/spam.js.map +1 -0
  150. package/dist/{prompts → src/prompts}/spreadsheet.js +71 -70
  151. package/dist/src/prompts/spreadsheet.js.map +1 -0
  152. package/dist/{prompts → src/prompts}/table.js +52 -38
  153. package/dist/src/prompts/table.js.map +1 -0
  154. package/dist/{prompts → src/prompts}/text.js +74 -70
  155. package/dist/src/prompts/text.js.map +1 -0
  156. package/dist/{prompts → src/prompts}/time.js +105 -96
  157. package/dist/src/prompts/time.js.map +1 -0
  158. package/dist/src/prompts/toggle.js +53 -0
  159. package/dist/src/prompts/toggle.js.map +1 -0
  160. package/dist/{prompts → src/prompts}/transfer.js +71 -67
  161. package/dist/src/prompts/transfer.js.map +1 -0
  162. package/dist/{prompts → src/prompts}/tree-select.js +83 -86
  163. package/dist/src/prompts/tree-select.js.map +1 -0
  164. package/dist/{prompts → src/prompts}/tree.js +69 -67
  165. package/dist/src/prompts/tree.js.map +1 -0
  166. package/dist/src/prompts/wait.js +79 -0
  167. package/dist/src/prompts/wait.js.map +1 -0
  168. package/dist/src/spinner.js +105 -0
  169. package/dist/src/spinner.js.map +1 -0
  170. package/dist/{symbols.js → src/symbols.js} +32 -7
  171. package/dist/src/symbols.js.map +1 -0
  172. package/dist/{tasks.js → src/tasks.js} +104 -79
  173. package/dist/src/tasks.js.map +1 -0
  174. package/dist/src/theme.js +29 -0
  175. package/dist/src/theme.js.map +1 -0
  176. package/dist/src/types.js +8 -0
  177. package/dist/src/types.js.map +1 -0
  178. package/dist/{utils.js → src/utils.js} +196 -152
  179. package/dist/src/utils.js.map +1 -0
  180. package/package.json +16 -13
  181. package/dist/ansi.d.ts +0 -36
  182. package/dist/base.d.ts +0 -60
  183. package/dist/core.d.ts +0 -1072
  184. package/dist/data/countries.d.ts +0 -2
  185. package/dist/data/countries.js +0 -105
  186. package/dist/data/licenses.d.ts +0 -2
  187. package/dist/data/licenses.js +0 -109
  188. package/dist/highlight.d.ts +0 -7
  189. package/dist/index.d.ts +0 -48
  190. package/dist/index.js +0 -64
  191. package/dist/input.d.ts +0 -14
  192. package/dist/pipeline.d.ts +0 -39
  193. package/dist/pipeline.js +0 -54
  194. package/dist/prompts/autocomplete.d.ts +0 -22
  195. package/dist/prompts/box.d.ts +0 -21
  196. package/dist/prompts/breadcrumb-search.d.ts +0 -14
  197. package/dist/prompts/breadcrumb.d.ts +0 -32
  198. package/dist/prompts/byte.d.ts +0 -13
  199. package/dist/prompts/calculator.d.ts +0 -17
  200. package/dist/prompts/calendar.d.ts +0 -33
  201. package/dist/prompts/checkbox.d.ts +0 -13
  202. package/dist/prompts/code.d.ts +0 -19
  203. package/dist/prompts/color.d.ts +0 -14
  204. package/dist/prompts/confirm.d.ts +0 -8
  205. package/dist/prompts/connection-string.d.ts +0 -18
  206. package/dist/prompts/cron.d.ts +0 -13
  207. package/dist/prompts/curl-utils.d.ts +0 -25
  208. package/dist/prompts/curl-utils.js +0 -41
  209. package/dist/prompts/curl.d.ts +0 -41
  210. package/dist/prompts/data-inspector.d.ts +0 -22
  211. package/dist/prompts/date.d.ts +0 -12
  212. package/dist/prompts/dependency.d.ts +0 -16
  213. package/dist/prompts/dial.d.ts +0 -10
  214. package/dist/prompts/diff.d.ts +0 -10
  215. package/dist/prompts/diff.js +0 -101
  216. package/dist/prompts/draw.d.ts +0 -20
  217. package/dist/prompts/editor.d.ts +0 -14
  218. package/dist/prompts/editor.js +0 -203
  219. package/dist/prompts/emoji.d.ts +0 -18
  220. package/dist/prompts/exec.d.ts +0 -17
  221. package/dist/prompts/file.d.ts +0 -21
  222. package/dist/prompts/file.js +0 -210
  223. package/dist/prompts/form.d.ts +0 -18
  224. package/dist/prompts/fuzzy-multi-column.d.ts +0 -12
  225. package/dist/prompts/fuzzy.d.ts +0 -12
  226. package/dist/prompts/gauge.d.ts +0 -21
  227. package/dist/prompts/gauge.js +0 -130
  228. package/dist/prompts/grid.d.ts +0 -14
  229. package/dist/prompts/heatmap.d.ts +0 -13
  230. package/dist/prompts/ip.d.ts +0 -11
  231. package/dist/prompts/kanban.d.ts +0 -17
  232. package/dist/prompts/keypress.d.ts +0 -7
  233. package/dist/prompts/keypress.js +0 -55
  234. package/dist/prompts/license.d.ts +0 -9
  235. package/dist/prompts/license.js +0 -105
  236. package/dist/prompts/list.d.ts +0 -9
  237. package/dist/prompts/map.d.ts +0 -17
  238. package/dist/prompts/match.d.ts +0 -19
  239. package/dist/prompts/miller.d.ts +0 -15
  240. package/dist/prompts/multi-column-select.d.ts +0 -10
  241. package/dist/prompts/multi-range.d.ts +0 -9
  242. package/dist/prompts/multi-select.d.ts +0 -15
  243. package/dist/prompts/number.d.ts +0 -11
  244. package/dist/prompts/otp.d.ts +0 -10
  245. package/dist/prompts/pattern.d.ts +0 -22
  246. package/dist/prompts/phone.d.ts +0 -41
  247. package/dist/prompts/quiz-select.d.ts +0 -10
  248. package/dist/prompts/quiz-select.js +0 -104
  249. package/dist/prompts/quiz-text.d.ts +0 -11
  250. package/dist/prompts/quiz-text.js +0 -82
  251. package/dist/prompts/range.d.ts +0 -9
  252. package/dist/prompts/rating.d.ts +0 -8
  253. package/dist/prompts/regex.d.ts +0 -13
  254. package/dist/prompts/region.d.ts +0 -11
  255. package/dist/prompts/schedule.d.ts +0 -20
  256. package/dist/prompts/scroll.d.ts +0 -13
  257. package/dist/prompts/seat.d.ts +0 -17
  258. package/dist/prompts/seat.js +0 -165
  259. package/dist/prompts/select-range.d.ts +0 -8
  260. package/dist/prompts/select.d.ts +0 -15
  261. package/dist/prompts/semver.d.ts +0 -6
  262. package/dist/prompts/shortcut.d.ts +0 -9
  263. package/dist/prompts/shortcut.js +0 -135
  264. package/dist/prompts/slider.d.ts +0 -8
  265. package/dist/prompts/slot.d.ts +0 -16
  266. package/dist/prompts/slot.js +0 -107
  267. package/dist/prompts/snippet.d.ts +0 -19
  268. package/dist/prompts/sort-grid.d.ts +0 -16
  269. package/dist/prompts/sort.d.ts +0 -14
  270. package/dist/prompts/spam.d.ts +0 -17
  271. package/dist/prompts/spam.js +0 -62
  272. package/dist/prompts/spreadsheet.d.ts +0 -21
  273. package/dist/prompts/table.d.ts +0 -14
  274. package/dist/prompts/text.d.ts +0 -17
  275. package/dist/prompts/time.d.ts +0 -12
  276. package/dist/prompts/toggle.d.ts +0 -8
  277. package/dist/prompts/toggle.js +0 -47
  278. package/dist/prompts/transfer.d.ts +0 -18
  279. package/dist/prompts/tree-select.d.ts +0 -31
  280. package/dist/prompts/tree.d.ts +0 -20
  281. package/dist/prompts/wait.d.ts +0 -18
  282. package/dist/prompts/wait.js +0 -62
  283. package/dist/spinner.d.ts +0 -33
  284. package/dist/spinner.js +0 -89
  285. package/dist/symbols.d.ts +0 -33
  286. package/dist/tasks.d.ts +0 -57
  287. package/dist/theme.d.ts +0 -2
  288. package/dist/theme.js +0 -20
  289. package/dist/types.d.ts +0 -503
  290. package/dist/types.js +0 -5
  291. package/dist/utils.d.ts +0 -81
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/list.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { ListOptions } from '../types';\n\n// --- Implementation: List Prompt ---\nexport class ListPrompt extends Prompt<string[], ListOptions> {\n private currentInput: string = '';\n private errorMsg: string = '';\n\n constructor(options: ListOptions) {\n super(options);\n this.value = options.initial || [];\n }\n\n protected render(_firstRender: boolean) {\n const cols = process.stdout.columns || 80;\n\n // 1. Prepare Prefix\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n const prefix = `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} `;\n\n // 2. Build Lines with Wrapping\n const lines: string[] = [];\n let currentLine = prefix;\n\n // Helper to check width\n const addText = (text: string) => {\n const visualLen = this.stripAnsi(currentLine).length + this.stripAnsi(text).length;\n if (visualLen > cols) {\n lines.push(currentLine);\n currentLine = text.trimStart(); // Start new line\n } else {\n currentLine += text;\n }\n };\n\n // Render Tags\n if (this.value.length > 0) {\n this.value.forEach((tag: string) => {\n const tagStr = `${theme.main}[${tag}]${ANSI.RESET} `;\n addText(tagStr);\n });\n }\n\n // Render Current Input\n addText(this.currentInput);\n\n lines.push(currentLine); // Push the last line\n\n // Track where the input ends (for cursor positioning)\n const inputLineIndex = lines.length - 1;\n const inputVisualCol = this.stripAnsi(currentLine).length;\n\n // 3. Append Error if any\n if (this.errorMsg) {\n lines.push(`${theme.error}>> ${this.errorMsg}${ANSI.RESET}`);\n }\n\n const output = lines.join('\\n');\n\n // 4. Render Frame\n this.renderFrame(output);\n\n this.print(ANSI.SHOW_CURSOR);\n\n // 5. Position Cursor\n // If we printed lines after the input line (e.g. error msg), move up.\n const totalRows = lines.length;\n const linesUp = (totalRows - 1) - inputLineIndex;\n\n if (linesUp > 0) {\n this.print(`\\x1b[${linesUp}A`);\n }\n\n // Move to correct column\n this.print(ANSI.CURSOR_LEFT);\n if (inputVisualCol > 0) {\n this.print(`\\x1b[${inputVisualCol}C`);\n }\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n if (this.currentInput.trim()) {\n this.value.push(this.currentInput.trim());\n this.currentInput = '';\n this.errorMsg = '';\n this.render(false);\n } else {\n // Done if input is empty\n if (this.options.validate) {\n const result = this.options.validate(this.value);\n if (result !== true) {\n this.errorMsg = typeof result === 'string' ? result : 'Invalid input';\n this.render(false);\n return;\n }\n }\n this.submit(this.value);\n }\n return;\n }\n\n if (char === '\\u0008' || char === '\\x7f') { // Backspace\n if (this.currentInput.length > 0) {\n this.currentInput = this.currentInput.slice(0, -1);\n this.render(false);\n } else if (this.value.length > 0) {\n const last = this.value.pop();\n this.currentInput = last || '';\n this.render(false);\n }\n return;\n }\n\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n this.currentInput += char;\n this.render(false);\n }\n }\n}\n"],"names":["ListPrompt","Prompt","render","_firstRender","cols","process","stdout","columns","icon","errorMsg","theme","error","symbols","cross","success","prefix","ANSI","BOLD","title","options","message","RESET","lines","currentLine","addText","text","visualLen","stripAnsi","length","push","trimStart","value","forEach","tag","tagStr","main","currentInput","inputLineIndex","inputVisualCol","output","join","renderFrame","print","SHOW_CURSOR","totalRows","linesUp","CURSOR_LEFT","handleInput","char","trim","validate","result","submit","slice","last","pop","test","startsWith","initial"],"mappings":"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"}
@@ -1,45 +1,47 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MapPrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- const symbols_1 = require("../symbols");
8
- const utils_1 = require("../utils");
9
- class MapPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.items = [];
13
- this.rowIndex = 0;
14
- this.colIndex = 0; // 0: Key, 1: Value
15
- this.scrollTop = 0;
16
- this.pageSize = 7;
17
- this.errorMsg = '';
18
- this.ghost = '';
19
- if (options.initial) {
20
- this.items = Object.entries(options.initial).map(([key, value]) => ({ key, value }));
21
- }
22
- if (this.items.length === 0) {
23
- this.items.push({ key: '', value: '' });
24
- }
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "MapPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return MapPrompt;
25
9
  }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ const _symbols = require("../symbols");
15
+ const _utils = require("../utils");
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 MapPrompt = class MapPrompt extends _base.Prompt {
26
30
  render(_firstRender) {
27
31
  let output = '';
28
32
  // Title
29
- const icon = this.errorMsg ? `${theme_1.theme.error}${symbols_1.symbols.cross}` : `${theme_1.theme.success}?`;
30
- output += `${icon} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
33
+ const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
34
+ output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
31
35
  // Layout Calculation
32
- const maxKeyWidth = Math.max(5, // Minimum width
33
- ...this.items.map((item, idx) => {
36
+ const maxKeyWidth = Math.max(5, ...this.items.map((item, idx)=>{
34
37
  // Include ghost length in calculation if it's the active row
35
- const ghostLen = (idx === this.rowIndex && this.colIndex === 0) ? (0, utils_1.stringWidth)(this.ghost) : 0;
36
- return (0, utils_1.stringWidth)(item.key) + ghostLen;
38
+ const ghostLen = idx === this.rowIndex && this.colIndex === 0 ? (0, _utils.stringWidth)(this.ghost) : 0;
39
+ return (0, _utils.stringWidth)(item.key) + ghostLen;
37
40
  })) + 2; // Padding
38
41
  // Scrolling Logic
39
42
  if (this.rowIndex < this.scrollTop) {
40
43
  this.scrollTop = this.rowIndex;
41
- }
42
- else if (this.rowIndex >= this.scrollTop + this.pageSize) {
44
+ } else if (this.rowIndex >= this.scrollTop + this.pageSize) {
43
45
  this.scrollTop = this.rowIndex - this.pageSize + 1;
44
46
  }
45
47
  // Clamping
@@ -47,58 +49,54 @@ class MapPrompt extends base_1.Prompt {
47
49
  this.scrollTop = Math.min(this.scrollTop, maxScroll);
48
50
  // Header
49
51
  const keyHeader = this.pad('Key', maxKeyWidth);
50
- output += ` ${ansi_1.ANSI.BOLD}${keyHeader}Value${ansi_1.ANSI.RESET}\n`;
52
+ output += ` ${_ansi.ANSI.BOLD}${keyHeader}Value${_ansi.ANSI.RESET}\n`;
51
53
  // Rows
52
54
  const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);
53
- visibleItems.forEach((item, index) => {
55
+ visibleItems.forEach((item, index)=>{
54
56
  const actualIndex = this.scrollTop + index;
55
- if (index > 0)
56
- output += '\n';
57
+ if (index > 0) output += '\n';
57
58
  const isRowActive = actualIndex === this.rowIndex;
58
- const pointer = isRowActive ? `${theme_1.theme.main}${symbols_1.symbols.pointer}${ansi_1.ANSI.RESET} ` : ' ';
59
+ const pointer = isRowActive ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET} ` : ' ';
59
60
  // Render Key
60
61
  let keyStr = item.key;
61
62
  let ghostStr = '';
62
63
  if (isRowActive && this.colIndex === 0) {
63
64
  if (this.ghost) {
64
- ghostStr = `${theme_1.theme.muted}${this.ghost}${ansi_1.ANSI.RESET}`;
65
+ ghostStr = `${_theme.theme.muted}${this.ghost}${_ansi.ANSI.RESET}`;
65
66
  }
66
- keyStr = `${theme_1.theme.main}${ansi_1.ANSI.UNDERLINE}${keyStr}${ansi_1.ANSI.RESET}${ghostStr}`;
67
+ keyStr = `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${keyStr}${_ansi.ANSI.RESET}${ghostStr}`;
67
68
  }
68
69
  // Adjust padding manually
69
70
  // We need visual width of key + ghost (if active)
70
- const keyVisualWidth = (0, utils_1.stringWidth)(item.key) + (isRowActive && this.colIndex === 0 ? (0, utils_1.stringWidth)(this.ghost) : 0);
71
+ const keyVisualWidth = (0, _utils.stringWidth)(item.key) + (isRowActive && this.colIndex === 0 ? (0, _utils.stringWidth)(this.ghost) : 0);
71
72
  const padding = ' '.repeat(Math.max(0, maxKeyWidth - keyVisualWidth));
72
73
  // Render Value
73
74
  let valStr = item.value;
74
75
  if (isRowActive && this.colIndex === 1) {
75
- valStr = `${theme_1.theme.main}${ansi_1.ANSI.UNDERLINE}${valStr || ' '}${ansi_1.ANSI.RESET}`;
76
+ valStr = `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${valStr || ' '}${_ansi.ANSI.RESET}`;
76
77
  }
77
78
  output += `${pointer}${keyStr}${padding}${valStr}`;
78
79
  });
79
80
  // Instructions
80
- output += `\n${ansi_1.ANSI.DIM}(Ctrl+N: Add, Ctrl+D: Del)${ansi_1.ANSI.RESET}`;
81
+ output += `\n${_ansi.ANSI.DIM}(Ctrl+N: Add, Ctrl+D: Del)${_ansi.ANSI.RESET}`;
81
82
  if (this.errorMsg) {
82
- output += `\n${theme_1.theme.error}>> ${this.errorMsg}${ansi_1.ANSI.RESET}`;
83
+ output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
83
84
  }
84
85
  this.renderFrame(output);
85
86
  }
86
87
  pad(str, width) {
87
- const len = (0, utils_1.stringWidth)(str);
88
- if (len >= width)
89
- return str;
88
+ const len = (0, _utils.stringWidth)(str);
89
+ if (len >= width) return str;
90
90
  return str + ' '.repeat(width - len);
91
91
  }
92
92
  updateGhost() {
93
93
  this.ghost = '';
94
- if (this.colIndex !== 0 || !this.options.suggestions)
95
- return;
94
+ if (this.colIndex !== 0 || !this.options.suggestions) return;
96
95
  const currentKey = this.items[this.rowIndex].key;
97
- if (!currentKey)
98
- return;
96
+ if (!currentKey) return;
99
97
  const lowerKey = currentKey.toLowerCase();
100
98
  // Find first match
101
- const match = this.options.suggestions.find(s => s.toLowerCase().startsWith(lowerKey) && s.length > currentKey.length);
99
+ const match = this.options.suggestions.find((s)=>s.toLowerCase().startsWith(lowerKey) && s.length > currentKey.length);
102
100
  if (match) {
103
101
  this.ghost = match.slice(currentKey.length);
104
102
  }
@@ -121,8 +119,7 @@ class MapPrompt extends base_1.Prompt {
121
119
  }
122
120
  // Navigation
123
121
  if (this.isUp(char)) {
124
- if (this.rowIndex > 0)
125
- this.rowIndex--;
122
+ if (this.rowIndex > 0) this.rowIndex--;
126
123
  this.ghost = '';
127
124
  this.render(false);
128
125
  return;
@@ -130,10 +127,12 @@ class MapPrompt extends base_1.Prompt {
130
127
  if (this.isDown(char)) {
131
128
  if (this.rowIndex < this.items.length - 1) {
132
129
  this.rowIndex++;
133
- }
134
- else {
130
+ } else {
135
131
  // Down at last row adds new row
136
- this.items.push({ key: '', value: '' });
132
+ this.items.push({
133
+ key: '',
134
+ value: ''
135
+ });
137
136
  this.rowIndex++;
138
137
  this.colIndex = 0;
139
138
  }
@@ -148,23 +147,28 @@ class MapPrompt extends base_1.Prompt {
148
147
  return;
149
148
  }
150
149
  // CRUD
151
- if (char === '\x0e') { // Ctrl+N
152
- this.items.push({ key: '', value: '' });
150
+ if (char === '\x0e') {
151
+ this.items.push({
152
+ key: '',
153
+ value: ''
154
+ });
153
155
  this.rowIndex = this.items.length - 1;
154
156
  this.colIndex = 0;
155
157
  this.ghost = '';
156
158
  this.render(false);
157
159
  return;
158
160
  }
159
- if (char === '\x04') { // Ctrl+D
161
+ if (char === '\x04') {
160
162
  if (this.items.length > 1) {
161
163
  this.items.splice(this.rowIndex, 1);
162
164
  if (this.rowIndex >= this.items.length) {
163
165
  this.rowIndex = this.items.length - 1;
164
166
  }
165
- }
166
- else {
167
- this.items[0] = { key: '', value: '' };
167
+ } else {
168
+ this.items[0] = {
169
+ key: '',
170
+ value: ''
171
+ };
168
172
  }
169
173
  this.ghost = '';
170
174
  this.render(false);
@@ -173,20 +177,20 @@ class MapPrompt extends base_1.Prompt {
173
177
  // Submit
174
178
  if (char === '\r' || char === '\n') {
175
179
  // Validate duplicates
176
- const keys = this.items.map(i => i.key);
177
- const duplicates = keys.filter((item, index) => keys.indexOf(item) !== index && item !== '');
180
+ const keys = this.items.map((i)=>i.key);
181
+ const duplicates = keys.filter((item, index)=>keys.indexOf(item) !== index && item !== '');
178
182
  if (duplicates.length > 0) {
179
183
  this.errorMsg = `Duplicate keys found: ${duplicates.join(', ')}`;
180
184
  this.render(false);
181
185
  return;
182
186
  }
183
- if (keys.some(k => k === '')) {
187
+ if (keys.some((k)=>k === '')) {
184
188
  this.errorMsg = 'Keys cannot be empty';
185
189
  this.render(false);
186
190
  return;
187
191
  }
188
192
  const result = {};
189
- this.items.forEach(item => {
193
+ this.items.forEach((item)=>{
190
194
  result[item.key] = item.value;
191
195
  });
192
196
  this.submit(result);
@@ -199,14 +203,11 @@ class MapPrompt extends base_1.Prompt {
199
203
  if (item.key.length > 0) {
200
204
  item.key = item.key.slice(0, -1);
201
205
  this.updateGhost();
202
- }
203
- else {
206
+ } else {
204
207
  this.ghost = '';
205
208
  }
206
- }
207
- else {
208
- if (item.value.length > 0)
209
- item.value = item.value.slice(0, -1);
209
+ } else {
210
+ if (item.value.length > 0) item.value = item.value.slice(0, -1);
210
211
  }
211
212
  this.render(false);
212
213
  return;
@@ -217,8 +218,7 @@ class MapPrompt extends base_1.Prompt {
217
218
  if (this.colIndex === 0) {
218
219
  item.key += char;
219
220
  this.updateGhost();
220
- }
221
- else {
221
+ } else {
222
222
  item.value += char;
223
223
  }
224
224
  this.render(false);
@@ -232,8 +232,7 @@ class MapPrompt extends base_1.Prompt {
232
232
  this.ghost = '';
233
233
  this.render(false);
234
234
  }
235
- }
236
- else if (event.scroll === 'down') {
235
+ } else if (event.scroll === 'down') {
237
236
  if (this.rowIndex < this.items.length - 1) {
238
237
  this.rowIndex++;
239
238
  this.ghost = '';
@@ -242,5 +241,22 @@ class MapPrompt extends base_1.Prompt {
242
241
  }
243
242
  }
244
243
  }
245
- }
246
- exports.MapPrompt = MapPrompt;
244
+ constructor(options){
245
+ super(options), _define_property(this, "items", []), _define_property(this, "rowIndex", 0), _define_property(this, "colIndex", 0) // 0: Key, 1: Value
246
+ , _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 7), _define_property(this, "errorMsg", ''), _define_property(this, "ghost", '');
247
+ if (options.initial) {
248
+ this.items = Object.entries(options.initial).map(([key, value])=>({
249
+ key,
250
+ value
251
+ }));
252
+ }
253
+ if (this.items.length === 0) {
254
+ this.items.push({
255
+ key: '',
256
+ value: ''
257
+ });
258
+ }
259
+ }
260
+ };
261
+
262
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/map.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { MapOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\ninterface MapItem {\n key: string;\n value: string;\n}\n\nexport class MapPrompt extends Prompt<Record<string, string>, MapOptions> {\n private items: MapItem[] = [];\n private rowIndex: number = 0;\n private colIndex: number = 0; // 0: Key, 1: Value\n private scrollTop: number = 0;\n private readonly pageSize: number = 7;\n private errorMsg: string = '';\n private ghost: string = '';\n\n constructor(options: MapOptions) {\n super(options);\n if (options.initial) {\n this.items = Object.entries(options.initial).map(([key, value]) => ({ key, value }));\n }\n if (this.items.length === 0) {\n this.items.push({ key: '', value: '' });\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Title\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Layout Calculation\n const maxKeyWidth = Math.max(\n 5, // Minimum width\n ...this.items.map((item, idx) => {\n // Include ghost length in calculation if it's the active row\n const ghostLen = (idx === this.rowIndex && this.colIndex === 0) ? stringWidth(this.ghost) : 0;\n return stringWidth(item.key) + ghostLen;\n })\n ) + 2; // Padding\n\n // Scrolling Logic\n if (this.rowIndex < this.scrollTop) {\n this.scrollTop = this.rowIndex;\n } else if (this.rowIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.rowIndex - this.pageSize + 1;\n }\n // Clamping\n const maxScroll = Math.max(0, this.items.length - this.pageSize);\n this.scrollTop = Math.min(this.scrollTop, maxScroll);\n\n // Header\n const keyHeader = this.pad('Key', maxKeyWidth);\n output += ` ${ANSI.BOLD}${keyHeader}Value${ANSI.RESET}\\n`;\n\n // Rows\n const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleItems.forEach((item, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n const isRowActive = actualIndex === this.rowIndex;\n const pointer = isRowActive ? `${theme.main}${symbols.pointer}${ANSI.RESET} ` : ' ';\n\n // Render Key\n let keyStr = item.key;\n let ghostStr = '';\n \n if (isRowActive && this.colIndex === 0) {\n if (this.ghost) {\n ghostStr = `${theme.muted}${this.ghost}${ANSI.RESET}`;\n }\n keyStr = `${theme.main}${ANSI.UNDERLINE}${keyStr}${ANSI.RESET}${ghostStr}`;\n }\n\n // Adjust padding manually\n // We need visual width of key + ghost (if active)\n const keyVisualWidth = stringWidth(item.key) + (isRowActive && this.colIndex === 0 ? stringWidth(this.ghost) : 0);\n const padding = ' '.repeat(Math.max(0, maxKeyWidth - keyVisualWidth));\n\n // Render Value\n let valStr = item.value;\n if (isRowActive && this.colIndex === 1) {\n valStr = `${theme.main}${ANSI.UNDERLINE}${valStr || ' '}${ANSI.RESET}`;\n }\n\n output += `${pointer}${keyStr}${padding}${valStr}`;\n });\n\n // Instructions\n output += `\\n${ANSI.DIM}(Ctrl+N: Add, Ctrl+D: Del)${ANSI.RESET}`;\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n private pad(str: string, width: number): string {\n const len = stringWidth(str);\n if (len >= width) return str;\n return str + ' '.repeat(width - len);\n }\n\n private updateGhost() {\n this.ghost = '';\n if (this.colIndex !== 0 || !this.options.suggestions) return;\n \n const currentKey = this.items[this.rowIndex].key;\n if (!currentKey) return;\n\n const lowerKey = currentKey.toLowerCase();\n \n // Find first match\n const match = this.options.suggestions.find(s => s.toLowerCase().startsWith(lowerKey) && s.length > currentKey.length);\n \n if (match) {\n this.ghost = match.slice(currentKey.length);\n }\n }\n\n protected handleInput(char: string) {\n this.errorMsg = '';\n\n // Tab (Accept Suggestion) or Toggle Column\n if (char === '\\t') {\n if (this.colIndex === 0 && this.ghost) {\n this.items[this.rowIndex].key += this.ghost;\n this.ghost = '';\n this.render(false);\n return;\n }\n // Standard Tab behavior (toggle column)\n this.colIndex = this.colIndex === 0 ? 1 : 0;\n this.ghost = ''; // Clear ghost when changing columns\n this.render(false);\n return;\n }\n\n // Navigation\n if (this.isUp(char)) {\n if (this.rowIndex > 0) this.rowIndex--;\n this.ghost = '';\n this.render(false);\n return;\n }\n if (this.isDown(char)) {\n if (this.rowIndex < this.items.length - 1) {\n this.rowIndex++;\n } else {\n // Down at last row adds new row\n this.items.push({ key: '', value: '' });\n this.rowIndex++;\n this.colIndex = 0; \n }\n this.ghost = '';\n this.render(false);\n return;\n }\n if (this.isRight(char) || this.isLeft(char)) {\n this.colIndex = this.colIndex === 0 ? 1 : 0;\n this.ghost = '';\n this.render(false);\n return;\n }\n\n // CRUD\n if (char === '\\x0e') { // Ctrl+N\n this.items.push({ key: '', value: '' });\n this.rowIndex = this.items.length - 1;\n this.colIndex = 0;\n this.ghost = '';\n this.render(false);\n return;\n }\n\n if (char === '\\x04') { // Ctrl+D\n if (this.items.length > 1) {\n this.items.splice(this.rowIndex, 1);\n if (this.rowIndex >= this.items.length) {\n this.rowIndex = this.items.length - 1;\n }\n } else {\n this.items[0] = { key: '', value: '' };\n }\n this.ghost = '';\n this.render(false);\n return;\n }\n\n // Submit\n if (char === '\\r' || char === '\\n') {\n // Validate duplicates\n const keys = this.items.map(i => i.key);\n const duplicates = keys.filter((item, index) => keys.indexOf(item) !== index && item !== '');\n if (duplicates.length > 0) {\n this.errorMsg = `Duplicate keys found: ${duplicates.join(', ')}`;\n this.render(false);\n return;\n }\n if (keys.some(k => k === '')) {\n this.errorMsg = 'Keys cannot be empty';\n this.render(false);\n return;\n }\n\n const result: Record<string, string> = {};\n this.items.forEach(item => {\n result[item.key] = item.value;\n });\n this.submit(result);\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n const item = this.items[this.rowIndex];\n if (this.colIndex === 0) {\n if (item.key.length > 0) {\n item.key = item.key.slice(0, -1);\n this.updateGhost();\n } else {\n this.ghost = '';\n }\n } else {\n if (item.value.length > 0) item.value = item.value.slice(0, -1);\n }\n this.render(false);\n return;\n }\n\n // Typing\n if (!/^[\\x00-\\x1F]/.test(char)) {\n const item = this.items[this.rowIndex];\n if (this.colIndex === 0) {\n item.key += char;\n this.updateGhost();\n } else {\n item.value += char;\n }\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.rowIndex > 0) {\n this.rowIndex--;\n this.ghost = '';\n this.render(false);\n }\n } else if (event.scroll === 'down') {\n if (this.rowIndex < this.items.length - 1) {\n this.rowIndex++;\n this.ghost = '';\n this.render(false);\n }\n }\n }\n }\n}\n"],"names":["MapPrompt","Prompt","render","_firstRender","output","icon","errorMsg","theme","error","symbols","cross","success","ANSI","BOLD","title","options","message","RESET","maxKeyWidth","Math","max","items","map","item","idx","ghostLen","rowIndex","colIndex","stringWidth","ghost","key","scrollTop","pageSize","maxScroll","length","min","keyHeader","pad","visibleItems","slice","forEach","index","actualIndex","isRowActive","pointer","main","keyStr","ghostStr","muted","UNDERLINE","keyVisualWidth","padding","repeat","valStr","value","DIM","renderFrame","str","width","len","updateGhost","suggestions","currentKey","lowerKey","toLowerCase","match","find","s","startsWith","handleInput","char","isUp","isDown","push","isRight","isLeft","splice","keys","i","duplicates","filter","indexOf","join","some","k","result","submit","test","handleMouse","event","action","scroll","initial","Object","entries"],"mappings":"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"}