mepcli 2.0.0-beta.2 → 2.0.0-beta.4

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 (358) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +20 -0
  3. package/dist/ansi.d.ts +36 -0
  4. package/dist/ansi.js +1 -0
  5. package/dist/base.d.ts +61 -0
  6. package/dist/base.js +1 -0
  7. package/dist/{src/core.js → core.d.ts} +181 -345
  8. package/dist/core.js +1 -0
  9. package/dist/data/countries.d.ts +2 -0
  10. package/dist/data/countries.js +1 -0
  11. package/dist/data/licenses.d.ts +2 -0
  12. package/dist/data/licenses.js +1 -0
  13. package/dist/highlight.d.ts +7 -0
  14. package/dist/highlight.js +1 -0
  15. package/dist/index.d.ts +52 -0
  16. package/dist/index.js +1 -0
  17. package/dist/input.d.ts +14 -0
  18. package/dist/input.js +1 -0
  19. package/dist/pipeline.d.ts +90 -0
  20. package/dist/pipeline.js +1 -0
  21. package/dist/prompts/autocomplete.d.ts +22 -0
  22. package/dist/prompts/autocomplete.js +1 -0
  23. package/dist/prompts/box.d.ts +21 -0
  24. package/dist/prompts/box.js +4 -0
  25. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  26. package/dist/prompts/breadcrumb-search.js +2 -0
  27. package/dist/prompts/breadcrumb.d.ts +32 -0
  28. package/dist/prompts/breadcrumb.js +3 -0
  29. package/dist/prompts/byte.d.ts +13 -0
  30. package/dist/prompts/byte.js +5 -0
  31. package/dist/prompts/calculator.d.ts +17 -0
  32. package/dist/prompts/calculator.js +3 -0
  33. package/dist/prompts/calendar.d.ts +33 -0
  34. package/dist/prompts/calendar.js +3 -0
  35. package/dist/prompts/checkbox.d.ts +13 -0
  36. package/dist/prompts/checkbox.js +2 -0
  37. package/dist/prompts/code.d.ts +19 -0
  38. package/dist/prompts/code.js +4 -0
  39. package/dist/prompts/color.d.ts +14 -0
  40. package/dist/prompts/color.js +10 -0
  41. package/dist/prompts/confirm.d.ts +8 -0
  42. package/dist/prompts/confirm.js +1 -0
  43. package/dist/prompts/connection-string.d.ts +18 -0
  44. package/dist/prompts/connection-string.js +1 -0
  45. package/dist/prompts/cron.d.ts +13 -0
  46. package/dist/prompts/cron.js +4 -0
  47. package/dist/prompts/curl-utils.d.ts +25 -0
  48. package/dist/prompts/curl-utils.js +1 -0
  49. package/dist/prompts/curl.d.ts +41 -0
  50. package/dist/prompts/curl.js +12 -0
  51. package/dist/prompts/data-inspector.d.ts +22 -0
  52. package/dist/prompts/data-inspector.js +5 -0
  53. package/dist/prompts/date.d.ts +12 -0
  54. package/dist/prompts/date.js +2 -0
  55. package/dist/prompts/dependency.d.ts +16 -0
  56. package/dist/prompts/dependency.js +3 -0
  57. package/dist/prompts/dial.d.ts +10 -0
  58. package/dist/prompts/dial.js +3 -0
  59. package/dist/prompts/diff.d.ts +10 -0
  60. package/dist/prompts/diff.js +10 -0
  61. package/dist/prompts/draw.d.ts +20 -0
  62. package/dist/prompts/draw.js +6 -0
  63. package/dist/prompts/editor.d.ts +14 -0
  64. package/dist/prompts/editor.js +2 -0
  65. package/dist/prompts/emoji.d.ts +18 -0
  66. package/dist/prompts/emoji.js +5 -0
  67. package/dist/prompts/exec.d.ts +17 -0
  68. package/dist/prompts/exec.js +1 -0
  69. package/dist/prompts/file.d.ts +21 -0
  70. package/dist/prompts/file.js +2 -0
  71. package/dist/prompts/form.d.ts +18 -0
  72. package/dist/prompts/form.js +1 -0
  73. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  74. package/dist/prompts/fuzzy-multi-column.js +2 -0
  75. package/dist/prompts/fuzzy.d.ts +12 -0
  76. package/dist/prompts/fuzzy.js +2 -0
  77. package/dist/prompts/gauge.d.ts +21 -0
  78. package/dist/prompts/gauge.js +4 -0
  79. package/dist/prompts/grid.d.ts +14 -0
  80. package/dist/prompts/grid.js +2 -0
  81. package/dist/prompts/heatmap.d.ts +13 -0
  82. package/dist/prompts/heatmap.js +2 -0
  83. package/dist/prompts/ip.d.ts +11 -0
  84. package/dist/prompts/ip.js +3 -0
  85. package/dist/prompts/kanban.d.ts +17 -0
  86. package/dist/prompts/kanban.js +4 -0
  87. package/dist/prompts/keypress.d.ts +7 -0
  88. package/dist/prompts/keypress.js +1 -0
  89. package/dist/prompts/license.d.ts +9 -0
  90. package/dist/prompts/license.js +13 -0
  91. package/dist/prompts/list.d.ts +9 -0
  92. package/dist/prompts/list.js +1 -0
  93. package/dist/prompts/map.d.ts +17 -0
  94. package/dist/prompts/map.js +5 -0
  95. package/dist/prompts/match.d.ts +19 -0
  96. package/dist/prompts/match.js +7 -0
  97. package/dist/prompts/miller.d.ts +15 -0
  98. package/dist/prompts/miller.js +2 -0
  99. package/dist/prompts/multi-column-select.d.ts +10 -0
  100. package/dist/prompts/multi-column-select.js +2 -0
  101. package/dist/prompts/multi-range.d.ts +9 -0
  102. package/dist/prompts/multi-range.js +3 -0
  103. package/dist/prompts/multi-select.d.ts +15 -0
  104. package/dist/prompts/multi-select.js +4 -0
  105. package/dist/prompts/number.d.ts +11 -0
  106. package/dist/prompts/number.js +2 -0
  107. package/dist/prompts/otp.d.ts +10 -0
  108. package/dist/prompts/otp.js +2 -0
  109. package/dist/prompts/pattern.d.ts +22 -0
  110. package/dist/prompts/pattern.js +4 -0
  111. package/dist/prompts/phone.d.ts +41 -0
  112. package/dist/prompts/phone.js +3 -0
  113. package/dist/prompts/quiz-select.d.ts +10 -0
  114. package/dist/prompts/quiz-select.js +7 -0
  115. package/dist/prompts/quiz-text.d.ts +11 -0
  116. package/dist/prompts/quiz-text.js +8 -0
  117. package/dist/prompts/range.d.ts +9 -0
  118. package/dist/prompts/range.js +1 -0
  119. package/dist/prompts/rating.d.ts +8 -0
  120. package/dist/prompts/rating.js +1 -0
  121. package/dist/prompts/regex.d.ts +13 -0
  122. package/dist/prompts/regex.js +5 -0
  123. package/dist/prompts/region.d.ts +11 -0
  124. package/dist/prompts/region.js +5 -0
  125. package/dist/prompts/schedule.d.ts +20 -0
  126. package/dist/prompts/schedule.js +5 -0
  127. package/dist/prompts/scroll.d.ts +13 -0
  128. package/dist/prompts/scroll.js +1 -0
  129. package/dist/prompts/seat.d.ts +17 -0
  130. package/dist/prompts/seat.js +5 -0
  131. package/dist/prompts/select-range.d.ts +8 -0
  132. package/dist/prompts/select-range.js +3 -0
  133. package/dist/prompts/select.d.ts +15 -0
  134. package/dist/prompts/select.js +2 -0
  135. package/dist/prompts/semver.d.ts +6 -0
  136. package/dist/prompts/semver.js +1 -0
  137. package/dist/prompts/shortcut.d.ts +9 -0
  138. package/dist/prompts/shortcut.js +1 -0
  139. package/dist/prompts/slider.d.ts +8 -0
  140. package/dist/prompts/slider.js +1 -0
  141. package/dist/prompts/slot.d.ts +16 -0
  142. package/dist/prompts/slot.js +8 -0
  143. package/dist/prompts/snippet.d.ts +19 -0
  144. package/dist/prompts/snippet.js +4 -0
  145. package/dist/prompts/sort-grid.d.ts +16 -0
  146. package/dist/prompts/sort-grid.js +2 -0
  147. package/dist/prompts/sort.d.ts +14 -0
  148. package/dist/prompts/sort.js +2 -0
  149. package/dist/prompts/spam.d.ts +17 -0
  150. package/dist/prompts/spam.js +2 -0
  151. package/dist/prompts/spreadsheet.d.ts +21 -0
  152. package/dist/prompts/spreadsheet.js +7 -0
  153. package/dist/prompts/table.d.ts +14 -0
  154. package/dist/prompts/table.js +3 -0
  155. package/dist/prompts/text.d.ts +17 -0
  156. package/dist/prompts/text.js +2 -0
  157. package/dist/prompts/time.d.ts +12 -0
  158. package/dist/prompts/time.js +2 -0
  159. package/dist/prompts/toggle.d.ts +8 -0
  160. package/dist/prompts/toggle.js +1 -0
  161. package/dist/prompts/transfer.d.ts +18 -0
  162. package/dist/prompts/transfer.js +5 -0
  163. package/dist/prompts/tree-select.d.ts +31 -0
  164. package/dist/prompts/tree-select.js +3 -0
  165. package/dist/prompts/tree.d.ts +20 -0
  166. package/dist/prompts/tree.js +3 -0
  167. package/dist/prompts/wait.d.ts +18 -0
  168. package/dist/prompts/wait.js +1 -0
  169. package/dist/spinner.d.ts +33 -0
  170. package/dist/spinner.js +3 -0
  171. package/dist/symbols.d.ts +33 -0
  172. package/dist/symbols.js +1 -0
  173. package/dist/tasks.d.ts +57 -0
  174. package/dist/tasks.js +1 -0
  175. package/dist/theme.d.ts +2 -0
  176. package/dist/theme.js +1 -0
  177. package/dist/types.d.ts +519 -0
  178. package/dist/types.js +1 -0
  179. package/dist/utils.d.ts +82 -0
  180. package/dist/utils.js +1 -0
  181. package/package.json +10 -10
  182. package/dist/src/ansi.js +0 -50
  183. package/dist/src/ansi.js.map +0 -1
  184. package/dist/src/base.js +0 -258
  185. package/dist/src/base.js.map +0 -1
  186. package/dist/src/core.js.map +0 -1
  187. package/dist/src/data/countries.js +0 -569
  188. package/dist/src/data/countries.js.map +0 -1
  189. package/dist/src/data/licenses.js +0 -480
  190. package/dist/src/data/licenses.js.map +0 -1
  191. package/dist/src/highlight.js +0 -185
  192. package/dist/src/highlight.js.map +0 -1
  193. package/dist/src/index.js +0 -66
  194. package/dist/src/index.js.map +0 -1
  195. package/dist/src/input.js +0 -158
  196. package/dist/src/input.js.map +0 -1
  197. package/dist/src/pipeline.js +0 -273
  198. package/dist/src/pipeline.js.map +0 -1
  199. package/dist/src/prompts/autocomplete.js +0 -171
  200. package/dist/src/prompts/autocomplete.js.map +0 -1
  201. package/dist/src/prompts/box.js +0 -225
  202. package/dist/src/prompts/box.js.map +0 -1
  203. package/dist/src/prompts/breadcrumb-search.js +0 -260
  204. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  205. package/dist/src/prompts/breadcrumb.js +0 -307
  206. package/dist/src/prompts/breadcrumb.js.map +0 -1
  207. package/dist/src/prompts/byte.js +0 -176
  208. package/dist/src/prompts/byte.js.map +0 -1
  209. package/dist/src/prompts/calculator.js +0 -243
  210. package/dist/src/prompts/calculator.js.map +0 -1
  211. package/dist/src/prompts/calendar.js +0 -430
  212. package/dist/src/prompts/calendar.js.map +0 -1
  213. package/dist/src/prompts/checkbox.js +0 -159
  214. package/dist/src/prompts/checkbox.js.map +0 -1
  215. package/dist/src/prompts/code.js +0 -271
  216. package/dist/src/prompts/code.js.map +0 -1
  217. package/dist/src/prompts/color.js +0 -165
  218. package/dist/src/prompts/color.js.map +0 -1
  219. package/dist/src/prompts/confirm.js +0 -55
  220. package/dist/src/prompts/confirm.js.map +0 -1
  221. package/dist/src/prompts/connection-string.js +0 -120
  222. package/dist/src/prompts/connection-string.js.map +0 -1
  223. package/dist/src/prompts/cron.js +0 -207
  224. package/dist/src/prompts/cron.js.map +0 -1
  225. package/dist/src/prompts/curl-utils.js +0 -71
  226. package/dist/src/prompts/curl-utils.js.map +0 -1
  227. package/dist/src/prompts/curl.js +0 -431
  228. package/dist/src/prompts/curl.js.map +0 -1
  229. package/dist/src/prompts/data-inspector.js +0 -261
  230. package/dist/src/prompts/data-inspector.js.map +0 -1
  231. package/dist/src/prompts/date.js +0 -185
  232. package/dist/src/prompts/date.js.map +0 -1
  233. package/dist/src/prompts/dependency.js +0 -283
  234. package/dist/src/prompts/dependency.js.map +0 -1
  235. package/dist/src/prompts/dial.js +0 -124
  236. package/dist/src/prompts/dial.js.map +0 -1
  237. package/dist/src/prompts/diff.js +0 -118
  238. package/dist/src/prompts/diff.js.map +0 -1
  239. package/dist/src/prompts/draw.js +0 -191
  240. package/dist/src/prompts/draw.js.map +0 -1
  241. package/dist/src/prompts/editor.js +0 -234
  242. package/dist/src/prompts/editor.js.map +0 -1
  243. package/dist/src/prompts/emoji.js +0 -226
  244. package/dist/src/prompts/emoji.js.map +0 -1
  245. package/dist/src/prompts/exec.js +0 -151
  246. package/dist/src/prompts/exec.js.map +0 -1
  247. package/dist/src/prompts/file.js +0 -217
  248. package/dist/src/prompts/file.js.map +0 -1
  249. package/dist/src/prompts/form.js +0 -241
  250. package/dist/src/prompts/form.js.map +0 -1
  251. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  252. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  253. package/dist/src/prompts/fuzzy.js +0 -147
  254. package/dist/src/prompts/fuzzy.js.map +0 -1
  255. package/dist/src/prompts/gauge.js +0 -137
  256. package/dist/src/prompts/gauge.js.map +0 -1
  257. package/dist/src/prompts/grid.js +0 -191
  258. package/dist/src/prompts/grid.js.map +0 -1
  259. package/dist/src/prompts/heatmap.js +0 -147
  260. package/dist/src/prompts/heatmap.js.map +0 -1
  261. package/dist/src/prompts/ip.js +0 -138
  262. package/dist/src/prompts/ip.js.map +0 -1
  263. package/dist/src/prompts/kanban.js +0 -233
  264. package/dist/src/prompts/kanban.js.map +0 -1
  265. package/dist/src/prompts/keypress.js +0 -54
  266. package/dist/src/prompts/keypress.js.map +0 -1
  267. package/dist/src/prompts/license.js +0 -144
  268. package/dist/src/prompts/license.js.map +0 -1
  269. package/dist/src/prompts/list.js +0 -124
  270. package/dist/src/prompts/list.js.map +0 -1
  271. package/dist/src/prompts/map.js +0 -262
  272. package/dist/src/prompts/map.js.map +0 -1
  273. package/dist/src/prompts/match.js +0 -271
  274. package/dist/src/prompts/match.js.map +0 -1
  275. package/dist/src/prompts/miller.js +0 -228
  276. package/dist/src/prompts/miller.js.map +0 -1
  277. package/dist/src/prompts/multi-column-select.js +0 -176
  278. package/dist/src/prompts/multi-column-select.js.map +0 -1
  279. package/dist/src/prompts/multi-range.js +0 -189
  280. package/dist/src/prompts/multi-range.js.map +0 -1
  281. package/dist/src/prompts/multi-select.js +0 -183
  282. package/dist/src/prompts/multi-select.js.map +0 -1
  283. package/dist/src/prompts/number.js +0 -166
  284. package/dist/src/prompts/number.js.map +0 -1
  285. package/dist/src/prompts/otp.js +0 -107
  286. package/dist/src/prompts/otp.js.map +0 -1
  287. package/dist/src/prompts/pattern.js +0 -252
  288. package/dist/src/prompts/pattern.js.map +0 -1
  289. package/dist/src/prompts/phone.js +0 -398
  290. package/dist/src/prompts/phone.js.map +0 -1
  291. package/dist/src/prompts/quiz-select.js +0 -114
  292. package/dist/src/prompts/quiz-select.js.map +0 -1
  293. package/dist/src/prompts/quiz-text.js +0 -98
  294. package/dist/src/prompts/quiz-text.js.map +0 -1
  295. package/dist/src/prompts/range.js +0 -164
  296. package/dist/src/prompts/range.js.map +0 -1
  297. package/dist/src/prompts/rating.js +0 -83
  298. package/dist/src/prompts/rating.js.map +0 -1
  299. package/dist/src/prompts/regex.js +0 -145
  300. package/dist/src/prompts/regex.js.map +0 -1
  301. package/dist/src/prompts/region.js +0 -170
  302. package/dist/src/prompts/region.js.map +0 -1
  303. package/dist/src/prompts/schedule.js +0 -270
  304. package/dist/src/prompts/schedule.js.map +0 -1
  305. package/dist/src/prompts/scroll.js +0 -155
  306. package/dist/src/prompts/scroll.js.map +0 -1
  307. package/dist/src/prompts/seat.js +0 -164
  308. package/dist/src/prompts/seat.js.map +0 -1
  309. package/dist/src/prompts/select-range.js +0 -148
  310. package/dist/src/prompts/select-range.js.map +0 -1
  311. package/dist/src/prompts/select.js +0 -163
  312. package/dist/src/prompts/select.js.map +0 -1
  313. package/dist/src/prompts/semver.js +0 -43
  314. package/dist/src/prompts/semver.js.map +0 -1
  315. package/dist/src/prompts/shortcut.js +0 -133
  316. package/dist/src/prompts/shortcut.js.map +0 -1
  317. package/dist/src/prompts/slider.js +0 -69
  318. package/dist/src/prompts/slider.js.map +0 -1
  319. package/dist/src/prompts/slot.js +0 -117
  320. package/dist/src/prompts/slot.js.map +0 -1
  321. package/dist/src/prompts/snippet.js +0 -228
  322. package/dist/src/prompts/snippet.js.map +0 -1
  323. package/dist/src/prompts/sort-grid.js +0 -151
  324. package/dist/src/prompts/sort-grid.js.map +0 -1
  325. package/dist/src/prompts/sort.js +0 -166
  326. package/dist/src/prompts/sort.js.map +0 -1
  327. package/dist/src/prompts/spam.js +0 -80
  328. package/dist/src/prompts/spam.js.map +0 -1
  329. package/dist/src/prompts/spreadsheet.js +0 -240
  330. package/dist/src/prompts/spreadsheet.js.map +0 -1
  331. package/dist/src/prompts/table.js +0 -120
  332. package/dist/src/prompts/table.js.map +0 -1
  333. package/dist/src/prompts/text.js +0 -317
  334. package/dist/src/prompts/text.js.map +0 -1
  335. package/dist/src/prompts/time.js +0 -211
  336. package/dist/src/prompts/time.js.map +0 -1
  337. package/dist/src/prompts/toggle.js +0 -53
  338. package/dist/src/prompts/toggle.js.map +0 -1
  339. package/dist/src/prompts/transfer.js +0 -207
  340. package/dist/src/prompts/transfer.js.map +0 -1
  341. package/dist/src/prompts/tree-select.js +0 -270
  342. package/dist/src/prompts/tree-select.js.map +0 -1
  343. package/dist/src/prompts/tree.js +0 -233
  344. package/dist/src/prompts/tree.js.map +0 -1
  345. package/dist/src/prompts/wait.js +0 -79
  346. package/dist/src/prompts/wait.js.map +0 -1
  347. package/dist/src/spinner.js +0 -105
  348. package/dist/src/spinner.js.map +0 -1
  349. package/dist/src/symbols.js +0 -66
  350. package/dist/src/symbols.js.map +0 -1
  351. package/dist/src/tasks.js +0 -231
  352. package/dist/src/tasks.js.map +0 -1
  353. package/dist/src/theme.js +0 -29
  354. package/dist/src/theme.js.map +0 -1
  355. package/dist/src/types.js +0 -8
  356. package/dist/src/types.js.map +0 -1
  357. package/dist/src/utils.js +0 -480
  358. package/dist/src/utils.js.map +0 -1
