mepcli 2.0.0-beta.2 → 2.0.0-beta.3
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/dist/ansi.d.ts +36 -0
- package/dist/ansi.js +1 -0
- package/dist/base.d.ts +60 -0
- package/dist/base.js +1 -0
- package/dist/{src/core.js → core.d.ts} +175 -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 +48 -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 +503 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +81 -0
- package/dist/utils.js +1 -0
- package/package.json +8 -9
- 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,176 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "MultiColumnSelectPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return MultiColumnSelectPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _select = require("./select");
|
|
12
|
-
const _theme = require("../theme");
|
|
13
|
-
const _ansi = require("../ansi");
|
|
14
|
-
const _utils = require("../utils");
|
|
15
|
-
const _symbols = require("../symbols");
|
|
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 MultiColumnSelectPrompt = class MultiColumnSelectPrompt extends _select.SelectPrompt {
|
|
30
|
-
calculateLayout() {
|
|
31
|
-
const termWidth = process.stdout.columns || 80;
|
|
32
|
-
const choices = this.options.choices.filter((c)=>!this.isSeparator(c));
|
|
33
|
-
if (choices.length === 0) {
|
|
34
|
-
this.cols = 1;
|
|
35
|
-
this.colWidth = termWidth;
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
// Calculate max item width
|
|
39
|
-
let maxLen = 0;
|
|
40
|
-
for (const c of choices){
|
|
41
|
-
const len = (0, _utils.stringWidth)(c.title);
|
|
42
|
-
if (len > maxLen) maxLen = len;
|
|
43
|
-
}
|
|
44
|
-
// Add padding (pointer + space + item + space)
|
|
45
|
-
const itemWidth = maxLen + 4;
|
|
46
|
-
if (typeof this.options.cols === 'number') {
|
|
47
|
-
this.cols = this.options.cols;
|
|
48
|
-
} else {
|
|
49
|
-
// Auto
|
|
50
|
-
this.cols = Math.floor(termWidth / itemWidth);
|
|
51
|
-
if (this.cols < 1) this.cols = 1;
|
|
52
|
-
}
|
|
53
|
-
// Final column width
|
|
54
|
-
this.colWidth = Math.floor(termWidth / this.cols);
|
|
55
|
-
}
|
|
56
|
-
render(_firstRender) {
|
|
57
|
-
let output = '';
|
|
58
|
-
const choices = this.getFilteredChoices();
|
|
59
|
-
// Header
|
|
60
|
-
const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Filter: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
|
|
61
|
-
output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr}\n`;
|
|
62
|
-
if (choices.length === 0) {
|
|
63
|
-
output += ` ${_theme.theme.muted}No results found${_ansi.ANSI.RESET}`;
|
|
64
|
-
this.renderFrame(output);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
// Grid Render
|
|
68
|
-
const totalRows = Math.ceil(choices.length / this.cols);
|
|
69
|
-
// Adjust Scroll
|
|
70
|
-
const currentRow = Math.floor(this.selectedIndex / this.cols);
|
|
71
|
-
if (currentRow < this.scrollTop) {
|
|
72
|
-
this.scrollTop = currentRow;
|
|
73
|
-
} else if (currentRow >= this.scrollTop + this.pageSize) {
|
|
74
|
-
this.scrollTop = currentRow - this.pageSize + 1;
|
|
75
|
-
}
|
|
76
|
-
// Edge case: if list shrinks
|
|
77
|
-
if (this.scrollTop > totalRows - 1) {
|
|
78
|
-
this.scrollTop = Math.max(0, totalRows - this.pageSize);
|
|
79
|
-
}
|
|
80
|
-
const startRow = this.scrollTop;
|
|
81
|
-
const endRow = Math.min(totalRows, startRow + this.pageSize);
|
|
82
|
-
for(let r = startRow; r < endRow; r++){
|
|
83
|
-
let rowStr = '';
|
|
84
|
-
for(let c = 0; c < this.cols; c++){
|
|
85
|
-
const idx = r * this.cols + c;
|
|
86
|
-
if (idx >= choices.length) break;
|
|
87
|
-
const choice = choices[idx];
|
|
88
|
-
// Truncate if needed
|
|
89
|
-
let title = choice.title || '';
|
|
90
|
-
if ((0, _utils.stringWidth)(title) > this.colWidth - 3) {
|
|
91
|
-
title = title.slice(0, this.colWidth - 4) + '…';
|
|
92
|
-
}
|
|
93
|
-
let cellContent = '';
|
|
94
|
-
if (idx === this.selectedIndex) {
|
|
95
|
-
cellContent = `${_theme.theme.main}${_symbols.symbols.pointer} ${title}${_ansi.ANSI.RESET}`;
|
|
96
|
-
} else {
|
|
97
|
-
cellContent = ` ${title}`;
|
|
98
|
-
}
|
|
99
|
-
// Pad cell to colWidth
|
|
100
|
-
const currentWidth = (0, _utils.stringWidth)(this.stripAnsi(cellContent));
|
|
101
|
-
const padding = Math.max(0, this.colWidth - currentWidth);
|
|
102
|
-
// Add cell to row
|
|
103
|
-
rowStr += cellContent + ' '.repeat(padding);
|
|
104
|
-
}
|
|
105
|
-
output += rowStr + '\n';
|
|
106
|
-
}
|
|
107
|
-
// Remove trailing newline
|
|
108
|
-
if (output.endsWith('\n')) output = output.slice(0, -1);
|
|
109
|
-
this.renderFrame(output);
|
|
110
|
-
}
|
|
111
|
-
handleInput(char) {
|
|
112
|
-
const choices = this.getFilteredChoices();
|
|
113
|
-
if (char === '\r' || char === '\n') {
|
|
114
|
-
if (choices.length > 0) {
|
|
115
|
-
this.submit(choices[this.selectedIndex].value);
|
|
116
|
-
}
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
if (this.isUp(char)) {
|
|
120
|
-
const newIndex = this.selectedIndex - this.cols;
|
|
121
|
-
if (newIndex >= 0) {
|
|
122
|
-
this.selectedIndex = newIndex;
|
|
123
|
-
}
|
|
124
|
-
this.render(false);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
if (this.isDown(char)) {
|
|
128
|
-
const newIndex = this.selectedIndex + this.cols;
|
|
129
|
-
if (newIndex < choices.length) {
|
|
130
|
-
this.selectedIndex = newIndex;
|
|
131
|
-
}
|
|
132
|
-
this.render(false);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
if (this.isLeft(char)) {
|
|
136
|
-
if (this.selectedIndex > 0) {
|
|
137
|
-
this.selectedIndex--;
|
|
138
|
-
} else {
|
|
139
|
-
this.selectedIndex = choices.length - 1;
|
|
140
|
-
}
|
|
141
|
-
this.render(false);
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
if (this.isRight(char)) {
|
|
145
|
-
if (this.selectedIndex < choices.length - 1) {
|
|
146
|
-
this.selectedIndex++;
|
|
147
|
-
} else {
|
|
148
|
-
this.selectedIndex = 0;
|
|
149
|
-
}
|
|
150
|
-
this.render(false);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
// Backspace
|
|
154
|
-
if (char === '\u0008' || char === '\x7f') {
|
|
155
|
-
if (this.searchBuffer.length > 0) {
|
|
156
|
-
this.searchBuffer = this.searchBuffer.slice(0, -1);
|
|
157
|
-
this.selectedIndex = 0;
|
|
158
|
-
this.calculateLayout();
|
|
159
|
-
this.render(false);
|
|
160
|
-
}
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
// Typing
|
|
164
|
-
if (char.length === 1 && !/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
|
|
165
|
-
this.searchBuffer += char;
|
|
166
|
-
this.selectedIndex = 0;
|
|
167
|
-
this.render(false);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
constructor(options){
|
|
171
|
-
super(options), _define_property(this, "cols", 1), _define_property(this, "colWidth", 0);
|
|
172
|
-
this.calculateLayout();
|
|
173
|
-
}
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
//# sourceMappingURL=multi-column-select.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/multi-column-select.ts"],"sourcesContent":["import { SelectPrompt } from './select';\nimport { MultiColumnSelectOptions, SelectChoice } from '../types';\nimport { theme } from '../theme';\nimport { ANSI } from '../ansi';\nimport { stringWidth } from '../utils';\nimport { symbols } from '../symbols';\n\nexport class MultiColumnSelectPrompt<V> extends SelectPrompt<V, MultiColumnSelectOptions<V>> {\n protected cols: number = 1;\n protected colWidth: number = 0;\n\n constructor(options: MultiColumnSelectOptions<V>) {\n super(options);\n this.calculateLayout();\n }\n\n private calculateLayout() {\n const termWidth = process.stdout.columns || 80;\n const choices = this.options.choices.filter(c => !this.isSeparator(c)) as SelectChoice<V>[];\n\n if (choices.length === 0) {\n this.cols = 1;\n this.colWidth = termWidth;\n return;\n }\n\n // Calculate max item width\n let maxLen = 0;\n for (const c of choices) {\n const len = stringWidth(c.title);\n if (len > maxLen) maxLen = len;\n }\n\n // Add padding (pointer + space + item + space)\n const itemWidth = maxLen + 4;\n\n if (typeof this.options.cols === 'number') {\n this.cols = this.options.cols;\n } else {\n // Auto\n this.cols = Math.floor(termWidth / itemWidth);\n if (this.cols < 1) this.cols = 1;\n }\n\n // Final column width\n this.colWidth = Math.floor(termWidth / this.cols);\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n const choices = this.getFilteredChoices();\n\n // Header\n const searchStr = this.searchBuffer ? ` ${theme.muted}(Filter: ${this.searchBuffer})${ANSI.RESET}` : '';\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 this.renderFrame(output);\n return;\n }\n\n // Grid Render\n const totalRows = Math.ceil(choices.length / this.cols);\n\n // Adjust Scroll\n const currentRow = Math.floor(this.selectedIndex / this.cols);\n if (currentRow < this.scrollTop) {\n this.scrollTop = currentRow;\n } else if (currentRow >= this.scrollTop + this.pageSize) {\n this.scrollTop = currentRow - this.pageSize + 1;\n }\n\n // Edge case: if list shrinks\n if (this.scrollTop > totalRows - 1) {\n this.scrollTop = Math.max(0, totalRows - this.pageSize);\n }\n\n const startRow = this.scrollTop;\n const endRow = Math.min(totalRows, startRow + this.pageSize);\n\n for (let r = startRow; r < endRow; r++) {\n let rowStr = '';\n for (let c = 0; c < this.cols; c++) {\n const idx = r * this.cols + c;\n if (idx >= choices.length) break;\n\n const choice = choices[idx];\n\n // Truncate if needed\n let title = (choice as any).title || '';\n if (stringWidth(title) > this.colWidth - 3) {\n title = title.slice(0, this.colWidth - 4) + '…';\n }\n\n let cellContent = '';\n if (idx === this.selectedIndex) {\n cellContent = `${theme.main}${symbols.pointer} ${title}${ANSI.RESET}`;\n } else {\n cellContent = ` ${title}`;\n }\n\n // Pad cell to colWidth\n const currentWidth = stringWidth(this.stripAnsi(cellContent));\n const padding = Math.max(0, this.colWidth - currentWidth);\n\n // Add cell to row\n rowStr += cellContent + ' '.repeat(padding);\n }\n output += rowStr + '\\n';\n }\n\n // Remove trailing newline\n if (output.endsWith('\\n')) output = output.slice(0, -1);\n\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.submit((choices[this.selectedIndex] as any).value);\n }\n return;\n }\n\n if (this.isUp(char)) {\n const newIndex = this.selectedIndex - this.cols;\n if (newIndex >= 0) {\n this.selectedIndex = newIndex;\n }\n this.render(false);\n return;\n }\n\n if (this.isDown(char)) {\n const newIndex = this.selectedIndex + this.cols;\n if (newIndex < choices.length) {\n this.selectedIndex = newIndex;\n }\n this.render(false);\n return;\n }\n\n if (this.isLeft(char)) {\n if (this.selectedIndex > 0) {\n this.selectedIndex--;\n } else {\n this.selectedIndex = choices.length - 1;\n }\n this.render(false);\n return;\n }\n\n if (this.isRight(char)) {\n if (this.selectedIndex < choices.length - 1) {\n this.selectedIndex++;\n } else {\n this.selectedIndex = 0;\n }\n this.render(false);\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;\n this.calculateLayout();\n this.render(false);\n }\n return;\n }\n\n // Typing\n if (char.length === 1 && !/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n this.searchBuffer += char;\n this.selectedIndex = 0;\n this.render(false);\n }\n }\n}\n\n"],"names":["MultiColumnSelectPrompt","SelectPrompt","calculateLayout","termWidth","process","stdout","columns","choices","options","filter","c","isSeparator","length","cols","colWidth","maxLen","len","stringWidth","title","itemWidth","Math","floor","render","_firstRender","output","getFilteredChoices","searchStr","searchBuffer","theme","muted","ANSI","RESET","success","BOLD","message","renderFrame","totalRows","ceil","currentRow","selectedIndex","scrollTop","pageSize","max","startRow","endRow","min","r","rowStr","idx","choice","slice","cellContent","main","symbols","pointer","currentWidth","stripAnsi","padding","repeat","endsWith","handleInput","char","submit","value","isUp","newIndex","isDown","isLeft","isRight","test","startsWith"],"mappings":"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"}
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "MultiRangePrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return MultiRangePrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _selectrange = require("./select-range");
|
|
12
|
-
const _theme = require("../theme");
|
|
13
|
-
const _ansi = require("../ansi");
|
|
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 MultiRangePrompt = class MultiRangePrompt extends _selectrange.SelectRangePrompt {
|
|
29
|
-
mergeRanges() {
|
|
30
|
-
if (this.committedRanges.length === 0) return;
|
|
31
|
-
// Sort by start index
|
|
32
|
-
this.committedRanges.sort((a, b)=>a.start - b.start);
|
|
33
|
-
const merged = [];
|
|
34
|
-
let current = this.committedRanges[0];
|
|
35
|
-
for(let i = 1; i < this.committedRanges.length; i++){
|
|
36
|
-
const next = this.committedRanges[i];
|
|
37
|
-
if (current.end >= next.start - 1) {
|
|
38
|
-
current.end = Math.max(current.end, next.end);
|
|
39
|
-
} else {
|
|
40
|
-
merged.push(current);
|
|
41
|
-
current = next;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
merged.push(current);
|
|
45
|
-
this.committedRanges = merged;
|
|
46
|
-
}
|
|
47
|
-
handleInput(char, key) {
|
|
48
|
-
// Handle Enter (Submit)
|
|
49
|
-
if (char === '\r' || char === '\n') {
|
|
50
|
-
const choices = this.getFilteredChoices();
|
|
51
|
-
if (choices.length === 0) return;
|
|
52
|
-
// If user was dragging, commit that range first
|
|
53
|
-
if (this.anchorIndex !== null) {
|
|
54
|
-
const start = Math.min(this.anchorIndex, this.selectedIndex);
|
|
55
|
-
const end = Math.max(this.anchorIndex, this.selectedIndex);
|
|
56
|
-
this.committedRanges.push({
|
|
57
|
-
start,
|
|
58
|
-
end
|
|
59
|
-
});
|
|
60
|
-
this.mergeRanges();
|
|
61
|
-
this.anchorIndex = null;
|
|
62
|
-
}
|
|
63
|
-
// Collect all indices from committed ranges
|
|
64
|
-
const allIndices = new Set();
|
|
65
|
-
for (const range of this.committedRanges){
|
|
66
|
-
for(let i = range.start; i <= range.end; i++){
|
|
67
|
-
allIndices.add(i);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (allIndices.size === 0) {
|
|
71
|
-
allIndices.add(this.selectedIndex);
|
|
72
|
-
}
|
|
73
|
-
const selectedItems = [];
|
|
74
|
-
const sortedIndices = Array.from(allIndices).sort((a, b)=>a - b);
|
|
75
|
-
for (const idx of sortedIndices){
|
|
76
|
-
if (idx < choices.length) {
|
|
77
|
-
const choice = choices[idx];
|
|
78
|
-
if (!this.isSeparator(choice)) {
|
|
79
|
-
selectedItems.push(choice.value);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
this.submit(selectedItems);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
// Handle Space (Anchor/Commit)
|
|
87
|
-
if (char === ' ') {
|
|
88
|
-
if (this.anchorIndex === null) {
|
|
89
|
-
// Start dragging
|
|
90
|
-
this.anchorIndex = this.selectedIndex;
|
|
91
|
-
} else {
|
|
92
|
-
// Commit range
|
|
93
|
-
const start = Math.min(this.anchorIndex, this.selectedIndex);
|
|
94
|
-
const end = Math.max(this.anchorIndex, this.selectedIndex);
|
|
95
|
-
this.committedRanges.push({
|
|
96
|
-
start,
|
|
97
|
-
end
|
|
98
|
-
});
|
|
99
|
-
this.mergeRanges();
|
|
100
|
-
this.anchorIndex = null;
|
|
101
|
-
}
|
|
102
|
-
this.render(false);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
super.handleInput(char, key);
|
|
106
|
-
}
|
|
107
|
-
render(_firstRender) {
|
|
108
|
-
let output = '';
|
|
109
|
-
const choices = this.getFilteredChoices();
|
|
110
|
-
// Scroll Logic (inherited from SelectPrompt basically, but good to ensure)
|
|
111
|
-
if (this.selectedIndex < this.scrollTop) {
|
|
112
|
-
this.scrollTop = this.selectedIndex;
|
|
113
|
-
} else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
|
|
114
|
-
this.scrollTop = this.selectedIndex - this.pageSize + 1;
|
|
115
|
-
}
|
|
116
|
-
if (this.scrollTop > choices.length - 1) {
|
|
117
|
-
this.scrollTop = Math.max(0, choices.length - this.pageSize);
|
|
118
|
-
}
|
|
119
|
-
// Header
|
|
120
|
-
const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Filter: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
|
|
121
|
-
output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr}\n`;
|
|
122
|
-
if (choices.length === 0) {
|
|
123
|
-
output += ` ${_theme.theme.muted}No results found${_ansi.ANSI.RESET}`;
|
|
124
|
-
} else {
|
|
125
|
-
const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
126
|
-
visibleChoices.forEach((choice, index)=>{
|
|
127
|
-
const actualIndex = this.scrollTop + index;
|
|
128
|
-
if (index > 0) output += '\n';
|
|
129
|
-
let isCommitted = false;
|
|
130
|
-
for (const range of this.committedRanges){
|
|
131
|
-
if (actualIndex >= range.start && actualIndex <= range.end) {
|
|
132
|
-
isCommitted = true;
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
let isDragging = false;
|
|
137
|
-
if (this.anchorIndex !== null) {
|
|
138
|
-
const min = Math.min(this.anchorIndex, this.selectedIndex);
|
|
139
|
-
const max = Math.max(this.anchorIndex, this.selectedIndex);
|
|
140
|
-
if (actualIndex >= min && actualIndex <= max) {
|
|
141
|
-
isDragging = true;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
if (this.isSeparator(choice)) {
|
|
145
|
-
output += ` ${_ansi.ANSI.DIM}${choice.text || _symbols.symbols.line.repeat(8)}${_ansi.ANSI.RESET}`;
|
|
146
|
-
} else {
|
|
147
|
-
let prefix = ' ';
|
|
148
|
-
const title = choice.title;
|
|
149
|
-
let content = title;
|
|
150
|
-
// Markers
|
|
151
|
-
if (actualIndex === this.anchorIndex) {
|
|
152
|
-
prefix = `${_theme.theme.muted}> ${_ansi.ANSI.RESET}`;
|
|
153
|
-
}
|
|
154
|
-
if (actualIndex === this.selectedIndex) {
|
|
155
|
-
prefix = `${_theme.theme.main}${_symbols.symbols.pointer} `;
|
|
156
|
-
}
|
|
157
|
-
if (actualIndex === this.selectedIndex && actualIndex === this.anchorIndex) {
|
|
158
|
-
prefix = `${_theme.theme.main}${_symbols.symbols.pointer}>`;
|
|
159
|
-
}
|
|
160
|
-
// Highlighting
|
|
161
|
-
if (isCommitted || isDragging) {
|
|
162
|
-
// Apply highlighting style
|
|
163
|
-
// If committed, maybe green? If dragging, maybe yellow or just highlighted?
|
|
164
|
-
if (actualIndex !== this.selectedIndex && actualIndex !== this.anchorIndex) {
|
|
165
|
-
prefix = `${_theme.theme.success}* ${_ansi.ANSI.RESET}`;
|
|
166
|
-
}
|
|
167
|
-
content = `${_theme.theme.success}${title}${_ansi.ANSI.RESET}`;
|
|
168
|
-
if (isDragging && !isCommitted) {
|
|
169
|
-
// Distinguish dragging visual? Maybe dim?
|
|
170
|
-
// Using same style as single range prompt for consistency
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Cursor Underline
|
|
174
|
-
if (actualIndex === this.selectedIndex) {
|
|
175
|
-
content = `${_ansi.ANSI.UNDERLINE}${content}${_ansi.ANSI.RESET}`;
|
|
176
|
-
}
|
|
177
|
-
output += `${prefix}${content}`;
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
output += `\n${_theme.theme.muted}(Space to anchor/commit, Enter to submit)${_ansi.ANSI.RESET}`;
|
|
182
|
-
this.renderFrame(output);
|
|
183
|
-
}
|
|
184
|
-
constructor(options){
|
|
185
|
-
super(options), _define_property(this, "committedRanges", []);
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
//# sourceMappingURL=multi-range.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/multi-range.ts"],"sourcesContent":["import { SelectRangePrompt } from './select-range';\nimport { SelectRangeOptions } from '../types';\nimport { theme } from '../theme';\nimport { ANSI } from '../ansi';\nimport { symbols } from '../symbols';\n\nexport class MultiRangePrompt<V> extends SelectRangePrompt<V> {\n private committedRanges: { start: number; end: number }[] = [];\n\n constructor(options: SelectRangeOptions<V>) {\n super(options);\n }\n\n private mergeRanges() {\n if (this.committedRanges.length === 0) return;\n\n // Sort by start index\n this.committedRanges.sort((a, b) => a.start - b.start);\n\n const merged: { start: number; end: number }[] = [];\n let current = this.committedRanges[0];\n\n for (let i = 1; i < this.committedRanges.length; i++) {\n const next = this.committedRanges[i];\n\n if (current.end >= next.start - 1) { // Overlap or adjacent\n current.end = Math.max(current.end, next.end);\n } else {\n merged.push(current);\n current = next;\n }\n }\n merged.push(current);\n this.committedRanges = merged;\n }\n\n protected handleInput(char: string, key?: Buffer) {\n // Handle Enter (Submit)\n if (char === '\\r' || char === '\\n') {\n const choices = this.getFilteredChoices();\n if (choices.length === 0) return;\n\n // If user was dragging, commit that range first\n if (this.anchorIndex !== null) {\n const start = Math.min(this.anchorIndex, this.selectedIndex);\n const end = Math.max(this.anchorIndex, this.selectedIndex);\n this.committedRanges.push({ start, end });\n this.mergeRanges();\n this.anchorIndex = null;\n }\n\n // Collect all indices from committed ranges\n const allIndices = new Set<number>();\n for (const range of this.committedRanges) {\n for (let i = range.start; i <= range.end; i++) {\n allIndices.add(i);\n }\n }\n\n if (allIndices.size === 0) {\n allIndices.add(this.selectedIndex);\n }\n\n const selectedItems: V[] = [];\n const sortedIndices = Array.from(allIndices).sort((a, b) => a - b);\n\n for (const idx of sortedIndices) {\n if (idx < choices.length) {\n const choice = choices[idx];\n if (!this.isSeparator(choice)) {\n selectedItems.push((choice as any).value);\n }\n }\n }\n\n this.submit(selectedItems as any);\n return;\n }\n\n // Handle Space (Anchor/Commit)\n if (char === ' ') {\n if (this.anchorIndex === null) {\n // Start dragging\n this.anchorIndex = this.selectedIndex;\n } else {\n // Commit range\n const start = Math.min(this.anchorIndex, this.selectedIndex);\n const end = Math.max(this.anchorIndex, this.selectedIndex);\n\n this.committedRanges.push({ start, end });\n this.mergeRanges();\n\n this.anchorIndex = null;\n }\n this.render(false);\n return;\n }\n super.handleInput(char, key);\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n const choices = this.getFilteredChoices();\n\n // Scroll Logic (inherited from SelectPrompt basically, but good to ensure)\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 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 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 } 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';\n\n let isCommitted = false;\n for (const range of this.committedRanges) {\n if (actualIndex >= range.start && actualIndex <= range.end) {\n isCommitted = true;\n break;\n }\n }\n\n let isDragging = false;\n if (this.anchorIndex !== null) {\n const min = Math.min(this.anchorIndex, this.selectedIndex);\n const max = Math.max(this.anchorIndex, this.selectedIndex);\n if (actualIndex >= min && actualIndex <= max) {\n isDragging = true;\n }\n }\n\n if (this.isSeparator(choice)) {\n output += ` ${ANSI.DIM}${(choice as any).text || symbols.line.repeat(8)}${ANSI.RESET}`;\n } else {\n let prefix = ' ';\n const title = (choice as any).title;\n let content = title;\n\n // Markers\n if (actualIndex === this.anchorIndex) {\n prefix = `${theme.muted}> ${ANSI.RESET}`;\n }\n if (actualIndex === this.selectedIndex) {\n prefix = `${theme.main}${symbols.pointer} `;\n }\n if (actualIndex === this.selectedIndex && actualIndex === this.anchorIndex) {\n prefix = `${theme.main}${symbols.pointer}>`;\n }\n\n // Highlighting\n if (isCommitted || isDragging) {\n // Apply highlighting style\n // If committed, maybe green? If dragging, maybe yellow or just highlighted?\n\n if (actualIndex !== this.selectedIndex && actualIndex !== this.anchorIndex) {\n prefix = `${theme.success}* ${ANSI.RESET}`;\n }\n\n content = `${theme.success}${title}${ANSI.RESET}`;\n\n if (isDragging && !isCommitted) {\n // Distinguish dragging visual? Maybe dim? \n // Using same style as single range prompt for consistency\n }\n }\n\n // Cursor Underline\n if (actualIndex === this.selectedIndex) {\n content = `${ANSI.UNDERLINE}${content}${ANSI.RESET}`;\n }\n\n output += `${prefix}${content}`;\n }\n });\n }\n\n output += `\\n${theme.muted}(Space to anchor/commit, Enter to submit)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n}\n"],"names":["MultiRangePrompt","SelectRangePrompt","mergeRanges","committedRanges","length","sort","a","b","start","merged","current","i","next","end","Math","max","push","handleInput","char","key","choices","getFilteredChoices","anchorIndex","min","selectedIndex","allIndices","Set","range","add","size","selectedItems","sortedIndices","Array","from","idx","choice","isSeparator","value","submit","render","_firstRender","output","scrollTop","pageSize","searchStr","searchBuffer","theme","muted","ANSI","RESET","success","BOLD","title","options","message","visibleChoices","slice","forEach","index","actualIndex","isCommitted","isDragging","DIM","text","symbols","line","repeat","prefix","content","main","pointer","UNDERLINE","renderFrame"],"mappings":"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"}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "MultiSelectPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return MultiSelectPrompt;
|
|
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 MultiSelectPrompt = class MultiSelectPrompt extends _base.Prompt {
|
|
29
|
-
getFilteredChoices() {
|
|
30
|
-
if (!this.searchBuffer) return this.options.choices.map((c, i)=>({
|
|
31
|
-
...c,
|
|
32
|
-
originalIndex: i
|
|
33
|
-
}));
|
|
34
|
-
return this.options.choices.map((c, i)=>({
|
|
35
|
-
...c,
|
|
36
|
-
originalIndex: i
|
|
37
|
-
})).filter((c)=>c.title.toLowerCase().includes(this.searchBuffer.toLowerCase()));
|
|
38
|
-
}
|
|
39
|
-
render(_firstRender) {
|
|
40
|
-
let output = '';
|
|
41
|
-
const choices = this.getFilteredChoices();
|
|
42
|
-
// Adjust Scroll
|
|
43
|
-
if (this.selectedIndex < this.scrollTop) {
|
|
44
|
-
this.scrollTop = this.selectedIndex;
|
|
45
|
-
} else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
|
|
46
|
-
this.scrollTop = this.selectedIndex - this.pageSize + 1;
|
|
47
|
-
}
|
|
48
|
-
if (this.scrollTop > choices.length - 1) {
|
|
49
|
-
this.scrollTop = Math.max(0, choices.length - this.pageSize);
|
|
50
|
-
}
|
|
51
|
-
const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
|
|
52
|
-
const searchStr = this.searchBuffer ? ` ${_theme.theme.muted}(Filter: ${this.searchBuffer})${_ansi.ANSI.RESET}` : '';
|
|
53
|
-
output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}${searchStr}\n`;
|
|
54
|
-
if (choices.length === 0) {
|
|
55
|
-
output += ` ${_theme.theme.muted}No results found${_ansi.ANSI.RESET}`;
|
|
56
|
-
} else {
|
|
57
|
-
const visible = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
58
|
-
visible.forEach((choice, index)=>{
|
|
59
|
-
if (index > 0) output += '\n';
|
|
60
|
-
const actualIndex = this.scrollTop + index;
|
|
61
|
-
const cursor = actualIndex === this.selectedIndex ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET}` : ' ';
|
|
62
|
-
const isChecked = this.checkedState[choice.originalIndex];
|
|
63
|
-
const checkbox = isChecked ? `${_theme.theme.success}${_symbols.symbols.checked}${_ansi.ANSI.RESET}` : `${_theme.theme.muted}${_symbols.symbols.unchecked}${_ansi.ANSI.RESET}`;
|
|
64
|
-
output += `${cursor} ${checkbox} ${choice.title}`;
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
// Hints
|
|
68
|
-
if (!this.searchBuffer && !this.errorMsg) {
|
|
69
|
-
output += `\n${_ansi.ANSI.DIM}(Ctrl+A: All, Ctrl+X: None)${_ansi.ANSI.RESET}`;
|
|
70
|
-
}
|
|
71
|
-
if (this.errorMsg) {
|
|
72
|
-
output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
|
|
73
|
-
}
|
|
74
|
-
this.renderFrame(output);
|
|
75
|
-
}
|
|
76
|
-
handleInput(char) {
|
|
77
|
-
const choices = this.getFilteredChoices();
|
|
78
|
-
// Enter
|
|
79
|
-
if (char === '\r' || char === '\n') {
|
|
80
|
-
const selectedCount = this.checkedState.filter(Boolean).length;
|
|
81
|
-
const { min = 0, max } = this.options;
|
|
82
|
-
if (selectedCount < min) {
|
|
83
|
-
this.errorMsg = `Select at least ${min}.`;
|
|
84
|
-
this.render(false);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
if (max && selectedCount > max) {
|
|
88
|
-
this.errorMsg = `Max ${max} allowed.`;
|
|
89
|
-
this.render(false);
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const results = this.options.choices.filter((_, i)=>this.checkedState[i]).map((c)=>c.value);
|
|
93
|
-
this.submit(results);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
// --- Batch Shortcuts (Visible Items Only) ---
|
|
97
|
-
// Ctrl+A (\x01): Select All Visible
|
|
98
|
-
if (char === '\x01') {
|
|
99
|
-
const newCheckedState = [
|
|
100
|
-
...this.checkedState
|
|
101
|
-
];
|
|
102
|
-
let potentialAdd = 0;
|
|
103
|
-
// Calculate potential selections
|
|
104
|
-
choices.forEach((c)=>{
|
|
105
|
-
if (!newCheckedState[c.originalIndex]) potentialAdd++;
|
|
106
|
-
});
|
|
107
|
-
const currentSelected = newCheckedState.filter(Boolean).length;
|
|
108
|
-
if (this.options.max && currentSelected + potentialAdd > this.options.max) {
|
|
109
|
-
this.errorMsg = `Max limit ${this.options.max} reached`;
|
|
110
|
-
} else {
|
|
111
|
-
choices.forEach((c)=>newCheckedState[c.originalIndex] = true);
|
|
112
|
-
this.checkedState = newCheckedState;
|
|
113
|
-
this.errorMsg = '';
|
|
114
|
-
}
|
|
115
|
-
this.render(false);
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
// Ctrl+X (\x18): Deselect All Visible
|
|
119
|
-
if (char === '\x18') {
|
|
120
|
-
choices.forEach((c)=>this.checkedState[c.originalIndex] = false);
|
|
121
|
-
this.errorMsg = '';
|
|
122
|
-
this.render(false);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
if (char === ' ') {
|
|
126
|
-
if (choices.length > 0) {
|
|
127
|
-
const choice = choices[this.selectedIndex];
|
|
128
|
-
const originalIndex = choice.originalIndex;
|
|
129
|
-
this.checkedState[originalIndex] = !this.checkedState[originalIndex];
|
|
130
|
-
this.render(false);
|
|
131
|
-
}
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
if (this.isUp(char)) {
|
|
135
|
-
if (choices.length > 0) {
|
|
136
|
-
this.selectedIndex = (this.selectedIndex - 1 + choices.length) % choices.length;
|
|
137
|
-
this.render(false);
|
|
138
|
-
}
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
if (this.isDown(char)) {
|
|
142
|
-
if (choices.length > 0) {
|
|
143
|
-
this.selectedIndex = (this.selectedIndex + 1) % choices.length;
|
|
144
|
-
this.render(false);
|
|
145
|
-
}
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
if (char === '\u0008' || char === '\x7f') {
|
|
149
|
-
if (this.searchBuffer.length > 0) {
|
|
150
|
-
this.searchBuffer = this.searchBuffer.slice(0, -1);
|
|
151
|
-
this.selectedIndex = 0;
|
|
152
|
-
this.render(false);
|
|
153
|
-
}
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
// Typing search
|
|
157
|
-
if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
|
|
158
|
-
this.searchBuffer += char;
|
|
159
|
-
this.selectedIndex = 0;
|
|
160
|
-
this.render(false);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
handleMouse(event) {
|
|
164
|
-
const choices = this.getFilteredChoices();
|
|
165
|
-
if (choices.length === 0) return;
|
|
166
|
-
if (event.action === 'scroll') {
|
|
167
|
-
if (event.scroll === 'up') {
|
|
168
|
-
this.selectedIndex = (this.selectedIndex - 1 + choices.length) % choices.length;
|
|
169
|
-
this.render(false);
|
|
170
|
-
} else if (event.scroll === 'down') {
|
|
171
|
-
this.selectedIndex = (this.selectedIndex + 1) % choices.length;
|
|
172
|
-
this.render(false);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
constructor(options){
|
|
177
|
-
super(options), _define_property(this, "selectedIndex", 0), _define_property(this, "checkedState", void 0), _define_property(this, "searchBuffer", ''), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 7), _define_property(this, "errorMsg", '');
|
|
178
|
-
this.checkedState = options.choices.map((c)=>!!c.selected);
|
|
179
|
-
this.selectedIndex = 0;
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
//# sourceMappingURL=multi-select.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/multi-select.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { MultiSelectOptions, MouseEvent } from '../types';\n\n// --- Implementation: MultiSelect Prompt ---\nexport class MultiSelectPrompt<V> extends Prompt<any[], MultiSelectOptions<V>> {\n private selectedIndex: number = 0;\n private checkedState: boolean[];\n private searchBuffer: string = '';\n private scrollTop: number = 0;\n private readonly pageSize: number = 7;\n private errorMsg: string = '';\n\n constructor(options: MultiSelectOptions<V>) {\n super(options);\n this.checkedState = options.choices.map(c => !!c.selected);\n this.selectedIndex = 0;\n }\n\n private getFilteredChoices() {\n if (!this.searchBuffer) return this.options.choices.map((c, i) => ({ ...c, originalIndex: i }));\n return this.options.choices\n .map((c, i) => ({ ...c, originalIndex: i }))\n .filter(c => c.title.toLowerCase().includes(this.searchBuffer.toLowerCase()));\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n const choices = this.getFilteredChoices();\n\n // Adjust Scroll\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 if (this.scrollTop > choices.length - 1) {\n this.scrollTop = Math.max(0, choices.length - this.pageSize);\n }\n\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n const searchStr = this.searchBuffer ? ` ${theme.muted}(Filter: ${this.searchBuffer})${ANSI.RESET}` : '';\n output += `${icon} ${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 } else {\n const visible = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n visible.forEach((choice, index) => {\n if (index > 0) output += '\\n';\n\n const actualIndex = this.scrollTop + index;\n const cursor = actualIndex === this.selectedIndex ? `${theme.main}${symbols.pointer}${ANSI.RESET}` : ' ';\n const isChecked = this.checkedState[choice.originalIndex];\n const checkbox = isChecked\n ? `${theme.success}${symbols.checked}${ANSI.RESET}`\n : `${theme.muted}${symbols.unchecked}${ANSI.RESET}`;\n\n output += `${cursor} ${checkbox} ${choice.title}`;\n });\n }\n\n // Hints\n if (!this.searchBuffer && !this.errorMsg) {\n output += `\\n${ANSI.DIM}(Ctrl+A: All, Ctrl+X: None)${ANSI.RESET}`;\n }\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n const choices = this.getFilteredChoices();\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { min = 0, max } = this.options;\n if (selectedCount < min) {\n this.errorMsg = `Select at least ${min}.`;\n this.render(false);\n return;\n }\n if (max && selectedCount > max) {\n this.errorMsg = `Max ${max} allowed.`;\n this.render(false);\n return;\n }\n\n const results = this.options.choices\n .filter((_, i) => this.checkedState[i])\n .map(c => c.value);\n this.submit(results);\n return;\n }\n\n // --- Batch Shortcuts (Visible Items Only) ---\n\n // Ctrl+A (\\x01): Select All Visible\n if (char === '\\x01') {\n const newCheckedState = [...this.checkedState];\n let potentialAdd = 0;\n\n // Calculate potential selections\n choices.forEach(c => {\n if (!newCheckedState[c.originalIndex]) potentialAdd++;\n });\n\n const currentSelected = newCheckedState.filter(Boolean).length;\n if (this.options.max && (currentSelected + potentialAdd) > this.options.max) {\n this.errorMsg = `Max limit ${this.options.max} reached`;\n } else {\n choices.forEach(c => newCheckedState[c.originalIndex] = true);\n this.checkedState = newCheckedState;\n this.errorMsg = '';\n }\n this.render(false);\n return;\n }\n\n // Ctrl+X (\\x18): Deselect All Visible\n if (char === '\\x18') {\n choices.forEach(c => this.checkedState[c.originalIndex] = false);\n this.errorMsg = '';\n this.render(false);\n return;\n }\n\n if (char === ' ') {\n if (choices.length > 0) {\n const choice = choices[this.selectedIndex];\n const originalIndex = choice.originalIndex;\n this.checkedState[originalIndex] = !this.checkedState[originalIndex];\n this.render(false);\n }\n return;\n }\n\n if (this.isUp(char)) {\n if (choices.length > 0) {\n this.selectedIndex = (this.selectedIndex - 1 + choices.length) % choices.length;\n this.render(false);\n }\n return;\n }\n if (this.isDown(char)) {\n if (choices.length > 0) {\n this.selectedIndex = (this.selectedIndex + 1) % choices.length;\n this.render(false);\n }\n return;\n }\n\n if (char === '\\u0008' || char === '\\x7f') { // Backspace\n if (this.searchBuffer.length > 0) {\n this.searchBuffer = this.searchBuffer.slice(0, -1);\n this.selectedIndex = 0;\n this.render(false);\n }\n return;\n }\n\n // Typing search\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n this.searchBuffer += char;\n this.selectedIndex = 0;\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.selectedIndex - 1 + choices.length) % choices.length;\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = (this.selectedIndex + 1) % choices.length;\n this.render(false);\n }\n }\n }\n}\n"],"names":["MultiSelectPrompt","Prompt","getFilteredChoices","searchBuffer","options","choices","map","c","i","originalIndex","filter","title","toLowerCase","includes","render","_firstRender","output","selectedIndex","scrollTop","pageSize","length","Math","max","icon","errorMsg","theme","error","symbols","cross","success","searchStr","muted","ANSI","RESET","BOLD","message","visible","slice","forEach","choice","index","actualIndex","cursor","main","pointer","isChecked","checkedState","checkbox","checked","unchecked","DIM","renderFrame","handleInput","char","selectedCount","Boolean","min","results","_","value","submit","newCheckedState","potentialAdd","currentSelected","isUp","isDown","test","startsWith","handleMouse","event","action","scroll","selected"],"mappings":"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"}
|