mepcli 2.0.0-beta.2 → 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 (356) hide show
  1. package/dist/ansi.d.ts +36 -0
  2. package/dist/ansi.js +1 -0
  3. package/dist/base.d.ts +60 -0
  4. package/dist/base.js +1 -0
  5. package/dist/{src/core.js → core.d.ts} +175 -345
  6. package/dist/core.js +1 -0
  7. package/dist/data/countries.d.ts +2 -0
  8. package/dist/data/countries.js +1 -0
  9. package/dist/data/licenses.d.ts +2 -0
  10. package/dist/data/licenses.js +1 -0
  11. package/dist/highlight.d.ts +7 -0
  12. package/dist/highlight.js +1 -0
  13. package/dist/index.d.ts +48 -0
  14. package/dist/index.js +1 -0
  15. package/dist/input.d.ts +14 -0
  16. package/dist/input.js +1 -0
  17. package/dist/pipeline.d.ts +90 -0
  18. package/dist/pipeline.js +1 -0
  19. package/dist/prompts/autocomplete.d.ts +22 -0
  20. package/dist/prompts/autocomplete.js +1 -0
  21. package/dist/prompts/box.d.ts +21 -0
  22. package/dist/prompts/box.js +4 -0
  23. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  24. package/dist/prompts/breadcrumb-search.js +2 -0
  25. package/dist/prompts/breadcrumb.d.ts +32 -0
  26. package/dist/prompts/breadcrumb.js +3 -0
  27. package/dist/prompts/byte.d.ts +13 -0
  28. package/dist/prompts/byte.js +5 -0
  29. package/dist/prompts/calculator.d.ts +17 -0
  30. package/dist/prompts/calculator.js +3 -0
  31. package/dist/prompts/calendar.d.ts +33 -0
  32. package/dist/prompts/calendar.js +3 -0
  33. package/dist/prompts/checkbox.d.ts +13 -0
  34. package/dist/prompts/checkbox.js +2 -0
  35. package/dist/prompts/code.d.ts +19 -0
  36. package/dist/prompts/code.js +4 -0
  37. package/dist/prompts/color.d.ts +14 -0
  38. package/dist/prompts/color.js +10 -0
  39. package/dist/prompts/confirm.d.ts +8 -0
  40. package/dist/prompts/confirm.js +1 -0
  41. package/dist/prompts/connection-string.d.ts +18 -0
  42. package/dist/prompts/connection-string.js +1 -0
  43. package/dist/prompts/cron.d.ts +13 -0
  44. package/dist/prompts/cron.js +4 -0
  45. package/dist/prompts/curl-utils.d.ts +25 -0
  46. package/dist/prompts/curl-utils.js +1 -0
  47. package/dist/prompts/curl.d.ts +41 -0
  48. package/dist/prompts/curl.js +12 -0
  49. package/dist/prompts/data-inspector.d.ts +22 -0
  50. package/dist/prompts/data-inspector.js +5 -0
  51. package/dist/prompts/date.d.ts +12 -0
  52. package/dist/prompts/date.js +2 -0
  53. package/dist/prompts/dependency.d.ts +16 -0
  54. package/dist/prompts/dependency.js +3 -0
  55. package/dist/prompts/dial.d.ts +10 -0
  56. package/dist/prompts/dial.js +3 -0
  57. package/dist/prompts/diff.d.ts +10 -0
  58. package/dist/prompts/diff.js +10 -0
  59. package/dist/prompts/draw.d.ts +20 -0
  60. package/dist/prompts/draw.js +6 -0
  61. package/dist/prompts/editor.d.ts +14 -0
  62. package/dist/prompts/editor.js +2 -0
  63. package/dist/prompts/emoji.d.ts +18 -0
  64. package/dist/prompts/emoji.js +5 -0
  65. package/dist/prompts/exec.d.ts +17 -0
  66. package/dist/prompts/exec.js +1 -0
  67. package/dist/prompts/file.d.ts +21 -0
  68. package/dist/prompts/file.js +2 -0
  69. package/dist/prompts/form.d.ts +18 -0
  70. package/dist/prompts/form.js +1 -0
  71. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  72. package/dist/prompts/fuzzy-multi-column.js +2 -0
  73. package/dist/prompts/fuzzy.d.ts +12 -0
  74. package/dist/prompts/fuzzy.js +2 -0
  75. package/dist/prompts/gauge.d.ts +21 -0
  76. package/dist/prompts/gauge.js +4 -0
  77. package/dist/prompts/grid.d.ts +14 -0
  78. package/dist/prompts/grid.js +2 -0
  79. package/dist/prompts/heatmap.d.ts +13 -0
  80. package/dist/prompts/heatmap.js +2 -0
  81. package/dist/prompts/ip.d.ts +11 -0
  82. package/dist/prompts/ip.js +3 -0
  83. package/dist/prompts/kanban.d.ts +17 -0
  84. package/dist/prompts/kanban.js +4 -0
  85. package/dist/prompts/keypress.d.ts +7 -0
  86. package/dist/prompts/keypress.js +1 -0
  87. package/dist/prompts/license.d.ts +9 -0
  88. package/dist/prompts/license.js +13 -0
  89. package/dist/prompts/list.d.ts +9 -0
  90. package/dist/prompts/list.js +1 -0
  91. package/dist/prompts/map.d.ts +17 -0
  92. package/dist/prompts/map.js +5 -0
  93. package/dist/prompts/match.d.ts +19 -0
  94. package/dist/prompts/match.js +7 -0
  95. package/dist/prompts/miller.d.ts +15 -0
  96. package/dist/prompts/miller.js +2 -0
  97. package/dist/prompts/multi-column-select.d.ts +10 -0
  98. package/dist/prompts/multi-column-select.js +2 -0
  99. package/dist/prompts/multi-range.d.ts +9 -0
  100. package/dist/prompts/multi-range.js +3 -0
  101. package/dist/prompts/multi-select.d.ts +15 -0
  102. package/dist/prompts/multi-select.js +4 -0
  103. package/dist/prompts/number.d.ts +11 -0
  104. package/dist/prompts/number.js +2 -0
  105. package/dist/prompts/otp.d.ts +10 -0
  106. package/dist/prompts/otp.js +2 -0
  107. package/dist/prompts/pattern.d.ts +22 -0
  108. package/dist/prompts/pattern.js +4 -0
  109. package/dist/prompts/phone.d.ts +41 -0
  110. package/dist/prompts/phone.js +3 -0
  111. package/dist/prompts/quiz-select.d.ts +10 -0
  112. package/dist/prompts/quiz-select.js +7 -0
  113. package/dist/prompts/quiz-text.d.ts +11 -0
  114. package/dist/prompts/quiz-text.js +8 -0
  115. package/dist/prompts/range.d.ts +9 -0
  116. package/dist/prompts/range.js +1 -0
  117. package/dist/prompts/rating.d.ts +8 -0
  118. package/dist/prompts/rating.js +1 -0
  119. package/dist/prompts/regex.d.ts +13 -0
  120. package/dist/prompts/regex.js +5 -0
  121. package/dist/prompts/region.d.ts +11 -0
  122. package/dist/prompts/region.js +5 -0
  123. package/dist/prompts/schedule.d.ts +20 -0
  124. package/dist/prompts/schedule.js +5 -0
  125. package/dist/prompts/scroll.d.ts +13 -0
  126. package/dist/prompts/scroll.js +1 -0
  127. package/dist/prompts/seat.d.ts +17 -0
  128. package/dist/prompts/seat.js +5 -0
  129. package/dist/prompts/select-range.d.ts +8 -0
  130. package/dist/prompts/select-range.js +3 -0
  131. package/dist/prompts/select.d.ts +15 -0
  132. package/dist/prompts/select.js +2 -0
  133. package/dist/prompts/semver.d.ts +6 -0
  134. package/dist/prompts/semver.js +1 -0
  135. package/dist/prompts/shortcut.d.ts +9 -0
  136. package/dist/prompts/shortcut.js +1 -0
  137. package/dist/prompts/slider.d.ts +8 -0
  138. package/dist/prompts/slider.js +1 -0
  139. package/dist/prompts/slot.d.ts +16 -0
  140. package/dist/prompts/slot.js +8 -0
  141. package/dist/prompts/snippet.d.ts +19 -0
  142. package/dist/prompts/snippet.js +4 -0
  143. package/dist/prompts/sort-grid.d.ts +16 -0
  144. package/dist/prompts/sort-grid.js +2 -0
  145. package/dist/prompts/sort.d.ts +14 -0
  146. package/dist/prompts/sort.js +2 -0
  147. package/dist/prompts/spam.d.ts +17 -0
  148. package/dist/prompts/spam.js +2 -0
  149. package/dist/prompts/spreadsheet.d.ts +21 -0
  150. package/dist/prompts/spreadsheet.js +7 -0
  151. package/dist/prompts/table.d.ts +14 -0
  152. package/dist/prompts/table.js +3 -0
  153. package/dist/prompts/text.d.ts +17 -0
  154. package/dist/prompts/text.js +2 -0
  155. package/dist/prompts/time.d.ts +12 -0
  156. package/dist/prompts/time.js +2 -0
  157. package/dist/prompts/toggle.d.ts +8 -0
  158. package/dist/prompts/toggle.js +1 -0
  159. package/dist/prompts/transfer.d.ts +18 -0
  160. package/dist/prompts/transfer.js +5 -0
  161. package/dist/prompts/tree-select.d.ts +31 -0
  162. package/dist/prompts/tree-select.js +3 -0
  163. package/dist/prompts/tree.d.ts +20 -0
  164. package/dist/prompts/tree.js +3 -0
  165. package/dist/prompts/wait.d.ts +18 -0
  166. package/dist/prompts/wait.js +1 -0
  167. package/dist/spinner.d.ts +33 -0
  168. package/dist/spinner.js +3 -0
  169. package/dist/symbols.d.ts +33 -0
  170. package/dist/symbols.js +1 -0
  171. package/dist/tasks.d.ts +57 -0
  172. package/dist/tasks.js +1 -0
  173. package/dist/theme.d.ts +2 -0
  174. package/dist/theme.js +1 -0
  175. package/dist/types.d.ts +503 -0
  176. package/dist/types.js +1 -0
  177. package/dist/utils.d.ts +81 -0
  178. package/dist/utils.js +1 -0
  179. package/package.json +8 -9
  180. package/dist/src/ansi.js +0 -50
  181. package/dist/src/ansi.js.map +0 -1
  182. package/dist/src/base.js +0 -258
  183. package/dist/src/base.js.map +0 -1
  184. package/dist/src/core.js.map +0 -1
  185. package/dist/src/data/countries.js +0 -569
  186. package/dist/src/data/countries.js.map +0 -1
  187. package/dist/src/data/licenses.js +0 -480
  188. package/dist/src/data/licenses.js.map +0 -1
  189. package/dist/src/highlight.js +0 -185
  190. package/dist/src/highlight.js.map +0 -1
  191. package/dist/src/index.js +0 -66
  192. package/dist/src/index.js.map +0 -1
  193. package/dist/src/input.js +0 -158
  194. package/dist/src/input.js.map +0 -1
  195. package/dist/src/pipeline.js +0 -273
  196. package/dist/src/pipeline.js.map +0 -1
  197. package/dist/src/prompts/autocomplete.js +0 -171
  198. package/dist/src/prompts/autocomplete.js.map +0 -1
  199. package/dist/src/prompts/box.js +0 -225
  200. package/dist/src/prompts/box.js.map +0 -1
  201. package/dist/src/prompts/breadcrumb-search.js +0 -260
  202. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  203. package/dist/src/prompts/breadcrumb.js +0 -307
  204. package/dist/src/prompts/breadcrumb.js.map +0 -1
  205. package/dist/src/prompts/byte.js +0 -176
  206. package/dist/src/prompts/byte.js.map +0 -1
  207. package/dist/src/prompts/calculator.js +0 -243
  208. package/dist/src/prompts/calculator.js.map +0 -1
  209. package/dist/src/prompts/calendar.js +0 -430
  210. package/dist/src/prompts/calendar.js.map +0 -1
  211. package/dist/src/prompts/checkbox.js +0 -159
  212. package/dist/src/prompts/checkbox.js.map +0 -1
  213. package/dist/src/prompts/code.js +0 -271
  214. package/dist/src/prompts/code.js.map +0 -1
  215. package/dist/src/prompts/color.js +0 -165
  216. package/dist/src/prompts/color.js.map +0 -1
  217. package/dist/src/prompts/confirm.js +0 -55
  218. package/dist/src/prompts/confirm.js.map +0 -1
  219. package/dist/src/prompts/connection-string.js +0 -120
  220. package/dist/src/prompts/connection-string.js.map +0 -1
  221. package/dist/src/prompts/cron.js +0 -207
  222. package/dist/src/prompts/cron.js.map +0 -1
  223. package/dist/src/prompts/curl-utils.js +0 -71
  224. package/dist/src/prompts/curl-utils.js.map +0 -1
  225. package/dist/src/prompts/curl.js +0 -431
  226. package/dist/src/prompts/curl.js.map +0 -1
  227. package/dist/src/prompts/data-inspector.js +0 -261
  228. package/dist/src/prompts/data-inspector.js.map +0 -1
  229. package/dist/src/prompts/date.js +0 -185
  230. package/dist/src/prompts/date.js.map +0 -1
  231. package/dist/src/prompts/dependency.js +0 -283
  232. package/dist/src/prompts/dependency.js.map +0 -1
  233. package/dist/src/prompts/dial.js +0 -124
  234. package/dist/src/prompts/dial.js.map +0 -1
  235. package/dist/src/prompts/diff.js +0 -118
  236. package/dist/src/prompts/diff.js.map +0 -1
  237. package/dist/src/prompts/draw.js +0 -191
  238. package/dist/src/prompts/draw.js.map +0 -1
  239. package/dist/src/prompts/editor.js +0 -234
  240. package/dist/src/prompts/editor.js.map +0 -1
  241. package/dist/src/prompts/emoji.js +0 -226
  242. package/dist/src/prompts/emoji.js.map +0 -1
  243. package/dist/src/prompts/exec.js +0 -151
  244. package/dist/src/prompts/exec.js.map +0 -1
  245. package/dist/src/prompts/file.js +0 -217
  246. package/dist/src/prompts/file.js.map +0 -1
  247. package/dist/src/prompts/form.js +0 -241
  248. package/dist/src/prompts/form.js.map +0 -1
  249. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  250. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  251. package/dist/src/prompts/fuzzy.js +0 -147
  252. package/dist/src/prompts/fuzzy.js.map +0 -1
  253. package/dist/src/prompts/gauge.js +0 -137
  254. package/dist/src/prompts/gauge.js.map +0 -1
  255. package/dist/src/prompts/grid.js +0 -191
  256. package/dist/src/prompts/grid.js.map +0 -1
  257. package/dist/src/prompts/heatmap.js +0 -147
  258. package/dist/src/prompts/heatmap.js.map +0 -1
  259. package/dist/src/prompts/ip.js +0 -138
  260. package/dist/src/prompts/ip.js.map +0 -1
  261. package/dist/src/prompts/kanban.js +0 -233
  262. package/dist/src/prompts/kanban.js.map +0 -1
  263. package/dist/src/prompts/keypress.js +0 -54
  264. package/dist/src/prompts/keypress.js.map +0 -1
  265. package/dist/src/prompts/license.js +0 -144
  266. package/dist/src/prompts/license.js.map +0 -1
  267. package/dist/src/prompts/list.js +0 -124
  268. package/dist/src/prompts/list.js.map +0 -1
  269. package/dist/src/prompts/map.js +0 -262
  270. package/dist/src/prompts/map.js.map +0 -1
  271. package/dist/src/prompts/match.js +0 -271
  272. package/dist/src/prompts/match.js.map +0 -1
  273. package/dist/src/prompts/miller.js +0 -228
  274. package/dist/src/prompts/miller.js.map +0 -1
  275. package/dist/src/prompts/multi-column-select.js +0 -176
  276. package/dist/src/prompts/multi-column-select.js.map +0 -1
  277. package/dist/src/prompts/multi-range.js +0 -189
  278. package/dist/src/prompts/multi-range.js.map +0 -1
  279. package/dist/src/prompts/multi-select.js +0 -183
  280. package/dist/src/prompts/multi-select.js.map +0 -1
  281. package/dist/src/prompts/number.js +0 -166
  282. package/dist/src/prompts/number.js.map +0 -1
  283. package/dist/src/prompts/otp.js +0 -107
  284. package/dist/src/prompts/otp.js.map +0 -1
  285. package/dist/src/prompts/pattern.js +0 -252
  286. package/dist/src/prompts/pattern.js.map +0 -1
  287. package/dist/src/prompts/phone.js +0 -398
  288. package/dist/src/prompts/phone.js.map +0 -1
  289. package/dist/src/prompts/quiz-select.js +0 -114
  290. package/dist/src/prompts/quiz-select.js.map +0 -1
  291. package/dist/src/prompts/quiz-text.js +0 -98
  292. package/dist/src/prompts/quiz-text.js.map +0 -1
  293. package/dist/src/prompts/range.js +0 -164
  294. package/dist/src/prompts/range.js.map +0 -1
  295. package/dist/src/prompts/rating.js +0 -83
  296. package/dist/src/prompts/rating.js.map +0 -1
  297. package/dist/src/prompts/regex.js +0 -145
  298. package/dist/src/prompts/regex.js.map +0 -1
  299. package/dist/src/prompts/region.js +0 -170
  300. package/dist/src/prompts/region.js.map +0 -1
  301. package/dist/src/prompts/schedule.js +0 -270
  302. package/dist/src/prompts/schedule.js.map +0 -1
  303. package/dist/src/prompts/scroll.js +0 -155
  304. package/dist/src/prompts/scroll.js.map +0 -1
  305. package/dist/src/prompts/seat.js +0 -164
  306. package/dist/src/prompts/seat.js.map +0 -1
  307. package/dist/src/prompts/select-range.js +0 -148
  308. package/dist/src/prompts/select-range.js.map +0 -1
  309. package/dist/src/prompts/select.js +0 -163
  310. package/dist/src/prompts/select.js.map +0 -1
  311. package/dist/src/prompts/semver.js +0 -43
  312. package/dist/src/prompts/semver.js.map +0 -1
  313. package/dist/src/prompts/shortcut.js +0 -133
  314. package/dist/src/prompts/shortcut.js.map +0 -1
  315. package/dist/src/prompts/slider.js +0 -69
  316. package/dist/src/prompts/slider.js.map +0 -1
  317. package/dist/src/prompts/slot.js +0 -117
  318. package/dist/src/prompts/slot.js.map +0 -1
  319. package/dist/src/prompts/snippet.js +0 -228
  320. package/dist/src/prompts/snippet.js.map +0 -1
  321. package/dist/src/prompts/sort-grid.js +0 -151
  322. package/dist/src/prompts/sort-grid.js.map +0 -1
  323. package/dist/src/prompts/sort.js +0 -166
  324. package/dist/src/prompts/sort.js.map +0 -1
  325. package/dist/src/prompts/spam.js +0 -80
  326. package/dist/src/prompts/spam.js.map +0 -1
  327. package/dist/src/prompts/spreadsheet.js +0 -240
  328. package/dist/src/prompts/spreadsheet.js.map +0 -1
  329. package/dist/src/prompts/table.js +0 -120
  330. package/dist/src/prompts/table.js.map +0 -1
  331. package/dist/src/prompts/text.js +0 -317
  332. package/dist/src/prompts/text.js.map +0 -1
  333. package/dist/src/prompts/time.js +0 -211
  334. package/dist/src/prompts/time.js.map +0 -1
  335. package/dist/src/prompts/toggle.js +0 -53
  336. package/dist/src/prompts/toggle.js.map +0 -1
  337. package/dist/src/prompts/transfer.js +0 -207
  338. package/dist/src/prompts/transfer.js.map +0 -1
  339. package/dist/src/prompts/tree-select.js +0 -270
  340. package/dist/src/prompts/tree-select.js.map +0 -1
  341. package/dist/src/prompts/tree.js +0 -233
  342. package/dist/src/prompts/tree.js.map +0 -1
  343. package/dist/src/prompts/wait.js +0 -79
  344. package/dist/src/prompts/wait.js.map +0 -1
  345. package/dist/src/spinner.js +0 -105
  346. package/dist/src/spinner.js.map +0 -1
  347. package/dist/src/symbols.js +0 -66
  348. package/dist/src/symbols.js.map +0 -1
  349. package/dist/src/tasks.js +0 -231
  350. package/dist/src/tasks.js.map +0 -1
  351. package/dist/src/theme.js +0 -29
  352. package/dist/src/theme.js.map +0 -1
  353. package/dist/src/types.js +0 -8
  354. package/dist/src/types.js.map +0 -1
  355. package/dist/src/utils.js +0 -480
  356. package/dist/src/utils.js.map +0 -1
