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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +20 -0
  3. package/dist/ansi.d.ts +36 -0
  4. package/dist/ansi.js +1 -0
  5. package/dist/base.d.ts +61 -0
  6. package/dist/base.js +1 -0
  7. package/dist/{src/core.js → core.d.ts} +181 -345
  8. package/dist/core.js +1 -0
  9. package/dist/data/countries.d.ts +2 -0
  10. package/dist/data/countries.js +1 -0
  11. package/dist/data/licenses.d.ts +2 -0
  12. package/dist/data/licenses.js +1 -0
  13. package/dist/highlight.d.ts +7 -0
  14. package/dist/highlight.js +1 -0
  15. package/dist/index.d.ts +52 -0
  16. package/dist/index.js +1 -0
  17. package/dist/input.d.ts +14 -0
  18. package/dist/input.js +1 -0
  19. package/dist/pipeline.d.ts +90 -0
  20. package/dist/pipeline.js +1 -0
  21. package/dist/prompts/autocomplete.d.ts +22 -0
  22. package/dist/prompts/autocomplete.js +1 -0
  23. package/dist/prompts/box.d.ts +21 -0
  24. package/dist/prompts/box.js +4 -0
  25. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  26. package/dist/prompts/breadcrumb-search.js +2 -0
  27. package/dist/prompts/breadcrumb.d.ts +32 -0
  28. package/dist/prompts/breadcrumb.js +3 -0
  29. package/dist/prompts/byte.d.ts +13 -0
  30. package/dist/prompts/byte.js +5 -0
  31. package/dist/prompts/calculator.d.ts +17 -0
  32. package/dist/prompts/calculator.js +3 -0
  33. package/dist/prompts/calendar.d.ts +33 -0
  34. package/dist/prompts/calendar.js +3 -0
  35. package/dist/prompts/checkbox.d.ts +13 -0
  36. package/dist/prompts/checkbox.js +2 -0
  37. package/dist/prompts/code.d.ts +19 -0
  38. package/dist/prompts/code.js +4 -0
  39. package/dist/prompts/color.d.ts +14 -0
  40. package/dist/prompts/color.js +10 -0
  41. package/dist/prompts/confirm.d.ts +8 -0
  42. package/dist/prompts/confirm.js +1 -0
  43. package/dist/prompts/connection-string.d.ts +18 -0
  44. package/dist/prompts/connection-string.js +1 -0
  45. package/dist/prompts/cron.d.ts +13 -0
  46. package/dist/prompts/cron.js +4 -0
  47. package/dist/prompts/curl-utils.d.ts +25 -0
  48. package/dist/prompts/curl-utils.js +1 -0
  49. package/dist/prompts/curl.d.ts +41 -0
  50. package/dist/prompts/curl.js +12 -0
  51. package/dist/prompts/data-inspector.d.ts +22 -0
  52. package/dist/prompts/data-inspector.js +5 -0
  53. package/dist/prompts/date.d.ts +12 -0
  54. package/dist/prompts/date.js +2 -0
  55. package/dist/prompts/dependency.d.ts +16 -0
  56. package/dist/prompts/dependency.js +3 -0
  57. package/dist/prompts/dial.d.ts +10 -0
  58. package/dist/prompts/dial.js +3 -0
  59. package/dist/prompts/diff.d.ts +10 -0
  60. package/dist/prompts/diff.js +10 -0
  61. package/dist/prompts/draw.d.ts +20 -0
  62. package/dist/prompts/draw.js +6 -0
  63. package/dist/prompts/editor.d.ts +14 -0
  64. package/dist/prompts/editor.js +2 -0
  65. package/dist/prompts/emoji.d.ts +18 -0
  66. package/dist/prompts/emoji.js +5 -0
  67. package/dist/prompts/exec.d.ts +17 -0
  68. package/dist/prompts/exec.js +1 -0
  69. package/dist/prompts/file.d.ts +21 -0
  70. package/dist/prompts/file.js +2 -0
  71. package/dist/prompts/form.d.ts +18 -0
  72. package/dist/prompts/form.js +1 -0
  73. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  74. package/dist/prompts/fuzzy-multi-column.js +2 -0
  75. package/dist/prompts/fuzzy.d.ts +12 -0
  76. package/dist/prompts/fuzzy.js +2 -0
  77. package/dist/prompts/gauge.d.ts +21 -0
  78. package/dist/prompts/gauge.js +4 -0
  79. package/dist/prompts/grid.d.ts +14 -0
  80. package/dist/prompts/grid.js +2 -0
  81. package/dist/prompts/heatmap.d.ts +13 -0
  82. package/dist/prompts/heatmap.js +2 -0
  83. package/dist/prompts/ip.d.ts +11 -0
  84. package/dist/prompts/ip.js +3 -0
  85. package/dist/prompts/kanban.d.ts +17 -0
  86. package/dist/prompts/kanban.js +4 -0
  87. package/dist/prompts/keypress.d.ts +7 -0
  88. package/dist/prompts/keypress.js +1 -0
  89. package/dist/prompts/license.d.ts +9 -0
  90. package/dist/prompts/license.js +13 -0
  91. package/dist/prompts/list.d.ts +9 -0
  92. package/dist/prompts/list.js +1 -0
  93. package/dist/prompts/map.d.ts +17 -0
  94. package/dist/prompts/map.js +5 -0
  95. package/dist/prompts/match.d.ts +19 -0
  96. package/dist/prompts/match.js +7 -0
  97. package/dist/prompts/miller.d.ts +15 -0
  98. package/dist/prompts/miller.js +2 -0
  99. package/dist/prompts/multi-column-select.d.ts +10 -0
  100. package/dist/prompts/multi-column-select.js +2 -0
  101. package/dist/prompts/multi-range.d.ts +9 -0
  102. package/dist/prompts/multi-range.js +3 -0
  103. package/dist/prompts/multi-select.d.ts +15 -0
  104. package/dist/prompts/multi-select.js +4 -0
  105. package/dist/prompts/number.d.ts +11 -0
  106. package/dist/prompts/number.js +2 -0
  107. package/dist/prompts/otp.d.ts +10 -0
  108. package/dist/prompts/otp.js +2 -0
  109. package/dist/prompts/pattern.d.ts +22 -0
  110. package/dist/prompts/pattern.js +4 -0
  111. package/dist/prompts/phone.d.ts +41 -0
  112. package/dist/prompts/phone.js +3 -0
  113. package/dist/prompts/quiz-select.d.ts +10 -0
  114. package/dist/prompts/quiz-select.js +7 -0
  115. package/dist/prompts/quiz-text.d.ts +11 -0
  116. package/dist/prompts/quiz-text.js +8 -0
  117. package/dist/prompts/range.d.ts +9 -0
  118. package/dist/prompts/range.js +1 -0
  119. package/dist/prompts/rating.d.ts +8 -0
  120. package/dist/prompts/rating.js +1 -0
  121. package/dist/prompts/regex.d.ts +13 -0
  122. package/dist/prompts/regex.js +5 -0
  123. package/dist/prompts/region.d.ts +11 -0
  124. package/dist/prompts/region.js +5 -0
  125. package/dist/prompts/schedule.d.ts +20 -0
  126. package/dist/prompts/schedule.js +5 -0
  127. package/dist/prompts/scroll.d.ts +13 -0
  128. package/dist/prompts/scroll.js +1 -0
  129. package/dist/prompts/seat.d.ts +17 -0
  130. package/dist/prompts/seat.js +5 -0
  131. package/dist/prompts/select-range.d.ts +8 -0
  132. package/dist/prompts/select-range.js +3 -0
  133. package/dist/prompts/select.d.ts +15 -0
  134. package/dist/prompts/select.js +2 -0
  135. package/dist/prompts/semver.d.ts +6 -0
  136. package/dist/prompts/semver.js +1 -0
  137. package/dist/prompts/shortcut.d.ts +9 -0
  138. package/dist/prompts/shortcut.js +1 -0
  139. package/dist/prompts/slider.d.ts +8 -0
  140. package/dist/prompts/slider.js +1 -0
  141. package/dist/prompts/slot.d.ts +16 -0
  142. package/dist/prompts/slot.js +8 -0
  143. package/dist/prompts/snippet.d.ts +19 -0
  144. package/dist/prompts/snippet.js +4 -0
  145. package/dist/prompts/sort-grid.d.ts +16 -0
  146. package/dist/prompts/sort-grid.js +2 -0
  147. package/dist/prompts/sort.d.ts +14 -0
  148. package/dist/prompts/sort.js +2 -0
  149. package/dist/prompts/spam.d.ts +17 -0
  150. package/dist/prompts/spam.js +2 -0
  151. package/dist/prompts/spreadsheet.d.ts +21 -0
  152. package/dist/prompts/spreadsheet.js +7 -0
  153. package/dist/prompts/table.d.ts +14 -0
  154. package/dist/prompts/table.js +3 -0
  155. package/dist/prompts/text.d.ts +17 -0
  156. package/dist/prompts/text.js +2 -0
  157. package/dist/prompts/time.d.ts +12 -0
  158. package/dist/prompts/time.js +2 -0
  159. package/dist/prompts/toggle.d.ts +8 -0
  160. package/dist/prompts/toggle.js +1 -0
  161. package/dist/prompts/transfer.d.ts +18 -0
  162. package/dist/prompts/transfer.js +5 -0
  163. package/dist/prompts/tree-select.d.ts +31 -0
  164. package/dist/prompts/tree-select.js +3 -0
  165. package/dist/prompts/tree.d.ts +20 -0
  166. package/dist/prompts/tree.js +3 -0
  167. package/dist/prompts/wait.d.ts +18 -0
  168. package/dist/prompts/wait.js +1 -0
  169. package/dist/spinner.d.ts +33 -0
  170. package/dist/spinner.js +3 -0
  171. package/dist/symbols.d.ts +33 -0
  172. package/dist/symbols.js +1 -0
  173. package/dist/tasks.d.ts +57 -0
  174. package/dist/tasks.js +1 -0
  175. package/dist/theme.d.ts +2 -0
  176. package/dist/theme.js +1 -0
  177. package/dist/types.d.ts +519 -0
  178. package/dist/types.js +1 -0
  179. package/dist/utils.d.ts +82 -0
  180. package/dist/utils.js +1 -0
  181. package/package.json +10 -10
  182. package/dist/src/ansi.js +0 -50
  183. package/dist/src/ansi.js.map +0 -1
  184. package/dist/src/base.js +0 -258
  185. package/dist/src/base.js.map +0 -1
  186. package/dist/src/core.js.map +0 -1
  187. package/dist/src/data/countries.js +0 -569
  188. package/dist/src/data/countries.js.map +0 -1
  189. package/dist/src/data/licenses.js +0 -480
  190. package/dist/src/data/licenses.js.map +0 -1
  191. package/dist/src/highlight.js +0 -185
  192. package/dist/src/highlight.js.map +0 -1
  193. package/dist/src/index.js +0 -66
  194. package/dist/src/index.js.map +0 -1
  195. package/dist/src/input.js +0 -158
  196. package/dist/src/input.js.map +0 -1
  197. package/dist/src/pipeline.js +0 -273
  198. package/dist/src/pipeline.js.map +0 -1
  199. package/dist/src/prompts/autocomplete.js +0 -171
  200. package/dist/src/prompts/autocomplete.js.map +0 -1
  201. package/dist/src/prompts/box.js +0 -225
  202. package/dist/src/prompts/box.js.map +0 -1
  203. package/dist/src/prompts/breadcrumb-search.js +0 -260
  204. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  205. package/dist/src/prompts/breadcrumb.js +0 -307
  206. package/dist/src/prompts/breadcrumb.js.map +0 -1
  207. package/dist/src/prompts/byte.js +0 -176
  208. package/dist/src/prompts/byte.js.map +0 -1
  209. package/dist/src/prompts/calculator.js +0 -243
  210. package/dist/src/prompts/calculator.js.map +0 -1
  211. package/dist/src/prompts/calendar.js +0 -430
  212. package/dist/src/prompts/calendar.js.map +0 -1
  213. package/dist/src/prompts/checkbox.js +0 -159
  214. package/dist/src/prompts/checkbox.js.map +0 -1
  215. package/dist/src/prompts/code.js +0 -271
  216. package/dist/src/prompts/code.js.map +0 -1
  217. package/dist/src/prompts/color.js +0 -165
  218. package/dist/src/prompts/color.js.map +0 -1
  219. package/dist/src/prompts/confirm.js +0 -55
  220. package/dist/src/prompts/confirm.js.map +0 -1
  221. package/dist/src/prompts/connection-string.js +0 -120
  222. package/dist/src/prompts/connection-string.js.map +0 -1
  223. package/dist/src/prompts/cron.js +0 -207
  224. package/dist/src/prompts/cron.js.map +0 -1
  225. package/dist/src/prompts/curl-utils.js +0 -71
  226. package/dist/src/prompts/curl-utils.js.map +0 -1
  227. package/dist/src/prompts/curl.js +0 -431
  228. package/dist/src/prompts/curl.js.map +0 -1
  229. package/dist/src/prompts/data-inspector.js +0 -261
  230. package/dist/src/prompts/data-inspector.js.map +0 -1
  231. package/dist/src/prompts/date.js +0 -185
  232. package/dist/src/prompts/date.js.map +0 -1
  233. package/dist/src/prompts/dependency.js +0 -283
  234. package/dist/src/prompts/dependency.js.map +0 -1
  235. package/dist/src/prompts/dial.js +0 -124
  236. package/dist/src/prompts/dial.js.map +0 -1
  237. package/dist/src/prompts/diff.js +0 -118
  238. package/dist/src/prompts/diff.js.map +0 -1
  239. package/dist/src/prompts/draw.js +0 -191
  240. package/dist/src/prompts/draw.js.map +0 -1
  241. package/dist/src/prompts/editor.js +0 -234
  242. package/dist/src/prompts/editor.js.map +0 -1
  243. package/dist/src/prompts/emoji.js +0 -226
  244. package/dist/src/prompts/emoji.js.map +0 -1
  245. package/dist/src/prompts/exec.js +0 -151
  246. package/dist/src/prompts/exec.js.map +0 -1
  247. package/dist/src/prompts/file.js +0 -217
  248. package/dist/src/prompts/file.js.map +0 -1
  249. package/dist/src/prompts/form.js +0 -241
  250. package/dist/src/prompts/form.js.map +0 -1
  251. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  252. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  253. package/dist/src/prompts/fuzzy.js +0 -147
  254. package/dist/src/prompts/fuzzy.js.map +0 -1
  255. package/dist/src/prompts/gauge.js +0 -137
  256. package/dist/src/prompts/gauge.js.map +0 -1
  257. package/dist/src/prompts/grid.js +0 -191
  258. package/dist/src/prompts/grid.js.map +0 -1
  259. package/dist/src/prompts/heatmap.js +0 -147
  260. package/dist/src/prompts/heatmap.js.map +0 -1
  261. package/dist/src/prompts/ip.js +0 -138
  262. package/dist/src/prompts/ip.js.map +0 -1
  263. package/dist/src/prompts/kanban.js +0 -233
  264. package/dist/src/prompts/kanban.js.map +0 -1
  265. package/dist/src/prompts/keypress.js +0 -54
  266. package/dist/src/prompts/keypress.js.map +0 -1
  267. package/dist/src/prompts/license.js +0 -144
  268. package/dist/src/prompts/license.js.map +0 -1
  269. package/dist/src/prompts/list.js +0 -124
  270. package/dist/src/prompts/list.js.map +0 -1
  271. package/dist/src/prompts/map.js +0 -262
  272. package/dist/src/prompts/map.js.map +0 -1
  273. package/dist/src/prompts/match.js +0 -271
  274. package/dist/src/prompts/match.js.map +0 -1
  275. package/dist/src/prompts/miller.js +0 -228
  276. package/dist/src/prompts/miller.js.map +0 -1
  277. package/dist/src/prompts/multi-column-select.js +0 -176
  278. package/dist/src/prompts/multi-column-select.js.map +0 -1
  279. package/dist/src/prompts/multi-range.js +0 -189
  280. package/dist/src/prompts/multi-range.js.map +0 -1
  281. package/dist/src/prompts/multi-select.js +0 -183
  282. package/dist/src/prompts/multi-select.js.map +0 -1
  283. package/dist/src/prompts/number.js +0 -166
  284. package/dist/src/prompts/number.js.map +0 -1
  285. package/dist/src/prompts/otp.js +0 -107
  286. package/dist/src/prompts/otp.js.map +0 -1
  287. package/dist/src/prompts/pattern.js +0 -252
  288. package/dist/src/prompts/pattern.js.map +0 -1
  289. package/dist/src/prompts/phone.js +0 -398
  290. package/dist/src/prompts/phone.js.map +0 -1
  291. package/dist/src/prompts/quiz-select.js +0 -114
  292. package/dist/src/prompts/quiz-select.js.map +0 -1
  293. package/dist/src/prompts/quiz-text.js +0 -98
  294. package/dist/src/prompts/quiz-text.js.map +0 -1
  295. package/dist/src/prompts/range.js +0 -164
  296. package/dist/src/prompts/range.js.map +0 -1
  297. package/dist/src/prompts/rating.js +0 -83
  298. package/dist/src/prompts/rating.js.map +0 -1
  299. package/dist/src/prompts/regex.js +0 -145
  300. package/dist/src/prompts/regex.js.map +0 -1
  301. package/dist/src/prompts/region.js +0 -170
  302. package/dist/src/prompts/region.js.map +0 -1
  303. package/dist/src/prompts/schedule.js +0 -270
  304. package/dist/src/prompts/schedule.js.map +0 -1
  305. package/dist/src/prompts/scroll.js +0 -155
  306. package/dist/src/prompts/scroll.js.map +0 -1
  307. package/dist/src/prompts/seat.js +0 -164
  308. package/dist/src/prompts/seat.js.map +0 -1
  309. package/dist/src/prompts/select-range.js +0 -148
  310. package/dist/src/prompts/select-range.js.map +0 -1
  311. package/dist/src/prompts/select.js +0 -163
  312. package/dist/src/prompts/select.js.map +0 -1
  313. package/dist/src/prompts/semver.js +0 -43
  314. package/dist/src/prompts/semver.js.map +0 -1
  315. package/dist/src/prompts/shortcut.js +0 -133
  316. package/dist/src/prompts/shortcut.js.map +0 -1
  317. package/dist/src/prompts/slider.js +0 -69
  318. package/dist/src/prompts/slider.js.map +0 -1
  319. package/dist/src/prompts/slot.js +0 -117
  320. package/dist/src/prompts/slot.js.map +0 -1
  321. package/dist/src/prompts/snippet.js +0 -228
  322. package/dist/src/prompts/snippet.js.map +0 -1
  323. package/dist/src/prompts/sort-grid.js +0 -151
  324. package/dist/src/prompts/sort-grid.js.map +0 -1
  325. package/dist/src/prompts/sort.js +0 -166
  326. package/dist/src/prompts/sort.js.map +0 -1
  327. package/dist/src/prompts/spam.js +0 -80
  328. package/dist/src/prompts/spam.js.map +0 -1
  329. package/dist/src/prompts/spreadsheet.js +0 -240
  330. package/dist/src/prompts/spreadsheet.js.map +0 -1
  331. package/dist/src/prompts/table.js +0 -120
  332. package/dist/src/prompts/table.js.map +0 -1
  333. package/dist/src/prompts/text.js +0 -317
  334. package/dist/src/prompts/text.js.map +0 -1
  335. package/dist/src/prompts/time.js +0 -211
  336. package/dist/src/prompts/time.js.map +0 -1
  337. package/dist/src/prompts/toggle.js +0 -53
  338. package/dist/src/prompts/toggle.js.map +0 -1
  339. package/dist/src/prompts/transfer.js +0 -207
  340. package/dist/src/prompts/transfer.js.map +0 -1
  341. package/dist/src/prompts/tree-select.js +0 -270
  342. package/dist/src/prompts/tree-select.js.map +0 -1
  343. package/dist/src/prompts/tree.js +0 -233
  344. package/dist/src/prompts/tree.js.map +0 -1
  345. package/dist/src/prompts/wait.js +0 -79
  346. package/dist/src/prompts/wait.js.map +0 -1
  347. package/dist/src/spinner.js +0 -105
  348. package/dist/src/spinner.js.map +0 -1
  349. package/dist/src/symbols.js +0 -66
  350. package/dist/src/symbols.js.map +0 -1
  351. package/dist/src/tasks.js +0 -231
  352. package/dist/src/tasks.js.map +0 -1
  353. package/dist/src/theme.js +0 -29
  354. package/dist/src/theme.js.map +0 -1
  355. package/dist/src/types.js +0 -8
  356. package/dist/src/types.js.map +0 -1
  357. package/dist/src/utils.js +0 -480
  358. package/dist/src/utils.js.map +0 -1
