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.
- package/README.md +11 -2
- package/dist/{ansi.js → src/ansi.js} +17 -9
- package/dist/src/ansi.js.map +1 -0
- package/dist/{base.js → src/base.js} +82 -70
- package/dist/src/base.js.map +1 -0
- package/dist/{core.js → src/core.js} +266 -320
- package/dist/src/core.js.map +1 -0
- package/dist/src/data/countries.js +569 -0
- package/dist/src/data/countries.js.map +1 -0
- package/dist/src/data/licenses.js +480 -0
- package/dist/src/data/licenses.js.map +1 -0
- package/dist/{highlight.js → src/highlight.js} +77 -69
- package/dist/src/highlight.js.map +1 -0
- package/dist/src/index.js +66 -0
- package/dist/src/index.js.map +1 -0
- package/dist/{input.js → src/input.js} +47 -41
- package/dist/src/input.js.map +1 -0
- package/dist/src/pipeline.js +273 -0
- package/dist/src/pipeline.js.map +1 -0
- package/dist/{prompts → src/prompts}/autocomplete.js +58 -57
- package/dist/src/prompts/autocomplete.js.map +1 -0
- package/dist/{prompts → src/prompts}/box.js +86 -53
- package/dist/src/prompts/box.js.map +1 -0
- package/dist/{prompts → src/prompts}/breadcrumb-search.js +110 -98
- package/dist/src/prompts/breadcrumb-search.js.map +1 -0
- package/dist/{prompts → src/prompts}/breadcrumb.js +126 -121
- package/dist/src/prompts/breadcrumb.js.map +1 -0
- package/dist/{prompts → src/prompts}/byte.js +69 -52
- package/dist/src/prompts/byte.js.map +1 -0
- package/dist/{prompts → src/prompts}/calculator.js +79 -56
- package/dist/src/prompts/calculator.js.map +1 -0
- package/dist/{prompts → src/prompts}/calendar.js +167 -127
- package/dist/src/prompts/calendar.js.map +1 -0
- package/dist/{prompts → src/prompts}/checkbox.js +53 -49
- package/dist/src/prompts/checkbox.js.map +1 -0
- package/dist/{prompts → src/prompts}/code.js +88 -76
- package/dist/src/prompts/code.js.map +1 -0
- package/dist/{prompts → src/prompts}/color.js +68 -50
- package/dist/src/prompts/color.js.map +1 -0
- package/dist/{prompts → src/prompts}/confirm.js +22 -15
- package/dist/src/prompts/confirm.js.map +1 -0
- package/dist/{prompts → src/prompts}/connection-string.js +59 -36
- package/dist/src/prompts/connection-string.js.map +1 -0
- package/dist/{prompts → src/prompts}/cron.js +90 -59
- package/dist/src/prompts/cron.js.map +1 -0
- package/dist/src/prompts/curl-utils.js +71 -0
- package/dist/src/prompts/curl-utils.js.map +1 -0
- package/dist/{prompts → src/prompts}/curl.js +153 -132
- package/dist/src/prompts/curl.js.map +1 -0
- package/dist/{prompts → src/prompts}/data-inspector.js +96 -91
- package/dist/src/prompts/data-inspector.js.map +1 -0
- package/dist/{prompts → src/prompts}/date.js +64 -57
- package/dist/src/prompts/date.js.map +1 -0
- package/dist/{prompts → src/prompts}/dependency.js +84 -80
- package/dist/src/prompts/dependency.js.map +1 -0
- package/dist/{prompts → src/prompts}/dial.js +49 -35
- package/dist/src/prompts/dial.js.map +1 -0
- package/dist/src/prompts/diff.js +118 -0
- package/dist/src/prompts/diff.js.map +1 -0
- package/dist/{prompts → src/prompts}/draw.js +83 -80
- package/dist/src/prompts/draw.js.map +1 -0
- package/dist/src/prompts/editor.js +234 -0
- package/dist/src/prompts/editor.js.map +1 -0
- package/dist/{prompts → src/prompts}/emoji.js +80 -82
- package/dist/src/prompts/emoji.js.map +1 -0
- package/dist/{prompts → src/prompts}/exec.js +60 -46
- package/dist/src/prompts/exec.js.map +1 -0
- package/dist/src/prompts/file.js +217 -0
- package/dist/src/prompts/file.js.map +1 -0
- package/dist/{prompts → src/prompts}/form.js +63 -54
- package/dist/src/prompts/form.js.map +1 -0
- package/dist/{prompts → src/prompts}/fuzzy-multi-column.js +65 -53
- package/dist/src/prompts/fuzzy-multi-column.js.map +1 -0
- package/dist/{prompts → src/prompts}/fuzzy.js +66 -55
- package/dist/src/prompts/fuzzy.js.map +1 -0
- package/dist/src/prompts/gauge.js +137 -0
- package/dist/src/prompts/gauge.js.map +1 -0
- package/dist/{prompts → src/prompts}/grid.js +70 -57
- package/dist/src/prompts/grid.js.map +1 -0
- package/dist/{prompts → src/prompts}/heatmap.js +70 -64
- package/dist/src/prompts/heatmap.js.map +1 -0
- package/dist/{prompts → src/prompts}/ip.js +56 -36
- package/dist/src/prompts/ip.js.map +1 -0
- package/dist/{prompts → src/prompts}/kanban.js +63 -58
- package/dist/src/prompts/kanban.js.map +1 -0
- package/dist/src/prompts/keypress.js +54 -0
- package/dist/src/prompts/keypress.js.map +1 -0
- package/dist/src/prompts/license.js +144 -0
- package/dist/src/prompts/license.js.map +1 -0
- package/dist/{prompts → src/prompts}/list.js +46 -31
- package/dist/src/prompts/list.js.map +1 -0
- package/dist/{prompts → src/prompts}/map.js +93 -77
- package/dist/src/prompts/map.js.map +1 -0
- package/dist/{prompts → src/prompts}/match.js +91 -95
- package/dist/src/prompts/match.js.map +1 -0
- package/dist/{prompts → src/prompts}/miller.js +74 -67
- package/dist/src/prompts/miller.js.map +1 -0
- package/dist/{prompts → src/prompts}/multi-column-select.js +54 -44
- package/dist/src/prompts/multi-column-select.js.map +1 -0
- package/dist/{prompts → src/prompts}/multi-range.js +70 -52
- package/dist/src/prompts/multi-range.js.map +1 -0
- package/dist/{prompts → src/prompts}/multi-select.js +67 -58
- package/dist/src/prompts/multi-select.js.map +1 -0
- package/dist/{prompts → src/prompts}/number.js +51 -39
- package/dist/src/prompts/number.js.map +1 -0
- package/dist/{prompts → src/prompts}/otp.js +43 -27
- package/dist/src/prompts/otp.js.map +1 -0
- package/dist/{prompts → src/prompts}/pattern.js +74 -71
- package/dist/src/prompts/pattern.js.map +1 -0
- package/dist/{prompts → src/prompts}/phone.js +107 -118
- package/dist/src/prompts/phone.js.map +1 -0
- package/dist/src/prompts/quiz-select.js +114 -0
- package/dist/src/prompts/quiz-select.js.map +1 -0
- package/dist/src/prompts/quiz-text.js +98 -0
- package/dist/src/prompts/quiz-text.js.map +1 -0
- package/dist/{prompts → src/prompts}/range.js +85 -61
- package/dist/src/prompts/range.js.map +1 -0
- package/dist/{prompts → src/prompts}/rating.js +29 -24
- package/dist/src/prompts/rating.js.map +1 -0
- package/dist/{prompts → src/prompts}/regex.js +50 -36
- package/dist/src/prompts/regex.js.map +1 -0
- package/dist/{prompts → src/prompts}/region.js +62 -56
- package/dist/src/prompts/region.js.map +1 -0
- package/dist/{prompts → src/prompts}/schedule.js +82 -75
- package/dist/src/prompts/schedule.js.map +1 -0
- package/dist/{prompts → src/prompts}/scroll.js +61 -58
- package/dist/src/prompts/scroll.js.map +1 -0
- package/dist/src/prompts/seat.js +164 -0
- package/dist/src/prompts/seat.js.map +1 -0
- package/dist/{prompts → src/prompts}/select-range.js +58 -46
- package/dist/src/prompts/select-range.js.map +1 -0
- package/dist/{prompts → src/prompts}/select.js +65 -66
- package/dist/src/prompts/select.js.map +1 -0
- package/dist/{prompts → src/prompts}/semver.js +24 -13
- package/dist/src/prompts/semver.js.map +1 -0
- package/dist/src/prompts/shortcut.js +133 -0
- package/dist/src/prompts/shortcut.js.map +1 -0
- package/dist/{prompts → src/prompts}/slider.js +28 -23
- package/dist/src/prompts/slider.js.map +1 -0
- package/dist/src/prompts/slot.js +117 -0
- package/dist/src/prompts/slot.js.map +1 -0
- package/dist/{prompts → src/prompts}/snippet.js +82 -61
- package/dist/src/prompts/snippet.js.map +1 -0
- package/dist/{prompts → src/prompts}/sort-grid.js +64 -59
- package/dist/src/prompts/sort-grid.js.map +1 -0
- package/dist/{prompts → src/prompts}/sort.js +59 -49
- package/dist/src/prompts/sort.js.map +1 -0
- package/dist/src/prompts/spam.js +80 -0
- package/dist/src/prompts/spam.js.map +1 -0
- package/dist/{prompts → src/prompts}/spreadsheet.js +71 -70
- package/dist/src/prompts/spreadsheet.js.map +1 -0
- package/dist/{prompts → src/prompts}/table.js +52 -38
- package/dist/src/prompts/table.js.map +1 -0
- package/dist/{prompts → src/prompts}/text.js +74 -70
- package/dist/src/prompts/text.js.map +1 -0
- package/dist/{prompts → src/prompts}/time.js +105 -96
- package/dist/src/prompts/time.js.map +1 -0
- package/dist/src/prompts/toggle.js +53 -0
- package/dist/src/prompts/toggle.js.map +1 -0
- package/dist/{prompts → src/prompts}/transfer.js +71 -67
- package/dist/src/prompts/transfer.js.map +1 -0
- package/dist/{prompts → src/prompts}/tree-select.js +83 -86
- package/dist/src/prompts/tree-select.js.map +1 -0
- package/dist/{prompts → src/prompts}/tree.js +69 -67
- package/dist/src/prompts/tree.js.map +1 -0
- package/dist/src/prompts/wait.js +79 -0
- package/dist/src/prompts/wait.js.map +1 -0
- package/dist/src/spinner.js +105 -0
- package/dist/src/spinner.js.map +1 -0
- package/dist/{symbols.js → src/symbols.js} +32 -7
- package/dist/src/symbols.js.map +1 -0
- package/dist/{tasks.js → src/tasks.js} +104 -79
- package/dist/src/tasks.js.map +1 -0
- package/dist/src/theme.js +29 -0
- package/dist/src/theme.js.map +1 -0
- package/dist/src/types.js +8 -0
- package/dist/src/types.js.map +1 -0
- package/dist/{utils.js → src/utils.js} +196 -152
- package/dist/src/utils.js.map +1 -0
- package/package.json +16 -13
- package/dist/ansi.d.ts +0 -36
- package/dist/base.d.ts +0 -60
- package/dist/core.d.ts +0 -1072
- package/dist/data/countries.d.ts +0 -2
- package/dist/data/countries.js +0 -105
- package/dist/data/licenses.d.ts +0 -2
- package/dist/data/licenses.js +0 -109
- package/dist/highlight.d.ts +0 -7
- package/dist/index.d.ts +0 -48
- package/dist/index.js +0 -64
- package/dist/input.d.ts +0 -14
- package/dist/pipeline.d.ts +0 -39
- package/dist/pipeline.js +0 -54
- package/dist/prompts/autocomplete.d.ts +0 -22
- package/dist/prompts/box.d.ts +0 -21
- package/dist/prompts/breadcrumb-search.d.ts +0 -14
- package/dist/prompts/breadcrumb.d.ts +0 -32
- package/dist/prompts/byte.d.ts +0 -13
- package/dist/prompts/calculator.d.ts +0 -17
- package/dist/prompts/calendar.d.ts +0 -33
- package/dist/prompts/checkbox.d.ts +0 -13
- package/dist/prompts/code.d.ts +0 -19
- package/dist/prompts/color.d.ts +0 -14
- package/dist/prompts/confirm.d.ts +0 -8
- package/dist/prompts/connection-string.d.ts +0 -18
- package/dist/prompts/cron.d.ts +0 -13
- package/dist/prompts/curl-utils.d.ts +0 -25
- package/dist/prompts/curl-utils.js +0 -41
- package/dist/prompts/curl.d.ts +0 -41
- package/dist/prompts/data-inspector.d.ts +0 -22
- package/dist/prompts/date.d.ts +0 -12
- package/dist/prompts/dependency.d.ts +0 -16
- package/dist/prompts/dial.d.ts +0 -10
- package/dist/prompts/diff.d.ts +0 -10
- package/dist/prompts/diff.js +0 -101
- package/dist/prompts/draw.d.ts +0 -20
- package/dist/prompts/editor.d.ts +0 -14
- package/dist/prompts/editor.js +0 -203
- package/dist/prompts/emoji.d.ts +0 -18
- package/dist/prompts/exec.d.ts +0 -17
- package/dist/prompts/file.d.ts +0 -21
- package/dist/prompts/file.js +0 -210
- package/dist/prompts/form.d.ts +0 -18
- package/dist/prompts/fuzzy-multi-column.d.ts +0 -12
- package/dist/prompts/fuzzy.d.ts +0 -12
- package/dist/prompts/gauge.d.ts +0 -21
- package/dist/prompts/gauge.js +0 -130
- package/dist/prompts/grid.d.ts +0 -14
- package/dist/prompts/heatmap.d.ts +0 -13
- package/dist/prompts/ip.d.ts +0 -11
- package/dist/prompts/kanban.d.ts +0 -17
- package/dist/prompts/keypress.d.ts +0 -7
- package/dist/prompts/keypress.js +0 -55
- package/dist/prompts/license.d.ts +0 -9
- package/dist/prompts/license.js +0 -105
- package/dist/prompts/list.d.ts +0 -9
- package/dist/prompts/map.d.ts +0 -17
- package/dist/prompts/match.d.ts +0 -19
- package/dist/prompts/miller.d.ts +0 -15
- package/dist/prompts/multi-column-select.d.ts +0 -10
- package/dist/prompts/multi-range.d.ts +0 -9
- package/dist/prompts/multi-select.d.ts +0 -15
- package/dist/prompts/number.d.ts +0 -11
- package/dist/prompts/otp.d.ts +0 -10
- package/dist/prompts/pattern.d.ts +0 -22
- package/dist/prompts/phone.d.ts +0 -41
- package/dist/prompts/quiz-select.d.ts +0 -10
- package/dist/prompts/quiz-select.js +0 -104
- package/dist/prompts/quiz-text.d.ts +0 -11
- package/dist/prompts/quiz-text.js +0 -82
- package/dist/prompts/range.d.ts +0 -9
- package/dist/prompts/rating.d.ts +0 -8
- package/dist/prompts/regex.d.ts +0 -13
- package/dist/prompts/region.d.ts +0 -11
- package/dist/prompts/schedule.d.ts +0 -20
- package/dist/prompts/scroll.d.ts +0 -13
- package/dist/prompts/seat.d.ts +0 -17
- package/dist/prompts/seat.js +0 -165
- package/dist/prompts/select-range.d.ts +0 -8
- package/dist/prompts/select.d.ts +0 -15
- package/dist/prompts/semver.d.ts +0 -6
- package/dist/prompts/shortcut.d.ts +0 -9
- package/dist/prompts/shortcut.js +0 -135
- package/dist/prompts/slider.d.ts +0 -8
- package/dist/prompts/slot.d.ts +0 -16
- package/dist/prompts/slot.js +0 -107
- package/dist/prompts/snippet.d.ts +0 -19
- package/dist/prompts/sort-grid.d.ts +0 -16
- package/dist/prompts/sort.d.ts +0 -14
- package/dist/prompts/spam.d.ts +0 -17
- package/dist/prompts/spam.js +0 -62
- package/dist/prompts/spreadsheet.d.ts +0 -21
- package/dist/prompts/table.d.ts +0 -14
- package/dist/prompts/text.d.ts +0 -17
- package/dist/prompts/time.d.ts +0 -12
- package/dist/prompts/toggle.d.ts +0 -8
- package/dist/prompts/toggle.js +0 -47
- package/dist/prompts/transfer.d.ts +0 -18
- package/dist/prompts/tree-select.d.ts +0 -31
- package/dist/prompts/tree.d.ts +0 -20
- package/dist/prompts/wait.d.ts +0 -18
- package/dist/prompts/wait.js +0 -62
- package/dist/spinner.d.ts +0 -33
- package/dist/spinner.js +0 -89
- package/dist/symbols.d.ts +0 -33
- package/dist/tasks.d.ts +0 -57
- package/dist/theme.d.ts +0 -2
- package/dist/theme.js +0 -20
- package/dist/types.d.ts +0 -503
- package/dist/types.js +0 -5
- package/dist/utils.d.ts +0 -81
|
@@ -1,47 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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({
|
|
36
|
+
queue.push({
|
|
37
|
+
idx: index,
|
|
38
|
+
val: value
|
|
39
|
+
});
|
|
38
40
|
// Process queue
|
|
39
41
|
let loops = 0;
|
|
40
|
-
while
|
|
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
|
|
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
|
|
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
|
|
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 ? `${
|
|
140
|
-
output += `${icon} ${
|
|
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 ? `${
|
|
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
|
-
|
|
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 += ` ${
|
|
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 += ` ${
|
|
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${
|
|
166
|
-
}
|
|
167
|
-
|
|
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)) {
|
|
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)) {
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 = `${
|
|
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
|
|
41
|
+
for(let y = 0; y < height; y++){
|
|
31
42
|
const row = [];
|
|
32
|
-
for
|
|
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
|
|
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] = `${
|
|
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 +
|
|
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] = `${
|
|
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
|
|
80
|
+
for(let y = 0; y < height; y++){
|
|
70
81
|
output += ' ' + grid[y].join('') + '\n';
|
|
71
82
|
}
|
|
72
83
|
// Instructions
|
|
73
|
-
output += `\n${
|
|
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
|
-
|
|
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
|
-
|
|
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
|