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
|
@@ -1,44 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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;
|
|
17
24
|
}
|
|
25
|
+
return obj;
|
|
26
|
+
}
|
|
27
|
+
let RegionPrompt = class RegionPrompt extends _base.Prompt {
|
|
18
28
|
render(_firstRender) {
|
|
19
29
|
let output = '';
|
|
20
30
|
// Title
|
|
21
|
-
output += `${
|
|
31
|
+
output += `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
22
32
|
// Prepare Map Buffer
|
|
23
33
|
const lines = this.options.mapArt.split('\n');
|
|
24
34
|
const height = lines.length;
|
|
25
|
-
const width = Math.max(...lines.map(l
|
|
35
|
+
const width = Math.max(...lines.map((l)=>l.length));
|
|
26
36
|
// Overlay regions
|
|
27
37
|
// We will build the output line by line.
|
|
28
|
-
for
|
|
38
|
+
for(let y = 0; y < height; y++){
|
|
29
39
|
let line = lines[y] || '';
|
|
30
40
|
// Pad line if needed
|
|
31
|
-
if (line.length < width)
|
|
32
|
-
line += ' '.repeat(width - line.length);
|
|
41
|
+
if (line.length < width) line += ' '.repeat(width - line.length);
|
|
33
42
|
// Check for regions on this line
|
|
34
|
-
const regionsOnLine = this.options.regions.filter(r
|
|
43
|
+
const regionsOnLine = this.options.regions.filter((r)=>Math.round(r.y) === y);
|
|
35
44
|
// Reconstruct line with overlays
|
|
36
45
|
// This is naive string replacement; might break if overlaps
|
|
37
46
|
const lineBuffer = line.split('');
|
|
38
|
-
regionsOnLine.forEach(r
|
|
47
|
+
regionsOnLine.forEach((r)=>{
|
|
39
48
|
const label = r.label || '•';
|
|
40
49
|
// Draw label starting at r.x
|
|
41
|
-
for
|
|
50
|
+
for(let i = 0; i < label.length; i++){
|
|
42
51
|
const lx = Math.round(r.x) + i;
|
|
43
52
|
if (lx < lineBuffer.length) {
|
|
44
53
|
// We don't apply color here yet, just content
|
|
@@ -49,22 +58,18 @@ class RegionPrompt extends base_1.Prompt {
|
|
|
49
58
|
// Now render the line with coloring
|
|
50
59
|
// We need to know which ranges are regions
|
|
51
60
|
let renderedLine = '';
|
|
52
|
-
for
|
|
61
|
+
for(let x = 0; x < lineBuffer.length; x++){
|
|
53
62
|
// Check if this x,y belongs to a region
|
|
54
|
-
const activeRegion = this.options.regions.find(r
|
|
55
|
-
x >= Math.round(r.x) &&
|
|
56
|
-
x < Math.round(r.x) + (r.label || '•').length);
|
|
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);
|
|
57
64
|
if (activeRegion) {
|
|
58
65
|
const isSelected = this.options.regions[this.cursorIndex] === activeRegion;
|
|
59
66
|
if (isSelected) {
|
|
60
|
-
renderedLine += `${
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
renderedLine += `${theme_1.theme.success}${lineBuffer[x]}${ansi_1.ANSI.RESET}`;
|
|
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}`;
|
|
64
70
|
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
renderedLine += `${ansi_1.ANSI.DIM}${lineBuffer[x]}${ansi_1.ANSI.RESET}`;
|
|
71
|
+
} else {
|
|
72
|
+
renderedLine += `${_ansi.ANSI.DIM}${lineBuffer[x]}${_ansi.ANSI.RESET}`;
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
75
|
output += ' ' + renderedLine + '\n';
|
|
@@ -72,12 +77,11 @@ class RegionPrompt extends base_1.Prompt {
|
|
|
72
77
|
// Region Description
|
|
73
78
|
const currentRegion = this.options.regions[this.cursorIndex];
|
|
74
79
|
if (currentRegion && currentRegion.description) {
|
|
75
|
-
output += `\n${
|
|
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}`;
|
|
76
83
|
}
|
|
77
|
-
|
|
78
|
-
output += `\n${theme_1.theme.main}❯ ${ansi_1.ANSI.BOLD}${currentRegion.id}${ansi_1.ANSI.RESET}`;
|
|
79
|
-
}
|
|
80
|
-
output += `\n${ansi_1.ANSI.DIM}(Arrows to navigate, Enter to select)${ansi_1.ANSI.RESET}`;
|
|
84
|
+
output += `\n${_ansi.ANSI.DIM}(Arrows to navigate, Enter to select)${_ansi.ANSI.RESET}`;
|
|
81
85
|
this.renderFrame(output);
|
|
82
86
|
}
|
|
83
87
|
handleInput(char, _key) {
|
|
@@ -85,22 +89,17 @@ class RegionPrompt extends base_1.Prompt {
|
|
|
85
89
|
this.submit(this.options.regions[this.cursorIndex].id);
|
|
86
90
|
return;
|
|
87
91
|
}
|
|
88
|
-
if (this.isUp(char))
|
|
89
|
-
|
|
90
|
-
else if (this.
|
|
91
|
-
|
|
92
|
-
else if (this.isLeft(char))
|
|
93
|
-
this.navigate('left');
|
|
94
|
-
else if (this.isRight(char))
|
|
95
|
-
this.navigate('right');
|
|
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
96
|
}
|
|
97
97
|
navigate(direction) {
|
|
98
98
|
const current = this.options.regions[this.cursorIndex];
|
|
99
99
|
let bestCandidate = null;
|
|
100
100
|
let bestScore = Infinity;
|
|
101
|
-
this.options.regions.forEach((r, idx)
|
|
102
|
-
if (idx === this.cursorIndex)
|
|
103
|
-
return;
|
|
101
|
+
this.options.regions.forEach((r, idx)=>{
|
|
102
|
+
if (idx === this.cursorIndex) return;
|
|
104
103
|
const dx = r.x - current.x;
|
|
105
104
|
const dy = r.y - current.y;
|
|
106
105
|
const distSq = dx * dx + dy * dy;
|
|
@@ -108,7 +107,7 @@ class RegionPrompt extends base_1.Prompt {
|
|
|
108
107
|
let anglePenalty = 0;
|
|
109
108
|
// Simple direction check + Angle weighting
|
|
110
109
|
// We want small distance and small angle deviation
|
|
111
|
-
switch
|
|
110
|
+
switch(direction){
|
|
112
111
|
case 'up':
|
|
113
112
|
if (dy < 0) {
|
|
114
113
|
isValid = true;
|
|
@@ -136,7 +135,7 @@ class RegionPrompt extends base_1.Prompt {
|
|
|
136
135
|
break;
|
|
137
136
|
}
|
|
138
137
|
if (isValid) {
|
|
139
|
-
const score = distSq +
|
|
138
|
+
const score = distSq + anglePenalty * anglePenalty * 5; // Heuristic
|
|
140
139
|
if (score < bestScore) {
|
|
141
140
|
bestScore = score;
|
|
142
141
|
bestCandidate = r;
|
|
@@ -153,12 +152,19 @@ class RegionPrompt extends base_1.Prompt {
|
|
|
153
152
|
if (event.action === 'scroll') {
|
|
154
153
|
if (event.scroll === 'up') {
|
|
155
154
|
this.cursorIndex = (this.cursorIndex - 1 + this.options.regions.length) % this.options.regions.length;
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
155
|
+
} else {
|
|
158
156
|
this.cursorIndex = (this.cursorIndex + 1) % this.options.regions.length;
|
|
159
157
|
}
|
|
160
158
|
this.render(false);
|
|
161
159
|
}
|
|
162
160
|
}
|
|
163
|
-
|
|
164
|
-
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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,89 +1,79 @@
|
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const opts = options;
|
|
26
|
-
const minDate = opts.startDate ? opts.startDate.getTime() : minTaskDate;
|
|
27
|
-
const maxDate = opts.endDate ? opts.endDate.getTime() : maxTaskDate;
|
|
28
|
-
if (opts.startDate)
|
|
29
|
-
this.minViewDate = minDate;
|
|
30
|
-
// Default Zoom: Fit the whole range into ~60 chars
|
|
31
|
-
const range = maxDate - minDate || 86400000; // default 1 day if 0
|
|
32
|
-
this.msPerChar = range / 60;
|
|
33
|
-
// Start view slightly before the earliest task
|
|
34
|
-
this.viewStartDate = opts.startDate
|
|
35
|
-
? minDate
|
|
36
|
-
: minDate - (this.msPerChar * 5);
|
|
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;
|
|
37
25
|
}
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
let SchedulePrompt = class SchedulePrompt extends _base.Prompt {
|
|
38
29
|
get maxNameWidth() {
|
|
39
|
-
return Math.max(...this.tasks.map(t
|
|
30
|
+
return Math.max(...this.tasks.map((t)=>(0, _utils.stringWidth)(t.name))) + 2;
|
|
40
31
|
}
|
|
41
32
|
render(_firstRender) {
|
|
42
33
|
// Dynamic Layout
|
|
43
34
|
const termWidth = this.stdout.columns || 80;
|
|
44
35
|
this.nameColWidth = Math.min(Math.max(this.maxNameWidth, 20), Math.floor(termWidth * 0.3));
|
|
45
36
|
const timelineWidth = termWidth - this.nameColWidth - 4; // Borders/Padding
|
|
46
|
-
let output = `${
|
|
37
|
+
let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
47
38
|
// 1. Header (Timeline Axis)
|
|
48
39
|
// Simple tick marks every 10 chars
|
|
49
40
|
const headerPadding = ' '.repeat(this.nameColWidth + 2);
|
|
50
41
|
let headerLine = '';
|
|
51
|
-
for
|
|
52
|
-
const timeAtTick = new Date(this.viewStartDate +
|
|
42
|
+
for(let i = 0; i < timelineWidth; i += 10){
|
|
43
|
+
const timeAtTick = new Date(this.viewStartDate + i * this.msPerChar);
|
|
53
44
|
// Format: MM/DD or HH:mm depending on zoom
|
|
54
45
|
const tickLabel = this.formatDateCompact(timeAtTick);
|
|
55
46
|
// Ensure we don't overflow
|
|
56
47
|
if (i + tickLabel.length < timelineWidth) {
|
|
57
48
|
// Pad until i
|
|
58
|
-
const currentLen = (0,
|
|
49
|
+
const currentLen = (0, _utils.stringWidth)(headerLine);
|
|
59
50
|
const spacesNeeded = i - currentLen;
|
|
60
51
|
if (spacesNeeded > 0) {
|
|
61
52
|
headerLine += ' '.repeat(spacesNeeded) + tickLabel;
|
|
62
53
|
}
|
|
63
54
|
}
|
|
64
55
|
}
|
|
65
|
-
output += `${headerPadding}${
|
|
56
|
+
output += `${headerPadding}${_ansi.ANSI.FG_GRAY}${headerLine}${_ansi.ANSI.RESET}\n`;
|
|
66
57
|
// 2. Vertical Scrolling Logic
|
|
67
58
|
if (this.cursor < this.scrollTop) {
|
|
68
59
|
this.scrollTop = this.cursor;
|
|
69
|
-
}
|
|
70
|
-
else if (this.cursor >= this.scrollTop + this.pageSize) {
|
|
60
|
+
} else if (this.cursor >= this.scrollTop + this.pageSize) {
|
|
71
61
|
this.scrollTop = this.cursor - this.pageSize + 1;
|
|
72
62
|
}
|
|
73
63
|
const visibleTasks = this.tasks.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
74
64
|
// 3. Render Rows
|
|
75
|
-
visibleTasks.forEach((task, index)
|
|
65
|
+
visibleTasks.forEach((task, index)=>{
|
|
76
66
|
const actualIndex = this.scrollTop + index;
|
|
77
67
|
const isSelected = actualIndex === this.cursor;
|
|
78
68
|
// Name Column
|
|
79
69
|
let nameStr = task.name;
|
|
80
|
-
if ((0,
|
|
70
|
+
if ((0, _utils.stringWidth)(nameStr) > this.nameColWidth) {
|
|
81
71
|
nameStr = nameStr.slice(0, this.nameColWidth - 3) + '...';
|
|
82
72
|
}
|
|
83
73
|
const paddedName = nameStr.padEnd(this.nameColWidth);
|
|
84
|
-
const prefix = isSelected ? `${
|
|
85
|
-
const nameColor = isSelected ?
|
|
86
|
-
const reset =
|
|
74
|
+
const prefix = isSelected ? `${_theme.theme.main}${_ansi.ANSI.BOLD}> ` : ' ';
|
|
75
|
+
const nameColor = isSelected ? _theme.theme.main : '';
|
|
76
|
+
const reset = _ansi.ANSI.RESET;
|
|
87
77
|
// Timeline Bar
|
|
88
78
|
// Calculate Start/End in chars relative to viewStartDate
|
|
89
79
|
const startOffset = task.start.getTime() - this.viewStartDate;
|
|
@@ -100,21 +90,19 @@ class SchedulePrompt extends base_1.Prompt {
|
|
|
100
90
|
const preSpace = ' '.repeat(barStart);
|
|
101
91
|
const barLen = Math.max(1, barEnd - barStart);
|
|
102
92
|
const barChar = isSelected ? '█' : '━';
|
|
103
|
-
const barColor = isSelected ?
|
|
93
|
+
const barColor = isSelected ? _theme.theme.main : _ansi.ANSI.FG_GRAY;
|
|
104
94
|
// Metadata hints
|
|
105
95
|
const durationLabel = isSelected ? ` ${this.formatDuration(task.end.getTime() - task.start.getTime())}` : '';
|
|
106
96
|
timelineStr = preSpace + barColor + barChar.repeat(barLen) + reset + durationLabel;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
else {
|
|
112
|
-
timelineStr = ansi_1.ANSI.FG_GRAY + '>' + reset;
|
|
97
|
+
} else if (barEnd <= 0) {
|
|
98
|
+
timelineStr = _ansi.ANSI.FG_GRAY + '<' + reset;
|
|
99
|
+
} else {
|
|
100
|
+
timelineStr = _ansi.ANSI.FG_GRAY + '>' + reset;
|
|
113
101
|
}
|
|
114
102
|
output += `${prefix}${nameColor}${paddedName}${reset} │${timelineStr}\n`;
|
|
115
103
|
});
|
|
116
104
|
// Footer Help
|
|
117
|
-
output += `\n${
|
|
105
|
+
output += `\n${_theme.theme.muted}(Arrows/Scroll: Move Task, Shift+Arrows: Resize, Ctrl+Scroll/PgUp/Dn: Scroll View)${_ansi.ANSI.RESET}`;
|
|
118
106
|
this.renderFrame(output);
|
|
119
107
|
}
|
|
120
108
|
formatDateCompact(d) {
|
|
@@ -123,7 +111,7 @@ class SchedulePrompt extends base_1.Prompt {
|
|
|
123
111
|
// If 1 char > 1 hour, show Date
|
|
124
112
|
// Else show Time
|
|
125
113
|
const msPerDay = 86400000;
|
|
126
|
-
if (this.msPerChar * 10 > msPerDay * 30) {
|
|
114
|
+
if (this.msPerChar * 10 > msPerDay * 30) {
|
|
127
115
|
return `${d.getMonth() + 1}/${d.getFullYear()}`;
|
|
128
116
|
}
|
|
129
117
|
if (this.msPerChar * 10 > msPerDay) {
|
|
@@ -134,8 +122,7 @@ class SchedulePrompt extends base_1.Prompt {
|
|
|
134
122
|
formatDuration(ms) {
|
|
135
123
|
const h = Math.floor(ms / 3600000);
|
|
136
124
|
const d = Math.floor(h / 24);
|
|
137
|
-
if (d > 0)
|
|
138
|
-
return `${d}d ${h % 24}h`;
|
|
125
|
+
if (d > 0) return `${d}d ${h % 24}h`;
|
|
139
126
|
return `${h}h`;
|
|
140
127
|
}
|
|
141
128
|
handleInput(char, key) {
|
|
@@ -147,7 +134,7 @@ class SchedulePrompt extends base_1.Prompt {
|
|
|
147
134
|
this.render(false);
|
|
148
135
|
return;
|
|
149
136
|
}
|
|
150
|
-
if (char === '\u001b[Z') {
|
|
137
|
+
if (char === '\u001b[Z') {
|
|
151
138
|
this.cursor = (this.cursor - 1 + this.tasks.length) % this.tasks.length;
|
|
152
139
|
this.render(false);
|
|
153
140
|
return;
|
|
@@ -163,12 +150,12 @@ class SchedulePrompt extends base_1.Prompt {
|
|
|
163
150
|
return;
|
|
164
151
|
}
|
|
165
152
|
// PageUp/Down: Horizontal Scroll
|
|
166
|
-
if (key.toString() === '\x1b[5~') {
|
|
153
|
+
if (key.toString() === '\x1b[5~') {
|
|
167
154
|
this.scrollView(-10);
|
|
168
155
|
this.render(false);
|
|
169
156
|
return;
|
|
170
157
|
}
|
|
171
|
-
if (key.toString() === '\x1b[6~') {
|
|
158
|
+
if (key.toString() === '\x1b[6~') {
|
|
172
159
|
this.scrollView(10);
|
|
173
160
|
this.render(false);
|
|
174
161
|
return;
|
|
@@ -197,8 +184,7 @@ class SchedulePrompt extends base_1.Prompt {
|
|
|
197
184
|
if (newEnd > task.start.getTime()) {
|
|
198
185
|
task.end = new Date(newEnd);
|
|
199
186
|
}
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
187
|
+
} else {
|
|
202
188
|
// Move: decrease start and end
|
|
203
189
|
task.start = new Date(task.start.getTime() - step);
|
|
204
190
|
task.end = new Date(task.end.getTime() - step);
|
|
@@ -210,8 +196,7 @@ class SchedulePrompt extends base_1.Prompt {
|
|
|
210
196
|
if (isShift) {
|
|
211
197
|
// Resize: increase end
|
|
212
198
|
task.end = new Date(task.end.getTime() + step);
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
199
|
+
} else {
|
|
215
200
|
// Move: increase start and end
|
|
216
201
|
task.start = new Date(task.start.getTime() + step);
|
|
217
202
|
task.end = new Date(task.end.getTime() + step);
|
|
@@ -230,20 +215,17 @@ class SchedulePrompt extends base_1.Prompt {
|
|
|
230
215
|
// Scroll View
|
|
231
216
|
if (event.scroll === 'up') {
|
|
232
217
|
this.scrollView(-5);
|
|
233
|
-
}
|
|
234
|
-
else if (event.scroll === 'down') {
|
|
218
|
+
} else if (event.scroll === 'down') {
|
|
235
219
|
this.scrollView(5);
|
|
236
220
|
}
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
221
|
+
} else {
|
|
239
222
|
// Move Task
|
|
240
223
|
const task = this.tasks[this.cursor];
|
|
241
224
|
const step = Math.max(1, this.msPerChar);
|
|
242
225
|
if (event.scroll === 'up') {
|
|
243
226
|
task.start = new Date(task.start.getTime() - step);
|
|
244
227
|
task.end = new Date(task.end.getTime() - step);
|
|
245
|
-
}
|
|
246
|
-
else if (event.scroll === 'down') {
|
|
228
|
+
} else if (event.scroll === 'down') {
|
|
247
229
|
task.start = new Date(task.start.getTime() + step);
|
|
248
230
|
task.end = new Date(task.end.getTime() + step);
|
|
249
231
|
}
|
|
@@ -252,12 +234,37 @@ class SchedulePrompt extends base_1.Prompt {
|
|
|
252
234
|
}
|
|
253
235
|
}
|
|
254
236
|
scrollView(chars) {
|
|
255
|
-
let newStart = this.viewStartDate +
|
|
237
|
+
let newStart = this.viewStartDate + chars * this.msPerChar;
|
|
256
238
|
// Clamp if fixed start is provided to prevent scrolling before the start date
|
|
257
239
|
if (this.minViewDate !== undefined && newStart < this.minViewDate) {
|
|
258
240
|
newStart = this.minViewDate;
|
|
259
241
|
}
|
|
260
242
|
this.viewStartDate = newStart;
|
|
261
243
|
}
|
|
262
|
-
|
|
263
|
-
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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":";;;;+BAMaA;;;eAAAA;;;sBANQ;sBACE;uBACD;uBAEM;;;;;;;;;;;;;;AAErB,IAAA,AAAMA,iBAAN,MAAMA,uBAAuBC,YAAM;IA2CtC,IAAYC,eAAuB;QAC/B,OAAOC,KAAKC,GAAG,IAAI,IAAI,CAACC,KAAK,CAACC,GAAG,CAACC,CAAAA,IAAKC,IAAAA,kBAAW,EAACD,EAAEE,IAAI,MAAM;IACnE;IAEUC,OAAOC,YAAqB,EAAE;QACpC,iBAAiB;QACjB,MAAMC,YAAY,IAAI,CAACC,MAAM,CAACC,OAAO,IAAI;QACzC,IAAI,CAACC,YAAY,GAAGZ,KAAKa,GAAG,CAACb,KAAKC,GAAG,CAAC,IAAI,CAACF,YAAY,EAAE,KAAKC,KAAKc,KAAK,CAACL,YAAY;QACrF,MAAMM,gBAAgBN,YAAY,IAAI,CAACG,YAAY,GAAG,GAAG,kBAAkB;QAE3E,IAAII,SAAS,GAAGC,YAAK,CAACC,OAAO,CAAC,CAAC,EAAEC,UAAI,CAACC,KAAK,CAAC,CAAC,EAAED,UAAI,CAACE,IAAI,GAAGJ,YAAK,CAACK,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGL,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAE9G,4BAA4B;QAC5B,mCAAmC;QACnC,MAAMK,gBAAgB,IAAIC,MAAM,CAAC,IAAI,CAACd,YAAY,GAAG;QACrD,IAAIe,aAAa;QACjB,IAAK,IAAIC,IAAI,GAAGA,IAAIb,eAAea,KAAK,GAAI;YACxC,MAAMC,aAAa,IAAIC,KAAK,IAAI,CAACC,aAAa,GAAIH,IAAI,IAAI,CAACI,SAAS;YACpE,2CAA2C;YAC3C,MAAMC,YAAY,IAAI,CAACC,iBAAiB,CAACL;YACzC,2BAA2B;YAC3B,IAAID,IAAIK,UAAUE,MAAM,GAAGpB,eAAe;gBACtC,cAAc;gBACd,MAAMqB,aAAa/B,IAAAA,kBAAW,EAACsB;gBAC/B,MAAMU,eAAeT,IAAIQ;gBACzB,IAAIC,eAAe,GAAG;oBAClBV,cAAc,IAAID,MAAM,CAACW,gBAAgBJ;gBAC7C;YACJ;QACJ;QACAjB,UAAU,GAAGS,gBAAgBN,UAAI,CAACmB,OAAO,GAAGX,aAAaR,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAEvE,8BAA8B;QAC9B,IAAI,IAAI,CAACmB,MAAM,GAAG,IAAI,CAACC,SAAS,EAAE;YAC9B,IAAI,CAACA,SAAS,GAAG,IAAI,CAACD,MAAM;QAChC,OAAO,IAAI,IAAI,CAACA,MAAM,IAAI,IAAI,CAACC,SAAS,GAAG,IAAI,CAACC,QAAQ,EAAE;YACtD,IAAI,CAACD,SAAS,GAAG,IAAI,CAACD,MAAM,GAAG,IAAI,CAACE,QAAQ,GAAG;QACnD;QAEA,MAAMC,eAAe,IAAI,CAACxC,KAAK,CAACyC,KAAK,CAAC,IAAI,CAACH,SAAS,EAAE,IAAI,CAACA,SAAS,GAAG,IAAI,CAACC,QAAQ;QAEpF,iBAAiB;QACjBC,aAAaE,OAAO,CAAC,CAACC,MAAMC;YACxB,MAAMC,cAAc,IAAI,CAACP,SAAS,GAAGM;YACrC,MAAME,aAAaD,gBAAgB,IAAI,CAACR,MAAM;YAE9C,cAAc;YACd,IAAIU,UAAUJ,KAAKvC,IAAI;YACvB,IAAID,IAAAA,kBAAW,EAAC4C,WAAW,IAAI,CAACrC,YAAY,EAAE;gBAC1CqC,UAAUA,QAAQN,KAAK,CAAC,GAAG,IAAI,CAAC/B,YAAY,GAAG,KAAK;YACxD;YACA,MAAMsC,aAAaD,QAAQE,MAAM,CAAC,IAAI,CAACvC,YAAY;YAEnD,MAAMwC,SAASJ,aAAa,GAAG/B,YAAK,CAACoC,IAAI,GAAGlC,UAAI,CAACE,IAAI,CAAC,EAAE,CAAC,GAAG;YAC5D,MAAMiC,YAAYN,aAAa/B,YAAK,CAACoC,IAAI,GAAG;YAC5C,MAAME,QAAQpC,UAAI,CAACC,KAAK;YAExB,eAAe;YACf,yDAAyD;YACzD,MAAMoC,cAAcX,KAAKY,KAAK,CAACC,OAAO,KAAK,IAAI,CAAC3B,aAAa;YAC7D,MAAM4B,YAAYd,KAAKe,GAAG,CAACF,OAAO,KAAK,IAAI,CAAC3B,aAAa;YAEzD,MAAM8B,WAAW7D,KAAKc,KAAK,CAAC0C,cAAc,IAAI,CAACxB,SAAS;YACxD,MAAM8B,SAAS9D,KAAK+D,IAAI,CAACJ,YAAY,IAAI,CAAC3B,SAAS;YAEnD,IAAIgC,cAAc;YAElB,0CAA0C;YAC1C,yBAAyB;YAEzB,WAAW;YACX,MAAMC,WAAWjE,KAAKC,GAAG,CAAC,GAAG4D;YAC7B,MAAMK,SAASlE,KAAKa,GAAG,CAACE,eAAe+C;YAEvC,IAAIG,WAAWlD,iBAAiBmD,SAAS,GAAG;gBACxC,MAAMC,WAAW,IAAIzC,MAAM,CAACuC;gBAC5B,MAAMG,SAASpE,KAAKC,GAAG,CAAC,GAAGiE,SAASD;gBACpC,MAAMI,UAAUrB,aAAa,MAAM;gBACnC,MAAMsB,WAAWtB,aAAa/B,YAAK,CAACoC,IAAI,GAAGlC,UAAI,CAACmB,OAAO;gBAEvD,iBAAiB;gBACjB,MAAMiC,gBAAgBvB,aAAa,CAAC,CAAC,EAAE,IAAI,CAACwB,cAAc,CAAC3B,KAAKe,GAAG,CAACF,OAAO,KAAKb,KAAKY,KAAK,CAACC,OAAO,KAAK,GAAG;gBAE1GM,cAAcG,WAAWG,WAAWD,QAAQ3C,MAAM,CAAC0C,UAAUb,QAAQgB;YACzE,OAAO,IAAIL,UAAU,GAAG;gBACpBF,cAAc7C,UAAI,CAACmB,OAAO,GAAG,MAAMiB;YACvC,OAAO;gBACHS,cAAc7C,UAAI,CAACmB,OAAO,GAAG,MAAMiB;YACvC;YAEAvC,UAAU,GAAGoC,SAASE,YAAYJ,aAAaK,MAAM,EAAE,EAAES,YAAY,EAAE,CAAC;QAC5E;QAEA,cAAc;QACdhD,UAAU,CAAC,EAAE,EAAEC,YAAK,CAACwD,KAAK,CAAC,kFAAkF,EAAEtD,UAAI,CAACC,KAAK,EAAE;QAE3H,IAAI,CAACsD,WAAW,CAAC1D;IACrB;IAEQkB,kBAAkByC,CAAO,EAAU;QACvC,4CAA4C;QAC5C,qCAAqC;QACrC,gCAAgC;QAChC,iBAAiB;QACjB,MAAMC,WAAW;QAEjB,IAAI,IAAI,CAAC5C,SAAS,GAAG,KAAK4C,WAAW,IAAI;YACrC,OAAO,GAAGD,EAAEE,QAAQ,KAAK,EAAE,CAAC,EAAEF,EAAEG,WAAW,IAAI;QACnD;QACA,IAAI,IAAI,CAAC9C,SAAS,GAAG,KAAK4C,UAAU;YAChC,OAAO,GAAGD,EAAEE,QAAQ,KAAK,EAAE,CAAC,EAAEF,EAAEI,OAAO,IAAI;QAC/C;QACA,OAAO,GAAGJ,EAAEK,QAAQ,GAAG,CAAC,EAAEL,EAAEM,UAAU,GAAGC,QAAQ,GAAGC,QAAQ,CAAC,GAAG,MAAM;IAC1E;IAEQX,eAAeY,EAAU,EAAU;QACvC,MAAMC,IAAIrF,KAAKc,KAAK,CAACsE,KAAK;QAC1B,MAAMT,IAAI3E,KAAKc,KAAK,CAACuE,IAAI;QACzB,IAAIV,IAAI,GAAG,OAAO,GAAGA,EAAE,EAAE,EAAEU,IAAI,GAAG,CAAC,CAAC;QACpC,OAAO,GAAGA,EAAE,CAAC,CAAC;IAClB;IAEUC,YAAYC,IAAY,EAAEC,GAAW,EAAE;QAC7C,MAAM3C,OAAO,IAAI,CAAC3C,KAAK,CAAC,IAAI,CAACqC,MAAM,CAAC;QACpC,MAAMkD,OAAOzF,KAAKC,GAAG,CAAC,GAAG,IAAI,CAAC+B,SAAS,GAAG,4BAA4B;QAEtE,eAAe;QACf,IAAIuD,SAAS,MAAM;YACf,IAAI,CAAChD,MAAM,GAAG,AAAC,CAAA,IAAI,CAACA,MAAM,GAAG,CAAA,IAAK,IAAI,CAACrC,KAAK,CAACiC,MAAM;YACnD,IAAI,CAAC5B,MAAM,CAAC;YACZ;QACJ;QACA,IAAIgF,SAAS,YAAY;YACrB,IAAI,CAAChD,MAAM,GAAG,AAAC,CAAA,IAAI,CAACA,MAAM,GAAG,IAAI,IAAI,CAACrC,KAAK,CAACiC,MAAM,AAAD,IAAK,IAAI,CAACjC,KAAK,CAACiC,MAAM;YACvE,IAAI,CAAC5B,MAAM,CAAC;YACZ;QACJ;QAEA,IAAI,IAAI,CAACmF,IAAI,CAACH,OAAO;YACjB,IAAI,CAAChD,MAAM,GAAG,AAAC,CAAA,IAAI,CAACA,MAAM,GAAG,IAAI,IAAI,CAACrC,KAAK,CAACiC,MAAM,AAAD,IAAK,IAAI,CAACjC,KAAK,CAACiC,MAAM;YACvE,IAAI,CAAC5B,MAAM,CAAC;YACZ;QACJ;QACA,IAAI,IAAI,CAACoF,MAAM,CAACJ,OAAO;YACnB,IAAI,CAAChD,MAAM,GAAG,AAAC,CAAA,IAAI,CAACA,MAAM,GAAG,CAAA,IAAK,IAAI,CAACrC,KAAK,CAACiC,MAAM;YACnD,IAAI,CAAC5B,MAAM,CAAC;YACZ;QACJ;QAEA,iCAAiC;QACjC,IAAIiF,IAAIN,QAAQ,OAAO,WAAW;YAC9B,IAAI,CAACU,UAAU,CAAC,CAAC;YACjB,IAAI,CAACrF,MAAM,CAAC;YACZ;QACJ;QACA,IAAIiF,IAAIN,QAAQ,OAAO,WAAW;YAC9B,IAAI,CAACU,UAAU,CAAC;YAChB,IAAI,CAACrF,MAAM,CAAC;YACZ;QACJ;QAEA,sDAAsD;QACtD,IAAIgF,SAAS,KAAK;YACd1C,KAAKY,KAAK,GAAG,IAAI3B,KAAKe,KAAKY,KAAK,CAACC,OAAO,KAAK+B;YAC7C5C,KAAKe,GAAG,GAAG,IAAI9B,KAAKe,KAAKe,GAAG,CAACF,OAAO,KAAK+B;YACzC,IAAI,CAAClF,MAAM,CAAC;YACZ;QACJ;QACA,IAAIgF,SAAS,KAAK;YACd1C,KAAKY,KAAK,GAAG,IAAI3B,KAAKe,KAAKY,KAAK,CAACC,OAAO,KAAK+B;YAC7C5C,KAAKe,GAAG,GAAG,IAAI9B,KAAKe,KAAKe,GAAG,CAACF,OAAO,KAAK+B;YACzC,IAAI,CAAClF,MAAM,CAAC;YACZ;QACJ;QAEA,0BAA0B;QAC1B,qFAAqF;QACrF,2FAA2F;QAC3F,MAAMsF,UAAUL,IAAIM,QAAQ,CAAC,OAAO,4BAA4B;QAEhE,IAAI,IAAI,CAACC,MAAM,CAACR,OAAO;YACnB,IAAIM,SAAS;gBACT,uBAAuB;gBACvB,MAAMG,SAASnD,KAAKe,GAAG,CAACF,OAAO,KAAK+B;gBACpC,IAAIO,SAASnD,KAAKY,KAAK,CAACC,OAAO,IAAI;oBAC/Bb,KAAKe,GAAG,GAAG,IAAI9B,KAAKkE;gBACxB;YACJ,OAAO;gBACH,+BAA+B;gBAC/BnD,KAAKY,KAAK,GAAG,IAAI3B,KAAKe,KAAKY,KAAK,CAACC,OAAO,KAAK+B;gBAC7C5C,KAAKe,GAAG,GAAG,IAAI9B,KAAKe,KAAKe,GAAG,CAACF,OAAO,KAAK+B;YAC7C;YACA,IAAI,CAAClF,MAAM,CAAC;YACZ;QACJ;QAEA,IAAI,IAAI,CAAC0F,OAAO,CAACV,OAAO;YACpB,IAAIM,SAAS;gBACT,uBAAuB;gBACvBhD,KAAKe,GAAG,GAAG,IAAI9B,KAAKe,KAAKe,GAAG,CAACF,OAAO,KAAK+B;YAC7C,OAAO;gBACH,+BAA+B;gBAC/B5C,KAAKY,KAAK,GAAG,IAAI3B,KAAKe,KAAKY,KAAK,CAACC,OAAO,KAAK+B;gBAC7C5C,KAAKe,GAAG,GAAG,IAAI9B,KAAKe,KAAKe,GAAG,CAACF,OAAO,KAAK+B;YAC7C;YACA,IAAI,CAAClF,MAAM,CAAC;YACZ;QACJ;QAEA,IAAIgF,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,CAACW,MAAM,CAAC,IAAI,CAAChG,KAAK;QAC1B;IACJ;IAEUiG,YAAYC,KAAiB,EAAE;QACrC,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,MAAMC,SAAS,AAACF,MAAcG,IAAI;YAElC,IAAID,QAAQ;gBACR,cAAc;gBACd,IAAIF,MAAMI,MAAM,KAAK,MAAM;oBACvB,IAAI,CAACZ,UAAU,CAAC,CAAC;gBACrB,OAAO,IAAIQ,MAAMI,MAAM,KAAK,QAAQ;oBAChC,IAAI,CAACZ,UAAU,CAAC;gBACpB;YACJ,OAAO;gBACH,YAAY;gBACZ,MAAM/C,OAAO,IAAI,CAAC3C,KAAK,CAAC,IAAI,CAACqC,MAAM,CAAC;gBACpC,MAAMkD,OAAOzF,KAAKC,GAAG,CAAC,GAAG,IAAI,CAAC+B,SAAS;gBAEvC,IAAIoE,MAAMI,MAAM,KAAK,MAAM;oBACvB3D,KAAKY,KAAK,GAAG,IAAI3B,KAAKe,KAAKY,KAAK,CAACC,OAAO,KAAK+B;oBAC7C5C,KAAKe,GAAG,GAAG,IAAI9B,KAAKe,KAAKe,GAAG,CAACF,OAAO,KAAK+B;gBAC7C,OAAO,IAAIW,MAAMI,MAAM,KAAK,QAAQ;oBAChC3D,KAAKY,KAAK,GAAG,IAAI3B,KAAKe,KAAKY,KAAK,CAACC,OAAO,KAAK+B;oBAC7C5C,KAAKe,GAAG,GAAG,IAAI9B,KAAKe,KAAKe,GAAG,CAACF,OAAO,KAAK+B;gBAC7C;YACJ;YACA,IAAI,CAAClF,MAAM,CAAC;QAChB;IACJ;IAEQqF,WAAWa,KAAa,EAAE;QAC9B,IAAIC,WAAW,IAAI,CAAC3E,aAAa,GAAI0E,QAAQ,IAAI,CAACzE,SAAS;QAE3D,8EAA8E;QAC9E,IAAI,IAAI,CAAC2E,WAAW,KAAKC,aAAaF,WAAW,IAAI,CAACC,WAAW,EAAE;YAC/DD,WAAW,IAAI,CAACC,WAAW;QAC/B;QAEA,IAAI,CAAC5E,aAAa,GAAG2E;IACzB;IAxRA,YAAYnF,OAAwB,CAAE;QAClC,KAAK,CAACA,UAdV,uBAAQgB,UAAiB,IACzB,uBAAQrC,SAAR,KAAA,IACA,uBAAQsC,aAAoB,IAC5B,uBAAiBC,YAAmB,KAEpC,iBAAiB;QACjB,uBAAQV,iBAAR,KAAA,IACA,uBAAQC,aAAR,KAAA,EAA2B,aAAa;WACxC,uBAAQ2E,eAAR,KAAA,IAEA,SAAS;QACT,uBAAQ/F,gBAAuB;QAI3B,+DAA+D;QAC/D,IAAI,CAACV,KAAK,GAAGqB,QAAQsF,IAAI,CAAC1G,GAAG,CAACC,CAAAA,IAAM,CAAA;gBAChC,GAAGA,CAAC;gBACJqD,OAAO,IAAI3B,KAAK1B,EAAEqD,KAAK;gBACvBG,KAAK,IAAI9B,KAAK1B,EAAEwD,GAAG;YACvB,CAAA;QAEA,uBAAuB;QACvB,MAAMkD,cAAc9G,KAAKa,GAAG,IAAI,IAAI,CAACX,KAAK,CAACC,GAAG,CAACC,CAAAA,IAAKA,EAAEqD,KAAK,CAACC,OAAO;QACnE,MAAMqD,cAAc/G,KAAKC,GAAG,IAAI,IAAI,CAACC,KAAK,CAACC,GAAG,CAACC,CAAAA,IAAKA,EAAEwD,GAAG,CAACF,OAAO;QAEjE,MAAMsD,OAAOzF;QACb,MAAM0F,UAAUD,KAAKE,SAAS,GAAGF,KAAKE,SAAS,CAACxD,OAAO,KAAKoD;QAC5D,MAAMK,UAAUH,KAAKI,OAAO,GAAGJ,KAAKI,OAAO,CAAC1D,OAAO,KAAKqD;QAExD,IAAIC,KAAKE,SAAS,EAAE,IAAI,CAACP,WAAW,GAAGM;QAEvC,mDAAmD;QACnD,MAAMI,QAAQF,UAAUF,WAAW,UAAU,qBAAqB;QAClE,IAAI,CAACjF,SAAS,GAAGqF,QAAQ;QAEzB,+CAA+C;QAC/C,IAAI,CAACtF,aAAa,GAAGiF,KAAKE,SAAS,GAC7BD,UACAA,UAAW,IAAI,CAACjF,SAAS,GAAG;IACtC;AA8PJ"}
|