@@ -1,261 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "DataInspectorPrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return DataInspectorPrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _utils = require("../utils");
15
- const _symbols = require("../symbols");
16
- function _define_property(obj, key, value) {
17
- if (key in obj) {
18
- Object.defineProperty(obj, key, {
19
- value: value,
20
- enumerable: true,
21
- configurable: true,
22
- writable: true
23
- });
24
- } else {
25
- obj[key] = value;
26
- }
27
- return obj;
28
- }
29
- let DataInspectorPrompt = class DataInspectorPrompt extends _base.Prompt {
30
- getType(value) {
31
- if (value === null) return 'null';
32
- if (value === undefined) return 'undefined';
33
- if (Array.isArray(value)) return 'array';
34
- if (value instanceof Date) return 'date';
35
- return typeof value;
36
- }
37
- recalculateFlatList() {
38
- this.flatList = [];
39
- this.traverse(this.rootData, 'root', 0, null, 'root');
40
- }
41
- traverse(data, key, depth, parentRef, currentPath) {
42
- const type = this.getType(data);
43
- const isLeaf = ![
44
- 'object',
45
- 'array'
46
- ].includes(type) || data === null;
47
- const node = {
48
- key: String(key),
49
- value: data,
50
- type,
51
- depth,
52
- path: currentPath,
53
- parentRef,
54
- refKey: key,
55
- isLeaf
56
- };
57
- this.flatList.push(node);
58
- if (!isLeaf && this.expandedPaths.has(currentPath)) {
59
- const keys = Object.keys(data);
60
- keys.forEach((k)=>{
61
- this.traverse(data[k], k, depth + 1, data, `${currentPath}.${k}`);
62
- });
63
- }
64
- }
65
- getValueColor(type) {
66
- switch(type){
67
- case 'string':
68
- return _ansi.ANSI.FG_GREEN;
69
- case 'number':
70
- return _ansi.ANSI.FG_YELLOW;
71
- case 'boolean':
72
- return _ansi.ANSI.FG_MAGENTA;
73
- case 'null':
74
- case 'undefined':
75
- return _ansi.ANSI.FG_GRAY;
76
- case 'date':
77
- return _ansi.ANSI.FG_BLUE;
78
- default:
79
- return _ansi.ANSI.RESET;
80
- }
81
- }
82
- formatValue(value, type) {
83
- if (type === 'string') return `"${value}"`;
84
- if (type === 'date') return value.toISOString();
85
- if (type === 'array') return `Array(${value.length})`;
86
- if (type === 'object') return `Object{${Object.keys(value).length}}`;
87
- return String(value);
88
- }
89
- render(_firstRender) {
90
- let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
91
- if (this.cursor < this.scrollTop) {
92
- this.scrollTop = this.cursor;
93
- } else if (this.cursor >= this.scrollTop + this.pageSize) {
94
- this.scrollTop = this.cursor - this.pageSize + 1;
95
- }
96
- const visible = this.flatList.slice(this.scrollTop, this.scrollTop + this.pageSize);
97
- visible.forEach((node, index)=>{
98
- const actualIndex = this.scrollTop + index;
99
- const isSelected = actualIndex === this.cursor;
100
- // Indentation & Tree Lines
101
- const indent = ' '.repeat(node.depth);
102
- const prefix = isSelected ? `${_theme.theme.main}${_symbols.symbols.pointer} ` : ' ';
103
- // Icon
104
- let icon = '';
105
- if (!node.isLeaf) {
106
- icon = this.expandedPaths.has(node.path) ? '▾ ' : '▸ ';
107
- } else {
108
- icon = '• '; // Leaf
109
- }
110
- // Key
111
- let keyStr = node.key;
112
- if (node.path === 'root') keyStr = 'ROOT';
113
- // Value Representation
114
- let valueStr = '';
115
- if (isSelected && this.editMode) {
116
- // Editing View
117
- valueStr = `${_ansi.ANSI.BG_BLUE}${_ansi.ANSI.FG_WHITE} ${this.editBuffer}_ ${_ansi.ANSI.RESET}`;
118
- } else {
119
- // Normal View
120
- const color = this.getValueColor(node.type);
121
- const formatted = this.formatValue(node.value, node.type);
122
- valueStr = `${color}${formatted}${_ansi.ANSI.RESET}`;
123
- }
124
- // Type Label (Right aligned or just dimmed next to key)
125
- const typeLabel = `${_ansi.ANSI.FG_GRAY}(${node.type})${_ansi.ANSI.RESET}`;
126
- let line = `${indent}${icon}${_ansi.ANSI.BOLD}${keyStr}${_ansi.ANSI.RESET}: ${valueStr} ${typeLabel}`;
127
- if (isSelected && !this.editMode) {
128
- line = `${_theme.theme.main}${(0, _utils.stripAnsi)(line)}${_ansi.ANSI.RESET}`; // Highlight whole line
129
- } else if (isSelected && this.editMode) {
130
- // In edit mode, we don't highlight the whole line, just the input box
131
- line = `${indent}${icon}${_ansi.ANSI.BOLD}${keyStr}${_ansi.ANSI.RESET}: ${valueStr} ${typeLabel}`;
132
- }
133
- output += `${prefix}${line}\n`;
134
- });
135
- // Footer
136
- if (this.editMode) {
137
- output += `\n${_theme.theme.main}EDIT MODE${_ansi.ANSI.RESET} Enter: Save, Esc: Cancel`;
138
- } else {
139
- output += `\n${_theme.theme.muted}(Arrows: Nav, Space: Toggle, Enter: Edit/Submit)${_ansi.ANSI.RESET}`;
140
- }
141
- this.renderFrame(output);
142
- }
143
- handleInput(char, key) {
144
- if (this.editMode) {
145
- this.handleEditInput(char, key);
146
- return;
147
- }
148
- const node = this.flatList[this.cursor];
149
- if (this.isUp(char)) {
150
- this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;
151
- this.render(false);
152
- return;
153
- }
154
- if (this.isDown(char)) {
155
- this.cursor = (this.cursor + 1) % this.flatList.length;
156
- this.render(false);
157
- return;
158
- }
159
- // Expand/Collapse
160
- if (char === ' ' || this.isRight(char) || this.isLeft(char)) {
161
- if (!node.isLeaf) {
162
- const isExpanded = this.expandedPaths.has(node.path);
163
- if (this.isRight(char) && !isExpanded) {
164
- this.expandedPaths.add(node.path);
165
- } else if (this.isLeft(char) && isExpanded) {
166
- this.expandedPaths.delete(node.path);
167
- } else if (char === ' ') {
168
- if (isExpanded) this.expandedPaths.delete(node.path);
169
- else this.expandedPaths.add(node.path);
170
- } else if (this.isLeft(char) && !isExpanded && node.parentRef) {
171
- // Jump to parent
172
- // This requires finding parent index, but simplification: just do nothing or standard logic
173
- }
174
- this.recalculateFlatList();
175
- this.render(false);
176
- }
177
- return;
178
- }
179
- // Enter: Edit or Submit
180
- if (char === '\r' || char === '\n') {
181
- if (node.path === 'root') {
182
- this.submit(this.rootData);
183
- return;
184
- }
185
- // Toggle Boolean immediately
186
- if (node.type === 'boolean') {
187
- const newVal = !node.value;
188
- node.parentRef[node.refKey] = newVal;
189
- this.recalculateFlatList(); // Value changed
190
- this.render(false);
191
- return;
192
- }
193
- // Enter Edit Mode for String/Number
194
- if ([
195
- 'string',
196
- 'number'
197
- ].includes(node.type)) {
198
- this.editMode = true;
199
- this.editBuffer = String(node.value);
200
- this.render(false);
201
- return;
202
- }
203
- this.submit(this.rootData);
204
- }
205
- }
206
- handleEditInput(char, key) {
207
- const node = this.flatList[this.cursor];
208
- // Enter: Save
209
- if (char === '\r' || char === '\n') {
210
- let newValue = this.editBuffer;
211
- if (node.type === 'number') {
212
- newValue = Number(this.editBuffer);
213
- if (isNaN(newValue)) newValue = 0; // Fallback
214
- }
215
- // Update Data
216
- node.parentRef[node.refKey] = newValue;
217
- this.editMode = false;
218
- this.recalculateFlatList();
219
- this.render(false);
220
- return;
221
- }
222
- // Esc: Cancel
223
- if (key[0] === 27 && key.length === 1) {
224
- this.editMode = false;
225
- this.render(false);
226
- return;
227
- }
228
- // Backspace
229
- if (key.toString() === '\x7f' || char === '\b') {
230
- this.editBuffer = this.editBuffer.slice(0, -1);
231
- this.render(false);
232
- return;
233
- }
234
- // Typing
235
- if (char && char.length === 1 && char.charCodeAt(0) >= 32) {
236
- this.editBuffer += char;
237
- this.render(false);
238
- }
239
- }
240
- handleMouse(event) {
241
- if (this.editMode) return; // Disable scroll in edit mode for now
242
- if (event.action === 'scroll') {
243
- if (event.scroll === 'up') {
244
- this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;
245
- } else if (event.scroll === 'down') {
246
- this.cursor = (this.cursor + 1) % this.flatList.length;
247
- }
248
- this.render(false);
249
- }
250
- }
251
- constructor(options){
252
- super(options), _define_property(this, "cursor", 0), _define_property(this, "flatList", []), _define_property(this, "expandedPaths", new Set()), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 15), // Edit Mode State
253
- _define_property(this, "editMode", false), _define_property(this, "editBuffer", ''), // Config
254
- _define_property(this, "rootData", void 0);
255
- this.rootData = options.data; // We mutate this directly
256
- this.expandedPaths.add('root'); // Always expand root if it's an object
257
- this.recalculateFlatList();
258
- }
259
- };
260
-
261
- //# sourceMappingURL=data-inspector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/data-inspector.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { DataInspectorOptions, MouseEvent } from '../types';\nimport { stripAnsi } from '../utils';\nimport { symbols } from '../symbols';\n\ninterface InspectorNode {\n key: string;\n value: any;\n type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'null' | 'undefined' | 'date' | 'function';\n depth: number;\n path: string; // Unique ID for expansion\n parentRef: any; // Reference to parent object/array for mutation\n refKey: string | number; // Key in parent\n isLeaf: boolean;\n}\n\nexport class DataInspectorPrompt extends Prompt<any, DataInspectorOptions> {\n private cursor: number = 0;\n private flatList: InspectorNode[] = [];\n private expandedPaths: Set<string> = new Set();\n private scrollTop: number = 0;\n private readonly pageSize: number = 15;\n\n // Edit Mode State\n private editMode: boolean = false;\n private editBuffer: string = '';\n\n // Config\n private rootData: any;\n\n constructor(options: DataInspectorOptions) {\n super(options);\n this.rootData = options.data; // We mutate this directly\n this.expandedPaths.add('root'); // Always expand root if it's an object\n this.recalculateFlatList();\n }\n\n private getType(value: any): InspectorNode['type'] {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Date) return 'date';\n return typeof value as InspectorNode['type'];\n }\n\n private recalculateFlatList() {\n this.flatList = [];\n this.traverse(this.rootData, 'root', 0, null, 'root');\n }\n\n private traverse(data: any, key: string | number, depth: number, parentRef: any, currentPath: string) {\n const type = this.getType(data);\n const isLeaf = !['object', 'array'].includes(type) || data === null;\n\n const node: InspectorNode = {\n key: String(key),\n value: data,\n type,\n depth,\n path: currentPath,\n parentRef,\n refKey: key,\n isLeaf\n };\n\n this.flatList.push(node);\n\n if (!isLeaf && this.expandedPaths.has(currentPath)) {\n const keys = Object.keys(data);\n keys.forEach(k => {\n this.traverse(data[k], k, depth + 1, data, `${currentPath}.${k}`);\n });\n }\n }\n\n private getValueColor(type: string): string {\n switch (type) {\n case 'string': return ANSI.FG_GREEN;\n case 'number': return ANSI.FG_YELLOW;\n case 'boolean': return ANSI.FG_MAGENTA;\n case 'null':\n case 'undefined': return ANSI.FG_GRAY;\n case 'date': return ANSI.FG_BLUE;\n default: return ANSI.RESET;\n }\n }\n\n private formatValue(value: any, type: string): string {\n if (type === 'string') return `\"${value}\"`;\n if (type === 'date') return value.toISOString();\n if (type === 'array') return `Array(${value.length})`;\n if (type === 'object') return `Object{${Object.keys(value).length}}`;\n return String(value);\n }\n\n protected render(_firstRender: boolean) {\n let output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\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 visible = this.flatList.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visible.forEach((node, index) => {\n const actualIndex = this.scrollTop + index;\n const isSelected = actualIndex === this.cursor;\n\n // Indentation & Tree Lines\n const indent = ' '.repeat(node.depth);\n const prefix = isSelected ? `${theme.main}${symbols.pointer} ` : ' ';\n\n // Icon\n let icon = '';\n if (!node.isLeaf) {\n icon = this.expandedPaths.has(node.path) ? '▾ ' : '▸ ';\n } else {\n icon = '• '; // Leaf\n }\n\n // Key\n let keyStr = node.key;\n if (node.path === 'root') keyStr = 'ROOT';\n\n // Value Representation\n let valueStr = '';\n\n if (isSelected && this.editMode) {\n // Editing View\n valueStr = `${ANSI.BG_BLUE}${ANSI.FG_WHITE} ${this.editBuffer}_ ${ANSI.RESET}`;\n } else {\n // Normal View\n const color = this.getValueColor(node.type);\n const formatted = this.formatValue(node.value, node.type);\n valueStr = `${color}${formatted}${ANSI.RESET}`;\n }\n\n // Type Label (Right aligned or just dimmed next to key)\n const typeLabel = `${ANSI.FG_GRAY}(${node.type})${ANSI.RESET}`;\n\n let line = `${indent}${icon}${ANSI.BOLD}${keyStr}${ANSI.RESET}: ${valueStr} ${typeLabel}`;\n\n if (isSelected && !this.editMode) {\n line = `${theme.main}${stripAnsi(line)}${ANSI.RESET}`; // Highlight whole line\n } else if (isSelected && this.editMode) {\n // In edit mode, we don't highlight the whole line, just the input box\n line = `${indent}${icon}${ANSI.BOLD}${keyStr}${ANSI.RESET}: ${valueStr} ${typeLabel}`;\n }\n\n output += `${prefix}${line}\\n`;\n });\n\n // Footer\n if (this.editMode) {\n output += `\\n${theme.main}EDIT MODE${ANSI.RESET} Enter: Save, Esc: Cancel`;\n } else {\n output += `\\n${theme.muted}(Arrows: Nav, Space: Toggle, Enter: Edit/Submit)${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, key: Buffer) {\n if (this.editMode) {\n this.handleEditInput(char, key);\n return;\n }\n\n const node = this.flatList[this.cursor];\n\n if (this.isUp(char)) {\n this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;\n this.render(false);\n return;\n }\n if (this.isDown(char)) {\n this.cursor = (this.cursor + 1) % this.flatList.length;\n this.render(false);\n return;\n }\n\n // Expand/Collapse\n if (char === ' ' || this.isRight(char) || this.isLeft(char)) {\n if (!node.isLeaf) {\n const isExpanded = this.expandedPaths.has(node.path);\n\n if (this.isRight(char) && !isExpanded) {\n this.expandedPaths.add(node.path);\n } else if (this.isLeft(char) && isExpanded) {\n this.expandedPaths.delete(node.path);\n } else if (char === ' ') {\n if (isExpanded) this.expandedPaths.delete(node.path);\n else this.expandedPaths.add(node.path);\n } else if (this.isLeft(char) && !isExpanded && node.parentRef) {\n // Jump to parent\n // This requires finding parent index, but simplification: just do nothing or standard logic\n }\n\n this.recalculateFlatList();\n this.render(false);\n }\n return;\n }\n\n // Enter: Edit or Submit\n if (char === '\\r' || char === '\\n') {\n if (node.path === 'root') {\n this.submit(this.rootData);\n return;\n }\n\n // Toggle Boolean immediately\n if (node.type === 'boolean') {\n const newVal = !node.value;\n node.parentRef[node.refKey] = newVal;\n this.recalculateFlatList(); // Value changed\n this.render(false);\n return;\n }\n\n // Enter Edit Mode for String/Number\n if (['string', 'number'].includes(node.type)) {\n this.editMode = true;\n this.editBuffer = String(node.value);\n this.render(false);\n return;\n }\n\n this.submit(this.rootData);\n }\n }\n\n private handleEditInput(char: string, key: Buffer) {\n const node = this.flatList[this.cursor];\n\n // Enter: Save\n if (char === '\\r' || char === '\\n') {\n let newValue: any = this.editBuffer;\n if (node.type === 'number') {\n newValue = Number(this.editBuffer);\n if (isNaN(newValue)) newValue = 0; // Fallback\n }\n\n // Update Data\n node.parentRef[node.refKey] = newValue;\n\n this.editMode = false;\n this.recalculateFlatList();\n this.render(false);\n return;\n }\n\n // Esc: Cancel\n if (key[0] === 27 && key.length === 1) { // Standard ESC\n this.editMode = false;\n this.render(false);\n return;\n }\n\n // Backspace\n if (key.toString() === '\\x7f' || char === '\\b') {\n this.editBuffer = this.editBuffer.slice(0, -1);\n this.render(false);\n return;\n }\n\n // Typing\n if (char && char.length === 1 && char.charCodeAt(0) >= 32) {\n this.editBuffer += char;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (this.editMode) return; // Disable scroll in edit mode for now\n\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;\n } else if (event.scroll === 'down') {\n this.cursor = (this.cursor + 1) % this.flatList.length;\n }\n this.render(false);\n }\n }\n}\n"],"names":["DataInspectorPrompt","Prompt","getType","value","undefined","Array","isArray","Date","recalculateFlatList","flatList","traverse","rootData","data","key","depth","parentRef","currentPath","type","isLeaf","includes","node","String","path","refKey","push","expandedPaths","has","keys","Object","forEach","k","getValueColor","ANSI","FG_GREEN","FG_YELLOW","FG_MAGENTA","FG_GRAY","FG_BLUE","RESET","formatValue","toISOString","length","render","_firstRender","output","theme","success","BOLD","title","options","message","cursor","scrollTop","pageSize","visible","slice","index","actualIndex","isSelected","indent","repeat","prefix","main","symbols","pointer","icon","keyStr","valueStr","editMode","BG_BLUE","FG_WHITE","editBuffer","color","formatted","typeLabel","line","stripAnsi","muted","renderFrame","handleInput","char","handleEditInput","isUp","isDown","isRight","isLeft","isExpanded","add","delete","submit","newVal","newValue","Number","isNaN","toString","charCodeAt","handleMouse","event","action","scroll","Set"],"mappings":"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"}
@@ -1,185 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "DatePrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return DatePrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _symbols = require("../symbols");
15
- function _define_property(obj, key, value) {
16
- if (key in obj) {
17
- Object.defineProperty(obj, key, {
18
- value: value,
19
- enumerable: true,
20
- configurable: true,
21
- writable: true
22
- });
23
- } else {
24
- obj[key] = value;
25
- }
26
- return obj;
27
- }
28
- let DatePrompt = class DatePrompt extends _base.Prompt {
29
- render(_firstRender) {
30
- // Date formatting
31
- const y = this.value.getFullYear();
32
- const m = (this.value.getMonth() + 1).toString().padStart(2, '0');
33
- const d = this.value.getDate().toString().padStart(2, '0');
34
- const h = this.value.getHours().toString().padStart(2, '0');
35
- const min = this.value.getMinutes().toString().padStart(2, '0');
36
- const fields = [
37
- y,
38
- m,
39
- d,
40
- h,
41
- min
42
- ];
43
- const display = fields.map((val, i)=>{
44
- if (i === this.selectedField) return `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${val}${_ansi.ANSI.RESET}`;
45
- return val;
46
- });
47
- const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
48
- const dateStr = `${display[0]}-${display[1]}-${display[2]} ${display[3]}:${display[4]}`;
49
- let output = `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${dateStr} ${_theme.theme.muted}(Use arrows or type)${_ansi.ANSI.RESET}`;
50
- if (this.errorMsg) {
51
- output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
52
- }
53
- this.renderFrame(output);
54
- }
55
- handleInput(char) {
56
- if (char === '\r' || char === '\n') {
57
- // Min constraint check
58
- if (this.options.min && this.value < this.options.min) {
59
- this.errorMsg = 'Date cannot be before minimum allowed.';
60
- this.render(false);
61
- return;
62
- }
63
- // Max constraint check
64
- if (this.options.max && this.value > this.options.max) {
65
- this.errorMsg = 'Date cannot be after maximum allowed.';
66
- this.render(false);
67
- return;
68
- }
69
- this.submit(this.value);
70
- return;
71
- }
72
- if (char === '\t' || this.isRight(char)) {
73
- if (char === '\t') {
74
- this.selectedField = (this.selectedField + 1) % 5;
75
- } else {
76
- this.selectedField = Math.min(4, this.selectedField + 1);
77
- }
78
- this.inputBuffer = ''; // Reset buffer on move
79
- this.errorMsg = '';
80
- this.render(false);
81
- return;
82
- }
83
- if (char === '\x1b[Z' || this.isLeft(char)) {
84
- if (char === '\x1b[Z') {
85
- this.selectedField = (this.selectedField - 1 + 5) % 5;
86
- } else {
87
- this.selectedField = Math.max(0, this.selectedField - 1);
88
- }
89
- this.inputBuffer = ''; // Reset buffer on move
90
- this.errorMsg = '';
91
- this.render(false);
92
- return;
93
- }
94
- // Support numeric input
95
- if (/^\d$/.test(char)) {
96
- const maxLen = this.selectedField === 0 ? 4 : 2;
97
- let nextBuffer = this.inputBuffer + char;
98
- if (nextBuffer.length > maxLen) {
99
- nextBuffer = char;
100
- }
101
- const val = parseInt(nextBuffer, 10);
102
- let valid = true;
103
- if (this.selectedField === 1 && (val < 1 || val > 12)) valid = false; // Month
104
- if (this.selectedField === 2 && (val < 1 || val > 31)) valid = false; // Day (rough check)
105
- if (this.selectedField === 3 && val > 23) valid = false; // Hour
106
- if (this.selectedField === 4 && val > 59) valid = false; // Minute
107
- if (!valid) {
108
- nextBuffer = char;
109
- }
110
- this.inputBuffer = nextBuffer;
111
- const finalVal = parseInt(this.inputBuffer, 10);
112
- const d = new Date(this.value);
113
- if (this.selectedField === 0) {
114
- d.setFullYear(finalVal);
115
- } else if (this.selectedField === 1) d.setMonth(Math.max(0, Math.min(11, finalVal - 1)));
116
- else if (this.selectedField === 2) d.setDate(Math.max(1, Math.min(31, finalVal)));
117
- else if (this.selectedField === 3) d.setHours(Math.max(0, Math.min(23, finalVal)));
118
- else if (this.selectedField === 4) d.setMinutes(Math.max(0, Math.min(59, finalVal)));
119
- this.value = d;
120
- // Check immediately after updating the value to display an error message (but still allow further input)
121
- if (this.options.min && this.value < this.options.min) {
122
- this.errorMsg = 'Warning: Date is before minimum.';
123
- } else if (this.options.max && this.value > this.options.max) {
124
- this.errorMsg = 'Warning: Date is after maximum.';
125
- } else {
126
- this.errorMsg = '';
127
- }
128
- this.render(false);
129
- return;
130
- }
131
- // Support standard and application cursor keys
132
- const isUp = this.isUp(char);
133
- const isDown = this.isDown(char);
134
- if (isUp || isDown) {
135
- this.inputBuffer = ''; // Reset buffer on arrow move
136
- const dir = isUp ? 1 : -1;
137
- this.adjustDate(dir);
138
- }
139
- }
140
- handleMouse(event) {
141
- if (event.action === 'scroll') {
142
- if (event.scroll === 'up') {
143
- this.adjustDate(1);
144
- } else if (event.scroll === 'down') {
145
- this.adjustDate(-1);
146
- }
147
- }
148
- }
149
- adjustDate(dir) {
150
- const d = new Date(this.value);
151
- switch(this.selectedField){
152
- case 0:
153
- d.setFullYear(d.getFullYear() + dir);
154
- break;
155
- case 1:
156
- d.setMonth(d.getMonth() + dir);
157
- break;
158
- case 2:
159
- d.setDate(d.getDate() + dir);
160
- break;
161
- case 3:
162
- d.setHours(d.getHours() + dir);
163
- break;
164
- case 4:
165
- d.setMinutes(d.getMinutes() + dir);
166
- break;
167
- }
168
- this.value = d;
169
- if (this.options.min && this.value < this.options.min) {
170
- this.errorMsg = 'Date cannot be before minimum allowed.';
171
- } else if (this.options.max && this.value > this.options.max) {
172
- this.errorMsg = 'Date cannot be after maximum allowed.';
173
- } else {
174
- this.errorMsg = '';
175
- }
176
- this.render(false);
177
- }
178
- constructor(options){
179
- super(options), _define_property(this, "selectedField", 0) // 0: Year, 1: Month, 2: Day, 3: Hour, 4: Minute
180
- , _define_property(this, "errorMsg", ''), _define_property(this, "inputBuffer", '');
181
- this.value = options.initial || new Date();
182
- }
183
- };
184
-
185
- //# sourceMappingURL=date.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/date.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { DateOptions, MouseEvent } from '../types';\n\n// --- Implementation: Date Prompt ---\nexport class DatePrompt extends Prompt<Date, DateOptions> {\n private selectedField: number = 0; // 0: Year, 1: Month, 2: Day, 3: Hour, 4: Minute\n private errorMsg: string = '';\n private inputBuffer: string = '';\n\n constructor(options: DateOptions) {\n super(options);\n this.value = options.initial || new Date();\n }\n\n protected render(_firstRender: boolean) {\n // Date formatting\n const y = this.value.getFullYear();\n const m = (this.value.getMonth() + 1).toString().padStart(2, '0');\n const d = this.value.getDate().toString().padStart(2, '0');\n const h = this.value.getHours().toString().padStart(2, '0');\n const min = this.value.getMinutes().toString().padStart(2, '0');\n\n const fields = [y, m, d, h, min];\n const display = fields.map((val, i) => {\n if (i === this.selectedField) return `${theme.main}${ANSI.UNDERLINE}${val}${ANSI.RESET}`;\n return val;\n });\n\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n const dateStr = `${display[0]}-${display[1]}-${display[2]} ${display[3]}:${display[4]}`;\n\n let output = `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${dateStr} ${theme.muted}(Use arrows or type)${ANSI.RESET}`;\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n // Min constraint check\n if (this.options.min && this.value < this.options.min) {\n this.errorMsg = 'Date cannot be before minimum allowed.';\n this.render(false);\n return;\n }\n // Max constraint check\n if (this.options.max && this.value > this.options.max) {\n this.errorMsg = 'Date cannot be after maximum allowed.';\n this.render(false);\n return;\n }\n\n this.submit(this.value);\n return;\n }\n\n if (char === '\\t' || this.isRight(char)) { // Right / Tab\n if (char === '\\t') {\n this.selectedField = (this.selectedField + 1) % 5;\n } else {\n this.selectedField = Math.min(4, this.selectedField + 1);\n }\n this.inputBuffer = ''; // Reset buffer on move\n this.errorMsg = '';\n this.render(false);\n return;\n }\n\n if (char === '\\x1b[Z' || this.isLeft(char)) { // Left / Shift+Tab\n if (char === '\\x1b[Z') {\n this.selectedField = (this.selectedField - 1 + 5) % 5;\n } else {\n this.selectedField = Math.max(0, this.selectedField - 1);\n }\n this.inputBuffer = ''; // Reset buffer on move\n this.errorMsg = '';\n this.render(false);\n return;\n }\n\n // Support numeric input\n if (/^\\d$/.test(char)) {\n const maxLen = this.selectedField === 0 ? 4 : 2;\n let nextBuffer = this.inputBuffer + char;\n\n if (nextBuffer.length > maxLen) {\n nextBuffer = char;\n }\n\n const val = parseInt(nextBuffer, 10);\n let valid = true;\n\n if (this.selectedField === 1 && (val < 1 || val > 12)) valid = false; // Month\n if (this.selectedField === 2 && (val < 1 || val > 31)) valid = false; // Day (rough check)\n if (this.selectedField === 3 && (val > 23)) valid = false; // Hour\n if (this.selectedField === 4 && (val > 59)) valid = false; // Minute\n\n if (!valid) {\n nextBuffer = char;\n }\n\n this.inputBuffer = nextBuffer;\n const finalVal = parseInt(this.inputBuffer, 10);\n\n const d = new Date(this.value);\n\n if (this.selectedField === 0) {\n d.setFullYear(finalVal);\n }\n else if (this.selectedField === 1) d.setMonth(Math.max(0, Math.min(11, finalVal - 1)));\n else if (this.selectedField === 2) d.setDate(Math.max(1, Math.min(31, finalVal)));\n else if (this.selectedField === 3) d.setHours(Math.max(0, Math.min(23, finalVal)));\n else if (this.selectedField === 4) d.setMinutes(Math.max(0, Math.min(59, finalVal)));\n\n this.value = d;\n\n // Check immediately after updating the value to display an error message (but still allow further input)\n if (this.options.min && this.value < this.options.min) {\n this.errorMsg = 'Warning: Date is before minimum.';\n } else if (this.options.max && this.value > this.options.max) {\n this.errorMsg = 'Warning: Date is after maximum.';\n } else {\n this.errorMsg = '';\n }\n\n this.render(false);\n return;\n }\n\n // Support standard and application cursor keys\n const isUp = this.isUp(char);\n const isDown = this.isDown(char);\n\n if (isUp || isDown) {\n this.inputBuffer = ''; // Reset buffer on arrow move\n const dir = isUp ? 1 : -1;\n this.adjustDate(dir);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.adjustDate(1);\n } else if (event.scroll === 'down') {\n this.adjustDate(-1);\n }\n }\n }\n\n private adjustDate(dir: number) {\n const d = new Date(this.value);\n\n switch (this.selectedField) {\n case 0: d.setFullYear(d.getFullYear() + dir); break;\n case 1: d.setMonth(d.getMonth() + dir); break;\n case 2: d.setDate(d.getDate() + dir); break;\n case 3: d.setHours(d.getHours() + dir); break;\n case 4: d.setMinutes(d.getMinutes() + dir); break;\n }\n\n this.value = d;\n\n if (this.options.min && this.value < this.options.min) {\n this.errorMsg = 'Date cannot be before minimum allowed.';\n } else if (this.options.max && this.value > this.options.max) {\n this.errorMsg = 'Date cannot be after maximum allowed.';\n } else {\n this.errorMsg = '';\n }\n\n this.render(false);\n }\n}"],"names":["DatePrompt","Prompt","render","_firstRender","y","value","getFullYear","m","getMonth","toString","padStart","d","getDate","h","getHours","min","getMinutes","fields","display","map","val","i","selectedField","theme","main","ANSI","UNDERLINE","RESET","icon","errorMsg","error","symbols","cross","success","dateStr","output","BOLD","title","options","message","muted","renderFrame","handleInput","char","max","submit","isRight","Math","inputBuffer","isLeft","test","maxLen","nextBuffer","length","parseInt","valid","finalVal","Date","setFullYear","setMonth","setDate","setHours","setMinutes","isUp","isDown","dir","adjustDate","handleMouse","event","action","scroll","initial"],"mappings":"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"}