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,76 +1,91 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "BreadcrumbPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return BreadcrumbPrompt;
7
9
  }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
10
  });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
11
+ const _base = require("../base");
12
+ const _ansi = require("../ansi");
13
+ const _theme = require("../theme");
14
+ const _symbols = require("../symbols");
15
+ const _promises = /*#__PURE__*/ _interop_require_wildcard(require("fs/promises"));
16
+ const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
17
+ function _define_property(obj, key, value) {
18
+ if (key in obj) {
19
+ Object.defineProperty(obj, key, {
20
+ value: value,
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true
24
+ });
25
+ } else {
26
+ obj[key] = value;
27
+ }
28
+ return obj;
29
+ }
30
+ function _getRequireWildcardCache(nodeInterop) {
31
+ if (typeof WeakMap !== "function") return null;
32
+ var cacheBabelInterop = new WeakMap();
33
+ var cacheNodeInterop = new WeakMap();
34
+ return (_getRequireWildcardCache = function(nodeInterop) {
35
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
36
+ })(nodeInterop);
37
+ }
38
+ function _interop_require_wildcard(obj, nodeInterop) {
39
+ if (!nodeInterop && obj && obj.__esModule) {
40
+ return obj;
41
+ }
42
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
43
+ return {
44
+ default: obj
24
45
  };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
46
+ }
47
+ var cache = _getRequireWildcardCache(nodeInterop);
48
+ if (cache && cache.has(obj)) {
49
+ return cache.get(obj);
50
+ }
51
+ var newObj = {
52
+ __proto__: null
33
53
  };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.BreadcrumbPrompt = void 0;
