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
@@ -1,30 +1,40 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MatchPrompt = 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 MatchPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- // Links: Source ID -> Set of Target IDs
13
- this.links = new Map();
14
- this.cursorSource = 0;
15
- this.cursorTarget = 0;
16
- this.scrollTopSource = 0;
17
- this.scrollTopTarget = 0;
18
- this.activeSide = 'source';
19
- this.pickedSourceIndex = null;
20
- this.pageSize = 10;
21
- this.source = this.normalize(options.source);
22
- this.target = this.normalize(options.target);
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "MatchPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return MatchPrompt;
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;
23
26
  }
27
+ return obj;
28
+ }
29
+ let MatchPrompt = class MatchPrompt extends _base.Prompt {
24
30
  normalize(items) {
25
- return items.map(item => {
31
+ return items.map((item)=>{
26
32
  if (typeof item === 'string') {
27
- return { id: item, label: item, value: item };
33
+ return {
34
+ id: item,
35
+ label: item,
36
+ value: item
37
+ };
28
38
  }
29
39
  return item;
30
40
  });
@@ -34,25 +44,20 @@ class MatchPrompt extends base_1.Prompt {
34
44
  const colWidth = Math.floor((termWidth - 8) / 2); // -8 for middle spacing and borders
35
45
  // Adjust Scroll Top
36
46
  if (this.activeSide === 'source') {
37
- if (this.cursorSource < this.scrollTopSource)
38
- this.scrollTopSource = this.cursorSource;
39
- if (this.cursorSource >= this.scrollTopSource + this.pageSize)
40
- this.scrollTopSource = this.cursorSource - this.pageSize + 1;
41
- }
42
- else {
43
- if (this.cursorTarget < this.scrollTopTarget)
44
- this.scrollTopTarget = this.cursorTarget;
45
- if (this.cursorTarget >= this.scrollTopTarget + this.pageSize)
46
- this.scrollTopTarget = this.cursorTarget - this.pageSize + 1;
47
+ if (this.cursorSource < this.scrollTopSource) this.scrollTopSource = this.cursorSource;
48
+ if (this.cursorSource >= this.scrollTopSource + this.pageSize) this.scrollTopSource = this.cursorSource - this.pageSize + 1;
49
+ } else {
50
+ if (this.cursorTarget < this.scrollTopTarget) this.scrollTopTarget = this.cursorTarget;
51
+ if (this.cursorTarget >= this.scrollTopTarget + this.pageSize) this.scrollTopTarget = this.cursorTarget - this.pageSize + 1;
47
52
  }
48
- let output = `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
53
+ let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
49
54
  // Headers
50
- const sourceTitle = this.activeSide === 'source' ? `${theme_1.theme.main}Source${ansi_1.ANSI.RESET}` : 'Source';
51
- const targetTitle = this.activeSide === 'target' ? `${theme_1.theme.main}Target${ansi_1.ANSI.RESET}` : 'Target';
55
+ const sourceTitle = this.activeSide === 'source' ? `${_theme.theme.main}Source${_ansi.ANSI.RESET}` : 'Source';
56
+ const targetTitle = this.activeSide === 'target' ? `${_theme.theme.main}Target${_ansi.ANSI.RESET}` : 'Target';
52
57
  output += ` ${sourceTitle}`.padEnd(colWidth + 2) + ' ' + ` ${targetTitle}\n`;
53
- output += ` ${ansi_1.ANSI.DIM}${symbols_1.symbols.line.repeat(colWidth)}${ansi_1.ANSI.RESET} ${ansi_1.ANSI.DIM}${symbols_1.symbols.line.repeat(colWidth)}${ansi_1.ANSI.RESET}\n`;
58
+ output += ` ${_ansi.ANSI.DIM}${_symbols.symbols.line.repeat(colWidth)}${_ansi.ANSI.RESET} ${_ansi.ANSI.DIM}${_symbols.symbols.line.repeat(colWidth)}${_ansi.ANSI.RESET}\n`;
54
59
  // Render Rows
55
- for (let i = 0; i < this.pageSize; i++) {
60
+ for(let i = 0; i < this.pageSize; i++){
56
61
  const idxSource = this.scrollTopSource + i;
57
62
  const idxTarget = this.scrollTopTarget + i;
58
63
  const itemSource = this.source[idxSource];
@@ -64,30 +69,25 @@ class MatchPrompt extends base_1.Prompt {
64
69
  const isPicked = this.pickedSourceIndex === idxSource;
65
70
  const hasLinks = this.links.has(itemSource.id) && this.links.get(itemSource.id).size > 0;
66
71
  let prefix = ' ';
67
- if (isSelected)
68
- prefix = `${theme_1.theme.main}${symbols_1.symbols.pointer} `;
69
- if (isPicked)
70
- prefix = `${theme_1.theme.success}${symbols_1.symbols.pointer} `;
72
+ if (isSelected) prefix = `${_theme.theme.main}${_symbols.symbols.pointer} `;
73
+ if (isPicked) prefix = `${_theme.theme.success}${_symbols.symbols.pointer} `;
71
74
  let title = this.truncate(itemSource.label, colWidth - 4);
72
75
  // Color logic
73
76
  if (isPicked) {
74
- title = `${theme_1.theme.success}${title}${ansi_1.ANSI.RESET}`;
75
- }
76
- else if (hasLinks) {
77
- title = `${theme_1.theme.success}${title}${ansi_1.ANSI.RESET}`;
78
- }
79
- else if (isSelected) {
80
- title = `${ansi_1.ANSI.FG_CYAN}${title}${ansi_1.ANSI.RESET}`;
77
+ title = `${_theme.theme.success}${title}${_ansi.ANSI.RESET}`;
78
+ } else if (hasLinks) {
79
+ title = `${_theme.theme.success}${title}${_ansi.ANSI.RESET}`;
80
+ } else if (isSelected) {
81
+ title = `${_ansi.ANSI.FG_CYAN}${title}${_ansi.ANSI.RESET}`;
81
82
  }
82
83
  // Indicator for links
83
- const linkIndicator = hasLinks ? `${theme_1.theme.success}*${ansi_1.ANSI.RESET}` : ' ';
84
+ const linkIndicator = hasLinks ? `${_theme.theme.success}*${_ansi.ANSI.RESET}` : ' ';
84
85
  sourceStr = `${prefix}${title} ${linkIndicator}`;
85
86
  // Highlight connected targets?
86
87
  if (isSelected || isPicked) {
87
- // This is handled in Target render
88
+ // This is handled in Target render
88
89
  }
89
- }
90
- else {
90
+ } else {
91
91
  sourceStr = '';
92
92
  }
93
93
  // Target Column
@@ -101,7 +101,7 @@ class MatchPrompt extends base_1.Prompt {
101
101
  let isLinkedToRelevant = false;
102
102
  let isLinkedToAny = false;
103
103
  // Check links
104
- for (const [sId, tIds] of Array.from(this.links.entries())) {
104
+ for (const [sId, tIds] of Array.from(this.links.entries())){
105
105
  if (tIds.has(itemTarget.id)) {
106
106
  isLinkedToAny = true;
107
107
  if (relevantSource && sId === relevantSource.id) {
@@ -110,35 +110,31 @@ class MatchPrompt extends base_1.Prompt {
110
110
  }
111
111
  }
112
112
  let prefix = ' ';
113
- if (isSelected)
114
- prefix = `${theme_1.theme.main}${symbols_1.symbols.pointer} `;
113
+ if (isSelected) prefix = `${_theme.theme.main}${_symbols.symbols.pointer} `;
115
114
  let title = this.truncate(itemTarget.label, colWidth - 4);
116
115
  if (isLinkedToRelevant) {
117
- title = `${theme_1.theme.success}${title}${ansi_1.ANSI.RESET}`;
118
- }
119
- else if (isLinkedToAny) {
116
+ title = `${_theme.theme.success}${title}${_ansi.ANSI.RESET}`;
117
+ } else if (isLinkedToAny) {
120
118
  // Linked to someone else
121
- title = `${ansi_1.ANSI.DIM}${title}${ansi_1.ANSI.RESET}`;
122
- }
123
- else if (isSelected) {
124
- title = `${ansi_1.ANSI.FG_CYAN}${title}${ansi_1.ANSI.RESET}`;
119
+ title = `${_ansi.ANSI.DIM}${title}${_ansi.ANSI.RESET}`;
120
+ } else if (isSelected) {
121
+ title = `${_ansi.ANSI.FG_CYAN}${title}${_ansi.ANSI.RESET}`;
125
122
  }
126
123
  // Indicator
127
- const linkIndicator = isLinkedToRelevant ? `${theme_1.theme.success}<=${ansi_1.ANSI.RESET}` : (isLinkedToAny ? `${ansi_1.ANSI.DIM}<=${ansi_1.ANSI.RESET}` : ' ');
124
+ const linkIndicator = isLinkedToRelevant ? `${_theme.theme.success}<=${_ansi.ANSI.RESET}` : isLinkedToAny ? `${_ansi.ANSI.DIM}<=${_ansi.ANSI.RESET}` : ' ';
128
125
  targetStr = `${linkIndicator} ${prefix}${title}`;
129
126
  }
130
127
  // Pad Source
131
- const sourceVisualLen = itemSource ? ((0, utils_1.stringWidth)(this.stripAnsi(sourceStr))) : 0;
128
+ const sourceVisualLen = itemSource ? (0, _utils.stringWidth)(this.stripAnsi(sourceStr)) : 0;
132
129
  const padding = ' '.repeat(Math.max(0, colWidth - sourceVisualLen + 2)); // +2 extra space
133
130
  output += sourceStr + padding + ' ' + targetStr + '\n';
134
131
  }
135
132
  // Instructions
136
133
  if (this.pickedSourceIndex !== null) {
137
- output += `\n${theme_1.theme.success}Linking: ${this.source[this.pickedSourceIndex].label}${ansi_1.ANSI.RESET}`;
138
- output += `\n${ansi_1.ANSI.DIM}Select Target to Link/Unlink. Esc to Cancel.${ansi_1.ANSI.RESET}`;
139
- }
140
- else {
141
- output += `\n${ansi_1.ANSI.DIM}Space to Pick Source, Enter to Submit.${ansi_1.ANSI.RESET}`;
134
+ output += `\n${_theme.theme.success}Linking: ${this.source[this.pickedSourceIndex].label}${_ansi.ANSI.RESET}`;
135
+ output += `\n${_ansi.ANSI.DIM}Select Target to Link/Unlink. Esc to Cancel.${_ansi.ANSI.RESET}`;
136
+ } else {
137
+ output += `\n${_ansi.ANSI.DIM}Space to Pick Source, Enter to Submit.${_ansi.ANSI.RESET}`;
142
138
  }
143
139
  this.renderFrame(output);
144
140
  }
@@ -147,8 +143,7 @@ class MatchPrompt extends base_1.Prompt {
147
143
  if (this.isUp(char)) {
148
144
  if (this.activeSide === 'source') {
149
145
  this.cursorSource = Math.max(0, this.cursorSource - 1);
150
- }
151
- else {
146
+ } else {
152
147
  this.cursorTarget = Math.max(0, this.cursorTarget - 1);
153
148
  }
154
149
  this.render(false);
@@ -157,8 +152,7 @@ class MatchPrompt extends base_1.Prompt {
157
152
  if (this.isDown(char)) {
158
153
  if (this.activeSide === 'source') {
159
154
  this.cursorSource = Math.min(this.source.length - 1, this.cursorSource + 1);
160
- }
161
- else {
155
+ } else {
162
156
  this.cursorTarget = Math.min(this.target.length - 1, this.cursorTarget + 1);
163
157
  }
164
158
  this.render(false);
@@ -170,10 +164,9 @@ class MatchPrompt extends base_1.Prompt {
170
164
  // Pick Source
171
165
  this.pickedSourceIndex = this.cursorSource;
172
166
  this.activeSide = 'target';
173
- // Try to find first linked target or stay at top?
174
- // Stay at top or current pos is fine.
175
- }
176
- else {
167
+ // Try to find first linked target or stay at top?
168
+ // Stay at top or current pos is fine.
169
+ } else {
177
170
  // Toggle Link
178
171
  if (this.pickedSourceIndex !== null) {
179
172
  const sId = this.source[this.pickedSourceIndex].id;
@@ -185,11 +178,10 @@ class MatchPrompt extends base_1.Prompt {
185
178
  if (sourceLinks.has(tId)) {
186
179
  // Unlink
187
180
  sourceLinks.delete(tId);
188
- }
189
- else {
181
+ } else {
190
182
  // Link
191
183
  if (this.options.constraints?.oneToMany === false) {
192
- for (const [otherSId, tIds] of Array.from(this.links.entries())) {
184
+ for (const [otherSId, tIds] of Array.from(this.links.entries())){
193
185
  if (otherSId !== sId && tIds.has(tId)) {
194
186
  tIds.delete(tId);
195
187
  }
@@ -197,7 +189,7 @@ class MatchPrompt extends base_1.Prompt {
197
189
  }
198
190
  sourceLinks.add(tId);
199
191
  }
200
- // Stay in Target side to allow picking more?
192
+ // Stay in Target side to allow picking more?
201
193
  }
202
194
  }
203
195
  this.render(false);
@@ -208,7 +200,7 @@ class MatchPrompt extends base_1.Prompt {
208
200
  // Check Required Constraint
209
201
  if (this.options.constraints?.required) {
210
202
  // Check if all sources have at least one link
211
- const allLinked = this.source.every(s => {
203
+ const allLinked = this.source.every((s)=>{
212
204
  return this.links.has(s.id) && this.links.get(s.id).size > 0;
213
205
  });
214
206
  if (!allLinked) {
@@ -217,11 +209,11 @@ class MatchPrompt extends base_1.Prompt {
217
209
  }
218
210
  // Submit Result: Record<SourceID, TargetValue[]>
219
211
  const result = {};
220
- for (const [sId, tIds] of Array.from(this.links.entries())) {
212
+ for (const [sId, tIds] of Array.from(this.links.entries())){
221
213
  if (tIds.size > 0) {
222
214
  // Map Target IDs back to Values
223
- const values = Array.from(tIds).map(tid => {
224
- return this.target.find(t => t.id === tid)?.value;
215
+ const values = Array.from(tIds).map((tid)=>{
216
+ return this.target.find((t)=>t.id === tid)?.value;
225
217
  });
226
218
  result[sId] = values;
227
219
  }
@@ -230,7 +222,7 @@ class MatchPrompt extends base_1.Prompt {
230
222
  return;
231
223
  }
232
224
  // Escape / Backspace to go back to Source
233
- if (char === '\u001b' || char === '\u0008' || char === '\x7f' || char === 'h') { // h for vim left
225
+ if (char === '\u001b' || char === '\u0008' || char === '\x7f' || char === 'h') {
234
226
  if (this.activeSide === 'target') {
235
227
  this.activeSide = 'source';
236
228
  this.pickedSourceIndex = null;
@@ -255,21 +247,25 @@ class MatchPrompt extends base_1.Prompt {
255
247
  if (event.scroll === 'up') {
256
248
  if (this.activeSide === 'source') {
257
249
  this.cursorSource = Math.max(0, this.cursorSource - 1);
258
- }
259
- else {
250
+ } else {
260
251
  this.cursorTarget = Math.max(0, this.cursorTarget - 1);
261
252
  }
262
- }
263
- else {
253
+ } else {
264
254
  if (this.activeSide === 'source') {
265
255
  this.cursorSource = Math.min(this.source.length - 1, this.cursorSource + 1);
266
- }
267
- else {
256
+ } else {
268
257
  this.cursorTarget = Math.min(this.target.length - 1, this.cursorTarget + 1);
269
258
  }
270
259
  }
271
260
  this.render(false);
272
261
  }
273
262
  }
274
- }
275
- exports.MatchPrompt = MatchPrompt;
263
+ constructor(options){
264
+ super(options), _define_property(this, "source", void 0), _define_property(this, "target", void 0), // Links: Source ID -> Set of Target IDs
265
+ _define_property(this, "links", new Map()), _define_property(this, "cursorSource", 0), _define_property(this, "cursorTarget", 0), _define_property(this, "scrollTopSource", 0), _define_property(this, "scrollTopTarget", 0), _define_property(this, "activeSide", 'source'), _define_property(this, "pickedSourceIndex", null), _define_property(this, "pageSize", 10);
266
+ this.source = this.normalize(options.source);
267
+ this.target = this.normalize(options.target);
268
+ }
269
+ };
270
+
271
+ //# sourceMappingURL=match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/match.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { MatchOptions, MatchItem, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class MatchPrompt extends Prompt<Record<string, any[]>, MatchOptions> {\n private source: MatchItem[];\n private target: MatchItem[];\n // Links: Source ID -> Set of Target IDs\n private links: Map<string, Set<string>> = new Map();\n\n private cursorSource: number = 0;\n private cursorTarget: number = 0;\n private scrollTopSource: number = 0;\n private scrollTopTarget: number = 0;\n\n private activeSide: 'source' | 'target' = 'source';\n private pickedSourceIndex: number | null = null;\n\n private readonly pageSize: number = 10;\n\n constructor(options: MatchOptions) {\n super(options);\n this.source = this.normalize(options.source);\n this.target = this.normalize(options.target);\n }\n\n private normalize(items: (string | MatchItem)[]): MatchItem[] {\n return items.map(item => {\n if (typeof item === 'string') {\n return { id: item, label: item, value: item };\n }\n return item;\n });\n }\n\n protected render(_firstRender: boolean) {\n const termWidth = process.stdout.columns || 80;\n const colWidth = Math.floor((termWidth - 8) / 2); // -8 for middle spacing and borders\n\n // Adjust Scroll Top\n if (this.activeSide === 'source') {\n if (this.cursorSource < this.scrollTopSource) this.scrollTopSource = this.cursorSource;\n if (this.cursorSource >= this.scrollTopSource + this.pageSize) this.scrollTopSource = this.cursorSource - this.pageSize + 1;\n } else {\n if (this.cursorTarget < this.scrollTopTarget) this.scrollTopTarget = this.cursorTarget;\n if (this.cursorTarget >= this.scrollTopTarget + this.pageSize) this.scrollTopTarget = this.cursorTarget - this.pageSize + 1;\n }\n\n let output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Headers\n const sourceTitle = this.activeSide === 'source' ? `${theme.main}Source${ANSI.RESET}` : 'Source';\n const targetTitle = this.activeSide === 'target' ? `${theme.main}Target${ANSI.RESET}` : 'Target';\n\n output += ` ${sourceTitle}`.padEnd(colWidth + 2) + ' ' + ` ${targetTitle}\\n`;\n output += ` ${ANSI.DIM}${symbols.line.repeat(colWidth)}${ANSI.RESET} ${ANSI.DIM}${symbols.line.repeat(colWidth)}${ANSI.RESET}\\n`;\n\n // Render Rows\n for (let i = 0; i < this.pageSize; i++) {\n const idxSource = this.scrollTopSource + i;\n const idxTarget = this.scrollTopTarget + i;\n\n const itemSource = this.source[idxSource];\n const itemTarget = this.target[idxTarget];\n\n // Source Column\n let sourceStr = '';\n\n if (itemSource) {\n const isSelected = this.activeSide === 'source' && idxSource === this.cursorSource;\n const isPicked = this.pickedSourceIndex === idxSource;\n const hasLinks = this.links.has(itemSource.id) && this.links.get(itemSource.id)!.size > 0;\n\n let prefix = ' ';\n if (isSelected) prefix = `${theme.main}${symbols.pointer} `;\n if (isPicked) prefix = `${theme.success}${symbols.pointer} `;\n\n let title = this.truncate(itemSource.label, colWidth - 4);\n\n // Color logic\n if (isPicked) {\n title = `${theme.success}${title}${ANSI.RESET}`;\n } else if (hasLinks) {\n title = `${theme.success}${title}${ANSI.RESET}`;\n } else if (isSelected) {\n title = `${ANSI.FG_CYAN}${title}${ANSI.RESET}`;\n }\n\n // Indicator for links\n const linkIndicator = hasLinks ? `${theme.success}*${ANSI.RESET}` : ' ';\n\n sourceStr = `${prefix}${title} ${linkIndicator}`;\n\n // Highlight connected targets?\n if (isSelected || isPicked) {\n // This is handled in Target render\n }\n } else {\n sourceStr = '';\n }\n\n // Target Column\n let targetStr = '';\n if (itemTarget) {\n const isSelected = this.activeSide === 'target' && idxTarget === this.cursorTarget;\n\n // Determine if this target is linked to the RELEVANT source\n // Relevant source is: Picked Source OR (if none picked) Cursor Source\n const relevantSourceIdx = this.pickedSourceIndex !== null ? this.pickedSourceIndex : this.cursorSource;\n const relevantSource = this.source[relevantSourceIdx];\n\n let isLinkedToRelevant = false;\n let isLinkedToAny = false;\n\n // Check links\n for (const [sId, tIds] of Array.from(this.links.entries())) {\n if (tIds.has(itemTarget.id)) {\n isLinkedToAny = true;\n if (relevantSource && sId === relevantSource.id) {\n isLinkedToRelevant = true;\n }\n }\n }\n\n let prefix = ' ';\n if (isSelected) prefix = `${theme.main}${symbols.pointer} `;\n\n let title = this.truncate(itemTarget.label, colWidth - 4);\n\n if (isLinkedToRelevant) {\n title = `${theme.success}${title}${ANSI.RESET}`;\n } else if (isLinkedToAny) {\n // Linked to someone else\n title = `${ANSI.DIM}${title}${ANSI.RESET}`;\n } else if (isSelected) {\n title = `${ANSI.FG_CYAN}${title}${ANSI.RESET}`;\n }\n\n // Indicator\n const linkIndicator = isLinkedToRelevant ? `${theme.success}<=${ANSI.RESET}` : (isLinkedToAny ? `${ANSI.DIM}<=${ANSI.RESET}` : ' ');\n\n targetStr = `${linkIndicator} ${prefix}${title}`;\n }\n\n // Pad Source\n const sourceVisualLen = itemSource ? (stringWidth(this.stripAnsi(sourceStr))) : 0;\n const padding = ' '.repeat(Math.max(0, colWidth - sourceVisualLen + 2)); // +2 extra space\n\n output += sourceStr + padding + ' ' + targetStr + '\\n';\n }\n\n // Instructions\n if (this.pickedSourceIndex !== null) {\n output += `\\n${theme.success}Linking: ${this.source[this.pickedSourceIndex].label}${ANSI.RESET}`;\n output += `\\n${ANSI.DIM}Select Target to Link/Unlink. Esc to Cancel.${ANSI.RESET}`;\n } else {\n output += `\\n${ANSI.DIM}Space to Pick Source, Enter to Submit.${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n // Navigation\n if (this.isUp(char)) {\n if (this.activeSide === 'source') {\n this.cursorSource = Math.max(0, this.cursorSource - 1);\n } else {\n this.cursorTarget = Math.max(0, this.cursorTarget - 1);\n }\n this.render(false);\n return;\n }\n\n if (this.isDown(char)) {\n if (this.activeSide === 'source') {\n this.cursorSource = Math.min(this.source.length - 1, this.cursorSource + 1);\n } else {\n this.cursorTarget = Math.min(this.target.length - 1, this.cursorTarget + 1);\n }\n this.render(false);\n return;\n }\n\n // Space: Action\n if (char === ' ') {\n if (this.activeSide === 'source') {\n // Pick Source\n this.pickedSourceIndex = this.cursorSource;\n this.activeSide = 'target';\n // Try to find first linked target or stay at top?\n // Stay at top or current pos is fine.\n } else {\n // Toggle Link\n if (this.pickedSourceIndex !== null) {\n const sId = this.source[this.pickedSourceIndex].id;\n const tId = this.target[this.cursorTarget].id;\n\n if (!this.links.has(sId)) {\n this.links.set(sId, new Set());\n }\n\n const sourceLinks = this.links.get(sId)!;\n\n if (sourceLinks.has(tId)) {\n // Unlink\n sourceLinks.delete(tId);\n } else {\n // Link\n if (this.options.constraints?.oneToMany === false) {\n\n for (const [otherSId, tIds] of Array.from(this.links.entries())) {\n if (otherSId !== sId && tIds.has(tId)) {\n tIds.delete(tId);\n }\n }\n }\n\n sourceLinks.add(tId);\n }\n // Stay in Target side to allow picking more?\n }\n }\n this.render(false);\n return;\n }\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n // Check Required Constraint\n if (this.options.constraints?.required) {\n // Check if all sources have at least one link\n const allLinked = this.source.every(s => {\n return this.links.has(s.id) && this.links.get(s.id)!.size > 0;\n });\n\n if (!allLinked) {\n return;\n }\n }\n\n // Submit Result: Record<SourceID, TargetValue[]>\n const result: Record<string, any[]> = {};\n for (const [sId, tIds] of Array.from(this.links.entries())) {\n if (tIds.size > 0) {\n // Map Target IDs back to Values\n const values = Array.from(tIds).map(tid => {\n return this.target.find(t => t.id === tid)?.value;\n });\n result[sId] = values;\n }\n }\n this.submit(result);\n return;\n }\n\n // Escape / Backspace to go back to Source\n if (char === '\\u001b' || char === '\\u0008' || char === '\\x7f' || char === 'h') { // h for vim left\n if (this.activeSide === 'target') {\n this.activeSide = 'source';\n this.pickedSourceIndex = null;\n this.render(false);\n }\n return;\n }\n\n // Tab\n if (char === '\\t') {\n this.activeSide = this.activeSide === 'source' ? 'target' : 'source';\n // If switching to target without picking, pickedIndex is null.\n // Just viewing mode.\n if (this.activeSide === 'source') {\n this.pickedSourceIndex = null;\n }\n this.render(false);\n return;\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.activeSide === 'source') {\n this.cursorSource = Math.max(0, this.cursorSource - 1);\n } else {\n this.cursorTarget = Math.max(0, this.cursorTarget - 1);\n }\n } else {\n if (this.activeSide === 'source') {\n this.cursorSource = Math.min(this.source.length - 1, this.cursorSource + 1);\n } else {\n this.cursorTarget = Math.min(this.target.length - 1, this.cursorTarget + 1);\n }\n }\n this.render(false);\n }\n }\n}\n"],"names":["MatchPrompt","Prompt","normalize","items","map","item","id","label","value","render","_firstRender","termWidth","process","stdout","columns","colWidth","Math","floor","activeSide","cursorSource","scrollTopSource","pageSize","cursorTarget","scrollTopTarget","output","theme","success","ANSI","RESET","BOLD","title","options","message","sourceTitle","main","targetTitle","padEnd","DIM","symbols","line","repeat","i","idxSource","idxTarget","itemSource","source","itemTarget","target","sourceStr","isSelected","isPicked","pickedSourceIndex","hasLinks","links","has","get","size","prefix","pointer","truncate","FG_CYAN","linkIndicator","targetStr","relevantSourceIdx","relevantSource","isLinkedToRelevant","isLinkedToAny","sId","tIds","Array","from","entries","sourceVisualLen","stringWidth","stripAnsi","padding","max","renderFrame","handleInput","char","isUp","isDown","min","length","tId","set","Set","sourceLinks","delete","constraints","oneToMany","otherSId","add","required","allLinked","every","s","result","values","tid","find","t","submit","handleMouse","event","action","scroll","Map"],"mappings":"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"}
@@ -1,44 +1,48 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MillerPrompt = void 0;
4
- const base_1 = require("../base");
5
- const theme_1 = require("../theme");
6
- const ansi_1 = require("../ansi");
7
- const symbols_1 = require("../symbols");
8
- const utils_1 = require("../utils");
9
- class MillerPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.selections = [];
13
- this.activeCol = 0;
14
- this.scrollTops = []; // Scroll position for each column
15
- // Layout
16
- this.colWidth = 0;
17
- this.visibleCols = 3;
18
- this.selections = [0];
19
- this.scrollTops = [0];
20
- // TODO: Map initial values to selections if provided
21
- this.calculateLayout();
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "MillerPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return MillerPrompt;
22
9
  }
10
+ });
11
+ const _base = require("../base");
12
+ const _theme = require("../theme");
13
+ const _ansi = require("../ansi");
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 MillerPrompt = class MillerPrompt extends _base.Prompt {
23
30
  calculateLayout() {
24
31
  const termWidth = process.stdout.columns || 80;
25
32
  // We aim for 3 columns? Or based on width?
26
33
  // Minimum width per column ~ 20?
27
34
  this.visibleCols = Math.floor(termWidth / 20);
28
- if (this.visibleCols < 1)
29
- this.visibleCols = 1;
30
- if (this.visibleCols > 4)
31
- this.visibleCols = 4; // Cap at 4
35
+ if (this.visibleCols < 1) this.visibleCols = 1;
36
+ if (this.visibleCols > 4) this.visibleCols = 4; // Cap at 4
32
37
  this.colWidth = Math.floor((termWidth - 4) / this.visibleCols); // -4 for margins
33
38
  }
34
39
  getColumnData(depth) {
35
40
  let current = this.options.data;
36
- for (let i = 0; i < depth; i++) {
41
+ for(let i = 0; i < depth; i++){
37
42
  const sel = this.selections[i];
38
43
  if (current[sel] && current[sel].children) {
39
44
  current = current[sel].children;
40
- }
41
- else {
45
+ } else {
42
46
  return undefined;
43
47
  }
44
48
  }
@@ -46,103 +50,98 @@ class MillerPrompt extends base_1.Prompt {
46
50
  }
47
51
  render(_firstRender) {
48
52
  let output = '';
49
- output += `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
53
+ output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
50
54
  let startCol = 0;
51
55
  if (this.activeCol >= this.visibleCols) {
52
56
  startCol = this.activeCol - this.visibleCols + 1;
53
57
  }
54
58
  // Construct columns content
55
59
  const columnsToRender = [];
56
- for (let c = startCol; c < startCol + this.visibleCols; c++) {
60
+ for(let c = startCol; c < startCol + this.visibleCols; c++){
57
61
  const data = this.getColumnData(c);
58
- if (!data)
59
- break;
62
+ if (!data) break;
60
63
  const rows = [];
61
64
  const selectedIdx = this.selections[c] ?? -1;
62
65
  const isFocusedCol = c === this.activeCol;
63
66
  // Scroll handling
64
67
  const pageSize = 10; // Fixed height for now
65
- if (!this.scrollTops[c])
66
- this.scrollTops[c] = 0;
68
+ if (!this.scrollTops[c]) this.scrollTops[c] = 0;
67
69
  if (selectedIdx !== -1) {
68
70
  if (selectedIdx < this.scrollTops[c]) {
69
71
  this.scrollTops[c] = selectedIdx;
70
- }
71
- else if (selectedIdx >= this.scrollTops[c] + pageSize) {
72
+ } else if (selectedIdx >= this.scrollTops[c] + pageSize) {
72
73
  this.scrollTops[c] = selectedIdx - pageSize + 1;
73
74
  }
74
75
  }
75
76
  // Render rows
76
77
  const start = this.scrollTops[c];
77
78
  const end = Math.min(data.length, start + pageSize);
78
- for (let i = start; i < end; i++) {
79
+ for(let i = start; i < end; i++){
79
80
  const item = data[i];
80
81
  const isSelected = i === selectedIdx;
81
82
  const isFocused = isSelected && isFocusedCol;
82
83
  let prefix = ' ';
83
84
  if (isSelected) {
84
- prefix = isFocused ? `${theme_1.theme.main}${symbols_1.symbols.pointer}${ansi_1.ANSI.RESET}` : `${theme_1.theme.muted}${symbols_1.symbols.pointer}${ansi_1.ANSI.RESET}`;
85
+ prefix = isFocused ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET}` : `${_theme.theme.muted}${_symbols.symbols.pointer}${_ansi.ANSI.RESET}`;
85
86
  }
86
87
  let title = item.title;
87
88
  // Truncate
88
- if ((0, utils_1.stringWidth)(title) > this.colWidth - 4) {
89
+ if ((0, _utils.stringWidth)(title) > this.colWidth - 4) {
89
90
  title = title.slice(0, this.colWidth - 5) + '…';
90
91
  }
91
- let line = `${prefix} ${isSelected && isFocused ? theme_1.theme.main : ''}${title}${ansi_1.ANSI.RESET}`;
92
+ let line = `${prefix} ${isSelected && isFocused ? _theme.theme.main : ''}${title}${_ansi.ANSI.RESET}`;
92
93
  // Add arrow if children exist
93
94
  if (item.children && item.children.length > 0) {
94
- const pad = this.colWidth - (0, utils_1.stringWidth)((0, utils_1.stripAnsi)(line)) - 2;
95
- line += ' '.repeat(Math.max(0, pad)) + `${theme_1.theme.muted}>${ansi_1.ANSI.RESET}`;
95
+ const pad = this.colWidth - (0, _utils.stringWidth)((0, _utils.stripAnsi)(line)) - 2;
96
+ line += ' '.repeat(Math.max(0, pad)) + `${_theme.theme.muted}>${_ansi.ANSI.RESET}`;
96
97
  }
97
98
  rows.push(line);
98
99
  }
99
100
  // Pad column to pageSize
100
- while (rows.length < pageSize) {
101
+ while(rows.length < pageSize){
101
102
  rows.push('');
102
103
  }
103
104
  columnsToRender.push(rows);
104
105
  }
105
106
  // Combine columns side by side
106
107
  const rowCount = 10;
107
- for (let r = 0; r < rowCount; r++) {
108
+ for(let r = 0; r < rowCount; r++){
108
109
  let line = '';
109
- for (let c = 0; c < columnsToRender.length; c++) {
110
+ for(let c = 0; c < columnsToRender.length; c++){
110
111
  let cell = columnsToRender[c][r] || '';
111
112
  // Pad cell
112
- const len = (0, utils_1.stringWidth)((0, utils_1.stripAnsi)(cell));
113
+ const len = (0, _utils.stringWidth)((0, _utils.stripAnsi)(cell));
113
114
  const pad = this.colWidth - len;
114
115
  cell += ' '.repeat(Math.max(0, pad));
115
116
  line += cell;
116
117
  // Separator
117
118
  if (c < columnsToRender.length - 1) {
118
- line += `${theme_1.theme.muted}│${ansi_1.ANSI.RESET} `;
119
+ line += `${_theme.theme.muted}│${_ansi.ANSI.RESET} `;
119
120
  }
120
121
  }
121
122
  output += line + '\n';
122
123
  }
123
124
  // Breadcrumbs / Status
124
125
  const pathTitles = [];
125
- for (let i = 0; i <= this.activeCol; i++) {
126
+ for(let i = 0; i <= this.activeCol; i++){
126
127
  const data = this.getColumnData(i);
127
128
  if (data && typeof this.selections[i] === 'number') {
128
129
  pathTitles.push(data[this.selections[i]].title);
129
130
  }
130
131
  }
131
- output += `${theme_1.theme.muted}Path: ${pathTitles.join(' / ')}${ansi_1.ANSI.RESET}`;
132
+ output += `${_theme.theme.muted}Path: ${pathTitles.join(' / ')}${_ansi.ANSI.RESET}`;
132
133
  this.renderFrame(output);
133
134
  }
134
135
  handleInput(char) {
135
136
  const currentData = this.getColumnData(this.activeCol);
136
- if (!currentData)
137
- return; // Should not happen
137
+ if (!currentData) return; // Should not happen
138
138
  // Enter
139
139
  if (char === '\r' || char === '\n') {
140
140
  // Collect values
141
141
  const values = [];
142
- for (let i = 0; i <= this.activeCol; i++) {
142
+ for(let i = 0; i <= this.activeCol; i++){
143
143
  const d = this.getColumnData(i);
144
- if (d)
145
- values.push(d[this.selections[i]].value);
144
+ if (d) values.push(d[this.selections[i]].value);
146
145
  }
147
146
  this.submit(values);
148
147
  return;
@@ -152,8 +151,7 @@ class MillerPrompt extends base_1.Prompt {
152
151
  this.selections[this.activeCol]--;
153
152
  // Reset subsequent columns
154
153
  this.selections = this.selections.slice(0, this.activeCol + 1);
155
- }
156
- else {
154
+ } else {
157
155
  this.selections[this.activeCol] = currentData.length - 1;
158
156
  this.selections = this.selections.slice(0, this.activeCol + 1);
159
157
  }
@@ -164,8 +162,7 @@ class MillerPrompt extends base_1.Prompt {
164
162
  if (this.selections[this.activeCol] < currentData.length - 1) {
165
163
  this.selections[this.activeCol]++;
166
164
  this.selections = this.selections.slice(0, this.activeCol + 1);
167
- }
168
- else {
165
+ } else {
169
166
  this.selections[this.activeCol] = 0;
170
167
  this.selections = this.selections.slice(0, this.activeCol + 1);
171
168
  }
@@ -194,21 +191,17 @@ class MillerPrompt extends base_1.Prompt {
194
191
  handleMouse(event) {
195
192
  if (event.action === 'scroll') {
196
193
  const currentData = this.getColumnData(this.activeCol);
197
- if (!currentData || currentData.length === 0)
198
- return;
194
+ if (!currentData || currentData.length === 0) return;
199
195
  if (event.scroll === 'up') {
200
196
  if (this.selections[this.activeCol] > 0) {
201
197
  this.selections[this.activeCol]--;
202
- }
203
- else {
198
+ } else {
204
199
  this.selections[this.activeCol] = currentData.length - 1;
205
200
  }
206
- }
207
- else if (event.scroll === 'down') {
201
+ } else if (event.scroll === 'down') {
208
202
  if (this.selections[this.activeCol] < currentData.length - 1) {
209
203
  this.selections[this.activeCol]++;
210
- }
211
- else {
204
+ } else {
212
205
  this.selections[this.activeCol] = 0;
213
206
  }
214
207
  }
@@ -217,5 +210,19 @@ class MillerPrompt extends base_1.Prompt {
217
210
  this.render(false);
218
211
  }
219
212
  }
220
- }
221
- exports.MillerPrompt = MillerPrompt;
213
+ constructor(options){
214
+ super(options), _define_property(this, "selections", []), _define_property(this, "activeCol", 0), _define_property(this, "scrollTops", []) // Scroll position for each column
215
+ , // Layout
216
+ _define_property(this, "colWidth", 0), _define_property(this, "visibleCols", 3);
217
+ this.selections = [
218
+ 0
219
+ ];
220
+ this.scrollTops = [
221
+ 0
222
+ ];
223
+ // TODO: Map initial values to selections if provided
224
+ this.calculateLayout();
225
+ }
226
+ };
227
+
228
+ //# sourceMappingURL=miller.js.map