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,47 +1,48 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DependencyPrompt = 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 DependencyPrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- this.selectedIndex = 0;
12
- this.errorMsg = '';
13
- this.warningMsg = '';
14
- // Pagination state
15
- this.scrollTop = 0;
16
- this.pageSize = 10;
17
- // Initialize checked state from options (default selected)
18
- // We also need to run initial validation/resolution
19
- this.checkedState = options.choices.map(c => !!c.selected);
20
- if (options.autoResolve !== false) {
21
- // Run resolution for all initially selected items
22
- this.checkedState.forEach((isChecked, i) => {
23
- if (isChecked) {
24
- this.resolveDependencies(i, true);
25
- }
26
- });
27
- }
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "DependencyPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return DependencyPrompt;
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;
28
25
  }
26
+ return obj;
27
+ }
28
+ let DependencyPrompt = class DependencyPrompt extends _base.Prompt {
29
29
  resolveDependencies(index, value) {
30
30
  // If autoResolve is false, we don't do anything automatically,
31
31
  // validation will handle it on submit.
32
- if (this.options.autoResolve === false)
33
- return;
32
+ if (this.options.autoResolve === false) return;
34
33
  const choices = this.options.choices;
35
34
  const visited = new Set();
36
35
  const queue = [];
37
- queue.push({ idx: index, val: value });
36
+ queue.push({
37
+ idx: index,
38
+ val: value
39
+ });
38
40
  // Process queue
39
41
  let loops = 0;
40
- while (queue.length > 0 && loops < 1000) { // Safety break
42
+ while(queue.length > 0 && loops < 1000){
41
43
  loops++;
42
44
  const current = queue.shift();
43
- if (visited.has(current.idx))
44
- continue;
45
+ if (visited.has(current.idx)) continue;
45
46
  // Apply state
46
47
  // Only if it changes state
47
48
  if (this.checkedState[current.idx] !== current.val) {
@@ -56,8 +57,8 @@ class DependencyPrompt extends base_1.Prompt {
56
57
  // Turning ON
57
58
  // 1. Check Conflicts (Disable items that THIS item conflicts with)
58
59
  if (currentItem.conflictsWith) {
59
- currentItem.conflictsWith.forEach(conflictVal => {
60
- const conflictIdx = choices.findIndex(c => c.value === conflictVal);
60
+ currentItem.conflictsWith.forEach((conflictVal)=>{
61
+ const conflictIdx = choices.findIndex((c)=>c.value === conflictVal);
61
62
  if (conflictIdx !== -1 && this.checkedState[conflictIdx]) {
62
63
  queue.push({
63
64
  idx: conflictIdx,
@@ -69,10 +70,9 @@ class DependencyPrompt extends base_1.Prompt {
69
70
  }
70
71
  // [FIX] 1.5. Reverse Conflict Check (Disable items that conflict with THIS item)
71
72
  // Check if any currently SELECTED item has a conflict with the item we are enabling
72
- choices.forEach((other, otherIdx) => {
73
+ choices.forEach((other, otherIdx)=>{
73
74
  // Skip self and unchecked items
74
- if (otherIdx === current.idx || !this.checkedState[otherIdx])
75
- return;
75
+ if (otherIdx === current.idx || !this.checkedState[otherIdx]) return;
76
76
  if (other.conflictsWith && other.conflictsWith.includes(currentItem.value)) {
77
77
  queue.push({
78
78
  idx: otherIdx,
@@ -83,8 +83,8 @@ class DependencyPrompt extends base_1.Prompt {
83
83
  });
84
84
  // 2. Check Dependencies (Enable them)
85
85
  if (currentItem.dependsOn) {
86
- currentItem.dependsOn.forEach(depVal => {
87
- const depIdx = choices.findIndex(c => c.value === depVal);
86
+ currentItem.dependsOn.forEach((depVal)=>{
87
+ const depIdx = choices.findIndex((c)=>c.value === depVal);
88
88
  if (depIdx !== -1 && !this.checkedState[depIdx]) {
89
89
  queue.push({
90
90
  idx: depIdx,
@@ -96,8 +96,8 @@ class DependencyPrompt extends base_1.Prompt {
96
96
  }
97
97
  // 3. Check Triggers (Enable them)
98
98
  if (currentItem.triggers) {
99
- currentItem.triggers.forEach(trigVal => {
100
- const trigIdx = choices.findIndex(c => c.value === trigVal);
99
+ currentItem.triggers.forEach((trigVal)=>{
100
+ const trigIdx = choices.findIndex((c)=>c.value === trigVal);
101
101
  if (trigIdx !== -1 && !this.checkedState[trigIdx]) {
102
102
  queue.push({
103
103
  idx: trigIdx,
@@ -107,11 +107,10 @@ class DependencyPrompt extends base_1.Prompt {
107
107
  }
108
108
  });
109
109
  }
110
- }
111
- else {
110
+ } else {
112
111
  // Turning OFF
113
112
  // Check if other ON items depend on this one. If so, disable them.
114
- choices.forEach((other, otherIdx) => {
113
+ choices.forEach((other, otherIdx)=>{
115
114
  if (this.checkedState[otherIdx] && other.dependsOn && other.dependsOn.includes(currentItem.value)) {
116
115
  queue.push({
117
116
  idx: otherIdx,
@@ -127,8 +126,7 @@ class DependencyPrompt extends base_1.Prompt {
127
126
  // Adjust Scroll Top
128
127
  if (this.selectedIndex < this.scrollTop) {
129
128
  this.scrollTop = this.selectedIndex;
130
- }
131
- else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
129
+ } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
132
130
  this.scrollTop = this.selectedIndex - this.pageSize + 1;
133
131
  }
134
132
  if (this.options.choices.length <= this.pageSize) {
@@ -136,36 +134,31 @@ class DependencyPrompt extends base_1.Prompt {
136
134
  }
137
135
  let output = '';
138
136
  // Header
139
- const icon = this.errorMsg ? `${theme_1.theme.error}${symbols_1.symbols.cross}` : `${theme_1.theme.success}?`;
140
- output += `${icon} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} ${theme_1.theme.muted}(Space: toggle, Enter: submit)${ansi_1.ANSI.RESET}`;
137
+ const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
138
+ output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(Space: toggle, Enter: submit)${_ansi.ANSI.RESET}`;
141
139
  // List
142
140
  const choices = this.options.choices;
143
141
  const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
144
- visibleChoices.forEach((choice, index) => {
142
+ visibleChoices.forEach((choice, index)=>{
145
143
  const actualIndex = this.scrollTop + index;
146
144
  output += '\n'; // New line for each item
147
- const cursor = actualIndex === this.selectedIndex ? `${theme_1.theme.main}${symbols_1.symbols.pointer}${ansi_1.ANSI.RESET}` : ' ';
145
+ const cursor = actualIndex === this.selectedIndex ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET}` : ' ';
148
146
  const isChecked = this.checkedState[actualIndex];
149
- const checkbox = isChecked
150
- ? `${theme_1.theme.success}${symbols_1.symbols.checked}${ansi_1.ANSI.RESET}`
151
- : `${theme_1.theme.muted}${symbols_1.symbols.unchecked}${ansi_1.ANSI.RESET}`;
152
- let title = actualIndex === this.selectedIndex
153
- ? `${theme_1.theme.main}${choice.title}${ansi_1.ANSI.RESET}`
154
- : choice.title;
147
+ const checkbox = isChecked ? `${_theme.theme.success}${_symbols.symbols.checked}${_ansi.ANSI.RESET}` : `${_theme.theme.muted}${_symbols.symbols.unchecked}${_ansi.ANSI.RESET}`;
148
+ let title = actualIndex === this.selectedIndex ? `${_theme.theme.main}${choice.title}${_ansi.ANSI.RESET}` : choice.title;
155
149
  // Add tags for relationships
156
150
  if (choice.dependsOn && choice.dependsOn.length > 0) {
157
- title += ` ${theme_1.theme.muted}[Req: ${choice.dependsOn.length}]${ansi_1.ANSI.RESET}`;
151
+ title += ` ${_theme.theme.muted}[Req: ${choice.dependsOn.length}]${_ansi.ANSI.RESET}`;
158
152
  }
159
153
  if (choice.conflictsWith && choice.conflictsWith.length > 0) {
160
- title += ` ${theme_1.theme.error}[Con: ${choice.conflictsWith.length}]${ansi_1.ANSI.RESET}`;
154
+ title += ` ${_theme.theme.error}[Con: ${choice.conflictsWith.length}]${_ansi.ANSI.RESET}`;
161
155
  }
162
156
  output += `${cursor} ${checkbox} ${title}`;
163
157
  });
164
158
  if (this.errorMsg) {
165
- output += `\n${theme_1.theme.error}>> ${this.errorMsg}${ansi_1.ANSI.RESET}`;
166
- }
167
- else if (this.warningMsg) {
168
- output += `\n${theme_1.theme.main}>> ${this.warningMsg}${ansi_1.ANSI.RESET}`;
159
+ output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
160
+ } else if (this.warningMsg) {
161
+ output += `\n${_theme.theme.main}>> ${this.warningMsg}${_ansi.ANSI.RESET}`;
169
162
  }
170
163
  this.renderFrame(output);
171
164
  }
@@ -174,8 +167,7 @@ class DependencyPrompt extends base_1.Prompt {
174
167
  if (event.scroll === 'up') {
175
168
  this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;
176
169
  this.render(false);
177
- }
178
- else if (event.scroll === 'down') {
170
+ } else if (event.scroll === 'down') {
179
171
  this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;
180
172
  this.render(false);
181
173
  }
@@ -208,9 +200,7 @@ class DependencyPrompt extends base_1.Prompt {
208
200
  }
209
201
  }
210
202
  this.cleanup();
211
- const results = this.options.choices
212
- .filter((_, i) => this.checkedState[i])
213
- .map(c => c.value);
203
+ const results = this.options.choices.filter((_, i)=>this.checkedState[i]).map((c)=>c.value);
214
204
  this.submit(results);
215
205
  return;
216
206
  }
@@ -233,31 +223,29 @@ class DependencyPrompt extends base_1.Prompt {
233
223
  this.warningMsg = '';
234
224
  if (this.options.autoResolve !== false) {
235
225
  this.resolveDependencies(this.selectedIndex, newState);
236
- }
237
- else {
226
+ } else {
238
227
  this.checkedState[this.selectedIndex] = newState;
239
228
  }
240
229
  this.render(false);
241
230
  }
242
- if (this.isUp(char)) { // Up
231
+ if (this.isUp(char)) {
243
232
  this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;
244
233
  this.render(false);
245
234
  }
246
- if (this.isDown(char)) { // Down
235
+ if (this.isDown(char)) {
247
236
  this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;
248
237
  this.render(false);
249
238
  }
250
239
  }
251
240
  validateDependencies() {
252
241
  const choices = this.options.choices;
253
- for (let i = 0; i < choices.length; i++) {
254
- if (!this.checkedState[i])
255
- continue;
242
+ for(let i = 0; i < choices.length; i++){
243
+ if (!this.checkedState[i]) continue;
256
244
  const item = choices[i];
257
245
  // Check dependencies
258
246
  if (item.dependsOn) {
259
- for (const depVal of item.dependsOn) {
260
- const depIdx = choices.findIndex(c => c.value === depVal);
247
+ for (const depVal of item.dependsOn){
248
+ const depIdx = choices.findIndex((c)=>c.value === depVal);
261
249
  if (depIdx === -1 || !this.checkedState[depIdx]) {
262
250
  return `${item.title} requires ${depVal}`; // Should look up title for depVal ideally
263
251
  }
@@ -265,8 +253,8 @@ class DependencyPrompt extends base_1.Prompt {
265
253
  }
266
254
  // Check conflicts
267
255
  if (item.conflictsWith) {
268
- for (const conVal of item.conflictsWith) {
269
- const conIdx = choices.findIndex(c => c.value === conVal);
256
+ for (const conVal of item.conflictsWith){
257
+ const conIdx = choices.findIndex((c)=>c.value === conVal);
270
258
  if (conIdx !== -1 && this.checkedState[conIdx]) {
271
259
  return `${item.title} conflicts with ${choices[conIdx].title}`;
272
260
  }
@@ -275,5 +263,21 @@ class DependencyPrompt extends base_1.Prompt {
275
263
  }
276
264
  return null;
277
265
  }
278
- }
279
- exports.DependencyPrompt = DependencyPrompt;
266
+ constructor(options){
267
+ super(options), _define_property(this, "selectedIndex", 0), _define_property(this, "checkedState", void 0), _define_property(this, "errorMsg", ''), _define_property(this, "warningMsg", ''), // Pagination state
268
+ _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 10);
269
+ // Initialize checked state from options (default selected)
270
+ // We also need to run initial validation/resolution
271
+ this.checkedState = options.choices.map((c)=>!!c.selected);
272
+ if (options.autoResolve !== false) {
273
+ // Run resolution for all initially selected items
274
+ this.checkedState.forEach((isChecked, i)=>{
275
+ if (isChecked) {
276
+ this.resolveDependencies(i, true);
277
+ }
278
+ });
279
+ }
280
+ }
281
+ };
282
+
283
+ //# sourceMappingURL=dependency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/dependency.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { DependencyOptions, MouseEvent } from '../types';\n\nexport class DependencyPrompt<V> extends Prompt<V[], DependencyOptions<V>> {\n private selectedIndex: number = 0;\n private checkedState: boolean[];\n private errorMsg: string = '';\n private warningMsg: string = '';\n\n // Pagination state\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n constructor(options: DependencyOptions<V>) {\n super(options);\n // Initialize checked state from options (default selected)\n // We also need to run initial validation/resolution\n this.checkedState = options.choices.map(c => !!c.selected);\n\n if (options.autoResolve !== false) {\n // Run resolution for all initially selected items\n this.checkedState.forEach((isChecked, i) => {\n if (isChecked) {\n this.resolveDependencies(i, true);\n }\n });\n }\n }\n\n private resolveDependencies(index: number, value: boolean) {\n // If autoResolve is false, we don't do anything automatically, \n // validation will handle it on submit.\n if (this.options.autoResolve === false) return;\n\n const choices = this.options.choices;\n const visited = new Set<number>();\n const queue: { idx: number, val: boolean, reason?: string }[] = [];\n\n queue.push({ idx: index, val: value });\n\n // Process queue\n let loops = 0;\n while (queue.length > 0 && loops < 1000) { // Safety break\n loops++;\n const current = queue.shift()!;\n if (visited.has(current.idx)) continue;\n\n // Apply state\n // Only if it changes state\n if (this.checkedState[current.idx] !== current.val) {\n this.checkedState[current.idx] = current.val;\n if (current.reason) {\n this.warningMsg = current.reason;\n }\n }\n visited.add(current.idx);\n\n const currentItem = choices[current.idx];\n\n if (current.val) {\n // Turning ON\n // 1. Check Conflicts (Disable items that THIS item conflicts with)\n if (currentItem.conflictsWith) {\n currentItem.conflictsWith.forEach(conflictVal => {\n const conflictIdx = choices.findIndex(c => c.value === conflictVal);\n if (conflictIdx !== -1 && this.checkedState[conflictIdx]) {\n queue.push({\n idx: conflictIdx,\n val: false,\n reason: `Disabled ${choices[conflictIdx].title} due to conflict with ${currentItem.title}`\n });\n }\n });\n }\n\n // [FIX] 1.5. Reverse Conflict Check (Disable items that conflict with THIS item)\n // Check if any currently SELECTED item has a conflict with the item we are enabling\n choices.forEach((other, otherIdx) => {\n // Skip self and unchecked items\n if (otherIdx === current.idx || !this.checkedState[otherIdx]) return;\n\n if (other.conflictsWith && other.conflictsWith.includes(currentItem.value)) {\n queue.push({\n idx: otherIdx,\n val: false,\n reason: `Disabled ${other.title} because it conflicts with ${currentItem.title}`\n });\n }\n });\n // 2. Check Dependencies (Enable them)\n if (currentItem.dependsOn) {\n currentItem.dependsOn.forEach(depVal => {\n const depIdx = choices.findIndex(c => c.value === depVal);\n if (depIdx !== -1 && !this.checkedState[depIdx]) {\n queue.push({\n idx: depIdx,\n val: true,\n reason: `Enabled ${choices[depIdx].title} because ${currentItem.title} requires it`\n });\n }\n });\n }\n // 3. Check Triggers (Enable them)\n if (currentItem.triggers) {\n currentItem.triggers.forEach(trigVal => {\n const trigIdx = choices.findIndex(c => c.value === trigVal);\n if (trigIdx !== -1 && !this.checkedState[trigIdx]) {\n queue.push({\n idx: trigIdx,\n val: true,\n reason: `Triggered ${choices[trigIdx].title} from ${currentItem.title}`\n });\n }\n });\n }\n } else {\n // Turning OFF\n // Check if other ON items depend on this one. If so, disable them.\n choices.forEach((other, otherIdx) => {\n if (this.checkedState[otherIdx] && other.dependsOn && other.dependsOn.includes(currentItem.value)) {\n queue.push({\n idx: otherIdx,\n val: false,\n reason: `Disabled ${other.title} because it depends on ${currentItem.title}`\n });\n }\n });\n }\n }\n }\n\n protected render(_firstRender: boolean) {\n // Adjust Scroll Top\n if (this.selectedIndex < this.scrollTop) {\n this.scrollTop = this.selectedIndex;\n } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.selectedIndex - this.pageSize + 1;\n }\n\n if (this.options.choices.length <= this.pageSize) {\n this.scrollTop = 0;\n }\n\n let output = '';\n\n // Header\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(Space: toggle, Enter: submit)${ANSI.RESET}`;\n\n // List\n const choices = this.options.choices;\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n output += '\\n'; // New line for each item\n\n const cursor = actualIndex === this.selectedIndex ? `${theme.main}${symbols.pointer}${ANSI.RESET}` : ' ';\n const isChecked = this.checkedState[actualIndex];\n const checkbox = isChecked\n ? `${theme.success}${symbols.checked}${ANSI.RESET}`\n : `${theme.muted}${symbols.unchecked}${ANSI.RESET}`;\n\n let title = actualIndex === this.selectedIndex\n ? `${theme.main}${choice.title}${ANSI.RESET}`\n : choice.title;\n\n // Add tags for relationships\n if (choice.dependsOn && choice.dependsOn.length > 0) {\n title += ` ${theme.muted}[Req: ${choice.dependsOn.length}]${ANSI.RESET}`;\n }\n if (choice.conflictsWith && choice.conflictsWith.length > 0) {\n title += ` ${theme.error}[Con: ${choice.conflictsWith.length}]${ANSI.RESET}`;\n }\n\n output += `${cursor} ${checkbox} ${title}`;\n });\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n } else if (this.warningMsg) {\n output += `\\n${theme.main}>> ${this.warningMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.render(false);\n }\n }\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n // Final Validation\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { min = 0, max } = this.options;\n\n if (selectedCount < min) {\n this.errorMsg = `You must select at least ${min} options.`;\n this.render(false);\n return;\n }\n if (max && selectedCount > max) {\n this.errorMsg = `You can only select up to ${max} options.`;\n this.render(false);\n return;\n }\n\n // Dependency Logic Check (if autoResolve was off, or double check)\n // Even if autoResolve is on, we check for cycles or invalid states that might have slipped? \n // Or just check if manual toggle left things broken (if autoResolve is OFF).\n if (this.options.autoResolve === false) {\n const invalid = this.validateDependencies();\n if (invalid) {\n this.errorMsg = invalid;\n this.render(false);\n return;\n }\n }\n\n this.cleanup();\n\n const results = this.options.choices\n .filter((_, i) => this.checkedState[i])\n .map(c => c.value);\n\n this.submit(results);\n return;\n }\n\n // Space Toggle\n if (char === ' ') {\n const currentChecked = this.checkedState[this.selectedIndex];\n // Toggle\n const newState = !currentChecked;\n\n // Check Max limit before enabling\n if (newState) {\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { max } = this.options;\n if (max && selectedCount >= max) {\n this.errorMsg = `Max ${max} selections allowed.`;\n this.render(false);\n return;\n }\n }\n\n this.errorMsg = '';\n this.warningMsg = '';\n\n if (this.options.autoResolve !== false) {\n this.resolveDependencies(this.selectedIndex, newState);\n } else {\n this.checkedState[this.selectedIndex] = newState;\n }\n\n this.render(false);\n }\n\n if (this.isUp(char)) { // Up\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;\n this.render(false);\n }\n if (this.isDown(char)) { // Down\n this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.render(false);\n }\n }\n\n private validateDependencies(): string | null {\n const choices = this.options.choices;\n for (let i = 0; i < choices.length; i++) {\n if (!this.checkedState[i]) continue;\n\n const item = choices[i];\n\n // Check dependencies\n if (item.dependsOn) {\n for (const depVal of item.dependsOn) {\n const depIdx = choices.findIndex(c => c.value === depVal);\n if (depIdx === -1 || !this.checkedState[depIdx]) {\n return `${item.title} requires ${depVal}`; // Should look up title for depVal ideally\n }\n }\n }\n\n // Check conflicts\n if (item.conflictsWith) {\n for (const conVal of item.conflictsWith) {\n const conIdx = choices.findIndex(c => c.value === conVal);\n if (conIdx !== -1 && this.checkedState[conIdx]) {\n return `${item.title} conflicts with ${choices[conIdx].title}`;\n }\n }\n }\n }\n return null;\n }\n}\n"],"names":["DependencyPrompt","Prompt","resolveDependencies","index","value","options","autoResolve","choices","visited","Set","queue","push","idx","val","loops","length","current","shift","has","checkedState","reason","warningMsg","add","currentItem","conflictsWith","forEach","conflictVal","conflictIdx","findIndex","c","title","other","otherIdx","includes","dependsOn","depVal","depIdx","triggers","trigVal","trigIdx","render","_firstRender","selectedIndex","scrollTop","pageSize","output","icon","errorMsg","theme","error","symbols","cross","success","ANSI","BOLD","message","RESET","muted","visibleChoices","slice","choice","actualIndex","cursor","main","pointer","isChecked","checkbox","checked","unchecked","renderFrame","handleMouse","event","action","scroll","handleInput","char","selectedCount","filter","Boolean","min","max","invalid","validateDependencies","cleanup","results","_","i","map","submit","currentChecked","newState","isUp","isDown","item","conVal","conIdx","selected"],"mappings":"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"}
@@ -1,23 +1,34 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DialPrompt = void 0;
4
- const base_1 = require("../base");
5
- const theme_1 = require("../theme");
6
- const ansi_1 = require("../ansi");
7
- class DialPrompt extends base_1.Prompt {
8
- constructor(options) {
9
- super(options);
10
- this.currentValue = options.initial !== undefined ? options.initial : options.min;
11
- // Clamp initial
12
- if (this.currentValue < this.options.min)
13
- this.currentValue = this.options.min;
14
- if (this.currentValue > this.options.max)
15
- this.currentValue = this.options.max;
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "DialPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return DialPrompt;
9
+ }
10
+ });
11
+ const _base = require("../base");
12
+ const _theme = require("../theme");
13
+ const _ansi = require("../ansi");
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;
16
24
  }
25
+ return obj;
26
+ }
27
+ let DialPrompt = class DialPrompt extends _base.Prompt {
17
28
  render(_firstRender) {
18
29
  // Round value for display if necessary
19
30
  const displayValue = Math.round(this.currentValue * 100) / 100;
20
- let output = `${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} ${theme_1.theme.main}${displayValue}${ansi_1.ANSI.RESET}\n`;
31
+ let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.main}${displayValue}${_ansi.ANSI.RESET}\n`;
21
32
  const radius = this.options.radius || 5;
22
33
  // Adjust aspect ratio: terminal chars are ~2x taller than wide.
23
34
  // So we multiply X by 2.
@@ -27,9 +38,9 @@ class DialPrompt extends base_1.Prompt {
27
38
  const height = centerY * 2 + 1;
28
39
  // Initialize grid
29
40
  const grid = [];
30
- for (let y = 0; y < height; y++) {
41
+ for(let y = 0; y < height; y++){
31
42
  const row = [];
32
- for (let x = 0; x < width; x++) {
43
+ for(let x = 0; x < width; x++){
33
44
  row.push(' ');
34
45
  }
35
46
  grid.push(row);
@@ -37,24 +48,24 @@ class DialPrompt extends base_1.Prompt {
37
48
  // Draw track (static circle arc)
38
49
  // Knob usually goes from Bottom-Left (135 deg) to Bottom-Right (405 deg)
39
50
  // 0 deg is Right. 90 deg is Down.
40
- for (let a = 135; a <= 405; a += 10) {
51
+ for(let a = 135; a <= 405; a += 10){
41
52
  const rad = a * Math.PI / 180;
42
53
  const rX = Math.round(centerX + radius * Math.cos(rad) * 2);
43
54
  const rY = Math.round(centerY + radius * Math.sin(rad));
44
55
  if (rY >= 0 && rY < height && rX >= 0 && rX < width) {
45
- grid[rY][rX] = `${ansi_1.ANSI.FG_GRAY}·${ansi_1.ANSI.RESET}`;
56
+ grid[rY][rX] = `${_ansi.ANSI.FG_GRAY}·${_ansi.ANSI.RESET}`;
46
57
  }
47
58
  }
48
59
  // Calculate Pointer Position
49
60
  const totalRange = this.options.max - this.options.min;
50
61
  // Avoid division by zero
51
62
  const percent = totalRange === 0 ? 0 : (this.currentValue - this.options.min) / totalRange;
52
- const angleDeg = 135 + (percent * 270);
63
+ const angleDeg = 135 + percent * 270;
53
64
  const rad = angleDeg * Math.PI / 180;
54
65
  const ptrX = Math.round(centerX + radius * Math.cos(rad) * 2);
55
66
  const ptrY = Math.round(centerY + radius * Math.sin(rad));
56
67
  if (ptrY >= 0 && ptrY < height && ptrX >= 0 && ptrX < width) {
57
- grid[ptrY][ptrX] = `${theme_1.theme.main}${this.options.pointerSymbol || '●'}${ansi_1.ANSI.RESET}`;
68
+ grid[ptrY][ptrX] = `${_theme.theme.main}${this.options.pointerSymbol || '●'}${_ansi.ANSI.RESET}`;
58
69
  }
59
70
  // Draw Center Value (Optional - roughly centered)
60
71
  // const valStr = displayValue.toString();
@@ -66,22 +77,20 @@ class DialPrompt extends base_1.Prompt {
66
77
  // }
67
78
  // }
68
79
  // Construct string
69
- for (let y = 0; y < height; y++) {
80
+ for(let y = 0; y < height; y++){
70
81
  output += ' ' + grid[y].join('') + '\n';
71
82
  }
72
83
  // Instructions
73
- output += `\n${ansi_1.ANSI.FG_GRAY}(Arrows/Scroll to adjust, Enter to submit)${ansi_1.ANSI.RESET}`;
84
+ output += `\n${_ansi.ANSI.FG_GRAY}(Arrows/Scroll to adjust, Enter to submit)${_ansi.ANSI.RESET}`;
74
85
  this.renderFrame(output);
75
86
  }
76
87
  handleInput(char, _key) {
77
88
  const step = this.options.step || 1;
78
89
  if (this.isLeft(char) || this.isDown(char)) {
79
90
  this.updateValue(this.currentValue - step);
80
- }
81
- else if (this.isRight(char) || this.isUp(char)) {
91
+ } else if (this.isRight(char) || this.isUp(char)) {
82
92
  this.updateValue(this.currentValue + step);
83
- }
84
- else if (char === '\r' || char === '\n') {
93
+ } else if (char === '\r' || char === '\n') {
85
94
  this.submit(this.currentValue);
86
95
  }
87
96
  }
@@ -90,21 +99,26 @@ class DialPrompt extends base_1.Prompt {
90
99
  if (event.action === 'scroll') {
91
100
  if (event.scroll === 'up') {
92
101
  this.updateValue(this.currentValue + step);
93
- }
94
- else {
102
+ } else {
95
103
  this.updateValue(this.currentValue - step);
96
104
  }
97
105
  }
98
106
  }
99
107
  updateValue(val) {
100
- if (val < this.options.min)
101
- val = this.options.min;
102
- if (val > this.options.max)
103
- val = this.options.max;
108
+ if (val < this.options.min) val = this.options.min;
109
+ if (val > this.options.max) val = this.options.max;
104
110
  if (this.currentValue !== val) {
105
111
  this.currentValue = val;
106
112
  this.render(false);
107
113
  }
108
114
  }
109
- }
110
- exports.DialPrompt = DialPrompt;
115
+ constructor(options){
116
+ super(options), _define_property(this, "currentValue", void 0);
117
+ this.currentValue = options.initial !== undefined ? options.initial : options.min;
118
+ // Clamp initial
119
+ if (this.currentValue < this.options.min) this.currentValue = this.options.min;
120
+ if (this.currentValue > this.options.max) this.currentValue = this.options.max;
121
+ }
122
+ };
123
+
124
+ //# sourceMappingURL=dial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/dial.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { DialOptions, MouseEvent } from '../types';\nimport { theme } from '../theme';\nimport { ANSI } from '../ansi';\n\nexport class DialPrompt extends Prompt<number, DialOptions> {\n private currentValue: number;\n\n constructor(options: DialOptions) {\n super(options);\n this.currentValue = options.initial !== undefined ? options.initial : options.min;\n // Clamp initial\n if (this.currentValue < this.options.min) this.currentValue = this.options.min;\n if (this.currentValue > this.options.max) this.currentValue = this.options.max;\n }\n\n protected render(_firstRender: boolean) {\n // Round value for display if necessary\n const displayValue = Math.round(this.currentValue * 100) / 100;\n let output = `${theme.title}${this.options.message}${ANSI.RESET} ${theme.main}${displayValue}${ANSI.RESET}\\n`;\n\n const radius = this.options.radius || 5;\n // Adjust aspect ratio: terminal chars are ~2x taller than wide.\n // So we multiply X by 2.\n const centerX = radius * 2;\n const centerY = radius;\n const width = centerX * 2 + 1;\n const height = centerY * 2 + 1;\n\n // Initialize grid\n const grid: string[][] = [];\n for (let y = 0; y < height; y++) {\n const row: string[] = [];\n for (let x = 0; x < width; x++) {\n row.push(' ');\n }\n grid.push(row);\n }\n\n // Draw track (static circle arc)\n // Knob usually goes from Bottom-Left (135 deg) to Bottom-Right (405 deg)\n // 0 deg is Right. 90 deg is Down.\n for (let a = 135; a <= 405; a += 10) {\n const rad = a * Math.PI / 180;\n const rX = Math.round(centerX + radius * Math.cos(rad) * 2);\n const rY = Math.round(centerY + radius * Math.sin(rad));\n if (rY >= 0 && rY < height && rX >= 0 && rX < width) {\n grid[rY][rX] = `${ANSI.FG_GRAY}·${ANSI.RESET}`;\n }\n }\n\n // Calculate Pointer Position\n const totalRange = this.options.max - this.options.min;\n // Avoid division by zero\n const percent = totalRange === 0 ? 0 : (this.currentValue - this.options.min) / totalRange;\n const angleDeg = 135 + (percent * 270);\n const rad = angleDeg * Math.PI / 180;\n\n const ptrX = Math.round(centerX + radius * Math.cos(rad) * 2);\n const ptrY = Math.round(centerY + radius * Math.sin(rad));\n\n if (ptrY >= 0 && ptrY < height && ptrX >= 0 && ptrX < width) {\n grid[ptrY][ptrX] = `${theme.main}${this.options.pointerSymbol || '●'}${ANSI.RESET}`;\n }\n\n // Draw Center Value (Optional - roughly centered)\n // const valStr = displayValue.toString();\n // const valX = centerX - Math.floor(valStr.length / 2);\n // const valY = centerY;\n // if (valY >= 0 && valY < height && valX >= 0 && valX + valStr.length <= width) {\n // for (let i = 0; i < valStr.length; i++) {\n // // grid[valY][valX + i] = valStr[i];\n // }\n // }\n\n // Construct string\n for (let y = 0; y < height; y++) {\n output += ' ' + grid[y].join('') + '\\n';\n }\n\n // Instructions\n output += `\\n${ANSI.FG_GRAY}(Arrows/Scroll to adjust, Enter to submit)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n const step = this.options.step || 1;\n\n if (this.isLeft(char) || this.isDown(char)) {\n this.updateValue(this.currentValue - step);\n } else if (this.isRight(char) || this.isUp(char)) {\n this.updateValue(this.currentValue + step);\n } else if (char === '\\r' || char === '\\n') {\n this.submit(this.currentValue);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n const step = this.options.step || 1;\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.updateValue(this.currentValue + step);\n } else {\n this.updateValue(this.currentValue - step);\n }\n }\n }\n\n private updateValue(val: number) {\n if (val < this.options.min) val = this.options.min;\n if (val > this.options.max) val = this.options.max;\n\n if (this.currentValue !== val) {\n this.currentValue = val;\n this.render(false);\n }\n }\n}\n"],"names":["DialPrompt","Prompt","render","_firstRender","displayValue","Math","round","currentValue","output","theme","title","options","message","ANSI","RESET","main","radius","centerX","centerY","width","height","grid","y","row","x","push","a","rad","PI","rX","cos","rY","sin","FG_GRAY","totalRange","max","min","percent","angleDeg","ptrX","ptrY","pointerSymbol","join","renderFrame","handleInput","char","_key","step","isLeft","isDown","updateValue","isRight","isUp","submit","handleMouse","event","action","scroll","val","initial","undefined"],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "DiffPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return DiffPrompt;
9
+ }
10
+ });
11
+ const _base = require("../base");
12
+ const _theme = require("../theme");
13
+ const _ansi = require("../ansi");
14
+ const _editor = require("./editor");
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;
25
+ }
26
+ return obj;
27
+ }
28
+ let DiffPrompt = class DiffPrompt extends _base.Prompt {
29
+ render(_firstRender) {
30
+ let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
31
+ // Render Diff
32
+ const originalLines = this.options.original ? this.options.original.split('\n') : [];
33
+ const modifiedLines = this.options.modified ? this.options.modified.split('\n') : [];
34
+ const width = Math.max(40, (this.stdout.columns || 80) - 4);
35
+ const borderTop = `${_ansi.ANSI.FG_GRAY}┌${'─'.repeat(width)}┐${_ansi.ANSI.RESET}`;
36
+ const borderMid = `${_ansi.ANSI.FG_GRAY}├${'─'.repeat(width)}┤${_ansi.ANSI.RESET}`;
37
+ const borderBot = `${_ansi.ANSI.FG_GRAY}└${'─'.repeat(width)}┘${_ansi.ANSI.RESET}`;
38
+ output += borderTop + '\n';
39
+ // Original (Red)
40
+ if (originalLines.length === 0) {
41
+ output += `${_ansi.ANSI.FG_GRAY}│ ${_ansi.ANSI.DIM}(empty)${_ansi.ANSI.RESET}\n`;
42
+ } else {
43
+ originalLines.forEach((line)=>{
44
+ const truncated = this.truncate(line, width - 4);
45
+ output += `${_ansi.ANSI.FG_GRAY}│ ${_ansi.ANSI.FG_RED}- ${truncated}${_ansi.ANSI.RESET}\n`;
46
+ });
47
+ }
48
+ output += borderMid + '\n';
49
+ // Modified (Green)
50
+ if (modifiedLines.length === 0) {
51
+ output += `${_ansi.ANSI.FG_GRAY}│ ${_ansi.ANSI.DIM}(empty)${_ansi.ANSI.RESET}\n`;
52
+ } else {
53
+ modifiedLines.forEach((line)=>{
54
+ const truncated = this.truncate(line, width - 4);
55
+ output += `${_ansi.ANSI.FG_GRAY}│ ${_ansi.ANSI.FG_GREEN}+ ${truncated}${_ansi.ANSI.RESET}\n`;
56
+ });
57
+ }
58
+ output += borderBot + '\n';
59
+ // Render Actions
60
+ output += '\n';
61
+ this.actions.forEach((action, index)=>{
62
+ if (index === this.activeAction) {
63
+ output += `${_ansi.ANSI.REVERSE} ${action} ${_ansi.ANSI.RESET} `;
64
+ } else {
65
+ output += `[ ${action} ] `;
66
+ }
67
+ });
68
+ this.renderFrame(output);
69
+ }
70
+ handleInput(char, _key) {
71
+ if (this.isLeft(char)) {
72
+ this.activeAction = (this.activeAction - 1 + this.actions.length) % this.actions.length;
73
+ this.render(false);
74
+ } else if (this.isRight(char)) {
75
+ this.activeAction = (this.activeAction + 1) % this.actions.length;
76
+ this.render(false);
77
+ } else if (char === '\r' || char === '\n') {
78
+ this.handleSubmit();
79
+ }
80
+ }
81
+ handleSubmit() {
82
+ if (this.activeAction === 0) {
83
+ this.submit(this.options.original);
84
+ } else if (this.activeAction === 1) {
85
+ this.submit(this.options.modified);
86
+ } else {
87
+ // Edit
88
+ this.cleanup(); // Stop listening to input for this prompt
89
+ // Prepare initial content for editor
90
+ const initial = `<<<<<<< ORIGINAL
91
+ ${this.options.original}
92
+ =======
93
+ ${this.options.modified}
94
+ >>>>>>> MODIFIED`;
95
+ // We delegate to EditorPrompt
96
+ new _editor.EditorPrompt({
97
+ message: 'Resolve conflict (Edit)',
98
+ initial: initial,
99
+ extension: '.txt',
100
+ waitUserInput: false // Launch immediately
101
+ }).run().then((result)=>{
102
+ this.submit(result);
103
+ }).catch((_err)=>{
104
+ this.submit(initial);
105
+ });
106
+ }
107
+ }
108
+ constructor(options){
109
+ super(options), _define_property(this, "activeAction", 0) // 0: Original, 1: Modified, 2: Edit
110
+ , _define_property(this, "actions", [
111
+ 'Use Original',
112
+ 'Use Modified',
113
+ 'Edit'
114
+ ]);
115
+ }
116
+ };
117
+
118
+ //# sourceMappingURL=diff.js.map