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,27 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class CheckboxPrompt extends base_1.Prompt {
|
|
10
|
-
constructor(options) {
|
|
11
|
-
super(options);
|
|
12
|
-
this.selectedIndex = 0;
|
|
13
|
-
this.errorMsg = '';
|
|
14
|
-
// Pagination state
|
|
15
|
-
this.scrollTop = 0;
|
|
16
|
-
this.pageSize = 10;
|
|
17
|
-
this.checkedState = options.choices.map(c => !!c.selected);
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "CheckboxPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return CheckboxPrompt;
|
|
18
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;
|
|
25
|
+
}
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
let CheckboxPrompt = class CheckboxPrompt extends _base.Prompt {
|
|
19
29
|
render(_firstRender) {
|
|
20
30
|
// Adjust Scroll Top
|
|
21
31
|
if (this.selectedIndex < this.scrollTop) {
|
|
22
32
|
this.scrollTop = this.selectedIndex;
|
|
23
|
-
}
|
|
24
|
-
else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
|
|
33
|
+
} else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
|
|
25
34
|
this.scrollTop = this.selectedIndex - this.pageSize + 1;
|
|
26
35
|
}
|
|
27
36
|
// Ensure we don't scroll past bounds if list is small
|
|
@@ -30,30 +39,26 @@ class CheckboxPrompt extends base_1.Prompt {
|
|
|
30
39
|
}
|
|
31
40
|
let output = '';
|
|
32
41
|
// Header
|
|
33
|
-
const icon = this.errorMsg ? `${
|
|
34
|
-
output += `${icon} ${
|
|
42
|
+
const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
|
|
43
|
+
output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(Space: toggle, a: all, x: none, Enter: submit)${_ansi.ANSI.RESET}`;
|
|
35
44
|
// List
|
|
36
45
|
const choices = this.options.choices;
|
|
37
46
|
const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
38
|
-
visibleChoices.forEach((choice, index)
|
|
47
|
+
visibleChoices.forEach((choice, index)=>{
|
|
39
48
|
const actualIndex = this.scrollTop + index;
|
|
40
49
|
output += '\n'; // New line for each item
|
|
41
|
-
const cursor = actualIndex === this.selectedIndex ? `${
|
|
50
|
+
const cursor = actualIndex === this.selectedIndex ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET}` : ' ';
|
|
42
51
|
const isChecked = this.checkedState[actualIndex];
|
|
43
|
-
const checkbox = isChecked
|
|
44
|
-
|
|
45
|
-
: `${theme_1.theme.muted}${symbols_1.symbols.unchecked}${ansi_1.ANSI.RESET}`;
|
|
46
|
-
const title = actualIndex === this.selectedIndex
|
|
47
|
-
? `${theme_1.theme.main}${choice.title}${ansi_1.ANSI.RESET}`
|
|
48
|
-
: choice.title;
|
|
52
|
+
const checkbox = isChecked ? `${_theme.theme.success}${_symbols.symbols.checked}${_ansi.ANSI.RESET}` : `${_theme.theme.muted}${_symbols.symbols.unchecked}${_ansi.ANSI.RESET}`;
|
|
53
|
+
const title = actualIndex === this.selectedIndex ? `${_theme.theme.main}${choice.title}${_ansi.ANSI.RESET}` : choice.title;
|
|
49
54
|
output += `${cursor} ${checkbox} ${title}`;
|
|
50
55
|
});
|
|
51
56
|
// Indication of more items
|
|
52
57
|
if (choices.length > this.pageSize) {
|
|
53
|
-
|
|
58
|
+
// const progress = ` ${this.scrollTop + 1}-${Math.min(this.scrollTop + this.pageSize, choices.length)} of ${choices.length}`;
|
|
54
59
|
}
|
|
55
60
|
if (this.errorMsg) {
|
|
56
|
-
output += `\n${
|
|
61
|
+
output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
|
|
57
62
|
}
|
|
58
63
|
this.renderFrame(output);
|
|
59
64
|
}
|
|
@@ -72,11 +77,8 @@ class CheckboxPrompt extends base_1.Prompt {
|
|
|
72
77
|
return;
|
|
73
78
|
}
|
|
74
79
|
this.cleanup();
|
|
75
|
-
const results = this.options.choices
|
|
76
|
-
|
|
77
|
-
.map(c => c.value);
|
|
78
|
-
if (this._resolve)
|
|
79
|
-
this._resolve(results);
|
|
80
|
+
const results = this.options.choices.filter((_, i)=>this.checkedState[i]).map((c)=>c.value);
|
|
81
|
+
if (this._resolve) this._resolve(results);
|
|
80
82
|
return;
|
|
81
83
|
}
|
|
82
84
|
// --- Batch Shortcuts ---
|
|
@@ -84,8 +86,7 @@ class CheckboxPrompt extends base_1.Prompt {
|
|
|
84
86
|
if (char === 'a') {
|
|
85
87
|
if (this.options.max && this.options.choices.length > this.options.max) {
|
|
86
88
|
this.errorMsg = `Cannot select all: Max limit is ${this.options.max}`;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
+
} else {
|
|
89
90
|
this.checkedState.fill(true);
|
|
90
91
|
this.errorMsg = '';
|
|
91
92
|
}
|
|
@@ -101,12 +102,11 @@ class CheckboxPrompt extends base_1.Prompt {
|
|
|
101
102
|
}
|
|
102
103
|
// 'i': Invert Selection
|
|
103
104
|
if (char === 'i') {
|
|
104
|
-
const potentialCount = this.checkedState.filter(s
|
|
105
|
+
const potentialCount = this.checkedState.filter((s)=>!s).length;
|
|
105
106
|
if (this.options.max && potentialCount > this.options.max) {
|
|
106
107
|
this.errorMsg = `Cannot invert: Result exceeds max limit ${this.options.max}`;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
this.checkedState = this.checkedState.map(s => !s);
|
|
108
|
+
} else {
|
|
109
|
+
this.checkedState = this.checkedState.map((s)=>!s);
|
|
110
110
|
this.errorMsg = '';
|
|
111
111
|
}
|
|
112
112
|
this.render(false);
|
|
@@ -119,19 +119,18 @@ class CheckboxPrompt extends base_1.Prompt {
|
|
|
119
119
|
const { max } = this.options;
|
|
120
120
|
if (!currentChecked && max && selectedCount >= max) {
|
|
121
121
|
this.errorMsg = `Max ${max} selections allowed.`;
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
122
|
+
} else {
|
|
124
123
|
this.checkedState[this.selectedIndex] = !currentChecked;
|
|
125
124
|
this.errorMsg = '';
|
|
126
125
|
}
|
|
127
126
|
this.render(false);
|
|
128
127
|
}
|
|
129
|
-
if (this.isUp(char)) {
|
|
128
|
+
if (this.isUp(char)) {
|
|
130
129
|
this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;
|
|
131
130
|
this.errorMsg = '';
|
|
132
131
|
this.render(false);
|
|
133
132
|
}
|
|
134
|
-
if (this.isDown(char)) {
|
|
133
|
+
if (this.isDown(char)) {
|
|
135
134
|
this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;
|
|
136
135
|
this.errorMsg = '';
|
|
137
136
|
this.render(false);
|
|
@@ -143,13 +142,18 @@ class CheckboxPrompt extends base_1.Prompt {
|
|
|
143
142
|
this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;
|
|
144
143
|
this.errorMsg = '';
|
|
145
144
|
this.render(false);
|
|
146
|
-
}
|
|
147
|
-
else if (event.scroll === 'down') {
|
|
145
|
+
} else if (event.scroll === 'down') {
|
|
148
146
|
this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;
|
|
149
147
|
this.errorMsg = '';
|
|
150
148
|
this.render(false);
|
|
151
149
|
}
|
|
152
150
|
}
|
|
153
151
|
}
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
constructor(options){
|
|
153
|
+
super(options), _define_property(this, "selectedIndex", 0), _define_property(this, "checkedState", void 0), _define_property(this, "errorMsg", ''), // Pagination state
|
|
154
|
+
_define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 10);
|
|
155
|
+
this.checkedState = options.choices.map((c)=>!!c.selected);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
//# sourceMappingURL=checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/checkbox.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { CheckboxOptions, MouseEvent } from '../types';\n\n// --- Implementation: Checkbox Prompt ---\nexport class CheckboxPrompt<V> extends Prompt<any[], CheckboxOptions<V>> {\n private selectedIndex: number = 0;\n private checkedState: boolean[];\n private errorMsg: string = '';\n // Pagination state\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n constructor(options: CheckboxOptions<V>) {\n super(options);\n this.checkedState = options.choices.map(c => !!c.selected);\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 // Ensure we don't scroll past bounds if list is small\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, a: all, x: none, 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 const title = actualIndex === this.selectedIndex\n ? `${theme.main}${choice.title}${ANSI.RESET}`\n : choice.title;\n\n output += `${cursor} ${checkbox} ${title}`;\n });\n\n // Indication of more items\n if (choices.length > this.pageSize) {\n // const progress = ` ${this.scrollTop + 1}-${Math.min(this.scrollTop + this.pageSize, choices.length)} of ${choices.length}`;\n }\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\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 this.cleanup();\n\n const results = this.options.choices\n .filter((_, i) => this.checkedState[i])\n .map(c => c.value);\n\n if ((this as any)._resolve) (this as any)._resolve(results);\n return;\n }\n\n // --- Batch Shortcuts ---\n\n // 'a': Select All\n if (char === 'a') {\n if (this.options.max && this.options.choices.length > this.options.max) {\n this.errorMsg = `Cannot select all: Max limit is ${this.options.max}`;\n } else {\n this.checkedState.fill(true);\n this.errorMsg = '';\n }\n this.render(false);\n return;\n }\n\n // 'x' or 'n': Select None\n if (char === 'x' || char === 'n') {\n this.checkedState.fill(false);\n this.errorMsg = '';\n this.render(false);\n return;\n }\n\n // 'i': Invert Selection\n if (char === 'i') {\n const potentialCount = this.checkedState.filter(s => !s).length;\n if (this.options.max && potentialCount > this.options.max) {\n this.errorMsg = `Cannot invert: Result exceeds max limit ${this.options.max}`;\n } else {\n this.checkedState = this.checkedState.map(s => !s);\n this.errorMsg = '';\n }\n this.render(false);\n return;\n }\n\n // Space Toggle\n if (char === ' ') {\n const currentChecked = this.checkedState[this.selectedIndex];\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { max } = this.options;\n\n if (!currentChecked && max && selectedCount >= max) {\n this.errorMsg = `Max ${max} selections allowed.`;\n } else {\n this.checkedState[this.selectedIndex] = !currentChecked;\n this.errorMsg = '';\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.errorMsg = '';\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.errorMsg = '';\n this.render(false);\n }\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.errorMsg = '';\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.errorMsg = '';\n this.render(false);\n }\n }\n }\n}\n"],"names":["CheckboxPrompt","Prompt","render","_firstRender","selectedIndex","scrollTop","pageSize","options","choices","length","output","icon","errorMsg","theme","error","symbols","cross","success","ANSI","BOLD","title","message","RESET","muted","visibleChoices","slice","forEach","choice","index","actualIndex","cursor","main","pointer","isChecked","checkedState","checkbox","checked","unchecked","renderFrame","handleInput","char","selectedCount","filter","Boolean","min","max","cleanup","results","_","i","map","c","value","_resolve","fill","potentialCount","s","currentChecked","isUp","isDown","handleMouse","event","action","scroll","selected"],"mappings":"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"}
|
|
@@ -1,46 +1,55 @@
|
|
|
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
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "CodePrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return CodePrompt;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _ansi = require("../ansi");
|
|
12
|
+
const _base = require("../base");
|
|
13
|
+
const _theme = require("../theme");
|
|
14
|
+
const _utils = require("../utils");
|
|
15
|
+
const _highlight = require("../highlight");
|
|
16
|
+
function _define_property(obj, key, value) {
|
|
17
|
+
if (key in obj) {
|
|
18
|
+
Object.defineProperty(obj, key, {
|
|
19
|
+
value: value,
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true
|
|
23
23
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const activeName = this.tokens[this.variableTokens[0]].value;
|
|
27
|
-
this.cursor = this.values[activeName].length;
|
|
28
|
-
}
|
|
24
|
+
} else {
|
|
25
|
+
obj[key] = value;
|
|
29
26
|
}
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
let CodePrompt = class CodePrompt extends _base.Prompt {
|
|
30
30
|
parseTemplate() {
|
|
31
31
|
const regex = /\$\{([a-zA-Z0-9_]+)\}/g;
|
|
32
32
|
let lastIndex = 0;
|
|
33
33
|
let match;
|
|
34
|
-
while
|
|
34
|
+
while((match = regex.exec(this.options.template)) !== null){
|
|
35
35
|
if (match.index > lastIndex) {
|
|
36
|
-
this.tokens.push({
|
|
36
|
+
this.tokens.push({
|
|
37
|
+
type: 'static',
|
|
38
|
+
value: this.options.template.substring(lastIndex, match.index)
|
|
39
|
+
});
|
|
37
40
|
}
|
|
38
|
-
this.tokens.push({
|
|
41
|
+
this.tokens.push({
|
|
42
|
+
type: 'variable',
|
|
43
|
+
value: match[1]
|
|
44
|
+
});
|
|
39
45
|
this.variableTokens.push(this.tokens.length - 1);
|
|
40
46
|
lastIndex = regex.lastIndex;
|
|
41
47
|
}
|
|
42
48
|
if (lastIndex < this.options.template.length) {
|
|
43
|
-
this.tokens.push({
|
|
49
|
+
this.tokens.push({
|
|
50
|
+
type: 'static',
|
|
51
|
+
value: this.options.template.substring(lastIndex)
|
|
52
|
+
});
|
|
44
53
|
}
|
|
45
54
|
}
|
|
46
55
|
// FIX: Override cleanup to ensure cursor is reset to bottom
|
|
@@ -65,8 +74,8 @@ class CodePrompt extends base_1.Prompt {
|
|
|
65
74
|
let activeVarEnd = -1;
|
|
66
75
|
const activeTokenIdx = this.variableTokens[this.activeVarIndex];
|
|
67
76
|
// const activeVarName = this.tokens[activeTokenIdx].value;
|
|
68
|
-
this.tokens.forEach((token, idx)
|
|
69
|
-
const val =
|
|
77
|
+
this.tokens.forEach((token, idx)=>{
|
|
78
|
+
const val = token.type === 'static' ? token.value : this.values[token.value] || '';
|
|
70
79
|
if (idx === activeTokenIdx) {
|
|
71
80
|
activeVarStart = fullRawText.length;
|
|
72
81
|
activeVarEnd = activeVarStart + val.length;
|
|
@@ -78,26 +87,24 @@ class CodePrompt extends base_1.Prompt {
|
|
|
78
87
|
const shouldHighlight = this.options.highlight !== false;
|
|
79
88
|
if (shouldHighlight) {
|
|
80
89
|
const lang = this.options.language || 'json';
|
|
81
|
-
const highlightedText = (0,
|
|
90
|
+
const highlightedText = (0, _highlight.highlight)(fullRawText, lang);
|
|
82
91
|
let visibleIdx = 0;
|
|
83
92
|
let activeColor = ''; // Tracks the last set color
|
|
84
|
-
for
|
|
93
|
+
for(let i = 0; i < highlightedText.length; i++){
|
|
85
94
|
const char = highlightedText[i];
|
|
86
95
|
if (char === '\x1b') {
|
|
87
96
|
// Start of ANSI sequence
|
|
88
97
|
let sequence = char;
|
|
89
98
|
i++;
|
|
90
|
-
while
|
|
99
|
+
while(i < highlightedText.length && highlightedText[i] !== 'm'){
|
|
91
100
|
sequence += highlightedText[i];
|
|
92
101
|
i++;
|
|
93
102
|
}
|
|
94
|
-
if (i < highlightedText.length)
|
|
95
|
-
sequence += 'm'; // Append terminator
|
|
103
|
+
if (i < highlightedText.length) sequence += 'm'; // Append terminator
|
|
96
104
|
// Interpret sequence (naive)
|
|
97
|
-
if (sequence ===
|
|
105
|
+
if (sequence === _ansi.ANSI.RESET || sequence === '\x1b[0m') {
|
|
98
106
|
activeColor = '';
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
107
|
+
} else {
|
|
101
108
|
// Assuming it's a color code.
|
|
102
109
|
activeColor = sequence;
|
|
103
110
|
}
|
|
@@ -107,38 +114,34 @@ class CodePrompt extends base_1.Prompt {
|
|
|
107
114
|
// Output the sequence (e.g. a color change)
|
|
108
115
|
highlighted += sequence;
|
|
109
116
|
// Then re-assert underline
|
|
110
|
-
highlighted +=
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
117
|
+
highlighted += _ansi.ANSI.UNDERLINE;
|
|
118
|
+
} else {
|
|
113
119
|
highlighted += sequence;
|
|
114
120
|
}
|
|
115
121
|
continue;
|
|
116
122
|
}
|
|
117
123
|
// Normal char
|
|
118
124
|
if (visibleIdx === activeVarStart) {
|
|
119
|
-
highlighted += `${
|
|
125
|
+
highlighted += `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}`;
|
|
120
126
|
}
|
|
121
127
|
highlighted += char;
|
|
122
128
|
visibleIdx++;
|
|
123
129
|
if (visibleIdx === activeVarEnd) {
|
|
124
|
-
highlighted +=
|
|
130
|
+
highlighted += _ansi.ANSI.RESET;
|
|
125
131
|
// Restore previous color if any
|
|
126
132
|
if (activeColor) {
|
|
127
133
|
highlighted += activeColor;
|
|
128
134
|
}
|
|
129
135
|
}
|
|
130
136
|
}
|
|
131
|
-
highlighted +=
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, ansi_1.ANSI.RESET, (s) => highlighted += s);
|
|
137
|
+
highlighted += _ansi.ANSI.RESET;
|
|
138
|
+
} else {
|
|
139
|
+
this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, _ansi.ANSI.RESET, (s)=>highlighted += s);
|
|
135
140
|
}
|
|
136
141
|
// 3. Output Frame
|
|
137
|
-
const warningMsg = shouldHighlight
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const prefix = `${warningMsg}${theme_1.theme.success}? ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
|
|
141
|
-
const suffix = `\n${theme_1.theme.muted}(Tab to next, Enter to submit)${ansi_1.ANSI.RESET}`;
|
|
142
|
+
const warningMsg = shouldHighlight ? `${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} Syntax highlighting is an experimental feature.\n` : '';
|
|
143
|
+
const prefix = `${warningMsg}${_theme.theme.success}? ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
144
|
+
const suffix = `\n${_theme.theme.muted}(Tab to next, Enter to submit)${_ansi.ANSI.RESET}`;
|
|
142
145
|
const fullOutput = prefix + highlighted + suffix;
|
|
143
146
|
this.renderFrame(fullOutput);
|
|
144
147
|
// 4. Cursor Calculation
|
|
@@ -146,16 +149,16 @@ class CodePrompt extends base_1.Prompt {
|
|
|
146
149
|
const textBeforeCursor = fullRawText.substring(0, cursorAbsPos);
|
|
147
150
|
const rowsBefore = textBeforeCursor.split('\n');
|
|
148
151
|
const cursorRow = rowsBefore.length - 1;
|
|
149
|
-
const cursorCol = (0,
|
|
152
|
+
const cursorCol = (0, _utils.stringWidth)(rowsBefore[rowsBefore.length - 1]);
|
|
150
153
|
const totalSnippetLines = fullRawText.split('\n').length;
|
|
151
154
|
// linesUp calculation: 1 (suffix) + remaining snippet lines
|
|
152
155
|
const linesUp = 1 + (totalSnippetLines - 1 - cursorRow);
|
|
153
|
-
this.print(
|
|
156
|
+
this.print(_ansi.ANSI.SHOW_CURSOR);
|
|
154
157
|
if (linesUp > 0) {
|
|
155
158
|
this.print(`\x1b[${linesUp}A`);
|
|
156
159
|
this.lastLinesUp = linesUp;
|
|
157
160
|
}
|
|
158
|
-
this.print(
|
|
161
|
+
this.print(_ansi.ANSI.CURSOR_LEFT);
|
|
159
162
|
if (cursorCol > 0) {
|
|
160
163
|
this.print(`\x1b[${cursorCol}C`);
|
|
161
164
|
}
|
|
@@ -167,17 +170,16 @@ class CodePrompt extends base_1.Prompt {
|
|
|
167
170
|
if (overlapStart < overlapEnd) {
|
|
168
171
|
if (absStart < overlapStart) {
|
|
169
172
|
const part = text.substring(0, overlapStart - absStart);
|
|
170
|
-
append(`${syntaxColor}${part}${
|
|
173
|
+
append(`${syntaxColor}${part}${_ansi.ANSI.RESET}`);
|
|
171
174
|
}
|
|
172
175
|
const activePart = text.substring(overlapStart - absStart, overlapEnd - absStart);
|
|
173
|
-
append(`${
|
|
176
|
+
append(`${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${activePart}${_ansi.ANSI.RESET}`);
|
|
174
177
|
if (absEnd > overlapEnd) {
|
|
175
178
|
const part = text.substring(overlapEnd - absStart);
|
|
176
|
-
append(`${syntaxColor}${part}${
|
|
179
|
+
append(`${syntaxColor}${part}${_ansi.ANSI.RESET}`);
|
|
177
180
|
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
append(`${syntaxColor}${text}${ansi_1.ANSI.RESET}`);
|
|
181
|
+
} else {
|
|
182
|
+
append(`${syntaxColor}${text}${_ansi.ANSI.RESET}`);
|
|
181
183
|
}
|
|
182
184
|
}
|
|
183
185
|
handleInput(char, _key) {
|
|
@@ -207,14 +209,12 @@ class CodePrompt extends base_1.Prompt {
|
|
|
207
209
|
return;
|
|
208
210
|
}
|
|
209
211
|
if (this.isLeft(char)) {
|
|
210
|
-
if (this.cursor > 0)
|
|
211
|
-
this.cursor--;
|
|
212
|
+
if (this.cursor > 0) this.cursor--;
|
|
212
213
|
this.render(false);
|
|
213
214
|
return;
|
|
214
215
|
}
|
|
215
216
|
if (this.isRight(char)) {
|
|
216
|
-
if (this.cursor < val.length)
|
|
217
|
-
this.cursor++;
|
|
217
|
+
if (this.cursor < val.length) this.cursor++;
|
|
218
218
|
this.render(false);
|
|
219
219
|
return;
|
|
220
220
|
}
|
|
@@ -228,10 +228,8 @@ class CodePrompt extends base_1.Prompt {
|
|
|
228
228
|
}
|
|
229
229
|
handleMouse(event) {
|
|
230
230
|
if (event.action === 'scroll') {
|
|
231
|
-
if (event.scroll === 'up')
|
|
232
|
-
|
|
233
|
-
else if (event.scroll === 'down')
|
|
234
|
-
this.moveFocus(1);
|
|
231
|
+
if (event.scroll === 'up') this.moveFocus(-1);
|
|
232
|
+
else if (event.scroll === 'down') this.moveFocus(1);
|
|
235
233
|
}
|
|
236
234
|
}
|
|
237
235
|
moveFocus(direction) {
|
|
@@ -245,15 +243,29 @@ class CodePrompt extends base_1.Prompt {
|
|
|
245
243
|
}
|
|
246
244
|
submitCode() {
|
|
247
245
|
let result = '';
|
|
248
|
-
this.tokens.forEach(token
|
|
246
|
+
this.tokens.forEach((token)=>{
|
|
249
247
|
if (token.type === 'static') {
|
|
250
248
|
result += token.value;
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
249
|
+
} else {
|
|
253
250
|
result += this.values[token.value] || '';
|
|
254
251
|
}
|
|
255
252
|
});
|
|
256
253
|
this.submit(result);
|
|
257
254
|
}
|
|
258
|
-
|
|
259
|
-
|
|
255
|
+
constructor(options){
|
|
256
|
+
super(options), _define_property(this, "tokens", []), _define_property(this, "variableTokens", []), _define_property(this, "values", {}), _define_property(this, "activeVarIndex", 0), _define_property(this, "cursor", 0), _define_property(this, "lastLinesUp", 0);
|
|
257
|
+
this.parseTemplate();
|
|
258
|
+
// Init values
|
|
259
|
+
this.variableTokens.forEach((idx)=>{
|
|
260
|
+
const name = this.tokens[idx].value;
|
|
261
|
+
this.values[name] = this.options.values && this.options.values[name] || '';
|
|
262
|
+
});
|
|
263
|
+
// Init cursor at end of first var
|
|
264
|
+
if (this.variableTokens.length > 0) {
|
|
265
|
+
const activeName = this.tokens[this.variableTokens[0]].value;
|
|
266
|
+
this.cursor = this.values[activeName].length;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
//# sourceMappingURL=code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/code.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { CodeOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\nimport { highlight } from '../highlight';\n\ninterface Token {\n type: 'static' | 'variable';\n value: string;\n}\n\nexport class CodePrompt extends Prompt<string, CodeOptions> {\n private tokens: Token[] = [];\n private variableTokens: number[] = [];\n private values: Record<string, string> = {};\n private activeVarIndex: number = 0;\n private cursor: number = 0;\n private lastLinesUp: number = 0;\n\n constructor(options: CodeOptions) {\n super(options);\n this.parseTemplate();\n // Init values\n this.variableTokens.forEach(idx => {\n const name = this.tokens[idx].value;\n this.values[name] = (this.options.values && this.options.values[name]) || '';\n });\n\n // Init cursor at end of first var\n if (this.variableTokens.length > 0) {\n const activeName = this.tokens[this.variableTokens[0]].value;\n this.cursor = this.values[activeName].length;\n }\n }\n\n private parseTemplate() {\n const regex = /\\$\\{([a-zA-Z0-9_]+)\\}/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(this.options.template)) !== null) {\n if (match.index > lastIndex) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex, match.index) });\n }\n this.tokens.push({ type: 'variable', value: match[1] });\n this.variableTokens.push(this.tokens.length - 1);\n lastIndex = regex.lastIndex;\n }\n\n if (lastIndex < this.options.template.length) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex) });\n }\n }\n\n // FIX: Override cleanup to ensure cursor is reset to bottom\n protected cleanup() {\n // If the cursor is currently moved up (editing mode), move it back down\n // before the prompt exits. This prevents the next output (or result)\n // from overwriting the bottom part of our UI.\n if (this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n this.lastLinesUp = 0;\n }\n super.cleanup();\n }\n\n protected render(firstRender: boolean) {\n if (!firstRender && this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n }\n this.lastLinesUp = 0;\n\n // 1. Build Full Raw Text & Identify Active Variable Range\n let fullRawText = '';\n let activeVarStart = -1;\n let activeVarEnd = -1;\n\n const activeTokenIdx = this.variableTokens[this.activeVarIndex];\n // const activeVarName = this.tokens[activeTokenIdx].value;\n\n this.tokens.forEach((token, idx) => {\n const val = (token.type === 'static') ? token.value : (this.values[token.value] || '');\n\n if (idx === activeTokenIdx) {\n activeVarStart = fullRawText.length;\n activeVarEnd = activeVarStart + val.length;\n }\n\n fullRawText += val;\n });\n\n // 2. Syntax Highlight with Overlap Logic\n let highlighted = '';\n const shouldHighlight = this.options.highlight !== false;\n\n if (shouldHighlight) {\n const lang = this.options.language || 'json';\n const highlightedText = highlight(fullRawText, lang);\n\n let visibleIdx = 0;\n let activeColor = ''; // Tracks the last set color\n\n for (let i = 0; i < highlightedText.length; i++) {\n const char = highlightedText[i];\n\n if (char === '\\x1b') {\n // Start of ANSI sequence\n let sequence = char;\n i++;\n while (i < highlightedText.length && highlightedText[i] !== 'm') {\n sequence += highlightedText[i];\n i++;\n }\n if (i < highlightedText.length) sequence += 'm'; // Append terminator\n\n // Interpret sequence (naive)\n if (sequence === ANSI.RESET || sequence === '\\x1b[0m') {\n activeColor = '';\n } else {\n // Assuming it's a color code.\n activeColor = sequence;\n }\n\n // If we are INSIDE the active range, and we encounter a color change/reset,\n // we must ensure UNDERLINE is kept/restored.\n if (visibleIdx >= activeVarStart && visibleIdx < activeVarEnd) {\n // Output the sequence (e.g. a color change)\n highlighted += sequence;\n // Then re-assert underline\n highlighted += ANSI.UNDERLINE;\n } else {\n highlighted += sequence;\n }\n continue;\n }\n\n // Normal char\n if (visibleIdx === activeVarStart) {\n highlighted += `${theme.main}${ANSI.UNDERLINE}`;\n }\n\n highlighted += char;\n visibleIdx++;\n\n if (visibleIdx === activeVarEnd) {\n highlighted += ANSI.RESET;\n // Restore previous color if any\n if (activeColor) {\n highlighted += activeColor;\n }\n }\n }\n highlighted += ANSI.RESET;\n } else {\n this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, ANSI.RESET, (s) => highlighted += s);\n }\n\n\n // 3. Output Frame\n const warningMsg = shouldHighlight\n ? `${ANSI.FG_YELLOW}Warning:${ANSI.RESET} Syntax highlighting is an experimental feature.\\n`\n : '';\n\n const prefix = `${warningMsg}${theme.success}? ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n const suffix = `\\n${theme.muted}(Tab to next, Enter to submit)${ANSI.RESET}`;\n const fullOutput = prefix + highlighted + suffix;\n\n this.renderFrame(fullOutput);\n\n // 4. Cursor Calculation\n const cursorAbsPos = activeVarStart + this.cursor;\n const textBeforeCursor = fullRawText.substring(0, cursorAbsPos);\n\n const rowsBefore = textBeforeCursor.split('\\n');\n const cursorRow = rowsBefore.length - 1;\n const cursorCol = stringWidth(rowsBefore[rowsBefore.length - 1]);\n\n const totalSnippetLines = fullRawText.split('\\n').length;\n // linesUp calculation: 1 (suffix) + remaining snippet lines\n const linesUp = 1 + (totalSnippetLines - 1 - cursorRow);\n\n this.print(ANSI.SHOW_CURSOR);\n if (linesUp > 0) {\n this.print(`\\x1b[${linesUp}A`);\n this.lastLinesUp = linesUp;\n }\n\n this.print(ANSI.CURSOR_LEFT);\n if (cursorCol > 0) {\n this.print(`\\x1b[${cursorCol}C`);\n }\n }\n\n private appendSegment(\n text: string,\n absStart: number,\n activeStart: number,\n activeEnd: number,\n syntaxColor: string,\n append: (s: string) => void\n ) {\n const absEnd = absStart + text.length;\n const overlapStart = Math.max(absStart, activeStart);\n const overlapEnd = Math.min(absEnd, activeEnd);\n\n if (overlapStart < overlapEnd) {\n if (absStart < overlapStart) {\n const part = text.substring(0, overlapStart - absStart);\n append(`${syntaxColor}${part}${ANSI.RESET}`);\n }\n const activePart = text.substring(overlapStart - absStart, overlapEnd - absStart);\n append(`${theme.main}${ANSI.UNDERLINE}${activePart}${ANSI.RESET}`);\n\n if (absEnd > overlapEnd) {\n const part = text.substring(overlapEnd - absStart);\n append(`${syntaxColor}${part}${ANSI.RESET}`);\n }\n } else {\n append(`${syntaxColor}${text}${ANSI.RESET}`);\n }\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (char === '\\u001b[Z') {\n this.moveFocus(-1); return;\n }\n if (char === '\\t') {\n this.moveFocus(1); return;\n }\n if (char === '\\r' || char === '\\n') {\n this.submitCode(); return;\n }\n\n const activeTokenIdx = this.variableTokens[this.activeVarIndex];\n const varName = this.tokens[activeTokenIdx].value;\n const val = this.values[varName] || '';\n\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.cursor > 0) {\n const pre = val.slice(0, this.cursor - 1);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + post;\n this.cursor--;\n this.render(false);\n }\n return;\n }\n\n if (this.isLeft(char)) {\n if (this.cursor > 0) this.cursor--;\n this.render(false);\n return;\n }\n if (this.isRight(char)) {\n if (this.cursor < val.length) this.cursor++;\n this.render(false);\n return;\n }\n\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n const pre = val.slice(0, this.cursor);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + char + post;\n this.cursor += char.length;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') this.moveFocus(-1);\n else if (event.scroll === 'down') this.moveFocus(1);\n }\n }\n\n private moveFocus(direction: number) {\n const nextIndex = this.activeVarIndex + direction;\n if (nextIndex >= 0 && nextIndex < this.variableTokens.length) {\n this.activeVarIndex = nextIndex;\n const varName = this.tokens[this.variableTokens[this.activeVarIndex]].value;\n this.cursor = (this.values[varName] || '').length;\n this.render(false);\n }\n }\n\n private submitCode() {\n let result = '';\n this.tokens.forEach(token => {\n if (token.type === 'static') {\n result += token.value;\n } else {\n result += this.values[token.value] || '';\n }\n });\n this.submit(result);\n }\n}\n"],"names":["CodePrompt","Prompt","parseTemplate","regex","lastIndex","match","exec","options","template","index","tokens","push","type","value","substring","variableTokens","length","cleanup","lastLinesUp","print","render","firstRender","fullRawText","activeVarStart","activeVarEnd","activeTokenIdx","activeVarIndex","forEach","token","idx","val","values","highlighted","shouldHighlight","highlight","lang","language","highlightedText","visibleIdx","activeColor","i","char","sequence","ANSI","RESET","UNDERLINE","theme","main","appendSegment","s","warningMsg","FG_YELLOW","prefix","success","BOLD","title","message","suffix","muted","fullOutput","renderFrame","cursorAbsPos","cursor","textBeforeCursor","rowsBefore","split","cursorRow","cursorCol","stringWidth","totalSnippetLines","linesUp","SHOW_CURSOR","CURSOR_LEFT","text","absStart","activeStart","activeEnd","syntaxColor","append","absEnd","overlapStart","Math","max","overlapEnd","min","part","activePart","handleInput","_key","moveFocus","submitCode","varName","pre","slice","post","isLeft","isRight","test","startsWith","handleMouse","event","action","scroll","direction","nextIndex","result","submit","name","activeName"],"mappings":"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"}
|