@@ -1,430 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "CalendarPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return CalendarPrompt;
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 {
28
- getDaysInMonth(year, month) {
29
- return new Date(year, month + 1, 0).getDate();
30
- }
31
- generateMonthGrid(year, month) {
32
- const days = [];
33
- const firstDayOfMonth = new Date(year, month, 1);
34
- const startDayOfWeek = firstDayOfMonth.getDay(); // 0 (Sun) to 6 (Sat)
35
- const weekStart = this.options.weekStart || 0;
36
- // Calculate days from previous month to fill the first row
37
- const daysFromPrevMonth = (startDayOfWeek - weekStart + 7) % 7;
38
- const prevMonthDate = new Date(year, month, 0); // Last day of prev month
39
- const prevMonthDaysCount = prevMonthDate.getDate();
40
- // Add previous month days
41
- for(let i = daysFromPrevMonth - 1; i >= 0; i--){
42
- days.push({
43
- date: new Date(year, month - 1, prevMonthDaysCount - i),
44
- inMonth: false
45
- });
46
- }
47
- // Add current month days
48
- const daysInMonth = this.getDaysInMonth(year, month);
49
- for(let i = 1; i <= daysInMonth; i++){
50
- days.push({
51
- date: new Date(year, month, i),
52
- inMonth: true
53
- });
54
- }
55
- // Add next month days to fill 42 cells (6 rows * 7 cols)
56
- let nextMonthDay = 1;
57
- while(days.length < 42){
58
- days.push({
59
- date: new Date(year, month + 1, nextMonthDay++),
60
- inMonth: false
61
- });
62
- }
63
- return days;
64
- }
65
- isSameDay(d1, d2) {
66
- return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate();
67
- }
68
- /**
69
- * Check if a date is part of any committed selection
70
- */ isSelected(d) {
71
- const dTime = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();
72
- return this.selections.some((sel)=>{
73
- if (Array.isArray(sel)) {
74
- // Range logic
75
- const [start, end] = sel;
76
- const sTime = new Date(start.getFullYear(), start.getMonth(), start.getDate()).getTime();
77
- const eTime = new Date(end.getFullYear(), end.getMonth(), end.getDate()).getTime();
78
- return dTime >= Math.min(sTime, eTime) && dTime <= Math.max(sTime, eTime);
79
- } else {
80
- // Single date logic
81
- const sTime = new Date(sel.getFullYear(), sel.getMonth(), sel.getDate()).getTime();
82
- return dTime === sTime;
83
- }
84
- });
85
- }
86
- /**
87
- * Visual feedback for the range currently being defined (before Enter is pressed the 2nd time)
88
- */ isInTempRange(d) {
89
- if (!this.tempRangeStart) return false;
90
- const dTime = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();
91
- const sTime = new Date(this.tempRangeStart.getFullYear(), this.tempRangeStart.getMonth(), this.tempRangeStart.getDate()).getTime();
92
- const cTime = new Date(this.cursor.getFullYear(), this.cursor.getMonth(), this.cursor.getDate()).getTime();
93
- return dTime >= Math.min(sTime, cTime) && dTime <= Math.max(sTime, cTime);
94
- }
95
- render(_firstRender) {
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"
109
- ];
110
- const year = this.viewDate.getFullYear();
111
- const month = this.viewDate.getMonth();
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
- ];
130
- const grid = this.generateMonthGrid(year, month);
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';
134
- let rowLine = '';
135
- for(let i = 0; i < grid.length; i++){
136
- const cell = grid[i];
137
- const dateStr = cell.date.getDate().toString().padStart(2, ' ');
138
- let style = '';
139
- const isCursor = this.isSameDay(cell.date, this.cursor);
140
- const isSel = this.isSelected(cell.date);
141
- const isTemp = this.isInTempRange(cell.date);
142
- const isToday = this.isSameDay(cell.date, new Date());
143
- if (!cell.inMonth) {
144
- style = _theme.theme.muted;
145
- }
146
- // Priority: Cursor > Temp/Selected > Today
147
- if (isSel || isTemp) {
148
- style = _theme.theme.main;
149
- }
150
- if (isToday && !isSel && !isTemp) {
151
- style += _ansi.ANSI.UNDERLINE;
152
- }
153
- if (isCursor) {
154
- style += _ansi.ANSI.REVERSE; // Invert colors for cursor
155
- }
156
- rowLine += `${style}${dateStr}${_ansi.ANSI.RESET}`;
157
- if ((i + 1) % 7 === 0) {
158
- output += rowLine + '\n';
159
- rowLine = '';
160
- } else {
161
- rowLine += ' ';
162
- }
163
- }
164
- // Helper text logic
165
- let help = '';
166
- if (this.options.mode === 'range') {
167
- if (this.options.multiple) {
168
- help = 'Enter: Range Points | D: Done';
169
- } else {
170
- help = 'Enter: Start/End';
171
- }
172
- } else {
173
- if (this.options.multiple) {
174
- help = 'Space/Enter: Toggle | D: Done';
175
- } else {
176
- help = 'Enter: Select';
177
- }
178
- }
179
- if (this.tempRangeStart) {
180
- help += ` ${_theme.theme.muted}(Selecting range...)${_ansi.ANSI.RESET}`;
181
- }
182
- output += `${_theme.theme.muted}${help}${_ansi.ANSI.RESET}`;
183
- this.renderFrame(output);
184
- }
185
- syncViewDate() {
186
- if (this.cursor.getMonth() !== this.viewDate.getMonth() || this.cursor.getFullYear() !== this.viewDate.getFullYear()) {
187
- this.viewDate = new Date(this.cursor);
188
- this.viewDate.setDate(1);
189
- }
190
- }
191
- // When the user navigates the visible month independently (mouse scroll or
192
- // '<'/'>'), keep the cursor in the newly viewed month so subsequent
193
- // cursor movements don't snap the view back to the old month.
194
- alignCursorToViewDate() {
195
- const day = this.cursor.getDate();
196
- const year = this.viewDate.getFullYear();
197
- const month = this.viewDate.getMonth();
198
- const daysInTarget = this.getDaysInMonth(year, month);
199
- const newDay = Math.min(day, daysInTarget);
200
- this.cursor = new Date(year, month, newDay);
201
- }
202
- submitResult() {
203
- if (this.options.multiple) {
204
- if (this.options.mode === 'range') {
205
- // Only RangeSelection[]
206
- this.submit(this.selections.filter(Array.isArray));
207
- } else {
208
- // Only Date[]
209
- this.submit(this.selections.filter((sel)=>!Array.isArray(sel)));
210
- }
211
- } else {
212
- // Single Mode (Single Date or Single Range)
213
- this.submit(this.selections[0] || null);
214
- }
215
- }
216
- handleInput(char, _key) {
217
- const isUp = this.isUp(char);
218
- const isDown = this.isDown(char);
219
- const isLeft = this.isLeft(char);
220
- const isRight = this.isRight(char);
221
- // Navigation
222
- if (isUp || isDown || isLeft || isRight) {
223
- const d = new Date(this.cursor);
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);
228
- this.cursor = d;
229
- this.syncViewDate();
230
- this.render(false);
231
- return;
232
- }
233
- // PageUp (Month - 1)
234
- if (char === '\x1b[5~') {
235
- this.cursor.setMonth(this.cursor.getMonth() - 1);
236
- this.syncViewDate();
237
- this.render(false);
238
- return;
239
- }
240
- // PageDown (Month + 1)
241
- if (char === '\x1b[6~') {
242
- this.cursor.setMonth(this.cursor.getMonth() + 1);
243
- this.syncViewDate();
244
- this.render(false);
245
- return;
246
- }
247
- // Ctrl+Up (Year - 1)
248
- if (char === '\x1b[1;5A') {
249
- this.cursor.setFullYear(this.cursor.getFullYear() - 1);
250
- this.syncViewDate();
251
- this.render(false);
252
- return;
253
- }
254
- // Ctrl+Down (Year + 1)
255
- if (char === '\x1b[1;5B') {
256
- this.cursor.setFullYear(this.cursor.getFullYear() + 1);
257
- this.syncViewDate();
258
- this.render(false);
259
- return;
260
- }
261
- // Home (First Day of Month)
262
- if (char === '\x1b[H' || char === '\x1b[1~') {
263
- this.cursor.setDate(1);
264
- this.render(false);
265
- return;
266
- }
267
- // End (Last Day of Month)
268
- if (char === '\x1b[F' || char === '\x1b[4~') {
269
- this.cursor.setMonth(this.cursor.getMonth() + 1);
270
- this.cursor.setDate(0);
271
- this.render(false);
272
- return;
273
- }
274
- // t (Today)
275
- if (char === 't') {
276
- this.cursor = new Date();
277
- this.syncViewDate();
278
- this.render(false);
279
- return;
280
- }
281
- // Month Navigation with < and > (shift+, shift+.)
282
- if (char === '<' || char === ',') {
283
- this.viewDate.setMonth(this.viewDate.getMonth() - 1);
284
- this.alignCursorToViewDate();
285
- this.render(false);
286
- return;
287
- }
288
- if (char === '>' || char === '.') {
289
- this.viewDate.setMonth(this.viewDate.getMonth() + 1);
290
- this.alignCursorToViewDate();
291
- this.render(false);
292
- return;
293
- }
294
- // Done key (only for multiple mode)
295
- if ((char === 'd' || char === 'D') && this.options.multiple) {
296
- this.submitResult();
297
- return;
298
- }
299
- // Selection Trigger
300
- if (char === '\r' || char === '\n' || char === ' ') {
301
- if (this.options.mode === 'range') {
302
- if (!this.tempRangeStart) {
303
- // Start new range selection
304
- this.tempRangeStart = this.cursor;
305
- if (!this.options.multiple) {
306
- this.selections = [];
307
- }
308
- } else {
309
- // Finish range selection
310
- const start = this.tempRangeStart;
311
- const end = this.cursor;
312
- // Normalize order
313
- const newRange = start < end ? [
314
- start,
315
- end
316
- ] : [
317
- end,
318
- start
319
- ];
320
- if (this.options.multiple) {
321
- this.selections.push(newRange);
322
- this.tempRangeStart = null; // Reset for next range
323
- } else {
324
- // Single Mode: Finish and Submit
325
- this.selections = [
326
- newRange
327
- ];
328
- this.submitResult();
329
- return;
330
- }
331
- }
332
- } else {
333
- // Single Date Mode
334
- const date = this.cursor;
335
- if (this.options.multiple) {
336
- // Toggle selection
337
- const idx = this.selections.findIndex((s)=>!Array.isArray(s) && this.isSameDay(s, date));
338
- if (idx >= 0) {
339
- this.selections.splice(idx, 1);
340
- } else {
341
- this.selections.push(date);
342
- }
343
- } else {
344
- // Single Mode: Finish and Submit
345
- this.selections = [
346
- date
347
- ];
348
- this.submitResult();
349
- return;
350
- }
351
- }
352
- this.render(false);
353
- return;
354
- }
355
- }
356
- handleMouse(event) {
357
- if (event.action === 'scroll') {
358
- const direction = event.scroll === 'up' ? -1 : 1;
359
- if (event.ctrl) {
360
- // Ctrl+Scroll: Day (Cursor)
361
- this.cursor.setDate(this.cursor.getDate() + direction);
362
- this.syncViewDate();
363
- } else {
364
- // Normal Scroll: Month
365
- this.viewDate.setMonth(this.viewDate.getMonth() + direction);
366
- this.alignCursorToViewDate();
367
- }
368
- this.render(false);
369
- }
370
- }
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
@@ -1 +0,0 @@
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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"}
@@ -1,159 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "CheckboxPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return CheckboxPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _symbols = require("../symbols");
15
- function _define_property(obj, key, value) {
16
- if (key in obj) {
17
- Object.defineProperty(obj, key, {
18
- value: value,
19
- enumerable: true,
20
- configurable: true,
21
- writable: true
22
- });
23
- } else {
24
- obj[key] = value;
25
- }
26
- return obj;
27
- }
28
- let CheckboxPrompt = class CheckboxPrompt extends _base.Prompt {
29
- render(_firstRender) {
30
- // Adjust Scroll Top
31
- if (this.selectedIndex < this.scrollTop) {
32
- this.scrollTop = this.selectedIndex;
33
- } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
34
- this.scrollTop = this.selectedIndex - this.pageSize + 1;
35
- }
36
- // Ensure we don't scroll past bounds if list is small
37
- if (this.options.choices.length <= this.pageSize) {
38
- this.scrollTop = 0;
39
- }
40
- let output = '';
41
- // Header
42
- const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
43
- output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(Space: toggle, a: all, x: none, Enter: submit)${_ansi.ANSI.RESET}`;
44
- // List
45
- const choices = this.options.choices;
46
- const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
47
- visibleChoices.forEach((choice, index)=>{
48
- const actualIndex = this.scrollTop + index;
49
- output += '\n'; // New line for each item
50
- const cursor = actualIndex === this.selectedIndex ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET}` : ' ';
51
- const isChecked = this.checkedState[actualIndex];
52
- const checkbox = isChecked ? `${_theme.theme.success}${_symbols.symbols.checked}${_ansi.ANSI.RESET}` : `${_theme.theme.muted}${_symbols.symbols.unchecked}${_ansi.ANSI.RESET}`;
53
- const title = actualIndex === this.selectedIndex ? `${_theme.theme.main}${choice.title}${_ansi.ANSI.RESET}` : choice.title;
54
- output += `${cursor} ${checkbox} ${title}`;
55
- });
56
- // Indication of more items
57
- if (choices.length > this.pageSize) {
58
- // const progress = ` ${this.scrollTop + 1}-${Math.min(this.scrollTop + this.pageSize, choices.length)} of ${choices.length}`;
59
- }
60
- if (this.errorMsg) {
61
- output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
62
- }
63
- this.renderFrame(output);
64
- }
65
- handleInput(char) {
66
- if (char === '\r' || char === '\n') {
67
- const selectedCount = this.checkedState.filter(Boolean).length;
68
- const { min = 0, max } = this.options;
69
- if (selectedCount < min) {
70
- this.errorMsg = `You must select at least ${min} options.`;
71
- this.render(false);
72
- return;
73
- }
74
- if (max && selectedCount > max) {
75
- this.errorMsg = `You can only select up to ${max} options.`;
76
- this.render(false);
77
- return;
78
- }
79
- this.cleanup();
80
- const results = this.options.choices.filter((_, i)=>this.checkedState[i]).map((c)=>c.value);
81
- if (this._resolve) this._resolve(results);
82
- return;
83
- }
84
- // --- Batch Shortcuts ---
85
- // 'a': Select All
86
- if (char === 'a') {
87
- if (this.options.max && this.options.choices.length > this.options.max) {
88
- this.errorMsg = `Cannot select all: Max limit is ${this.options.max}`;
89
- } else {
90
- this.checkedState.fill(true);
91
- this.errorMsg = '';
92
- }
93
- this.render(false);
94
- return;
95
- }
96
- // 'x' or 'n': Select None
97
- if (char === 'x' || char === 'n') {
98
- this.checkedState.fill(false);
99
- this.errorMsg = '';
100
- this.render(false);
101
- return;
102
- }
103
- // 'i': Invert Selection
104
- if (char === 'i') {
105
- const potentialCount = this.checkedState.filter((s)=>!s).length;
106
- if (this.options.max && potentialCount > this.options.max) {
107
- this.errorMsg = `Cannot invert: Result exceeds max limit ${this.options.max}`;
108
- } else {
109
- this.checkedState = this.checkedState.map((s)=>!s);
110
- this.errorMsg = '';
111
- }
112
- this.render(false);
113
- return;
114
- }
115
- // Space Toggle
116
- if (char === ' ') {
117
- const currentChecked = this.checkedState[this.selectedIndex];
118
- const selectedCount = this.checkedState.filter(Boolean).length;
119
- const { max } = this.options;
120
- if (!currentChecked && max && selectedCount >= max) {
121
- this.errorMsg = `Max ${max} selections allowed.`;
122
- } else {
123
- this.checkedState[this.selectedIndex] = !currentChecked;
124
- this.errorMsg = '';
125
- }
126
- this.render(false);
127
- }
128
- if (this.isUp(char)) {
129
- this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;
130
- this.errorMsg = '';
131
- this.render(false);
132
- }
133
- if (this.isDown(char)) {
134
- this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;
135
- this.errorMsg = '';
136
- this.render(false);
137
- }
138
- }
139
- handleMouse(event) {
140
- if (event.action === 'scroll') {
141
- if (event.scroll === 'up') {
142
- this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;
143
- this.errorMsg = '';
144
- this.render(false);
145
- } else if (event.scroll === 'down') {
146
- this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;
147
- this.errorMsg = '';
148
- this.render(false);
149
- }
150
- }
151
- }
152
- constructor(options){
153
- super(options), _define_property(this, "selectedIndex", 0), _define_property(this, "checkedState", void 0), _define_property(this, "errorMsg", ''), // Pagination state
154
- _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 10);
155
- this.checkedState = options.choices.map((c)=>!!c.selected);
156
- }
157
- };
158
-
159
- //# sourceMappingURL=checkbox.js.map