mepcli 2.0.0-beta.2 → 2.0.0-beta.4
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/LICENSE +1 -1
- package/README.md +20 -0
- package/dist/ansi.d.ts +36 -0
- package/dist/ansi.js +1 -0
- package/dist/base.d.ts +61 -0
- package/dist/base.js +1 -0
- package/dist/{src/core.js → core.d.ts} +181 -345
- package/dist/core.js +1 -0
- package/dist/data/countries.d.ts +2 -0
- package/dist/data/countries.js +1 -0
- package/dist/data/licenses.d.ts +2 -0
- package/dist/data/licenses.js +1 -0
- package/dist/highlight.d.ts +7 -0
- package/dist/highlight.js +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.js +1 -0
- package/dist/input.d.ts +14 -0
- package/dist/input.js +1 -0
- package/dist/pipeline.d.ts +90 -0
- package/dist/pipeline.js +1 -0
- package/dist/prompts/autocomplete.d.ts +22 -0
- package/dist/prompts/autocomplete.js +1 -0
- package/dist/prompts/box.d.ts +21 -0
- package/dist/prompts/box.js +4 -0
- package/dist/prompts/breadcrumb-search.d.ts +14 -0
- package/dist/prompts/breadcrumb-search.js +2 -0
- package/dist/prompts/breadcrumb.d.ts +32 -0
- package/dist/prompts/breadcrumb.js +3 -0
- package/dist/prompts/byte.d.ts +13 -0
- package/dist/prompts/byte.js +5 -0
- package/dist/prompts/calculator.d.ts +17 -0
- package/dist/prompts/calculator.js +3 -0
- package/dist/prompts/calendar.d.ts +33 -0
- package/dist/prompts/calendar.js +3 -0
- package/dist/prompts/checkbox.d.ts +13 -0
- package/dist/prompts/checkbox.js +2 -0
- package/dist/prompts/code.d.ts +19 -0
- package/dist/prompts/code.js +4 -0
- package/dist/prompts/color.d.ts +14 -0
- package/dist/prompts/color.js +10 -0
- package/dist/prompts/confirm.d.ts +8 -0
- package/dist/prompts/confirm.js +1 -0
- package/dist/prompts/connection-string.d.ts +18 -0
- package/dist/prompts/connection-string.js +1 -0
- package/dist/prompts/cron.d.ts +13 -0
- package/dist/prompts/cron.js +4 -0
- package/dist/prompts/curl-utils.d.ts +25 -0
- package/dist/prompts/curl-utils.js +1 -0
- package/dist/prompts/curl.d.ts +41 -0
- package/dist/prompts/curl.js +12 -0
- package/dist/prompts/data-inspector.d.ts +22 -0
- package/dist/prompts/data-inspector.js +5 -0
- package/dist/prompts/date.d.ts +12 -0
- package/dist/prompts/date.js +2 -0
- package/dist/prompts/dependency.d.ts +16 -0
- package/dist/prompts/dependency.js +3 -0
- package/dist/prompts/dial.d.ts +10 -0
- package/dist/prompts/dial.js +3 -0
- package/dist/prompts/diff.d.ts +10 -0
- package/dist/prompts/diff.js +10 -0
- package/dist/prompts/draw.d.ts +20 -0
- package/dist/prompts/draw.js +6 -0
- package/dist/prompts/editor.d.ts +14 -0
- package/dist/prompts/editor.js +2 -0
- package/dist/prompts/emoji.d.ts +18 -0
- package/dist/prompts/emoji.js +5 -0
- package/dist/prompts/exec.d.ts +17 -0
- package/dist/prompts/exec.js +1 -0
- package/dist/prompts/file.d.ts +21 -0
- package/dist/prompts/file.js +2 -0
- package/dist/prompts/form.d.ts +18 -0
- package/dist/prompts/form.js +1 -0
- package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
- package/dist/prompts/fuzzy-multi-column.js +2 -0
- package/dist/prompts/fuzzy.d.ts +12 -0
- package/dist/prompts/fuzzy.js +2 -0
- package/dist/prompts/gauge.d.ts +21 -0
- package/dist/prompts/gauge.js +4 -0
- package/dist/prompts/grid.d.ts +14 -0
- package/dist/prompts/grid.js +2 -0
- package/dist/prompts/heatmap.d.ts +13 -0
- package/dist/prompts/heatmap.js +2 -0
- package/dist/prompts/ip.d.ts +11 -0
- package/dist/prompts/ip.js +3 -0
- package/dist/prompts/kanban.d.ts +17 -0
- package/dist/prompts/kanban.js +4 -0
- package/dist/prompts/keypress.d.ts +7 -0
- package/dist/prompts/keypress.js +1 -0
- package/dist/prompts/license.d.ts +9 -0
- package/dist/prompts/license.js +13 -0
- package/dist/prompts/list.d.ts +9 -0
- package/dist/prompts/list.js +1 -0
- package/dist/prompts/map.d.ts +17 -0
- package/dist/prompts/map.js +5 -0
- package/dist/prompts/match.d.ts +19 -0
- package/dist/prompts/match.js +7 -0
- package/dist/prompts/miller.d.ts +15 -0
- package/dist/prompts/miller.js +2 -0
- package/dist/prompts/multi-column-select.d.ts +10 -0
- package/dist/prompts/multi-column-select.js +2 -0
- package/dist/prompts/multi-range.d.ts +9 -0
- package/dist/prompts/multi-range.js +3 -0
- package/dist/prompts/multi-select.d.ts +15 -0
- package/dist/prompts/multi-select.js +4 -0
- package/dist/prompts/number.d.ts +11 -0
- package/dist/prompts/number.js +2 -0
- package/dist/prompts/otp.d.ts +10 -0
- package/dist/prompts/otp.js +2 -0
- package/dist/prompts/pattern.d.ts +22 -0
- package/dist/prompts/pattern.js +4 -0
- package/dist/prompts/phone.d.ts +41 -0
- package/dist/prompts/phone.js +3 -0
- package/dist/prompts/quiz-select.d.ts +10 -0
- package/dist/prompts/quiz-select.js +7 -0
- package/dist/prompts/quiz-text.d.ts +11 -0
- package/dist/prompts/quiz-text.js +8 -0
- package/dist/prompts/range.d.ts +9 -0
- package/dist/prompts/range.js +1 -0
- package/dist/prompts/rating.d.ts +8 -0
- package/dist/prompts/rating.js +1 -0
- package/dist/prompts/regex.d.ts +13 -0
- package/dist/prompts/regex.js +5 -0
- package/dist/prompts/region.d.ts +11 -0
- package/dist/prompts/region.js +5 -0
- package/dist/prompts/schedule.d.ts +20 -0
- package/dist/prompts/schedule.js +5 -0
- package/dist/prompts/scroll.d.ts +13 -0
- package/dist/prompts/scroll.js +1 -0
- package/dist/prompts/seat.d.ts +17 -0
- package/dist/prompts/seat.js +5 -0
- package/dist/prompts/select-range.d.ts +8 -0
- package/dist/prompts/select-range.js +3 -0
- package/dist/prompts/select.d.ts +15 -0
- package/dist/prompts/select.js +2 -0
- package/dist/prompts/semver.d.ts +6 -0
- package/dist/prompts/semver.js +1 -0
- package/dist/prompts/shortcut.d.ts +9 -0
- package/dist/prompts/shortcut.js +1 -0
- package/dist/prompts/slider.d.ts +8 -0
- package/dist/prompts/slider.js +1 -0
- package/dist/prompts/slot.d.ts +16 -0
- package/dist/prompts/slot.js +8 -0
- package/dist/prompts/snippet.d.ts +19 -0
- package/dist/prompts/snippet.js +4 -0
- package/dist/prompts/sort-grid.d.ts +16 -0
- package/dist/prompts/sort-grid.js +2 -0
- package/dist/prompts/sort.d.ts +14 -0
- package/dist/prompts/sort.js +2 -0
- package/dist/prompts/spam.d.ts +17 -0
- package/dist/prompts/spam.js +2 -0
- package/dist/prompts/spreadsheet.d.ts +21 -0
- package/dist/prompts/spreadsheet.js +7 -0
- package/dist/prompts/table.d.ts +14 -0
- package/dist/prompts/table.js +3 -0
- package/dist/prompts/text.d.ts +17 -0
- package/dist/prompts/text.js +2 -0
- package/dist/prompts/time.d.ts +12 -0
- package/dist/prompts/time.js +2 -0
- package/dist/prompts/toggle.d.ts +8 -0
- package/dist/prompts/toggle.js +1 -0
- package/dist/prompts/transfer.d.ts +18 -0
- package/dist/prompts/transfer.js +5 -0
- package/dist/prompts/tree-select.d.ts +31 -0
- package/dist/prompts/tree-select.js +3 -0
- package/dist/prompts/tree.d.ts +20 -0
- package/dist/prompts/tree.js +3 -0
- package/dist/prompts/wait.d.ts +18 -0
- package/dist/prompts/wait.js +1 -0
- package/dist/spinner.d.ts +33 -0
- package/dist/spinner.js +3 -0
- package/dist/symbols.d.ts +33 -0
- package/dist/symbols.js +1 -0
- package/dist/tasks.d.ts +57 -0
- package/dist/tasks.js +1 -0
- package/dist/theme.d.ts +2 -0
- package/dist/theme.js +1 -0
- package/dist/types.d.ts +519 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +82 -0
- package/dist/utils.js +1 -0
- package/package.json +10 -10
- package/dist/src/ansi.js +0 -50
- package/dist/src/ansi.js.map +0 -1
- package/dist/src/base.js +0 -258
- package/dist/src/base.js.map +0 -1
- package/dist/src/core.js.map +0 -1
- package/dist/src/data/countries.js +0 -569
- package/dist/src/data/countries.js.map +0 -1
- package/dist/src/data/licenses.js +0 -480
- package/dist/src/data/licenses.js.map +0 -1
- package/dist/src/highlight.js +0 -185
- package/dist/src/highlight.js.map +0 -1
- package/dist/src/index.js +0 -66
- package/dist/src/index.js.map +0 -1
- package/dist/src/input.js +0 -158
- package/dist/src/input.js.map +0 -1
- package/dist/src/pipeline.js +0 -273
- package/dist/src/pipeline.js.map +0 -1
- package/dist/src/prompts/autocomplete.js +0 -171
- package/dist/src/prompts/autocomplete.js.map +0 -1
- package/dist/src/prompts/box.js +0 -225
- package/dist/src/prompts/box.js.map +0 -1
- package/dist/src/prompts/breadcrumb-search.js +0 -260
- package/dist/src/prompts/breadcrumb-search.js.map +0 -1
- package/dist/src/prompts/breadcrumb.js +0 -307
- package/dist/src/prompts/breadcrumb.js.map +0 -1
- package/dist/src/prompts/byte.js +0 -176
- package/dist/src/prompts/byte.js.map +0 -1
- package/dist/src/prompts/calculator.js +0 -243
- package/dist/src/prompts/calculator.js.map +0 -1
- package/dist/src/prompts/calendar.js +0 -430
- package/dist/src/prompts/calendar.js.map +0 -1
- package/dist/src/prompts/checkbox.js +0 -159
- package/dist/src/prompts/checkbox.js.map +0 -1
- package/dist/src/prompts/code.js +0 -271
- package/dist/src/prompts/code.js.map +0 -1
- package/dist/src/prompts/color.js +0 -165
- package/dist/src/prompts/color.js.map +0 -1
- package/dist/src/prompts/confirm.js +0 -55
- package/dist/src/prompts/confirm.js.map +0 -1
- package/dist/src/prompts/connection-string.js +0 -120
- package/dist/src/prompts/connection-string.js.map +0 -1
- package/dist/src/prompts/cron.js +0 -207
- package/dist/src/prompts/cron.js.map +0 -1
- package/dist/src/prompts/curl-utils.js +0 -71
- package/dist/src/prompts/curl-utils.js.map +0 -1
- package/dist/src/prompts/curl.js +0 -431
- package/dist/src/prompts/curl.js.map +0 -1
- package/dist/src/prompts/data-inspector.js +0 -261
- package/dist/src/prompts/data-inspector.js.map +0 -1
- package/dist/src/prompts/date.js +0 -185
- package/dist/src/prompts/date.js.map +0 -1
- package/dist/src/prompts/dependency.js +0 -283
- package/dist/src/prompts/dependency.js.map +0 -1
- package/dist/src/prompts/dial.js +0 -124
- package/dist/src/prompts/dial.js.map +0 -1
- package/dist/src/prompts/diff.js +0 -118
- package/dist/src/prompts/diff.js.map +0 -1
- package/dist/src/prompts/draw.js +0 -191
- package/dist/src/prompts/draw.js.map +0 -1
- package/dist/src/prompts/editor.js +0 -234
- package/dist/src/prompts/editor.js.map +0 -1
- package/dist/src/prompts/emoji.js +0 -226
- package/dist/src/prompts/emoji.js.map +0 -1
- package/dist/src/prompts/exec.js +0 -151
- package/dist/src/prompts/exec.js.map +0 -1
- package/dist/src/prompts/file.js +0 -217
- package/dist/src/prompts/file.js.map +0 -1
- package/dist/src/prompts/form.js +0 -241
- package/dist/src/prompts/form.js.map +0 -1
- package/dist/src/prompts/fuzzy-multi-column.js +0 -161
- package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
- package/dist/src/prompts/fuzzy.js +0 -147
- package/dist/src/prompts/fuzzy.js.map +0 -1
- package/dist/src/prompts/gauge.js +0 -137
- package/dist/src/prompts/gauge.js.map +0 -1
- package/dist/src/prompts/grid.js +0 -191
- package/dist/src/prompts/grid.js.map +0 -1
- package/dist/src/prompts/heatmap.js +0 -147
- package/dist/src/prompts/heatmap.js.map +0 -1
- package/dist/src/prompts/ip.js +0 -138
- package/dist/src/prompts/ip.js.map +0 -1
- package/dist/src/prompts/kanban.js +0 -233
- package/dist/src/prompts/kanban.js.map +0 -1
- package/dist/src/prompts/keypress.js +0 -54
- package/dist/src/prompts/keypress.js.map +0 -1
- package/dist/src/prompts/license.js +0 -144
- package/dist/src/prompts/license.js.map +0 -1
- package/dist/src/prompts/list.js +0 -124
- package/dist/src/prompts/list.js.map +0 -1
- package/dist/src/prompts/map.js +0 -262
- package/dist/src/prompts/map.js.map +0 -1
- package/dist/src/prompts/match.js +0 -271
- package/dist/src/prompts/match.js.map +0 -1
- package/dist/src/prompts/miller.js +0 -228
- package/dist/src/prompts/miller.js.map +0 -1
- package/dist/src/prompts/multi-column-select.js +0 -176
- package/dist/src/prompts/multi-column-select.js.map +0 -1
- package/dist/src/prompts/multi-range.js +0 -189
- package/dist/src/prompts/multi-range.js.map +0 -1
- package/dist/src/prompts/multi-select.js +0 -183
- package/dist/src/prompts/multi-select.js.map +0 -1
- package/dist/src/prompts/number.js +0 -166
- package/dist/src/prompts/number.js.map +0 -1
- package/dist/src/prompts/otp.js +0 -107
- package/dist/src/prompts/otp.js.map +0 -1
- package/dist/src/prompts/pattern.js +0 -252
- package/dist/src/prompts/pattern.js.map +0 -1
- package/dist/src/prompts/phone.js +0 -398
- package/dist/src/prompts/phone.js.map +0 -1
- package/dist/src/prompts/quiz-select.js +0 -114
- package/dist/src/prompts/quiz-select.js.map +0 -1
- package/dist/src/prompts/quiz-text.js +0 -98
- package/dist/src/prompts/quiz-text.js.map +0 -1
- package/dist/src/prompts/range.js +0 -164
- package/dist/src/prompts/range.js.map +0 -1
- package/dist/src/prompts/rating.js +0 -83
- package/dist/src/prompts/rating.js.map +0 -1
- package/dist/src/prompts/regex.js +0 -145
- package/dist/src/prompts/regex.js.map +0 -1
- package/dist/src/prompts/region.js +0 -170
- package/dist/src/prompts/region.js.map +0 -1
- package/dist/src/prompts/schedule.js +0 -270
- package/dist/src/prompts/schedule.js.map +0 -1
- package/dist/src/prompts/scroll.js +0 -155
- package/dist/src/prompts/scroll.js.map +0 -1
- package/dist/src/prompts/seat.js +0 -164
- package/dist/src/prompts/seat.js.map +0 -1
- package/dist/src/prompts/select-range.js +0 -148
- package/dist/src/prompts/select-range.js.map +0 -1
- package/dist/src/prompts/select.js +0 -163
- package/dist/src/prompts/select.js.map +0 -1
- package/dist/src/prompts/semver.js +0 -43
- package/dist/src/prompts/semver.js.map +0 -1
- package/dist/src/prompts/shortcut.js +0 -133
- package/dist/src/prompts/shortcut.js.map +0 -1
- package/dist/src/prompts/slider.js +0 -69
- package/dist/src/prompts/slider.js.map +0 -1
- package/dist/src/prompts/slot.js +0 -117
- package/dist/src/prompts/slot.js.map +0 -1
- package/dist/src/prompts/snippet.js +0 -228
- package/dist/src/prompts/snippet.js.map +0 -1
- package/dist/src/prompts/sort-grid.js +0 -151
- package/dist/src/prompts/sort-grid.js.map +0 -1
- package/dist/src/prompts/sort.js +0 -166
- package/dist/src/prompts/sort.js.map +0 -1
- package/dist/src/prompts/spam.js +0 -80
- package/dist/src/prompts/spam.js.map +0 -1
- package/dist/src/prompts/spreadsheet.js +0 -240
- package/dist/src/prompts/spreadsheet.js.map +0 -1
- package/dist/src/prompts/table.js +0 -120
- package/dist/src/prompts/table.js.map +0 -1
- package/dist/src/prompts/text.js +0 -317
- package/dist/src/prompts/text.js.map +0 -1
- package/dist/src/prompts/time.js +0 -211
- package/dist/src/prompts/time.js.map +0 -1
- package/dist/src/prompts/toggle.js +0 -53
- package/dist/src/prompts/toggle.js.map +0 -1
- package/dist/src/prompts/transfer.js +0 -207
- package/dist/src/prompts/transfer.js.map +0 -1
- package/dist/src/prompts/tree-select.js +0 -270
- package/dist/src/prompts/tree-select.js.map +0 -1
- package/dist/src/prompts/tree.js +0 -233
- package/dist/src/prompts/tree.js.map +0 -1
- package/dist/src/prompts/wait.js +0 -79
- package/dist/src/prompts/wait.js.map +0 -1
- package/dist/src/spinner.js +0 -105
- package/dist/src/spinner.js.map +0 -1
- package/dist/src/symbols.js +0 -66
- package/dist/src/symbols.js.map +0 -1
- package/dist/src/tasks.js +0 -231
- package/dist/src/tasks.js.map +0 -1
- package/dist/src/theme.js +0 -29
- package/dist/src/theme.js.map +0 -1
- package/dist/src/types.js +0 -8
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.js +0 -480
- package/dist/src/utils.js.map +0 -1
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
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;
|
|
25
|
-
}
|
|
26
|
-
return obj;
|
|
27
|
-
}
|
|
28
|
-
let SelectPrompt = class SelectPrompt extends _base.Prompt {
|
|
29
|
-
isSeparator(item) {
|
|
30
|
-
return item && 'separator' in item;
|
|
31
|
-
}
|
|
32
|
-
findNextSelectableIndex(currentIndex, direction) {
|
|
33
|
-
let nextIndex = currentIndex + direction;
|
|
34
|
-
const choices = this.getFilteredChoices();
|
|
35
|
-
// Loop around logic
|
|
36
|
-
if (nextIndex < 0) nextIndex = choices.length - 1;
|
|
37
|
-
if (nextIndex >= choices.length) nextIndex = 0;
|
|
38
|
-
if (choices.length === 0) return 0;
|
|
39
|
-
// Safety check to prevent infinite loop if all are separators (shouldn't happen in practice)
|
|
40
|
-
let count = 0;
|
|
41
|
-
while(this.isSeparator(choices[nextIndex]) && count < choices.length){
|
|
42
|
-
nextIndex += direction;
|
|
43
|
-
if (nextIndex < 0) nextIndex = choices.length - 1;
|
|
44
|
-
if (nextIndex >= choices.length) nextIndex = 0;
|
|
45
|
-
count++;
|
|
46
|
-
}
|
|
47
|
-
return nextIndex;
|
|
48
|
-
}
|
|
49
|
-
getFilteredChoices() {
|
|
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
|
|
53
|
-
return c.title.toLowerCase().includes(this.searchBuffer.toLowerCase());
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
render(_firstRender) {
|
|
57
|
-
let output = '';
|
|
58
|
-
const choices = this.getFilteredChoices();
|
|
59
|
-
// Adjust Scroll Top
|
|
60
|
-
if (this.selectedIndex < this.scrollTop) {
|
|
61
|
-
this.scrollTop = this.selectedIndex;
|
|
62
|
-
} else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
|
|
63
|
-
this.scrollTop = this.selectedIndex - this.pageSize + 1;
|
|
64
|
-
}
|
|
65
|
-
// Handle Filtering Edge Case: if list shrinks, scrollTop might be too high
|
|
66
|
-
if (this.scrollTop > choices.length - 1) {
|
|
67
|
-
this.scrollTop = Math.max(0, choices.length - this.pageSize);
|
|
68
|
-
}
|
|
69
|
-
// Header
|
|
70
|
-
const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Filter: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
|
|
71
|
-
// Note: We avoid ERASE_LINE here because renderFrame handles full redraw
|
|
72
|
-
output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr}\n`;
|
|
73
|
-
if (choices.length === 0) {
|
|
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 {
|
|
79
|
-
const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
80
|
-
visibleChoices.forEach((choice, index)=>{
|
|
81
|
-
const actualIndex = this.scrollTop + index;
|
|
82
|
-
if (index > 0) output += '\n'; // Separator between items
|
|
83
|
-
if (this.isSeparator(choice)) {
|
|
84
|
-
output += ` ${_ansi.ANSI.DIM}${choice.text || _symbols.symbols.line.repeat(8)}${_ansi.ANSI.RESET}`;
|
|
85
|
-
} else {
|
|
86
|
-
if (actualIndex === this.selectedIndex) {
|
|
87
|
-
output += `${_theme.theme.main}${_symbols.symbols.pointer} ${choice.title}${_ansi.ANSI.RESET}`;
|
|
88
|
-
} else {
|
|
89
|
-
output += ` ${choice.title}`;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
// No manual printing. Pass to renderFrame.
|
|
95
|
-
this.renderFrame(output);
|
|
96
|
-
}
|
|
97
|
-
handleInput(char) {
|
|
98
|
-
const choices = this.getFilteredChoices();
|
|
99
|
-
if (char === '\r' || char === '\n') {
|
|
100
|
-
if (choices.length === 0) {
|
|
101
|
-
this.searchBuffer = '';
|
|
102
|
-
this.selectedIndex = this.findNextSelectableIndex(-1, 1);
|
|
103
|
-
this.render(false);
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
const choice = choices[this.selectedIndex];
|
|
107
|
-
if (this.isSeparator(choice)) return;
|
|
108
|
-
this.submit(choice.value);
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (this.isUp(char)) {
|
|
112
|
-
if (choices.length > 0) {
|
|
113
|
-
this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);
|
|
114
|
-
this.render(false);
|
|
115
|
-
}
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
if (this.isDown(char)) {
|
|
119
|
-
if (choices.length > 0) {
|
|
120
|
-
this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);
|
|
121
|
-
this.render(false);
|
|
122
|
-
}
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
// Backspace
|
|
126
|
-
if (char === '\u0008' || char === '\x7f') {
|
|
127
|
-
if (this.searchBuffer.length > 0) {
|
|
128
|
-
this.searchBuffer = this.searchBuffer.slice(0, -1);
|
|
129
|
-
this.selectedIndex = 0; // Reset selection
|
|
130
|
-
this.selectedIndex = this.findNextSelectableIndex(-1, 1);
|
|
131
|
-
this.render(false);
|
|
132
|
-
}
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
// Typing
|
|
136
|
-
if (char.length === 1 && !/^[\x00-\x1F]/.test(char)) {
|
|
137
|
-
this.searchBuffer += char;
|
|
138
|
-
this.selectedIndex = 0; // Reset selection
|
|
139
|
-
this.selectedIndex = this.findNextSelectableIndex(-1, 1);
|
|
140
|
-
this.render(false);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
handleMouse(event) {
|
|
144
|
-
const choices = this.getFilteredChoices();
|
|
145
|
-
if (choices.length === 0) return;
|
|
146
|
-
if (event.action === 'scroll') {
|
|
147
|
-
if (event.scroll === 'up') {
|
|
148
|
-
this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, -1);
|
|
149
|
-
this.render(false);
|
|
150
|
-
} else if (event.scroll === 'down') {
|
|
151
|
-
this.selectedIndex = this.findNextSelectableIndex(this.selectedIndex, 1);
|
|
152
|
-
this.render(false);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
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){
|
|
19
|
-
const { currentVersion, ...baseOptions } = options;
|
|
20
|
-
const validVersion = SemVerPrompt.parseVersion(currentVersion) || '0.0.1';
|
|
21
|
-
const [major, minor, patch] = validVersion.split('.').map(Number);
|
|
22
|
-
const choices = [
|
|
23
|
-
{
|
|
24
|
-
title: `Patch (${validVersion} -> ${major}.${minor}.${patch + 1})`,
|
|
25
|
-
value: `${major}.${minor}.${patch + 1}`
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
title: `Minor (${validVersion} -> ${major}.${minor + 1}.0)`,
|
|
29
|
-
value: `${major}.${minor + 1}.0`
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
title: `Major (${validVersion} -> ${major + 1}.0.0)`,
|
|
33
|
-
value: `${major + 1}.0.0`
|
|
34
|
-
}
|
|
35
|
-
];
|
|
36
|
-
super({
|
|
37
|
-
...baseOptions,
|
|
38
|
-
choices
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=semver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,133 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "SliderPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return SliderPrompt;
|
|
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 {
|
|
16
|
-
render(_firstRender) {
|
|
17
|
-
const width = 20;
|
|
18
|
-
const range = this.options.max - this.options.min;
|
|
19
|
-
const ratio = (this.value - this.options.min) / range;
|
|
20
|
-
const pos = Math.round(ratio * width);
|
|
21
|
-
let bar = '';
|
|
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
|
-
}
|
|
26
|
-
const unit = this.options.unit || '';
|
|
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
|
-
this.renderFrame(output);
|
|
29
|
-
}
|
|
30
|
-
handleInput(char) {
|
|
31
|
-
if (char === '\r' || char === '\n') {
|
|
32
|
-
this.submit(this.value);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
const step = this.options.step || 1;
|
|
36
|
-
if (this.isLeft(char)) {
|
|
37
|
-
this.value = Math.max(this.options.min, this.value - step);
|
|
38
|
-
// Round to avoid float errors
|
|
39
|
-
this.value = Math.round(this.value * 10000) / 10000;
|
|
40
|
-
this.render(false);
|
|
41
|
-
}
|
|
42
|
-
if (this.isRight(char)) {
|
|
43
|
-
this.value = Math.min(this.options.max, this.value + step);
|
|
44
|
-
// Round to avoid float errors
|
|
45
|
-
this.value = Math.round(this.value * 10000) / 10000;
|
|
46
|
-
this.render(false);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
handleMouse(event) {
|
|
50
|
-
if (event.action === 'scroll') {
|
|
51
|
-
const step = this.options.step || 1;
|
|
52
|
-
if (event.scroll === 'up') {
|
|
53
|
-
this.value = Math.min(this.options.max, this.value + step);
|
|
54
|
-
}
|
|
55
|
-
if (event.scroll === 'down') {
|
|
56
|
-
this.value = Math.max(this.options.min, this.value - step);
|
|
57
|
-
}
|
|
58
|
-
// Round to avoid float errors
|
|
59
|
-
this.value = Math.round(this.value * 10000) / 10000;
|
|
60
|
-
this.render(false);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
constructor(options){
|
|
64
|
-
super(options);
|
|
65
|
-
this.value = options.initial ?? options.min;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
//# sourceMappingURL=slider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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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"}
|
package/dist/src/prompts/slot.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "SlotPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return SlotPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _ansi = require("../ansi");
|
|
12
|
-
const _base = require("../base");
|
|
13
|
-
const _theme = require("../theme");
|
|
14
|
-
const _symbols = require("../symbols");
|
|
15
|
-
const _utils = require("../utils");
|
|
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
|
-
});
|
|
24
|
-
} else {
|
|
25
|
-
obj[key] = value;
|
|
26
|
-
}
|
|
27
|
-
return obj;
|
|
28
|
-
}
|
|
29
|
-
let SlotPrompt = class SlotPrompt extends _base.Prompt {
|
|
30
|
-
spin() {
|
|
31
|
-
if (!this.isSpinning) return;
|
|
32
|
-
this.selectedIndex = (this.selectedIndex + 1) % this.options.choices.length;
|
|
33
|
-
this.render(false);
|
|
34
|
-
if (this.isStopping) {
|
|
35
|
-
// Deceleration physics
|
|
36
|
-
this.spinSpeed = Math.floor(this.spinSpeed * 1.1);
|
|
37
|
-
if (this.spinSpeed > 400) {
|
|
38
|
-
this.isSpinning = false;
|
|
39
|
-
this.finish();
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
this.spinTimer = setTimeout(()=>this.spin(), this.spinSpeed);
|
|
44
|
-
}
|
|
45
|
-
finish() {
|
|
46
|
-
if (this.spinTimer) clearTimeout(this.spinTimer);
|
|
47
|
-
this.submit(this.options.choices[this.selectedIndex]);
|
|
48
|
-
}
|
|
49
|
-
handleInput(char, _key) {
|
|
50
|
-
if (char === ' ' || char === '\r' || char === '\n') {
|
|
51
|
-
if (!this.isSpinning) {
|
|
52
|
-
// Start spinning
|
|
53
|
-
this.isSpinning = true;
|
|
54
|
-
this.isStopping = false;
|
|
55
|
-
this.spinSpeed = 50; // Reset speed
|
|
56
|
-
this.spin();
|
|
57
|
-
} else if (!this.isStopping) {
|
|
58
|
-
// Initiate stop sequence
|
|
59
|
-
this.isStopping = true;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
render(_firstRender) {
|
|
64
|
-
let output = '';
|
|
65
|
-
// Header
|
|
66
|
-
output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
67
|
-
// Calculate dynamic width
|
|
68
|
-
const maxLen = Math.max(...this.options.choices.map((c)=>(0, _utils.stringWidth)(c)));
|
|
69
|
-
const boxWidth = Math.max(20, maxLen + 6);
|
|
70
|
-
const border = _symbols.symbols.line.repeat(boxWidth - 2);
|
|
71
|
-
output += `┌${border}┐\n`;
|
|
72
|
-
const centerRow = Math.floor(this.rows / 2);
|
|
73
|
-
for(let i = 0; i < this.rows; i++){
|
|
74
|
-
const offset = i - centerRow;
|
|
75
|
-
let index = (this.selectedIndex + offset) % this.options.choices.length;
|
|
76
|
-
if (index < 0) index += this.options.choices.length;
|
|
77
|
-
const item = this.options.choices[index];
|
|
78
|
-
const content = this.truncate(item, boxWidth - 4);
|
|
79
|
-
const contentWidth = (0, _utils.stringWidth)(content);
|
|
80
|
-
const padding = boxWidth - 4 - contentWidth;
|
|
81
|
-
const leftPad = ' '.repeat(Math.floor(padding / 2));
|
|
82
|
-
const rightPad = ' '.repeat(Math.ceil(padding / 2));
|
|
83
|
-
const lineContent = `${leftPad}${content}${rightPad}`;
|
|
84
|
-
if (i === centerRow) {
|
|
85
|
-
// Highlight
|
|
86
|
-
output += `│ ${_theme.theme.main}${_ansi.ANSI.REVERSE} ${lineContent} ${_ansi.ANSI.RESET} │ ${_theme.theme.main}◄${_ansi.ANSI.RESET}\n`;
|
|
87
|
-
} else {
|
|
88
|
-
output += `│ ${lineContent} │\n`;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
output += `└${border}┘`;
|
|
92
|
-
// Instructions
|
|
93
|
-
if (!this.isSpinning) {
|
|
94
|
-
output += `\n${_theme.theme.muted}(Press Space/Enter to Spin)${_ansi.ANSI.RESET}`;
|
|
95
|
-
} else if (this.isStopping) {
|
|
96
|
-
output += `\n${_theme.theme.muted}(Stopping...)${_ansi.ANSI.RESET}`;
|
|
97
|
-
} else {
|
|
98
|
-
output += `\n${_theme.theme.muted}(Press Space/Enter to Stop)${_ansi.ANSI.RESET}`;
|
|
99
|
-
}
|
|
100
|
-
this.renderFrame(output);
|
|
101
|
-
}
|
|
102
|
-
// Override cleanup to ensure timer is cleared if user Ctrl+C
|
|
103
|
-
cleanup() {
|
|
104
|
-
if (this.spinTimer) clearTimeout(this.spinTimer);
|
|
105
|
-
super.cleanup();
|
|
106
|
-
}
|
|
107
|
-
constructor(options){
|
|
108
|
-
super(options), _define_property(this, "selectedIndex", void 0), _define_property(this, "isSpinning", false), _define_property(this, "isStopping", false), _define_property(this, "spinSpeed", 50) // Initial speed (ms)
|
|
109
|
-
, _define_property(this, "spinTimer", void 0), _define_property(this, "rows", void 0);
|
|
110
|
-
this.rows = options.rows || 3;
|
|
111
|
-
// Ensure rows is odd to have a center
|
|
112
|
-
if (this.rows % 2 === 0) this.rows++;
|
|
113
|
-
this.selectedIndex = options.initial || 0;
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
//# sourceMappingURL=slot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/slot.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SlotOptions } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class SlotPrompt extends Prompt<string, SlotOptions> {\n private selectedIndex: number;\n private isSpinning: boolean = false;\n private isStopping: boolean = false;\n private spinSpeed: number = 50; // Initial speed (ms)\n private spinTimer?: NodeJS.Timeout;\n private rows: number;\n\n constructor(options: SlotOptions) {\n super(options);\n this.rows = options.rows || 3;\n // Ensure rows is odd to have a center\n if (this.rows % 2 === 0) this.rows++;\n this.selectedIndex = options.initial || 0;\n }\n\n private spin() {\n if (!this.isSpinning) return;\n\n this.selectedIndex = (this.selectedIndex + 1) % this.options.choices.length;\n this.render(false);\n\n if (this.isStopping) {\n // Deceleration physics\n this.spinSpeed = Math.floor(this.spinSpeed * 1.1);\n if (this.spinSpeed > 400) {\n this.isSpinning = false;\n this.finish();\n return;\n }\n }\n\n this.spinTimer = setTimeout(() => this.spin(), this.spinSpeed);\n }\n\n private finish() {\n if (this.spinTimer) clearTimeout(this.spinTimer);\n this.submit(this.options.choices[this.selectedIndex]);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (char === ' ' || char === '\\r' || char === '\\n') {\n if (!this.isSpinning) {\n // Start spinning\n this.isSpinning = true;\n this.isStopping = false;\n this.spinSpeed = 50; // Reset speed\n this.spin();\n } else if (!this.isStopping) {\n // Initiate stop sequence\n this.isStopping = true;\n }\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Header\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Calculate dynamic width\n const maxLen = Math.max(...this.options.choices.map(c => stringWidth(c)));\n const boxWidth = Math.max(20, maxLen + 6);\n\n const border = symbols.line.repeat(boxWidth - 2);\n output += `┌${border}┐\\n`;\n\n const centerRow = Math.floor(this.rows / 2);\n\n for (let i = 0; i < this.rows; i++) {\n const offset = i - centerRow;\n let index = (this.selectedIndex + offset) % this.options.choices.length;\n if (index < 0) index += this.options.choices.length;\n\n const item = this.options.choices[index];\n const content = this.truncate(item, boxWidth - 4);\n const contentWidth = stringWidth(content);\n const padding = boxWidth - 4 - contentWidth;\n const leftPad = ' '.repeat(Math.floor(padding / 2));\n const rightPad = ' '.repeat(Math.ceil(padding / 2));\n\n const lineContent = `${leftPad}${content}${rightPad}`;\n\n if (i === centerRow) {\n // Highlight\n output += `│ ${theme.main}${ANSI.REVERSE} ${lineContent} ${ANSI.RESET} │ ${theme.main}◄${ANSI.RESET}\\n`;\n } else {\n output += `│ ${lineContent} │\\n`;\n }\n }\n\n output += `└${border}┘`;\n\n // Instructions\n if (!this.isSpinning) {\n output += `\\n${theme.muted}(Press Space/Enter to Spin)${ANSI.RESET}`;\n } else if (this.isStopping) {\n output += `\\n${theme.muted}(Stopping...)${ANSI.RESET}`;\n } else {\n output += `\\n${theme.muted}(Press Space/Enter to Stop)${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n // Override cleanup to ensure timer is cleared if user Ctrl+C\n protected cleanup() {\n if (this.spinTimer) clearTimeout(this.spinTimer);\n super.cleanup();\n }\n}\n"],"names":["SlotPrompt","Prompt","spin","isSpinning","selectedIndex","options","choices","length","render","isStopping","spinSpeed","Math","floor","finish","spinTimer","setTimeout","clearTimeout","submit","handleInput","char","_key","_firstRender","output","theme","success","ANSI","RESET","BOLD","title","message","maxLen","max","map","c","stringWidth","boxWidth","border","symbols","line","repeat","centerRow","rows","i","offset","index","item","content","truncate","contentWidth","padding","leftPad","rightPad","ceil","lineContent","main","REVERSE","muted","renderFrame","cleanup","initial"],"mappings":"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"}
|