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,170 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "RegionPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return RegionPrompt;
|
|
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 RegionPrompt = class RegionPrompt extends _base.Prompt {
|
|
28
|
-
render(_firstRender) {
|
|
29
|
-
let output = '';
|
|
30
|
-
// Title
|
|
31
|
-
output += `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
32
|
-
// Prepare Map Buffer
|
|
33
|
-
const lines = this.options.mapArt.split('\n');
|
|
34
|
-
const height = lines.length;
|
|
35
|
-
const width = Math.max(...lines.map((l)=>l.length));
|
|
36
|
-
// Overlay regions
|
|
37
|
-
// We will build the output line by line.
|
|
38
|
-
for(let y = 0; y < height; y++){
|
|
39
|
-
let line = lines[y] || '';
|
|
40
|
-
// Pad line if needed
|
|
41
|
-
if (line.length < width) line += ' '.repeat(width - line.length);
|
|
42
|
-
// Check for regions on this line
|
|
43
|
-
const regionsOnLine = this.options.regions.filter((r)=>Math.round(r.y) === y);
|
|
44
|
-
// Reconstruct line with overlays
|
|
45
|
-
// This is naive string replacement; might break if overlaps
|
|
46
|
-
const lineBuffer = line.split('');
|
|
47
|
-
regionsOnLine.forEach((r)=>{
|
|
48
|
-
const label = r.label || '•';
|
|
49
|
-
// Draw label starting at r.x
|
|
50
|
-
for(let i = 0; i < label.length; i++){
|
|
51
|
-
const lx = Math.round(r.x) + i;
|
|
52
|
-
if (lx < lineBuffer.length) {
|
|
53
|
-
// We don't apply color here yet, just content
|
|
54
|
-
lineBuffer[lx] = label[i];
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
// Now render the line with coloring
|
|
59
|
-
// We need to know which ranges are regions
|
|
60
|
-
let renderedLine = '';
|
|
61
|
-
for(let x = 0; x < lineBuffer.length; x++){
|
|
62
|
-
// Check if this x,y belongs to a region
|
|
63
|
-
const activeRegion = this.options.regions.find((r)=>Math.round(r.y) === y && x >= Math.round(r.x) && x < Math.round(r.x) + (r.label || '•').length);
|
|
64
|
-
if (activeRegion) {
|
|
65
|
-
const isSelected = this.options.regions[this.cursorIndex] === activeRegion;
|
|
66
|
-
if (isSelected) {
|
|
67
|
-
renderedLine += `${_theme.theme.main}${_ansi.ANSI.REVERSE}${lineBuffer[x]}${_ansi.ANSI.RESET}`;
|
|
68
|
-
} else {
|
|
69
|
-
renderedLine += `${_theme.theme.success}${lineBuffer[x]}${_ansi.ANSI.RESET}`;
|
|
70
|
-
}
|
|
71
|
-
} else {
|
|
72
|
-
renderedLine += `${_ansi.ANSI.DIM}${lineBuffer[x]}${_ansi.ANSI.RESET}`;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
output += ' ' + renderedLine + '\n';
|
|
76
|
-
}
|
|
77
|
-
// Region Description
|
|
78
|
-
const currentRegion = this.options.regions[this.cursorIndex];
|
|
79
|
-
if (currentRegion && currentRegion.description) {
|
|
80
|
-
output += `\n${_theme.theme.main}❯ ${_ansi.ANSI.BOLD}${currentRegion.id}${_ansi.ANSI.RESET}: ${currentRegion.description}`;
|
|
81
|
-
} else {
|
|
82
|
-
output += `\n${_theme.theme.main}❯ ${_ansi.ANSI.BOLD}${currentRegion.id}${_ansi.ANSI.RESET}`;
|
|
83
|
-
}
|
|
84
|
-
output += `\n${_ansi.ANSI.DIM}(Arrows to navigate, Enter to select)${_ansi.ANSI.RESET}`;
|
|
85
|
-
this.renderFrame(output);
|
|
86
|
-
}
|
|
87
|
-
handleInput(char, _key) {
|
|
88
|
-
if (char === '\r' || char === '\n') {
|
|
89
|
-
this.submit(this.options.regions[this.cursorIndex].id);
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
if (this.isUp(char)) this.navigate('up');
|
|
93
|
-
else if (this.isDown(char)) this.navigate('down');
|
|
94
|
-
else if (this.isLeft(char)) this.navigate('left');
|
|
95
|
-
else if (this.isRight(char)) this.navigate('right');
|
|
96
|
-
}
|
|
97
|
-
navigate(direction) {
|
|
98
|
-
const current = this.options.regions[this.cursorIndex];
|
|
99
|
-
let bestCandidate = null;
|
|
100
|
-
let bestScore = Infinity;
|
|
101
|
-
this.options.regions.forEach((r, idx)=>{
|
|
102
|
-
if (idx === this.cursorIndex) return;
|
|
103
|
-
const dx = r.x - current.x;
|
|
104
|
-
const dy = r.y - current.y;
|
|
105
|
-
const distSq = dx * dx + dy * dy;
|
|
106
|
-
let isValid = false;
|
|
107
|
-
let anglePenalty = 0;
|
|
108
|
-
// Simple direction check + Angle weighting
|
|
109
|
-
// We want small distance and small angle deviation
|
|
110
|
-
switch(direction){
|
|
111
|
-
case 'up':
|
|
112
|
-
if (dy < 0) {
|
|
113
|
-
isValid = true;
|
|
114
|
-
// ideal: dx=0. Penalty for dx.
|
|
115
|
-
anglePenalty = Math.abs(dx) * 0.5;
|
|
116
|
-
}
|
|
117
|
-
break;
|
|
118
|
-
case 'down':
|
|
119
|
-
if (dy > 0) {
|
|
120
|
-
isValid = true;
|
|
121
|
-
anglePenalty = Math.abs(dx) * 0.5;
|
|
122
|
-
}
|
|
123
|
-
break;
|
|
124
|
-
case 'left':
|
|
125
|
-
if (dx < 0) {
|
|
126
|
-
isValid = true;
|
|
127
|
-
anglePenalty = Math.abs(dy) * 2.0; // Penalize Y deviation more for horiz movement
|
|
128
|
-
}
|
|
129
|
-
break;
|
|
130
|
-
case 'right':
|
|
131
|
-
if (dx > 0) {
|
|
132
|
-
isValid = true;
|
|
133
|
-
anglePenalty = Math.abs(dy) * 2.0;
|
|
134
|
-
}
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
if (isValid) {
|
|
138
|
-
const score = distSq + anglePenalty * anglePenalty * 5; // Heuristic
|
|
139
|
-
if (score < bestScore) {
|
|
140
|
-
bestScore = score;
|
|
141
|
-
bestCandidate = r;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
if (bestCandidate) {
|
|
146
|
-
this.cursorIndex = this.options.regions.indexOf(bestCandidate);
|
|
147
|
-
this.render(false);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
handleMouse(event) {
|
|
151
|
-
// Cycle with scroll
|
|
152
|
-
if (event.action === 'scroll') {
|
|
153
|
-
if (event.scroll === 'up') {
|
|
154
|
-
this.cursorIndex = (this.cursorIndex - 1 + this.options.regions.length) % this.options.regions.length;
|
|
155
|
-
} else {
|
|
156
|
-
this.cursorIndex = (this.cursorIndex + 1) % this.options.regions.length;
|
|
157
|
-
}
|
|
158
|
-
this.render(false);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
constructor(options){
|
|
162
|
-
super(options), _define_property(this, "cursorIndex", 0), _define_property(this, "errorMsg", '');
|
|
163
|
-
if (options.initial) {
|
|
164
|
-
const idx = options.regions.findIndex((r)=>r.id === options.initial);
|
|
165
|
-
if (idx !== -1) this.cursorIndex = idx;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
//# sourceMappingURL=region.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/region.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { RegionOptions, MouseEvent, MapRegion } from '../types';\n\nexport class RegionPrompt extends Prompt<string, RegionOptions> {\n private cursorIndex: number = 0;\n private errorMsg: string = '';\n\n constructor(options: RegionOptions) {\n super(options);\n if (options.initial) {\n const idx = options.regions.findIndex(r => r.id === options.initial);\n if (idx !== -1) this.cursorIndex = idx;\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Title\n output += `${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Prepare Map Buffer\n const lines = this.options.mapArt.split('\\n');\n const height = lines.length;\n const width = Math.max(...lines.map(l => l.length));\n\n // Overlay regions\n // We will build the output line by line.\n\n for (let y = 0; y < height; y++) {\n let line = lines[y] || '';\n // Pad line if needed\n if (line.length < width) line += ' '.repeat(width - line.length);\n\n // Check for regions on this line\n const regionsOnLine = this.options.regions.filter(r => Math.round(r.y) === y);\n\n // Reconstruct line with overlays\n // This is naive string replacement; might break if overlaps\n const lineBuffer = line.split('');\n\n regionsOnLine.forEach(r => {\n const label = r.label || '•';\n\n // Draw label starting at r.x\n for (let i = 0; i < label.length; i++) {\n const lx = Math.round(r.x) + i;\n if (lx < lineBuffer.length) {\n // We don't apply color here yet, just content\n lineBuffer[lx] = label[i];\n }\n }\n });\n\n // Now render the line with coloring\n // We need to know which ranges are regions\n let renderedLine = '';\n for (let x = 0; x < lineBuffer.length; x++) {\n // Check if this x,y belongs to a region\n const activeRegion = this.options.regions.find(r =>\n Math.round(r.y) === y &&\n x >= Math.round(r.x) &&\n x < Math.round(r.x) + (r.label || '•').length\n );\n\n if (activeRegion) {\n const isSelected = this.options.regions[this.cursorIndex] === activeRegion;\n if (isSelected) {\n renderedLine += `${theme.main}${ANSI.REVERSE}${lineBuffer[x]}${ANSI.RESET}`;\n } else {\n renderedLine += `${theme.success}${lineBuffer[x]}${ANSI.RESET}`;\n }\n } else {\n renderedLine += `${ANSI.DIM}${lineBuffer[x]}${ANSI.RESET}`;\n }\n }\n output += ' ' + renderedLine + '\\n';\n }\n\n // Region Description\n const currentRegion = this.options.regions[this.cursorIndex];\n if (currentRegion && currentRegion.description) {\n output += `\\n${theme.main}❯ ${ANSI.BOLD}${currentRegion.id}${ANSI.RESET}: ${currentRegion.description}`;\n } else {\n output += `\\n${theme.main}❯ ${ANSI.BOLD}${currentRegion.id}${ANSI.RESET}`;\n }\n\n output += `\\n${ANSI.DIM}(Arrows to navigate, Enter to select)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (char === '\\r' || char === '\\n') {\n this.submit(this.options.regions[this.cursorIndex].id);\n return;\n }\n\n if (this.isUp(char)) this.navigate('up');\n else if (this.isDown(char)) this.navigate('down');\n else if (this.isLeft(char)) this.navigate('left');\n else if (this.isRight(char)) this.navigate('right');\n }\n\n private navigate(direction: 'up' | 'down' | 'left' | 'right') {\n const current = this.options.regions[this.cursorIndex];\n let bestCandidate: MapRegion | null = null;\n let bestScore = Infinity;\n\n this.options.regions.forEach((r, idx) => {\n if (idx === this.cursorIndex) return;\n\n const dx = r.x - current.x;\n const dy = r.y - current.y;\n const distSq = dx * dx + dy * dy;\n\n let isValid = false;\n let anglePenalty = 0;\n\n // Simple direction check + Angle weighting\n // We want small distance and small angle deviation\n switch (direction) {\n case 'up':\n if (dy < 0) {\n isValid = true;\n // ideal: dx=0. Penalty for dx.\n anglePenalty = Math.abs(dx) * 0.5;\n }\n break;\n case 'down':\n if (dy > 0) {\n isValid = true;\n anglePenalty = Math.abs(dx) * 0.5;\n }\n break;\n case 'left':\n if (dx < 0) {\n isValid = true;\n anglePenalty = Math.abs(dy) * 2.0; // Penalize Y deviation more for horiz movement\n }\n break;\n case 'right':\n if (dx > 0) {\n isValid = true;\n anglePenalty = Math.abs(dy) * 2.0;\n }\n break;\n }\n\n if (isValid) {\n const score = distSq + (anglePenalty * anglePenalty * 5); // Heuristic\n if (score < bestScore) {\n bestScore = score;\n bestCandidate = r;\n }\n }\n });\n\n if (bestCandidate) {\n this.cursorIndex = this.options.regions.indexOf(bestCandidate);\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n // Cycle with scroll\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.cursorIndex = (this.cursorIndex - 1 + this.options.regions.length) % this.options.regions.length;\n } else {\n this.cursorIndex = (this.cursorIndex + 1) % this.options.regions.length;\n }\n this.render(false);\n }\n }\n}\n"],"names":["RegionPrompt","Prompt","render","_firstRender","output","theme","title","options","message","ANSI","RESET","lines","mapArt","split","height","length","width","Math","max","map","l","y","line","repeat","regionsOnLine","regions","filter","r","round","lineBuffer","forEach","label","i","lx","x","renderedLine","activeRegion","find","isSelected","cursorIndex","main","REVERSE","success","DIM","currentRegion","description","BOLD","id","renderFrame","handleInput","char","_key","submit","isUp","navigate","isDown","isLeft","isRight","direction","current","bestCandidate","bestScore","Infinity","idx","dx","dy","distSq","isValid","anglePenalty","abs","score","indexOf","handleMouse","event","action","scroll","errorMsg","initial","findIndex"],"mappings":"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"}
|
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "SchedulePrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return SchedulePrompt;
|
|
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 SchedulePrompt = class SchedulePrompt extends _base.Prompt {
|
|
29
|
-
get maxNameWidth() {
|
|
30
|
-
return Math.max(...this.tasks.map((t)=>(0, _utils.stringWidth)(t.name))) + 2;
|
|
31
|
-
}
|
|
32
|
-
render(_firstRender) {
|
|
33
|
-
// Dynamic Layout
|
|
34
|
-
const termWidth = this.stdout.columns || 80;
|
|
35
|
-
this.nameColWidth = Math.min(Math.max(this.maxNameWidth, 20), Math.floor(termWidth * 0.3));
|
|
36
|
-
const timelineWidth = termWidth - this.nameColWidth - 4; // Borders/Padding
|
|
37
|
-
let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
38
|
-
// 1. Header (Timeline Axis)
|
|
39
|
-
// Simple tick marks every 10 chars
|
|
40
|
-
const headerPadding = ' '.repeat(this.nameColWidth + 2);
|
|
41
|
-
let headerLine = '';
|
|
42
|
-
for(let i = 0; i < timelineWidth; i += 10){
|
|
43
|
-
const timeAtTick = new Date(this.viewStartDate + i * this.msPerChar);
|
|
44
|
-
// Format: MM/DD or HH:mm depending on zoom
|
|
45
|
-
const tickLabel = this.formatDateCompact(timeAtTick);
|
|
46
|
-
// Ensure we don't overflow
|
|
47
|
-
if (i + tickLabel.length < timelineWidth) {
|
|
48
|
-
// Pad until i
|
|
49
|
-
const currentLen = (0, _utils.stringWidth)(headerLine);
|
|
50
|
-
const spacesNeeded = i - currentLen;
|
|
51
|
-
if (spacesNeeded > 0) {
|
|
52
|
-
headerLine += ' '.repeat(spacesNeeded) + tickLabel;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
output += `${headerPadding}${_ansi.ANSI.FG_GRAY}${headerLine}${_ansi.ANSI.RESET}\n`;
|
|
57
|
-
// 2. Vertical Scrolling Logic
|
|
58
|
-
if (this.cursor < this.scrollTop) {
|
|
59
|
-
this.scrollTop = this.cursor;
|
|
60
|
-
} else if (this.cursor >= this.scrollTop + this.pageSize) {
|
|
61
|
-
this.scrollTop = this.cursor - this.pageSize + 1;
|
|
62
|
-
}
|
|
63
|
-
const visibleTasks = this.tasks.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
64
|
-
// 3. Render Rows
|
|
65
|
-
visibleTasks.forEach((task, index)=>{
|
|
66
|
-
const actualIndex = this.scrollTop + index;
|
|
67
|
-
const isSelected = actualIndex === this.cursor;
|
|
68
|
-
// Name Column
|
|
69
|
-
let nameStr = task.name;
|
|
70
|
-
if ((0, _utils.stringWidth)(nameStr) > this.nameColWidth) {
|
|
71
|
-
nameStr = nameStr.slice(0, this.nameColWidth - 3) + '...';
|
|
72
|
-
}
|
|
73
|
-
const paddedName = nameStr.padEnd(this.nameColWidth);
|
|
74
|
-
const prefix = isSelected ? `${_theme.theme.main}${_ansi.ANSI.BOLD}> ` : ' ';
|
|
75
|
-
const nameColor = isSelected ? _theme.theme.main : '';
|
|
76
|
-
const reset = _ansi.ANSI.RESET;
|
|
77
|
-
// Timeline Bar
|
|
78
|
-
// Calculate Start/End in chars relative to viewStartDate
|
|
79
|
-
const startOffset = task.start.getTime() - this.viewStartDate;
|
|
80
|
-
const endOffset = task.end.getTime() - this.viewStartDate;
|
|
81
|
-
const startCol = Math.floor(startOffset / this.msPerChar);
|
|
82
|
-
const endCol = Math.ceil(endOffset / this.msPerChar);
|
|
83
|
-
let timelineStr = '';
|
|
84
|
-
// Render the bar within the timelineWidth
|
|
85
|
-
// 0........timelineWidth
|
|
86
|
-
// Clipping
|
|
87
|
-
const barStart = Math.max(0, startCol);
|
|
88
|
-
const barEnd = Math.min(timelineWidth, endCol);
|
|
89
|
-
if (barStart < timelineWidth && barEnd > 0) {
|
|
90
|
-
const preSpace = ' '.repeat(barStart);
|
|
91
|
-
const barLen = Math.max(1, barEnd - barStart);
|
|
92
|
-
const barChar = isSelected ? '█' : '━';
|
|
93
|
-
const barColor = isSelected ? _theme.theme.main : _ansi.ANSI.FG_GRAY;
|
|
94
|
-
// Metadata hints
|
|
95
|
-
const durationLabel = isSelected ? ` ${this.formatDuration(task.end.getTime() - task.start.getTime())}` : '';
|
|
96
|
-
timelineStr = preSpace + barColor + barChar.repeat(barLen) + reset + durationLabel;
|
|
97
|
-
} else if (barEnd <= 0) {
|
|
98
|
-
timelineStr = _ansi.ANSI.FG_GRAY + '<' + reset;
|
|
99
|
-
} else {
|
|
100
|
-
timelineStr = _ansi.ANSI.FG_GRAY + '>' + reset;
|
|
101
|
-
}
|
|
102
|
-
output += `${prefix}${nameColor}${paddedName}${reset} │${timelineStr}\n`;
|
|
103
|
-
});
|
|
104
|
-
// Footer Help
|
|
105
|
-
output += `\n${_theme.theme.muted}(Arrows/Scroll: Move Task, Shift+Arrows: Resize, Ctrl+Scroll/PgUp/Dn: Scroll View)${_ansi.ANSI.RESET}`;
|
|
106
|
-
this.renderFrame(output);
|
|
107
|
-
}
|
|
108
|
-
formatDateCompact(d) {
|
|
109
|
-
// Heuristic based on zoom level (msPerChar)
|
|
110
|
-
// If 1 char > 1 day, show Month/Year
|
|
111
|
-
// If 1 char > 1 hour, show Date
|
|
112
|
-
// Else show Time
|
|
113
|
-
const msPerDay = 86400000;
|
|
114
|
-
if (this.msPerChar * 10 > msPerDay * 30) {
|
|
115
|
-
return `${d.getMonth() + 1}/${d.getFullYear()}`;
|
|
116
|
-
}
|
|
117
|
-
if (this.msPerChar * 10 > msPerDay) {
|
|
118
|
-
return `${d.getMonth() + 1}/${d.getDate()}`;
|
|
119
|
-
}
|
|
120
|
-
return `${d.getHours()}:${d.getMinutes().toString().padStart(2, '0')}`;
|
|
121
|
-
}
|
|
122
|
-
formatDuration(ms) {
|
|
123
|
-
const h = Math.floor(ms / 3600000);
|
|
124
|
-
const d = Math.floor(h / 24);
|
|
125
|
-
if (d > 0) return `${d}d ${h % 24}h`;
|
|
126
|
-
return `${h}h`;
|
|
127
|
-
}
|
|
128
|
-
handleInput(char, key) {
|
|
129
|
-
const task = this.tasks[this.cursor];
|
|
130
|
-
const step = Math.max(1, this.msPerChar); // Move by 1 char equivalent
|
|
131
|
-
// Tab Handling
|
|
132
|
-
if (char === '\t') {
|
|
133
|
-
this.cursor = (this.cursor + 1) % this.tasks.length;
|
|
134
|
-
this.render(false);
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
if (char === '\u001b[Z') {
|
|
138
|
-
this.cursor = (this.cursor - 1 + this.tasks.length) % this.tasks.length;
|
|
139
|
-
this.render(false);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
if (this.isUp(char)) {
|
|
143
|
-
this.cursor = (this.cursor - 1 + this.tasks.length) % this.tasks.length;
|
|
144
|
-
this.render(false);
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
if (this.isDown(char)) {
|
|
148
|
-
this.cursor = (this.cursor + 1) % this.tasks.length;
|
|
149
|
-
this.render(false);
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
// PageUp/Down: Horizontal Scroll
|
|
153
|
-
if (key.toString() === '\x1b[5~') {
|
|
154
|
-
this.scrollView(-10);
|
|
155
|
-
this.render(false);
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
if (key.toString() === '\x1b[6~') {
|
|
159
|
-
this.scrollView(10);
|
|
160
|
-
this.render(false);
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
// Vim keys for movement (h/l) - Alternative to arrows
|
|
164
|
-
if (char === 'h') {
|
|
165
|
-
task.start = new Date(task.start.getTime() - step);
|
|
166
|
-
task.end = new Date(task.end.getTime() - step);
|
|
167
|
-
this.render(false);
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
if (char === 'l') {
|
|
171
|
-
task.start = new Date(task.start.getTime() + step);
|
|
172
|
-
task.end = new Date(task.end.getTime() + step);
|
|
173
|
-
this.render(false);
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
// Shift + Arrows (Resize)
|
|
177
|
-
// Note: key sequence for Shift+Arrow depends on terminal, often \x1b[1;2C or similar
|
|
178
|
-
// We will try standard detection, otherwise rely on fallback or just standard arrow = move
|
|
179
|
-
const isShift = key.includes(';2'); // Common modifier for Shift
|
|
180
|
-
if (this.isLeft(char)) {
|
|
181
|
-
if (isShift) {
|
|
182
|
-
// Resize: decrease end
|
|
183
|
-
const newEnd = task.end.getTime() - step;
|
|
184
|
-
if (newEnd > task.start.getTime()) {
|
|
185
|
-
task.end = new Date(newEnd);
|
|
186
|
-
}
|
|
187
|
-
} else {
|
|
188
|
-
// Move: decrease start and end
|
|
189
|
-
task.start = new Date(task.start.getTime() - step);
|
|
190
|
-
task.end = new Date(task.end.getTime() - step);
|
|
191
|
-
}
|
|
192
|
-
this.render(false);
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
if (this.isRight(char)) {
|
|
196
|
-
if (isShift) {
|
|
197
|
-
// Resize: increase end
|
|
198
|
-
task.end = new Date(task.end.getTime() + step);
|
|
199
|
-
} else {
|
|
200
|
-
// Move: increase start and end
|
|
201
|
-
task.start = new Date(task.start.getTime() + step);
|
|
202
|
-
task.end = new Date(task.end.getTime() + step);
|
|
203
|
-
}
|
|
204
|
-
this.render(false);
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
if (char === '\r' || char === '\n') {
|
|
208
|
-
this.submit(this.tasks);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
handleMouse(event) {
|
|
212
|
-
if (event.action === 'scroll') {
|
|
213
|
-
const isCtrl = event.ctrl;
|
|
214
|
-
if (isCtrl) {
|
|
215
|
-
// Scroll View
|
|
216
|
-
if (event.scroll === 'up') {
|
|
217
|
-
this.scrollView(-5);
|
|
218
|
-
} else if (event.scroll === 'down') {
|
|
219
|
-
this.scrollView(5);
|
|
220
|
-
}
|
|
221
|
-
} else {
|
|
222
|
-
// Move Task
|
|
223
|
-
const task = this.tasks[this.cursor];
|
|
224
|
-
const step = Math.max(1, this.msPerChar);
|
|
225
|
-
if (event.scroll === 'up') {
|
|
226
|
-
task.start = new Date(task.start.getTime() - step);
|
|
227
|
-
task.end = new Date(task.end.getTime() - step);
|
|
228
|
-
} else if (event.scroll === 'down') {
|
|
229
|
-
task.start = new Date(task.start.getTime() + step);
|
|
230
|
-
task.end = new Date(task.end.getTime() + step);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
this.render(false);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
scrollView(chars) {
|
|
237
|
-
let newStart = this.viewStartDate + chars * this.msPerChar;
|
|
238
|
-
// Clamp if fixed start is provided to prevent scrolling before the start date
|
|
239
|
-
if (this.minViewDate !== undefined && newStart < this.minViewDate) {
|
|
240
|
-
newStart = this.minViewDate;
|
|
241
|
-
}
|
|
242
|
-
this.viewStartDate = newStart;
|
|
243
|
-
}
|
|
244
|
-
constructor(options){
|
|
245
|
-
super(options), _define_property(this, "cursor", 0), _define_property(this, "tasks", void 0), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 10), // Viewport State
|
|
246
|
-
_define_property(this, "viewStartDate", void 0), _define_property(this, "msPerChar", void 0 // Zoom level
|
|
247
|
-
), _define_property(this, "minViewDate", void 0), // Layout
|
|
248
|
-
_define_property(this, "nameColWidth", 20);
|
|
249
|
-
// Deep clone to avoid mutating original data before submission
|
|
250
|
-
this.tasks = options.data.map((t)=>({
|
|
251
|
-
...t,
|
|
252
|
-
start: new Date(t.start),
|
|
253
|
-
end: new Date(t.end)
|
|
254
|
-
}));
|
|
255
|
-
// Initial Calculations
|
|
256
|
-
const minTaskDate = Math.min(...this.tasks.map((t)=>t.start.getTime()));
|
|
257
|
-
const maxTaskDate = Math.max(...this.tasks.map((t)=>t.end.getTime()));
|
|
258
|
-
const opts = options;
|
|
259
|
-
const minDate = opts.startDate ? opts.startDate.getTime() : minTaskDate;
|
|
260
|
-
const maxDate = opts.endDate ? opts.endDate.getTime() : maxTaskDate;
|
|
261
|
-
if (opts.startDate) this.minViewDate = minDate;
|
|
262
|
-
// Default Zoom: Fit the whole range into ~60 chars
|
|
263
|
-
const range = maxDate - minDate || 86400000; // default 1 day if 0
|
|
264
|
-
this.msPerChar = range / 60;
|
|
265
|
-
// Start view slightly before the earliest task
|
|
266
|
-
this.viewStartDate = opts.startDate ? minDate : minDate - this.msPerChar * 5;
|
|
267
|
-
}
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
//# sourceMappingURL=schedule.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/schedule.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { ScheduleOptions, ScheduleTask, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class SchedulePrompt extends Prompt<ScheduleTask[], ScheduleOptions> {\n private cursor: number = 0;\n private tasks: ScheduleTask[];\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n // Viewport State\n private viewStartDate: number;\n private msPerChar: number; // Zoom level\n private minViewDate?: number;\n\n // Layout\n private nameColWidth: number = 20;\n\n constructor(options: ScheduleOptions) {\n super(options);\n // Deep clone to avoid mutating original data before submission\n this.tasks = options.data.map(t => ({\n ...t,\n start: new Date(t.start),\n end: new Date(t.end)\n }));\n\n // Initial Calculations\n const minTaskDate = Math.min(...this.tasks.map(t => t.start.getTime()));\n const maxTaskDate = Math.max(...this.tasks.map(t => t.end.getTime()));\n\n const opts = options as (ScheduleOptions & { startDate?: Date, endDate?: Date });\n const minDate = opts.startDate ? opts.startDate.getTime() : minTaskDate;\n const maxDate = opts.endDate ? opts.endDate.getTime() : maxTaskDate;\n\n if (opts.startDate) this.minViewDate = minDate;\n\n // Default Zoom: Fit the whole range into ~60 chars\n const range = maxDate - minDate || 86400000; // default 1 day if 0\n this.msPerChar = range / 60;\n\n // Start view slightly before the earliest task\n this.viewStartDate = opts.startDate\n ? minDate\n : minDate - (this.msPerChar * 5);\n }\n\n private get maxNameWidth(): number {\n return Math.max(...this.tasks.map(t => stringWidth(t.name))) + 2;\n }\n\n protected render(_firstRender: boolean) {\n // Dynamic Layout\n const termWidth = this.stdout.columns || 80;\n this.nameColWidth = Math.min(Math.max(this.maxNameWidth, 20), Math.floor(termWidth * 0.3));\n const timelineWidth = termWidth - this.nameColWidth - 4; // Borders/Padding\n\n let output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // 1. Header (Timeline Axis)\n // Simple tick marks every 10 chars\n const headerPadding = ' '.repeat(this.nameColWidth + 2);\n let headerLine = '';\n for (let i = 0; i < timelineWidth; i += 10) {\n const timeAtTick = new Date(this.viewStartDate + (i * this.msPerChar));\n // Format: MM/DD or HH:mm depending on zoom\n const tickLabel = this.formatDateCompact(timeAtTick);\n // Ensure we don't overflow\n if (i + tickLabel.length < timelineWidth) {\n // Pad until i\n const currentLen = stringWidth(headerLine);\n const spacesNeeded = i - currentLen;\n if (spacesNeeded > 0) {\n headerLine += ' '.repeat(spacesNeeded) + tickLabel;\n }\n }\n }\n output += `${headerPadding}${ANSI.FG_GRAY}${headerLine}${ANSI.RESET}\\n`;\n\n // 2. Vertical Scrolling Logic\n if (this.cursor < this.scrollTop) {\n this.scrollTop = this.cursor;\n } else if (this.cursor >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.cursor - this.pageSize + 1;\n }\n\n const visibleTasks = this.tasks.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n // 3. Render Rows\n visibleTasks.forEach((task, index) => {\n const actualIndex = this.scrollTop + index;\n const isSelected = actualIndex === this.cursor;\n\n // Name Column\n let nameStr = task.name;\n if (stringWidth(nameStr) > this.nameColWidth) {\n nameStr = nameStr.slice(0, this.nameColWidth - 3) + '...';\n }\n const paddedName = nameStr.padEnd(this.nameColWidth);\n\n const prefix = isSelected ? `${theme.main}${ANSI.BOLD}> ` : ' ';\n const nameColor = isSelected ? theme.main : '';\n const reset = ANSI.RESET;\n\n // Timeline Bar\n // Calculate Start/End in chars relative to viewStartDate\n const startOffset = task.start.getTime() - this.viewStartDate;\n const endOffset = task.end.getTime() - this.viewStartDate;\n\n const startCol = Math.floor(startOffset / this.msPerChar);\n const endCol = Math.ceil(endOffset / this.msPerChar);\n\n let timelineStr = '';\n\n // Render the bar within the timelineWidth\n // 0........timelineWidth\n\n // Clipping\n const barStart = Math.max(0, startCol);\n const barEnd = Math.min(timelineWidth, endCol);\n\n if (barStart < timelineWidth && barEnd > 0) {\n const preSpace = ' '.repeat(barStart);\n const barLen = Math.max(1, barEnd - barStart);\n const barChar = isSelected ? '█' : '━';\n const barColor = isSelected ? theme.main : ANSI.FG_GRAY;\n\n // Metadata hints\n const durationLabel = isSelected ? ` ${this.formatDuration(task.end.getTime() - task.start.getTime())}` : '';\n\n timelineStr = preSpace + barColor + barChar.repeat(barLen) + reset + durationLabel;\n } else if (barEnd <= 0) {\n timelineStr = ANSI.FG_GRAY + '<' + reset;\n } else {\n timelineStr = ANSI.FG_GRAY + '>' + reset;\n }\n\n output += `${prefix}${nameColor}${paddedName}${reset} │${timelineStr}\\n`;\n });\n\n // Footer Help\n output += `\\n${theme.muted}(Arrows/Scroll: Move Task, Shift+Arrows: Resize, Ctrl+Scroll/PgUp/Dn: Scroll View)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n private formatDateCompact(d: Date): string {\n // Heuristic based on zoom level (msPerChar)\n // If 1 char > 1 day, show Month/Year\n // If 1 char > 1 hour, show Date\n // Else show Time\n const msPerDay = 86400000;\n\n if (this.msPerChar * 10 > msPerDay * 30) { // Very zoomed out\n return `${d.getMonth() + 1}/${d.getFullYear()}`;\n }\n if (this.msPerChar * 10 > msPerDay) {\n return `${d.getMonth() + 1}/${d.getDate()}`;\n }\n return `${d.getHours()}:${d.getMinutes().toString().padStart(2, '0')}`;\n }\n\n private formatDuration(ms: number): string {\n const h = Math.floor(ms / 3600000);\n const d = Math.floor(h / 24);\n if (d > 0) return `${d}d ${h % 24}h`;\n return `${h}h`;\n }\n\n protected handleInput(char: string, key: Buffer) {\n const task = this.tasks[this.cursor];\n const step = Math.max(1, this.msPerChar); // Move by 1 char equivalent\n\n // Tab Handling\n if (char === '\\t') {\n this.cursor = (this.cursor + 1) % this.tasks.length;\n this.render(false);\n return;\n }\n if (char === '\\u001b[Z') { // Shift+Tab\n this.cursor = (this.cursor - 1 + this.tasks.length) % this.tasks.length;\n this.render(false);\n return;\n }\n\n if (this.isUp(char)) {\n this.cursor = (this.cursor - 1 + this.tasks.length) % this.tasks.length;\n this.render(false);\n return;\n }\n if (this.isDown(char)) {\n this.cursor = (this.cursor + 1) % this.tasks.length;\n this.render(false);\n return;\n }\n\n // PageUp/Down: Horizontal Scroll\n if (key.toString() === '\\x1b[5~') { // PageUp\n this.scrollView(-10);\n this.render(false);\n return;\n }\n if (key.toString() === '\\x1b[6~') { // PageDown\n this.scrollView(10);\n this.render(false);\n return;\n }\n\n // Vim keys for movement (h/l) - Alternative to arrows\n if (char === 'h') {\n task.start = new Date(task.start.getTime() - step);\n task.end = new Date(task.end.getTime() - step);\n this.render(false);\n return;\n }\n if (char === 'l') {\n task.start = new Date(task.start.getTime() + step);\n task.end = new Date(task.end.getTime() + step);\n this.render(false);\n return;\n }\n\n // Shift + Arrows (Resize)\n // Note: key sequence for Shift+Arrow depends on terminal, often \\x1b[1;2C or similar\n // We will try standard detection, otherwise rely on fallback or just standard arrow = move\n const isShift = key.includes(';2'); // Common modifier for Shift\n\n if (this.isLeft(char)) {\n if (isShift) {\n // Resize: decrease end\n const newEnd = task.end.getTime() - step;\n if (newEnd > task.start.getTime()) {\n task.end = new Date(newEnd);\n }\n } else {\n // Move: decrease start and end\n task.start = new Date(task.start.getTime() - step);\n task.end = new Date(task.end.getTime() - step);\n }\n this.render(false);\n return;\n }\n\n if (this.isRight(char)) {\n if (isShift) {\n // Resize: increase end\n task.end = new Date(task.end.getTime() + step);\n } else {\n // Move: increase start and end\n task.start = new Date(task.start.getTime() + step);\n task.end = new Date(task.end.getTime() + step);\n }\n this.render(false);\n return;\n }\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.tasks);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n const isCtrl = (event as any).ctrl;\n\n if (isCtrl) {\n // Scroll View\n if (event.scroll === 'up') {\n this.scrollView(-5);\n } else if (event.scroll === 'down') {\n this.scrollView(5);\n }\n } else {\n // Move Task\n const task = this.tasks[this.cursor];\n const step = Math.max(1, this.msPerChar);\n\n if (event.scroll === 'up') {\n task.start = new Date(task.start.getTime() - step);\n task.end = new Date(task.end.getTime() - step);\n } else if (event.scroll === 'down') {\n task.start = new Date(task.start.getTime() + step);\n task.end = new Date(task.end.getTime() + step);\n }\n }\n this.render(false);\n }\n }\n\n private scrollView(chars: number) {\n let newStart = this.viewStartDate + (chars * this.msPerChar);\n\n // Clamp if fixed start is provided to prevent scrolling before the start date\n if (this.minViewDate !== undefined && newStart < this.minViewDate) {\n newStart = this.minViewDate;\n }\n\n this.viewStartDate = newStart;\n }\n}\n"],"names":["SchedulePrompt","Prompt","maxNameWidth","Math","max","tasks","map","t","stringWidth","name","render","_firstRender","termWidth","stdout","columns","nameColWidth","min","floor","timelineWidth","output","theme","success","ANSI","RESET","BOLD","title","options","message","headerPadding","repeat","headerLine","i","timeAtTick","Date","viewStartDate","msPerChar","tickLabel","formatDateCompact","length","currentLen","spacesNeeded","FG_GRAY","cursor","scrollTop","pageSize","visibleTasks","slice","forEach","task","index","actualIndex","isSelected","nameStr","paddedName","padEnd","prefix","main","nameColor","reset","startOffset","start","getTime","endOffset","end","startCol","endCol","ceil","timelineStr","barStart","barEnd","preSpace","barLen","barChar","barColor","durationLabel","formatDuration","muted","renderFrame","d","msPerDay","getMonth","getFullYear","getDate","getHours","getMinutes","toString","padStart","ms","h","handleInput","char","key","step","isUp","isDown","scrollView","isShift","includes","isLeft","newEnd","isRight","submit","handleMouse","event","action","isCtrl","ctrl","scroll","chars","newStart","minViewDate","undefined","data","minTaskDate","maxTaskDate","opts","minDate","startDate","maxDate","endDate","range"],"mappings":"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"}
|