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,228 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "SnippetPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return SnippetPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _ansi = require("../ansi");
|
|
12
|
-
const _base = require("../base");
|
|
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 SnippetPrompt = class SnippetPrompt extends _base.Prompt {
|
|
28
|
-
parseTemplate() {
|
|
29
|
-
const regex = /\$\{([a-zA-Z0-9_]+)\}/g;
|
|
30
|
-
let lastIndex = 0;
|
|
31
|
-
let match;
|
|
32
|
-
while((match = regex.exec(this.options.template)) !== null){
|
|
33
|
-
if (match.index > lastIndex) {
|
|
34
|
-
this.tokens.push({
|
|
35
|
-
type: 'static',
|
|
36
|
-
value: this.options.template.substring(lastIndex, match.index)
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
this.tokens.push({
|
|
40
|
-
type: 'variable',
|
|
41
|
-
value: match[1]
|
|
42
|
-
});
|
|
43
|
-
this.variableTokens.push(this.tokens.length - 1);
|
|
44
|
-
lastIndex = regex.lastIndex;
|
|
45
|
-
}
|
|
46
|
-
if (lastIndex < this.options.template.length) {
|
|
47
|
-
this.tokens.push({
|
|
48
|
-
type: 'static',
|
|
49
|
-
value: this.options.template.substring(lastIndex)
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
render(firstRender) {
|
|
54
|
-
if (!firstRender && this.lastLinesUp > 0) {
|
|
55
|
-
this.print(`\x1b[${this.lastLinesUp}B`);
|
|
56
|
-
}
|
|
57
|
-
this.lastLinesUp = 0;
|
|
58
|
-
// Build the string
|
|
59
|
-
let output = '';
|
|
60
|
-
let cursorVisualIndex = 0;
|
|
61
|
-
let currentVisualIndex = 0;
|
|
62
|
-
// Prefix/Message
|
|
63
|
-
const prefix = `${_theme.theme.success}? ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message || 'Fill snippet'}${_ansi.ANSI.RESET}\n`;
|
|
64
|
-
output += prefix;
|
|
65
|
-
let snippetLine = '';
|
|
66
|
-
this.tokens.forEach((token, index)=>{
|
|
67
|
-
if (token.type === 'static') {
|
|
68
|
-
snippetLine += `${_theme.theme.muted}${token.value}${_ansi.ANSI.RESET}`;
|
|
69
|
-
currentVisualIndex += token.value.length; // assuming simple ascii/static length
|
|
70
|
-
} else {
|
|
71
|
-
const isFocused = this.variableTokens[this.activeVarIndex] === index;
|
|
72
|
-
const val = this.values[token.value] || '';
|
|
73
|
-
// Placeholder if empty?
|
|
74
|
-
const displayVal = val.length === 0 && isFocused ? '' : val; // maybe show placeholder?
|
|
75
|
-
let styledVal = displayVal;
|
|
76
|
-
if (isFocused) {
|
|
77
|
-
styledVal = `${_ansi.ANSI.UNDERLINE}${_theme.theme.main}${displayVal}${_ansi.ANSI.RESET}`;
|
|
78
|
-
// Calculate cursor position
|
|
79
|
-
cursorVisualIndex = currentVisualIndex + this.cursor;
|
|
80
|
-
} else {
|
|
81
|
-
styledVal = `${_theme.theme.main}${displayVal}${_ansi.ANSI.RESET}`;
|
|
82
|
-
}
|
|
83
|
-
snippetLine += styledVal;
|
|
84
|
-
currentVisualIndex += displayVal.length;
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
output += snippetLine;
|
|
88
|
-
if (this.errorMsg) {
|
|
89
|
-
output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
|
|
90
|
-
}
|
|
91
|
-
output += `\n${_theme.theme.muted}(Tab to next variable, Enter to submit)${_ansi.ANSI.RESET}`;
|
|
92
|
-
this.renderFrame(output);
|
|
93
|
-
// Position Cursor
|
|
94
|
-
this.print(_ansi.ANSI.SHOW_CURSOR);
|
|
95
|
-
// We need to move to correct line and column
|
|
96
|
-
// Lines:
|
|
97
|
-
// 1. Message
|
|
98
|
-
// 2. Snippet (cursor here)
|
|
99
|
-
// 3. Error (optional)
|
|
100
|
-
// 4. Hint
|
|
101
|
-
// snippetLine is at index 1 (0-based) if Message has no newlines.
|
|
102
|
-
// Prefix ends with \n. So snippetLine is on 2nd line.
|
|
103
|
-
// Calculate which row relative to bottom the snippet line is.
|
|
104
|
-
// If error: 4 lines total. Snippet is line 1 (2nd). Lines up = 2.
|
|
105
|
-
// If no error: 3 lines total. Snippet is line 1. Lines up = 1.
|
|
106
|
-
let linesUp = 1;
|
|
107
|
-
if (this.errorMsg) linesUp++;
|
|
108
|
-
if (linesUp > 0) {
|
|
109
|
-
this.print(`\x1b[${linesUp}A`);
|
|
110
|
-
this.lastLinesUp = linesUp;
|
|
111
|
-
}
|
|
112
|
-
this.print(_ansi.ANSI.CURSOR_LEFT);
|
|
113
|
-
if (cursorVisualIndex > 0) {
|
|
114
|
-
this.print(`\x1b[${cursorVisualIndex}C`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
cleanup() {
|
|
118
|
-
if (this.lastLinesUp > 0) {
|
|
119
|
-
this.print(`\x1b[${this.lastLinesUp}B`);
|
|
120
|
-
this.lastLinesUp = 0;
|
|
121
|
-
}
|
|
122
|
-
super.cleanup();
|
|
123
|
-
}
|
|
124
|
-
handleInput(char, _key) {
|
|
125
|
-
// Navigation: Tab / Shift+Tab
|
|
126
|
-
if (char === '\u001b[Z') {
|
|
127
|
-
// Shift Tab -> Prev
|
|
128
|
-
this.moveFocus(-1);
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
if (char === '\t') {
|
|
132
|
-
this.moveFocus(1);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
// Enter
|
|
136
|
-
if (char === '\r' || char === '\n') {
|
|
137
|
-
this.submitSnippet();
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
// Editing
|
|
141
|
-
const activeTokenIdx = this.variableTokens[this.activeVarIndex];
|
|
142
|
-
const varName = this.tokens[activeTokenIdx].value;
|
|
143
|
-
const val = this.values[varName];
|
|
144
|
-
if (char === '\u0008' || char === '\x7f') {
|
|
145
|
-
if (this.cursor > 0) {
|
|
146
|
-
const pre = val.slice(0, this.cursor - 1);
|
|
147
|
-
const post = val.slice(this.cursor);
|
|
148
|
-
this.values[varName] = pre + post;
|
|
149
|
-
this.cursor--;
|
|
150
|
-
this.render(false);
|
|
151
|
-
}
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (this.isLeft(char)) {
|
|
155
|
-
if (this.cursor > 0) this.cursor--;
|
|
156
|
-
this.render(false);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
if (this.isRight(char)) {
|
|
160
|
-
if (this.cursor < val.length) this.cursor++;
|
|
161
|
-
this.render(false);
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
|
|
165
|
-
const pre = val.slice(0, this.cursor);
|
|
166
|
-
const post = val.slice(this.cursor);
|
|
167
|
-
this.values[varName] = pre + char + post;
|
|
168
|
-
this.cursor += char.length;
|
|
169
|
-
this.render(false);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
handleMouse(event) {
|
|
173
|
-
if (event.action === 'scroll') {
|
|
174
|
-
if (event.scroll === 'up') {
|
|
175
|
-
this.moveFocus(-1);
|
|
176
|
-
} else if (event.scroll === 'down') {
|
|
177
|
-
this.moveFocus(1);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
moveFocus(direction) {
|
|
182
|
-
const nextIndex = this.activeVarIndex + direction;
|
|
183
|
-
if (nextIndex >= 0 && nextIndex < this.variableTokens.length) {
|
|
184
|
-
this.activeVarIndex = nextIndex;
|
|
185
|
-
const varName = this.tokens[this.variableTokens[this.activeVarIndex]].value;
|
|
186
|
-
this.cursor = this.values[varName].length;
|
|
187
|
-
this.render(false);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
submitSnippet() {
|
|
191
|
-
// Construct final string
|
|
192
|
-
let result = '';
|
|
193
|
-
this.tokens.forEach((token)=>{
|
|
194
|
-
if (token.type === 'static') {
|
|
195
|
-
result += token.value;
|
|
196
|
-
} else {
|
|
197
|
-
result += this.values[token.value] || '';
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
this.submit(result);
|
|
201
|
-
}
|
|
202
|
-
constructor(options){
|
|
203
|
-
super(options), _define_property(this, "tokens", []), _define_property(this, "variableTokens", []) // Indices in this.tokens
|
|
204
|
-
, _define_property(this, "values", {}), _define_property(this, "activeVarIndex", 0) // Index in variableTokens
|
|
205
|
-
, _define_property(this, "cursor", 0) // Cursor in active variable value
|
|
206
|
-
, _define_property(this, "errorMsg", ''), _define_property(this, "lastLinesUp", 0);
|
|
207
|
-
this.parseTemplate();
|
|
208
|
-
// Initialize values
|
|
209
|
-
if (options.values) {
|
|
210
|
-
this.values = {
|
|
211
|
-
...options.values
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
// Ensure all vars have entries
|
|
215
|
-
this.variableTokens.forEach((idx)=>{
|
|
216
|
-
const varName = this.tokens[idx].value;
|
|
217
|
-
if (this.values[varName] === undefined) {
|
|
218
|
-
this.values[varName] = '';
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
if (this.variableTokens.length > 0) {
|
|
222
|
-
const firstVar = this.tokens[this.variableTokens[0]].value;
|
|
223
|
-
this.cursor = this.values[firstVar].length;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
//# sourceMappingURL=snippet.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/snippet.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { SnippetOptions, MouseEvent } from '../types';\n\ninterface Token {\n type: 'static' | 'variable';\n value: string; // For static: text. For variable: name.\n}\n\nexport class SnippetPrompt extends Prompt<string, SnippetOptions> {\n private tokens: Token[] = [];\n private variableTokens: number[] = []; // Indices in this.tokens\n private values: Record<string, string> = {};\n private activeVarIndex: number = 0; // Index in variableTokens\n private cursor: number = 0; // Cursor in active variable value\n private errorMsg: string = '';\n private lastLinesUp: number = 0;\n\n constructor(options: SnippetOptions) {\n super(options);\n this.parseTemplate();\n\n // Initialize values\n if (options.values) {\n this.values = { ...options.values };\n }\n // Ensure all vars have entries\n this.variableTokens.forEach(idx => {\n const varName = this.tokens[idx].value;\n if (this.values[varName] === undefined) {\n this.values[varName] = '';\n }\n });\n\n if (this.variableTokens.length > 0) {\n const firstVar = this.tokens[this.variableTokens[0]].value;\n this.cursor = this.values[firstVar].length;\n }\n }\n\n private parseTemplate() {\n const regex = /\\$\\{([a-zA-Z0-9_]+)\\}/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(this.options.template)) !== null) {\n if (match.index > lastIndex) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex, match.index) });\n }\n this.tokens.push({ type: 'variable', value: match[1] });\n this.variableTokens.push(this.tokens.length - 1);\n lastIndex = regex.lastIndex;\n }\n\n if (lastIndex < this.options.template.length) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex) });\n }\n }\n\n protected render(firstRender: boolean) {\n if (!firstRender && this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n }\n this.lastLinesUp = 0;\n\n // Build the string\n let output = '';\n let cursorVisualIndex = 0;\n let currentVisualIndex = 0;\n\n // Prefix/Message\n const prefix = `${theme.success}? ${ANSI.BOLD}${theme.title}${this.options.message || 'Fill snippet'}${ANSI.RESET}\\n`;\n output += prefix;\n\n let snippetLine = '';\n\n this.tokens.forEach((token, index) => {\n if (token.type === 'static') {\n snippetLine += `${theme.muted}${token.value}${ANSI.RESET}`;\n currentVisualIndex += token.value.length; // assuming simple ascii/static length\n } else {\n const isFocused = this.variableTokens[this.activeVarIndex] === index;\n const val = this.values[token.value] || '';\n // Placeholder if empty?\n const displayVal = val.length === 0 && isFocused ? '' : val; // maybe show placeholder?\n\n let styledVal = displayVal;\n if (isFocused) {\n styledVal = `${ANSI.UNDERLINE}${theme.main}${displayVal}${ANSI.RESET}`;\n // Calculate cursor position\n cursorVisualIndex = currentVisualIndex + this.cursor;\n } else {\n styledVal = `${theme.main}${displayVal}${ANSI.RESET}`;\n }\n\n snippetLine += styledVal;\n currentVisualIndex += displayVal.length;\n }\n });\n\n output += snippetLine;\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n output += `\\n${theme.muted}(Tab to next variable, Enter to submit)${ANSI.RESET}`;\n\n this.renderFrame(output);\n\n // Position Cursor\n this.print(ANSI.SHOW_CURSOR);\n\n // We need to move to correct line and column\n // Lines:\n // 1. Message\n // 2. Snippet (cursor here)\n // 3. Error (optional)\n // 4. Hint\n\n // snippetLine is at index 1 (0-based) if Message has no newlines.\n // Prefix ends with \\n. So snippetLine is on 2nd line.\n\n // Calculate which row relative to bottom the snippet line is.\n // If error: 4 lines total. Snippet is line 1 (2nd). Lines up = 2.\n // If no error: 3 lines total. Snippet is line 1. Lines up = 1.\n\n let linesUp = 1;\n if (this.errorMsg) linesUp++;\n\n if (linesUp > 0) {\n this.print(`\\x1b[${linesUp}A`);\n this.lastLinesUp = linesUp;\n }\n\n this.print(ANSI.CURSOR_LEFT);\n if (cursorVisualIndex > 0) {\n this.print(`\\x1b[${cursorVisualIndex}C`);\n }\n }\n\n protected cleanup() {\n if (this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n this.lastLinesUp = 0;\n }\n super.cleanup();\n }\n\n protected handleInput(char: string, _key: Buffer) {\n // Navigation: Tab / Shift+Tab\n if (char === '\\u001b[Z') {\n // Shift Tab -> Prev\n this.moveFocus(-1);\n return;\n }\n\n if (char === '\\t') {\n this.moveFocus(1);\n return;\n }\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n this.submitSnippet();\n return;\n }\n\n // Editing\n const activeTokenIdx = this.variableTokens[this.activeVarIndex];\n const varName = this.tokens[activeTokenIdx].value;\n const val = this.values[varName];\n\n if (char === '\\u0008' || char === '\\x7f') { // Backspace\n if (this.cursor > 0) {\n const pre = val.slice(0, this.cursor - 1);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + post;\n this.cursor--;\n this.render(false);\n }\n return;\n }\n\n if (this.isLeft(char)) {\n if (this.cursor > 0) this.cursor--;\n this.render(false);\n return;\n }\n if (this.isRight(char)) {\n if (this.cursor < val.length) this.cursor++;\n this.render(false);\n return;\n }\n\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n const pre = val.slice(0, this.cursor);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + char + post;\n this.cursor += char.length;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.moveFocus(-1);\n } else if (event.scroll === 'down') {\n this.moveFocus(1);\n }\n }\n }\n\n private moveFocus(direction: number) {\n const nextIndex = this.activeVarIndex + direction;\n if (nextIndex >= 0 && nextIndex < this.variableTokens.length) {\n this.activeVarIndex = nextIndex;\n const varName = this.tokens[this.variableTokens[this.activeVarIndex]].value;\n this.cursor = this.values[varName].length;\n this.render(false);\n }\n }\n\n private submitSnippet() {\n // Construct final string\n let result = '';\n this.tokens.forEach(token => {\n if (token.type === 'static') {\n result += token.value;\n } else {\n result += this.values[token.value] || '';\n }\n });\n this.submit(result);\n }\n}\n"],"names":["SnippetPrompt","Prompt","parseTemplate","regex","lastIndex","match","exec","options","template","index","tokens","push","type","value","substring","variableTokens","length","render","firstRender","lastLinesUp","print","output","cursorVisualIndex","currentVisualIndex","prefix","theme","success","ANSI","BOLD","title","message","RESET","snippetLine","forEach","token","muted","isFocused","activeVarIndex","val","values","displayVal","styledVal","UNDERLINE","main","cursor","errorMsg","error","renderFrame","SHOW_CURSOR","linesUp","CURSOR_LEFT","cleanup","handleInput","char","_key","moveFocus","submitSnippet","activeTokenIdx","varName","pre","slice","post","isLeft","isRight","test","startsWith","handleMouse","event","action","scroll","direction","nextIndex","result","submit","idx","undefined","firstVar"],"mappings":"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"}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "SortGridPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return SortGridPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _ansi = require("../ansi");
|
|
12
|
-
const _base = require("../base");
|
|
13
|
-
const _theme = require("../theme");
|
|
14
|
-
const _utils = require("../utils");
|
|
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 SortGridPrompt = class SortGridPrompt extends _base.Prompt {
|
|
29
|
-
calculateLayout() {
|
|
30
|
-
const rows = this.gridData.length;
|
|
31
|
-
if (rows === 0) return;
|
|
32
|
-
// Assume consistent column count, use max found if ragged
|
|
33
|
-
const cols = this.gridData.reduce((max, row)=>Math.max(max, row.length), 0);
|
|
34
|
-
this.columnWidths = new Array(cols).fill(0);
|
|
35
|
-
for(let r = 0; r < rows; r++){
|
|
36
|
-
for(let c = 0; c < this.gridData[r].length; c++){
|
|
37
|
-
const cell = this.gridData[r][c] || '';
|
|
38
|
-
this.columnWidths[c] = Math.max(this.columnWidths[c], (0, _utils.stringWidth)(cell) + 2); // +2 padding
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
render(_firstRender) {
|
|
43
|
-
this.calculateLayout();
|
|
44
|
-
let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
45
|
-
this.gridData.forEach((row, r)=>{
|
|
46
|
-
const rowStr = row.map((cell, c)=>{
|
|
47
|
-
const width = this.columnWidths[c] || (0, _utils.stringWidth)(cell) + 2;
|
|
48
|
-
const content = cell || '';
|
|
49
|
-
// Padding
|
|
50
|
-
const padding = Math.max(0, width - (0, _utils.stringWidth)(content));
|
|
51
|
-
const leftPad = Math.floor(padding / 2);
|
|
52
|
-
const rightPad = padding - leftPad;
|
|
53
|
-
let cellStr = ' '.repeat(leftPad) + content + ' '.repeat(rightPad);
|
|
54
|
-
// Styling
|
|
55
|
-
const isFocused = r === this.cursorY && c === this.cursorX;
|
|
56
|
-
const isGrabbed = r === this.grabbedY && c === this.grabbedX;
|
|
57
|
-
if (isGrabbed) {
|
|
58
|
-
// Grabbed item style
|
|
59
|
-
cellStr = `${_ansi.ANSI.BG_RED}${_ansi.ANSI.FG_WHITE}${cellStr}${_ansi.ANSI.RESET}`;
|
|
60
|
-
} else if (isFocused) {
|
|
61
|
-
// Focused item style
|
|
62
|
-
cellStr = `${_ansi.ANSI.REVERSE}${cellStr}${_ansi.ANSI.RESET}`;
|
|
63
|
-
}
|
|
64
|
-
return cellStr;
|
|
65
|
-
}).join(' '); // Space between columns
|
|
66
|
-
output += rowStr + '\n';
|
|
67
|
-
});
|
|
68
|
-
output += `${_theme.theme.muted}Arrows to move, Space to grab/drop, Enter to submit${_ansi.ANSI.RESET}`;
|
|
69
|
-
this.renderFrame(output);
|
|
70
|
-
}
|
|
71
|
-
handleInput(char, _key) {
|
|
72
|
-
if (char === '\r' || char === '\n') {
|
|
73
|
-
if (this.grabbedX !== null) {
|
|
74
|
-
this.grabbedX = null;
|
|
75
|
-
this.grabbedY = null;
|
|
76
|
-
}
|
|
77
|
-
this.submit(this.gridData);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (char === ' ') {
|
|
81
|
-
if (this.grabbedX === null) {
|
|
82
|
-
// Grab
|
|
83
|
-
this.grabbedX = this.cursorX;
|
|
84
|
-
this.grabbedY = this.cursorY;
|
|
85
|
-
} else {
|
|
86
|
-
// Drop
|
|
87
|
-
this.grabbedX = null;
|
|
88
|
-
this.grabbedY = null;
|
|
89
|
-
}
|
|
90
|
-
this.render(false);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const isUp = this.isUp(char);
|
|
94
|
-
const isDown = this.isDown(char);
|
|
95
|
-
const isLeft = this.isLeft(char);
|
|
96
|
-
const isRight = this.isRight(char);
|
|
97
|
-
const isTab = char === '\t';
|
|
98
|
-
const isShiftTab = char === '\u001b[Z';
|
|
99
|
-
if (isUp) this.move('up');
|
|
100
|
-
if (isDown) this.move('down');
|
|
101
|
-
if (isLeft || isShiftTab) this.move('left');
|
|
102
|
-
if (isRight || isTab) this.move('right');
|
|
103
|
-
}
|
|
104
|
-
handleMouse(event) {
|
|
105
|
-
if (event.scroll === 'up') {
|
|
106
|
-
this.move('up');
|
|
107
|
-
} else if (event.scroll === 'down') {
|
|
108
|
-
this.move('down');
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
move(direction) {
|
|
112
|
-
if (this.gridData.length === 0) return;
|
|
113
|
-
const oldX = this.cursorX;
|
|
114
|
-
const oldY = this.cursorY;
|
|
115
|
-
if (direction === 'up') this.cursorY = Math.max(0, this.cursorY - 1);
|
|
116
|
-
if (direction === 'down') this.cursorY = Math.min(this.gridData.length - 1, this.cursorY + 1);
|
|
117
|
-
// Clamp cursorX if we moved to a shorter row
|
|
118
|
-
if (this.gridData.length > 0) {
|
|
119
|
-
const rowLen = this.gridData[this.cursorY] ? this.gridData[this.cursorY].length : 0;
|
|
120
|
-
if (this.cursorX >= rowLen) this.cursorX = Math.max(0, rowLen - 1);
|
|
121
|
-
}
|
|
122
|
-
if (direction === 'left') this.cursorX = Math.max(0, this.cursorX - 1);
|
|
123
|
-
if (direction === 'right') {
|
|
124
|
-
const rowLen = this.gridData.length > 0 && this.gridData[this.cursorY] ? this.gridData[this.cursorY].length : 0;
|
|
125
|
-
this.cursorX = Math.min(rowLen - 1, this.cursorX + 1);
|
|
126
|
-
}
|
|
127
|
-
// If Grabbed, swap content
|
|
128
|
-
if (this.grabbedX !== null) {
|
|
129
|
-
// If we moved
|
|
130
|
-
if (oldX !== this.cursorX || oldY !== this.cursorY) {
|
|
131
|
-
const valA = this.gridData[oldY][oldX];
|
|
132
|
-
const valB = this.gridData[this.cursorY][this.cursorX];
|
|
133
|
-
this.gridData[oldY][oldX] = valB;
|
|
134
|
-
this.gridData[this.cursorY][this.cursorX] = valA;
|
|
135
|
-
this.grabbedX = this.cursorX;
|
|
136
|
-
this.grabbedY = this.cursorY;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
this.render(false);
|
|
140
|
-
}
|
|
141
|
-
constructor(options){
|
|
142
|
-
super(options), _define_property(this, "cursorX", 0), _define_property(this, "cursorY", 0), _define_property(this, "grabbedX", null), _define_property(this, "grabbedY", null), _define_property(this, "gridData", void 0), _define_property(this, "columnWidths", []);
|
|
143
|
-
// Deep copy grid data
|
|
144
|
-
this.gridData = options.data.map((row)=>[
|
|
145
|
-
...row
|
|
146
|
-
]);
|
|
147
|
-
this.calculateLayout();
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
//# sourceMappingURL=sort-grid.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/sort-grid.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { SortGridOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class SortGridPrompt extends Prompt<string[][], SortGridOptions> {\n protected cursorX: number = 0;\n protected cursorY: number = 0;\n protected grabbedX: number | null = null;\n protected grabbedY: number | null = null;\n private gridData: string[][];\n private columnWidths: number[] = [];\n\n constructor(options: SortGridOptions) {\n super(options);\n // Deep copy grid data\n this.gridData = options.data.map(row => [...row]);\n this.calculateLayout();\n }\n\n private calculateLayout() {\n const rows = this.gridData.length;\n if (rows === 0) return;\n // Assume consistent column count, use max found if ragged\n const cols = this.gridData.reduce((max, row) => Math.max(max, row.length), 0);\n\n this.columnWidths = new Array(cols).fill(0);\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < this.gridData[r].length; c++) {\n const cell = this.gridData[r][c] || '';\n this.columnWidths[c] = Math.max(this.columnWidths[c], stringWidth(cell) + 2); // +2 padding\n }\n }\n }\n\n protected render(_firstRender: boolean): void {\n this.calculateLayout();\n let output = `${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n this.gridData.forEach((row, r) => {\n const rowStr = row.map((cell, c) => {\n const width = this.columnWidths[c] || stringWidth(cell) + 2;\n const content = cell || '';\n\n // Padding\n const padding = Math.max(0, width - stringWidth(content));\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n\n let cellStr = ' '.repeat(leftPad) + content + ' '.repeat(rightPad);\n\n // Styling\n const isFocused = (r === this.cursorY && c === this.cursorX);\n const isGrabbed = (r === this.grabbedY && c === this.grabbedX);\n\n if (isGrabbed) {\n // Grabbed item style\n cellStr = `${ANSI.BG_RED}${ANSI.FG_WHITE}${cellStr}${ANSI.RESET}`;\n } else if (isFocused) {\n // Focused item style\n cellStr = `${ANSI.REVERSE}${cellStr}${ANSI.RESET}`;\n }\n\n return cellStr;\n }).join(' '); // Space between columns\n\n output += rowStr + '\\n';\n });\n\n output += `${theme.muted}Arrows to move, Space to grab/drop, Enter to submit${ANSI.RESET}`;\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n if (char === '\\r' || char === '\\n') {\n if (this.grabbedX !== null) {\n this.grabbedX = null;\n this.grabbedY = null;\n }\n this.submit(this.gridData);\n return;\n }\n\n if (char === ' ') {\n if (this.grabbedX === null) {\n // Grab\n this.grabbedX = this.cursorX;\n this.grabbedY = this.cursorY;\n } else {\n // Drop\n this.grabbedX = null;\n this.grabbedY = null;\n }\n this.render(false);\n return;\n }\n\n const isUp = this.isUp(char);\n const isDown = this.isDown(char);\n const isLeft = this.isLeft(char);\n const isRight = this.isRight(char);\n const isTab = char === '\\t';\n const isShiftTab = char === '\\u001b[Z';\n\n if (isUp) this.move('up');\n if (isDown) this.move('down');\n if (isLeft || isShiftTab) this.move('left');\n if (isRight || isTab) this.move('right');\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.scroll === 'up') {\n this.move('up');\n } else if (event.scroll === 'down') {\n this.move('down');\n }\n }\n\n protected move(direction: 'up' | 'down' | 'left' | 'right'): void {\n if (this.gridData.length === 0) return;\n\n const oldX = this.cursorX;\n const oldY = this.cursorY;\n\n if (direction === 'up') this.cursorY = Math.max(0, this.cursorY - 1);\n if (direction === 'down') this.cursorY = Math.min(this.gridData.length - 1, this.cursorY + 1);\n\n // Clamp cursorX if we moved to a shorter row\n if (this.gridData.length > 0) {\n const rowLen = this.gridData[this.cursorY] ? this.gridData[this.cursorY].length : 0;\n if (this.cursorX >= rowLen) this.cursorX = Math.max(0, rowLen - 1);\n }\n\n if (direction === 'left') this.cursorX = Math.max(0, this.cursorX - 1);\n if (direction === 'right') {\n const rowLen = this.gridData.length > 0 && this.gridData[this.cursorY] ? this.gridData[this.cursorY].length : 0;\n this.cursorX = Math.min(rowLen - 1, this.cursorX + 1);\n }\n\n // If Grabbed, swap content\n if (this.grabbedX !== null) {\n // If we moved\n if (oldX !== this.cursorX || oldY !== this.cursorY) {\n const valA = this.gridData[oldY][oldX];\n const valB = this.gridData[this.cursorY][this.cursorX];\n\n this.gridData[oldY][oldX] = valB;\n this.gridData[this.cursorY][this.cursorX] = valA;\n\n this.grabbedX = this.cursorX;\n this.grabbedY = this.cursorY;\n }\n }\n\n this.render(false);\n }\n}\n"],"names":["SortGridPrompt","Prompt","calculateLayout","rows","gridData","length","cols","reduce","max","row","Math","columnWidths","Array","fill","r","c","cell","stringWidth","render","_firstRender","output","theme","title","options","message","ANSI","RESET","forEach","rowStr","map","width","content","padding","leftPad","floor","rightPad","cellStr","repeat","isFocused","cursorY","cursorX","isGrabbed","grabbedY","grabbedX","BG_RED","FG_WHITE","REVERSE","join","muted","renderFrame","handleInput","char","_key","submit","isUp","isDown","isLeft","isRight","isTab","isShiftTab","move","handleMouse","event","scroll","direction","oldX","oldY","min","rowLen","valA","valB","data"],"mappings":"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"}
|
package/dist/src/prompts/sort.js
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "SortPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return SortPrompt;
|
|
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 SortPrompt = class SortPrompt extends _base.Prompt {
|
|
29
|
-
render(_firstRender) {
|
|
30
|
-
// Adjust Scroll Top
|
|
31
|
-
if (this.selectedIndex < this.scrollTop) {
|
|
32
|
-
this.scrollTop = this.selectedIndex;
|
|
33
|
-
} else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
|
|
34
|
-
this.scrollTop = this.selectedIndex - this.pageSize + 1;
|
|
35
|
-
}
|
|
36
|
-
// Ensure valid scroll (handle list shrinking?) - list doesn't shrink here but good practice
|
|
37
|
-
this.scrollTop = Math.max(0, Math.min(this.scrollTop, this.items.length - this.pageSize));
|
|
38
|
-
if (this.scrollTop < 0) this.scrollTop = 0;
|
|
39
|
-
let output = '';
|
|
40
|
-
// Header
|
|
41
|
-
output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(Press <space> to grab, arrows to move, <enter> to confirm)${_ansi.ANSI.RESET}\n`;
|
|
42
|
-
const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
43
|
-
visibleItems.forEach((item, index)=>{
|
|
44
|
-
const actualIndex = this.scrollTop + index;
|
|
45
|
-
if (index > 0) output += '\n';
|
|
46
|
-
const isSelected = actualIndex === this.selectedIndex;
|
|
47
|
-
const isGrabbed = actualIndex === this.grabbedIndex;
|
|
48
|
-
// Pointer
|
|
49
|
-
let prefix = ' ';
|
|
50
|
-
if (isSelected) {
|
|
51
|
-
if (isGrabbed) {
|
|
52
|
-
prefix = `${_theme.theme.main}${_symbols.symbols.pointer}${_symbols.symbols.pointer} `; // Double pointer for grabbed?
|
|
53
|
-
} else {
|
|
54
|
-
prefix = `${_theme.theme.main}${_symbols.symbols.pointer} `;
|
|
55
|
-
}
|
|
56
|
-
} else if (isGrabbed) {
|
|
57
|
-
// Should not happen if we move grabbed item with cursor
|
|
58
|
-
// But if logic differs, maybe.
|
|
59
|
-
}
|
|
60
|
-
// Item Content
|
|
61
|
-
let content = item;
|
|
62
|
-
if (isGrabbed) {
|
|
63
|
-
content = `${_ansi.ANSI.BOLD}${_theme.theme.main}${content}${_ansi.ANSI.RESET}`;
|
|
64
|
-
} else if (isSelected) {
|
|
65
|
-
content = `${_theme.theme.main}${content}${_ansi.ANSI.RESET}`;
|
|
66
|
-
}
|
|
67
|
-
output += `${prefix}${content}`;
|
|
68
|
-
});
|
|
69
|
-
this.renderFrame(output);
|
|
70
|
-
}
|
|
71
|
-
handleInput(char) {
|
|
72
|
-
// Enter
|
|
73
|
-
if (char === '\r' || char === '\n') {
|
|
74
|
-
this.submit(this.items);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
// Space (Grab/Drop)
|
|
78
|
-
if (char === ' ') {
|
|
79
|
-
if (this.grabbedIndex === null) {
|
|
80
|
-
this.grabbedIndex = this.selectedIndex;
|
|
81
|
-
} else {
|
|
82
|
-
this.grabbedIndex = null;
|
|
83
|
-
}
|
|
84
|
-
this.render(false);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
// Up
|
|
88
|
-
if (this.isUp(char)) {
|
|
89
|
-
if (this.grabbedIndex !== null) {
|
|
90
|
-
// Move item up
|
|
91
|
-
if (this.selectedIndex > 0) {
|
|
92
|
-
const newIndex = this.selectedIndex - 1;
|
|
93
|
-
this.swap(this.selectedIndex, newIndex);
|
|
94
|
-
this.selectedIndex = newIndex;
|
|
95
|
-
this.grabbedIndex = newIndex;
|
|
96
|
-
}
|
|
97
|
-
} else {
|
|
98
|
-
// Move cursor up
|
|
99
|
-
this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;
|
|
100
|
-
}
|
|
101
|
-
this.render(false);
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
// Down
|
|
105
|
-
if (this.isDown(char)) {
|
|
106
|
-
if (this.grabbedIndex !== null) {
|
|
107
|
-
// Move item down
|
|
108
|
-
if (this.selectedIndex < this.items.length - 1) {
|
|
109
|
-
const newIndex = this.selectedIndex + 1;
|
|
110
|
-
this.swap(this.selectedIndex, newIndex);
|
|
111
|
-
this.selectedIndex = newIndex;
|
|
112
|
-
this.grabbedIndex = newIndex;
|
|
113
|
-
}
|
|
114
|
-
} else {
|
|
115
|
-
// Move cursor down
|
|
116
|
-
this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;
|
|
117
|
-
}
|
|
118
|
-
this.render(false);
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
swap(i, j) {
|
|
123
|
-
[this.items[i], this.items[j]] = [
|
|
124
|
-
this.items[j],
|
|
125
|
-
this.items[i]
|
|
126
|
-
];
|
|
127
|
-
}
|
|
128
|
-
handleMouse(event) {
|
|
129
|
-
// Simple scroll support for navigation
|
|
130
|
-
if (event.action === 'scroll') {
|
|
131
|
-
if (event.scroll === 'up') {
|
|
132
|
-
if (this.grabbedIndex !== null) {
|
|
133
|
-
if (this.selectedIndex > 0) {
|
|
134
|
-
const newIndex = this.selectedIndex - 1;
|
|
135
|
-
this.swap(this.selectedIndex, newIndex);
|
|
136
|
-
this.selectedIndex = newIndex;
|
|
137
|
-
this.grabbedIndex = newIndex;
|
|
138
|
-
}
|
|
139
|
-
} else {
|
|
140
|
-
this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;
|
|
141
|
-
}
|
|
142
|
-
this.render(false);
|
|
143
|
-
} else if (event.scroll === 'down') {
|
|
144
|
-
if (this.grabbedIndex !== null) {
|
|
145
|
-
if (this.selectedIndex < this.items.length - 1) {
|
|
146
|
-
const newIndex = this.selectedIndex + 1;
|
|
147
|
-
this.swap(this.selectedIndex, newIndex);
|
|
148
|
-
this.selectedIndex = newIndex;
|
|
149
|
-
this.grabbedIndex = newIndex;
|
|
150
|
-
}
|
|
151
|
-
} else {
|
|
152
|
-
this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;
|
|
153
|
-
}
|
|
154
|
-
this.render(false);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
constructor(options){
|
|
159
|
-
super(options), _define_property(this, "items", void 0), _define_property(this, "selectedIndex", 0), _define_property(this, "grabbedIndex", null), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 10);
|
|
160
|
-
this.items = [
|
|
161
|
-
...options.items
|
|
162
|
-
];
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
//# sourceMappingURL=sort.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/sort.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { SortOptions, MouseEvent } from '../types';\n\nexport class SortPrompt extends Prompt<string[], SortOptions> {\n private items: string[];\n private selectedIndex: number = 0;\n private grabbedIndex: number | null = null;\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n constructor(options: SortOptions) {\n super(options);\n this.items = [...options.items];\n }\n\n protected render(_firstRender: boolean) {\n // Adjust Scroll Top\n if (this.selectedIndex < this.scrollTop) {\n this.scrollTop = this.selectedIndex;\n } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.selectedIndex - this.pageSize + 1;\n }\n\n // Ensure valid scroll (handle list shrinking?) - list doesn't shrink here but good practice\n this.scrollTop = Math.max(0, Math.min(this.scrollTop, this.items.length - this.pageSize));\n if (this.scrollTop < 0) this.scrollTop = 0;\n\n let output = '';\n\n // Header\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(Press <space> to grab, arrows to move, <enter> to confirm)${ANSI.RESET}\\n`;\n\n const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleItems.forEach((item, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n const isSelected = actualIndex === this.selectedIndex;\n const isGrabbed = actualIndex === this.grabbedIndex;\n\n // Pointer\n let prefix = ' ';\n if (isSelected) {\n if (isGrabbed) {\n prefix = `${theme.main}${symbols.pointer}${symbols.pointer} `; // Double pointer for grabbed?\n } else {\n prefix = `${theme.main}${symbols.pointer} `;\n }\n } else if (isGrabbed) {\n // Should not happen if we move grabbed item with cursor\n // But if logic differs, maybe.\n }\n\n // Item Content\n let content = item;\n if (isGrabbed) {\n content = `${ANSI.BOLD}${theme.main}${content}${ANSI.RESET}`;\n } else if (isSelected) {\n content = `${theme.main}${content}${ANSI.RESET}`;\n }\n\n output += `${prefix}${content}`;\n });\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n // Enter\n if (char === '\\r' || char === '\\n') {\n this.submit(this.items);\n return;\n }\n\n // Space (Grab/Drop)\n if (char === ' ') {\n if (this.grabbedIndex === null) {\n this.grabbedIndex = this.selectedIndex;\n } else {\n this.grabbedIndex = null;\n }\n this.render(false);\n return;\n }\n\n // Up\n if (this.isUp(char)) {\n if (this.grabbedIndex !== null) {\n // Move item up\n if (this.selectedIndex > 0) {\n const newIndex = this.selectedIndex - 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n // Move cursor up\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;\n }\n this.render(false);\n return;\n }\n\n // Down\n if (this.isDown(char)) {\n if (this.grabbedIndex !== null) {\n // Move item down\n if (this.selectedIndex < this.items.length - 1) {\n const newIndex = this.selectedIndex + 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n // Move cursor down\n this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;\n }\n this.render(false);\n return;\n }\n }\n\n private swap(i: number, j: number) {\n [this.items[i], this.items[j]] = [this.items[j], this.items[i]];\n }\n\n protected handleMouse(event: MouseEvent) {\n // Simple scroll support for navigation\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.grabbedIndex !== null) {\n if (this.selectedIndex > 0) {\n const newIndex = this.selectedIndex - 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.items.length - 1;\n }\n this.render(false);\n } else if (event.scroll === 'down') {\n if (this.grabbedIndex !== null) {\n if (this.selectedIndex < this.items.length - 1) {\n const newIndex = this.selectedIndex + 1;\n this.swap(this.selectedIndex, newIndex);\n this.selectedIndex = newIndex;\n this.grabbedIndex = newIndex;\n }\n } else {\n this.selectedIndex = this.selectedIndex < this.items.length - 1 ? this.selectedIndex + 1 : 0;\n }\n this.render(false);\n }\n }\n }\n}\n"],"names":["SortPrompt","Prompt","render","_firstRender","selectedIndex","scrollTop","pageSize","Math","max","min","items","length","output","theme","success","ANSI","RESET","BOLD","title","options","message","muted","visibleItems","slice","forEach","item","index","actualIndex","isSelected","isGrabbed","grabbedIndex","prefix","main","symbols","pointer","content","renderFrame","handleInput","char","submit","isUp","newIndex","swap","isDown","i","j","handleMouse","event","action","scroll"],"mappings":"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"}
|