mepcli 2.0.0-beta.1 → 2.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/README.md +32 -10
  2. package/dist/ansi.d.ts +36 -0
  3. package/dist/ansi.js +1 -0
  4. package/dist/base.d.ts +60 -0
  5. package/dist/base.js +1 -0
  6. package/dist/{src/core.js → core.d.ts} +175 -347
  7. package/dist/core.js +1 -0
  8. package/dist/data/countries.d.ts +2 -0
  9. package/dist/data/countries.js +1 -0
  10. package/dist/data/licenses.d.ts +2 -0
  11. package/dist/data/licenses.js +1 -0
  12. package/dist/highlight.d.ts +7 -0
  13. package/dist/highlight.js +1 -0
  14. package/dist/index.d.ts +48 -0
  15. package/dist/index.js +1 -0
  16. package/dist/input.d.ts +14 -0
  17. package/dist/input.js +1 -0
  18. package/dist/pipeline.d.ts +90 -0
  19. package/dist/pipeline.js +1 -0
  20. package/dist/prompts/autocomplete.d.ts +22 -0
  21. package/dist/prompts/autocomplete.js +1 -0
  22. package/dist/prompts/box.d.ts +21 -0
  23. package/dist/prompts/box.js +4 -0
  24. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  25. package/dist/prompts/breadcrumb-search.js +2 -0
  26. package/dist/prompts/breadcrumb.d.ts +32 -0
  27. package/dist/prompts/breadcrumb.js +3 -0
  28. package/dist/prompts/byte.d.ts +13 -0
  29. package/dist/prompts/byte.js +5 -0
  30. package/dist/prompts/calculator.d.ts +17 -0
  31. package/dist/prompts/calculator.js +3 -0
  32. package/dist/prompts/calendar.d.ts +33 -0
  33. package/dist/prompts/calendar.js +3 -0
  34. package/dist/prompts/checkbox.d.ts +13 -0
  35. package/dist/prompts/checkbox.js +2 -0
  36. package/dist/prompts/code.d.ts +19 -0
  37. package/dist/prompts/code.js +4 -0
  38. package/dist/prompts/color.d.ts +14 -0
  39. package/dist/prompts/color.js +10 -0
  40. package/dist/prompts/confirm.d.ts +8 -0
  41. package/dist/prompts/confirm.js +1 -0
  42. package/dist/prompts/connection-string.d.ts +18 -0
  43. package/dist/prompts/connection-string.js +1 -0
  44. package/dist/prompts/cron.d.ts +13 -0
  45. package/dist/prompts/cron.js +4 -0
  46. package/dist/prompts/curl-utils.d.ts +25 -0
  47. package/dist/prompts/curl-utils.js +1 -0
  48. package/dist/prompts/curl.d.ts +41 -0
  49. package/dist/prompts/curl.js +12 -0
  50. package/dist/prompts/data-inspector.d.ts +22 -0
  51. package/dist/prompts/data-inspector.js +5 -0
  52. package/dist/prompts/date.d.ts +12 -0
  53. package/dist/prompts/date.js +2 -0
  54. package/dist/prompts/dependency.d.ts +16 -0
  55. package/dist/prompts/dependency.js +3 -0
  56. package/dist/prompts/dial.d.ts +10 -0
  57. package/dist/prompts/dial.js +3 -0
  58. package/dist/prompts/diff.d.ts +10 -0
  59. package/dist/prompts/diff.js +10 -0
  60. package/dist/prompts/draw.d.ts +20 -0
  61. package/dist/prompts/draw.js +6 -0
  62. package/dist/prompts/editor.d.ts +14 -0
  63. package/dist/prompts/editor.js +2 -0
  64. package/dist/prompts/emoji.d.ts +18 -0
  65. package/dist/prompts/emoji.js +5 -0
  66. package/dist/prompts/exec.d.ts +17 -0
  67. package/dist/prompts/exec.js +1 -0
  68. package/dist/prompts/file.d.ts +21 -0
  69. package/dist/prompts/file.js +2 -0
  70. package/dist/prompts/form.d.ts +18 -0
  71. package/dist/prompts/form.js +1 -0
  72. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  73. package/dist/prompts/fuzzy-multi-column.js +2 -0
  74. package/dist/prompts/fuzzy.d.ts +12 -0
  75. package/dist/prompts/fuzzy.js +2 -0
  76. package/dist/prompts/gauge.d.ts +21 -0
  77. package/dist/prompts/gauge.js +4 -0
  78. package/dist/prompts/grid.d.ts +14 -0
  79. package/dist/prompts/grid.js +2 -0
  80. package/dist/prompts/heatmap.d.ts +13 -0
  81. package/dist/prompts/heatmap.js +2 -0
  82. package/dist/prompts/ip.d.ts +11 -0
  83. package/dist/prompts/ip.js +3 -0
  84. package/dist/prompts/kanban.d.ts +17 -0
  85. package/dist/prompts/kanban.js +4 -0
  86. package/dist/prompts/keypress.d.ts +7 -0
  87. package/dist/prompts/keypress.js +1 -0
  88. package/dist/prompts/license.d.ts +9 -0
  89. package/dist/prompts/license.js +13 -0
  90. package/dist/prompts/list.d.ts +9 -0
  91. package/dist/prompts/list.js +1 -0
  92. package/dist/prompts/map.d.ts +17 -0
  93. package/dist/prompts/map.js +5 -0
  94. package/dist/prompts/match.d.ts +19 -0
  95. package/dist/prompts/match.js +7 -0
  96. package/dist/prompts/miller.d.ts +15 -0
  97. package/dist/prompts/miller.js +2 -0
  98. package/dist/prompts/multi-column-select.d.ts +10 -0
  99. package/dist/prompts/multi-column-select.js +2 -0
  100. package/dist/prompts/multi-range.d.ts +9 -0
  101. package/dist/prompts/multi-range.js +3 -0
  102. package/dist/prompts/multi-select.d.ts +15 -0
  103. package/dist/prompts/multi-select.js +4 -0
  104. package/dist/prompts/number.d.ts +11 -0
  105. package/dist/prompts/number.js +2 -0
  106. package/dist/prompts/otp.d.ts +10 -0
  107. package/dist/prompts/otp.js +2 -0
  108. package/dist/prompts/pattern.d.ts +22 -0
  109. package/dist/prompts/pattern.js +4 -0
  110. package/dist/prompts/phone.d.ts +41 -0
  111. package/dist/prompts/phone.js +3 -0
  112. package/dist/prompts/quiz-select.d.ts +10 -0
  113. package/dist/prompts/quiz-select.js +7 -0
  114. package/dist/prompts/quiz-text.d.ts +11 -0
  115. package/dist/prompts/quiz-text.js +8 -0
  116. package/dist/prompts/range.d.ts +9 -0
  117. package/dist/prompts/range.js +1 -0
  118. package/dist/prompts/rating.d.ts +8 -0
  119. package/dist/prompts/rating.js +1 -0
  120. package/dist/prompts/regex.d.ts +13 -0
  121. package/dist/prompts/regex.js +5 -0
  122. package/dist/prompts/region.d.ts +11 -0
  123. package/dist/prompts/region.js +5 -0
  124. package/dist/prompts/schedule.d.ts +20 -0
  125. package/dist/prompts/schedule.js +5 -0
  126. package/dist/prompts/scroll.d.ts +13 -0
  127. package/dist/prompts/scroll.js +1 -0
  128. package/dist/prompts/seat.d.ts +17 -0
  129. package/dist/prompts/seat.js +5 -0
  130. package/dist/prompts/select-range.d.ts +8 -0
  131. package/dist/prompts/select-range.js +3 -0
  132. package/dist/prompts/select.d.ts +15 -0
  133. package/dist/prompts/select.js +2 -0
  134. package/dist/prompts/semver.d.ts +6 -0
  135. package/dist/prompts/semver.js +1 -0
  136. package/dist/prompts/shortcut.d.ts +9 -0
  137. package/dist/prompts/shortcut.js +1 -0
  138. package/dist/prompts/slider.d.ts +8 -0
  139. package/dist/prompts/slider.js +1 -0
  140. package/dist/prompts/slot.d.ts +16 -0
  141. package/dist/prompts/slot.js +8 -0
  142. package/dist/prompts/snippet.d.ts +19 -0
  143. package/dist/prompts/snippet.js +4 -0
  144. package/dist/prompts/sort-grid.d.ts +16 -0
  145. package/dist/prompts/sort-grid.js +2 -0
  146. package/dist/prompts/sort.d.ts +14 -0
  147. package/dist/prompts/sort.js +2 -0
  148. package/dist/prompts/spam.d.ts +17 -0
  149. package/dist/prompts/spam.js +2 -0
  150. package/dist/prompts/spreadsheet.d.ts +21 -0
  151. package/dist/prompts/spreadsheet.js +7 -0
  152. package/dist/prompts/table.d.ts +14 -0
  153. package/dist/prompts/table.js +3 -0
  154. package/dist/prompts/text.d.ts +17 -0
  155. package/dist/prompts/text.js +2 -0
  156. package/dist/prompts/time.d.ts +12 -0
  157. package/dist/prompts/time.js +2 -0
  158. package/dist/prompts/toggle.d.ts +8 -0
  159. package/dist/prompts/toggle.js +1 -0
  160. package/dist/prompts/transfer.d.ts +18 -0
  161. package/dist/prompts/transfer.js +5 -0
  162. package/dist/prompts/tree-select.d.ts +31 -0
  163. package/dist/prompts/tree-select.js +3 -0
  164. package/dist/prompts/tree.d.ts +20 -0
  165. package/dist/prompts/tree.js +3 -0
  166. package/dist/prompts/wait.d.ts +18 -0
  167. package/dist/prompts/wait.js +1 -0
  168. package/dist/spinner.d.ts +33 -0
  169. package/dist/spinner.js +3 -0
  170. package/dist/symbols.d.ts +33 -0
  171. package/dist/symbols.js +1 -0
  172. package/dist/tasks.d.ts +57 -0
  173. package/dist/tasks.js +1 -0
  174. package/dist/theme.d.ts +2 -0
  175. package/dist/theme.js +1 -0
  176. package/dist/types.d.ts +503 -0
  177. package/dist/types.js +1 -0
  178. package/dist/utils.d.ts +81 -0
  179. package/dist/utils.js +1 -0
  180. package/package.json +12 -17
  181. package/dist/src/ansi.js +0 -50
  182. package/dist/src/ansi.js.map +0 -1
  183. package/dist/src/base.js +0 -258
  184. package/dist/src/base.js.map +0 -1
  185. package/dist/src/core.js.map +0 -1
  186. package/dist/src/data/countries.js +0 -569
  187. package/dist/src/data/countries.js.map +0 -1
  188. package/dist/src/data/licenses.js +0 -480
  189. package/dist/src/data/licenses.js.map +0 -1
  190. package/dist/src/highlight.js +0 -185
  191. package/dist/src/highlight.js.map +0 -1
  192. package/dist/src/index.js +0 -66
  193. package/dist/src/index.js.map +0 -1
  194. package/dist/src/input.js +0 -158
  195. package/dist/src/input.js.map +0 -1
  196. package/dist/src/pipeline.js +0 -273
  197. package/dist/src/pipeline.js.map +0 -1
  198. package/dist/src/prompts/autocomplete.js +0 -171
  199. package/dist/src/prompts/autocomplete.js.map +0 -1
  200. package/dist/src/prompts/box.js +0 -225
  201. package/dist/src/prompts/box.js.map +0 -1
  202. package/dist/src/prompts/breadcrumb-search.js +0 -260
  203. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  204. package/dist/src/prompts/breadcrumb.js +0 -307
  205. package/dist/src/prompts/breadcrumb.js.map +0 -1
  206. package/dist/src/prompts/byte.js +0 -176
  207. package/dist/src/prompts/byte.js.map +0 -1
  208. package/dist/src/prompts/calculator.js +0 -243
  209. package/dist/src/prompts/calculator.js.map +0 -1
  210. package/dist/src/prompts/calendar.js +0 -430
  211. package/dist/src/prompts/calendar.js.map +0 -1
  212. package/dist/src/prompts/checkbox.js +0 -159
  213. package/dist/src/prompts/checkbox.js.map +0 -1
  214. package/dist/src/prompts/code.js +0 -271
  215. package/dist/src/prompts/code.js.map +0 -1
  216. package/dist/src/prompts/color.js +0 -165
  217. package/dist/src/prompts/color.js.map +0 -1
  218. package/dist/src/prompts/confirm.js +0 -55
  219. package/dist/src/prompts/confirm.js.map +0 -1
  220. package/dist/src/prompts/connection-string.js +0 -120
  221. package/dist/src/prompts/connection-string.js.map +0 -1
  222. package/dist/src/prompts/cron.js +0 -207
  223. package/dist/src/prompts/cron.js.map +0 -1
  224. package/dist/src/prompts/curl-utils.js +0 -71
  225. package/dist/src/prompts/curl-utils.js.map +0 -1
  226. package/dist/src/prompts/curl.js +0 -431
  227. package/dist/src/prompts/curl.js.map +0 -1
  228. package/dist/src/prompts/data-inspector.js +0 -261
  229. package/dist/src/prompts/data-inspector.js.map +0 -1
  230. package/dist/src/prompts/date.js +0 -185
  231. package/dist/src/prompts/date.js.map +0 -1
  232. package/dist/src/prompts/dependency.js +0 -283
  233. package/dist/src/prompts/dependency.js.map +0 -1
  234. package/dist/src/prompts/dial.js +0 -124
  235. package/dist/src/prompts/dial.js.map +0 -1
  236. package/dist/src/prompts/diff.js +0 -118
  237. package/dist/src/prompts/diff.js.map +0 -1
  238. package/dist/src/prompts/draw.js +0 -191
  239. package/dist/src/prompts/draw.js.map +0 -1
  240. package/dist/src/prompts/editor.js +0 -234
  241. package/dist/src/prompts/editor.js.map +0 -1
  242. package/dist/src/prompts/emoji.js +0 -226
  243. package/dist/src/prompts/emoji.js.map +0 -1
  244. package/dist/src/prompts/exec.js +0 -151
  245. package/dist/src/prompts/exec.js.map +0 -1
  246. package/dist/src/prompts/file.js +0 -217
  247. package/dist/src/prompts/file.js.map +0 -1
  248. package/dist/src/prompts/form.js +0 -241
  249. package/dist/src/prompts/form.js.map +0 -1
  250. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  251. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  252. package/dist/src/prompts/fuzzy.js +0 -147
  253. package/dist/src/prompts/fuzzy.js.map +0 -1
  254. package/dist/src/prompts/gauge.js +0 -137
  255. package/dist/src/prompts/gauge.js.map +0 -1
  256. package/dist/src/prompts/grid.js +0 -191
  257. package/dist/src/prompts/grid.js.map +0 -1
  258. package/dist/src/prompts/heatmap.js +0 -147
  259. package/dist/src/prompts/heatmap.js.map +0 -1
  260. package/dist/src/prompts/ip.js +0 -138
  261. package/dist/src/prompts/ip.js.map +0 -1
  262. package/dist/src/prompts/kanban.js +0 -233
  263. package/dist/src/prompts/kanban.js.map +0 -1
  264. package/dist/src/prompts/keypress.js +0 -54
  265. package/dist/src/prompts/keypress.js.map +0 -1
  266. package/dist/src/prompts/license.js +0 -144
  267. package/dist/src/prompts/license.js.map +0 -1
  268. package/dist/src/prompts/list.js +0 -124
  269. package/dist/src/prompts/list.js.map +0 -1
  270. package/dist/src/prompts/map.js +0 -262
  271. package/dist/src/prompts/map.js.map +0 -1
  272. package/dist/src/prompts/match.js +0 -271
  273. package/dist/src/prompts/match.js.map +0 -1
  274. package/dist/src/prompts/miller.js +0 -228
  275. package/dist/src/prompts/miller.js.map +0 -1
  276. package/dist/src/prompts/multi-column-select.js +0 -176
  277. package/dist/src/prompts/multi-column-select.js.map +0 -1
  278. package/dist/src/prompts/multi-range.js +0 -189
  279. package/dist/src/prompts/multi-range.js.map +0 -1
  280. package/dist/src/prompts/multi-select.js +0 -183
  281. package/dist/src/prompts/multi-select.js.map +0 -1
  282. package/dist/src/prompts/number.js +0 -166
  283. package/dist/src/prompts/number.js.map +0 -1
  284. package/dist/src/prompts/otp.js +0 -107
  285. package/dist/src/prompts/otp.js.map +0 -1
  286. package/dist/src/prompts/pattern.js +0 -252
  287. package/dist/src/prompts/pattern.js.map +0 -1
  288. package/dist/src/prompts/phone.js +0 -398
  289. package/dist/src/prompts/phone.js.map +0 -1
  290. package/dist/src/prompts/quiz-select.js +0 -114
  291. package/dist/src/prompts/quiz-select.js.map +0 -1
  292. package/dist/src/prompts/quiz-text.js +0 -98
  293. package/dist/src/prompts/quiz-text.js.map +0 -1
  294. package/dist/src/prompts/range.js +0 -164
  295. package/dist/src/prompts/range.js.map +0 -1
  296. package/dist/src/prompts/rating.js +0 -83
  297. package/dist/src/prompts/rating.js.map +0 -1
  298. package/dist/src/prompts/regex.js +0 -145
  299. package/dist/src/prompts/regex.js.map +0 -1
  300. package/dist/src/prompts/region.js +0 -170
  301. package/dist/src/prompts/region.js.map +0 -1
  302. package/dist/src/prompts/schedule.js +0 -270
  303. package/dist/src/prompts/schedule.js.map +0 -1
  304. package/dist/src/prompts/scroll.js +0 -155
  305. package/dist/src/prompts/scroll.js.map +0 -1
  306. package/dist/src/prompts/seat.js +0 -164
  307. package/dist/src/prompts/seat.js.map +0 -1
  308. package/dist/src/prompts/select-range.js +0 -148
  309. package/dist/src/prompts/select-range.js.map +0 -1
  310. package/dist/src/prompts/select.js +0 -163
  311. package/dist/src/prompts/select.js.map +0 -1
  312. package/dist/src/prompts/semver.js +0 -43
  313. package/dist/src/prompts/semver.js.map +0 -1
  314. package/dist/src/prompts/shortcut.js +0 -133
  315. package/dist/src/prompts/shortcut.js.map +0 -1
  316. package/dist/src/prompts/slider.js +0 -69
  317. package/dist/src/prompts/slider.js.map +0 -1
  318. package/dist/src/prompts/slot.js +0 -117
  319. package/dist/src/prompts/slot.js.map +0 -1
  320. package/dist/src/prompts/snippet.js +0 -228
  321. package/dist/src/prompts/snippet.js.map +0 -1
  322. package/dist/src/prompts/sort-grid.js +0 -151
  323. package/dist/src/prompts/sort-grid.js.map +0 -1
  324. package/dist/src/prompts/sort.js +0 -166
  325. package/dist/src/prompts/sort.js.map +0 -1
  326. package/dist/src/prompts/spam.js +0 -80
  327. package/dist/src/prompts/spam.js.map +0 -1
  328. package/dist/src/prompts/spreadsheet.js +0 -240
  329. package/dist/src/prompts/spreadsheet.js.map +0 -1
  330. package/dist/src/prompts/table.js +0 -120
  331. package/dist/src/prompts/table.js.map +0 -1
  332. package/dist/src/prompts/text.js +0 -317
  333. package/dist/src/prompts/text.js.map +0 -1
  334. package/dist/src/prompts/time.js +0 -211
  335. package/dist/src/prompts/time.js.map +0 -1
  336. package/dist/src/prompts/toggle.js +0 -53
  337. package/dist/src/prompts/toggle.js.map +0 -1
  338. package/dist/src/prompts/transfer.js +0 -207
  339. package/dist/src/prompts/transfer.js.map +0 -1
  340. package/dist/src/prompts/tree-select.js +0 -270
  341. package/dist/src/prompts/tree-select.js.map +0 -1
  342. package/dist/src/prompts/tree.js +0 -233
  343. package/dist/src/prompts/tree.js.map +0 -1
  344. package/dist/src/prompts/wait.js +0 -79
  345. package/dist/src/prompts/wait.js.map +0 -1
  346. package/dist/src/spinner.js +0 -105
  347. package/dist/src/spinner.js.map +0 -1
  348. package/dist/src/symbols.js +0 -66
  349. package/dist/src/symbols.js.map +0 -1
  350. package/dist/src/tasks.js +0 -231
  351. package/dist/src/tasks.js.map +0 -1
  352. package/dist/src/theme.js +0 -29
  353. package/dist/src/theme.js.map +0 -1
  354. package/dist/src/types.js +0 -8
  355. package/dist/src/types.js.map +0 -1
  356. package/dist/src/utils.js +0 -480
  357. 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