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,62 +1,67 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GridPrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- const utils_1 = require("../utils");
8
- class GridPrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- this.cursorRow = 0;
12
- this.cursorCol = 0;
13
- this.columnWidths = [];
14
- this.rowLabelWidth = 0;
15
- // Initialize selection matrix
16
- if (options.initial) {
17
- this.selected = options.initial.map(row => [...row]);
18
- }
19
- else {
20
- this.selected = options.rows.map(() => new Array(options.columns.length).fill(false));
21
- }
22
- this.calculateLayout();
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "GridPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return GridPrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ const _utils = require("../utils");
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;
23
25
  }
26
+ return obj;
27
+ }
28
+ let GridPrompt = class GridPrompt extends _base.Prompt {
24
29
  calculateLayout() {
25
30
  // Calculate max width for row labels
26
31
  this.rowLabelWidth = 0;
27
- for (const row of this.options.rows) {
28
- this.rowLabelWidth = Math.max(this.rowLabelWidth, (0, utils_1.stringWidth)(row));
32
+ for (const row of this.options.rows){
33
+ this.rowLabelWidth = Math.max(this.rowLabelWidth, (0, _utils.stringWidth)(row));
29
34
  }
30
35
  // Calculate width for each column
31
- this.columnWidths = this.options.columns.map(col => {
36
+ this.columnWidths = this.options.columns.map((col)=>{
32
37
  // Header width vs Cell width (3 chars for "[ ]")
33
- return Math.max((0, utils_1.stringWidth)(col), 3);
38
+ return Math.max((0, _utils.stringWidth)(col), 3);
34
39
  });
35
40
  }
36
41
  render(_firstRender) {
37
42
  const { rows, columns } = this.options;
38
- let output = `${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
43
+ let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
39
44
  // Render Header
40
45
  // Padding for the row label column
41
46
  output += ' '.repeat(this.rowLabelWidth + 2); // +2 for spacing/border
42
- output += columns.map((col, i) => {
47
+ output += columns.map((col, i)=>{
43
48
  const width = this.columnWidths[i];
44
- const padding = width - (0, utils_1.stringWidth)(col);
49
+ const padding = width - (0, _utils.stringWidth)(col);
45
50
  const leftPad = Math.floor(padding / 2);
46
51
  const rightPad = padding - leftPad;
47
- return `${theme_1.theme.muted}${' '.repeat(leftPad)}${col}${' '.repeat(rightPad)}${ansi_1.ANSI.RESET}`;
52
+ return `${_theme.theme.muted}${' '.repeat(leftPad)}${col}${' '.repeat(rightPad)}${_ansi.ANSI.RESET}`;
48
53
  }).join(' ') + '\n';
49
54
  // Render Rows
50
- for (let r = 0; r < rows.length; r++) {
55
+ for(let r = 0; r < rows.length; r++){
51
56
  const rowLabel = rows[r];
52
- const labelPadding = this.rowLabelWidth - (0, utils_1.stringWidth)(rowLabel);
57
+ const labelPadding = this.rowLabelWidth - (0, _utils.stringWidth)(rowLabel);
53
58
  // Row Label
54
- output += `${theme_1.theme.muted}${rowLabel}${' '.repeat(labelPadding)}${ansi_1.ANSI.RESET} `;
59
+ output += `${_theme.theme.muted}${rowLabel}${' '.repeat(labelPadding)}${_ansi.ANSI.RESET} `;
55
60
  // Cells
56
- const cells = this.selected[r].map((isChecked, c) => {
57
- const isFocused = (r === this.cursorRow && c === this.cursorCol);
61
+ const cells = this.selected[r].map((isChecked, c)=>{
62
+ const isFocused = r === this.cursorRow && c === this.cursorCol;
58
63
  const width = this.columnWidths[c];
59
- const content = isChecked ? `[${theme_1.theme.success}x${ansi_1.ANSI.RESET}]` : '[ ]';
64
+ const content = isChecked ? `[${_theme.theme.success}x${_ansi.ANSI.RESET}]` : '[ ]';
60
65
  // content string width is 3 (ignoring ansi)
61
66
  const padding = width - 3;
62
67
  const leftPad = Math.floor(padding / 2);
@@ -65,13 +70,13 @@ class GridPrompt extends base_1.Prompt {
65
70
  if (isFocused) {
66
71
  // Highlight the focused cell
67
72
  // If we use ANSI.REVERSE on the whole cell including padding:
68
- cellStr = `${ansi_1.ANSI.REVERSE}${cellStr}${ansi_1.ANSI.RESET}`;
73
+ cellStr = `${_ansi.ANSI.REVERSE}${cellStr}${_ansi.ANSI.RESET}`;
69
74
  }
70
75
  return cellStr;
71
76
  });
72
77
  output += cells.join(' ') + '\n';
73
78
  }
74
- output += `${theme_1.theme.muted}Arrows to move, Space to toggle, Enter to submit${ansi_1.ANSI.RESET}`;
79
+ output += `${_theme.theme.muted}Arrows to move, Space to toggle, Enter to submit${_ansi.ANSI.RESET}`;
75
80
  this.renderFrame(output);
76
81
  }
77
82
  handleInput(char, _key) {
@@ -80,14 +85,10 @@ class GridPrompt extends base_1.Prompt {
80
85
  const isLeft = this.isLeft(char);
81
86
  const isRight = this.isRight(char);
82
87
  if (isUp || isDown || isLeft || isRight) {
83
- if (isUp)
84
- this.cursorRow = Math.max(0, this.cursorRow - 1);
85
- if (isDown)
86
- this.cursorRow = Math.min(this.options.rows.length - 1, this.cursorRow + 1);
87
- if (isLeft)
88
- this.cursorCol = Math.max(0, this.cursorCol - 1);
89
- if (isRight)
90
- this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);
88
+ if (isUp) this.cursorRow = Math.max(0, this.cursorRow - 1);
89
+ if (isDown) this.cursorRow = Math.min(this.options.rows.length - 1, this.cursorRow + 1);
90
+ if (isLeft) this.cursorCol = Math.max(0, this.cursorCol - 1);
91
+ if (isRight) this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);
91
92
  this.render(false);
92
93
  return;
93
94
  }
@@ -127,35 +128,35 @@ class GridPrompt extends base_1.Prompt {
127
128
  // r: Toggle Row
128
129
  if (char === 'r') {
129
130
  const row = this.selected[this.cursorRow];
130
- const allSelected = row.every(c => c);
131
- this.selected[this.cursorRow] = row.map(() => !allSelected);
131
+ const allSelected = row.every((c)=>c);
132
+ this.selected[this.cursorRow] = row.map(()=>!allSelected);
132
133
  this.render(false);
133
134
  return;
134
135
  }
135
136
  // c: Toggle Column
136
137
  if (char === 'c') {
137
138
  const colIdx = this.cursorCol;
138
- const colValues = this.selected.map(row => row[colIdx]);
139
- const allSelected = colValues.every(c => c);
140
- this.selected.forEach(row => row[colIdx] = !allSelected);
139
+ const colValues = this.selected.map((row)=>row[colIdx]);
140
+ const allSelected = colValues.every((c)=>c);
141
+ this.selected.forEach((row)=>row[colIdx] = !allSelected);
141
142
  this.render(false);
142
143
  return;
143
144
  }
144
145
  // a: Select All
145
146
  if (char === 'a') {
146
- this.selected = this.selected.map(row => row.map(() => true));
147
+ this.selected = this.selected.map((row)=>row.map(()=>true));
147
148
  this.render(false);
148
149
  return;
149
150
  }
150
151
  // x: Deselect All
151
152
  if (char === 'x') {
152
- this.selected = this.selected.map(row => row.map(() => false));
153
+ this.selected = this.selected.map((row)=>row.map(()=>false));
153
154
  this.render(false);
154
155
  return;
155
156
  }
156
157
  // i: Invert
157
158
  if (char === 'i') {
158
- this.selected = this.selected.map(row => row.map(v => !v));
159
+ this.selected = this.selected.map((row)=>row.map((v)=>!v));
159
160
  this.render(false);
160
161
  return;
161
162
  }
@@ -166,13 +167,25 @@ class GridPrompt extends base_1.Prompt {
166
167
  if (event.shift) {
167
168
  // Horizontal (Column)
168
169
  this.cursorCol = Math.max(0, Math.min(this.options.columns.length - 1, this.cursorCol + direction));
169
- }
170
- else {
170
+ } else {
171
171
  // Vertical (Row)
172
172
  this.cursorRow = Math.max(0, Math.min(this.options.rows.length - 1, this.cursorRow + direction));
173
173
  }
174
174
  this.render(false);
175
175
  }
176
176
  }
177
- }
178
- exports.GridPrompt = GridPrompt;
177
+ constructor(options){
178
+ super(options), _define_property(this, "cursorRow", 0), _define_property(this, "cursorCol", 0), _define_property(this, "selected", void 0), _define_property(this, "columnWidths", []), _define_property(this, "rowLabelWidth", 0);
179
+ // Initialize selection matrix
180
+ if (options.initial) {
181
+ this.selected = options.initial.map((row)=>[
182
+ ...row
183
+ ]);
184
+ } else {
185
+ this.selected = options.rows.map(()=>new Array(options.columns.length).fill(false));
186
+ }
187
+ this.calculateLayout();
188
+ }
189
+ };
190
+
191
+ //# sourceMappingURL=grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/grid.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { GridOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class GridPrompt extends Prompt<boolean[][], GridOptions> {\n private cursorRow: number = 0;\n private cursorCol: number = 0;\n private selected: boolean[][];\n private columnWidths: number[] = [];\n private rowLabelWidth: number = 0;\n\n constructor(options: GridOptions) {\n super(options);\n // Initialize selection matrix\n if (options.initial) {\n this.selected = options.initial.map(row => [...row]);\n } else {\n this.selected = options.rows.map(() =>\n new Array(options.columns.length).fill(false)\n );\n }\n\n this.calculateLayout();\n }\n\n private calculateLayout() {\n // Calculate max width for row labels\n this.rowLabelWidth = 0;\n for (const row of this.options.rows) {\n this.rowLabelWidth = Math.max(this.rowLabelWidth, stringWidth(row));\n }\n\n // Calculate width for each column\n this.columnWidths = this.options.columns.map(col => {\n // Header width vs Cell width (3 chars for \"[ ]\")\n return Math.max(stringWidth(col), 3);\n });\n }\n\n protected render(_firstRender: boolean): void {\n const { rows, columns } = this.options;\n\n let output = `${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Render Header\n // Padding for the row label column\n output += ' '.repeat(this.rowLabelWidth + 2); // +2 for spacing/border\n\n output += columns.map((col, i) => {\n const width = this.columnWidths[i];\n const padding = width - stringWidth(col);\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return `${theme.muted}${' '.repeat(leftPad)}${col}${' '.repeat(rightPad)}${ANSI.RESET}`;\n }).join(' ') + '\\n';\n\n // Render Rows\n for (let r = 0; r < rows.length; r++) {\n const rowLabel = rows[r];\n const labelPadding = this.rowLabelWidth - stringWidth(rowLabel);\n\n // Row Label\n output += `${theme.muted}${rowLabel}${' '.repeat(labelPadding)}${ANSI.RESET} `;\n\n // Cells\n const cells = this.selected[r].map((isChecked, c) => {\n const isFocused = (r === this.cursorRow && c === this.cursorCol);\n const width = this.columnWidths[c];\n const content = isChecked ? `[${theme.success}x${ANSI.RESET}]` : '[ ]';\n // content string width is 3 (ignoring ansi)\n const padding = width - 3;\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n\n let cellStr = `${' '.repeat(leftPad)}${content}${' '.repeat(rightPad)}`;\n\n if (isFocused) {\n // Highlight the focused cell\n // If we use ANSI.REVERSE on the whole cell including padding:\n cellStr = `${ANSI.REVERSE}${cellStr}${ANSI.RESET}`;\n }\n\n return cellStr;\n });\n\n output += cells.join(' ') + '\\n';\n }\n\n output += `${theme.muted}Arrows to move, Space to toggle, Enter to submit${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n const isUp = this.isUp(char);\n const isDown = this.isDown(char);\n const isLeft = this.isLeft(char);\n const isRight = this.isRight(char);\n\n if (isUp || isDown || isLeft || isRight) {\n if (isUp) this.cursorRow = Math.max(0, this.cursorRow - 1);\n if (isDown) this.cursorRow = Math.min(this.options.rows.length - 1, this.cursorRow + 1);\n if (isLeft) this.cursorCol = Math.max(0, this.cursorCol - 1);\n if (isRight) this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);\n\n this.render(false);\n return;\n }\n\n if (char === ' ') {\n this.selected[this.cursorRow][this.cursorCol] = !this.selected[this.cursorRow][this.cursorCol];\n this.render(false);\n return;\n }\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.selected);\n return;\n }\n\n // PageUp (First Row)\n if (char === '\\x1b[5~') {\n this.cursorRow = 0;\n this.render(false);\n return;\n }\n // PageDown (Last Row)\n if (char === '\\x1b[6~') {\n this.cursorRow = this.options.rows.length - 1;\n this.render(false);\n return;\n }\n // Home (First Column)\n if (char === '\\x1b[H' || char === '\\x1b[1~') {\n this.cursorCol = 0;\n this.render(false);\n return;\n }\n // End (Last Column)\n if (char === '\\x1b[F' || char === '\\x1b[4~') {\n this.cursorCol = this.options.columns.length - 1;\n this.render(false);\n return;\n }\n\n // r: Toggle Row\n if (char === 'r') {\n const row = this.selected[this.cursorRow];\n const allSelected = row.every(c => c);\n this.selected[this.cursorRow] = row.map(() => !allSelected);\n this.render(false);\n return;\n }\n\n // c: Toggle Column\n if (char === 'c') {\n const colIdx = this.cursorCol;\n const colValues = this.selected.map(row => row[colIdx]);\n const allSelected = colValues.every(c => c);\n this.selected.forEach(row => row[colIdx] = !allSelected);\n this.render(false);\n return;\n }\n\n // a: Select All\n if (char === 'a') {\n this.selected = this.selected.map(row => row.map(() => true));\n this.render(false);\n return;\n }\n\n // x: Deselect All\n if (char === 'x') {\n this.selected = this.selected.map(row => row.map(() => false));\n this.render(false);\n return;\n }\n\n // i: Invert\n if (char === 'i') {\n this.selected = this.selected.map(row => row.map(v => !v));\n this.render(false);\n return;\n }\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n const direction = event.scroll === 'up' ? -1 : 1;\n\n if (event.shift) {\n // Horizontal (Column)\n this.cursorCol = Math.max(0, Math.min(this.options.columns.length - 1, this.cursorCol + direction));\n } else {\n // Vertical (Row)\n this.cursorRow = Math.max(0, Math.min(this.options.rows.length - 1, this.cursorRow + direction));\n }\n this.render(false);\n }\n }\n}\n"],"names":["GridPrompt","Prompt","calculateLayout","rowLabelWidth","row","options","rows","Math","max","stringWidth","columnWidths","columns","map","col","render","_firstRender","output","theme","title","message","ANSI","RESET","repeat","i","width","padding","leftPad","floor","rightPad","muted","join","r","length","rowLabel","labelPadding","cells","selected","isChecked","c","isFocused","cursorRow","cursorCol","content","success","cellStr","REVERSE","renderFrame","handleInput","char","_key","isUp","isDown","isLeft","isRight","min","submit","allSelected","every","colIdx","colValues","forEach","v","handleMouse","event","action","direction","scroll","shift","initial","Array","fill"],"mappings":"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"}
@@ -1,50 +1,53 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HeatmapPrompt = void 0;
4
- const base_1 = require("../base");
5
- const ansi_1 = require("../ansi");
6
- class HeatmapPrompt extends base_1.Prompt {
7
- constructor(options) {
8
- super(options);
9
- this.cursorRow = 0;
10
- this.cursorCol = 0;
11
- // Initialize grid
12
- const rows = options.rows.length;
13
- const cols = options.columns.length;
14
- if (options.initial) {
15
- this.grid = options.initial.map(row => [...row]);
16
- }
17
- else {
18
- this.grid = Array.from({ length: rows }, () => Array(cols).fill(0));
19
- }
20
- // Get sorted valid values for cycling
21
- this.validValues = options.legend.map(l => l.value).sort((a, b) => a - b);
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "HeatmapPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return HeatmapPrompt;
22
9
  }
10
+ });
11
+ const _base = require("../base");
12
+ const _ansi = require("../ansi");
13
+ function _define_property(obj, key, value) {
14
+ if (key in obj) {
15
+ Object.defineProperty(obj, key, {
16
+ value: value,
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true
20
+ });
21
+ } else {
22
+ obj[key] = value;
23
+ }
24
+ return obj;
25
+ }
26
+ let HeatmapPrompt = class HeatmapPrompt extends _base.Prompt {
23
27
  render(_firstRender) {
24
- let output = `${ansi_1.ANSI.FG_CYAN}? ${this.options.message}${ansi_1.ANSI.RESET}\n`;
28
+ let output = `${_ansi.ANSI.FG_CYAN}? ${this.options.message}${_ansi.ANSI.RESET}\n`;
25
29
  // Render Column Headers
26
30
  output += ' '; // Offset for row labels
27
- this.options.columns.forEach(col => {
31
+ this.options.columns.forEach((col)=>{
28
32
  // Show first 2 chars
29
33
  const label = col.substring(0, 2).padEnd(2);
30
34
  output += ` ${label} `;
31
35
  });
32
36
  output += '\n';
33
37
  // Grid
34
- for (let r = 0; r < this.options.rows.length; r++) {
38
+ for(let r = 0; r < this.options.rows.length; r++){
35
39
  const rowLabel = this.options.rows[r].substring(0, 4).padStart(4);
36
- output += `${ansi_1.ANSI.FG_GRAY}${rowLabel} ${ansi_1.ANSI.RESET}`;
37
- for (let c = 0; c < this.options.columns.length; c++) {
40
+ output += `${_ansi.ANSI.FG_GRAY}${rowLabel} ${_ansi.ANSI.RESET}`;
41
+ for(let c = 0; c < this.options.columns.length; c++){
38
42
  const val = this.grid[r][c];
39
43
  const legend = this.getLegend(val);
40
44
  const char = legend?.char || '?';
41
- const color = legend?.color || ((s) => s);
45
+ const color = legend?.color || ((s)=>s);
42
46
  const isCursor = r === this.cursorRow && c === this.cursorCol;
43
47
  const cellContent = color(char);
44
48
  if (isCursor) {
45
49
  output += `[${cellContent}]`; // Brackets around
46
- }
47
- else {
50
+ } else {
48
51
  output += ` ${cellContent} `;
49
52
  }
50
53
  }
@@ -52,50 +55,39 @@ class HeatmapPrompt extends base_1.Prompt {
52
55
  }
53
56
  // Legend
54
57
  output += '\nLegend: ';
55
- this.options.legend.forEach(l => {
58
+ this.options.legend.forEach((l)=>{
56
59
  output += `${l.value}:${l.color(l.char)} `;
57
60
  });
58
- output += '\n' + ansi_1.ANSI.FG_GRAY + "(Arrows to move, Space to cycle, 0-9 to set)" + ansi_1.ANSI.RESET;
61
+ output += '\n' + _ansi.ANSI.FG_GRAY + "(Arrows to move, Space to cycle, 0-9 to set)" + _ansi.ANSI.RESET;
59
62
  this.renderFrame(output);
60
63
  }
61
64
  getLegend(val) {
62
- return this.options.legend.find(l => l.value === val);
65
+ return this.options.legend.find((l)=>l.value === val);
63
66
  }
64
67
  handleMouse(event) {
65
68
  if (event.action === 'scroll') {
66
69
  if (event.scroll === 'up') {
67
- if (this.cursorRow > 0)
68
- this.cursorRow--;
69
- }
70
- else if (event.scroll === 'down') {
71
- if (this.cursorRow < this.options.rows.length - 1)
72
- this.cursorRow++;
70
+ if (this.cursorRow > 0) this.cursorRow--;
71
+ } else if (event.scroll === 'down') {
72
+ if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;
73
73
  }
74
74
  this.render(false);
75
75
  }
76
76
  }
77
77
  handleInput(char, _key) {
78
- if (char === '\r' || char === '\n') { // Enter
78
+ if (char === '\r' || char === '\n') {
79
79
  this.submit(this.grid);
80
80
  return;
81
81
  }
82
82
  if (this.isUp(char)) {
83
- if (this.cursorRow > 0)
84
- this.cursorRow--;
85
- }
86
- else if (this.isDown(char)) {
87
- if (this.cursorRow < this.options.rows.length - 1)
88
- this.cursorRow++;
89
- }
90
- else if (this.isLeft(char)) {
91
- if (this.cursorCol > 0)
92
- this.cursorCol--;
93
- }
94
- else if (this.isRight(char)) {
95
- if (this.cursorCol < this.options.columns.length - 1)
96
- this.cursorCol++;
97
- }
98
- else if (char === '\t') { // Tab -> Right (Cycle)
83
+ if (this.cursorRow > 0) this.cursorRow--;
84
+ } else if (this.isDown(char)) {
85
+ if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;
86
+ } else if (this.isLeft(char)) {
87
+ if (this.cursorCol > 0) this.cursorCol--;
88
+ } else if (this.isRight(char)) {
89
+ if (this.cursorCol < this.options.columns.length - 1) this.cursorCol++;
90
+ } else if (char === '\t') {
99
91
  this.cursorCol++;
100
92
  if (this.cursorCol >= this.options.columns.length) {
101
93
  this.cursorCol = 0;
@@ -104,8 +96,7 @@ class HeatmapPrompt extends base_1.Prompt {
104
96
  this.cursorRow = 0;
105
97
  }
106
98
  }
107
- }
108
- else if (char === '\u001b[Z') { // Shift+Tab -> Left (Cycle)
99
+ } else if (char === '\u001b[Z') {
109
100
  this.cursorCol--;
110
101
  if (this.cursorCol < 0) {
111
102
  this.cursorCol = this.options.columns.length - 1;
@@ -114,21 +105,18 @@ class HeatmapPrompt extends base_1.Prompt {
114
105
  this.cursorRow = this.options.rows.length - 1;
115
106
  }
116
107
  }
117
- }
118
- else if (char === ' ') {
108
+ } else if (char === ' ') {
119
109
  const val = this.grid[this.cursorRow][this.cursorCol];
120
110
  const idx = this.validValues.indexOf(val);
121
111
  let nextVal;
122
112
  if (idx === -1) {
123
113
  // If current val not in legend (maybe init with invalid), reset to first
124
114
  nextVal = this.validValues[0];
125
- }
126
- else {
115
+ } else {
127
116
  nextVal = this.validValues[(idx + 1) % this.validValues.length];
128
117
  }
129
118
  this.grid[this.cursorRow][this.cursorCol] = nextVal;
130
- }
131
- else if (/[0-9]/.test(char)) {
119
+ } else if (/[0-9]/.test(char)) {
132
120
  const num = parseInt(char, 10);
133
121
  // Only set if valid in legend
134
122
  if (this.validValues.includes(num)) {
@@ -137,5 +125,23 @@ class HeatmapPrompt extends base_1.Prompt {
137
125
  }
138
126
  this.render(false);
139
127
  }
140
- }
141
- exports.HeatmapPrompt = HeatmapPrompt;
128
+ constructor(options){
129
+ super(options), _define_property(this, "grid", void 0), _define_property(this, "cursorRow", 0), _define_property(this, "cursorCol", 0), _define_property(this, "validValues", void 0);
130
+ // Initialize grid
131
+ const rows = options.rows.length;
132
+ const cols = options.columns.length;
133
+ if (options.initial) {
134
+ this.grid = options.initial.map((row)=>[
135
+ ...row
136
+ ]);
137
+ } else {
138
+ this.grid = Array.from({
139
+ length: rows
140
+ }, ()=>Array(cols).fill(0));
141
+ }
142
+ // Get sorted valid values for cycling
143
+ this.validValues = options.legend.map((l)=>l.value).sort((a, b)=>a - b);
144
+ }
145
+ };
146
+
147
+ //# sourceMappingURL=heatmap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/heatmap.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { HeatmapOptions, HeatmapLegend, MouseEvent } from '../types';\nimport { ANSI } from '../ansi';\n\nexport class HeatmapPrompt extends Prompt<number[][], HeatmapOptions> {\n private grid: number[][];\n private cursorRow: number = 0;\n private cursorCol: number = 0;\n private validValues: number[];\n\n constructor(options: HeatmapOptions) {\n super(options);\n // Initialize grid\n const rows = options.rows.length;\n const cols = options.columns.length;\n if (options.initial) {\n this.grid = options.initial.map(row => [...row]);\n } else {\n this.grid = Array.from({ length: rows }, () => Array(cols).fill(0));\n }\n\n // Get sorted valid values for cycling\n this.validValues = options.legend.map(l => l.value).sort((a, b) => a - b);\n }\n\n protected render(_firstRender: boolean): void {\n let output = `${ANSI.FG_CYAN}? ${this.options.message}${ANSI.RESET}\\n`;\n\n // Render Column Headers\n output += ' '; // Offset for row labels\n this.options.columns.forEach(col => {\n // Show first 2 chars\n const label = col.substring(0, 2).padEnd(2);\n output += ` ${label} `;\n });\n output += '\\n';\n\n // Grid\n for (let r = 0; r < this.options.rows.length; r++) {\n const rowLabel = this.options.rows[r].substring(0, 4).padStart(4);\n output += `${ANSI.FG_GRAY}${rowLabel} ${ANSI.RESET}`;\n\n for (let c = 0; c < this.options.columns.length; c++) {\n const val = this.grid[r][c];\n const legend = this.getLegend(val);\n const char = legend?.char || '?';\n const color = legend?.color || ((s: string) => s);\n\n const isCursor = r === this.cursorRow && c === this.cursorCol;\n\n const cellContent = color(char);\n if (isCursor) {\n output += `[${cellContent}]`; // Brackets around\n } else {\n output += ` ${cellContent} `;\n }\n }\n output += '\\n';\n }\n\n // Legend\n output += '\\nLegend: ';\n this.options.legend.forEach(l => {\n output += `${l.value}:${l.color(l.char)} `;\n });\n output += '\\n' + ANSI.FG_GRAY + \"(Arrows to move, Space to cycle, 0-9 to set)\" + ANSI.RESET;\n\n this.renderFrame(output);\n }\n\n private getLegend(val: number): HeatmapLegend | undefined {\n return this.options.legend.find(l => l.value === val);\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.cursorRow > 0) this.cursorRow--;\n } else if (event.scroll === 'down') {\n if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;\n }\n this.render(false);\n }\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n if (char === '\\r' || char === '\\n') { // Enter\n this.submit(this.grid);\n return;\n }\n\n if (this.isUp(char)) {\n if (this.cursorRow > 0) this.cursorRow--;\n } else if (this.isDown(char)) {\n if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;\n } else if (this.isLeft(char)) {\n if (this.cursorCol > 0) this.cursorCol--;\n } else if (this.isRight(char)) {\n if (this.cursorCol < this.options.columns.length - 1) this.cursorCol++;\n } else if (char === '\\t') { // Tab -> Right (Cycle)\n this.cursorCol++;\n if (this.cursorCol >= this.options.columns.length) {\n this.cursorCol = 0;\n this.cursorRow++;\n if (this.cursorRow >= this.options.rows.length) {\n this.cursorRow = 0;\n }\n }\n } else if (char === '\\u001b[Z') { // Shift+Tab -> Left (Cycle)\n this.cursorCol--;\n if (this.cursorCol < 0) {\n this.cursorCol = this.options.columns.length - 1;\n this.cursorRow--;\n if (this.cursorRow < 0) {\n this.cursorRow = this.options.rows.length - 1;\n }\n }\n } else if (char === ' ') {\n const val = this.grid[this.cursorRow][this.cursorCol];\n const idx = this.validValues.indexOf(val);\n let nextVal;\n if (idx === -1) {\n // If current val not in legend (maybe init with invalid), reset to first\n nextVal = this.validValues[0];\n } else {\n nextVal = this.validValues[(idx + 1) % this.validValues.length];\n }\n this.grid[this.cursorRow][this.cursorCol] = nextVal;\n } else if (/[0-9]/.test(char)) {\n const num = parseInt(char, 10);\n // Only set if valid in legend\n if (this.validValues.includes(num)) {\n this.grid[this.cursorRow][this.cursorCol] = num;\n }\n }\n\n this.render(false);\n }\n}\n"],"names":["HeatmapPrompt","Prompt","render","_firstRender","output","ANSI","FG_CYAN","options","message","RESET","columns","forEach","col","label","substring","padEnd","r","rows","length","rowLabel","padStart","FG_GRAY","c","val","grid","legend","getLegend","char","color","s","isCursor","cursorRow","cursorCol","cellContent","l","value","renderFrame","find","handleMouse","event","action","scroll","handleInput","_key","submit","isUp","isDown","isLeft","isRight","idx","validValues","indexOf","nextVal","test","num","parseInt","includes","cols","initial","map","row","Array","from","fill","sort","a","b"],"mappings":";;;;+BAIaA;;;eAAAA;;;sBAJU;sBAEF;;;;;;;;;;;;;;AAEd,IAAA,AAAMA,gBAAN,MAAMA,sBAAsBC,YAAM;IAqB3BC,OAAOC,YAAqB,EAAQ;QAC1C,IAAIC,SAAS,GAAGC,UAAI,CAACC,OAAO,CAAC,EAAE,EAAE,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGH,UAAI,CAACI,KAAK,CAAC,EAAE,CAAC;QAEtE,wBAAwB;QACxBL,UAAU,SAAS,wBAAwB;QAC3C,IAAI,CAACG,OAAO,CAACG,OAAO,CAACC,OAAO,CAACC,CAAAA;YACzB,qBAAqB;YACrB,MAAMC,QAAQD,IAAIE,SAAS,CAAC,GAAG,GAAGC,MAAM,CAAC;YACzCX,UAAU,CAAC,CAAC,EAAES,MAAM,CAAC,CAAC;QAC1B;QACAT,UAAU;QAEV,OAAO;QACP,IAAK,IAAIY,IAAI,GAAGA,IAAI,IAAI,CAACT,OAAO,CAACU,IAAI,CAACC,MAAM,EAAEF,IAAK;YAC/C,MAAMG,WAAW,IAAI,CAACZ,OAAO,CAACU,IAAI,CAACD,EAAE,CAACF,SAAS,CAAC,GAAG,GAAGM,QAAQ,CAAC;YAC/DhB,UAAU,GAAGC,UAAI,CAACgB,OAAO,GAAGF,SAAS,CAAC,EAAEd,UAAI,CAACI,KAAK,EAAE;YAEpD,IAAK,IAAIa,IAAI,GAAGA,IAAI,IAAI,CAACf,OAAO,CAACG,OAAO,CAACQ,MAAM,EAAEI,IAAK;gBAClD,MAAMC,MAAM,IAAI,CAACC,IAAI,CAACR,EAAE,CAACM,EAAE;gBAC3B,MAAMG,SAAS,IAAI,CAACC,SAAS,CAACH;gBAC9B,MAAMI,OAAOF,QAAQE,QAAQ;gBAC7B,MAAMC,QAAQH,QAAQG,SAAU,CAAA,CAACC,IAAcA,CAAAA;gBAE/C,MAAMC,WAAWd,MAAM,IAAI,CAACe,SAAS,IAAIT,MAAM,IAAI,CAACU,SAAS;gBAE7D,MAAMC,cAAcL,MAAMD;gBAC1B,IAAIG,UAAU;oBACV1B,UAAU,CAAC,CAAC,EAAE6B,YAAY,CAAC,CAAC,EAAE,kBAAkB;gBACpD,OAAO;oBACH7B,UAAU,CAAC,CAAC,EAAE6B,YAAY,CAAC,CAAC;gBAChC;YACJ;YACA7B,UAAU;QACd;QAEA,SAAS;QACTA,UAAU;QACV,IAAI,CAACG,OAAO,CAACkB,MAAM,CAACd,OAAO,CAACuB,CAAAA;YACxB9B,UAAU,GAAG8B,EAAEC,KAAK,CAAC,CAAC,EAAED,EAAEN,KAAK,CAACM,EAAEP,IAAI,EAAE,EAAE,CAAC;QAC/C;QACAvB,UAAU,OAAOC,UAAI,CAACgB,OAAO,GAAG,iDAAiDhB,UAAI,CAACI,KAAK;QAE3F,IAAI,CAAC2B,WAAW,CAAChC;IACrB;IAEQsB,UAAUH,GAAW,EAA6B;QACtD,OAAO,IAAI,CAAChB,OAAO,CAACkB,MAAM,CAACY,IAAI,CAACH,CAAAA,IAAKA,EAAEC,KAAK,KAAKZ;IACrD;IAEUe,YAAYC,KAAiB,EAAQ;QAC3C,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,IAAID,MAAME,MAAM,KAAK,MAAM;gBACvB,IAAI,IAAI,CAACV,SAAS,GAAG,GAAG,IAAI,CAACA,SAAS;YAC1C,OAAO,IAAIQ,MAAME,MAAM,KAAK,QAAQ;gBAChC,IAAI,IAAI,CAACV,SAAS,GAAG,IAAI,CAACxB,OAAO,CAACU,IAAI,CAACC,MAAM,GAAG,GAAG,IAAI,CAACa,SAAS;YACrE;YACA,IAAI,CAAC7B,MAAM,CAAC;QAChB;IACJ;IAEUwC,YAAYf,IAAY,EAAEgB,IAAY,EAAQ;QACpD,IAAIhB,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,CAACiB,MAAM,CAAC,IAAI,CAACpB,IAAI;YACrB;QACJ;QAEA,IAAI,IAAI,CAACqB,IAAI,CAAClB,OAAO;YACjB,IAAI,IAAI,CAACI,SAAS,GAAG,GAAG,IAAI,CAACA,SAAS;QAC1C,OAAO,IAAI,IAAI,CAACe,MAAM,CAACnB,OAAO;YAC1B,IAAI,IAAI,CAACI,SAAS,GAAG,IAAI,CAACxB,OAAO,CAACU,IAAI,CAACC,MAAM,GAAG,GAAG,IAAI,CAACa,SAAS;QACrE,OAAO,IAAI,IAAI,CAACgB,MAAM,CAACpB,OAAO;YAC1B,IAAI,IAAI,CAACK,SAAS,GAAG,GAAG,IAAI,CAACA,SAAS;QAC1C,OAAO,IAAI,IAAI,CAACgB,OAAO,CAACrB,OAAO;YAC3B,IAAI,IAAI,CAACK,SAAS,GAAG,IAAI,CAACzB,OAAO,CAACG,OAAO,CAACQ,MAAM,GAAG,GAAG,IAAI,CAACc,SAAS;QACxE,OAAO,IAAIL,SAAS,MAAM;YACtB,IAAI,CAACK,SAAS;YACd,IAAI,IAAI,CAACA,SAAS,IAAI,IAAI,CAACzB,OAAO,CAACG,OAAO,CAACQ,MAAM,EAAE;gBAC/C,IAAI,CAACc,SAAS,GAAG;gBACjB,IAAI,CAACD,SAAS;gBACd,IAAI,IAAI,CAACA,SAAS,IAAI,IAAI,CAACxB,OAAO,CAACU,IAAI,CAACC,MAAM,EAAE;oBAC5C,IAAI,CAACa,SAAS,GAAG;gBACrB;YACJ;QACJ,OAAO,IAAIJ,SAAS,YAAY;YAC5B,IAAI,CAACK,SAAS;YACd,IAAI,IAAI,CAACA,SAAS,GAAG,GAAG;gBACpB,IAAI,CAACA,SAAS,GAAG,IAAI,CAACzB,OAAO,CAACG,OAAO,CAACQ,MAAM,GAAG;gBAC/C,IAAI,CAACa,SAAS;gBACd,IAAI,IAAI,CAACA,SAAS,GAAG,GAAG;oBACpB,IAAI,CAACA,SAAS,GAAG,IAAI,CAACxB,OAAO,CAACU,IAAI,CAACC,MAAM,GAAG;gBAChD;YACJ;QACJ,OAAO,IAAIS,SAAS,KAAK;YACrB,MAAMJ,MAAM,IAAI,CAACC,IAAI,CAAC,IAAI,CAACO,SAAS,CAAC,CAAC,IAAI,CAACC,SAAS,CAAC;YACrD,MAAMiB,MAAM,IAAI,CAACC,WAAW,CAACC,OAAO,CAAC5B;YACrC,IAAI6B;YACJ,IAAIH,QAAQ,CAAC,GAAG;gBACZ,yEAAyE;gBACzEG,UAAU,IAAI,CAACF,WAAW,CAAC,EAAE;YACjC,OAAO;gBACHE,UAAU,IAAI,CAACF,WAAW,CAAC,AAACD,CAAAA,MAAM,CAAA,IAAK,IAAI,CAACC,WAAW,CAAChC,MAAM,CAAC;YACnE;YACA,IAAI,CAACM,IAAI,CAAC,IAAI,CAACO,SAAS,CAAC,CAAC,IAAI,CAACC,SAAS,CAAC,GAAGoB;QAChD,OAAO,IAAI,QAAQC,IAAI,CAAC1B,OAAO;YAC3B,MAAM2B,MAAMC,SAAS5B,MAAM;YAC3B,8BAA8B;YAC9B,IAAI,IAAI,CAACuB,WAAW,CAACM,QAAQ,CAACF,MAAM;gBAChC,IAAI,CAAC9B,IAAI,CAAC,IAAI,CAACO,SAAS,CAAC,CAAC,IAAI,CAACC,SAAS,CAAC,GAAGsB;YAChD;QACJ;QAEA,IAAI,CAACpD,MAAM,CAAC;IAChB;IA/HA,YAAYK,OAAuB,CAAE;QACjC,KAAK,CAACA,UANV,uBAAQiB,QAAR,KAAA,IACA,uBAAQO,aAAoB,IAC5B,uBAAQC,aAAoB,IAC5B,uBAAQkB,eAAR,KAAA;QAII,kBAAkB;QAClB,MAAMjC,OAAOV,QAAQU,IAAI,CAACC,MAAM;QAChC,MAAMuC,OAAOlD,QAAQG,OAAO,CAACQ,MAAM;QACnC,IAAIX,QAAQmD,OAAO,EAAE;YACjB,IAAI,CAAClC,IAAI,GAAGjB,QAAQmD,OAAO,CAACC,GAAG,CAACC,CAAAA,MAAO;uBAAIA;iBAAI;QACnD,OAAO;YACH,IAAI,CAACpC,IAAI,GAAGqC,MAAMC,IAAI,CAAC;gBAAE5C,QAAQD;YAAK,GAAG,IAAM4C,MAAMJ,MAAMM,IAAI,CAAC;QACpE;QAEA,sCAAsC;QACtC,IAAI,CAACb,WAAW,GAAG3C,QAAQkB,MAAM,CAACkC,GAAG,CAACzB,CAAAA,IAAKA,EAAEC,KAAK,EAAE6B,IAAI,CAAC,CAACC,GAAGC,IAAMD,IAAIC;IAC3E;AAmHJ"}
@@ -1,65 +1,68 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IPPrompt = 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
- class IPPrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- this.octets = ['', '', '', ''];
12
- this.activeOctet = 0;
13
- this.errorMsg = '';
14
- if (options.initial) {
15
- const parts = options.initial.split('.');
16
- if (parts.length === 4) {
17
- this.octets = parts.map(p => {
18
- const num = parseInt(p, 10);
19
- return !isNaN(num) && num >= 0 && num <= 255 ? p : '';
20
- });
21
- }
22
- }
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "IPPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return IPPrompt;
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;
23
25
  }
26
+ return obj;
27
+ }
28
+ let IPPrompt = class IPPrompt extends _base.Prompt {
24
29
  render(_firstRender) {
25
30
  let output = '';
26
31
  // Title
27
- const icon = this.errorMsg ? `${theme_1.theme.error}${symbols_1.symbols.cross}` : `${theme_1.theme.success}?`;
28
- output += `${icon} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
32
+ const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
33
+ output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
29
34
  // IP Render
30
- const partsDisplay = this.octets.map((octet, index) => {
35
+ const partsDisplay = this.octets.map((octet, index)=>{
31
36
  const isEmpty = octet.length === 0;
32
37
  let displayVal = isEmpty ? '_' : octet;
33
38
  if (index === this.activeOctet) {
34
39
  // Highlight active
35
- displayVal = `${theme_1.theme.main}${ansi_1.ANSI.UNDERLINE}${displayVal}${ansi_1.ANSI.RESET}`;
40
+ displayVal = `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${displayVal}${_ansi.ANSI.RESET}`;
36
41
  }
37
42
  return displayVal;
38
43
  });
39
44
  output += ` ${partsDisplay.join('.')}`;
40
45
  if (this.errorMsg) {
41
- output += `\n${theme_1.theme.error}>> ${this.errorMsg}${ansi_1.ANSI.RESET}`;
46
+ output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
42
47
  }
43
48
  this.renderFrame(output);
44
49
  }
45
50
  handleInput(char) {
46
51
  this.errorMsg = '';
47
52
  if (char === '\r' || char === '\n') {
48
- if (this.octets.every(o => o.length > 0)) {
53
+ if (this.octets.every((o)=>o.length > 0)) {
49
54
  this.submit(this.octets.join('.'));
50
- }
51
- else {
55
+ } else {
52
56
  this.errorMsg = 'Invalid IP address';
53
57
  this.render(false);
54
58
  }
55
59
  return;
56
60
  }
57
- if (char === '\u0008' || char === '\x7f') { // Backspace
61
+ if (char === '\u0008' || char === '\x7f') {
58
62
  const current = this.octets[this.activeOctet];
59
63
  if (current.length > 0) {
60
64
  this.octets[this.activeOctet] = current.slice(0, -1);
61
- }
62
- else if (this.activeOctet > 0) {
65
+ } else if (this.activeOctet > 0) {
63
66
  this.activeOctet--;
64
67
  }
65
68
  this.render(false);
@@ -105,8 +108,7 @@ class IPPrompt extends base_1.Prompt {
105
108
  this.activeOctet--;
106
109
  this.render(false);
107
110
  }
108
- }
109
- else if (event.scroll === 'down') {
111
+ } else if (event.scroll === 'down') {
110
112
  if (this.activeOctet < 3) {
111
113
  this.activeOctet++;
112
114
  this.render(false);
@@ -114,5 +116,23 @@ class IPPrompt extends base_1.Prompt {
114
116
  }
115
117
  }
116
118
  }
117
- }
118
- exports.IPPrompt = IPPrompt;
119
+ constructor(options){
120
+ super(options), _define_property(this, "octets", [
121
+ '',
122
+ '',
123
+ '',
124
+ ''
125
+ ]), _define_property(this, "activeOctet", 0), _define_property(this, "errorMsg", '');
126
+ if (options.initial) {
127
+ const parts = options.initial.split('.');
128
+ if (parts.length === 4) {
129
+ this.octets = parts.map((p)=>{
130
+ const num = parseInt(p, 10);
131
+ return !isNaN(num) && num >= 0 && num <= 255 ? p : '';
132
+ });
133
+ }
134
+ }
135
+ }
136
+ };
137
+
138
+ //# sourceMappingURL=ip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/ip.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { IPOptions, MouseEvent } from '../types';\n\nexport class IPPrompt extends Prompt<string, IPOptions> {\n private octets: string[] = ['', '', '', ''];\n private activeOctet: number = 0;\n private errorMsg: string = '';\n\n constructor(options: IPOptions) {\n super(options);\n if (options.initial) {\n const parts = options.initial.split('.');\n if (parts.length === 4) {\n this.octets = parts.map(p => {\n const num = parseInt(p, 10);\n return !isNaN(num) && num >= 0 && num <= 255 ? p : '';\n });\n }\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Title\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // IP Render\n const partsDisplay = this.octets.map((octet, index) => {\n const isEmpty = octet.length === 0;\n let displayVal = isEmpty ? '_' : octet;\n\n if (index === this.activeOctet) {\n // Highlight active\n displayVal = `${theme.main}${ANSI.UNDERLINE}${displayVal}${ANSI.RESET}`;\n }\n return displayVal;\n });\n\n output += ` ${partsDisplay.join('.')}`;\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n this.errorMsg = '';\n\n if (char === '\\r' || char === '\\n') {\n if (this.octets.every(o => o.length > 0)) {\n this.submit(this.octets.join('.'));\n } else {\n this.errorMsg = 'Invalid IP address';\n this.render(false);\n }\n return;\n }\n\n if (char === '\\u0008' || char === '\\x7f') { // Backspace\n const current = this.octets[this.activeOctet];\n if (current.length > 0) {\n this.octets[this.activeOctet] = current.slice(0, -1);\n } else if (this.activeOctet > 0) {\n this.activeOctet--;\n }\n this.render(false);\n return;\n }\n\n // Navigation\n if (this.isLeft(char) && this.activeOctet > 0) {\n this.activeOctet--;\n this.render(false);\n return;\n }\n if (this.isRight(char) && this.activeOctet < 3) {\n this.activeOctet++;\n this.render(false);\n return;\n }\n\n // Dot navigation\n if (char === '.') {\n if (this.activeOctet < 3) {\n this.activeOctet++;\n this.render(false);\n }\n return;\n }\n\n // Numbers\n if (/^\\d$/.test(char)) {\n const current = this.octets[this.activeOctet];\n const newValue = current + char;\n\n if (parseInt(newValue, 10) <= 255) {\n this.octets[this.activeOctet] = newValue;\n\n // Auto-jump if 3 digits\n if (newValue.length === 3 && this.activeOctet < 3) {\n this.activeOctet++;\n }\n this.render(false);\n }\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.activeOctet > 0) {\n this.activeOctet--;\n this.render(false);\n }\n } else if (event.scroll === 'down') {\n if (this.activeOctet < 3) {\n this.activeOctet++;\n this.render(false);\n }\n }\n }\n }\n}\n"],"names":["IPPrompt","Prompt","render","_firstRender","output","icon","errorMsg","theme","error","symbols","cross","success","ANSI","BOLD","title","options","message","RESET","partsDisplay","octets","map","octet","index","isEmpty","length","displayVal","activeOctet","main","UNDERLINE","join","renderFrame","handleInput","char","every","o","submit","current","slice","isLeft","isRight","test","newValue","parseInt","handleMouse","event","action","scroll","initial","parts","split","p","num","isNaN"],"mappings":"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"}