mepcli 1.3.2 → 2.0.0-beta.1

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