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.
Files changed (291) hide show
  1. package/README.md +11 -2
  2. package/dist/{ansi.js → src/ansi.js} +17 -9
  3. package/dist/src/ansi.js.map +1 -0
  4. package/dist/{base.js → src/base.js} +82 -70
  5. package/dist/src/base.js.map +1 -0
  6. package/dist/{core.js → src/core.js} +266 -320
  7. package/dist/src/core.js.map +1 -0
  8. package/dist/src/data/countries.js +569 -0
  9. package/dist/src/data/countries.js.map +1 -0
  10. package/dist/src/data/licenses.js +480 -0
  11. package/dist/src/data/licenses.js.map +1 -0
  12. package/dist/{highlight.js → src/highlight.js} +77 -69
  13. package/dist/src/highlight.js.map +1 -0
  14. package/dist/src/index.js +66 -0
  15. package/dist/src/index.js.map +1 -0
  16. package/dist/{input.js → src/input.js} +47 -41
  17. package/dist/src/input.js.map +1 -0
  18. package/dist/src/pipeline.js +273 -0
  19. package/dist/src/pipeline.js.map +1 -0
  20. package/dist/{prompts → src/prompts}/autocomplete.js +58 -57
  21. package/dist/src/prompts/autocomplete.js.map +1 -0
  22. package/dist/{prompts → src/prompts}/box.js +86 -53
  23. package/dist/src/prompts/box.js.map +1 -0
  24. package/dist/{prompts → src/prompts}/breadcrumb-search.js +110 -98
  25. package/dist/src/prompts/breadcrumb-search.js.map +1 -0
  26. package/dist/{prompts → src/prompts}/breadcrumb.js +126 -121
  27. package/dist/src/prompts/breadcrumb.js.map +1 -0
  28. package/dist/{prompts → src/prompts}/byte.js +69 -52
  29. package/dist/src/prompts/byte.js.map +1 -0
  30. package/dist/{prompts → src/prompts}/calculator.js +79 -56
  31. package/dist/src/prompts/calculator.js.map +1 -0
  32. package/dist/{prompts → src/prompts}/calendar.js +167 -127
  33. package/dist/src/prompts/calendar.js.map +1 -0
  34. package/dist/{prompts → src/prompts}/checkbox.js +53 -49
  35. package/dist/src/prompts/checkbox.js.map +1 -0
  36. package/dist/{prompts → src/prompts}/code.js +88 -76
  37. package/dist/src/prompts/code.js.map +1 -0
  38. package/dist/{prompts → src/prompts}/color.js +68 -50
  39. package/dist/src/prompts/color.js.map +1 -0
  40. package/dist/{prompts → src/prompts}/confirm.js +22 -15
  41. package/dist/src/prompts/confirm.js.map +1 -0
  42. package/dist/{prompts → src/prompts}/connection-string.js +59 -36
  43. package/dist/src/prompts/connection-string.js.map +1 -0
  44. package/dist/{prompts → src/prompts}/cron.js +90 -59
  45. package/dist/src/prompts/cron.js.map +1 -0
  46. package/dist/src/prompts/curl-utils.js +71 -0
  47. package/dist/src/prompts/curl-utils.js.map +1 -0
  48. package/dist/{prompts → src/prompts}/curl.js +153 -132
  49. package/dist/src/prompts/curl.js.map +1 -0
  50. package/dist/{prompts → src/prompts}/data-inspector.js +96 -91
  51. package/dist/src/prompts/data-inspector.js.map +1 -0
  52. package/dist/{prompts → src/prompts}/date.js +64 -57
  53. package/dist/src/prompts/date.js.map +1 -0
  54. package/dist/{prompts → src/prompts}/dependency.js +84 -80
  55. package/dist/src/prompts/dependency.js.map +1 -0
  56. package/dist/{prompts → src/prompts}/dial.js +49 -35
  57. package/dist/src/prompts/dial.js.map +1 -0
  58. package/dist/src/prompts/diff.js +118 -0
  59. package/dist/src/prompts/diff.js.map +1 -0
  60. package/dist/{prompts → src/prompts}/draw.js +83 -80
  61. package/dist/src/prompts/draw.js.map +1 -0
  62. package/dist/src/prompts/editor.js +234 -0
  63. package/dist/src/prompts/editor.js.map +1 -0
  64. package/dist/{prompts → src/prompts}/emoji.js +80 -82
  65. package/dist/src/prompts/emoji.js.map +1 -0
  66. package/dist/{prompts → src/prompts}/exec.js +60 -46
  67. package/dist/src/prompts/exec.js.map +1 -0
  68. package/dist/src/prompts/file.js +217 -0
  69. package/dist/src/prompts/file.js.map +1 -0
  70. package/dist/{prompts → src/prompts}/form.js +63 -54
  71. package/dist/src/prompts/form.js.map +1 -0
  72. package/dist/{prompts → src/prompts}/fuzzy-multi-column.js +65 -53
  73. package/dist/src/prompts/fuzzy-multi-column.js.map +1 -0
  74. package/dist/{prompts → src/prompts}/fuzzy.js +66 -55
  75. package/dist/src/prompts/fuzzy.js.map +1 -0
  76. package/dist/src/prompts/gauge.js +137 -0
  77. package/dist/src/prompts/gauge.js.map +1 -0
  78. package/dist/{prompts → src/prompts}/grid.js +70 -57
  79. package/dist/src/prompts/grid.js.map +1 -0
  80. package/dist/{prompts → src/prompts}/heatmap.js +70 -64
  81. package/dist/src/prompts/heatmap.js.map +1 -0
  82. package/dist/{prompts → src/prompts}/ip.js +56 -36
  83. package/dist/src/prompts/ip.js.map +1 -0
  84. package/dist/{prompts → src/prompts}/kanban.js +63 -58
  85. package/dist/src/prompts/kanban.js.map +1 -0
  86. package/dist/src/prompts/keypress.js +54 -0
  87. package/dist/src/prompts/keypress.js.map +1 -0
  88. package/dist/src/prompts/license.js +144 -0
  89. package/dist/src/prompts/license.js.map +1 -0
  90. package/dist/{prompts → src/prompts}/list.js +46 -31
  91. package/dist/src/prompts/list.js.map +1 -0
  92. package/dist/{prompts → src/prompts}/map.js +93 -77
  93. package/dist/src/prompts/map.js.map +1 -0
  94. package/dist/{prompts → src/prompts}/match.js +91 -95
  95. package/dist/src/prompts/match.js.map +1 -0
  96. package/dist/{prompts → src/prompts}/miller.js +74 -67
  97. package/dist/src/prompts/miller.js.map +1 -0
  98. package/dist/{prompts → src/prompts}/multi-column-select.js +54 -44
  99. package/dist/src/prompts/multi-column-select.js.map +1 -0
  100. package/dist/{prompts → src/prompts}/multi-range.js +70 -52
  101. package/dist/src/prompts/multi-range.js.map +1 -0
  102. package/dist/{prompts → src/prompts}/multi-select.js +67 -58
  103. package/dist/src/prompts/multi-select.js.map +1 -0
  104. package/dist/{prompts → src/prompts}/number.js +51 -39
  105. package/dist/src/prompts/number.js.map +1 -0
  106. package/dist/{prompts → src/prompts}/otp.js +43 -27
  107. package/dist/src/prompts/otp.js.map +1 -0
  108. package/dist/{prompts → src/prompts}/pattern.js +74 -71
  109. package/dist/src/prompts/pattern.js.map +1 -0
  110. package/dist/{prompts → src/prompts}/phone.js +107 -118
  111. package/dist/src/prompts/phone.js.map +1 -0
  112. package/dist/src/prompts/quiz-select.js +114 -0
  113. package/dist/src/prompts/quiz-select.js.map +1 -0
  114. package/dist/src/prompts/quiz-text.js +98 -0
  115. package/dist/src/prompts/quiz-text.js.map +1 -0
  116. package/dist/{prompts → src/prompts}/range.js +85 -61
  117. package/dist/src/prompts/range.js.map +1 -0
  118. package/dist/{prompts → src/prompts}/rating.js +29 -24
  119. package/dist/src/prompts/rating.js.map +1 -0
  120. package/dist/{prompts → src/prompts}/regex.js +50 -36
  121. package/dist/src/prompts/regex.js.map +1 -0
  122. package/dist/{prompts → src/prompts}/region.js +62 -56
  123. package/dist/src/prompts/region.js.map +1 -0
  124. package/dist/{prompts → src/prompts}/schedule.js +82 -75
  125. package/dist/src/prompts/schedule.js.map +1 -0
  126. package/dist/{prompts → src/prompts}/scroll.js +61 -58
  127. package/dist/src/prompts/scroll.js.map +1 -0
  128. package/dist/src/prompts/seat.js +164 -0
  129. package/dist/src/prompts/seat.js.map +1 -0
  130. package/dist/{prompts → src/prompts}/select-range.js +58 -46
  131. package/dist/src/prompts/select-range.js.map +1 -0
  132. package/dist/{prompts → src/prompts}/select.js +65 -66
  133. package/dist/src/prompts/select.js.map +1 -0
  134. package/dist/{prompts → src/prompts}/semver.js +24 -13
  135. package/dist/src/prompts/semver.js.map +1 -0
  136. package/dist/src/prompts/shortcut.js +133 -0
  137. package/dist/src/prompts/shortcut.js.map +1 -0
  138. package/dist/{prompts → src/prompts}/slider.js +28 -23
  139. package/dist/src/prompts/slider.js.map +1 -0
  140. package/dist/src/prompts/slot.js +117 -0
  141. package/dist/src/prompts/slot.js.map +1 -0
  142. package/dist/{prompts → src/prompts}/snippet.js +82 -61
  143. package/dist/src/prompts/snippet.js.map +1 -0
  144. package/dist/{prompts → src/prompts}/sort-grid.js +64 -59
  145. package/dist/src/prompts/sort-grid.js.map +1 -0
  146. package/dist/{prompts → src/prompts}/sort.js +59 -49
  147. package/dist/src/prompts/sort.js.map +1 -0
  148. package/dist/src/prompts/spam.js +80 -0
  149. package/dist/src/prompts/spam.js.map +1 -0
  150. package/dist/{prompts → src/prompts}/spreadsheet.js +71 -70
  151. package/dist/src/prompts/spreadsheet.js.map +1 -0
  152. package/dist/{prompts → src/prompts}/table.js +52 -38
  153. package/dist/src/prompts/table.js.map +1 -0
  154. package/dist/{prompts → src/prompts}/text.js +74 -70
  155. package/dist/src/prompts/text.js.map +1 -0
  156. package/dist/{prompts → src/prompts}/time.js +105 -96
  157. package/dist/src/prompts/time.js.map +1 -0
  158. package/dist/src/prompts/toggle.js +53 -0
  159. package/dist/src/prompts/toggle.js.map +1 -0
  160. package/dist/{prompts → src/prompts}/transfer.js +71 -67
  161. package/dist/src/prompts/transfer.js.map +1 -0
  162. package/dist/{prompts → src/prompts}/tree-select.js +83 -86
  163. package/dist/src/prompts/tree-select.js.map +1 -0
  164. package/dist/{prompts → src/prompts}/tree.js +69 -67
  165. package/dist/src/prompts/tree.js.map +1 -0
  166. package/dist/src/prompts/wait.js +79 -0
  167. package/dist/src/prompts/wait.js.map +1 -0
  168. package/dist/src/spinner.js +105 -0
  169. package/dist/src/spinner.js.map +1 -0
  170. package/dist/{symbols.js → src/symbols.js} +32 -7
  171. package/dist/src/symbols.js.map +1 -0
  172. package/dist/{tasks.js → src/tasks.js} +104 -79
  173. package/dist/src/tasks.js.map +1 -0
  174. package/dist/src/theme.js +29 -0
  175. package/dist/src/theme.js.map +1 -0
  176. package/dist/src/types.js +8 -0
  177. package/dist/src/types.js.map +1 -0
  178. package/dist/{utils.js → src/utils.js} +196 -152
  179. package/dist/src/utils.js.map +1 -0
  180. package/package.json +16 -13
  181. package/dist/ansi.d.ts +0 -36
  182. package/dist/base.d.ts +0 -60
  183. package/dist/core.d.ts +0 -1072
  184. package/dist/data/countries.d.ts +0 -2
  185. package/dist/data/countries.js +0 -105
  186. package/dist/data/licenses.d.ts +0 -2
  187. package/dist/data/licenses.js +0 -109
  188. package/dist/highlight.d.ts +0 -7
  189. package/dist/index.d.ts +0 -48
  190. package/dist/index.js +0 -64
  191. package/dist/input.d.ts +0 -14
  192. package/dist/pipeline.d.ts +0 -39
  193. package/dist/pipeline.js +0 -54
  194. package/dist/prompts/autocomplete.d.ts +0 -22
  195. package/dist/prompts/box.d.ts +0 -21
  196. package/dist/prompts/breadcrumb-search.d.ts +0 -14
  197. package/dist/prompts/breadcrumb.d.ts +0 -32
  198. package/dist/prompts/byte.d.ts +0 -13
  199. package/dist/prompts/calculator.d.ts +0 -17
  200. package/dist/prompts/calendar.d.ts +0 -33
  201. package/dist/prompts/checkbox.d.ts +0 -13
  202. package/dist/prompts/code.d.ts +0 -19
  203. package/dist/prompts/color.d.ts +0 -14
  204. package/dist/prompts/confirm.d.ts +0 -8
  205. package/dist/prompts/connection-string.d.ts +0 -18
  206. package/dist/prompts/cron.d.ts +0 -13
  207. package/dist/prompts/curl-utils.d.ts +0 -25
  208. package/dist/prompts/curl-utils.js +0 -41
  209. package/dist/prompts/curl.d.ts +0 -41
  210. package/dist/prompts/data-inspector.d.ts +0 -22
  211. package/dist/prompts/date.d.ts +0 -12
  212. package/dist/prompts/dependency.d.ts +0 -16
  213. package/dist/prompts/dial.d.ts +0 -10
  214. package/dist/prompts/diff.d.ts +0 -10
  215. package/dist/prompts/diff.js +0 -101
  216. package/dist/prompts/draw.d.ts +0 -20
  217. package/dist/prompts/editor.d.ts +0 -14
  218. package/dist/prompts/editor.js +0 -203
  219. package/dist/prompts/emoji.d.ts +0 -18
  220. package/dist/prompts/exec.d.ts +0 -17
  221. package/dist/prompts/file.d.ts +0 -21
  222. package/dist/prompts/file.js +0 -210
  223. package/dist/prompts/form.d.ts +0 -18
  224. package/dist/prompts/fuzzy-multi-column.d.ts +0 -12
  225. package/dist/prompts/fuzzy.d.ts +0 -12
  226. package/dist/prompts/gauge.d.ts +0 -21
  227. package/dist/prompts/gauge.js +0 -130
  228. package/dist/prompts/grid.d.ts +0 -14
  229. package/dist/prompts/heatmap.d.ts +0 -13
  230. package/dist/prompts/ip.d.ts +0 -11
  231. package/dist/prompts/kanban.d.ts +0 -17
  232. package/dist/prompts/keypress.d.ts +0 -7
  233. package/dist/prompts/keypress.js +0 -55
  234. package/dist/prompts/license.d.ts +0 -9
  235. package/dist/prompts/license.js +0 -105
  236. package/dist/prompts/list.d.ts +0 -9
  237. package/dist/prompts/map.d.ts +0 -17
  238. package/dist/prompts/match.d.ts +0 -19
  239. package/dist/prompts/miller.d.ts +0 -15
  240. package/dist/prompts/multi-column-select.d.ts +0 -10
  241. package/dist/prompts/multi-range.d.ts +0 -9
  242. package/dist/prompts/multi-select.d.ts +0 -15
  243. package/dist/prompts/number.d.ts +0 -11
  244. package/dist/prompts/otp.d.ts +0 -10
  245. package/dist/prompts/pattern.d.ts +0 -22
  246. package/dist/prompts/phone.d.ts +0 -41
  247. package/dist/prompts/quiz-select.d.ts +0 -10
  248. package/dist/prompts/quiz-select.js +0 -104
  249. package/dist/prompts/quiz-text.d.ts +0 -11
  250. package/dist/prompts/quiz-text.js +0 -82
  251. package/dist/prompts/range.d.ts +0 -9
  252. package/dist/prompts/rating.d.ts +0 -8
  253. package/dist/prompts/regex.d.ts +0 -13
  254. package/dist/prompts/region.d.ts +0 -11
  255. package/dist/prompts/schedule.d.ts +0 -20
  256. package/dist/prompts/scroll.d.ts +0 -13
  257. package/dist/prompts/seat.d.ts +0 -17
  258. package/dist/prompts/seat.js +0 -165
  259. package/dist/prompts/select-range.d.ts +0 -8
  260. package/dist/prompts/select.d.ts +0 -15
  261. package/dist/prompts/semver.d.ts +0 -6
  262. package/dist/prompts/shortcut.d.ts +0 -9
  263. package/dist/prompts/shortcut.js +0 -135
  264. package/dist/prompts/slider.d.ts +0 -8
  265. package/dist/prompts/slot.d.ts +0 -16
  266. package/dist/prompts/slot.js +0 -107
  267. package/dist/prompts/snippet.d.ts +0 -19
  268. package/dist/prompts/sort-grid.d.ts +0 -16
  269. package/dist/prompts/sort.d.ts +0 -14
  270. package/dist/prompts/spam.d.ts +0 -17
  271. package/dist/prompts/spam.js +0 -62
  272. package/dist/prompts/spreadsheet.d.ts +0 -21
  273. package/dist/prompts/table.d.ts +0 -14
  274. package/dist/prompts/text.d.ts +0 -17
  275. package/dist/prompts/time.d.ts +0 -12
  276. package/dist/prompts/toggle.d.ts +0 -8
  277. package/dist/prompts/toggle.js +0 -47
  278. package/dist/prompts/transfer.d.ts +0 -18
  279. package/dist/prompts/tree-select.d.ts +0 -31
  280. package/dist/prompts/tree.d.ts +0 -20
  281. package/dist/prompts/wait.d.ts +0 -18
  282. package/dist/prompts/wait.js +0 -62
  283. package/dist/spinner.d.ts +0 -33
  284. package/dist/spinner.js +0 -89
  285. package/dist/symbols.d.ts +0 -33
  286. package/dist/tasks.d.ts +0 -57
  287. package/dist/theme.d.ts +0 -2
  288. package/dist/theme.js +0 -20
  289. package/dist/types.d.ts +0 -503
  290. package/dist/types.js +0 -5
  291. package/dist/utils.d.ts +0 -81
