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,46 +1,56 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KanbanPrompt = void 0;
4
- const base_1 = require("../base");
5
- const ansi_1 = require("../ansi");
6
- const utils_1 = require("../utils");
7
- class KanbanPrompt extends base_1.Prompt {
8
- constructor(options) {
9
- super(options);
10
- this.activeCol = 0;
11
- this.activeRow = 0;
12
- this.grabbed = false;
13
- // Deep copy columns to avoid mutating original options during drag/drop
14
- this.columns = JSON.parse(JSON.stringify(options.columns));
15
- this.scrollStates = new Array(this.columns.length).fill(0);
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "KanbanPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return KanbanPrompt;
16
9
  }
10
+ });
11
+ const _base = require("../base");
12
+ const _ansi = require("../ansi");
13
+ const _utils = require("../utils");
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 KanbanPrompt = class KanbanPrompt extends _base.Prompt {
17
28
  render(_firstRender) {
18
29
  const { columns } = this.stdout; // terminal width
19
30
  const colCount = this.columns.length;
20
31
  const colWidth = Math.floor(columns / colCount);
21
32
  let output = '';
22
33
  // Render Title
23
- output += `${ansi_1.ANSI.FG_CYAN}${ansi_1.ANSI.BOLD}? ${this.options.message}${ansi_1.ANSI.RESET}\n`;
34
+ output += `${_ansi.ANSI.FG_CYAN}${_ansi.ANSI.BOLD}? ${this.options.message}${_ansi.ANSI.RESET}\n`;
24
35
  if (this.grabbed) {
25
- output += `${ansi_1.ANSI.FG_YELLOW}(Grabbed) Move with arrows, Space to Drop${ansi_1.ANSI.RESET}\n`;
26
- }
27
- else {
28
- output += `${ansi_1.ANSI.FG_GRAY}(Normal) Space to Grab, Arrows to Navigate, Enter to Submit${ansi_1.ANSI.RESET}\n`;
36
+ output += `${_ansi.ANSI.FG_YELLOW}(Grabbed) Move with arrows, Space to Drop${_ansi.ANSI.RESET}\n`;
37
+ } else {
38
+ output += `${_ansi.ANSI.FG_GRAY}(Normal) Space to Grab, Arrows to Navigate, Enter to Submit${_ansi.ANSI.RESET}\n`;
29
39
  }
30
40
  // Render Headers
31
- const headers = this.columns.map((col, i) => {
41
+ const headers = this.columns.map((col, i)=>{
32
42
  const isSelected = i === this.activeCol;
33
43
  const title = this.truncate(col.title, colWidth - 4);
34
- const style = isSelected ? `${ansi_1.ANSI.FG_BLUE}${ansi_1.ANSI.BOLD}` : ansi_1.ANSI.BOLD;
44
+ const style = isSelected ? `${_ansi.ANSI.FG_BLUE}${_ansi.ANSI.BOLD}` : _ansi.ANSI.BOLD;
35
45
  return this.padCenter(title, colWidth, style);
36
46
  });
37
47
  output += headers.join('') + '\n';
38
48
  // Render Separator
39
- output += ansi_1.ANSI.FG_GRAY + '─'.repeat(columns) + ansi_1.ANSI.RESET + '\n';
49
+ output += _ansi.ANSI.FG_GRAY + '─'.repeat(columns) + _ansi.ANSI.RESET + '\n';
40
50
  // Render Rows
41
51
  const viewportHeight = 10;
42
- for (let r = 0; r < viewportHeight; r++) {
43
- const rowLine = this.columns.map((col, cIndex) => {
52
+ for(let r = 0; r < viewportHeight; r++){
53
+ const rowLine = this.columns.map((col, cIndex)=>{
44
54
  const scrollTop = this.scrollStates[cIndex];
45
55
  const itemIndex = r + scrollTop;
46
56
  const item = col.items[itemIndex];
@@ -52,11 +62,10 @@ class KanbanPrompt extends base_1.Prompt {
52
62
  let style = '';
53
63
  if (isCursor) {
54
64
  if (this.grabbed) {
55
- style = ansi_1.ANSI.BG_YELLOW + ansi_1.ANSI.FG_BLACK;
65
+ style = _ansi.ANSI.BG_YELLOW + _ansi.ANSI.FG_BLACK;
56
66
  prefix = '>';
57
- }
58
- else {
59
- style = ansi_1.ANSI.FG_CYAN + ansi_1.ANSI.BOLD;
67
+ } else {
68
+ style = _ansi.ANSI.FG_CYAN + _ansi.ANSI.BOLD;
60
69
  prefix = '>';
61
70
  }
62
71
  }
@@ -65,13 +74,11 @@ class KanbanPrompt extends base_1.Prompt {
65
74
  content = content.padEnd(colWidth);
66
75
  const plain = `${prefix} ${title}${suffix}`.padEnd(colWidth);
67
76
  if (style) {
68
- content = style + plain + ansi_1.ANSI.RESET;
69
- }
70
- else {
77
+ content = style + plain + _ansi.ANSI.RESET;
78
+ } else {
71
79
  content = plain;
72
80
  }
73
- }
74
- else {
81
+ } else {
75
82
  // Empty slot
76
83
  content = ' '.repeat(colWidth);
77
84
  }
@@ -82,12 +89,11 @@ class KanbanPrompt extends base_1.Prompt {
82
89
  this.renderFrame(output);
83
90
  }
84
91
  padCenter(str, width, style = '') {
85
- const visibleLen = (0, utils_1.stringWidth)(str);
86
- if (visibleLen >= width)
87
- return style + str + ansi_1.ANSI.RESET;
92
+ const visibleLen = (0, _utils.stringWidth)(str);
93
+ if (visibleLen >= width) return style + str + _ansi.ANSI.RESET;
88
94
  const left = Math.floor((width - visibleLen) / 2);
89
95
  const right = width - visibleLen - left;
90
- return ' '.repeat(left) + style + str + ansi_1.ANSI.RESET + ' '.repeat(right);
96
+ return ' '.repeat(left) + style + str + _ansi.ANSI.RESET + ' '.repeat(right);
91
97
  }
92
98
  handleMouse(event) {
93
99
  if (event.action === 'scroll') {
@@ -101,8 +107,7 @@ class KanbanPrompt extends base_1.Prompt {
101
107
  this.clampRow();
102
108
  this.ensureVisible();
103
109
  }
104
- }
105
- else if (event.scroll === 'down') {
110
+ } else if (event.scroll === 'down') {
106
111
  // Down/Right
107
112
  if (this.activeCol < this.columns.length - 1) {
108
113
  this.moveItemHorizontal(1);
@@ -111,16 +116,14 @@ class KanbanPrompt extends base_1.Prompt {
111
116
  this.ensureVisible();
112
117
  }
113
118
  }
114
- }
115
- else {
119
+ } else {
116
120
  // Normal: Scroll moves Up/Down
117
121
  if (event.scroll === 'up') {
118
122
  if (this.activeRow > 0) {
119
123
  this.activeRow--;
120
124
  this.ensureVisible();
121
125
  }
122
- }
123
- else if (event.scroll === 'down') {
126
+ } else if (event.scroll === 'down') {
124
127
  const colLen = this.columns[this.activeCol].items.length;
125
128
  if (this.activeRow < colLen - 1) {
126
129
  this.activeRow++;
@@ -132,15 +135,15 @@ class KanbanPrompt extends base_1.Prompt {
132
135
  }
133
136
  }
134
137
  handleInput(char, _key) {
135
- if (char === '\r' || char === '\n') { // Enter
138
+ if (char === '\r' || char === '\n') {
136
139
  const result = {};
137
- this.columns.forEach(c => {
140
+ this.columns.forEach((c)=>{
138
141
  result[c.id] = c.items;
139
142
  });
140
143
  this.submit(result);
141
144
  return;
142
145
  }
143
- if (char === ' ') { // Space
146
+ if (char === ' ') {
144
147
  this.grabbed = !this.grabbed;
145
148
  this.render(false);
146
149
  return;
@@ -154,8 +157,7 @@ class KanbanPrompt extends base_1.Prompt {
154
157
  this.clampRow();
155
158
  this.ensureVisible();
156
159
  }
157
- }
158
- else if (this.isRight(char)) {
160
+ } else if (this.isRight(char)) {
159
161
  if (this.activeCol < this.columns.length - 1) {
160
162
  if (this.grabbed) {
161
163
  this.moveItemHorizontal(1);
@@ -164,8 +166,7 @@ class KanbanPrompt extends base_1.Prompt {
164
166
  this.clampRow();
165
167
  this.ensureVisible();
166
168
  }
167
- }
168
- else if (this.isUp(char)) {
169
+ } else if (this.isUp(char)) {
169
170
  if (this.activeRow > 0) {
170
171
  if (this.grabbed) {
171
172
  // Swap with prev
@@ -177,8 +178,7 @@ class KanbanPrompt extends base_1.Prompt {
177
178
  this.activeRow--;
178
179
  this.ensureVisible();
179
180
  }
180
- }
181
- else if (this.isDown(char)) {
181
+ } else if (this.isDown(char)) {
182
182
  const colLen = this.columns[this.activeCol].items.length;
183
183
  if (this.activeRow < colLen - 1) {
184
184
  if (this.grabbed) {
@@ -209,8 +209,7 @@ class KanbanPrompt extends base_1.Prompt {
209
209
  const len = this.columns[this.activeCol].items.length;
210
210
  if (len === 0) {
211
211
  this.activeRow = 0;
212
- }
213
- else if (this.activeRow >= len) {
212
+ } else if (this.activeRow >= len) {
214
213
  this.activeRow = len - 1;
215
214
  }
216
215
  }
@@ -219,10 +218,16 @@ class KanbanPrompt extends base_1.Prompt {
219
218
  const viewportHeight = 10;
220
219
  if (this.activeRow < scrollTop) {
221
220
  this.scrollStates[this.activeCol] = this.activeRow;
222
- }
223
- else if (this.activeRow >= scrollTop + viewportHeight) {
221
+ } else if (this.activeRow >= scrollTop + viewportHeight) {
224
222
  this.scrollStates[this.activeCol] = this.activeRow - viewportHeight + 1;
225
223
  }
226
224
  }
227
- }
228
- exports.KanbanPrompt = KanbanPrompt;
225
+ constructor(options){
226
+ super(options), _define_property(this, "columns", void 0), _define_property(this, "activeCol", 0), _define_property(this, "activeRow", 0), _define_property(this, "grabbed", false), _define_property(this, "scrollStates", void 0);
227
+ // Deep copy columns to avoid mutating original options during drag/drop
228
+ this.columns = JSON.parse(JSON.stringify(options.columns));
229
+ this.scrollStates = new Array(this.columns.length).fill(0);
230
+ }
231
+ };
232
+
233
+ //# sourceMappingURL=kanban.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/kanban.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { KanbanOptions, KanbanItem, KanbanColumn, MouseEvent } from '../types';\nimport { ANSI } from '../ansi';\nimport { stringWidth } from '../utils';\n\nexport class KanbanPrompt<V extends KanbanItem> extends Prompt<Record<string, V[]>, KanbanOptions<V>> {\n private columns: KanbanColumn<V>[];\n private activeCol: number = 0;\n private activeRow: number = 0;\n private grabbed: boolean = false;\n private scrollStates: number[];\n\n constructor(options: KanbanOptions<V>) {\n super(options);\n // Deep copy columns to avoid mutating original options during drag/drop\n this.columns = JSON.parse(JSON.stringify(options.columns));\n this.scrollStates = new Array(this.columns.length).fill(0);\n }\n\n protected render(_firstRender: boolean): void {\n const { columns } = this.stdout; // terminal width\n const colCount = this.columns.length;\n const colWidth = Math.floor(columns / colCount);\n\n let output = '';\n\n // Render Title\n output += `${ANSI.FG_CYAN}${ANSI.BOLD}? ${this.options.message}${ANSI.RESET}\\n`;\n if (this.grabbed) {\n output += `${ANSI.FG_YELLOW}(Grabbed) Move with arrows, Space to Drop${ANSI.RESET}\\n`;\n } else {\n output += `${ANSI.FG_GRAY}(Normal) Space to Grab, Arrows to Navigate, Enter to Submit${ANSI.RESET}\\n`;\n }\n\n // Render Headers\n const headers = this.columns.map((col, i) => {\n const isSelected = i === this.activeCol;\n const title = this.truncate(col.title, colWidth - 4);\n const style = isSelected ? `${ANSI.FG_BLUE}${ANSI.BOLD}` : ANSI.BOLD;\n return this.padCenter(title, colWidth, style);\n });\n output += headers.join('') + '\\n';\n\n // Render Separator\n output += ANSI.FG_GRAY + '─'.repeat(columns) + ANSI.RESET + '\\n';\n\n // Render Rows\n const viewportHeight = 10;\n\n for (let r = 0; r < viewportHeight; r++) {\n const rowLine = this.columns.map((col, cIndex) => {\n const scrollTop = this.scrollStates[cIndex];\n const itemIndex = r + scrollTop;\n const item = col.items[itemIndex];\n\n let content = '';\n if (item) {\n const isCursor = cIndex === this.activeCol && itemIndex === this.activeRow;\n let prefix = ' ';\n const suffix = ' ';\n let style = '';\n\n if (isCursor) {\n if (this.grabbed) {\n style = ANSI.BG_YELLOW + ANSI.FG_BLACK;\n prefix = '>';\n } else {\n style = ANSI.FG_CYAN + ANSI.BOLD;\n prefix = '>';\n }\n }\n\n const title = this.truncate(item.title, colWidth - 4);\n content = `${prefix} ${title}${suffix}`;\n content = content.padEnd(colWidth);\n\n const plain = `${prefix} ${title}${suffix}`.padEnd(colWidth);\n\n if (style) {\n content = style + plain + ANSI.RESET;\n } else {\n content = plain;\n }\n\n } else {\n // Empty slot\n content = ' '.repeat(colWidth);\n }\n return content;\n }).join('');\n\n output += rowLine + '\\n';\n }\n\n this.renderFrame(output);\n }\n\n private padCenter(str: string, width: number, style: string = ''): string {\n const visibleLen = stringWidth(str);\n if (visibleLen >= width) return style + str + ANSI.RESET;\n const left = Math.floor((width - visibleLen) / 2);\n const right = width - visibleLen - left;\n return ' '.repeat(left) + style + str + ANSI.RESET + ' '.repeat(right);\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n if (this.grabbed) {\n // Grabbed: Scroll moves Left/Right\n if (event.scroll === 'up') {\n // Up/Left\n if (this.activeCol > 0) {\n this.moveItemHorizontal(-1);\n this.activeCol--;\n this.clampRow();\n this.ensureVisible();\n }\n } else if (event.scroll === 'down') {\n // Down/Right\n if (this.activeCol < this.columns.length - 1) {\n this.moveItemHorizontal(1);\n this.activeCol++;\n this.clampRow();\n this.ensureVisible();\n }\n }\n } else {\n // Normal: Scroll moves Up/Down\n if (event.scroll === 'up') {\n if (this.activeRow > 0) {\n this.activeRow--;\n this.ensureVisible();\n }\n } else if (event.scroll === 'down') {\n const colLen = this.columns[this.activeCol].items.length;\n if (this.activeRow < colLen - 1) {\n this.activeRow++;\n this.ensureVisible();\n }\n }\n }\n this.render(false);\n }\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n if (char === '\\r' || char === '\\n') { // Enter\n const result: Record<string, V[]> = {};\n this.columns.forEach(c => {\n result[c.id] = c.items;\n });\n this.submit(result);\n return;\n }\n\n if (char === ' ') { // Space\n this.grabbed = !this.grabbed;\n this.render(false);\n return;\n }\n\n if (this.isLeft(char)) {\n if (this.activeCol > 0) {\n if (this.grabbed) {\n this.moveItemHorizontal(-1);\n }\n this.activeCol--;\n this.clampRow();\n this.ensureVisible();\n }\n } else if (this.isRight(char)) {\n if (this.activeCol < this.columns.length - 1) {\n if (this.grabbed) {\n this.moveItemHorizontal(1);\n }\n this.activeCol++;\n this.clampRow();\n this.ensureVisible();\n }\n } else if (this.isUp(char)) {\n if (this.activeRow > 0) {\n if (this.grabbed) {\n // Swap with prev\n const col = this.columns[this.activeCol];\n const temp = col.items[this.activeRow];\n col.items[this.activeRow] = col.items[this.activeRow - 1];\n col.items[this.activeRow - 1] = temp;\n }\n this.activeRow--;\n this.ensureVisible();\n }\n } else if (this.isDown(char)) {\n const colLen = this.columns[this.activeCol].items.length;\n if (this.activeRow < colLen - 1) {\n if (this.grabbed) {\n // Swap with next\n const col = this.columns[this.activeCol];\n const temp = col.items[this.activeRow];\n col.items[this.activeRow] = col.items[this.activeRow + 1];\n col.items[this.activeRow + 1] = temp;\n }\n this.activeRow++;\n this.ensureVisible();\n }\n }\n\n this.render(false);\n }\n\n private moveItemHorizontal(direction: number) {\n const sourceCol = this.columns[this.activeCol];\n const targetCol = this.columns[this.activeCol + direction];\n const item = sourceCol.items.splice(this.activeRow, 1)[0];\n\n let targetIndex = this.activeRow;\n if (targetIndex > targetCol.items.length) {\n targetIndex = targetCol.items.length;\n }\n\n targetCol.items.splice(targetIndex, 0, item);\n\n this.activeRow = targetIndex;\n }\n\n private clampRow() {\n const len = this.columns[this.activeCol].items.length;\n if (len === 0) {\n this.activeRow = 0;\n } else if (this.activeRow >= len) {\n this.activeRow = len - 1;\n }\n }\n\n private ensureVisible() {\n const scrollTop = this.scrollStates[this.activeCol];\n const viewportHeight = 10;\n\n if (this.activeRow < scrollTop) {\n this.scrollStates[this.activeCol] = this.activeRow;\n } else if (this.activeRow >= scrollTop + viewportHeight) {\n this.scrollStates[this.activeCol] = this.activeRow - viewportHeight + 1;\n }\n }\n}\n"],"names":["KanbanPrompt","Prompt","render","_firstRender","columns","stdout","colCount","length","colWidth","Math","floor","output","ANSI","FG_CYAN","BOLD","options","message","RESET","grabbed","FG_YELLOW","FG_GRAY","headers","map","col","i","isSelected","activeCol","title","truncate","style","FG_BLUE","padCenter","join","repeat","viewportHeight","r","rowLine","cIndex","scrollTop","scrollStates","itemIndex","item","items","content","isCursor","activeRow","prefix","suffix","BG_YELLOW","FG_BLACK","padEnd","plain","renderFrame","str","width","visibleLen","stringWidth","left","right","handleMouse","event","action","scroll","moveItemHorizontal","clampRow","ensureVisible","colLen","handleInput","char","_key","result","forEach","c","id","submit","isLeft","isRight","isUp","temp","isDown","direction","sourceCol","targetCol","splice","targetIndex","len","JSON","parse","stringify","Array","fill"],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "KeypressPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return KeypressPrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ let KeypressPrompt = class KeypressPrompt extends _base.Prompt {
15
+ render(_firstRender) {
16
+ let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}`;
17
+ if (this.options.keys) {
18
+ const hint = this.options.keys.map((k)=>{
19
+ if (k === '\r' || k === '\n' || k === 'enter') return 'enter';
20
+ if (k === ' ' || k === 'space') return 'space';
21
+ return k;
22
+ }).join('/');
23
+ output += ` ${_theme.theme.muted}(${hint})${_ansi.ANSI.RESET}`;
24
+ } else {
25
+ output += ` ${_theme.theme.muted}(Press any key)${_ansi.ANSI.RESET}`;
26
+ }
27
+ this.renderFrame(output);
28
+ }
29
+ handleInput(char, _key) {
30
+ let keyName = char;
31
+ if (char === '\r' || char === '\n') keyName = 'enter';
32
+ else if (char === ' ') keyName = 'space';
33
+ else if (char === '\u001b') keyName = 'escape';
34
+ else if (char === '\t') keyName = 'tab';
35
+ else if (char === '\x7f' || char === '\b') keyName = 'backspace';
36
+ // Check against whitelist
37
+ if (this.options.keys) {
38
+ const allowed = this.options.keys.map((k)=>k.toLowerCase());
39
+ // Check normalized name or exact char
40
+ if (!allowed.includes(keyName) && !allowed.includes(char)) {
41
+ return;
42
+ }
43
+ }
44
+ if (this.options.showInvisible) {
45
+ this.print(` ${_theme.theme.success}${keyName}${_ansi.ANSI.RESET}`);
46
+ }
47
+ this.submit(keyName);
48
+ }
49
+ constructor(options){
50
+ super(options);
51
+ }
52
+ };
53
+
54
+ //# sourceMappingURL=keypress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/keypress.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { KeypressOptions } from '../types';\n\nexport class KeypressPrompt extends Prompt<string, KeypressOptions> {\n constructor(options: KeypressOptions) {\n super(options);\n }\n\n protected render(_firstRender: boolean) {\n let output = `${theme.title}${this.options.message}${ANSI.RESET}`;\n\n if (this.options.keys) {\n const hint = this.options.keys.map(k => {\n if (k === '\\r' || k === '\\n' || k === 'enter') return 'enter';\n if (k === ' ' || k === 'space') return 'space';\n return k;\n }).join('/');\n output += ` ${theme.muted}(${hint})${ANSI.RESET}`;\n } else {\n output += ` ${theme.muted}(Press any key)${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n let keyName = char;\n if (char === '\\r' || char === '\\n') keyName = 'enter';\n else if (char === ' ') keyName = 'space';\n else if (char === '\\u001b') keyName = 'escape';\n else if (char === '\\t') keyName = 'tab';\n // Handle backspace\n else if (char === '\\x7f' || char === '\\b') keyName = 'backspace';\n\n // Check against whitelist\n if (this.options.keys) {\n const allowed = this.options.keys.map(k => k.toLowerCase());\n // Check normalized name or exact char\n if (!allowed.includes(keyName) && !allowed.includes(char)) {\n return;\n }\n }\n\n if (this.options.showInvisible) {\n this.print(` ${theme.success}${keyName}${ANSI.RESET}`);\n }\n\n this.submit(keyName);\n }\n}\n"],"names":["KeypressPrompt","Prompt","render","_firstRender","output","theme","title","options","message","ANSI","RESET","keys","hint","map","k","join","muted","renderFrame","handleInput","char","_key","keyName","allowed","toLowerCase","includes","showInvisible","print","success","submit"],"mappings":";;;;+BAKaA;;;eAAAA;;;sBALQ;sBACE;uBACD;AAGf,IAAA,AAAMA,iBAAN,MAAMA,uBAAuBC,YAAM;IAK5BC,OAAOC,YAAqB,EAAE;QACpC,IAAIC,SAAS,GAAGC,YAAK,CAACC,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGC,UAAI,CAACC,KAAK,EAAE;QAEjE,IAAI,IAAI,CAACH,OAAO,CAACI,IAAI,EAAE;YACnB,MAAMC,OAAO,IAAI,CAACL,OAAO,CAACI,IAAI,CAACE,GAAG,CAACC,CAAAA;gBAC/B,IAAIA,MAAM,QAAQA,MAAM,QAAQA,MAAM,SAAS,OAAO;gBACtD,IAAIA,MAAM,OAAOA,MAAM,SAAS,OAAO;gBACvC,OAAOA;YACX,GAAGC,IAAI,CAAC;YACRX,UAAU,CAAC,CAAC,EAAEC,YAAK,CAACW,KAAK,CAAC,CAAC,EAAEJ,KAAK,CAAC,EAAEH,UAAI,CAACC,KAAK,EAAE;QACrD,OAAO;YACHN,UAAU,CAAC,CAAC,EAAEC,YAAK,CAACW,KAAK,CAAC,eAAe,EAAEP,UAAI,CAACC,KAAK,EAAE;QAC3D;QAEA,IAAI,CAACO,WAAW,CAACb;IACrB;IAEUc,YAAYC,IAAY,EAAEC,IAAY,EAAE;QAC9C,IAAIC,UAAUF;QACd,IAAIA,SAAS,QAAQA,SAAS,MAAME,UAAU;aACzC,IAAIF,SAAS,KAAKE,UAAU;aAC5B,IAAIF,SAAS,UAAUE,UAAU;aACjC,IAAIF,SAAS,MAAME,UAAU;aAE7B,IAAIF,SAAS,UAAUA,SAAS,MAAME,UAAU;QAErD,0BAA0B;QAC1B,IAAI,IAAI,CAACd,OAAO,CAACI,IAAI,EAAE;YACnB,MAAMW,UAAU,IAAI,CAACf,OAAO,CAACI,IAAI,CAACE,GAAG,CAACC,CAAAA,IAAKA,EAAES,WAAW;YACxD,sCAAsC;YACtC,IAAI,CAACD,QAAQE,QAAQ,CAACH,YAAY,CAACC,QAAQE,QAAQ,CAACL,OAAO;gBACvD;YACJ;QACJ;QAEA,IAAI,IAAI,CAACZ,OAAO,CAACkB,aAAa,EAAE;YAC5B,IAAI,CAACC,KAAK,CAAC,CAAC,CAAC,EAAErB,YAAK,CAACsB,OAAO,GAAGN,UAAUZ,UAAI,CAACC,KAAK,EAAE;QACzD;QAEA,IAAI,CAACkB,MAAM,CAACP;IAChB;IA5CA,YAAYd,OAAwB,CAAE;QAClC,KAAK,CAACA;IACV;AA2CJ"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "LicensePrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return LicensePrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _select = require("./select");
13
+ const _theme = require("../theme");
14
+ const _symbols = require("../symbols");
15
+ const _utils = require("../utils");
16
+ const _licenses = require("../data/licenses");
17
+ function _define_property(obj, key, value) {
18
+ if (key in obj) {
19
+ Object.defineProperty(obj, key, {
20
+ value: value,
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true
24
+ });
25
+ } else {
26
+ obj[key] = value;
27
+ }
28
+ return obj;
29
+ }
30
+ let LicensePrompt = class LicensePrompt extends _select.SelectPrompt {
31
+ render(_firstRender) {
32
+ const choices = this.getFilteredChoices();
33
+ // Adjust Scroll Top
34
+ if (this.selectedIndex < this.scrollTop) {
35
+ this.scrollTop = this.selectedIndex;
36
+ } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
37
+ this.scrollTop = this.selectedIndex - this.pageSize + 1;
38
+ }
39
+ // Handle Filtering Edge Case: if list shrinks, scrollTop might be too high
40
+ if (this.scrollTop > choices.length - 1) {
41
+ this.scrollTop = Math.max(0, choices.length - this.pageSize);
42
+ }
43
+ const width = this.stdout.columns || 80;
44
+ const gap = 2;
45
+ const ratio = 0.3;
46
+ // Calculate dimensions
47
+ // Left column: 30% or min 20 chars
48
+ // Right column: rest
49
+ const leftWidth = Math.floor((width - gap) * ratio);
50
+ const rightWidth = width - leftWidth - gap;
51
+ const leftContent = this.renderList();
52
+ const rightContent = this.renderDetails(rightWidth);
53
+ const content = _utils.Layout.split(leftContent, rightContent, width, {
54
+ ratio,
55
+ gap
56
+ });
57
+ // Header
58
+ const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Filter: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
59
+ const header = `${_theme.theme.success}? ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr} ${_theme.theme.muted}(Use arrows to navigate, Enter to select)${_ansi.ANSI.RESET}`;
60
+ // Combine
61
+ this.renderFrame(`${header}\n${content}`);
62
+ }
63
+ renderList() {
64
+ const choices = this.getFilteredChoices();
65
+ let output = '';
66
+ if (choices.length === 0) {
67
+ output += ` ${_theme.theme.muted}No results found${_ansi.ANSI.RESET}`;
68
+ return output + '\n'.repeat(this.pageSize - 1);
69
+ }
70
+ const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
71
+ visibleChoices.forEach((choice, index)=>{
72
+ const actualIndex = this.scrollTop + index;
73
+ const isSelected = actualIndex === this.selectedIndex;
74
+ const cursor = isSelected ? `${_theme.theme.main}${_symbols.symbols.pointer}` : ' ';
75
+ // Handle Separator type safety
76
+ if ('separator' in choice) {
77
+ output += `${_theme.theme.muted}${choice.text || '---'}${_ansi.ANSI.RESET}\n`;
78
+ return;
79
+ }
80
+ const title = isSelected ? `${_theme.theme.main}${choice.title}${_ansi.ANSI.RESET}` : choice.title;
81
+ output += `${cursor} ${title}\n`;
82
+ });
83
+ // Fill remaining lines to maintain height
84
+ const filledLines = visibleChoices.length;
85
+ if (filledLines < this.pageSize) {
86
+ output += '\n'.repeat(this.pageSize - filledLines);
87
+ }
88
+ return output;
89
+ }
90
+ renderDetails(maxWidth) {
91
+ const choices = this.getFilteredChoices();
92
+ if (choices.length === 0) return '';
93
+ const selectedChoice = choices[this.selectedIndex];
94
+ if (!selectedChoice || 'separator' in selectedChoice) return '';
95
+ const license = this.licenses.find((l)=>l.id === selectedChoice.value);
96
+ if (!license) return '';
97
+ let output = '';
98
+ output += `${_ansi.ANSI.BOLD}${license.name}${_ansi.ANSI.RESET}\n`;
99
+ const wrappedDesc = _utils.Layout.wrap(license.description, maxWidth);
100
+ const coloredDesc = wrappedDesc.split('\n').map((line)=>`${_theme.theme.muted}${line}${_ansi.ANSI.RESET}`).join('\n');
101
+ output += `${coloredDesc}\n\n`;
102
+ // Permissions
103
+ if (license.permissions.length > 0) {
104
+ output += `${_ansi.ANSI.FG_GREEN}Permissions:${_ansi.ANSI.RESET}\n`;
105
+ license.permissions.forEach((p)=>output += ` ${_theme.theme.success}${_symbols.symbols.checked} ${p}${_ansi.ANSI.RESET}\n`);
106
+ output += '\n';
107
+ }
108
+ // Conditions
109
+ if (license.conditions.length > 0) {
110
+ output += `${_ansi.ANSI.FG_BLUE}Conditions:${_ansi.ANSI.RESET}\n`;
111
+ // symbols.info doesn't exist, use 'i' or similar
112
+ license.conditions.forEach((c)=>output += ` ${_ansi.ANSI.FG_BLUE}ℹ ${c}${_ansi.ANSI.RESET}\n`);
113
+ output += '\n';
114
+ }
115
+ // Limitations
116
+ if (license.limitations.length > 0) {
117
+ output += `${_ansi.ANSI.FG_RED}Limitations:${_ansi.ANSI.RESET}\n`;
118
+ license.limitations.forEach((l)=>output += ` ${_theme.theme.error}${_symbols.symbols.cross} ${l}${_ansi.ANSI.RESET}\n`);
119
+ }
120
+ return output;
121
+ }
122
+ constructor(options){
123
+ // Map licenses to choices expected by SelectPrompt
124
+ const choices = _licenses.POPULAR_LICENSES.map((l)=>({
125
+ title: l.id,
126
+ value: l.id,
127
+ description: l.name
128
+ }));
129
+ super({
130
+ ...options,
131
+ choices
132
+ }), _define_property(this, "licenses", void 0);
133
+ this.licenses = _licenses.POPULAR_LICENSES;
134
+ // Set initial selection if provided
135
+ if (options.defaultLicense) {
136
+ const idx = this.licenses.findIndex((l)=>l.id === options.defaultLicense);
137
+ if (idx !== -1) {
138
+ this.selectedIndex = idx;
139
+ }
140
+ }
141
+ }
142
+ };
143
+
144
+ //# sourceMappingURL=license.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/license.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { SelectPrompt } from './select';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { LicenseOptions, License } from '../types';\nimport { Layout } from '../utils';\nimport { POPULAR_LICENSES } from '../data/licenses';\n\nexport class LicensePrompt extends SelectPrompt<string> {\n private licenses: License[];\n\n constructor(options: LicenseOptions) {\n // Map licenses to choices expected by SelectPrompt\n const choices = POPULAR_LICENSES.map(l => ({\n title: l.id,\n value: l.id,\n description: l.name\n }));\n\n super({\n ...options,\n choices\n });\n\n this.licenses = POPULAR_LICENSES;\n\n // Set initial selection if provided\n if (options.defaultLicense) {\n const idx = this.licenses.findIndex(l => l.id === options.defaultLicense);\n if (idx !== -1) {\n (this as any).selectedIndex = idx;\n }\n }\n }\n\n protected render(_firstRender: boolean) {\n const choices = this.getFilteredChoices();\n\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 // Handle Filtering Edge Case: if list shrinks, scrollTop might be too high\n if (this.scrollTop > choices.length - 1) {\n this.scrollTop = Math.max(0, choices.length - this.pageSize);\n }\n\n const width = this.stdout.columns || 80;\n const gap = 2;\n const ratio = 0.3;\n\n // Calculate dimensions\n // Left column: 30% or min 20 chars\n // Right column: rest\n const leftWidth = Math.floor((width - gap) * ratio);\n const rightWidth = width - leftWidth - gap;\n\n const leftContent = this.renderList();\n const rightContent = this.renderDetails(rightWidth);\n\n const content = Layout.split(leftContent, rightContent, width, { ratio, gap });\n\n // Header\n const searchStr = this.searchBuffer ? ` ${theme.muted}(Filter: ${this.searchBuffer})${ANSI.RESET}` : '';\n const header = `${theme.success}? ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}${searchStr} ${theme.muted}(Use arrows to navigate, Enter to select)${ANSI.RESET}`;\n\n // Combine\n this.renderFrame(`${header}\\n${content}`);\n }\n\n private renderList(): string {\n const choices = this.getFilteredChoices();\n let output = '';\n\n if (choices.length === 0) {\n output += ` ${theme.muted}No results found${ANSI.RESET}`;\n return output + '\\n'.repeat(this.pageSize - 1);\n }\n\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n const isSelected = actualIndex === this.selectedIndex;\n\n const cursor = isSelected ? `${theme.main}${symbols.pointer}` : ' ';\n\n // Handle Separator type safety\n if ('separator' in choice) {\n output += `${theme.muted}${choice.text || '---'}${ANSI.RESET}\\n`;\n return;\n }\n\n const title = isSelected ? `${theme.main}${choice.title}${ANSI.RESET}` : choice.title;\n\n output += `${cursor} ${title}\\n`;\n });\n\n // Fill remaining lines to maintain height\n const filledLines = visibleChoices.length;\n if (filledLines < this.pageSize) {\n output += '\\n'.repeat(this.pageSize - filledLines);\n }\n\n return output;\n }\n\n private renderDetails(maxWidth: number): string {\n const choices = this.getFilteredChoices();\n if (choices.length === 0) return '';\n\n const selectedChoice = choices[this.selectedIndex];\n if (!selectedChoice || 'separator' in selectedChoice) return '';\n\n const license = this.licenses.find(l => l.id === selectedChoice.value);\n\n if (!license) return '';\n\n let output = '';\n output += `${ANSI.BOLD}${license.name}${ANSI.RESET}\\n`;\n\n const wrappedDesc = Layout.wrap(license.description, maxWidth);\n const coloredDesc = wrappedDesc.split('\\n').map(line => `${theme.muted}${line}${ANSI.RESET}`).join('\\n');\n\n output += `${coloredDesc}\\n\\n`;\n\n // Permissions\n if (license.permissions.length > 0) {\n output += `${ANSI.FG_GREEN}Permissions:${ANSI.RESET}\\n`;\n license.permissions.forEach(p => output += ` ${theme.success}${symbols.checked} ${p}${ANSI.RESET}\\n`);\n output += '\\n';\n }\n\n // Conditions\n if (license.conditions.length > 0) {\n output += `${ANSI.FG_BLUE}Conditions:${ANSI.RESET}\\n`;\n // symbols.info doesn't exist, use 'i' or similar\n license.conditions.forEach(c => output += ` ${ANSI.FG_BLUE}ℹ ${c}${ANSI.RESET}\\n`);\n output += '\\n';\n }\n\n // Limitations\n if (license.limitations.length > 0) {\n output += `${ANSI.FG_RED}Limitations:${ANSI.RESET}\\n`;\n license.limitations.forEach(l => output += ` ${theme.error}${symbols.cross} ${l}${ANSI.RESET}\\n`);\n }\n\n return output;\n }\n}\n"],"names":["LicensePrompt","SelectPrompt","render","_firstRender","choices","getFilteredChoices","selectedIndex","scrollTop","pageSize","length","Math","max","width","stdout","columns","gap","ratio","leftWidth","floor","rightWidth","leftContent","renderList","rightContent","renderDetails","content","Layout","split","searchStr","searchBuffer","theme","muted","ANSI","RESET","header","success","BOLD","title","options","message","renderFrame","output","repeat","visibleChoices","slice","forEach","choice","index","actualIndex","isSelected","cursor","main","symbols","pointer","text","filledLines","maxWidth","selectedChoice","license","licenses","find","l","id","value","name","wrappedDesc","wrap","description","coloredDesc","map","line","join","permissions","FG_GREEN","p","checked","conditions","FG_BLUE","c","limitations","FG_RED","error","cross","POPULAR_LICENSES","defaultLicense","idx","findIndex"],"mappings":"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"}
@@ -1,41 +1,53 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ListPrompt = 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
- // --- Implementation: List Prompt ---
9
- class ListPrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.currentInput = '';
13
- this.errorMsg = '';
14
- this.value = options.initial || [];
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ListPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ListPrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ const _symbols = require("../symbols");
15
+ function _define_property(obj, key, value) {
16
+ if (key in obj) {
17
+ Object.defineProperty(obj, key, {
18
+ value: value,
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true
22
+ });
23
+ } else {
24
+ obj[key] = value;
15
25
  }
26
+ return obj;
27
+ }
28
+ let ListPrompt = class ListPrompt extends _base.Prompt {
16
29
  render(_firstRender) {
17
30
  const cols = process.stdout.columns || 80;
18
31
  // 1. Prepare Prefix
19
- const icon = this.errorMsg ? `${theme_1.theme.error}${symbols_1.symbols.cross}` : `${theme_1.theme.success}?`;
20
- const prefix = `${icon} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} `;
32
+ const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
33
+ const prefix = `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
21
34
  // 2. Build Lines with Wrapping
22
35
  const lines = [];
23
36
  let currentLine = prefix;
24
37
  // Helper to check width
25
- const addText = (text) => {
38
+ const addText = (text)=>{
26
39
  const visualLen = this.stripAnsi(currentLine).length + this.stripAnsi(text).length;
27
40
  if (visualLen > cols) {
28
41
  lines.push(currentLine);
29
42
  currentLine = text.trimStart(); // Start new line
30
- }
31
- else {
43
+ } else {
32
44
  currentLine += text;
33
45
  }
34
46
  };
35
47
  // Render Tags
36
48
  if (this.value.length > 0) {
37
- this.value.forEach((tag) => {
38
- const tagStr = `${theme_1.theme.main}[${tag}]${ansi_1.ANSI.RESET} `;
49
+ this.value.forEach((tag)=>{
50
+ const tagStr = `${_theme.theme.main}[${tag}]${_ansi.ANSI.RESET} `;
39
51
  addText(tagStr);
40
52
  });
41
53
  }
@@ -47,21 +59,21 @@ class ListPrompt extends base_1.Prompt {
47
59
  const inputVisualCol = this.stripAnsi(currentLine).length;
48
60
  // 3. Append Error if any
49
61
  if (this.errorMsg) {
50
- lines.push(`${theme_1.theme.error}>> ${this.errorMsg}${ansi_1.ANSI.RESET}`);
62
+ lines.push(`${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`);
51
63
  }
52
64
  const output = lines.join('\n');
53
65
  // 4. Render Frame
54
66
  this.renderFrame(output);
55
- this.print(ansi_1.ANSI.SHOW_CURSOR);
67
+ this.print(_ansi.ANSI.SHOW_CURSOR);
56
68
  // 5. Position Cursor
57
69
  // If we printed lines after the input line (e.g. error msg), move up.
58
70
  const totalRows = lines.length;
59
- const linesUp = (totalRows - 1) - inputLineIndex;
71
+ const linesUp = totalRows - 1 - inputLineIndex;
60
72
  if (linesUp > 0) {
61
73
  this.print(`\x1b[${linesUp}A`);
62
74
  }
63
75
  // Move to correct column
64
- this.print(ansi_1.ANSI.CURSOR_LEFT);
76
+ this.print(_ansi.ANSI.CURSOR_LEFT);
65
77
  if (inputVisualCol > 0) {
66
78
  this.print(`\x1b[${inputVisualCol}C`);
67
79
  }
@@ -73,8 +85,7 @@ class ListPrompt extends base_1.Prompt {
73
85
  this.currentInput = '';
74
86
  this.errorMsg = '';
75
87
  this.render(false);
76
- }
77
- else {
88
+ } else {
78
89
  // Done if input is empty
79
90
  if (this.options.validate) {
80
91
  const result = this.options.validate(this.value);
@@ -88,12 +99,11 @@ class ListPrompt extends base_1.Prompt {
88
99
  }
89
100
  return;
90
101
  }
91
- if (char === '\u0008' || char === '\x7f') { // Backspace
102
+ if (char === '\u0008' || char === '\x7f') {
92
103
  if (this.currentInput.length > 0) {
93
104
  this.currentInput = this.currentInput.slice(0, -1);
94
105
  this.render(false);
95
- }
96
- else if (this.value.length > 0) {
106
+ } else if (this.value.length > 0) {
97
107
  const last = this.value.pop();
98
108
  this.currentInput = last || '';
99
109
  this.render(false);
@@ -105,5 +115,10 @@ class ListPrompt extends base_1.Prompt {
105
115
  this.render(false);
106
116
  }
107
117
  }
108
- }
109
- exports.ListPrompt = ListPrompt;
118
+ constructor(options){
119
+ super(options), _define_property(this, "currentInput", ''), _define_property(this, "errorMsg", '');
120
+ this.value = options.initial || [];
121
+ }
122
+ };
123
+
124
+ //# sourceMappingURL=list.js.map