37
- const base_1 = require("../base");
38
- const ansi_1 = require("../ansi");
39
- const theme_1 = require("../theme");
40
- const symbols_1 = require("../symbols");
41
- const fs = __importStar(require("fs/promises"));
42
- const path = __importStar(require("path"));
43
- class BreadcrumbPrompt extends base_1.Prompt {
44
- constructor(options) {
45
- super(options);
46
- this.stack = [];
47
- this.currentEntries = [];
48
- this.cursor = 0;
49
- this.scrollTop = 0;
50
- this.isLoading = false;
51
- this.error = null;
52
- this.pageSize = 10;
53
- this.root = path.resolve(options.root || process.cwd());
54
- this.currentPath = this.root;
55
- this.separator = options.separator || ' › ';
56
- this.showHidden = options.showHidden || false;
57
- this.loadDirectory(this.currentPath);
54
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
55
+ for(var key in obj){
56
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
57
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
58
+ if (desc && (desc.get || desc.set)) {
59
+ Object.defineProperty(newObj, key, desc);
60
+ } else {
61
+ newObj[key] = obj[key];
62
+ }
63
+ }
64
+ }
65
+ newObj.default = obj;
66
+ if (cache) {
67
+ cache.set(obj, newObj);
58
68
  }
69
+ return newObj;
70
+ }
71
+ let BreadcrumbPrompt = class BreadcrumbPrompt extends _base.Prompt {
59
72
  async loadDirectory(dir) {
60
73
  this.isLoading = true;
61
74
  this.error = null;
62
75
  this.render(false);
63
76
  try {
64
- await fs.access(dir);
65
- const dirents = await fs.readdir(dir, { withFileTypes: true });
66
- let entries = dirents.map(d => ({
67
- name: d.name,
68
- isDirectory: d.isDirectory()
69
- }));
77
+ await _promises.access(dir);
78
+ const dirents = await _promises.readdir(dir, {
79
+ withFileTypes: true
80
+ });
81
+ let entries = dirents.map((d)=>({
82
+ name: d.name,
83
+ isDirectory: d.isDirectory()
84
+ }));
70
85
  if (!this.showHidden) {
71
- entries = entries.filter(e => !e.name.startsWith('.'));
86
+ entries = entries.filter((e)=>!e.name.startsWith('.'));
72
87
  }
73
- entries.sort((a, b) => {
88
+ entries.sort((a, b)=>{
74
89
  if (a.isDirectory === b.isDirectory) {
75
90
  return a.name.localeCompare(b.name);
76
91
  }
@@ -79,25 +94,21 @@ class BreadcrumbPrompt extends base_1.Prompt {
79
94
  this.currentEntries = entries;
80
95
  if (this.currentEntries.length === 0) {
81
96
  this.cursor = 0;
82
- }
83
- else if (this.cursor >= this.currentEntries.length) {
97
+ } else if (this.cursor >= this.currentEntries.length) {
84
98
  this.cursor = this.currentEntries.length - 1;
85
99
  }
86
- }
87
- catch (err) {
100
+ } catch (err) {
88
101
  this.error = err.message || 'Error reading directory';
89
102
  this.currentEntries = [];
90
- }
91
- finally {
103
+ } finally{
92
104
  this.isLoading = false;
93
105
  this.render(false);
94
106
  }
95
107
  }
96
108
  async drillDown() {
97
109
  const entry = this.currentEntries[this.cursor];
98
- if (!entry || !entry.isDirectory)
99
- return;
100
- const nextPath = path.join(this.currentPath, entry.name);
110
+ if (!entry || !entry.isDirectory) return;
111
+ const nextPath = _path.join(this.currentPath, entry.name);
101
112
  this.stack.push({
102
113
  path: this.currentPath,
103
114
  cursor: this.cursor,
@@ -109,8 +120,7 @@ class BreadcrumbPrompt extends base_1.Prompt {
109
120
  await this.loadDirectory(nextPath);
110
121
  }
111
122
  async goUp() {
112
- if (this.stack.length === 0)
113
- return;
123
+ if (this.stack.length === 0) return;
114
124
  const prevState = this.stack.pop();
115
125
  if (prevState) {
116
126
  this.currentPath = prevState.path;
@@ -123,13 +133,16 @@ class BreadcrumbPrompt extends base_1.Prompt {
123
133
  const width = this.stdout.columns || 80;
124
134
  let output = '';
125
135
  // --- Breadcrumb Line Construction ---
126
- const relative = path.relative(this.root, this.currentPath);
127
- const parts = relative ? relative.split(path.sep) : [];
128
- const rootName = path.basename(this.root);
129
- const segments = [rootName, ...parts];
136
+ const relative = _path.relative(this.root, this.currentPath);
137
+ const parts = relative ? relative.split(_path.sep) : [];
138
+ const rootName = _path.basename(this.root);
139
+ const segments = [
140
+ rootName,
141
+ ...parts
142
+ ];
130
143
  // Calculate available space for path
131
144
  // Prefix: "? Message: "
132
- const prefix = `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} `;
145
+ const prefix = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
133
146
  const prefixWidth = this.stripAnsi(prefix).length;
134
147
  const availableWidth = Math.max(20, width - prefixWidth - 5); // Reserve 5 chars buffer
135
148
  let breadcrumbStr = segments.join(this.separator);
@@ -137,10 +150,9 @@ class BreadcrumbPrompt extends base_1.Prompt {
137
150
  // Truncate logic: Keep root and tail segments that fit
138
151
  // e.g., root > ... > folder > subfolder
139
152
  let suffix = segments[segments.length - 1];
140
- for (let i = segments.length - 2; i >= 1; i--) { // Stop before root (index 0)
153
+ for(let i = segments.length - 2; i >= 1; i--){
141
154
  const next = segments[i] + this.separator + suffix;
142
- if (next.length + 4 > availableWidth)
143
- break; // +4 for "... "
155
+ if (next.length + 4 > availableWidth) break; // +4 for "... "
144
156
  suffix = next;
145
157
  }
146
158
  breadcrumbStr = `${segments[0]}${this.separator}...${this.separator}${suffix}`;
@@ -152,20 +164,16 @@ class BreadcrumbPrompt extends base_1.Prompt {
152
164
  output += `${prefix}${breadcrumbStr}\n`;
153
165
  // --- Content / List ---
154
166
  if (this.isLoading) {
155
- output += ` ${theme_1.theme.muted}Loading...${ansi_1.ANSI.RESET}`;
156
- }
157
- else if (this.error) {
158
- output += ` ${theme_1.theme.error}${this.error}${ansi_1.ANSI.RESET}`;
159
- }
160
- else if (this.currentEntries.length === 0) {
161
- output += ` ${theme_1.theme.muted}(Empty directory)${ansi_1.ANSI.RESET}\n ${theme_1.theme.muted}(Backspace to go back)${ansi_1.ANSI.RESET}`;
162
- }
163
- else {
167
+ output += ` ${_theme.theme.muted}Loading...${_ansi.ANSI.RESET}`;
168
+ } else if (this.error) {
169
+ output += ` ${_theme.theme.error}${this.error}${_ansi.ANSI.RESET}`;
170
+ } else if (this.currentEntries.length === 0) {
171
+ output += ` ${_theme.theme.muted}(Empty directory)${_ansi.ANSI.RESET}\n ${_theme.theme.muted}(Backspace to go back)${_ansi.ANSI.RESET}`;
172
+ } else {
164
173
  // Adjust Scroll Top
165
174
  if (this.cursor < this.scrollTop) {
166
175
  this.scrollTop = this.cursor;
167
- }
168
- else if (this.cursor >= this.scrollTop + this.pageSize) {
176
+ } else if (this.cursor >= this.scrollTop + this.pageSize) {
169
177
  this.scrollTop = this.cursor - this.pageSize + 1;
170
178
  }
171
179
  // Sanity check
@@ -173,40 +181,34 @@ class BreadcrumbPrompt extends base_1.Prompt {
173
181
  this.scrollTop = Math.max(0, this.currentEntries.length - this.pageSize);
174
182
  }
175
183
  const visibleEntries = this.currentEntries.slice(this.scrollTop, this.scrollTop + this.pageSize);
176
- visibleEntries.forEach((entry, index) => {
184
+ visibleEntries.forEach((entry, index)=>{
177
185
  const absoluteIndex = this.scrollTop + index;
178
186
  const isSelected = absoluteIndex === this.cursor;
179
187
  const icon = entry.isDirectory ? '📂' : '📄';
180
188
  let line = '';
181
189
  if (isSelected) {
182
- line += `${theme_1.theme.main}${symbols_1.symbols.pointer} ${icon} ${entry.name}${ansi_1.ANSI.RESET}`;
183
- }
184
- else {
190
+ line += `${_theme.theme.main}${_symbols.symbols.pointer} ${icon} ${entry.name}${_ansi.ANSI.RESET}`;
191
+ } else {
185
192
  line += ` ${icon} ${entry.name}`;
186
193
  }
187
- if (index > 0 || index === 0)
188
- output += line;
189
- if (index < visibleEntries.length - 1)
190
- output += '\n';
194
+ if (index > 0 || index === 0) output += line;
195
+ if (index < visibleEntries.length - 1) output += '\n';
191
196
  });
192
- // Add a hint about navigation if plenty of space?
193
- // Optional: output += `\n${theme.muted}(Use Arrow Keys, Enter to Select, Backspace to Up)${ANSI.RESET}`;
197
+ // Add a hint about navigation if plenty of space?
198
+ // Optional: output += `\n${theme.muted}(Use Arrow Keys, Enter to Select, Backspace to Up)${ANSI.RESET}`;
194
199
  }
195
200
  this.renderFrame(output);
196
201
  }
197
202
  handleInput(char, _key) {
198
- if (this.isLoading)
199
- return;
203
+ if (this.isLoading) return;
200
204
  // Enter
201
205
  if (char === '\r' || char === '\n') {
202
- if (this.currentEntries.length === 0)
203
- return;
206
+ if (this.currentEntries.length === 0) return;
204
207
  const entry = this.currentEntries[this.cursor];
205
208
  if (entry.isDirectory) {
206
209
  this.drillDown();
207
- }
208
- else {
209
- const fullPath = path.join(this.currentPath, entry.name);
210
+ } else {
211
+ const fullPath = _path.join(this.currentPath, entry.name);
210
212
  this.submit(fullPath);
211
213
  }
212
214
  return;
@@ -226,16 +228,14 @@ class BreadcrumbPrompt extends base_1.Prompt {
226
228
  }
227
229
  // Tab (Next)
228
230
  if (char === '\t') {
229
- if (this.currentEntries.length === 0)
230
- return;
231
+ if (this.currentEntries.length === 0) return;
231
232
  this.cursor = (this.cursor + 1) % this.currentEntries.length;
232
233
  this.render(false);
233
234
  return;
234
235
  }
235
236
  // Shift+Tab (Prev)
236
237
  if (char === '\x1b[Z') {
237
- if (this.currentEntries.length === 0)
238
- return;
238
+ if (this.currentEntries.length === 0) return;
239
239
  this.cursor = (this.cursor - 1 + this.currentEntries.length) % this.currentEntries.length;
240
240
  this.render(false);
241
241
  return;
@@ -245,8 +245,7 @@ class BreadcrumbPrompt extends base_1.Prompt {
245
245
  if (this.cursor > 0) {
246
246
  this.cursor--;
247
247
  this.render(false);
248
- }
249
- else if (this.currentEntries.length > 0) {
248
+ } else if (this.currentEntries.length > 0) {
250
249
  // Cycle to bottom?
251
250
  this.cursor = this.currentEntries.length - 1;
252
251
  this.render(false);
@@ -258,8 +257,7 @@ class BreadcrumbPrompt extends base_1.Prompt {
258
257
  if (this.cursor < this.currentEntries.length - 1) {
259
258
  this.cursor++;
260
259
  this.render(false);
261
- }
262
- else if (this.currentEntries.length > 0) {
260
+ } else if (this.currentEntries.length > 0) {
263
261
  // Cycle to top?
264
262
  this.cursor = 0;
265
263
  this.render(false);
@@ -281,16 +279,14 @@ class BreadcrumbPrompt extends base_1.Prompt {
281
279
  }
282
280
  handleMouse(_event) {
283
281
  // Scroll up and down
284
- if (this.isLoading)
285
- return;
282
+ if (this.isLoading) return;
286
283
  if (_event.action === 'scroll') {
287
284
  if (_event.scroll === 'up') {
288
285
  if (this.cursor > 0) {
289
286
  this.cursor--;
290
287
  this.render(false);
291
288
  }
292
- }
293
- else if (_event.scroll === 'down') {
289
+ } else if (_event.scroll === 'down') {
294
290
  if (this.cursor < this.currentEntries.length - 1) {
295
291
  this.cursor++;
296
292
  this.render(false);
@@ -298,5 +294,14 @@ class BreadcrumbPrompt extends base_1.Prompt {
298
294
  }
299
295
  }
300
296
  }
301
- }
302
- exports.BreadcrumbPrompt = BreadcrumbPrompt;
297
+ constructor(options){
298
+ super(options), _define_property(this, "stack", []), _define_property(this, "currentEntries", []), _define_property(this, "cursor", 0), _define_property(this, "scrollTop", 0), _define_property(this, "root", void 0), _define_property(this, "currentPath", void 0), _define_property(this, "separator", void 0), _define_property(this, "showHidden", void 0), _define_property(this, "isLoading", false), _define_property(this, "error", null), _define_property(this, "pageSize", 10);
299
+ this.root = _path.resolve(options.root || process.cwd());
300
+ this.currentPath = this.root;
301
+ this.separator = options.separator || ' › ';
302
+ this.showHidden = options.showHidden || false;
303
+ this.loadDirectory(this.currentPath);
304
+ }
305
+ };
306
+
307
+ //# sourceMappingURL=breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/breadcrumb.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { BreadcrumbOptions, MouseEvent } from '../types';\nimport { ANSI } from '../ansi';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\ninterface StackItem {\n path: string;\n cursor: number;\n scrollTop: number;\n}\n\ninterface DirEntry {\n name: string;\n isDirectory: boolean;\n}\n\nexport class BreadcrumbPrompt extends Prompt<string, BreadcrumbOptions> {\n protected stack: StackItem[] = [];\n protected currentEntries: DirEntry[] = [];\n protected cursor: number = 0;\n protected scrollTop: number = 0;\n protected root: string;\n protected currentPath: string;\n protected separator: string;\n protected showHidden: boolean;\n protected isLoading: boolean = false;\n protected error: string | null = null;\n protected readonly pageSize: number = 10;\n\n constructor(options: BreadcrumbOptions) {\n super(options);\n this.root = path.resolve(options.root || process.cwd());\n this.currentPath = this.root;\n this.separator = options.separator || ' › ';\n this.showHidden = options.showHidden || false;\n\n this.loadDirectory(this.currentPath);\n }\n\n protected async loadDirectory(dir: string) {\n this.isLoading = true;\n this.error = null;\n this.render(false);\n\n try {\n await fs.access(dir);\n\n const dirents = await fs.readdir(dir, { withFileTypes: true });\n let entries = dirents.map(d => ({\n name: d.name,\n isDirectory: d.isDirectory()\n }));\n\n if (!this.showHidden) {\n entries = entries.filter(e => !e.name.startsWith('.'));\n }\n\n entries.sort((a, b) => {\n if (a.isDirectory === b.isDirectory) {\n return a.name.localeCompare(b.name);\n }\n return a.isDirectory ? -1 : 1;\n });\n\n this.currentEntries = entries;\n\n if (this.currentEntries.length === 0) {\n this.cursor = 0;\n } else if (this.cursor >= this.currentEntries.length) {\n this.cursor = this.currentEntries.length - 1;\n }\n } catch (err: any) {\n this.error = err.message || 'Error reading directory';\n this.currentEntries = [];\n } finally {\n this.isLoading = false;\n this.render(false);\n }\n }\n\n protected async drillDown() {\n const entry = this.currentEntries[this.cursor];\n if (!entry || !entry.isDirectory) return;\n\n const nextPath = path.join(this.currentPath, entry.name);\n\n this.stack.push({\n path: this.currentPath,\n cursor: this.cursor,\n scrollTop: this.scrollTop\n });\n\n this.currentPath = nextPath;\n this.cursor = 0;\n this.scrollTop = 0;\n\n await this.loadDirectory(nextPath);\n }\n\n protected async goUp() {\n if (this.stack.length === 0) return;\n\n const prevState = this.stack.pop();\n if (prevState) {\n this.currentPath = prevState.path;\n this.cursor = prevState.cursor;\n this.scrollTop = prevState.scrollTop;\n\n await this.loadDirectory(this.currentPath);\n }\n }\n\n protected render(_firstRender: boolean): void {\n const width = this.stdout.columns || 80;\n let output = '';\n\n // --- Breadcrumb Line Construction ---\n const relative = path.relative(this.root, this.currentPath);\n const parts = relative ? relative.split(path.sep) : [];\n const rootName = path.basename(this.root);\n const segments = [rootName, ...parts];\n\n // Calculate available space for path\n // Prefix: \"? Message: \"\n const prefix = `${theme.success}?${ANSI.RESET} ${theme.title}${this.options.message}${ANSI.RESET} `;\n const prefixWidth = this.stripAnsi(prefix).length;\n const availableWidth = Math.max(20, width - prefixWidth - 5); // Reserve 5 chars buffer\n\n let breadcrumbStr = segments.join(this.separator);\n\n if (breadcrumbStr.length > availableWidth) {\n // Truncate logic: Keep root and tail segments that fit\n // e.g., root > ... > folder > subfolder\n let suffix = segments[segments.length - 1];\n for (let i = segments.length - 2; i >= 1; i--) { // Stop before root (index 0)\n const next = segments[i] + this.separator + suffix;\n if (next.length + 4 > availableWidth) break; // +4 for \"... \"\n suffix = next;\n }\n breadcrumbStr = `${segments[0]}${this.separator}...${this.separator}${suffix}`;\n\n // If even that is too long (extreme case), just truncate tail\n if (breadcrumbStr.length > availableWidth) {\n breadcrumbStr = '...' + breadcrumbStr.slice(-(availableWidth - 3));\n }\n }\n\n output += `${prefix}${breadcrumbStr}\\n`;\n\n // --- Content / List ---\n if (this.isLoading) {\n output += ` ${theme.muted}Loading...${ANSI.RESET}`;\n } else if (this.error) {\n output += ` ${theme.error}${this.error}${ANSI.RESET}`;\n } else if (this.currentEntries.length === 0) {\n output += ` ${theme.muted}(Empty directory)${ANSI.RESET}\\n ${theme.muted}(Backspace to go back)${ANSI.RESET}`;\n } else {\n // Adjust Scroll Top\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 // Sanity check\n if (this.scrollTop > this.currentEntries.length - 1) {\n this.scrollTop = Math.max(0, this.currentEntries.length - this.pageSize);\n }\n\n const visibleEntries = this.currentEntries.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleEntries.forEach((entry, index) => {\n const absoluteIndex = this.scrollTop + index;\n const isSelected = absoluteIndex === this.cursor;\n const icon = entry.isDirectory ? '📂' : '📄';\n\n let line = '';\n if (isSelected) {\n line += `${theme.main}${symbols.pointer} ${icon} ${entry.name}${ANSI.RESET}`;\n } else {\n line += ` ${icon} ${entry.name}`;\n }\n\n if (index > 0 || index === 0) output += line;\n if (index < visibleEntries.length - 1) output += '\\n';\n });\n\n // Add a hint about navigation if plenty of space? \n // Optional: output += `\\n${theme.muted}(Use Arrow Keys, Enter to Select, Backspace to Up)${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n if (this.isLoading) return;\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n if (this.currentEntries.length === 0) return;\n\n const entry = this.currentEntries[this.cursor];\n if (entry.isDirectory) {\n this.drillDown();\n } else {\n const fullPath = path.join(this.currentPath, entry.name);\n this.submit(fullPath);\n }\n return;\n }\n\n // Backspace or Left Arrow\n if (char === '\\x7f' || char === '\\x08' || this.isLeft(char)) {\n this.goUp();\n return;\n }\n\n // Right Arrow\n if (this.isRight(char)) {\n const entry = this.currentEntries[this.cursor];\n if (entry && entry.isDirectory) {\n this.drillDown();\n }\n return;\n }\n\n // Tab (Next)\n if (char === '\\t') {\n if (this.currentEntries.length === 0) return;\n this.cursor = (this.cursor + 1) % this.currentEntries.length;\n this.render(false);\n return;\n }\n\n // Shift+Tab (Prev)\n if (char === '\\x1b[Z') {\n if (this.currentEntries.length === 0) return;\n this.cursor = (this.cursor - 1 + this.currentEntries.length) % this.currentEntries.length;\n this.render(false);\n return;\n }\n\n // Up\n if (this.isUp(char)) {\n if (this.cursor > 0) {\n this.cursor--;\n this.render(false);\n } else if (this.currentEntries.length > 0) {\n // Cycle to bottom?\n this.cursor = this.currentEntries.length - 1;\n this.render(false);\n }\n return;\n }\n\n // Down\n if (this.isDown(char)) {\n if (this.cursor < this.currentEntries.length - 1) {\n this.cursor++;\n this.render(false);\n } else if (this.currentEntries.length > 0) {\n // Cycle to top?\n this.cursor = 0;\n this.render(false);\n }\n return;\n }\n\n // Page Up\n if (char === '\\x1b[5~') {\n this.cursor = Math.max(0, this.cursor - this.pageSize);\n this.render(false);\n return;\n }\n\n // Page Down\n if (char === '\\x1b[6~') {\n this.cursor = Math.min(this.currentEntries.length - 1, this.cursor + this.pageSize);\n this.render(false);\n return;\n }\n }\n\n protected handleMouse(_event: MouseEvent): void {\n // Scroll up and down\n if (this.isLoading) return;\n\n if (_event.action === 'scroll') {\n if (_event.scroll === 'up') {\n if (this.cursor > 0) {\n this.cursor--;\n this.render(false);\n }\n } else if (_event.scroll === 'down') {\n if (this.cursor < this.currentEntries.length - 1) {\n this.cursor++;\n this.render(false);\n }\n }\n }\n }\n}\n"],"names":["BreadcrumbPrompt","Prompt","loadDirectory","dir","isLoading","error","render","fs","access","dirents","readdir","withFileTypes","entries","map","d","name","isDirectory","showHidden","filter","e","startsWith","sort","a","b","localeCompare","currentEntries","length","cursor","err","message","drillDown","entry","nextPath","path","join","currentPath","stack","push","scrollTop","goUp","prevState","pop","_firstRender","width","stdout","columns","output","relative","root","parts","split","sep","rootName","basename","segments","prefix","theme","success","ANSI","RESET","title","options","prefixWidth","stripAnsi","availableWidth","Math","max","breadcrumbStr","separator","suffix","i","next","slice","muted","pageSize","visibleEntries","forEach","index","absoluteIndex","isSelected","icon","line","main","symbols","pointer","renderFrame","handleInput","char","_key","fullPath","submit","isLeft","isRight","isUp","isDown","min","handleMouse","_event","action","scroll","resolve","process","cwd"],"mappings":";;;;+BAmBaA;;;eAAAA;;;sBAnBU;sBAEF;uBACC;yBACE;kEACJ;8DACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaf,IAAA,AAAMA,mBAAN,MAAMA,yBAAyBC,YAAM;IAuBxC,MAAgBC,cAAcC,GAAW,EAAE;QACvC,IAAI,CAACC,SAAS,GAAG;QACjB,IAAI,CAACC,KAAK,GAAG;QACb,IAAI,CAACC,MAAM,CAAC;QAEZ,IAAI;YACA,MAAMC,UAAGC,MAAM,CAACL;YAEhB,MAAMM,UAAU,MAAMF,UAAGG,OAAO,CAACP,KAAK;gBAAEQ,eAAe;YAAK;YAC5D,IAAIC,UAAUH,QAAQI,GAAG,CAACC,CAAAA,IAAM,CAAA;oBAC5BC,MAAMD,EAAEC,IAAI;oBACZC,aAAaF,EAAEE,WAAW;gBAC9B,CAAA;YAEA,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;gBAClBL,UAAUA,QAAQM,MAAM,CAACC,CAAAA,IAAK,CAACA,EAAEJ,IAAI,CAACK,UAAU,CAAC;YACrD;YAEAR,QAAQS,IAAI,CAAC,CAACC,GAAGC;gBACb,IAAID,EAAEN,WAAW,KAAKO,EAAEP,WAAW,EAAE;oBACjC,OAAOM,EAAEP,IAAI,CAACS,aAAa,CAACD,EAAER,IAAI;gBACtC;gBACA,OAAOO,EAAEN,WAAW,GAAG,CAAC,IAAI;YAChC;YAEA,IAAI,CAACS,cAAc,GAAGb;YAEtB,IAAI,IAAI,CAACa,cAAc,CAACC,MAAM,KAAK,GAAG;gBAClC,IAAI,CAACC,MAAM,GAAG;YAClB,OAAO,IAAI,IAAI,CAACA,MAAM,IAAI,IAAI,CAACF,cAAc,CAACC,MAAM,EAAE;gBAClD,IAAI,CAACC,MAAM,GAAG,IAAI,CAACF,cAAc,CAACC,MAAM,GAAG;YAC/C;QACJ,EAAE,OAAOE,KAAU;YACf,IAAI,CAACvB,KAAK,GAAGuB,IAAIC,OAAO,IAAI;YAC5B,IAAI,CAACJ,cAAc,GAAG,EAAE;QAC5B,SAAU;YACN,IAAI,CAACrB,SAAS,GAAG;YACjB,IAAI,CAACE,MAAM,CAAC;QAChB;IACJ;IAEA,MAAgBwB,YAAY;QACxB,MAAMC,QAAQ,IAAI,CAACN,cAAc,CAAC,IAAI,CAACE,MAAM,CAAC;QAC9C,IAAI,CAACI,SAAS,CAACA,MAAMf,WAAW,EAAE;QAElC,MAAMgB,WAAWC,MAAKC,IAAI,CAAC,IAAI,CAACC,WAAW,EAAEJ,MAAMhB,IAAI;QAEvD,IAAI,CAACqB,KAAK,CAACC,IAAI,CAAC;YACZJ,MAAM,IAAI,CAACE,WAAW;YACtBR,QAAQ,IAAI,CAACA,MAAM;YACnBW,WAAW,IAAI,CAACA,SAAS;QAC7B;QAEA,IAAI,CAACH,WAAW,GAAGH;QACnB,IAAI,CAACL,MAAM,GAAG;QACd,IAAI,CAACW,SAAS,GAAG;QAEjB,MAAM,IAAI,CAACpC,aAAa,CAAC8B;IAC7B;IAEA,MAAgBO,OAAO;QACnB,IAAI,IAAI,CAACH,KAAK,CAACV,MAAM,KAAK,GAAG;QAE7B,MAAMc,YAAY,IAAI,CAACJ,KAAK,CAACK,GAAG;QAChC,IAAID,WAAW;YACX,IAAI,CAACL,WAAW,GAAGK,UAAUP,IAAI;YACjC,IAAI,CAACN,MAAM,GAAGa,UAAUb,MAAM;YAC9B,IAAI,CAACW,SAAS,GAAGE,UAAUF,SAAS;YAEpC,MAAM,IAAI,CAACpC,aAAa,CAAC,IAAI,CAACiC,WAAW;QAC7C;IACJ;IAEU7B,OAAOoC,YAAqB,EAAQ;QAC1C,MAAMC,QAAQ,IAAI,CAACC,MAAM,CAACC,OAAO,IAAI;QACrC,IAAIC,SAAS;QAEb,uCAAuC;QACvC,MAAMC,WAAWd,MAAKc,QAAQ,CAAC,IAAI,CAACC,IAAI,EAAE,IAAI,CAACb,WAAW;QAC1D,MAAMc,QAAQF,WAAWA,SAASG,KAAK,CAACjB,MAAKkB,GAAG,IAAI,EAAE;QACtD,MAAMC,WAAWnB,MAAKoB,QAAQ,CAAC,IAAI,CAACL,IAAI;QACxC,MAAMM,WAAW;YAACF;eAAaH;SAAM;QAErC,qCAAqC;QACrC,wBAAwB;QACxB,MAAMM,SAAS,GAAGC,YAAK,CAACC,OAAO,CAAC,CAAC,EAAEC,UAAI,CAACC,KAAK,CAAC,CAAC,EAAEH,YAAK,CAACI,KAAK,GAAG,IAAI,CAACC,OAAO,CAAChC,OAAO,GAAG6B,UAAI,CAACC,KAAK,CAAC,CAAC,CAAC;QACnG,MAAMG,cAAc,IAAI,CAACC,SAAS,CAACR,QAAQ7B,MAAM;QACjD,MAAMsC,iBAAiBC,KAAKC,GAAG,CAAC,IAAIvB,QAAQmB,cAAc,IAAI,yBAAyB;QAEvF,IAAIK,gBAAgBb,SAASpB,IAAI,CAAC,IAAI,CAACkC,SAAS;QAEhD,IAAID,cAAczC,MAAM,GAAGsC,gBAAgB;YACvC,uDAAuD;YACvD,wCAAwC;YACxC,IAAIK,SAASf,QAAQ,CAACA,SAAS5B,MAAM,GAAG,EAAE;YAC1C,IAAK,IAAI4C,IAAIhB,SAAS5B,MAAM,GAAG,GAAG4C,KAAK,GAAGA,IAAK;gBAC3C,MAAMC,OAAOjB,QAAQ,CAACgB,EAAE,GAAG,IAAI,CAACF,SAAS,GAAGC;gBAC5C,IAAIE,KAAK7C,MAAM,GAAG,IAAIsC,gBAAgB,OAAO,gBAAgB;gBAC7DK,SAASE;YACb;YACAJ,gBAAgB,GAAGb,QAAQ,CAAC,EAAE,GAAG,IAAI,CAACc,SAAS,CAAC,GAAG,EAAE,IAAI,CAACA,SAAS,GAAGC,QAAQ;YAE9E,8DAA8D;YAC9D,IAAIF,cAAczC,MAAM,GAAGsC,gBAAgB;gBACvCG,gBAAgB,QAAQA,cAAcK,KAAK,CAAC,CAAER,CAAAA,iBAAiB,CAAA;YACnE;QACJ;QAEAlB,UAAU,GAAGS,SAASY,cAAc,EAAE,CAAC;QAEvC,yBAAyB;QACzB,IAAI,IAAI,CAAC/D,SAAS,EAAE;YAChB0C,UAAU,CAAC,EAAE,EAAEU,YAAK,CAACiB,KAAK,CAAC,UAAU,EAAEf,UAAI,CAACC,KAAK,EAAE;QACvD,OAAO,IAAI,IAAI,CAACtD,KAAK,EAAE;YACnByC,UAAU,CAAC,EAAE,EAAEU,YAAK,CAACnD,KAAK,GAAG,IAAI,CAACA,KAAK,GAAGqD,UAAI,CAACC,KAAK,EAAE;QAC1D,OAAO,IAAI,IAAI,CAAClC,cAAc,CAACC,MAAM,KAAK,GAAG;YACzCoB,UAAU,CAAC,EAAE,EAAEU,YAAK,CAACiB,KAAK,CAAC,iBAAiB,EAAEf,UAAI,CAACC,KAAK,CAAC,IAAI,EAAEH,YAAK,CAACiB,KAAK,CAAC,sBAAsB,EAAEf,UAAI,CAACC,KAAK,EAAE;QACnH,OAAO;YACH,oBAAoB;YACpB,IAAI,IAAI,CAAChC,MAAM,GAAG,IAAI,CAACW,SAAS,EAAE;gBAC9B,IAAI,CAACA,SAAS,GAAG,IAAI,CAACX,MAAM;YAChC,OAAO,IAAI,IAAI,CAACA,MAAM,IAAI,IAAI,CAACW,SAAS,GAAG,IAAI,CAACoC,QAAQ,EAAE;gBACtD,IAAI,CAACpC,SAAS,GAAG,IAAI,CAACX,MAAM,GAAG,IAAI,CAAC+C,QAAQ,GAAG;YACnD;YACA,eAAe;YACf,IAAI,IAAI,CAACpC,SAAS,GAAG,IAAI,CAACb,cAAc,CAACC,MAAM,GAAG,GAAG;gBACjD,IAAI,CAACY,SAAS,GAAG2B,KAAKC,GAAG,CAAC,GAAG,IAAI,CAACzC,cAAc,CAACC,MAAM,GAAG,IAAI,CAACgD,QAAQ;YAC3E;YAEA,MAAMC,iBAAiB,IAAI,CAAClD,cAAc,CAAC+C,KAAK,CAAC,IAAI,CAAClC,SAAS,EAAE,IAAI,CAACA,SAAS,GAAG,IAAI,CAACoC,QAAQ;YAE/FC,eAAeC,OAAO,CAAC,CAAC7C,OAAO8C;gBAC3B,MAAMC,gBAAgB,IAAI,CAACxC,SAAS,GAAGuC;gBACvC,MAAME,aAAaD,kBAAkB,IAAI,CAACnD,MAAM;gBAChD,MAAMqD,OAAOjD,MAAMf,WAAW,GAAG,OAAO;gBAExC,IAAIiE,OAAO;gBACX,IAAIF,YAAY;oBACZE,QAAQ,GAAGzB,YAAK,CAAC0B,IAAI,GAAGC,gBAAO,CAACC,OAAO,CAAC,CAAC,EAAEJ,KAAK,CAAC,EAAEjD,MAAMhB,IAAI,GAAG2C,UAAI,CAACC,KAAK,EAAE;gBAChF,OAAO;oBACHsB,QAAQ,CAAC,EAAE,EAAED,KAAK,CAAC,EAAEjD,MAAMhB,IAAI,EAAE;gBACrC;gBAEA,IAAI8D,QAAQ,KAAKA,UAAU,GAAG/B,UAAUmC;gBACxC,IAAIJ,QAAQF,eAAejD,MAAM,GAAG,GAAGoB,UAAU;YACrD;QAEA,mDAAmD;QACnD,yGAAyG;QAC7G;QAEA,IAAI,CAACuC,WAAW,CAACvC;IACrB;IAEUwC,YAAYC,IAAY,EAAEC,IAAY,EAAQ;QACpD,IAAI,IAAI,CAACpF,SAAS,EAAE;QAEpB,QAAQ;QACR,IAAImF,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,IAAI,CAAC9D,cAAc,CAACC,MAAM,KAAK,GAAG;YAEtC,MAAMK,QAAQ,IAAI,CAACN,cAAc,CAAC,IAAI,CAACE,MAAM,CAAC;YAC9C,IAAII,MAAMf,WAAW,EAAE;gBACnB,IAAI,CAACc,SAAS;YAClB,OAAO;gBACH,MAAM2D,WAAWxD,MAAKC,IAAI,CAAC,IAAI,CAACC,WAAW,EAAEJ,MAAMhB,IAAI;gBACvD,IAAI,CAAC2E,MAAM,CAACD;YAChB;YACA;QACJ;QAEA,0BAA0B;QAC1B,IAAIF,SAAS,UAAUA,SAAS,UAAU,IAAI,CAACI,MAAM,CAACJ,OAAO;YACzD,IAAI,CAAChD,IAAI;YACT;QACJ;QAEA,cAAc;QACd,IAAI,IAAI,CAACqD,OAAO,CAACL,OAAO;YACpB,MAAMxD,QAAQ,IAAI,CAACN,cAAc,CAAC,IAAI,CAACE,MAAM,CAAC;YAC9C,IAAII,SAASA,MAAMf,WAAW,EAAE;gBAC5B,IAAI,CAACc,SAAS;YAClB;YACA;QACJ;QAEA,aAAa;QACb,IAAIyD,SAAS,MAAM;YACf,IAAI,IAAI,CAAC9D,cAAc,CAACC,MAAM,KAAK,GAAG;YACtC,IAAI,CAACC,MAAM,GAAG,AAAC,CAAA,IAAI,CAACA,MAAM,GAAG,CAAA,IAAK,IAAI,CAACF,cAAc,CAACC,MAAM;YAC5D,IAAI,CAACpB,MAAM,CAAC;YACZ;QACJ;QAEA,mBAAmB;QACnB,IAAIiF,SAAS,UAAU;YACnB,IAAI,IAAI,CAAC9D,cAAc,CAACC,MAAM,KAAK,GAAG;YACtC,IAAI,CAACC,MAAM,GAAG,AAAC,CAAA,IAAI,CAACA,MAAM,GAAG,IAAI,IAAI,CAACF,cAAc,CAACC,MAAM,AAAD,IAAK,IAAI,CAACD,cAAc,CAACC,MAAM;YACzF,IAAI,CAACpB,MAAM,CAAC;YACZ;QACJ;QAEA,KAAK;QACL,IAAI,IAAI,CAACuF,IAAI,CAACN,OAAO;YACjB,IAAI,IAAI,CAAC5D,MAAM,GAAG,GAAG;gBACjB,IAAI,CAACA,MAAM;gBACX,IAAI,CAACrB,MAAM,CAAC;YAChB,OAAO,IAAI,IAAI,CAACmB,cAAc,CAACC,MAAM,GAAG,GAAG;gBACvC,mBAAmB;gBACnB,IAAI,CAACC,MAAM,GAAG,IAAI,CAACF,cAAc,CAACC,MAAM,GAAG;gBAC3C,IAAI,CAACpB,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,OAAO;QACP,IAAI,IAAI,CAACwF,MAAM,CAACP,OAAO;YACnB,IAAI,IAAI,CAAC5D,MAAM,GAAG,IAAI,CAACF,cAAc,CAACC,MAAM,GAAG,GAAG;gBAC9C,IAAI,CAACC,MAAM;gBACX,IAAI,CAACrB,MAAM,CAAC;YAChB,OAAO,IAAI,IAAI,CAACmB,cAAc,CAACC,MAAM,GAAG,GAAG;gBACvC,gBAAgB;gBAChB,IAAI,CAACC,MAAM,GAAG;gBACd,IAAI,CAACrB,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,UAAU;QACV,IAAIiF,SAAS,WAAW;YACpB,IAAI,CAAC5D,MAAM,GAAGsC,KAAKC,GAAG,CAAC,GAAG,IAAI,CAACvC,MAAM,GAAG,IAAI,CAAC+C,QAAQ;YACrD,IAAI,CAACpE,MAAM,CAAC;YACZ;QACJ;QAEA,YAAY;QACZ,IAAIiF,SAAS,WAAW;YACpB,IAAI,CAAC5D,MAAM,GAAGsC,KAAK8B,GAAG,CAAC,IAAI,CAACtE,cAAc,CAACC,MAAM,GAAG,GAAG,IAAI,CAACC,MAAM,GAAG,IAAI,CAAC+C,QAAQ;YAClF,IAAI,CAACpE,MAAM,CAAC;YACZ;QACJ;IACJ;IAEU0F,YAAYC,MAAkB,EAAQ;QAC5C,qBAAqB;QACrB,IAAI,IAAI,CAAC7F,SAAS,EAAE;QAEpB,IAAI6F,OAAOC,MAAM,KAAK,UAAU;YAC5B,IAAID,OAAOE,MAAM,KAAK,MAAM;gBACxB,IAAI,IAAI,CAACxE,MAAM,GAAG,GAAG;oBACjB,IAAI,CAACA,MAAM;oBACX,IAAI,CAACrB,MAAM,CAAC;gBAChB;YACJ,OAAO,IAAI2F,OAAOE,MAAM,KAAK,QAAQ;gBACjC,IAAI,IAAI,CAACxE,MAAM,GAAG,IAAI,CAACF,cAAc,CAACC,MAAM,GAAG,GAAG;oBAC9C,IAAI,CAACC,MAAM;oBACX,IAAI,CAACrB,MAAM,CAAC;gBAChB;YACJ;QACJ;IACJ;IA9QA,YAAYuD,OAA0B,CAAE;QACpC,KAAK,CAACA,UAbV,uBAAUzB,SAAqB,EAAE,GACjC,uBAAUX,kBAA6B,EAAE,GACzC,uBAAUE,UAAiB,IAC3B,uBAAUW,aAAoB,IAC9B,uBAAUU,QAAV,KAAA,IACA,uBAAUb,eAAV,KAAA,IACA,uBAAUiC,aAAV,KAAA,IACA,uBAAUnD,cAAV,KAAA,IACA,uBAAUb,aAAqB,QAC/B,uBAAUC,SAAuB,OACjC,uBAAmBqE,YAAmB;QAIlC,IAAI,CAAC1B,IAAI,GAAGf,MAAKmE,OAAO,CAACvC,QAAQb,IAAI,IAAIqD,QAAQC,GAAG;QACpD,IAAI,CAACnE,WAAW,GAAG,IAAI,CAACa,IAAI;QAC5B,IAAI,CAACoB,SAAS,GAAGP,QAAQO,SAAS,IAAI;QACtC,IAAI,CAACnD,UAAU,GAAG4C,QAAQ5C,UAAU,IAAI;QAExC,IAAI,CAACf,aAAa,CAAC,IAAI,CAACiC,WAAW;IACvC;AAuQJ"}
@@ -1,57 +1,64 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BytePrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- const symbols_1 = require("../symbols");
8
- const UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
9
- class BytePrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.inputValue = 0;
13
- this.buffer = '';
14
- this.unitIndex = 0;
15
- this.errorMsg = '';
16
- // Parse initial bytes to best unit
17
- // e.g. 1073741824 -> 1.00 GB
18
- let val = options.initial || 0;
19
- let idx = 0;
20
- while (val >= 1024 && idx < UNITS.length - 1) {
21
- val /= 1024;
22
- idx++;
23
- }
24
- // Round to 2 decimals for display if float
25
- this.inputValue = Math.round(val * 100) / 100;
26
- this.buffer = this.inputValue.toString();
27
- this.unitIndex = idx;
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "BytePrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return BytePrompt;
28
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
+ const UNITS = [
29
+ 'B',
30
+ 'KB',
31
+ 'MB',
32
+ 'GB',
33
+ 'TB',
34
+ 'PB'
35
+ ];
36
+ let BytePrompt = class BytePrompt extends _base.Prompt {
29
37
  render(_firstRender) {
30
38
  const unitStr = UNITS[this.unitIndex];
31
39
  // 1. Render Question & Input
32
- const icon = this.errorMsg ? `${theme_1.theme.error}${symbols_1.symbols.cross}` : `${theme_1.theme.success}?`;
33
- let output = `${icon} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} `;
40
+ const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
41
+ let output = `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
34
42
  // Value part
35
- output += `${theme_1.theme.main}${ansi_1.ANSI.UNDERLINE}${this.buffer}${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${unitStr}${ansi_1.ANSI.RESET}\n`;
43
+ output += `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${this.buffer}${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${unitStr}${_ansi.ANSI.RESET}\n`;
36
44
  // 2. Render Unit Bar
37
45
  // (Unit: B > KB > [MB] > GB)
38
46
  let bar = ' ';
39
- UNITS.forEach((u, i) => {
47
+ UNITS.forEach((u, i)=>{
40
48
  if (i === this.unitIndex) {
41
- bar += `${theme_1.theme.main}${ansi_1.ANSI.REVERSE} ${u} ${ansi_1.ANSI.RESET}`;
42
- }
43
- else {
44
- bar += `${theme_1.theme.muted} ${u} ${ansi_1.ANSI.RESET}`;
49
+ bar += `${_theme.theme.main}${_ansi.ANSI.REVERSE} ${u} ${_ansi.ANSI.RESET}`;
50
+ } else {
51
+ bar += `${_theme.theme.muted} ${u} ${_ansi.ANSI.RESET}`;
45
52
  }
46
53
  if (i < UNITS.length - 1) {
47
- bar += ` ${theme_1.theme.muted}›${ansi_1.ANSI.RESET} `;
54
+ bar += ` ${_theme.theme.muted}›${_ansi.ANSI.RESET} `;
48
55
  }
49
56
  });
50
57
  output += `\n${bar}\n`;
51
58
  // 3. Hints & Errors
52
- output += `${theme_1.theme.muted} (Arrows: Adjust | Tab: Switch Unit | Enter: Submit)${ansi_1.ANSI.RESET}`;
59
+ output += `${_theme.theme.muted} (Arrows: Adjust | Tab: Switch Unit | Enter: Submit)${_ansi.ANSI.RESET}`;
53
60
  if (this.errorMsg) {
54
- output += `\n${theme_1.theme.error}>> ${this.errorMsg}${ansi_1.ANSI.RESET}`;
61
+ output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
55
62
  }
56
63
  this.renderFrame(output);
57
64
  }
@@ -89,7 +96,7 @@ class BytePrompt extends base_1.Prompt {
89
96
  }
90
97
  return;
91
98
  }
92
- if (char === '\x1b[Z' || this.isLeft(char)) { // Shift+Tab or Left
99
+ if (char === '\x1b[Z' || this.isLeft(char)) {
93
100
  if (this.unitIndex > 0) {
94
101
  this.unitIndex--;
95
102
  this.render(false);
@@ -101,14 +108,11 @@ class BytePrompt extends base_1.Prompt {
101
108
  let val = parseFloat(this.buffer) || 0;
102
109
  // Adaptive step: 1 if integer, 0.1 if float
103
110
  const step = this.buffer.includes('.') ? 0.1 : 1;
104
- if (this.isUp(char))
105
- val += step;
106
- if (this.isDown(char))
107
- val -= step;
111
+ if (this.isUp(char)) val += step;
112
+ if (this.isDown(char)) val -= step;
108
113
  // Fix Float Precision
109
114
  val = Math.round(val * 100) / 100;
110
- if (val < 0)
111
- val = 0; // No negative bytes usually
115
+ if (val < 0) val = 0; // No negative bytes usually
112
116
  this.buffer = val.toString();
113
117
  this.render(false);
114
118
  return;
@@ -124,16 +128,14 @@ class BytePrompt extends base_1.Prompt {
124
128
  // Digits & Dot
125
129
  if (/^[0-9.]$/.test(char)) {
126
130
  // Prevent multiple dots
127
- if (char === '.' && this.buffer.includes('.'))
128
- return;
131
+ if (char === '.' && this.buffer.includes('.')) return;
129
132
  this.buffer += char;
130
133
  this.render(false);
131
134
  }
132
135
  }
133
136
  // Helper for error messages
134
137
  formatBytes(bytes) {
135
- if (bytes === 0)
136
- return '0 B';
138
+ if (bytes === 0) return '0 B';
137
139
  const i = Math.floor(Math.log(bytes) / Math.log(1024));
138
140
  return parseFloat((bytes / Math.pow(1024, i)).toFixed(2)) + ' ' + UNITS[i];
139
141
  }
@@ -145,8 +147,7 @@ class BytePrompt extends base_1.Prompt {
145
147
  val += 1;
146
148
  this.buffer = val.toString();
147
149
  this.render(false);
148
- }
149
- else if (event.scroll === 'down') {
150
+ } else if (event.scroll === 'down') {
150
151
  // Scroll down -> Decrease Value
151
152
  let val = parseFloat(this.buffer) || 0;
152
153
  val = Math.max(0, val - 1);
@@ -155,5 +156,21 @@ class BytePrompt extends base_1.Prompt {
155
156
  }
156
157
  }
157
158
  }
158
- }
159
- exports.BytePrompt = BytePrompt;
159
+ constructor(options){
160
+ super(options), _define_property(this, "inputValue", 0), _define_property(this, "buffer", ''), _define_property(this, "unitIndex", 0), _define_property(this, "errorMsg", '');
161
+ // Parse initial bytes to best unit
162
+ // e.g. 1073741824 -> 1.00 GB
163
+ let val = options.initial || 0;
164
+ let idx = 0;
165
+ while(val >= 1024 && idx < UNITS.length - 1){
166
+ val /= 1024;
167
+ idx++;
168
+ }
169
+ // Round to 2 decimals for display if float
170
+ this.inputValue = Math.round(val * 100) / 100;
171
+ this.buffer = this.inputValue.toString();
172
+ this.unitIndex = idx;
173
+ }
174
+ };
175
+
176
+ //# sourceMappingURL=byte.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/byte.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { ByteOptions, MouseEvent } from '../types';\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\nexport class BytePrompt extends Prompt<number, ByteOptions> {\n private inputValue: number = 0;\n private buffer: string = '';\n private unitIndex: number = 0;\n private errorMsg: string = '';\n\n constructor(options: ByteOptions) {\n super(options);\n // Parse initial bytes to best unit\n // e.g. 1073741824 -> 1.00 GB\n let val = options.initial || 0;\n let idx = 0;\n while (val >= 1024 && idx < UNITS.length - 1) {\n val /= 1024;\n idx++;\n }\n\n // Round to 2 decimals for display if float\n this.inputValue = Math.round(val * 100) / 100;\n this.buffer = this.inputValue.toString();\n this.unitIndex = idx;\n }\n\n protected render(_firstRender: boolean): void {\n const unitStr = UNITS[this.unitIndex];\n\n // 1. Render Question & Input\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n let output = `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} `;\n\n // Value part\n output += `${theme.main}${ANSI.UNDERLINE}${this.buffer}${ANSI.RESET} ${ANSI.BOLD}${unitStr}${ANSI.RESET}\\n`;\n\n // 2. Render Unit Bar\n // (Unit: B > KB > [MB] > GB)\n let bar = ' ';\n UNITS.forEach((u, i) => {\n if (i === this.unitIndex) {\n bar += `${theme.main}${ANSI.REVERSE} ${u} ${ANSI.RESET}`;\n } else {\n bar += `${theme.muted} ${u} ${ANSI.RESET}`;\n }\n\n if (i < UNITS.length - 1) {\n bar += ` ${theme.muted}›${ANSI.RESET} `;\n }\n });\n output += `\\n${bar}\\n`;\n\n // 3. Hints & Errors\n output += `${theme.muted} (Arrows: Adjust | Tab: Switch Unit | Enter: Submit)${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): void {\n this.errorMsg = '';\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n const finalVal = parseFloat(this.buffer);\n if (isNaN(finalVal)) {\n this.errorMsg = 'Invalid number';\n this.render(false);\n return;\n }\n\n // Calculate Bytes: value * 1024^index\n const bytes = finalVal * Math.pow(1024, this.unitIndex);\n\n // Min/Max Validation (in bytes)\n if (this.options.min !== undefined && bytes < this.options.min) {\n this.errorMsg = `Minimum value is ${this.formatBytes(this.options.min)}`;\n this.render(false);\n return;\n }\n if (this.options.max !== undefined && bytes > this.options.max) {\n this.errorMsg = `Maximum value is ${this.formatBytes(this.options.max)}`;\n this.render(false);\n return;\n }\n\n this.submit(Math.round(bytes)); // Return integer bytes? Or float? Usually bytes are int.\n return;\n }\n\n // Tab / Shift+Tab -> Switch Unit\n if (char === '\\t' || this.isRight(char)) {\n if (this.unitIndex < UNITS.length - 1) {\n this.unitIndex++;\n this.render(false);\n }\n return;\n }\n if (char === '\\x1b[Z' || this.isLeft(char)) { // Shift+Tab or Left\n if (this.unitIndex > 0) {\n this.unitIndex--;\n this.render(false);\n }\n return;\n }\n\n // Arrows -> Adjust Value\n if (this.isUp(char) || this.isDown(char)) {\n let val = parseFloat(this.buffer) || 0;\n // Adaptive step: 1 if integer, 0.1 if float\n const step = this.buffer.includes('.') ? 0.1 : 1;\n\n if (this.isUp(char)) val += step;\n if (this.isDown(char)) val -= step;\n\n // Fix Float Precision\n val = Math.round(val * 100) / 100;\n if (val < 0) val = 0; // No negative bytes usually\n\n this.buffer = val.toString();\n this.render(false);\n return;\n }\n\n // Typing / Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.buffer.length > 0) {\n this.buffer = this.buffer.slice(0, -1);\n this.render(false);\n }\n return;\n }\n\n // Digits & Dot\n if (/^[0-9.]$/.test(char)) {\n // Prevent multiple dots\n if (char === '.' && this.buffer.includes('.')) return;\n\n this.buffer += char;\n this.render(false);\n }\n }\n\n // Helper for error messages\n private formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n return parseFloat((bytes / Math.pow(1024, i)).toFixed(2)) + ' ' + UNITS[i];\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n // Scroll up -> Increase Value\n let val = parseFloat(this.buffer) || 0;\n val += 1;\n this.buffer = val.toString();\n this.render(false);\n } else if (event.scroll === 'down') {\n // Scroll down -> Decrease Value\n let val = parseFloat(this.buffer) || 0;\n val = Math.max(0, val - 1);\n this.buffer = val.toString();\n this.render(false);\n }\n }\n }\n}"],"names":["BytePrompt","UNITS","Prompt","render","_firstRender","unitStr","unitIndex","icon","errorMsg","theme","error","symbols","cross","success","output","ANSI","BOLD","title","options","message","RESET","main","UNDERLINE","buffer","bar","forEach","u","i","REVERSE","muted","length","renderFrame","handleInput","char","finalVal","parseFloat","isNaN","bytes","Math","pow","min","undefined","formatBytes","max","submit","round","isRight","isLeft","isUp","isDown","val","step","includes","toString","slice","test","floor","log","toFixed","handleMouse","event","action","scroll","inputValue","initial","idx"],"mappings":"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"}