mepcli 1.3.2 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -2
- package/dist/{ansi.js → src/ansi.js} +17 -9
- package/dist/src/ansi.js.map +1 -0
- package/dist/{base.js → src/base.js} +82 -70
- package/dist/src/base.js.map +1 -0
- package/dist/{core.js → src/core.js} +266 -320
- package/dist/src/core.js.map +1 -0
- package/dist/src/data/countries.js +569 -0
- package/dist/src/data/countries.js.map +1 -0
- package/dist/src/data/licenses.js +480 -0
- package/dist/src/data/licenses.js.map +1 -0
- package/dist/{highlight.js → src/highlight.js} +77 -69
- package/dist/src/highlight.js.map +1 -0
- package/dist/src/index.js +66 -0
- package/dist/src/index.js.map +1 -0
- package/dist/{input.js → src/input.js} +47 -41
- package/dist/src/input.js.map +1 -0
- package/dist/src/pipeline.js +273 -0
- package/dist/src/pipeline.js.map +1 -0
- package/dist/{prompts → src/prompts}/autocomplete.js +58 -57
- package/dist/src/prompts/autocomplete.js.map +1 -0
- package/dist/{prompts → src/prompts}/box.js +86 -53
- package/dist/src/prompts/box.js.map +1 -0
- package/dist/{prompts → src/prompts}/breadcrumb-search.js +110 -98
- package/dist/src/prompts/breadcrumb-search.js.map +1 -0
- package/dist/{prompts → src/prompts}/breadcrumb.js +126 -121
- package/dist/src/prompts/breadcrumb.js.map +1 -0
- package/dist/{prompts → src/prompts}/byte.js +69 -52
- package/dist/src/prompts/byte.js.map +1 -0
- package/dist/{prompts → src/prompts}/calculator.js +79 -56
- package/dist/src/prompts/calculator.js.map +1 -0
- package/dist/{prompts → src/prompts}/calendar.js +167 -127
- package/dist/src/prompts/calendar.js.map +1 -0
- package/dist/{prompts → src/prompts}/checkbox.js +53 -49
- package/dist/src/prompts/checkbox.js.map +1 -0
- package/dist/{prompts → src/prompts}/code.js +88 -76
- package/dist/src/prompts/code.js.map +1 -0
- package/dist/{prompts → src/prompts}/color.js +68 -50
- package/dist/src/prompts/color.js.map +1 -0
- package/dist/{prompts → src/prompts}/confirm.js +22 -15
- package/dist/src/prompts/confirm.js.map +1 -0
- package/dist/{prompts → src/prompts}/connection-string.js +59 -36
- package/dist/src/prompts/connection-string.js.map +1 -0
- package/dist/{prompts → src/prompts}/cron.js +90 -59
- package/dist/src/prompts/cron.js.map +1 -0
- package/dist/src/prompts/curl-utils.js +71 -0
- package/dist/src/prompts/curl-utils.js.map +1 -0
- package/dist/{prompts → src/prompts}/curl.js +153 -132
- package/dist/src/prompts/curl.js.map +1 -0
- package/dist/{prompts → src/prompts}/data-inspector.js +96 -91
- package/dist/src/prompts/data-inspector.js.map +1 -0
- package/dist/{prompts → src/prompts}/date.js +64 -57
- package/dist/src/prompts/date.js.map +1 -0
- package/dist/{prompts → src/prompts}/dependency.js +84 -80
- package/dist/src/prompts/dependency.js.map +1 -0
- package/dist/{prompts → src/prompts}/dial.js +49 -35
- package/dist/src/prompts/dial.js.map +1 -0
- package/dist/src/prompts/diff.js +118 -0
- package/dist/src/prompts/diff.js.map +1 -0
- package/dist/{prompts → src/prompts}/draw.js +83 -80
- package/dist/src/prompts/draw.js.map +1 -0
- package/dist/src/prompts/editor.js +234 -0
- package/dist/src/prompts/editor.js.map +1 -0
- package/dist/{prompts → src/prompts}/emoji.js +80 -82
- package/dist/src/prompts/emoji.js.map +1 -0
- package/dist/{prompts → src/prompts}/exec.js +60 -46
- package/dist/src/prompts/exec.js.map +1 -0
- package/dist/src/prompts/file.js +217 -0
- package/dist/src/prompts/file.js.map +1 -0
- package/dist/{prompts → src/prompts}/form.js +63 -54
- package/dist/src/prompts/form.js.map +1 -0
- package/dist/{prompts → src/prompts}/fuzzy-multi-column.js +65 -53
- package/dist/src/prompts/fuzzy-multi-column.js.map +1 -0
- package/dist/{prompts → src/prompts}/fuzzy.js +66 -55
- package/dist/src/prompts/fuzzy.js.map +1 -0
- package/dist/src/prompts/gauge.js +137 -0
- package/dist/src/prompts/gauge.js.map +1 -0
- package/dist/{prompts → src/prompts}/grid.js +70 -57
- package/dist/src/prompts/grid.js.map +1 -0
- package/dist/{prompts → src/prompts}/heatmap.js +70 -64
- package/dist/src/prompts/heatmap.js.map +1 -0
- package/dist/{prompts → src/prompts}/ip.js +56 -36
- package/dist/src/prompts/ip.js.map +1 -0
- package/dist/{prompts → src/prompts}/kanban.js +63 -58
- package/dist/src/prompts/kanban.js.map +1 -0
- package/dist/src/prompts/keypress.js +54 -0
- package/dist/src/prompts/keypress.js.map +1 -0
- package/dist/src/prompts/license.js +144 -0
- package/dist/src/prompts/license.js.map +1 -0
- package/dist/{prompts → src/prompts}/list.js +46 -31
- package/dist/src/prompts/list.js.map +1 -0
- package/dist/{prompts → src/prompts}/map.js +93 -77
- package/dist/src/prompts/map.js.map +1 -0
- package/dist/{prompts → src/prompts}/match.js +91 -95
- package/dist/src/prompts/match.js.map +1 -0
- package/dist/{prompts → src/prompts}/miller.js +74 -67
- package/dist/src/prompts/miller.js.map +1 -0
- package/dist/{prompts → src/prompts}/multi-column-select.js +54 -44
- package/dist/src/prompts/multi-column-select.js.map +1 -0
- package/dist/{prompts → src/prompts}/multi-range.js +70 -52
- package/dist/src/prompts/multi-range.js.map +1 -0
- package/dist/{prompts → src/prompts}/multi-select.js +67 -58
- package/dist/src/prompts/multi-select.js.map +1 -0
- package/dist/{prompts → src/prompts}/number.js +51 -39
- package/dist/src/prompts/number.js.map +1 -0
- package/dist/{prompts → src/prompts}/otp.js +43 -27
- package/dist/src/prompts/otp.js.map +1 -0
- package/dist/{prompts → src/prompts}/pattern.js +74 -71
- package/dist/src/prompts/pattern.js.map +1 -0
- package/dist/{prompts → src/prompts}/phone.js +107 -118
- package/dist/src/prompts/phone.js.map +1 -0
- package/dist/src/prompts/quiz-select.js +114 -0
- package/dist/src/prompts/quiz-select.js.map +1 -0
- package/dist/src/prompts/quiz-text.js +98 -0
- package/dist/src/prompts/quiz-text.js.map +1 -0
- package/dist/{prompts → src/prompts}/range.js +85 -61
- package/dist/src/prompts/range.js.map +1 -0
- package/dist/{prompts → src/prompts}/rating.js +29 -24
- package/dist/src/prompts/rating.js.map +1 -0
- package/dist/{prompts → src/prompts}/regex.js +50 -36
- package/dist/src/prompts/regex.js.map +1 -0
- package/dist/{prompts → src/prompts}/region.js +62 -56
- package/dist/src/prompts/region.js.map +1 -0
- package/dist/{prompts → src/prompts}/schedule.js +82 -75
- package/dist/src/prompts/schedule.js.map +1 -0
- package/dist/{prompts → src/prompts}/scroll.js +61 -58
- package/dist/src/prompts/scroll.js.map +1 -0
- package/dist/src/prompts/seat.js +164 -0
- package/dist/src/prompts/seat.js.map +1 -0
- package/dist/{prompts → src/prompts}/select-range.js +58 -46
- package/dist/src/prompts/select-range.js.map +1 -0
- package/dist/{prompts → src/prompts}/select.js +65 -66
- package/dist/src/prompts/select.js.map +1 -0
- package/dist/{prompts → src/prompts}/semver.js +24 -13
- package/dist/src/prompts/semver.js.map +1 -0
- package/dist/src/prompts/shortcut.js +133 -0
- package/dist/src/prompts/shortcut.js.map +1 -0
- package/dist/{prompts → src/prompts}/slider.js +28 -23
- package/dist/src/prompts/slider.js.map +1 -0
- package/dist/src/prompts/slot.js +117 -0
- package/dist/src/prompts/slot.js.map +1 -0
- package/dist/{prompts → src/prompts}/snippet.js +82 -61
- package/dist/src/prompts/snippet.js.map +1 -0
- package/dist/{prompts → src/prompts}/sort-grid.js +64 -59
- package/dist/src/prompts/sort-grid.js.map +1 -0
- package/dist/{prompts → src/prompts}/sort.js +59 -49
- package/dist/src/prompts/sort.js.map +1 -0
- package/dist/src/prompts/spam.js +80 -0
- package/dist/src/prompts/spam.js.map +1 -0
- package/dist/{prompts → src/prompts}/spreadsheet.js +71 -70
- package/dist/src/prompts/spreadsheet.js.map +1 -0
- package/dist/{prompts → src/prompts}/table.js +52 -38
- package/dist/src/prompts/table.js.map +1 -0
- package/dist/{prompts → src/prompts}/text.js +74 -70
- package/dist/src/prompts/text.js.map +1 -0
- package/dist/{prompts → src/prompts}/time.js +105 -96
- package/dist/src/prompts/time.js.map +1 -0
- package/dist/src/prompts/toggle.js +53 -0
- package/dist/src/prompts/toggle.js.map +1 -0
- package/dist/{prompts → src/prompts}/transfer.js +71 -67
- package/dist/src/prompts/transfer.js.map +1 -0
- package/dist/{prompts → src/prompts}/tree-select.js +83 -86
- package/dist/src/prompts/tree-select.js.map +1 -0
- package/dist/{prompts → src/prompts}/tree.js +69 -67
- package/dist/src/prompts/tree.js.map +1 -0
- package/dist/src/prompts/wait.js +79 -0
- package/dist/src/prompts/wait.js.map +1 -0
- package/dist/src/spinner.js +105 -0
- package/dist/src/spinner.js.map +1 -0
- package/dist/{symbols.js → src/symbols.js} +32 -7
- package/dist/src/symbols.js.map +1 -0
- package/dist/{tasks.js → src/tasks.js} +104 -79
- package/dist/src/tasks.js.map +1 -0
- package/dist/src/theme.js +29 -0
- package/dist/src/theme.js.map +1 -0
- package/dist/src/types.js +8 -0
- package/dist/src/types.js.map +1 -0
- package/dist/{utils.js → src/utils.js} +196 -152
- package/dist/src/utils.js.map +1 -0
- package/package.json +16 -13
- package/dist/ansi.d.ts +0 -36
- package/dist/base.d.ts +0 -60
- package/dist/core.d.ts +0 -1072
- package/dist/data/countries.d.ts +0 -2
- package/dist/data/countries.js +0 -105
- package/dist/data/licenses.d.ts +0 -2
- package/dist/data/licenses.js +0 -109
- package/dist/highlight.d.ts +0 -7
- package/dist/index.d.ts +0 -48
- package/dist/index.js +0 -64
- package/dist/input.d.ts +0 -14
- package/dist/pipeline.d.ts +0 -39
- package/dist/pipeline.js +0 -54
- package/dist/prompts/autocomplete.d.ts +0 -22
- package/dist/prompts/box.d.ts +0 -21
- package/dist/prompts/breadcrumb-search.d.ts +0 -14
- package/dist/prompts/breadcrumb.d.ts +0 -32
- package/dist/prompts/byte.d.ts +0 -13
- package/dist/prompts/calculator.d.ts +0 -17
- package/dist/prompts/calendar.d.ts +0 -33
- package/dist/prompts/checkbox.d.ts +0 -13
- package/dist/prompts/code.d.ts +0 -19
- package/dist/prompts/color.d.ts +0 -14
- package/dist/prompts/confirm.d.ts +0 -8
- package/dist/prompts/connection-string.d.ts +0 -18
- package/dist/prompts/cron.d.ts +0 -13
- package/dist/prompts/curl-utils.d.ts +0 -25
- package/dist/prompts/curl-utils.js +0 -41
- package/dist/prompts/curl.d.ts +0 -41
- package/dist/prompts/data-inspector.d.ts +0 -22
- package/dist/prompts/date.d.ts +0 -12
- package/dist/prompts/dependency.d.ts +0 -16
- package/dist/prompts/dial.d.ts +0 -10
- package/dist/prompts/diff.d.ts +0 -10
- package/dist/prompts/diff.js +0 -101
- package/dist/prompts/draw.d.ts +0 -20
- package/dist/prompts/editor.d.ts +0 -14
- package/dist/prompts/editor.js +0 -203
- package/dist/prompts/emoji.d.ts +0 -18
- package/dist/prompts/exec.d.ts +0 -17
- package/dist/prompts/file.d.ts +0 -21
- package/dist/prompts/file.js +0 -210
- package/dist/prompts/form.d.ts +0 -18
- package/dist/prompts/fuzzy-multi-column.d.ts +0 -12
- package/dist/prompts/fuzzy.d.ts +0 -12
- package/dist/prompts/gauge.d.ts +0 -21
- package/dist/prompts/gauge.js +0 -130
- package/dist/prompts/grid.d.ts +0 -14
- package/dist/prompts/heatmap.d.ts +0 -13
- package/dist/prompts/ip.d.ts +0 -11
- package/dist/prompts/kanban.d.ts +0 -17
- package/dist/prompts/keypress.d.ts +0 -7
- package/dist/prompts/keypress.js +0 -55
- package/dist/prompts/license.d.ts +0 -9
- package/dist/prompts/license.js +0 -105
- package/dist/prompts/list.d.ts +0 -9
- package/dist/prompts/map.d.ts +0 -17
- package/dist/prompts/match.d.ts +0 -19
- package/dist/prompts/miller.d.ts +0 -15
- package/dist/prompts/multi-column-select.d.ts +0 -10
- package/dist/prompts/multi-range.d.ts +0 -9
- package/dist/prompts/multi-select.d.ts +0 -15
- package/dist/prompts/number.d.ts +0 -11
- package/dist/prompts/otp.d.ts +0 -10
- package/dist/prompts/pattern.d.ts +0 -22
- package/dist/prompts/phone.d.ts +0 -41
- package/dist/prompts/quiz-select.d.ts +0 -10
- package/dist/prompts/quiz-select.js +0 -104
- package/dist/prompts/quiz-text.d.ts +0 -11
- package/dist/prompts/quiz-text.js +0 -82
- package/dist/prompts/range.d.ts +0 -9
- package/dist/prompts/rating.d.ts +0 -8
- package/dist/prompts/regex.d.ts +0 -13
- package/dist/prompts/region.d.ts +0 -11
- package/dist/prompts/schedule.d.ts +0 -20
- package/dist/prompts/scroll.d.ts +0 -13
- package/dist/prompts/seat.d.ts +0 -17
- package/dist/prompts/seat.js +0 -165
- package/dist/prompts/select-range.d.ts +0 -8
- package/dist/prompts/select.d.ts +0 -15
- package/dist/prompts/semver.d.ts +0 -6
- package/dist/prompts/shortcut.d.ts +0 -9
- package/dist/prompts/shortcut.js +0 -135
- package/dist/prompts/slider.d.ts +0 -8
- package/dist/prompts/slot.d.ts +0 -16
- package/dist/prompts/slot.js +0 -107
- package/dist/prompts/snippet.d.ts +0 -19
- package/dist/prompts/sort-grid.d.ts +0 -16
- package/dist/prompts/sort.d.ts +0 -14
- package/dist/prompts/spam.d.ts +0 -17
- package/dist/prompts/spam.js +0 -62
- package/dist/prompts/spreadsheet.d.ts +0 -21
- package/dist/prompts/table.d.ts +0 -14
- package/dist/prompts/text.d.ts +0 -17
- package/dist/prompts/time.d.ts +0 -12
- package/dist/prompts/toggle.d.ts +0 -8
- package/dist/prompts/toggle.js +0 -47
- package/dist/prompts/transfer.d.ts +0 -18
- package/dist/prompts/tree-select.d.ts +0 -31
- package/dist/prompts/tree.d.ts +0 -20
- package/dist/prompts/wait.d.ts +0 -18
- package/dist/prompts/wait.js +0 -62
- package/dist/spinner.d.ts +0 -33
- package/dist/spinner.js +0 -89
- package/dist/symbols.d.ts +0 -33
- package/dist/tasks.d.ts +0 -57
- package/dist/theme.d.ts +0 -2
- package/dist/theme.js +0 -20
- package/dist/types.d.ts +0 -503
- package/dist/types.js +0 -5
- package/dist/utils.d.ts +0 -81
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "QuizTextPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return QuizTextPrompt;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _ansi = require("../ansi");
|
|
12
|
+
const _theme = require("../theme");
|
|
13
|
+
const _symbols = require("../symbols");
|
|
14
|
+
const _text = require("./text");
|
|
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 QuizTextPrompt = class QuizTextPrompt extends _text.TextPrompt {
|
|
29
|
+
handleInput(char) {
|
|
30
|
+
if (this.status === 'revealed') {
|
|
31
|
+
if (char === '\r' || char === '\n') {
|
|
32
|
+
this.submit(this.value);
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
super.handleInput(char);
|
|
37
|
+
}
|
|
38
|
+
submit(value) {
|
|
39
|
+
if (this.status === 'pending') {
|
|
40
|
+
// We caught the submission from TextPrompt logic.
|
|
41
|
+
// Now verify correctness.
|
|
42
|
+
this.checkCorrectness(value).then((correct)=>{
|
|
43
|
+
this.isCorrect = correct;
|
|
44
|
+
this.status = 'revealed';
|
|
45
|
+
this.render(false);
|
|
46
|
+
});
|
|
47
|
+
} else {
|
|
48
|
+
// If revealed (or anything else), we proceed to final submission.
|
|
49
|
+
// This calls Prompt.submit
|
|
50
|
+
super.submit(value);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async checkCorrectness(value) {
|
|
54
|
+
try {
|
|
55
|
+
if (this.options.verify) {
|
|
56
|
+
return await this.options.verify(value);
|
|
57
|
+
}
|
|
58
|
+
if (this.options.correctAnswer) {
|
|
59
|
+
return value.trim().toLowerCase() === this.options.correctAnswer.trim().toLowerCase();
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
} catch (_e) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
render(firstRender) {
|
|
67
|
+
if (this.status === 'pending') {
|
|
68
|
+
super.render(firstRender);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// Revealed State
|
|
72
|
+
let output = '';
|
|
73
|
+
const icon = this.isCorrect ? `${_theme.theme.success}${_symbols.symbols.tick}` : `${_theme.theme.error}${_symbols.symbols.cross}`;
|
|
74
|
+
output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
75
|
+
const userValue = this.segments.join('');
|
|
76
|
+
// Display user input
|
|
77
|
+
if (this.isCorrect) {
|
|
78
|
+
output += ` ${_theme.theme.success}${userValue}${_ansi.ANSI.RESET} ${_theme.theme.success}(Correct)${_ansi.ANSI.RESET}`;
|
|
79
|
+
} else {
|
|
80
|
+
output += ` ${_theme.theme.error}${userValue}${_ansi.ANSI.RESET} ${_theme.theme.error}(Wrong)${_ansi.ANSI.RESET}`;
|
|
81
|
+
}
|
|
82
|
+
// Show correct answer if wrong
|
|
83
|
+
if (!this.isCorrect && this.options.correctAnswer) {
|
|
84
|
+
output += `\n ${_theme.theme.success}Correct Answer: ${this.options.correctAnswer}${_ansi.ANSI.RESET}`;
|
|
85
|
+
}
|
|
86
|
+
// Explanation
|
|
87
|
+
if (this.options.explanation) {
|
|
88
|
+
output += `\n\n${_ansi.ANSI.BOLD}Explanation:${_ansi.ANSI.RESET}\n${_theme.theme.muted}${this.options.explanation}${_ansi.ANSI.RESET}`;
|
|
89
|
+
}
|
|
90
|
+
output += `\n\n${_ansi.ANSI.DIM}(Press Enter to continue)${_ansi.ANSI.RESET}`;
|
|
91
|
+
this.renderFrame(output);
|
|
92
|
+
}
|
|
93
|
+
constructor(options){
|
|
94
|
+
super(options), _define_property(this, "status", 'pending'), _define_property(this, "isCorrect", false);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=quiz-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/quiz-text.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { QuizTextOptions } from '../types';\nimport { TextPrompt } from './text';\n\nexport class QuizTextPrompt extends TextPrompt<QuizTextOptions> {\n private status: 'pending' | 'revealed' = 'pending';\n private isCorrect: boolean = false;\n\n constructor(options: QuizTextOptions) {\n super(options);\n }\n\n protected handleInput(char: string) {\n if (this.status === 'revealed') {\n if (char === '\\r' || char === '\\n') {\n this.submit(this.value);\n }\n return;\n }\n\n super.handleInput(char);\n }\n\n protected submit(value: string) {\n if (this.status === 'pending') {\n // We caught the submission from TextPrompt logic.\n // Now verify correctness.\n\n this.checkCorrectness(value).then(correct => {\n this.isCorrect = correct;\n this.status = 'revealed';\n this.render(false);\n });\n } else {\n // If revealed (or anything else), we proceed to final submission.\n // This calls Prompt.submit\n super.submit(value);\n }\n }\n\n private async checkCorrectness(value: string): Promise<boolean> {\n try {\n if (this.options.verify) {\n return await this.options.verify(value);\n }\n if (this.options.correctAnswer) {\n return value.trim().toLowerCase() === this.options.correctAnswer.trim().toLowerCase();\n }\n return false;\n } catch (_e) {\n return false;\n }\n }\n\n protected render(firstRender: boolean) {\n if (this.status === 'pending') {\n super.render(firstRender);\n return;\n }\n\n // Revealed State\n let output = '';\n const icon = this.isCorrect ? `${theme.success}${symbols.tick}` : `${theme.error}${symbols.cross}`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n const userValue = this.segments.join('');\n\n // Display user input\n if (this.isCorrect) {\n output += ` ${theme.success}${userValue}${ANSI.RESET} ${theme.success}(Correct)${ANSI.RESET}`;\n } else {\n output += ` ${theme.error}${userValue}${ANSI.RESET} ${theme.error}(Wrong)${ANSI.RESET}`;\n }\n\n // Show correct answer if wrong\n if (!this.isCorrect && this.options.correctAnswer) {\n output += `\\n ${theme.success}Correct Answer: ${this.options.correctAnswer}${ANSI.RESET}`;\n }\n\n // Explanation\n if (this.options.explanation) {\n output += `\\n\\n${ANSI.BOLD}Explanation:${ANSI.RESET}\\n${theme.muted}${this.options.explanation}${ANSI.RESET}`;\n }\n\n output += `\\n\\n${ANSI.DIM}(Press Enter to continue)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n}\n"],"names":["QuizTextPrompt","TextPrompt","handleInput","char","status","submit","value","checkCorrectness","then","correct","isCorrect","render","options","verify","correctAnswer","trim","toLowerCase","_e","firstRender","output","icon","theme","success","symbols","tick","error","cross","ANSI","BOLD","title","message","RESET","userValue","segments","join","explanation","muted","DIM","renderFrame"],"mappings":"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"}
|
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "RangePrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return RangePrompt;
|
|
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;
|
|
22
25
|
}
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
let RangePrompt = class RangePrompt extends _base.Prompt {
|
|
23
29
|
render(_firstRender) {
|
|
24
30
|
const width = 20;
|
|
25
31
|
const range = this.options.max - this.options.min;
|
|
@@ -31,48 +37,41 @@ class RangePrompt extends base_1.Prompt {
|
|
|
31
37
|
const ratioHigh = range === 0 ? 1 : (high - this.options.min) / range;
|
|
32
38
|
const posHigh = Math.round(ratioHigh * width);
|
|
33
39
|
let bar = '';
|
|
34
|
-
for
|
|
40
|
+
for(let i = 0; i <= width; i++){
|
|
35
41
|
if (i === posLow && i === posHigh) {
|
|
36
42
|
// Collision
|
|
37
|
-
bar += `${
|
|
38
|
-
}
|
|
39
|
-
else if (i === posLow) {
|
|
43
|
+
bar += `${_theme.theme.main}|${_ansi.ANSI.RESET}`;
|
|
44
|
+
} else if (i === posLow) {
|
|
40
45
|
if (this.activeHandle === 'low') {
|
|
41
46
|
// Highlight active handle
|
|
42
|
-
bar += `${
|
|
47
|
+
bar += `${_theme.theme.main}${_ansi.ANSI.REVERSE}O${_ansi.ANSI.RESET}`;
|
|
48
|
+
} else {
|
|
49
|
+
bar += `${_theme.theme.main}O${_ansi.ANSI.RESET}`;
|
|
43
50
|
}
|
|
44
|
-
|
|
45
|
-
bar += `${theme_1.theme.main}O${ansi_1.ANSI.RESET}`;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
else if (i === posHigh) {
|
|
51
|
+
} else if (i === posHigh) {
|
|
49
52
|
if (this.activeHandle === 'high') {
|
|
50
53
|
// Highlight active handle
|
|
51
|
-
bar += `${
|
|
54
|
+
bar += `${_theme.theme.main}${_ansi.ANSI.REVERSE}O${_ansi.ANSI.RESET}`;
|
|
55
|
+
} else {
|
|
56
|
+
bar += `${_theme.theme.main}O${_ansi.ANSI.RESET}`;
|
|
52
57
|
}
|
|
53
|
-
|
|
54
|
-
bar += `${theme_1.theme.main}O${ansi_1.ANSI.RESET}`;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
else if (i > posLow && i < posHigh) {
|
|
58
|
+
} else if (i > posLow && i < posHigh) {
|
|
58
59
|
// Active range
|
|
59
|
-
bar += `${
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
60
|
+
bar += `${_theme.theme.main}=${_ansi.ANSI.RESET}`;
|
|
61
|
+
} else {
|
|
62
62
|
// Dimmed
|
|
63
|
-
bar +=
|
|
63
|
+
bar += _symbols.symbols.line;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
const unit = this.options.unit || '';
|
|
67
67
|
// Format the value display
|
|
68
68
|
let valueDisplay = '';
|
|
69
69
|
if (this.activeHandle === 'low') {
|
|
70
|
-
valueDisplay = `${
|
|
70
|
+
valueDisplay = `${_ansi.ANSI.UNDERLINE}${low}${_ansi.ANSI.RESET}-${high}`;
|
|
71
|
+
} else {
|
|
72
|
+
valueDisplay = `${low}-${_ansi.ANSI.UNDERLINE}${high}${_ansi.ANSI.RESET}`;
|
|
71
73
|
}
|
|
72
|
-
|
|
73
|
-
valueDisplay = `${low}-${ansi_1.ANSI.UNDERLINE}${high}${ansi_1.ANSI.RESET}`;
|
|
74
|
-
}
|
|
75
|
-
const output = `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} [${bar}] ${valueDisplay}${unit}`;
|
|
74
|
+
const output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} [${bar}] ${valueDisplay}${unit}`;
|
|
76
75
|
this.renderFrame(output);
|
|
77
76
|
}
|
|
78
77
|
handleInput(char) {
|
|
@@ -87,54 +86,79 @@ class RangePrompt extends base_1.Prompt {
|
|
|
87
86
|
}
|
|
88
87
|
const step = this.options.step || 1;
|
|
89
88
|
let [low, high] = this.value;
|
|
90
|
-
if (this.isLeft(char)) {
|
|
89
|
+
if (this.isLeft(char)) {
|
|
91
90
|
if (this.activeHandle === 'low') {
|
|
92
91
|
low = Math.max(this.options.min, low - step);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
92
|
+
} else {
|
|
95
93
|
high = Math.max(low, high - step);
|
|
96
94
|
}
|
|
97
95
|
}
|
|
98
|
-
if (this.isRight(char)) {
|
|
96
|
+
if (this.isRight(char)) {
|
|
99
97
|
if (this.activeHandle === 'low') {
|
|
100
98
|
low = Math.min(high, low + step);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
99
|
+
} else {
|
|
103
100
|
high = Math.min(this.options.max, high + step);
|
|
104
101
|
}
|
|
105
102
|
}
|
|
106
103
|
// Rounding to avoid floating point errors
|
|
107
104
|
low = Math.round(low * 10000) / 10000;
|
|
108
105
|
high = Math.round(high * 10000) / 10000;
|
|
109
|
-
this.value = [
|
|
106
|
+
this.value = [
|
|
107
|
+
low,
|
|
108
|
+
high
|
|
109
|
+
];
|
|
110
110
|
this.render(false);
|
|
111
111
|
}
|
|
112
112
|
handleMouse(event) {
|
|
113
113
|
if (event.action === 'scroll') {
|
|
114
114
|
const step = this.options.step || 1;
|
|
115
115
|
let [low, high] = this.value;
|
|
116
|
-
if (event.scroll === 'up') {
|
|
116
|
+
if (event.scroll === 'up') {
|
|
117
117
|
if (this.activeHandle === 'low') {
|
|
118
118
|
low = Math.min(high, low + step);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
119
|
+
} else {
|
|
121
120
|
high = Math.min(this.options.max, high + step);
|
|
122
121
|
}
|
|
123
122
|
}
|
|
124
|
-
if (event.scroll === 'down') {
|
|
123
|
+
if (event.scroll === 'down') {
|
|
125
124
|
if (this.activeHandle === 'low') {
|
|
126
125
|
low = Math.max(this.options.min, low - step);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
126
|
+
} else {
|
|
129
127
|
high = Math.max(low, high - step);
|
|
130
128
|
}
|
|
131
129
|
}
|
|
132
130
|
// Rounding
|
|
133
131
|
low = Math.round(low * 10000) / 10000;
|
|
134
132
|
high = Math.round(high * 10000) / 10000;
|
|
135
|
-
this.value = [
|
|
133
|
+
this.value = [
|
|
134
|
+
low,
|
|
135
|
+
high
|
|
136
|
+
];
|
|
136
137
|
this.render(false);
|
|
137
138
|
}
|
|
138
139
|
}
|
|
139
|
-
|
|
140
|
-
|
|
140
|
+
constructor(options){
|
|
141
|
+
super(options), _define_property(this, "activeHandle", 'low');
|
|
142
|
+
// Ensure initial is sorted and within bounds, default to [min, max] if not provided
|
|
143
|
+
const initial = options.initial || [
|
|
144
|
+
options.min,
|
|
145
|
+
options.max
|
|
146
|
+
];
|
|
147
|
+
// Basic validation for initial
|
|
148
|
+
let [low, high] = initial;
|
|
149
|
+
low = Math.max(options.min, Math.min(low, options.max));
|
|
150
|
+
high = Math.max(options.min, Math.min(high, options.max));
|
|
151
|
+
if (low > high) {
|
|
152
|
+
[low, high] = [
|
|
153
|
+
high,
|
|
154
|
+
low
|
|
155
|
+
];
|
|
156
|
+
}
|
|
157
|
+
this.value = [
|
|
158
|
+
low,
|
|
159
|
+
high
|
|
160
|
+
];
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
//# sourceMappingURL=range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/range.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { RangeOptions, MouseEvent } from '../types';\n\nexport class RangePrompt extends Prompt<[number, number], RangeOptions> {\n private activeHandle: 'low' | 'high' = 'low';\n\n constructor(options: RangeOptions) {\n super(options);\n // Ensure initial is sorted and within bounds, default to [min, max] if not provided\n const initial = options.initial || [options.min, options.max];\n // Basic validation for initial\n let [low, high] = initial;\n low = Math.max(options.min, Math.min(low, options.max));\n high = Math.max(options.min, Math.min(high, options.max));\n if (low > high) {\n [low, high] = [high, low];\n }\n this.value = [low, high];\n }\n\n protected render(_firstRender: boolean) {\n const width = 20;\n const range = this.options.max - this.options.min;\n const [low, high] = this.value;\n\n // Calculate positions (0 to width)\n // Avoid division by zero if min == max\n const ratioLow = range === 0 ? 0 : (low - this.options.min) / range;\n const posLow = Math.round(ratioLow * width);\n\n const ratioHigh = range === 0 ? 1 : (high - this.options.min) / range;\n const posHigh = Math.round(ratioHigh * width);\n\n let bar = '';\n for (let i = 0; i <= width; i++) {\n if (i === posLow && i === posHigh) {\n // Collision\n bar += `${theme.main}|${ANSI.RESET}`;\n } else if (i === posLow) {\n if (this.activeHandle === 'low') {\n // Highlight active handle\n bar += `${theme.main}${ANSI.REVERSE}O${ANSI.RESET}`;\n } else {\n bar += `${theme.main}O${ANSI.RESET}`;\n }\n } else if (i === posHigh) {\n if (this.activeHandle === 'high') {\n // Highlight active handle\n bar += `${theme.main}${ANSI.REVERSE}O${ANSI.RESET}`;\n } else {\n bar += `${theme.main}O${ANSI.RESET}`;\n }\n } else if (i > posLow && i < posHigh) {\n // Active range\n bar += `${theme.main}=${ANSI.RESET}`;\n } else {\n // Dimmed\n bar += symbols.line;\n }\n }\n\n const unit = this.options.unit || '';\n\n // Format the value display\n let valueDisplay = '';\n if (this.activeHandle === 'low') {\n valueDisplay = `${ANSI.UNDERLINE}${low}${ANSI.RESET}-${high}`;\n } else {\n valueDisplay = `${low}-${ANSI.UNDERLINE}${high}${ANSI.RESET}`;\n }\n\n const output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} [${bar}] ${valueDisplay}${unit}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n this.submit(this.value);\n return;\n }\n\n if (char === ' ' || char === '\\t') {\n this.activeHandle = this.activeHandle === 'low' ? 'high' : 'low';\n this.render(false);\n return;\n }\n\n const step = this.options.step || 1;\n let [low, high] = this.value;\n\n if (this.isLeft(char)) { // Left\n if (this.activeHandle === 'low') {\n low = Math.max(this.options.min, low - step);\n } else {\n high = Math.max(low, high - step);\n }\n }\n if (this.isRight(char)) { // Right\n if (this.activeHandle === 'low') {\n low = Math.min(high, low + step);\n } else {\n high = Math.min(this.options.max, high + step);\n }\n }\n\n // Rounding to avoid floating point errors\n low = Math.round(low * 10000) / 10000;\n high = Math.round(high * 10000) / 10000;\n\n this.value = [low, high];\n this.render(false);\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n const step = this.options.step || 1;\n let [low, high] = this.value;\n\n if (event.scroll === 'up') { // Increase\n if (this.activeHandle === 'low') {\n low = Math.min(high, low + step);\n } else {\n high = Math.min(this.options.max, high + step);\n }\n }\n if (event.scroll === 'down') { // Decrease\n if (this.activeHandle === 'low') {\n low = Math.max(this.options.min, low - step);\n } else {\n high = Math.max(low, high - step);\n }\n }\n\n // Rounding\n low = Math.round(low * 10000) / 10000;\n high = Math.round(high * 10000) / 10000;\n\n this.value = [low, high];\n this.render(false);\n }\n }\n}\n"],"names":["RangePrompt","Prompt","render","_firstRender","width","range","options","max","min","low","high","value","ratioLow","posLow","Math","round","ratioHigh","posHigh","bar","i","theme","main","ANSI","RESET","activeHandle","REVERSE","symbols","line","unit","valueDisplay","UNDERLINE","output","success","BOLD","title","message","renderFrame","handleInput","char","submit","step","isLeft","isRight","handleMouse","event","action","scroll","initial"],"mappings":"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"}
|
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
constructor(options) {
|
|
10
|
-
super(options);
|
|
11
|
-
// Default to min if initial is not provided
|
|
12
|
-
this.value = options.initial ?? (options.min || 1);
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "RatingPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return RatingPrompt;
|
|
13
9
|
}
|
|
10
|
+
});
|
|
11
|
+
const _ansi = require("../ansi");
|
|
12
|
+
const _base = require("../base");
|
|
13
|
+
const _theme = require("../theme");
|
|
14
|
+
const _symbols = require("../symbols");
|
|
15
|
+
let RatingPrompt = class RatingPrompt extends _base.Prompt {
|
|
14
16
|
render(_firstRender) {
|
|
15
17
|
const min = this.options.min || 1;
|
|
16
18
|
const max = this.options.max || 5;
|
|
17
19
|
// Render stars
|
|
18
20
|
let stars = '';
|
|
19
|
-
for
|
|
21
|
+
for(let i = min; i <= max; i++){
|
|
20
22
|
if (i <= this.value) {
|
|
21
|
-
stars += `${
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
stars += `${theme_1.theme.muted}${symbols_1.symbols.starEmpty}${ansi_1.ANSI.RESET} `;
|
|
23
|
+
stars += `${_theme.theme.success}${_symbols.symbols.star}${_ansi.ANSI.RESET} `;
|
|
24
|
+
} else {
|
|
25
|
+
stars += `${_theme.theme.muted}${_symbols.symbols.starEmpty}${_ansi.ANSI.RESET} `;
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
|
-
const output = `${
|
|
28
|
+
const output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${stars}`;
|
|
28
29
|
this.renderFrame(output);
|
|
29
30
|
}
|
|
30
31
|
handleInput(char) {
|
|
@@ -35,13 +36,12 @@ class RatingPrompt extends base_1.Prompt {
|
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
37
38
|
// Arrow keys
|
|
38
|
-
if (this.isLeft(char) || this.isDown(char)) {
|
|
39
|
+
if (this.isLeft(char) || this.isDown(char)) {
|
|
39
40
|
if (this.value > min) {
|
|
40
41
|
this.value--;
|
|
41
42
|
this.render(false);
|
|
42
43
|
}
|
|
43
|
-
}
|
|
44
|
-
else if (this.isRight(char) || this.isUp(char)) { // Right/Up increases
|
|
44
|
+
} else if (this.isRight(char) || this.isUp(char)) {
|
|
45
45
|
if (this.value < max) {
|
|
46
46
|
this.value++;
|
|
47
47
|
this.render(false);
|
|
@@ -65,8 +65,7 @@ class RatingPrompt extends base_1.Prompt {
|
|
|
65
65
|
this.value++;
|
|
66
66
|
this.render(false);
|
|
67
67
|
}
|
|
68
|
-
}
|
|
69
|
-
else if (event.scroll === 'down') {
|
|
68
|
+
} else if (event.scroll === 'down') {
|
|
70
69
|
if (this.value > min) {
|
|
71
70
|
this.value--;
|
|
72
71
|
this.render(false);
|
|
@@ -74,5 +73,11 @@ class RatingPrompt extends base_1.Prompt {
|
|
|
74
73
|
}
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
constructor(options){
|
|
77
|
+
super(options);
|
|
78
|
+
// Default to min if initial is not provided
|
|
79
|
+
this.value = options.initial ?? (options.min || 1);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=rating.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/rating.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { RatingOptions, MouseEvent } from '../types';\n\nexport class RatingPrompt extends Prompt<number, RatingOptions> {\n constructor(options: RatingOptions) {\n super(options);\n // Default to min if initial is not provided\n this.value = options.initial ?? (options.min || 1);\n }\n\n protected render(_firstRender: boolean) {\n const min = this.options.min || 1;\n const max = this.options.max || 5;\n\n // Render stars\n let stars = '';\n for (let i = min; i <= max; i++) {\n if (i <= this.value) {\n stars += `${theme.success}${symbols.star}${ANSI.RESET} `;\n } else {\n stars += `${theme.muted}${symbols.starEmpty}${ANSI.RESET} `;\n }\n }\n\n const output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${stars}`;\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n const min = this.options.min || 1;\n const max = this.options.max || 5;\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.value);\n return;\n }\n\n // Arrow keys\n if (this.isLeft(char) || this.isDown(char)) { // Left/Down decreases\n if (this.value > min) {\n this.value--;\n this.render(false);\n }\n }\n else if (this.isRight(char) || this.isUp(char)) { // Right/Up increases\n if (this.value < max) {\n this.value++;\n this.render(false);\n }\n }\n\n // Number keys (1-9)\n const num = parseInt(char);\n if (!isNaN(num)) {\n if (num >= min && num <= max) {\n this.value = num;\n this.render(false);\n }\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n const min = this.options.min || 1;\n const max = this.options.max || 5;\n\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.value < max) {\n this.value++;\n this.render(false);\n }\n } else if (event.scroll === 'down') {\n if (this.value > min) {\n this.value--;\n this.render(false);\n }\n }\n }\n }\n}\n"],"names":["RatingPrompt","Prompt","render","_firstRender","min","options","max","stars","i","value","theme","success","symbols","star","ANSI","RESET","muted","starEmpty","output","BOLD","title","message","renderFrame","handleInput","char","submit","isLeft","isDown","isRight","isUp","num","parseInt","isNaN","handleMouse","event","action","scroll","initial"],"mappings":"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"}
|
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "RegexPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return RegexPrompt;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _base = require("../base");
|
|
12
|
+
const _ansi = require("../ansi");
|
|
13
|
+
const _theme = require("../theme");
|
|
14
|
+
const _symbols = require("../symbols");
|
|
15
|
+
const _utils = require("../utils");
|
|
16
|
+
function _define_property(obj, key, value) {
|
|
17
|
+
if (key in obj) {
|
|
18
|
+
Object.defineProperty(obj, key, {
|
|
19
|
+
value: value,
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
obj[key] = value;
|
|
20
26
|
}
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
let RegexPrompt = class RegexPrompt extends _base.Prompt {
|
|
21
30
|
validateRegex() {
|
|
22
31
|
try {
|
|
23
32
|
if (this.input.length === 0) {
|
|
@@ -27,48 +36,46 @@ class RegexPrompt extends base_1.Prompt {
|
|
|
27
36
|
}
|
|
28
37
|
this.regex = new RegExp(this.input, this.options.flags);
|
|
29
38
|
this.error = '';
|
|
30
|
-
}
|
|
31
|
-
catch (e) {
|
|
39
|
+
} catch (e) {
|
|
32
40
|
this.regex = null;
|
|
33
41
|
this.error = e.message.replace(/^Invalid regular expression: \/.*?\/: /, '');
|
|
34
42
|
}
|
|
35
43
|
}
|
|
36
44
|
render(_firstRender) {
|
|
37
45
|
// Line 1: Header + Input
|
|
38
|
-
const icon = this.error ? `${
|
|
39
|
-
const prefix = `${icon} ${
|
|
46
|
+
const icon = this.error ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
|
|
47
|
+
const prefix = `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
|
|
40
48
|
let displayInput = '';
|
|
41
49
|
// Reconstruct input with cursor handling
|
|
42
50
|
// Simple rendering for now, mimicking text prompt logic simplified
|
|
43
51
|
const beforeCursor = this.segments.slice(0, this.cursor).join('');
|
|
44
52
|
const afterCursor = this.segments.slice(this.cursor).join('');
|
|
45
|
-
displayInput =
|
|
53
|
+
displayInput = _theme.theme.main + beforeCursor + _ansi.ANSI.UNDERLINE + (afterCursor[0] || ' ') + _ansi.ANSI.RESET + '\x1b[24m' + _theme.theme.main + afterCursor.slice(1);
|
|
46
54
|
if (this.segments.length === 0) {
|
|
47
55
|
const placeholder = '(Type regex pattern)';
|
|
48
56
|
// If empty, show cursor on the start of placeholder
|
|
49
|
-
displayInput =
|
|
50
|
-
}
|
|
51
|
-
else if (this.cursor >= this.segments.length) {
|
|
57
|
+
displayInput = _theme.theme.muted + _ansi.ANSI.UNDERLINE + placeholder[0] + _ansi.ANSI.RESET + '\x1b[24m' + _theme.theme.muted + placeholder.slice(1) + _ansi.ANSI.RESET;
|
|
58
|
+
} else if (this.cursor >= this.segments.length) {
|
|
52
59
|
// Cursor at end
|
|
53
|
-
displayInput =
|
|
60
|
+
displayInput = _theme.theme.main + this.segments.join('') + _ansi.ANSI.UNDERLINE + ' ' + _ansi.ANSI.RESET + '\x1b[24m';
|
|
54
61
|
}
|
|
55
62
|
let output = `${prefix}${displayInput}`;
|
|
56
63
|
// Line 2: Error (if any)
|
|
57
64
|
if (this.error && this.input.length > 0) {
|
|
58
|
-
output += `\n${
|
|
65
|
+
output += `\n${_theme.theme.error}>> Invalid Regex: ${this.error}${_ansi.ANSI.RESET}`;
|
|
59
66
|
}
|
|
60
67
|
// Line 3+: Test Cases
|
|
61
|
-
output += `\n\n${
|
|
62
|
-
this.options.tests.forEach(testCase
|
|
68
|
+
output += `\n\n${_ansi.ANSI.BOLD}Test Cases:${_ansi.ANSI.RESET}`;
|
|
69
|
+
this.options.tests.forEach((testCase)=>{
|
|
63
70
|
let isMatch = false;
|
|
64
71
|
if (this.regex) {
|
|
65
72
|
isMatch = this.regex.test(testCase);
|
|
66
73
|
}
|
|
67
|
-
const statusIcon = isMatch ? `${
|
|
74
|
+
const statusIcon = isMatch ? `${_theme.theme.success}${_symbols.symbols.tick}` : `${_theme.theme.error}${_symbols.symbols.cross}`;
|
|
68
75
|
// Highlight the match if possible? simpler to just show status for now
|
|
69
76
|
// Maybe color the text green/red based on match
|
|
70
|
-
const color = isMatch ?
|
|
71
|
-
output += `\n ${statusIcon} ${color}${testCase}${
|
|
77
|
+
const color = isMatch ? _theme.theme.success : _theme.theme.muted;
|
|
78
|
+
output += `\n ${statusIcon} ${color}${testCase}${_ansi.ANSI.RESET}`;
|
|
72
79
|
});
|
|
73
80
|
this.renderFrame(output);
|
|
74
81
|
}
|
|
@@ -119,7 +126,7 @@ class RegexPrompt extends base_1.Prompt {
|
|
|
119
126
|
}
|
|
120
127
|
// Regular Typing
|
|
121
128
|
if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
|
|
122
|
-
const newSegments = (0,
|
|
129
|
+
const newSegments = (0, _utils.safeSplit)(char);
|
|
123
130
|
this.segments.splice(this.cursor, 0, ...newSegments);
|
|
124
131
|
this.cursor += newSegments.length;
|
|
125
132
|
this.input = this.segments.join('');
|
|
@@ -127,5 +134,12 @@ class RegexPrompt extends base_1.Prompt {
|
|
|
127
134
|
this.render(false);
|
|
128
135
|
}
|
|
129
136
|
}
|
|
130
|
-
|
|
131
|
-
|
|
137
|
+
constructor(options){
|
|
138
|
+
super(options), _define_property(this, "input", ''), _define_property(this, "cursor", 0), _define_property(this, "segments", []), _define_property(this, "error", ''), _define_property(this, "regex", null);
|
|
139
|
+
this.input = '';
|
|
140
|
+
this.segments = [];
|
|
141
|
+
this.validateRegex();
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
//# sourceMappingURL=regex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/regex.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { RegexOptions } from '../types';\nimport { ANSI } from '../ansi';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { safeSplit } from '../utils';\n\nexport class RegexPrompt extends Prompt<RegExp, RegexOptions> {\n private input: string = '';\n private cursor: number = 0;\n private segments: string[] = [];\n private error: string = '';\n private regex: RegExp | null = null;\n\n constructor(options: RegexOptions) {\n super(options);\n this.input = '';\n this.segments = [];\n this.validateRegex();\n }\n\n private validateRegex() {\n try {\n if (this.input.length === 0) {\n this.regex = null;\n this.error = 'Regex is empty';\n return;\n }\n this.regex = new RegExp(this.input, this.options.flags);\n this.error = '';\n } catch (e: any) {\n this.regex = null;\n this.error = e.message.replace(/^Invalid regular expression: \\/.*?\\/: /, '');\n }\n }\n\n protected render(_firstRender: boolean) {\n // Line 1: Header + Input\n const icon = this.error ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n const prefix = `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} `;\n\n let displayInput = '';\n // Reconstruct input with cursor handling\n // Simple rendering for now, mimicking text prompt logic simplified\n const beforeCursor = this.segments.slice(0, this.cursor).join('');\n const afterCursor = this.segments.slice(this.cursor).join('');\n\n displayInput = theme.main + beforeCursor + ANSI.UNDERLINE + (afterCursor[0] || ' ') + ANSI.RESET + '\\x1b[24m' + theme.main + afterCursor.slice(1);\n\n if (this.segments.length === 0) {\n const placeholder = '(Type regex pattern)';\n // If empty, show cursor on the start of placeholder\n displayInput = theme.muted + ANSI.UNDERLINE + placeholder[0] + ANSI.RESET + '\\x1b[24m' + theme.muted + placeholder.slice(1) + ANSI.RESET;\n } else if (this.cursor >= this.segments.length) {\n // Cursor at end\n displayInput = theme.main + this.segments.join('') + ANSI.UNDERLINE + ' ' + ANSI.RESET + '\\x1b[24m';\n }\n\n let output = `${prefix}${displayInput}`;\n\n // Line 2: Error (if any)\n if (this.error && this.input.length > 0) {\n output += `\\n${theme.error}>> Invalid Regex: ${this.error}${ANSI.RESET}`;\n }\n\n // Line 3+: Test Cases\n output += `\\n\\n${ANSI.BOLD}Test Cases:${ANSI.RESET}`;\n\n this.options.tests.forEach(testCase => {\n let isMatch = false;\n if (this.regex) {\n isMatch = this.regex.test(testCase);\n }\n\n const statusIcon = isMatch ? `${theme.success}${symbols.tick}` : `${theme.error}${symbols.cross}`;\n // Highlight the match if possible? simpler to just show status for now\n // Maybe color the text green/red based on match\n const color = isMatch ? theme.success : theme.muted;\n output += `\\n ${statusIcon} ${color}${testCase}${ANSI.RESET}`;\n });\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n // Enter\n if (char === '\\r' || char === '\\n') {\n if (this.regex && !this.error) {\n this.submit(this.regex);\n }\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.cursor > 0) {\n this.segments.splice(this.cursor - 1, 1);\n this.cursor--;\n this.input = this.segments.join('');\n this.validateRegex();\n this.render(false);\n }\n return;\n }\n\n // Left Arrow\n if (this.isLeft(char)) {\n if (this.cursor > 0) {\n this.cursor--;\n this.render(false);\n }\n return;\n }\n\n // Right Arrow\n if (this.isRight(char)) {\n if (this.cursor < this.segments.length) {\n this.cursor++;\n this.render(false);\n }\n return;\n }\n\n // Delete\n if (char === '\\u001b[3~') {\n if (this.cursor < this.segments.length) {\n this.segments.splice(this.cursor, 1);\n this.input = this.segments.join('');\n this.validateRegex();\n this.render(false);\n }\n return;\n }\n\n // Regular Typing\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n const newSegments = safeSplit(char);\n this.segments.splice(this.cursor, 0, ...newSegments);\n this.cursor += newSegments.length;\n this.input = this.segments.join('');\n this.validateRegex();\n this.render(false);\n }\n }\n}\n"],"names":["RegexPrompt","Prompt","validateRegex","input","length","regex","error","RegExp","options","flags","e","message","replace","render","_firstRender","icon","theme","symbols","cross","success","prefix","ANSI","BOLD","title","RESET","displayInput","beforeCursor","segments","slice","cursor","join","afterCursor","main","UNDERLINE","placeholder","muted","output","tests","forEach","testCase","isMatch","test","statusIcon","tick","color","renderFrame","handleInput","char","_key","submit","splice","isLeft","isRight","startsWith","newSegments","safeSplit"],"mappings":"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"}
|