@@ -1,61 +1,30 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CalendarPrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- class CalendarPrompt extends base_1.Prompt {
8
- constructor(options) {
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 (let i = daysFromPrevMonth - 1; i >= 0; i--) {
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 (let i = 1; i <= daysInMonth; i++) {
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 (days.length < 42) {
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
- isInTempRange(d) {
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 = ["January", "February", "March", "April", "May", "June",
134
- "July", "August", "September", "October", "November", "December"
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 = `${ansi_1.ANSI.BOLD}${monthNames[month]} ${year}${ansi_1.ANSI.RESET}`;
139
- const weekDays = this.options.weekStart === 1
140
- ? ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"]
141
- : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
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 = `${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
144
- output += `${theme_1.theme.muted}< ${header} >${ansi_1.ANSI.RESET}\n`;
145
- output += weekDays.map(d => `${theme_1.theme.muted}${d}${ansi_1.ANSI.RESET}`).join(' ') + '\n';
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 (let i = 0; i < grid.length; i++) {
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 = theme_1.theme.muted;
144
+ style = _theme.theme.muted;
157
145
  }
158
146
  // Priority: Cursor > Temp/Selected > Today
159
147
  if (isSel || isTemp) {
160
- style = theme_1.theme.main;
148
+ style = _theme.theme.main;
161
149
  }
162
150
  if (isToday && !isSel && !isTemp) {
163
- style += ansi_1.ANSI.UNDERLINE;
151
+ style += _ansi.ANSI.UNDERLINE;
164
152
  }
165
153
  if (isCursor) {
166
- style += ansi_1.ANSI.REVERSE; // Invert colors for cursor
154
+ style += _ansi.ANSI.REVERSE; // Invert colors for cursor
167
155
  }
168
- rowLine += `${style}${dateStr}${ansi_1.ANSI.RESET}`;
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 += ` ${theme_1.theme.muted}(Selecting range...)${ansi_1.ANSI.RESET}`;
180
+ help += ` ${_theme.theme.muted}(Selecting range...)${_ansi.ANSI.RESET}`;
197
181
  }
198
- output += `${theme_1.theme.muted}${help}${ansi_1.ANSI.RESET}`;
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 => !Array.isArray(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
- d.setDate(d.getDate() - 7);
244
- if (isDown)
245
- d.setDate(d.getDate() + 7);
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 ? [start, end] : [end, start];
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 = [newRange];
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 => !Array.isArray(s) && this.isSameDay(s, date));
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 = [date];
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
- exports.CalendarPrompt = CalendarPrompt;
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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"}