@@ -1,170 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "RegionPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return RegionPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- function _define_property(obj, key, value) {
15
- if (key in obj) {
16
- Object.defineProperty(obj, key, {
17
- value: value,
18
- enumerable: true,
19
- configurable: true,
20
- writable: true
21
- });
22
- } else {
23
- obj[key] = value;
24
- }
25
- return obj;
26
- }
27
- let RegionPrompt = class RegionPrompt extends _base.Prompt {
28
- render(_firstRender) {
29
- let output = '';
30
- // Title
31
- output += `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
32
- // Prepare Map Buffer
33
- const lines = this.options.mapArt.split('\n');
34
- const height = lines.length;
35
- const width = Math.max(...lines.map((l)=>l.length));
36
- // Overlay regions
37
- // We will build the output line by line.
38
- for(let y = 0; y < height; y++){
39
- let line = lines[y] || '';
40
- // Pad line if needed
41
- if (line.length < width) line += ' '.repeat(width - line.length);
42
- // Check for regions on this line
43
- const regionsOnLine = this.options.regions.filter((r)=>Math.round(r.y) === y);
44
- // Reconstruct line with overlays
45
- // This is naive string replacement; might break if overlaps
46
- const lineBuffer = line.split('');
47
- regionsOnLine.forEach((r)=>{
48
- const label = r.label || '•';
49
- // Draw label starting at r.x
50
- for(let i = 0; i < label.length; i++){
51
- const lx = Math.round(r.x) + i;
52
- if (lx < lineBuffer.length) {
53
- // We don't apply color here yet, just content
54
- lineBuffer[lx] = label[i];
55
- }
56
- }
57
- });
58
- // Now render the line with coloring
59
- // We need to know which ranges are regions
60
- let renderedLine = '';
61
- for(let x = 0; x < lineBuffer.length; x++){
62
- // Check if this x,y belongs to a region
63
- const activeRegion = this.options.regions.find((r)=>Math.round(r.y) === y && x >= Math.round(r.x) && x < Math.round(r.x) + (r.label || '•').length);
64
- if (activeRegion) {
65
- const isSelected = this.options.regions[this.cursorIndex] === activeRegion;
66
- if (isSelected) {
67
- renderedLine += `${_theme.theme.main}${_ansi.ANSI.REVERSE}${lineBuffer[x]}${_ansi.ANSI.RESET}`;
68
- } else {
69
- renderedLine += `${_theme.theme.success}${lineBuffer[x]}${_ansi.ANSI.RESET}`;
70
- }
71
- } else {
72
- renderedLine += `${_ansi.ANSI.DIM}${lineBuffer[x]}${_ansi.ANSI.RESET}`;
73
- }
74
- }
75
- output += ' ' + renderedLine + '\n';
76
- }
77
- // Region Description
78
- const currentRegion = this.options.regions[this.cursorIndex];
79
- if (currentRegion && currentRegion.description) {
80
- output += `\n${_theme.theme.main}❯ ${_ansi.ANSI.BOLD}${currentRegion.id}${_ansi.ANSI.RESET}: ${currentRegion.description}`;
81
- } else {
82
- output += `\n${_theme.theme.main}❯ ${_ansi.ANSI.BOLD}${currentRegion.id}${_ansi.ANSI.RESET}`;
83
- }
84
- output += `\n${_ansi.ANSI.DIM}(Arrows to navigate, Enter to select)${_ansi.ANSI.RESET}`;
85
- this.renderFrame(output);
86
- }
87
- handleInput(char, _key) {
88
- if (char === '\r' || char === '\n') {
89
- this.submit(this.options.regions[this.cursorIndex].id);
90
- return;
91
- }
92
- if (this.isUp(char)) this.navigate('up');
93
- else if (this.isDown(char)) this.navigate('down');
94
- else if (this.isLeft(char)) this.navigate('left');
95
- else if (this.isRight(char)) this.navigate('right');
96
- }
97
- navigate(direction) {
98
- const current = this.options.regions[this.cursorIndex];
99
- let bestCandidate = null;
100
- let bestScore = Infinity;
101
- this.options.regions.forEach((r, idx)=>{
102
- if (idx === this.cursorIndex) return;
103
- const dx = r.x - current.x;
104
- const dy = r.y - current.y;
105
- const distSq = dx * dx + dy * dy;
106
- let isValid = false;
107
- let anglePenalty = 0;
108
- // Simple direction check + Angle weighting
109
- // We want small distance and small angle deviation
110
- switch(direction){
111
- case 'up':
112
- if (dy < 0) {
113
- isValid = true;
114
- // ideal: dx=0. Penalty for dx.
115
- anglePenalty = Math.abs(dx) * 0.5;
116
- }
117
- break;
118
- case 'down':
119
- if (dy > 0) {
120
- isValid = true;
121
- anglePenalty = Math.abs(dx) * 0.5;
122
- }
123
- break;
124
- case 'left':
125
- if (dx < 0) {
126
- isValid = true;
127
- anglePenalty = Math.abs(dy) * 2.0; // Penalize Y deviation more for horiz movement
128
- }
129
- break;
130
- case 'right':
131
- if (dx > 0) {
132
- isValid = true;
133
- anglePenalty = Math.abs(dy) * 2.0;
134
- }
135
- break;
136
- }
137
- if (isValid) {
138
- const score = distSq + anglePenalty * anglePenalty * 5; // Heuristic
139
- if (score < bestScore) {
140
- bestScore = score;
141
- bestCandidate = r;
142
- }
143
- }
144
- });
145
- if (bestCandidate) {
146
- this.cursorIndex = this.options.regions.indexOf(bestCandidate);
147
- this.render(false);
148
- }
149
- }
150
- handleMouse(event) {
151
- // Cycle with scroll
152
- if (event.action === 'scroll') {
153
- if (event.scroll === 'up') {
154
- this.cursorIndex = (this.cursorIndex - 1 + this.options.regions.length) % this.options.regions.length;
155
- } else {
156
- this.cursorIndex = (this.cursorIndex + 1) % this.options.regions.length;
157
- }
158
- this.render(false);
159
- }
160
- }
161
- constructor(options){
162
- super(options), _define_property(this, "cursorIndex", 0), _define_property(this, "errorMsg", '');
163
- if (options.initial) {
164
- const idx = options.regions.findIndex((r)=>r.id === options.initial);
165
- if (idx !== -1) this.cursorIndex = idx;
166
- }
167
- }
168
- };
169
-
170
- //# sourceMappingURL=region.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/region.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { RegionOptions, MouseEvent, MapRegion } from '../types';\n\nexport class RegionPrompt extends Prompt<string, RegionOptions> {\n private cursorIndex: number = 0;\n private errorMsg: string = '';\n\n constructor(options: RegionOptions) {\n super(options);\n if (options.initial) {\n const idx = options.regions.findIndex(r => r.id === options.initial);\n if (idx !== -1) this.cursorIndex = idx;\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Title\n output += `${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Prepare Map Buffer\n const lines = this.options.mapArt.split('\\n');\n const height = lines.length;\n const width = Math.max(...lines.map(l => l.length));\n\n // Overlay regions\n // We will build the output line by line.\n\n for (let y = 0; y < height; y++) {\n let line = lines[y] || '';\n // Pad line if needed\n if (line.length < width) line += ' '.repeat(width - line.length);\n\n // Check for regions on this line\n const regionsOnLine = this.options.regions.filter(r => Math.round(r.y) === y);\n\n // Reconstruct line with overlays\n // This is naive string replacement; might break if overlaps\n const lineBuffer = line.split('');\n\n regionsOnLine.forEach(r => {\n const label = r.label || '•';\n\n // Draw label starting at r.x\n for (let i = 0; i < label.length; i++) {\n const lx = Math.round(r.x) + i;\n if (lx < lineBuffer.length) {\n // We don't apply color here yet, just content\n lineBuffer[lx] = label[i];\n }\n }\n });\n\n // Now render the line with coloring\n // We need to know which ranges are regions\n let renderedLine = '';\n for (let x = 0; x < lineBuffer.length; x++) {\n // Check if this x,y belongs to a region\n const activeRegion = this.options.regions.find(r =>\n Math.round(r.y) === y &&\n x >= Math.round(r.x) &&\n x < Math.round(r.x) + (r.label || '•').length\n );\n\n if (activeRegion) {\n const isSelected = this.options.regions[this.cursorIndex] === activeRegion;\n if (isSelected) {\n renderedLine += `${theme.main}${ANSI.REVERSE}${lineBuffer[x]}${ANSI.RESET}`;\n } else {\n renderedLine += `${theme.success}${lineBuffer[x]}${ANSI.RESET}`;\n }\n } else {\n renderedLine += `${ANSI.DIM}${lineBuffer[x]}${ANSI.RESET}`;\n }\n }\n output += ' ' + renderedLine + '\\n';\n }\n\n // Region Description\n const currentRegion = this.options.regions[this.cursorIndex];\n if (currentRegion && currentRegion.description) {\n output += `\\n${theme.main}❯ ${ANSI.BOLD}${currentRegion.id}${ANSI.RESET}: ${currentRegion.description}`;\n } else {\n output += `\\n${theme.main}❯ ${ANSI.BOLD}${currentRegion.id}${ANSI.RESET}`;\n }\n\n output += `\\n${ANSI.DIM}(Arrows to navigate, Enter to select)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (char === '\\r' || char === '\\n') {\n this.submit(this.options.regions[this.cursorIndex].id);\n return;\n }\n\n if (this.isUp(char)) this.navigate('up');\n else if (this.isDown(char)) this.navigate('down');\n else if (this.isLeft(char)) this.navigate('left');\n else if (this.isRight(char)) this.navigate('right');\n }\n\n private navigate(direction: 'up' | 'down' | 'left' | 'right') {\n const current = this.options.regions[this.cursorIndex];\n let bestCandidate: MapRegion | null = null;\n let bestScore = Infinity;\n\n this.options.regions.forEach((r, idx) => {\n if (idx === this.cursorIndex) return;\n\n const dx = r.x - current.x;\n const dy = r.y - current.y;\n const distSq = dx * dx + dy * dy;\n\n let isValid = false;\n let anglePenalty = 0;\n\n // Simple direction check + Angle weighting\n // We want small distance and small angle deviation\n switch (direction) {\n case 'up':\n if (dy < 0) {\n isValid = true;\n // ideal: dx=0. Penalty for dx.\n anglePenalty = Math.abs(dx) * 0.5;\n }\n break;\n case 'down':\n if (dy > 0) {\n isValid = true;\n anglePenalty = Math.abs(dx) * 0.5;\n }\n break;\n case 'left':\n if (dx < 0) {\n isValid = true;\n anglePenalty = Math.abs(dy) * 2.0; // Penalize Y deviation more for horiz movement\n }\n break;\n case 'right':\n if (dx > 0) {\n isValid = true;\n anglePenalty = Math.abs(dy) * 2.0;\n }\n break;\n }\n\n if (isValid) {\n const score = distSq + (anglePenalty * anglePenalty * 5); // Heuristic\n if (score < bestScore) {\n bestScore = score;\n bestCandidate = r;\n }\n }\n });\n\n if (bestCandidate) {\n this.cursorIndex = this.options.regions.indexOf(bestCandidate);\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n // Cycle with scroll\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.cursorIndex = (this.cursorIndex - 1 + this.options.regions.length) % this.options.regions.length;\n } else {\n this.cursorIndex = (this.cursorIndex + 1) % this.options.regions.length;\n }\n this.render(false);\n }\n }\n}\n"],"names":["RegionPrompt","Prompt","render","_firstRender","output","theme","title","options","message","ANSI","RESET","lines","mapArt","split","height","length","width","Math","max","map","l","y","line","repeat","regionsOnLine","regions","filter","r","round","lineBuffer","forEach","label","i","lx","x","renderedLine","activeRegion","find","isSelected","cursorIndex","main","REVERSE","success","DIM","currentRegion","description","BOLD","id","renderFrame","handleInput","char","_key","submit","isUp","navigate","isDown","isLeft","isRight","direction","current","bestCandidate","bestScore","Infinity","idx","dx","dy","distSq","isValid","anglePenalty","abs","score","indexOf","handleMouse","event","action","scroll","errorMsg","initial","findIndex"],"mappings":"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"}
@@ -1,270 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SchedulePrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return SchedulePrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _utils = require("../utils");
15
- function _define_property(obj, key, value) {
16
- if (key in obj) {
17
- Object.defineProperty(obj, key, {
18
- value: value,
19
- enumerable: true,
20
- configurable: true,
21
- writable: true
22
- });
23
- } else {
24
- obj[key] = value;
25
- }
26
- return obj;
27
- }
28
- let SchedulePrompt = class SchedulePrompt extends _base.Prompt {
29
- get maxNameWidth() {
30
- return Math.max(...this.tasks.map((t)=>(0, _utils.stringWidth)(t.name))) + 2;
31
- }
32
- render(_firstRender) {
33
- // Dynamic Layout
34
- const termWidth = this.stdout.columns || 80;
35
- this.nameColWidth = Math.min(Math.max(this.maxNameWidth, 20), Math.floor(termWidth * 0.3));
36
- const timelineWidth = termWidth - this.nameColWidth - 4; // Borders/Padding
37
- let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
38
- // 1. Header (Timeline Axis)
39
- // Simple tick marks every 10 chars
40
- const headerPadding = ' '.repeat(this.nameColWidth + 2);
41
- let headerLine = '';
42
- for(let i = 0; i < timelineWidth; i += 10){
43
- const timeAtTick = new Date(this.viewStartDate + i * this.msPerChar);
44
- // Format: MM/DD or HH:mm depending on zoom
45
- const tickLabel = this.formatDateCompact(timeAtTick);
46
- // Ensure we don't overflow
47
- if (i + tickLabel.length < timelineWidth) {
48
- // Pad until i
49
- const currentLen = (0, _utils.stringWidth)(headerLine);
50
- const spacesNeeded = i - currentLen;
51
- if (spacesNeeded > 0) {
52
- headerLine += ' '.repeat(spacesNeeded) + tickLabel;
53
- }
54
- }
55
- }
56
- output += `${headerPadding}${_ansi.ANSI.FG_GRAY}${headerLine}${_ansi.ANSI.RESET}\n`;
57
- // 2. Vertical Scrolling Logic
58
- if (this.cursor < this.scrollTop) {
59
- this.scrollTop = this.cursor;
60
- } else if (this.cursor >= this.scrollTop + this.pageSize) {
61
- this.scrollTop = this.cursor - this.pageSize + 1;
62
- }
63
- const visibleTasks = this.tasks.slice(this.scrollTop, this.scrollTop + this.pageSize);
64
- // 3. Render Rows
65
- visibleTasks.forEach((task, index)=>{
66
- const actualIndex = this.scrollTop + index;
67
- const isSelected = actualIndex === this.cursor;
68
- // Name Column
69
- let nameStr = task.name;
70
- if ((0, _utils.stringWidth)(nameStr) > this.nameColWidth) {
71
- nameStr = nameStr.slice(0, this.nameColWidth - 3) + '...';
72
- }
73
- const paddedName = nameStr.padEnd(this.nameColWidth);
74
- const prefix = isSelected ? `${_theme.theme.main}${_ansi.ANSI.BOLD}> ` : ' ';
75
- const nameColor = isSelected ? _theme.theme.main : '';
76
- const reset = _ansi.ANSI.RESET;
77
- // Timeline Bar
78
- // Calculate Start/End in chars relative to viewStartDate
79
- const startOffset = task.start.getTime() - this.viewStartDate;
80
- const endOffset = task.end.getTime() - this.viewStartDate;
81
- const startCol = Math.floor(startOffset / this.msPerChar);
82
- const endCol = Math.ceil(endOffset / this.msPerChar);
83
- let timelineStr = '';
84
- // Render the bar within the timelineWidth
85
- // 0........timelineWidth
86
- // Clipping
87
- const barStart = Math.max(0, startCol);
88
- const barEnd = Math.min(timelineWidth, endCol);
89
- if (barStart < timelineWidth && barEnd > 0) {
90
- const preSpace = ' '.repeat(barStart);
91
- const barLen = Math.max(1, barEnd - barStart);
92
- const barChar = isSelected ? '█' : '━';
93
- const barColor = isSelected ? _theme.theme.main : _ansi.ANSI.FG_GRAY;
94
- // Metadata hints
95
- const durationLabel = isSelected ? ` ${this.formatDuration(task.end.getTime() - task.start.getTime())}` : '';
96
- timelineStr = preSpace + barColor + barChar.repeat(barLen) + reset + durationLabel;
97
- } else if (barEnd <= 0) {
98
- timelineStr = _ansi.ANSI.FG_GRAY + '<' + reset;
99
- } else {
100
- timelineStr = _ansi.ANSI.FG_GRAY + '>' + reset;
101
- }
102
- output += `${prefix}${nameColor}${paddedName}${reset} │${timelineStr}\n`;
103
- });
104
- // Footer Help
105
- output += `\n${_theme.theme.muted}(Arrows/Scroll: Move Task, Shift+Arrows: Resize, Ctrl+Scroll/PgUp/Dn: Scroll View)${_ansi.ANSI.RESET}`;
106
- this.renderFrame(output);
107
- }
108
- formatDateCompact(d) {
109
- // Heuristic based on zoom level (msPerChar)
110
- // If 1 char > 1 day, show Month/Year
111
- // If 1 char > 1 hour, show Date
112
- // Else show Time
113
- const msPerDay = 86400000;
114
- if (this.msPerChar * 10 > msPerDay * 30) {
115
- return `${d.getMonth() + 1}/${d.getFullYear()}`;
116
- }
117
- if (this.msPerChar * 10 > msPerDay) {
118
- return `${d.getMonth() + 1}/${d.getDate()}`;
119
- }
120
- return `${d.getHours()}:${d.getMinutes().toString().padStart(2, '0')}`;
121
- }
122
- formatDuration(ms) {
123
- const h = Math.floor(ms / 3600000);
124
- const d = Math.floor(h / 24);
125
- if (d > 0) return `${d}d ${h % 24}h`;
126
- return `${h}h`;
127
- }
128
- handleInput(char, key) {
129
- const task = this.tasks[this.cursor];
130
- const step = Math.max(1, this.msPerChar); // Move by 1 char equivalent
131
- // Tab Handling
132
- if (char === '\t') {
133
- this.cursor = (this.cursor + 1) % this.tasks.length;
134
- this.render(false);
135
- return;
136
- }
137
- if (char === '\u001b[Z') {
138
- this.cursor = (this.cursor - 1 + this.tasks.length) % this.tasks.length;
139
- this.render(false);
140
- return;
141
- }
142
- if (this.isUp(char)) {
143
- this.cursor = (this.cursor - 1 + this.tasks.length) % this.tasks.length;
144
- this.render(false);
145
- return;
146
- }
147
- if (this.isDown(char)) {
148
- this.cursor = (this.cursor + 1) % this.tasks.length;
149
- this.render(false);
150
- return;
151
- }
152
- // PageUp/Down: Horizontal Scroll
153
- if (key.toString() === '\x1b[5~') {
154
- this.scrollView(-10);
155
- this.render(false);
156
- return;
157
- }
158
- if (key.toString() === '\x1b[6~') {
159
- this.scrollView(10);
160
- this.render(false);
161
- return;
162
- }
163
- // Vim keys for movement (h/l) - Alternative to arrows
164
- if (char === 'h') {
165
- task.start = new Date(task.start.getTime() - step);
166
- task.end = new Date(task.end.getTime() - step);
167
- this.render(false);
168
- return;
169
- }
170
- if (char === 'l') {
171
- task.start = new Date(task.start.getTime() + step);
172
- task.end = new Date(task.end.getTime() + step);
173
- this.render(false);
174
- return;
175
- }
176
- // Shift + Arrows (Resize)
177
- // Note: key sequence for Shift+Arrow depends on terminal, often \x1b[1;2C or similar
178
- // We will try standard detection, otherwise rely on fallback or just standard arrow = move
179
- const isShift = key.includes(';2'); // Common modifier for Shift
180
- if (this.isLeft(char)) {
181
- if (isShift) {
182
- // Resize: decrease end
183
- const newEnd = task.end.getTime() - step;
184
- if (newEnd > task.start.getTime()) {
185
- task.end = new Date(newEnd);
186
- }
187
- } else {
188
- // Move: decrease start and end
189
- task.start = new Date(task.start.getTime() - step);
190
- task.end = new Date(task.end.getTime() - step);
191
- }
192
- this.render(false);
193
- return;
194
- }
195
- if (this.isRight(char)) {
196
- if (isShift) {
197
- // Resize: increase end
198
- task.end = new Date(task.end.getTime() + step);
199
- } else {
200
- // Move: increase start and end
201
- task.start = new Date(task.start.getTime() + step);
202
- task.end = new Date(task.end.getTime() + step);
203
- }
204
- this.render(false);
205
- return;
206
- }
207
- if (char === '\r' || char === '\n') {
208
- this.submit(this.tasks);
209
- }
210
- }
211
- handleMouse(event) {
212
- if (event.action === 'scroll') {
213
- const isCtrl = event.ctrl;
214
- if (isCtrl) {
215
- // Scroll View
216
- if (event.scroll === 'up') {
217
- this.scrollView(-5);
218
- } else if (event.scroll === 'down') {
219
- this.scrollView(5);
220
- }
221
- } else {
222
- // Move Task
223
- const task = this.tasks[this.cursor];
224
- const step = Math.max(1, this.msPerChar);
225
- if (event.scroll === 'up') {
226
- task.start = new Date(task.start.getTime() - step);
227
- task.end = new Date(task.end.getTime() - step);
228
- } else if (event.scroll === 'down') {
229
- task.start = new Date(task.start.getTime() + step);
230
- task.end = new Date(task.end.getTime() + step);
231
- }
232
- }
233
- this.render(false);
234
- }
235
- }
236
- scrollView(chars) {
237
- let newStart = this.viewStartDate + chars * this.msPerChar;
238
- // Clamp if fixed start is provided to prevent scrolling before the start date
239
- if (this.minViewDate !== undefined && newStart < this.minViewDate) {
240
- newStart = this.minViewDate;
241
- }
242
- this.viewStartDate = newStart;
243
- }
244
- constructor(options){
245
- super(options), _define_property(this, "cursor", 0), _define_property(this, "tasks", void 0), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 10), // Viewport State
246
- _define_property(this, "viewStartDate", void 0), _define_property(this, "msPerChar", void 0 // Zoom level
247
- ), _define_property(this, "minViewDate", void 0), // Layout
248
- _define_property(this, "nameColWidth", 20);
249
- // Deep clone to avoid mutating original data before submission
250
- this.tasks = options.data.map((t)=>({
251
- ...t,
252
- start: new Date(t.start),
253
- end: new Date(t.end)
254
- }));
255
- // Initial Calculations
256
- const minTaskDate = Math.min(...this.tasks.map((t)=>t.start.getTime()));
257
- const maxTaskDate = Math.max(...this.tasks.map((t)=>t.end.getTime()));
258
- const opts = options;
259
- const minDate = opts.startDate ? opts.startDate.getTime() : minTaskDate;
260
- const maxDate = opts.endDate ? opts.endDate.getTime() : maxTaskDate;
261
- if (opts.startDate) this.minViewDate = minDate;
262
- // Default Zoom: Fit the whole range into ~60 chars
263
- const range = maxDate - minDate || 86400000; // default 1 day if 0
264
- this.msPerChar = range / 60;
265
- // Start view slightly before the earliest task
266
- this.viewStartDate = opts.startDate ? minDate : minDate - this.msPerChar * 5;
267
- }
268
- };
269
-
270
- //# sourceMappingURL=schedule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/schedule.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { ScheduleOptions, ScheduleTask, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class SchedulePrompt extends Prompt<ScheduleTask[], ScheduleOptions> {\n private cursor: number = 0;\n private tasks: ScheduleTask[];\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n // Viewport State\n private viewStartDate: number;\n private msPerChar: number; // Zoom level\n private minViewDate?: number;\n\n // Layout\n private nameColWidth: number = 20;\n\n constructor(options: ScheduleOptions) {\n super(options);\n // Deep clone to avoid mutating original data before submission\n this.tasks = options.data.map(t => ({\n ...t,\n start: new Date(t.start),\n end: new Date(t.end)\n }));\n\n // Initial Calculations\n const minTaskDate = Math.min(...this.tasks.map(t => t.start.getTime()));\n const maxTaskDate = Math.max(...this.tasks.map(t => t.end.getTime()));\n\n const opts = options as (ScheduleOptions & { startDate?: Date, endDate?: Date });\n const minDate = opts.startDate ? opts.startDate.getTime() : minTaskDate;\n const maxDate = opts.endDate ? opts.endDate.getTime() : maxTaskDate;\n\n if (opts.startDate) this.minViewDate = minDate;\n\n // Default Zoom: Fit the whole range into ~60 chars\n const range = maxDate - minDate || 86400000; // default 1 day if 0\n this.msPerChar = range / 60;\n\n // Start view slightly before the earliest task\n this.viewStartDate = opts.startDate\n ? minDate\n : minDate - (this.msPerChar * 5);\n }\n\n private get maxNameWidth(): number {\n return Math.max(...this.tasks.map(t => stringWidth(t.name))) + 2;\n }\n\n protected render(_firstRender: boolean) {\n // Dynamic Layout\n const termWidth = this.stdout.columns || 80;\n this.nameColWidth = Math.min(Math.max(this.maxNameWidth, 20), Math.floor(termWidth * 0.3));\n const timelineWidth = termWidth - this.nameColWidth - 4; // Borders/Padding\n\n let output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // 1. Header (Timeline Axis)\n // Simple tick marks every 10 chars\n const headerPadding = ' '.repeat(this.nameColWidth + 2);\n let headerLine = '';\n for (let i = 0; i < timelineWidth; i += 10) {\n const timeAtTick = new Date(this.viewStartDate + (i * this.msPerChar));\n // Format: MM/DD or HH:mm depending on zoom\n const tickLabel = this.formatDateCompact(timeAtTick);\n // Ensure we don't overflow\n if (i + tickLabel.length < timelineWidth) {\n // Pad until i\n const currentLen = stringWidth(headerLine);\n const spacesNeeded = i - currentLen;\n if (spacesNeeded > 0) {\n headerLine += ' '.repeat(spacesNeeded) + tickLabel;\n }\n }\n }\n output += `${headerPadding}${ANSI.FG_GRAY}${headerLine}${ANSI.RESET}\\n`;\n\n // 2. Vertical Scrolling Logic\n if (this.cursor < this.scrollTop) {\n this.scrollTop = this.cursor;\n } else if (this.cursor >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.cursor - this.pageSize + 1;\n }\n\n const visibleTasks = this.tasks.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n // 3. Render Rows\n visibleTasks.forEach((task, index) => {\n const actualIndex = this.scrollTop + index;\n const isSelected = actualIndex === this.cursor;\n\n // Name Column\n let nameStr = task.name;\n if (stringWidth(nameStr) > this.nameColWidth) {\n nameStr = nameStr.slice(0, this.nameColWidth - 3) + '...';\n }\n const paddedName = nameStr.padEnd(this.nameColWidth);\n\n const prefix = isSelected ? `${theme.main}${ANSI.BOLD}> ` : ' ';\n const nameColor = isSelected ? theme.main : '';\n const reset = ANSI.RESET;\n\n // Timeline Bar\n // Calculate Start/End in chars relative to viewStartDate\n const startOffset = task.start.getTime() - this.viewStartDate;\n const endOffset = task.end.getTime() - this.viewStartDate;\n\n const startCol = Math.floor(startOffset / this.msPerChar);\n const endCol = Math.ceil(endOffset / this.msPerChar);\n\n let timelineStr = '';\n\n // Render the bar within the timelineWidth\n // 0........timelineWidth\n\n // Clipping\n const barStart = Math.max(0, startCol);\n const barEnd = Math.min(timelineWidth, endCol);\n\n if (barStart < timelineWidth && barEnd > 0) {\n const preSpace = ' '.repeat(barStart);\n const barLen = Math.max(1, barEnd - barStart);\n const barChar = isSelected ? '█' : '━';\n const barColor = isSelected ? theme.main : ANSI.FG_GRAY;\n\n // Metadata hints\n const durationLabel = isSelected ? ` ${this.formatDuration(task.end.getTime() - task.start.getTime())}` : '';\n\n timelineStr = preSpace + barColor + barChar.repeat(barLen) + reset + durationLabel;\n } else if (barEnd <= 0) {\n timelineStr = ANSI.FG_GRAY + '<' + reset;\n } else {\n timelineStr = ANSI.FG_GRAY + '>' + reset;\n }\n\n output += `${prefix}${nameColor}${paddedName}${reset} │${timelineStr}\\n`;\n });\n\n // Footer Help\n output += `\\n${theme.muted}(Arrows/Scroll: Move Task, Shift+Arrows: Resize, Ctrl+Scroll/PgUp/Dn: Scroll View)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n private formatDateCompact(d: Date): string {\n // Heuristic based on zoom level (msPerChar)\n // If 1 char > 1 day, show Month/Year\n // If 1 char > 1 hour, show Date\n // Else show Time\n const msPerDay = 86400000;\n\n if (this.msPerChar * 10 > msPerDay * 30) { // Very zoomed out\n return `${d.getMonth() + 1}/${d.getFullYear()}`;\n }\n if (this.msPerChar * 10 > msPerDay) {\n return `${d.getMonth() + 1}/${d.getDate()}`;\n }\n return `${d.getHours()}:${d.getMinutes().toString().padStart(2, '0')}`;\n }\n\n private formatDuration(ms: number): string {\n const h = Math.floor(ms / 3600000);\n const d = Math.floor(h / 24);\n if (d > 0) return `${d}d ${h % 24}h`;\n return `${h}h`;\n }\n\n protected handleInput(char: string, key: Buffer) {\n const task = this.tasks[this.cursor];\n const step = Math.max(1, this.msPerChar); // Move by 1 char equivalent\n\n // Tab Handling\n if (char === '\\t') {\n this.cursor = (this.cursor + 1) % this.tasks.length;\n this.render(false);\n return;\n }\n if (char === '\\u001b[Z') { // Shift+Tab\n this.cursor = (this.cursor - 1 + this.tasks.length) % this.tasks.length;\n this.render(false);\n return;\n }\n\n if (this.isUp(char)) {\n this.cursor = (this.cursor - 1 + this.tasks.length) % this.tasks.length;\n this.render(false);\n return;\n }\n if (this.isDown(char)) {\n this.cursor = (this.cursor + 1) % this.tasks.length;\n this.render(false);\n return;\n }\n\n // PageUp/Down: Horizontal Scroll\n if (key.toString() === '\\x1b[5~') { // PageUp\n this.scrollView(-10);\n this.render(false);\n return;\n }\n if (key.toString() === '\\x1b[6~') { // PageDown\n this.scrollView(10);\n this.render(false);\n return;\n }\n\n // Vim keys for movement (h/l) - Alternative to arrows\n if (char === 'h') {\n task.start = new Date(task.start.getTime() - step);\n task.end = new Date(task.end.getTime() - step);\n this.render(false);\n return;\n }\n if (char === 'l') {\n task.start = new Date(task.start.getTime() + step);\n task.end = new Date(task.end.getTime() + step);\n this.render(false);\n return;\n }\n\n // Shift + Arrows (Resize)\n // Note: key sequence for Shift+Arrow depends on terminal, often \\x1b[1;2C or similar\n // We will try standard detection, otherwise rely on fallback or just standard arrow = move\n const isShift = key.includes(';2'); // Common modifier for Shift\n\n if (this.isLeft(char)) {\n if (isShift) {\n // Resize: decrease end\n const newEnd = task.end.getTime() - step;\n if (newEnd > task.start.getTime()) {\n task.end = new Date(newEnd);\n }\n } else {\n // Move: decrease start and end\n task.start = new Date(task.start.getTime() - step);\n task.end = new Date(task.end.getTime() - step);\n }\n this.render(false);\n return;\n }\n\n if (this.isRight(char)) {\n if (isShift) {\n // Resize: increase end\n task.end = new Date(task.end.getTime() + step);\n } else {\n // Move: increase start and end\n task.start = new Date(task.start.getTime() + step);\n task.end = new Date(task.end.getTime() + step);\n }\n this.render(false);\n return;\n }\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.tasks);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n const isCtrl = (event as any).ctrl;\n\n if (isCtrl) {\n // Scroll View\n if (event.scroll === 'up') {\n this.scrollView(-5);\n } else if (event.scroll === 'down') {\n this.scrollView(5);\n }\n } else {\n // Move Task\n const task = this.tasks[this.cursor];\n const step = Math.max(1, this.msPerChar);\n\n if (event.scroll === 'up') {\n task.start = new Date(task.start.getTime() - step);\n task.end = new Date(task.end.getTime() - step);\n } else if (event.scroll === 'down') {\n task.start = new Date(task.start.getTime() + step);\n task.end = new Date(task.end.getTime() + step);\n }\n }\n this.render(false);\n }\n }\n\n private scrollView(chars: number) {\n let newStart = this.viewStartDate + (chars * this.msPerChar);\n\n // Clamp if fixed start is provided to prevent scrolling before the start date\n if (this.minViewDate !== undefined && newStart < this.minViewDate) {\n newStart = this.minViewDate;\n }\n\n this.viewStartDate = newStart;\n }\n}\n"],"names":["SchedulePrompt","Prompt","maxNameWidth","Math","max","tasks","map","t","stringWidth","name","render","_firstRender","termWidth","stdout","columns","nameColWidth","min","floor","timelineWidth","output","theme","success","ANSI","RESET","BOLD","title","options","message","headerPadding","repeat","headerLine","i","timeAtTick","Date","viewStartDate","msPerChar","tickLabel","formatDateCompact","length","currentLen","spacesNeeded","FG_GRAY","cursor","scrollTop","pageSize","visibleTasks","slice","forEach","task","index","actualIndex","isSelected","nameStr","paddedName","padEnd","prefix","main","nameColor","reset","startOffset","start","getTime","endOffset","end","startCol","endCol","ceil","timelineStr","barStart","barEnd","preSpace","barLen","barChar","barColor","durationLabel","formatDuration","muted","renderFrame","d","msPerDay","getMonth","getFullYear","getDate","getHours","getMinutes","toString","padStart","ms","h","handleInput","char","key","step","isUp","isDown","scrollView","isShift","includes","isLeft","newEnd","isRight","submit","handleMouse","event","action","isCtrl","ctrl","scroll","chars","newStart","minViewDate","undefined","data","minTaskDate","maxTaskDate","opts","minDate","startDate","maxDate","endDate","range"],"mappings":"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"}