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,52 +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
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "SelectPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return SelectPrompt;
|
|
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;
|
|
18
25
|
}
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
let SelectPrompt = class SelectPrompt extends _base.Prompt {
|
|
19
29
|
isSeparator(item) {
|
|
20
|
-
return item &&
|
|
30
|
+
return item && 'separator' in item;
|
|
21
31
|
}
|
|
22
32
|
findNextSelectableIndex(currentIndex, direction) {
|
|
23
33
|
let nextIndex = currentIndex + direction;
|
|
24
34
|
const choices = this.getFilteredChoices();
|
|
25
35
|
// Loop around logic
|
|
26
|
-
if (nextIndex < 0)
|
|
27
|
-
|
|
28
|
-
if (
|
|
29
|
-
nextIndex = 0;
|
|
30
|
-
if (choices.length === 0)
|
|
31
|
-
return 0;
|
|
36
|
+
if (nextIndex < 0) nextIndex = choices.length - 1;
|
|
37
|
+
if (nextIndex >= choices.length) nextIndex = 0;
|
|
38
|
+
if (choices.length === 0) return 0;
|
|
32
39
|
// Safety check to prevent infinite loop if all are separators (shouldn't happen in practice)
|
|
33
40
|
let count = 0;
|
|
34
|
-
while
|
|
41
|
+
while(this.isSeparator(choices[nextIndex]) && count < choices.length){
|
|
35
42
|
nextIndex += direction;
|
|
36
|
-
if (nextIndex < 0)
|
|
37
|
-
|
|
38
|
-
if (nextIndex >= choices.length)
|
|
39
|
-
nextIndex = 0;
|
|
43
|
+
if (nextIndex < 0) nextIndex = choices.length - 1;
|
|
44
|
+
if (nextIndex >= choices.length) nextIndex = 0;
|
|
40
45
|
count++;
|
|
41
46
|
}
|
|
42
47
|
return nextIndex;
|
|
43
48
|
}
|
|
44
49
|
getFilteredChoices() {
|
|
45
|
-
if (!this.searchBuffer)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (this.isSeparator(c))
|
|
49
|
-
return false; // Hide separators when searching
|
|
50
|
+
if (!this.searchBuffer) return this.options.choices;
|
|
51
|
+
return this.options.choices.filter((c)=>{
|
|
52
|
+
if (this.isSeparator(c)) return false; // Hide separators when searching
|
|
50
53
|
return c.title.toLowerCase().includes(this.searchBuffer.toLowerCase());
|
|
51
54
|
});
|
|
52
55
|
}
|
|
@@ -56,8 +59,7 @@ class SelectPrompt extends base_1.Prompt {
|
|
|
56
59
|
// Adjust Scroll Top
|
|
57
60
|
if (this.selectedIndex < this.scrollTop) {
|
|
58
61
|
this.scrollTop = this.selectedIndex;
|
|
59
|
-
}
|
|
60
|
-
else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
|
|
62
|
+
} else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
|
|
61
63
|
this.scrollTop = this.selectedIndex - this.pageSize + 1;
|
|
62
64
|
}
|
|
63
65
|
// Handle Filtering Edge Case: if list shrinks, scrollTop might be too high
|
|
@@ -65,29 +67,25 @@ class SelectPrompt extends base_1.Prompt {
|
|
|
65
67
|
this.scrollTop = Math.max(0, choices.length - this.pageSize);
|
|
66
68
|
}
|
|
67
69
|
// Header
|
|
68
|
-
const searchStr = this.searchBuffer ? ` ${
|
|
70
|
+
const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Filter: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
|
|
69
71
|
// Note: We avoid ERASE_LINE here because renderFrame handles full redraw
|
|
70
|
-
output += `${
|
|
72
|
+
output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr}\n`;
|
|
71
73
|
if (choices.length === 0) {
|
|
72
|
-
output += ` ${
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
74
|
+
output += ` ${_theme.theme.muted}No results found${_ansi.ANSI.RESET}`;
|
|
75
|
+
// We can omit newline at the very end if we want, but usually it's better to be consistent.
|
|
76
|
+
// renderFrame adds newline via truncate logic? No, it joins.
|
|
77
|
+
// So if I want a line break, I must add it.
|
|
78
|
+
} else {
|
|
78
79
|
const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
79
|
-
visibleChoices.forEach((choice, index)
|
|
80
|
+
visibleChoices.forEach((choice, index)=>{
|
|
80
81
|
const actualIndex = this.scrollTop + index;
|
|
81
|
-
if (index > 0)
|
|
82
|
-
output += '\n'; // Separator between items
|
|
82
|
+
if (index > 0) output += '\n'; // Separator between items
|
|
83
83
|
if (this.isSeparator(choice)) {
|
|
84
|
-
output += ` ${
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
84
|
+
output += ` ${_ansi.ANSI.DIM}${choice.text || _symbols.symbols.line.repeat(8)}${_ansi.ANSI.RESET}`;
|
|
85
|
+
} else {
|
|
87
86
|
if (actualIndex === this.selectedIndex) {
|
|
88
|
-
output += `${
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
87
|
+
output += `${_theme.theme.main}${_symbols.symbols.pointer} ${choice.title}${_ansi.ANSI.RESET}`;
|
|
88
|
+
} else {
|
|
91
89
|
output += ` ${choice.title}`;
|
|
92
90
|
}
|
|
93
91
|
}
|
|
@@ -105,22 +103,19 @@ class SelectPrompt extends base_1.Prompt {
|
|
|
105
103
|
this.render(false);
|
|
106
104
|
return;
|
|
107
105
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
this.
|
|
111
|
-
// Cursor is shown by cleanup
|
|
112
|
-
if (this._resolve)
|
|
113
|
-
this._resolve(choices[this.selectedIndex].value);
|
|
106
|
+
const choice = choices[this.selectedIndex];
|
|
107
|
+
if (this.isSeparator(choice)) return;
|
|
108
|
+
this.submit(choice.value);
|
|
114
109
|
return;
|
|
115
110
|
}
|
|
116
|
-
if (this.isUp(char)) {
|
|
111
|
+
if (this.isUp(char)) {
|
|
117
112
|
if (choices.length > 0) {
|
|
118
113
|
this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);
|
|
119
114
|
this.render(false);
|
|
120
115
|
}
|
|
121
116
|
return;
|
|
122
117
|
}
|
|
123
|
-
if (this.isDown(char)) {
|
|
118
|
+
if (this.isDown(char)) {
|
|
124
119
|
if (choices.length > 0) {
|
|
125
120
|
this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);
|
|
126
121
|
this.render(false);
|
|
@@ -147,18 +142,22 @@ class SelectPrompt extends base_1.Prompt {
|
|
|
147
142
|
}
|
|
148
143
|
handleMouse(event) {
|
|
149
144
|
const choices = this.getFilteredChoices();
|
|
150
|
-
if (choices.length === 0)
|
|
151
|
-
return;
|
|
145
|
+
if (choices.length === 0) return;
|
|
152
146
|
if (event.action === 'scroll') {
|
|
153
147
|
if (event.scroll === 'up') {
|
|
154
148
|
this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);
|
|
155
149
|
this.render(false);
|
|
156
|
-
}
|
|
157
|
-
else if (event.scroll === 'down') {
|
|
150
|
+
} else if (event.scroll === 'down') {
|
|
158
151
|
this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);
|
|
159
152
|
this.render(false);
|
|
160
153
|
}
|
|
161
154
|
}
|
|
162
155
|
}
|
|
163
|
-
|
|
164
|
-
|
|
156
|
+
constructor(options){
|
|
157
|
+
super(options), _define_property(this, "selectedIndex", 0), _define_property(this, "searchBuffer", ''), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 7);
|
|
158
|
+
// Find first non-separator index
|
|
159
|
+
this.selectedIndex = this.findNextSelectableIndex(-1, 1);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/select.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SelectOptions, MouseEvent, SelectChoice, Separator } from '../types';\n\n// --- Implementation: Select Prompt ---\nexport class SelectPrompt<V, O extends SelectOptions<V> = SelectOptions<V>> extends Prompt<any, O> {\n protected selectedIndex: number = 0;\n protected searchBuffer: string = '';\n protected scrollTop: number = 0;\n protected readonly pageSize: number = 7;\n\n constructor(options: O) {\n super(options);\n // Find first non-separator index\n this.selectedIndex = this.findNextSelectableIndex(-1, 1);\n }\n\n protected isSeparator(item: SelectChoice<V> | Separator): item is Separator {\n return item && 'separator' in item;\n }\n\n protected findNextSelectableIndex(currentIndex: number, direction: 1 | -1): number {\n let nextIndex = currentIndex + direction;\n const choices = this.getFilteredChoices();\n\n // Loop around logic\n if (nextIndex < 0) nextIndex = choices.length - 1;\n if (nextIndex >= choices.length) nextIndex = 0;\n\n if (choices.length === 0) return 0;\n\n // Safety check to prevent infinite loop if all are separators (shouldn't happen in practice)\n let count = 0;\n while (this.isSeparator(choices[nextIndex]) && count < choices.length) {\n nextIndex += direction;\n if (nextIndex < 0) nextIndex = choices.length - 1;\n if (nextIndex >= choices.length) nextIndex = 0;\n count++;\n }\n return nextIndex;\n }\n\n protected getFilteredChoices(): (SelectChoice<V> | Separator)[] {\n if (!this.searchBuffer) return this.options.choices;\n return (this.options.choices as (SelectChoice<V> | Separator)[]).filter(c => {\n if (this.isSeparator(c)) return false; // Hide separators when searching\n return c.title.toLowerCase().includes(this.searchBuffer.toLowerCase());\n });\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n const choices = this.getFilteredChoices();\n\n // Adjust Scroll Top\n if (this.selectedIndex < this.scrollTop) {\n this.scrollTop = this.selectedIndex;\n } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.selectedIndex - this.pageSize + 1;\n }\n // Handle Filtering Edge Case: if list shrinks, scrollTop might be too high\n if (this.scrollTop > choices.length - 1) {\n this.scrollTop = Math.max(0, choices.length - this.pageSize);\n }\n\n // Header\n const searchStr = this.searchBuffer ? ` ${theme.muted}(Filter: ${this.searchBuffer})${ANSI.RESET}` : '';\n // Note: We avoid ERASE_LINE here because renderFrame handles full redraw\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}${searchStr}\\n`;\n\n if (choices.length === 0) {\n output += ` ${theme.muted}No results found${ANSI.RESET}`;\n // We can omit newline at the very end if we want, but usually it's better to be consistent.\n // renderFrame adds newline via truncate logic? No, it joins.\n // So if I want a line break, I must add it.\n } else {\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n'; // Separator between items\n\n if (this.isSeparator(choice)) {\n output += ` ${ANSI.DIM}${choice.text || symbols.line.repeat(8)}${ANSI.RESET}`;\n } else {\n if (actualIndex === this.selectedIndex) {\n output += `${theme.main}${symbols.pointer} ${choice.title}${ANSI.RESET}`;\n } else {\n output += ` ${choice.title}`;\n }\n }\n });\n }\n\n // No manual printing. Pass to renderFrame.\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n const choices = this.getFilteredChoices();\n\n if (char === '\\r' || char === '\\n') {\n if (choices.length === 0) {\n this.searchBuffer = '';\n this.selectedIndex = this.findNextSelectableIndex(-1, 1);\n this.render(false);\n return;\n }\n\n const choice = choices[this.selectedIndex];\n if (this.isSeparator(choice)) return;\n\n this.submit(choice.value);\n return;\n }\n\n if (this.isUp(char)) { // Up\n if (choices.length > 0) {\n this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);\n this.render(false);\n }\n return;\n }\n if (this.isDown(char)) { // Down\n if (choices.length > 0) {\n this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);\n this.render(false);\n }\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.searchBuffer.length > 0) {\n this.searchBuffer = this.searchBuffer.slice(0, -1);\n this.selectedIndex = 0; // Reset selection\n this.selectedIndex = this.findNextSelectableIndex(-1, 1);\n this.render(false);\n }\n return;\n }\n\n // Typing\n if (char.length === 1 && !/^[\\x00-\\x1F]/.test(char)) {\n this.searchBuffer += char;\n this.selectedIndex = 0; // Reset selection\n this.selectedIndex = this.findNextSelectableIndex(-1, 1);\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n const choices = this.getFilteredChoices();\n if (choices.length === 0) return;\n\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);\n this.render(false);\n }\n }\n }\n}\n"],"names":["SelectPrompt","Prompt","isSeparator","item","findNextSelectableIndex","currentIndex","direction","nextIndex","choices","getFilteredChoices","length","count","searchBuffer","options","filter","c","title","toLowerCase","includes","render","_firstRender","output","selectedIndex","scrollTop","pageSize","Math","max","searchStr","theme","muted","ANSI","RESET","success","BOLD","message","visibleChoices","slice","forEach","choice","index","actualIndex","DIM","text","symbols","line","repeat","main","pointer","renderFrame","handleInput","char","submit","value","isUp","isDown","test","handleMouse","event","action","scroll"],"mappings":"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"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "SemVerPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return SemVerPrompt;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _select = require("./select");
|
|
12
|
+
let SemVerPrompt = class SemVerPrompt extends _select.SelectPrompt {
|
|
13
|
+
static parseVersion(version) {
|
|
14
|
+
// Simple SemVer regex: x.y.z
|
|
15
|
+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)$/);
|
|
16
|
+
return match ? match[0] : null;
|
|
17
|
+
}
|
|
18
|
+
constructor(options){
|
|
7
19
|
const { currentVersion, ...baseOptions } = options;
|
|
8
20
|
const validVersion = SemVerPrompt.parseVersion(currentVersion) || '0.0.1';
|
|
9
21
|
const [major, minor, patch] = validVersion.split('.').map(Number);
|
|
@@ -21,12 +33,11 @@ class SemVerPrompt extends select_1.SelectPrompt {
|
|
|
21
33
|
value: `${major + 1}.0.0`
|
|
22
34
|
}
|
|
23
35
|
];
|
|
24
|
-
super({
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const match = version.match(/^(\d+)\.(\d+)\.(\d+)$/);
|
|
29
|
-
return match ? match[0] : null;
|
|
36
|
+
super({
|
|
37
|
+
...baseOptions,
|
|
38
|
+
choices
|
|
39
|
+
});
|
|
30
40
|
}
|
|
31
|
-
}
|
|
32
|
-
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=semver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/semver.ts"],"sourcesContent":["import { SelectPrompt } from './select';\nimport { SemVerOptions, SelectChoice } from '../types';\n\nexport class SemVerPrompt extends SelectPrompt<string> {\n constructor(options: SemVerOptions) {\n const { currentVersion, ...baseOptions } = options;\n const validVersion = SemVerPrompt.parseVersion(currentVersion) || '0.0.1';\n const [major, minor, patch] = validVersion.split('.').map(Number);\n\n const choices: SelectChoice<string>[] = [\n {\n title: `Patch (${validVersion} -> ${major}.${minor}.${patch + 1})`,\n value: `${major}.${minor}.${patch + 1}`\n },\n {\n title: `Minor (${validVersion} -> ${major}.${minor + 1}.0)`,\n value: `${major}.${minor + 1}.0`\n },\n {\n title: `Major (${validVersion} -> ${major + 1}.0.0)`,\n value: `${major + 1}.0.0`\n }\n ];\n\n super({ ...baseOptions, choices });\n }\n\n private static parseVersion(version: string): string | null {\n // Simple SemVer regex: x.y.z\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)$/);\n return match ? match[0] : null;\n }\n}\n"],"names":["SemVerPrompt","SelectPrompt","parseVersion","version","match","options","currentVersion","baseOptions","validVersion","major","minor","patch","split","map","Number","choices","title","value"],"mappings":";;;;+BAGaA;;;eAAAA;;;wBAHgB;AAGtB,IAAA,AAAMA,eAAN,MAAMA,qBAAqBC,oBAAY;IAwB1C,OAAeC,aAAaC,OAAe,EAAiB;QACxD,6BAA6B;QAC7B,MAAMC,QAAQD,QAAQC,KAAK,CAAC;QAC5B,OAAOA,QAAQA,KAAK,CAAC,EAAE,GAAG;IAC9B;IA3BA,YAAYC,OAAsB,CAAE;QAChC,MAAM,EAAEC,cAAc,EAAE,GAAGC,aAAa,GAAGF;QAC3C,MAAMG,eAAeR,aAAaE,YAAY,CAACI,mBAAmB;QAClE,MAAM,CAACG,OAAOC,OAAOC,MAAM,GAAGH,aAAaI,KAAK,CAAC,KAAKC,GAAG,CAACC;QAE1D,MAAMC,UAAkC;YACpC;gBACIC,OAAO,CAAC,OAAO,EAAER,aAAa,IAAI,EAAEC,MAAM,CAAC,EAAEC,MAAM,CAAC,EAAEC,QAAQ,EAAE,CAAC,CAAC;gBAClEM,OAAO,GAAGR,MAAM,CAAC,EAAEC,MAAM,CAAC,EAAEC,QAAQ,GAAG;YAC3C;YACA;gBACIK,OAAO,CAAC,OAAO,EAAER,aAAa,IAAI,EAAEC,MAAM,CAAC,EAAEC,QAAQ,EAAE,GAAG,CAAC;gBAC3DO,OAAO,GAAGR,MAAM,CAAC,EAAEC,QAAQ,EAAE,EAAE,CAAC;YACpC;YACA;gBACIM,OAAO,CAAC,OAAO,EAAER,aAAa,IAAI,EAAEC,QAAQ,EAAE,KAAK,CAAC;gBACpDQ,OAAO,GAAGR,QAAQ,EAAE,IAAI,CAAC;YAC7B;SACH;QAED,KAAK,CAAC;YAAE,GAAGF,WAAW;YAAEQ;QAAQ;IACpC;AAOJ"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "ShortcutPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ShortcutPrompt;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _base = require("../base");
|
|
12
|
+
const _ansi = require("../ansi");
|
|
13
|
+
const _theme = require("../theme");
|
|
14
|
+
function _define_property(obj, key, value) {
|
|
15
|
+
if (key in obj) {
|
|
16
|
+
Object.defineProperty(obj, key, {
|
|
17
|
+
value: value,
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true
|
|
21
|
+
});
|
|
22
|
+
} else {
|
|
23
|
+
obj[key] = value;
|
|
24
|
+
}
|
|
25
|
+
return obj;
|
|
26
|
+
}
|
|
27
|
+
let ShortcutPrompt = class ShortcutPrompt extends _base.Prompt {
|
|
28
|
+
render(_firstRender) {
|
|
29
|
+
let text = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
|
|
30
|
+
if (this.currentKey) {
|
|
31
|
+
const parts = [];
|
|
32
|
+
if (this.currentKey.ctrl) parts.push(`${_ansi.ANSI.REVERSE} Ctrl ${_ansi.ANSI.RESET}`);
|
|
33
|
+
if (this.currentKey.meta) parts.push(`${_ansi.ANSI.REVERSE} Alt ${_ansi.ANSI.RESET}`);
|
|
34
|
+
if (this.currentKey.shift) parts.push(`${_ansi.ANSI.REVERSE} Shift ${_ansi.ANSI.RESET}`);
|
|
35
|
+
if (this.currentKey.name) {
|
|
36
|
+
parts.push(`${_ansi.ANSI.FG_CYAN}[${this.currentKey.name}]${_ansi.ANSI.RESET}`);
|
|
37
|
+
}
|
|
38
|
+
text += parts.join(' + ');
|
|
39
|
+
text += ` ${_theme.theme.muted}(Press Enter to confirm)${_ansi.ANSI.RESET}`;
|
|
40
|
+
} else {
|
|
41
|
+
text += `${_theme.theme.muted}Press any key combination...${_ansi.ANSI.RESET}`;
|
|
42
|
+
}
|
|
43
|
+
this.renderFrame(text);
|
|
44
|
+
}
|
|
45
|
+
handleInput(char, buffer) {
|
|
46
|
+
const raw = buffer.toString();
|
|
47
|
+
// Enter to confirm
|
|
48
|
+
if (char === '\r' || char === '\n') {
|
|
49
|
+
if (this.currentKey) {
|
|
50
|
+
this.submit(this.currentKey);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Parse the key
|
|
55
|
+
const parsed = this.parseKey(char, raw);
|
|
56
|
+
if (parsed) {
|
|
57
|
+
this.currentKey = parsed;
|
|
58
|
+
this.render(false);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
parseKey(char, raw) {
|
|
62
|
+
let name = '';
|
|
63
|
+
let ctrl = false;
|
|
64
|
+
let meta = false;
|
|
65
|
+
let shift = false;
|
|
66
|
+
const code = raw.charCodeAt(0);
|
|
67
|
+
// Control Keys (1-26, except Backspace, Tab, Enter, Esc)
|
|
68
|
+
if (code >= 1 && code <= 26) {
|
|
69
|
+
// Exclude special control codes
|
|
70
|
+
if (char === '\t') {
|
|
71
|
+
name = 'Tab';
|
|
72
|
+
} else if (char === '\n' || char === '\r') {
|
|
73
|
+
name = 'Enter';
|
|
74
|
+
} else if (char === '\b') {
|
|
75
|
+
name = 'Backspace';
|
|
76
|
+
} else {
|
|
77
|
+
ctrl = true;
|
|
78
|
+
name = String.fromCharCode(code + 64); // 1 -> 'A'
|
|
79
|
+
}
|
|
80
|
+
} else if (code === 27) {
|
|
81
|
+
if (raw.length === 1) {
|
|
82
|
+
name = 'Escape';
|
|
83
|
+
} else {
|
|
84
|
+
// Sequence starting with ESC
|
|
85
|
+
meta = true; // Assume Alt for ESC+Char
|
|
86
|
+
if (raw.length === 2) {
|
|
87
|
+
// Alt + Char
|
|
88
|
+
name = raw[1].toUpperCase();
|
|
89
|
+
// Check shift for Alt+Shift+Char logic?
|
|
90
|
+
if (raw[1] >= 'A' && raw[1] <= 'Z') shift = true;
|
|
91
|
+
} else {
|
|
92
|
+
// CSI sequences
|
|
93
|
+
meta = false; // Usually these are navigation
|
|
94
|
+
if (raw === '\u001b[A') name = 'Up';
|
|
95
|
+
else if (raw === '\u001b[B') name = 'Down';
|
|
96
|
+
else if (raw === '\u001b[C') name = 'Right';
|
|
97
|
+
else if (raw === '\u001b[D') name = 'Left';
|
|
98
|
+
else if (raw === '\u001b[H') name = 'Home';
|
|
99
|
+
else if (raw === '\u001b[F') name = 'End';
|
|
100
|
+
else if (raw === '\u001b[3~') name = 'Delete';
|
|
101
|
+
else if (raw === '\u001b[Z') {
|
|
102
|
+
name = 'Tab';
|
|
103
|
+
shift = true;
|
|
104
|
+
} else {
|
|
105
|
+
name = 'Unknown';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
} else if (code === 127) {
|
|
110
|
+
name = 'Backspace';
|
|
111
|
+
} else {
|
|
112
|
+
// Regular char
|
|
113
|
+
name = char.toUpperCase();
|
|
114
|
+
if (char >= 'A' && char <= 'Z') shift = true;
|
|
115
|
+
if (char === ' ') name = 'Space';
|
|
116
|
+
// Special Symbols map?
|
|
117
|
+
// Keep it simple for now.
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
name,
|
|
121
|
+
ctrl,
|
|
122
|
+
shift,
|
|
123
|
+
meta,
|
|
124
|
+
sequence: raw
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
constructor(options){
|
|
128
|
+
super(options), _define_property(this, "currentKey", void 0);
|
|
129
|
+
this.currentKey = options.initial;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
//# sourceMappingURL=shortcut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/shortcut.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { ShortcutOptions, ShortcutResult } from '../types';\nimport { ANSI } from '../ansi';\nimport { theme } from '../theme';\n\nexport class ShortcutPrompt extends Prompt<ShortcutResult, ShortcutOptions> {\n private currentKey?: ShortcutResult;\n\n constructor(options: ShortcutOptions) {\n super(options);\n this.currentKey = options.initial;\n }\n\n protected render(_firstRender: boolean) {\n let text = `${theme.title}${this.options.message}${ANSI.RESET} `;\n\n if (this.currentKey) {\n const parts: string[] = [];\n if (this.currentKey.ctrl) parts.push(`${ANSI.REVERSE} Ctrl ${ANSI.RESET}`);\n if (this.currentKey.meta) parts.push(`${ANSI.REVERSE} Alt ${ANSI.RESET}`);\n if (this.currentKey.shift) parts.push(`${ANSI.REVERSE} Shift ${ANSI.RESET}`);\n\n if (this.currentKey.name) {\n parts.push(`${ANSI.FG_CYAN}[${this.currentKey.name}]${ANSI.RESET}`);\n }\n\n text += parts.join(' + ');\n text += ` ${theme.muted}(Press Enter to confirm)${ANSI.RESET}`;\n } else {\n text += `${theme.muted}Press any key combination...${ANSI.RESET}`;\n }\n\n this.renderFrame(text);\n }\n\n protected handleInput(char: string, buffer: Buffer) {\n const raw = buffer.toString();\n\n // Enter to confirm\n if (char === '\\r' || char === '\\n') {\n if (this.currentKey) {\n this.submit(this.currentKey);\n }\n return;\n }\n\n // Parse the key\n const parsed = this.parseKey(char, raw);\n if (parsed) {\n this.currentKey = parsed;\n this.render(false);\n }\n }\n\n private parseKey(char: string, raw: string): ShortcutResult | null {\n let name = '';\n let ctrl = false;\n let meta = false;\n let shift = false;\n\n const code = raw.charCodeAt(0);\n\n // Control Keys (1-26, except Backspace, Tab, Enter, Esc)\n if (code >= 1 && code <= 26) {\n // Exclude special control codes\n if (char === '\\t') { // Ctrl+I\n name = 'Tab';\n } else if (char === '\\n' || char === '\\r') { // Ctrl+J / Ctrl+M\n name = 'Enter';\n } else if (char === '\\b') { // Ctrl+H\n name = 'Backspace';\n } else {\n ctrl = true;\n name = String.fromCharCode(code + 64); // 1 -> 'A'\n }\n } else if (code === 27) { // Escape\n if (raw.length === 1) {\n name = 'Escape';\n } else {\n // Sequence starting with ESC\n meta = true; // Assume Alt for ESC+Char\n if (raw.length === 2) {\n // Alt + Char\n name = raw[1].toUpperCase();\n // Check shift for Alt+Shift+Char logic?\n if (raw[1] >= 'A' && raw[1] <= 'Z') shift = true;\n } else {\n // CSI sequences\n meta = false; // Usually these are navigation\n if (raw === '\\u001b[A') name = 'Up';\n else if (raw === '\\u001b[B') name = 'Down';\n else if (raw === '\\u001b[C') name = 'Right';\n else if (raw === '\\u001b[D') name = 'Left';\n else if (raw === '\\u001b[H') name = 'Home';\n else if (raw === '\\u001b[F') name = 'End';\n else if (raw === '\\u001b[3~') name = 'Delete';\n else if (raw === '\\u001b[Z') { name = 'Tab'; shift = true; } // Shift+Tab\n else {\n name = 'Unknown';\n }\n }\n }\n } else if (code === 127) {\n name = 'Backspace';\n } else {\n // Regular char\n name = char.toUpperCase();\n if (char >= 'A' && char <= 'Z') shift = true;\n\n if (char === ' ') name = 'Space';\n\n // Special Symbols map? \n // Keep it simple for now.\n }\n\n return {\n name,\n ctrl,\n shift,\n meta,\n sequence: raw\n };\n }\n}\n"],"names":["ShortcutPrompt","Prompt","render","_firstRender","text","theme","title","options","message","ANSI","RESET","currentKey","parts","ctrl","push","REVERSE","meta","shift","name","FG_CYAN","join","muted","renderFrame","handleInput","char","buffer","raw","toString","submit","parsed","parseKey","code","charCodeAt","String","fromCharCode","length","toUpperCase","sequence","initial"],"mappings":"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"}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class SliderPrompt extends base_1.Prompt {
|
|
10
|
-
constructor(options) {
|
|
11
|
-
super(options);
|
|
12
|
-
this.value = options.initial ?? options.min;
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "SliderPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return SliderPrompt;
|
|
13
9
|
}
|
|
10
|
+
});
|
|
11
|
+
const _ansi = require("../ansi");
|
|
12
|
+
const _base = require("../base");
|
|
13
|
+
const _theme = require("../theme");
|
|
14
|
+
const _symbols = require("../symbols");
|
|
15
|
+
let SliderPrompt = class SliderPrompt extends _base.Prompt {
|
|
14
16
|
render(_firstRender) {
|
|
15
17
|
const width = 20;
|
|
16
18
|
const range = this.options.max - this.options.min;
|
|
17
19
|
const ratio = (this.value - this.options.min) / range;
|
|
18
20
|
const pos = Math.round(ratio * width);
|
|
19
21
|
let bar = '';
|
|
20
|
-
for
|
|
21
|
-
if (i === pos)
|
|
22
|
-
|
|
23
|
-
else
|
|
24
|
-
bar += symbols_1.symbols.line;
|
|
22
|
+
for(let i = 0; i <= width; i++){
|
|
23
|
+
if (i === pos) bar += `${_theme.theme.main}O${_ansi.ANSI.RESET}`;
|
|
24
|
+
else bar += _symbols.symbols.line;
|
|
25
25
|
}
|
|
26
26
|
const unit = this.options.unit || '';
|
|
27
|
-
const output = `${
|
|
27
|
+
const output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} [${bar}] ${this.value}${unit}`;
|
|
28
28
|
this.renderFrame(output);
|
|
29
29
|
}
|
|
30
30
|
handleInput(char) {
|
|
@@ -33,13 +33,13 @@ class SliderPrompt extends base_1.Prompt {
|
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
35
|
const step = this.options.step || 1;
|
|
36
|
-
if (this.isLeft(char)) {
|
|
36
|
+
if (this.isLeft(char)) {
|
|
37
37
|
this.value = Math.max(this.options.min, this.value - step);
|
|
38
38
|
// Round to avoid float errors
|
|
39
39
|
this.value = Math.round(this.value * 10000) / 10000;
|
|
40
40
|
this.render(false);
|
|
41
41
|
}
|
|
42
|
-
if (this.isRight(char)) {
|
|
42
|
+
if (this.isRight(char)) {
|
|
43
43
|
this.value = Math.min(this.options.max, this.value + step);
|
|
44
44
|
// Round to avoid float errors
|
|
45
45
|
this.value = Math.round(this.value * 10000) / 10000;
|
|
@@ -49,10 +49,10 @@ class SliderPrompt extends base_1.Prompt {
|
|
|
49
49
|
handleMouse(event) {
|
|
50
50
|
if (event.action === 'scroll') {
|
|
51
51
|
const step = this.options.step || 1;
|
|
52
|
-
if (event.scroll === 'up') {
|
|
52
|
+
if (event.scroll === 'up') {
|
|
53
53
|
this.value = Math.min(this.options.max, this.value + step);
|
|
54
54
|
}
|
|
55
|
-
if (event.scroll === 'down') {
|
|
55
|
+
if (event.scroll === 'down') {
|
|
56
56
|
this.value = Math.max(this.options.min, this.value - step);
|
|
57
57
|
}
|
|
58
58
|
// Round to avoid float errors
|
|
@@ -60,5 +60,10 @@ class SliderPrompt extends base_1.Prompt {
|
|
|
60
60
|
this.render(false);
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
constructor(options){
|
|
64
|
+
super(options);
|
|
65
|
+
this.value = options.initial ?? options.min;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=slider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/slider.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SliderOptions, MouseEvent } from '../types';\n\n// --- Implementation: Slider Prompt ---\nexport class SliderPrompt extends Prompt<number, SliderOptions> {\n constructor(options: SliderOptions) {\n super(options);\n this.value = options.initial ?? options.min;\n }\n\n protected render(_firstRender: boolean) {\n const width = 20;\n const range = this.options.max - this.options.min;\n const ratio = (this.value - this.options.min) / range;\n const pos = Math.round(ratio * width);\n\n let bar = '';\n for (let i = 0; i <= width; i++) {\n if (i === pos) bar += `${theme.main}O${ANSI.RESET}`;\n else bar += symbols.line;\n }\n\n const unit = this.options.unit || '';\n const output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} [${bar}] ${this.value}${unit}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n this.submit(this.value);\n return;\n }\n\n const step = this.options.step || 1;\n\n if (this.isLeft(char)) { // Left\n this.value = Math.max(this.options.min, this.value - step);\n // Round to avoid float errors\n this.value = Math.round(this.value * 10000) / 10000;\n this.render(false);\n }\n if (this.isRight(char)) { // Right\n this.value = Math.min(this.options.max, this.value + step);\n // Round to avoid float errors\n this.value = Math.round(this.value * 10000) / 10000;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n const step = this.options.step || 1;\n\n if (event.scroll === 'up') { // Scroll Up -> Increase\n this.value = Math.min(this.options.max, this.value + step);\n }\n if (event.scroll === 'down') { // Scroll Down -> Decrease\n this.value = Math.max(this.options.min, this.value - step);\n }\n\n // Round to avoid float errors\n this.value = Math.round(this.value * 10000) / 10000;\n this.render(false);\n }\n }\n}\n"],"names":["SliderPrompt","Prompt","render","_firstRender","width","range","options","max","min","ratio","value","pos","Math","round","bar","i","theme","main","ANSI","RESET","symbols","line","unit","output","success","BOLD","title","message","renderFrame","handleInput","char","submit","step","isLeft","isRight","handleMouse","event","action","scroll","initial"],"mappings":"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"}
|