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,61 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
super(options);
|
|
10
|
-
// Store all selections here. Can be an array of Dates or Ranges.
|
|
11
|
-
this.selections = [];
|
|
12
|
-
// Internal state for dragging/selecting a range before it is finalized
|
|
13
|
-
this.tempRangeStart = null;
|
|
14
|
-
// Initialize cursor
|
|
15
|
-
this.cursor = new Date();
|
|
16
|
-
this.viewDate = new Date();
|
|
17
|
-
this.viewDate.setDate(1);
|
|
18
|
-
// Normalize initial value into selections array
|
|
19
|
-
if (options.initial) {
|
|
20
|
-
// Handle array inputs (Range or Multiple Dates)
|
|
21
|
-
if (Array.isArray(options.initial)) {
|
|
22
|
-
const init = options.initial;
|
|
23
|
-
if (init.length > 0) {
|
|
24
|
-
// Detect if it is [Date, Date] (Single Range)
|
|
25
|
-
if (options.mode === 'range' && !options.multiple && init.length === 2 && init[0] instanceof Date) {
|
|
26
|
-
this.selections = [[init[0], init[1]]];
|
|
27
|
-
this.cursor = new Date(init[1]);
|
|
28
|
-
}
|
|
29
|
-
// Detect [Date, Date][] (Multiple Ranges)
|
|
30
|
-
else if (Array.isArray(init[0])) {
|
|
31
|
-
this.selections = [...init];
|
|
32
|
-
const lastRange = init[init.length - 1];
|
|
33
|
-
this.cursor = new Date(lastRange[1]);
|
|
34
|
-
}
|
|
35
|
-
// Detect Date[] (Multiple Singles)
|
|
36
|
-
else {
|
|
37
|
-
this.selections = [...init];
|
|
38
|
-
this.cursor = new Date(init[init.length - 1]);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
// Single Date
|
|
44
|
-
this.selections = [options.initial];
|
|
45
|
-
this.cursor = new Date(options.initial);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
// If no initial value, and NOT range mode, we might optionally start with today selected?
|
|
50
|
-
// For now, let's keep it empty or follow original logic behavior if needed.
|
|
51
|
-
if (this.options.mode !== 'range' && !this.options.multiple) {
|
|
52
|
-
this.selections = [new Date()];
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Sync viewDate to cursor so we see the selected date
|
|
56
|
-
this.viewDate = new Date(this.cursor);
|
|
57
|
-
this.viewDate.setDate(1);
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "CalendarPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return CalendarPrompt;
|
|
58
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 CalendarPrompt = class CalendarPrompt extends _base.Prompt {
|
|
59
28
|
getDaysInMonth(year, month) {
|
|
60
29
|
return new Date(year, month + 1, 0).getDate();
|
|
61
30
|
}
|
|
@@ -69,7 +38,7 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
69
38
|
const prevMonthDate = new Date(year, month, 0); // Last day of prev month
|
|
70
39
|
const prevMonthDaysCount = prevMonthDate.getDate();
|
|
71
40
|
// Add previous month days
|
|
72
|
-
for
|
|
41
|
+
for(let i = daysFromPrevMonth - 1; i >= 0; i--){
|
|
73
42
|
days.push({
|
|
74
43
|
date: new Date(year, month - 1, prevMonthDaysCount - i),
|
|
75
44
|
inMonth: false
|
|
@@ -77,7 +46,7 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
77
46
|
}
|
|
78
47
|
// Add current month days
|
|
79
48
|
const daysInMonth = this.getDaysInMonth(year, month);
|
|
80
|
-
for
|
|
49
|
+
for(let i = 1; i <= daysInMonth; i++){
|
|
81
50
|
days.push({
|
|
82
51
|
date: new Date(year, month, i),
|
|
83
52
|
inMonth: true
|
|
@@ -85,7 +54,7 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
85
54
|
}
|
|
86
55
|
// Add next month days to fill 42 cells (6 rows * 7 cols)
|
|
87
56
|
let nextMonthDay = 1;
|
|
88
|
-
while
|
|
57
|
+
while(days.length < 42){
|
|
89
58
|
days.push({
|
|
90
59
|
date: new Date(year, month + 1, nextMonthDay++),
|
|
91
60
|
inMonth: false
|
|
@@ -94,24 +63,20 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
94
63
|
return days;
|
|
95
64
|
}
|
|
96
65
|
isSameDay(d1, d2) {
|
|
97
|
-
return d1.getFullYear() === d2.getFullYear() &&
|
|
98
|
-
d1.getMonth() === d2.getMonth() &&
|
|
99
|
-
d1.getDate() === d2.getDate();
|
|
66
|
+
return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate();
|
|
100
67
|
}
|
|
101
68
|
/**
|
|
102
69
|
* Check if a date is part of any committed selection
|
|
103
|
-
*/
|
|
104
|
-
isSelected(d) {
|
|
70
|
+
*/ isSelected(d) {
|
|
105
71
|
const dTime = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();
|
|
106
|
-
return this.selections.some(sel
|
|
72
|
+
return this.selections.some((sel)=>{
|
|
107
73
|
if (Array.isArray(sel)) {
|
|
108
74
|
// Range logic
|
|
109
75
|
const [start, end] = sel;
|
|
110
76
|
const sTime = new Date(start.getFullYear(), start.getMonth(), start.getDate()).getTime();
|
|
111
77
|
const eTime = new Date(end.getFullYear(), end.getMonth(), end.getDate()).getTime();
|
|
112
78
|
return dTime >= Math.min(sTime, eTime) && dTime <= Math.max(sTime, eTime);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
79
|
+
} else {
|
|
115
80
|
// Single date logic
|
|
116
81
|
const sTime = new Date(sel.getFullYear(), sel.getMonth(), sel.getDate()).getTime();
|
|
117
82
|
return dTime === sTime;
|
|
@@ -120,31 +85,54 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
120
85
|
}
|
|
121
86
|
/**
|
|
122
87
|
* Visual feedback for the range currently being defined (before Enter is pressed the 2nd time)
|
|
123
|
-
*/
|
|
124
|
-
|
|
125
|
-
if (!this.tempRangeStart)
|
|
126
|
-
return false;
|
|
88
|
+
*/ isInTempRange(d) {
|
|
89
|
+
if (!this.tempRangeStart) return false;
|
|
127
90
|
const dTime = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();
|
|
128
91
|
const sTime = new Date(this.tempRangeStart.getFullYear(), this.tempRangeStart.getMonth(), this.tempRangeStart.getDate()).getTime();
|
|
129
92
|
const cTime = new Date(this.cursor.getFullYear(), this.cursor.getMonth(), this.cursor.getDate()).getTime();
|
|
130
93
|
return dTime >= Math.min(sTime, cTime) && dTime <= Math.max(sTime, cTime);
|
|
131
94
|
}
|
|
132
95
|
render(_firstRender) {
|
|
133
|
-
const monthNames = [
|
|
134
|
-
"
|
|
96
|
+
const monthNames = [
|
|
97
|
+
"January",
|
|
98
|
+
"February",
|
|
99
|
+
"March",
|
|
100
|
+
"April",
|
|
101
|
+
"May",
|
|
102
|
+
"June",
|
|
103
|
+
"July",
|
|
104
|
+
"August",
|
|
105
|
+
"September",
|
|
106
|
+
"October",
|
|
107
|
+
"November",
|
|
108
|
+
"December"
|
|
135
109
|
];
|
|
136
110
|
const year = this.viewDate.getFullYear();
|
|
137
111
|
const month = this.viewDate.getMonth();
|
|
138
|
-
const header = `${
|
|
139
|
-
const weekDays = this.options.weekStart === 1
|
|
140
|
-
|
|
141
|
-
|
|
112
|
+
const header = `${_ansi.ANSI.BOLD}${monthNames[month]} ${year}${_ansi.ANSI.RESET}`;
|
|
113
|
+
const weekDays = this.options.weekStart === 1 ? [
|
|
114
|
+
"Mo",
|
|
115
|
+
"Tu",
|
|
116
|
+
"We",
|
|
117
|
+
"Th",
|
|
118
|
+
"Fr",
|
|
119
|
+
"Sa",
|
|
120
|
+
"Su"
|
|
121
|
+
] : [
|
|
122
|
+
"Su",
|
|
123
|
+
"Mo",
|
|
124
|
+
"Tu",
|
|
125
|
+
"We",
|
|
126
|
+
"Th",
|
|
127
|
+
"Fr",
|
|
128
|
+
"Sa"
|
|
129
|
+
];
|
|
142
130
|
const grid = this.generateMonthGrid(year, month);
|
|
143
|
-
let output = `${
|
|
144
|
-
output += `${
|
|
145
|
-
output += weekDays.map(d
|
|
131
|
+
let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
132
|
+
output += `${_theme.theme.muted}< ${header} >${_ansi.ANSI.RESET}\n`;
|
|
133
|
+
output += weekDays.map((d)=>`${_theme.theme.muted}${d}${_ansi.ANSI.RESET}`).join(' ') + '\n';
|
|
146
134
|
let rowLine = '';
|
|
147
|
-
for
|
|
135
|
+
for(let i = 0; i < grid.length; i++){
|
|
148
136
|
const cell = grid[i];
|
|
149
137
|
const dateStr = cell.date.getDate().toString().padStart(2, ' ');
|
|
150
138
|
let style = '';
|
|
@@ -153,24 +141,23 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
153
141
|
const isTemp = this.isInTempRange(cell.date);
|
|
154
142
|
const isToday = this.isSameDay(cell.date, new Date());
|
|
155
143
|
if (!cell.inMonth) {
|
|
156
|
-
style =
|
|
144
|
+
style = _theme.theme.muted;
|
|
157
145
|
}
|
|
158
146
|
// Priority: Cursor > Temp/Selected > Today
|
|
159
147
|
if (isSel || isTemp) {
|
|
160
|
-
style =
|
|
148
|
+
style = _theme.theme.main;
|
|
161
149
|
}
|
|
162
150
|
if (isToday && !isSel && !isTemp) {
|
|
163
|
-
style +=
|
|
151
|
+
style += _ansi.ANSI.UNDERLINE;
|
|
164
152
|
}
|
|
165
153
|
if (isCursor) {
|
|
166
|
-
style +=
|
|
154
|
+
style += _ansi.ANSI.REVERSE; // Invert colors for cursor
|
|
167
155
|
}
|
|
168
|
-
rowLine += `${style}${dateStr}${
|
|
156
|
+
rowLine += `${style}${dateStr}${_ansi.ANSI.RESET}`;
|
|
169
157
|
if ((i + 1) % 7 === 0) {
|
|
170
158
|
output += rowLine + '\n';
|
|
171
159
|
rowLine = '';
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
160
|
+
} else {
|
|
174
161
|
rowLine += ' ';
|
|
175
162
|
}
|
|
176
163
|
}
|
|
@@ -179,23 +166,20 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
179
166
|
if (this.options.mode === 'range') {
|
|
180
167
|
if (this.options.multiple) {
|
|
181
168
|
help = 'Enter: Range Points | D: Done';
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
169
|
+
} else {
|
|
184
170
|
help = 'Enter: Start/End';
|
|
185
171
|
}
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
172
|
+
} else {
|
|
188
173
|
if (this.options.multiple) {
|
|
189
174
|
help = 'Space/Enter: Toggle | D: Done';
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
175
|
+
} else {
|
|
192
176
|
help = 'Enter: Select';
|
|
193
177
|
}
|
|
194
178
|
}
|
|
195
179
|
if (this.tempRangeStart) {
|
|
196
|
-
help += ` ${
|
|
180
|
+
help += ` ${_theme.theme.muted}(Selecting range...)${_ansi.ANSI.RESET}`;
|
|
197
181
|
}
|
|
198
|
-
output += `${
|
|
182
|
+
output += `${_theme.theme.muted}${help}${_ansi.ANSI.RESET}`;
|
|
199
183
|
this.renderFrame(output);
|
|
200
184
|
}
|
|
201
185
|
syncViewDate() {
|
|
@@ -220,13 +204,11 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
220
204
|
if (this.options.mode === 'range') {
|
|
221
205
|
// Only RangeSelection[]
|
|
222
206
|
this.submit(this.selections.filter(Array.isArray));
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
207
|
+
} else {
|
|
225
208
|
// Only Date[]
|
|
226
|
-
this.submit(this.selections.filter(sel
|
|
209
|
+
this.submit(this.selections.filter((sel)=>!Array.isArray(sel)));
|
|
227
210
|
}
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
211
|
+
} else {
|
|
230
212
|
// Single Mode (Single Date or Single Range)
|
|
231
213
|
this.submit(this.selections[0] || null);
|
|
232
214
|
}
|
|
@@ -239,14 +221,10 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
239
221
|
// Navigation
|
|
240
222
|
if (isUp || isDown || isLeft || isRight) {
|
|
241
223
|
const d = new Date(this.cursor);
|
|
242
|
-
if (isUp)
|
|
243
|
-
|
|
244
|
-
if (
|
|
245
|
-
|
|
246
|
-
if (isLeft)
|
|
247
|
-
d.setDate(d.getDate() - 1);
|
|
248
|
-
if (isRight)
|
|
249
|
-
d.setDate(d.getDate() + 1);
|
|
224
|
+
if (isUp) d.setDate(d.getDate() - 7);
|
|
225
|
+
if (isDown) d.setDate(d.getDate() + 7);
|
|
226
|
+
if (isLeft) d.setDate(d.getDate() - 1);
|
|
227
|
+
if (isRight) d.setDate(d.getDate() + 1);
|
|
250
228
|
this.cursor = d;
|
|
251
229
|
this.syncViewDate();
|
|
252
230
|
this.render(false);
|
|
@@ -327,41 +305,46 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
327
305
|
if (!this.options.multiple) {
|
|
328
306
|
this.selections = [];
|
|
329
307
|
}
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
308
|
+
} else {
|
|
332
309
|
// Finish range selection
|
|
333
310
|
const start = this.tempRangeStart;
|
|
334
311
|
const end = this.cursor;
|
|
335
312
|
// Normalize order
|
|
336
|
-
const newRange = start < end ? [
|
|
313
|
+
const newRange = start < end ? [
|
|
314
|
+
start,
|
|
315
|
+
end
|
|
316
|
+
] : [
|
|
317
|
+
end,
|
|
318
|
+
start
|
|
319
|
+
];
|
|
337
320
|
if (this.options.multiple) {
|
|
338
321
|
this.selections.push(newRange);
|
|
339
322
|
this.tempRangeStart = null; // Reset for next range
|
|
340
|
-
}
|
|
341
|
-
else {
|
|
323
|
+
} else {
|
|
342
324
|
// Single Mode: Finish and Submit
|
|
343
|
-
this.selections = [
|
|
325
|
+
this.selections = [
|
|
326
|
+
newRange
|
|
327
|
+
];
|
|
344
328
|
this.submitResult();
|
|
345
329
|
return;
|
|
346
330
|
}
|
|
347
331
|
}
|
|
348
|
-
}
|
|
349
|
-
else {
|
|
332
|
+
} else {
|
|
350
333
|
// Single Date Mode
|
|
351
334
|
const date = this.cursor;
|
|
352
335
|
if (this.options.multiple) {
|
|
353
336
|
// Toggle selection
|
|
354
|
-
const idx = this.selections.findIndex(s
|
|
337
|
+
const idx = this.selections.findIndex((s)=>!Array.isArray(s) && this.isSameDay(s, date));
|
|
355
338
|
if (idx >= 0) {
|
|
356
339
|
this.selections.splice(idx, 1);
|
|
357
|
-
}
|
|
358
|
-
else {
|
|
340
|
+
} else {
|
|
359
341
|
this.selections.push(date);
|
|
360
342
|
}
|
|
361
|
-
}
|
|
362
|
-
else {
|
|
343
|
+
} else {
|
|
363
344
|
// Single Mode: Finish and Submit
|
|
364
|
-
this.selections = [
|
|
345
|
+
this.selections = [
|
|
346
|
+
date
|
|
347
|
+
];
|
|
365
348
|
this.submitResult();
|
|
366
349
|
return;
|
|
367
350
|
}
|
|
@@ -377,8 +360,7 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
377
360
|
// Ctrl+Scroll: Day (Cursor)
|
|
378
361
|
this.cursor.setDate(this.cursor.getDate() + direction);
|
|
379
362
|
this.syncViewDate();
|
|
380
|
-
}
|
|
381
|
-
else {
|
|
363
|
+
} else {
|
|
382
364
|
// Normal Scroll: Month
|
|
383
365
|
this.viewDate.setMonth(this.viewDate.getMonth() + direction);
|
|
384
366
|
this.alignCursorToViewDate();
|
|
@@ -386,5 +368,63 @@ class CalendarPrompt extends base_1.Prompt {
|
|
|
386
368
|
this.render(false);
|
|
387
369
|
}
|
|
388
370
|
}
|
|
389
|
-
|
|
390
|
-
|
|
371
|
+
constructor(options){
|
|
372
|
+
super(options), _define_property(this, "cursor", void 0), _define_property(this, "viewDate", void 0 // The month currently being viewed
|
|
373
|
+
), // Store all selections here. Can be an array of Dates or Ranges.
|
|
374
|
+
_define_property(this, "selections", []), // Internal state for dragging/selecting a range before it is finalized
|
|
375
|
+
_define_property(this, "tempRangeStart", null);
|
|
376
|
+
// Initialize cursor
|
|
377
|
+
this.cursor = new Date();
|
|
378
|
+
this.viewDate = new Date();
|
|
379
|
+
this.viewDate.setDate(1);
|
|
380
|
+
// Normalize initial value into selections array
|
|
381
|
+
if (options.initial) {
|
|
382
|
+
// Handle array inputs (Range or Multiple Dates)
|
|
383
|
+
if (Array.isArray(options.initial)) {
|
|
384
|
+
const init = options.initial;
|
|
385
|
+
if (init.length > 0) {
|
|
386
|
+
// Detect if it is [Date, Date] (Single Range)
|
|
387
|
+
if (options.mode === 'range' && !options.multiple && init.length === 2 && init[0] instanceof Date) {
|
|
388
|
+
this.selections = [
|
|
389
|
+
[
|
|
390
|
+
init[0],
|
|
391
|
+
init[1]
|
|
392
|
+
]
|
|
393
|
+
];
|
|
394
|
+
this.cursor = new Date(init[1]);
|
|
395
|
+
} else if (Array.isArray(init[0])) {
|
|
396
|
+
this.selections = [
|
|
397
|
+
...init
|
|
398
|
+
];
|
|
399
|
+
const lastRange = init[init.length - 1];
|
|
400
|
+
this.cursor = new Date(lastRange[1]);
|
|
401
|
+
} else {
|
|
402
|
+
this.selections = [
|
|
403
|
+
...init
|
|
404
|
+
];
|
|
405
|
+
this.cursor = new Date(init[init.length - 1]);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
} else {
|
|
409
|
+
// Single Date
|
|
410
|
+
this.selections = [
|
|
411
|
+
options.initial
|
|
412
|
+
];
|
|
413
|
+
this.cursor = new Date(options.initial);
|
|
414
|
+
}
|
|
415
|
+
} else {
|
|
416
|
+
// If no initial value, and NOT range mode, we might optionally start with today selected?
|
|
417
|
+
// For now, let's keep it empty or follow original logic behavior if needed.
|
|
418
|
+
if (this.options.mode !== 'range' && !this.options.multiple) {
|
|
419
|
+
this.selections = [
|
|
420
|
+
new Date()
|
|
421
|
+
];
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// Sync viewDate to cursor so we see the selected date
|
|
425
|
+
this.viewDate = new Date(this.cursor);
|
|
426
|
+
this.viewDate.setDate(1);
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/calendar.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { CalendarOptions, MouseEvent } from '../types';\n\n// Helper types for internal state management\ntype SingleSelection = Date;\ntype RangeSelection = [Date, Date];\ntype CalendarValue = SingleSelection | RangeSelection | SingleSelection[] | RangeSelection[];\n\n// Extend options locally to support 'multiple' without breaking if types.ts isn't updated yet\ninterface ExtendedCalendarOptions extends CalendarOptions {\n multiple?: boolean;\n}\n\nexport class CalendarPrompt extends Prompt<CalendarValue, ExtendedCalendarOptions> {\n private cursor: Date;\n private viewDate: Date; // The month currently being viewed\n\n // Store all selections here. Can be an array of Dates or Ranges.\n private selections: (SingleSelection | RangeSelection)[] = [];\n\n // Internal state for dragging/selecting a range before it is finalized\n private tempRangeStart: Date | null = null;\n\n constructor(options: ExtendedCalendarOptions) {\n super(options);\n\n // Initialize cursor\n this.cursor = new Date();\n this.viewDate = new Date();\n this.viewDate.setDate(1);\n\n // Normalize initial value into selections array\n if (options.initial) {\n // Handle array inputs (Range or Multiple Dates)\n if (Array.isArray(options.initial)) {\n const init = options.initial as any[];\n if (init.length > 0) {\n // Detect if it is [Date, Date] (Single Range)\n if (options.mode === 'range' && !options.multiple && init.length === 2 && init[0] instanceof Date) {\n this.selections = [[init[0], init[1]]];\n this.cursor = new Date(init[1]);\n }\n // Detect [Date, Date][] (Multiple Ranges)\n else if (Array.isArray(init[0])) {\n this.selections = [...init];\n const lastRange = init[init.length - 1];\n this.cursor = new Date(lastRange[1]);\n }\n // Detect Date[] (Multiple Singles)\n else {\n this.selections = [...init];\n this.cursor = new Date(init[init.length - 1]);\n }\n }\n } else {\n // Single Date\n this.selections = [options.initial as Date];\n this.cursor = new Date(options.initial as Date);\n }\n } else {\n // If no initial value, and NOT range mode, we might optionally start with today selected?\n // For now, let's keep it empty or follow original logic behavior if needed.\n if (this.options.mode !== 'range' && !this.options.multiple) {\n this.selections = [new Date()];\n }\n }\n\n // Sync viewDate to cursor so we see the selected date\n this.viewDate = new Date(this.cursor);\n this.viewDate.setDate(1);\n }\n\n private getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n }\n\n private generateMonthGrid(year: number, month: number): { date: Date, inMonth: boolean }[] {\n const days: { date: Date, inMonth: boolean }[] = [];\n\n const firstDayOfMonth = new Date(year, month, 1);\n const startDayOfWeek = firstDayOfMonth.getDay(); // 0 (Sun) to 6 (Sat)\n\n const weekStart = this.options.weekStart || 0;\n\n // Calculate days from previous month to fill the first row\n const daysFromPrevMonth = (startDayOfWeek - weekStart + 7) % 7;\n\n const prevMonthDate = new Date(year, month, 0); // Last day of prev month\n const prevMonthDaysCount = prevMonthDate.getDate();\n\n // Add previous month days\n for (let i = daysFromPrevMonth - 1; i >= 0; i--) {\n days.push({\n date: new Date(year, month - 1, prevMonthDaysCount - i),\n inMonth: false\n });\n }\n\n // Add current month days\n const daysInMonth = this.getDaysInMonth(year, month);\n for (let i = 1; i <= daysInMonth; i++) {\n days.push({\n date: new Date(year, month, i),\n inMonth: true\n });\n }\n\n // Add next month days to fill 42 cells (6 rows * 7 cols)\n let nextMonthDay = 1;\n while (days.length < 42) {\n days.push({\n date: new Date(year, month + 1, nextMonthDay++),\n inMonth: false\n });\n }\n\n return days;\n }\n\n private isSameDay(d1: Date, d2: Date): boolean {\n return d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate();\n }\n\n /**\n * Check if a date is part of any committed selection\n */\n private isSelected(d: Date): boolean {\n const dTime = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\n\n return this.selections.some(sel => {\n if (Array.isArray(sel)) {\n // Range logic\n const [start, end] = sel;\n const sTime = new Date(start.getFullYear(), start.getMonth(), start.getDate()).getTime();\n const eTime = new Date(end.getFullYear(), end.getMonth(), end.getDate()).getTime();\n return dTime >= Math.min(sTime, eTime) && dTime <= Math.max(sTime, eTime);\n } else {\n // Single date logic\n const sTime = new Date(sel.getFullYear(), sel.getMonth(), sel.getDate()).getTime();\n return dTime === sTime;\n }\n });\n }\n\n /**\n * Visual feedback for the range currently being defined (before Enter is pressed the 2nd time)\n */\n private isInTempRange(d: Date): boolean {\n if (!this.tempRangeStart) return false;\n\n const dTime = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\n const sTime = new Date(this.tempRangeStart.getFullYear(), this.tempRangeStart.getMonth(), this.tempRangeStart.getDate()).getTime();\n const cTime = new Date(this.cursor.getFullYear(), this.cursor.getMonth(), this.cursor.getDate()).getTime();\n\n return dTime >= Math.min(sTime, cTime) && dTime <= Math.max(sTime, cTime);\n }\n\n protected render(_firstRender: boolean): void {\n const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n ];\n\n const year = this.viewDate.getFullYear();\n const month = this.viewDate.getMonth();\n\n const header = `${ANSI.BOLD}${monthNames[month]} ${year}${ANSI.RESET}`;\n\n const weekDays = this.options.weekStart === 1\n ? [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"]\n : [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\n const grid = this.generateMonthGrid(year, month);\n\n let output = `${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n output += `${theme.muted}< ${header} >${ANSI.RESET}\\n`;\n output += weekDays.map(d => `${theme.muted}${d}${ANSI.RESET}`).join(' ') + '\\n';\n\n let rowLine = '';\n for (let i = 0; i < grid.length; i++) {\n const cell = grid[i];\n const dateStr = cell.date.getDate().toString().padStart(2, ' ');\n\n let style = '';\n\n const isCursor = this.isSameDay(cell.date, this.cursor);\n const isSel = this.isSelected(cell.date);\n const isTemp = this.isInTempRange(cell.date);\n const isToday = this.isSameDay(cell.date, new Date());\n\n if (!cell.inMonth) {\n style = theme.muted;\n }\n\n // Priority: Cursor > Temp/Selected > Today\n if (isSel || isTemp) {\n style = theme.main;\n }\n\n if (isToday && !isSel && !isTemp) {\n style += ANSI.UNDERLINE;\n }\n\n if (isCursor) {\n style += ANSI.REVERSE; // Invert colors for cursor\n }\n\n rowLine += `${style}${dateStr}${ANSI.RESET}`;\n\n if ((i + 1) % 7 === 0) {\n output += rowLine + '\\n';\n rowLine = '';\n } else {\n rowLine += ' ';\n }\n }\n\n // Helper text logic\n let help = '';\n if (this.options.mode === 'range') {\n if (this.options.multiple) {\n help = 'Enter: Range Points | D: Done';\n } else {\n help = 'Enter: Start/End';\n }\n } else {\n if (this.options.multiple) {\n help = 'Space/Enter: Toggle | D: Done';\n } else {\n help = 'Enter: Select';\n }\n }\n\n if (this.tempRangeStart) {\n help += ` ${theme.muted}(Selecting range...)${ANSI.RESET}`;\n }\n\n output += `${theme.muted}${help}${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n private syncViewDate() {\n if (this.cursor.getMonth() !== this.viewDate.getMonth() || this.cursor.getFullYear() !== this.viewDate.getFullYear()) {\n this.viewDate = new Date(this.cursor);\n this.viewDate.setDate(1);\n }\n }\n\n // When the user navigates the visible month independently (mouse scroll or\n // '<'/'>'), keep the cursor in the newly viewed month so subsequent\n // cursor movements don't snap the view back to the old month.\n private alignCursorToViewDate() {\n const day = this.cursor.getDate();\n const year = this.viewDate.getFullYear();\n const month = this.viewDate.getMonth();\n const daysInTarget = this.getDaysInMonth(year, month);\n const newDay = Math.min(day, daysInTarget);\n this.cursor = new Date(year, month, newDay);\n }\n\n private submitResult() {\n if (this.options.multiple) {\n if (this.options.mode === 'range') {\n // Only RangeSelection[]\n this.submit(this.selections.filter(Array.isArray) as RangeSelection[]);\n } else {\n // Only Date[]\n this.submit(this.selections.filter(sel => !Array.isArray(sel)) as Date[]);\n }\n } else {\n // Single Mode (Single Date or Single Range)\n this.submit(this.selections[0] || null);\n }\n }\n\n protected handleInput(char: string, _key: any): void {\n const isUp = this.isUp(char);\n const isDown = this.isDown(char);\n const isLeft = this.isLeft(char);\n const isRight = this.isRight(char);\n\n // Navigation\n if (isUp || isDown || isLeft || isRight) {\n const d = new Date(this.cursor);\n if (isUp) d.setDate(d.getDate() - 7);\n if (isDown) d.setDate(d.getDate() + 7);\n if (isLeft) d.setDate(d.getDate() - 1);\n if (isRight) d.setDate(d.getDate() + 1);\n\n this.cursor = d;\n this.syncViewDate();\n this.render(false);\n return;\n }\n\n // PageUp (Month - 1)\n if (char === '\\x1b[5~') {\n this.cursor.setMonth(this.cursor.getMonth() - 1);\n this.syncViewDate();\n this.render(false);\n return;\n }\n // PageDown (Month + 1)\n if (char === '\\x1b[6~') {\n this.cursor.setMonth(this.cursor.getMonth() + 1);\n this.syncViewDate();\n this.render(false);\n return;\n }\n\n // Ctrl+Up (Year - 1)\n if (char === '\\x1b[1;5A') {\n this.cursor.setFullYear(this.cursor.getFullYear() - 1);\n this.syncViewDate();\n this.render(false);\n return;\n }\n // Ctrl+Down (Year + 1)\n if (char === '\\x1b[1;5B') {\n this.cursor.setFullYear(this.cursor.getFullYear() + 1);\n this.syncViewDate();\n this.render(false);\n return;\n }\n\n // Home (First Day of Month)\n if (char === '\\x1b[H' || char === '\\x1b[1~') {\n this.cursor.setDate(1);\n this.render(false);\n return;\n }\n\n // End (Last Day of Month)\n if (char === '\\x1b[F' || char === '\\x1b[4~') {\n this.cursor.setMonth(this.cursor.getMonth() + 1);\n this.cursor.setDate(0);\n this.render(false);\n return;\n }\n\n // t (Today)\n if (char === 't') {\n this.cursor = new Date();\n this.syncViewDate();\n this.render(false);\n return;\n }\n\n // Month Navigation with < and > (shift+, shift+.)\n if (char === '<' || char === ',') {\n this.viewDate.setMonth(this.viewDate.getMonth() - 1);\n this.alignCursorToViewDate();\n this.render(false);\n return;\n }\n if (char === '>' || char === '.') {\n this.viewDate.setMonth(this.viewDate.getMonth() + 1);\n this.alignCursorToViewDate();\n this.render(false);\n return;\n }\n\n // Done key (only for multiple mode)\n if ((char === 'd' || char === 'D') && this.options.multiple) {\n this.submitResult();\n return;\n }\n\n // Selection Trigger\n if (char === '\\r' || char === '\\n' || char === ' ') {\n if (this.options.mode === 'range') {\n if (!this.tempRangeStart) {\n // Start new range selection\n this.tempRangeStart = this.cursor;\n\n if (!this.options.multiple) {\n this.selections = [];\n }\n } else {\n // Finish range selection\n const start = this.tempRangeStart;\n const end = this.cursor;\n\n // Normalize order\n const newRange: RangeSelection = start < end ? [start, end] : [end, start];\n\n if (this.options.multiple) {\n this.selections.push(newRange);\n this.tempRangeStart = null; // Reset for next range\n } else {\n // Single Mode: Finish and Submit\n this.selections = [newRange];\n this.submitResult();\n return;\n }\n }\n } else {\n // Single Date Mode\n const date = this.cursor;\n if (this.options.multiple) {\n // Toggle selection\n const idx = this.selections.findIndex(s => !Array.isArray(s) && this.isSameDay(s, date));\n if (idx >= 0) {\n this.selections.splice(idx, 1);\n } else {\n this.selections.push(date);\n }\n } else {\n // Single Mode: Finish and Submit\n this.selections = [date];\n this.submitResult();\n return;\n }\n }\n this.render(false);\n return;\n }\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n const direction = event.scroll === 'up' ? -1 : 1;\n\n if (event.ctrl) {\n // Ctrl+Scroll: Day (Cursor)\n this.cursor.setDate(this.cursor.getDate() + direction);\n this.syncViewDate();\n } else {\n // Normal Scroll: Month\n this.viewDate.setMonth(this.viewDate.getMonth() + direction);\n this.alignCursorToViewDate();\n }\n\n this.render(false);\n }\n }\n}"],"names":["CalendarPrompt","Prompt","getDaysInMonth","year","month","Date","getDate","generateMonthGrid","days","firstDayOfMonth","startDayOfWeek","getDay","weekStart","options","daysFromPrevMonth","prevMonthDate","prevMonthDaysCount","i","push","date","inMonth","daysInMonth","nextMonthDay","length","isSameDay","d1","d2","getFullYear","getMonth","isSelected","d","dTime","getTime","selections","some","sel","Array","isArray","start","end","sTime","eTime","Math","min","max","isInTempRange","tempRangeStart","cTime","cursor","render","_firstRender","monthNames","viewDate","header","ANSI","BOLD","RESET","weekDays","grid","output","theme","title","message","muted","map","join","rowLine","cell","dateStr","toString","padStart","style","isCursor","isSel","isTemp","isToday","main","UNDERLINE","REVERSE","help","mode","multiple","renderFrame","syncViewDate","setDate","alignCursorToViewDate","day","daysInTarget","newDay","submitResult","submit","filter","handleInput","char","_key","isUp","isDown","isLeft","isRight","setMonth","setFullYear","newRange","idx","findIndex","s","splice","handleMouse","event","action","direction","scroll","ctrl","initial","init","lastRange"],"mappings":"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"}
|