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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/transfer.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { TransferOptions, SelectChoice, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class TransferPrompt<V> extends Prompt<[V[], V[]], TransferOptions<V>> {\n private leftList: SelectChoice<V>[] = [];\n private rightList: SelectChoice<V>[] = [];\n\n private cursorLeft: number = 0;\n private cursorRight: number = 0;\n private scrollTopLeft: number = 0;\n private scrollTopRight: number = 0;\n\n private activeSide: 'left' | 'right' = 'left';\n private readonly pageSize: number = 10;\n\n constructor(options: TransferOptions<V>) {\n super(options);\n this.leftList = this.normalize(options.source);\n this.rightList = this.normalize(options.target || []);\n }\n\n private normalize(items: (string | SelectChoice<V>)[]): SelectChoice<V>[] {\n return items.map(item => {\n if (typeof item === 'string') {\n return { title: item, value: item as unknown as V };\n }\n return item;\n });\n }\n\n protected truncate(str: string, width: number): string {\n if (stringWidth(str) <= width) return str;\n let res = str;\n while (stringWidth(res + '...') > width && res.length > 0) {\n res = res.slice(0, -1);\n }\n return res + '...';\n }\n\n protected render(_firstRender: boolean) {\n const termWidth = process.stdout.columns || 80;\n const colWidth = Math.floor((termWidth - 6) / 2);\n\n // Adjust Scroll Top\n if (this.activeSide === 'left') {\n if (this.cursorLeft < this.scrollTopLeft) this.scrollTopLeft = this.cursorLeft;\n if (this.cursorLeft >= this.scrollTopLeft + this.pageSize) this.scrollTopLeft = this.cursorLeft - this.pageSize + 1;\n } else {\n if (this.cursorRight < this.scrollTopRight) this.scrollTopRight = this.cursorRight;\n if (this.cursorRight >= this.scrollTopRight + this.pageSize) this.scrollTopRight = this.cursorRight - this.pageSize + 1;\n }\n\n let output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Headers\n const leftTitle = this.activeSide === 'left' ? `${theme.main}Source${ANSI.RESET}` : 'Source';\n const rightTitle = this.activeSide === 'right' ? `${theme.main}Target${ANSI.RESET}` : 'Target';\n\n output += ` ${leftTitle}`.padEnd(colWidth + 2) + ' ' + ` ${rightTitle}\\n`;\n output += ` ${ANSI.DIM}${symbols.line.repeat(colWidth)}${ANSI.RESET} ${ANSI.DIM}${symbols.line.repeat(colWidth)}${ANSI.RESET}\\n`;\n\n for (let i = 0; i < this.pageSize; i++) {\n const idxLeft = this.scrollTopLeft + i;\n const idxRight = this.scrollTopRight + i;\n\n const itemLeft = this.leftList[idxLeft];\n const itemRight = this.rightList[idxRight];\n\n // Left Column\n let leftStr = '';\n if (itemLeft) {\n const isSelected = this.activeSide === 'left' && idxLeft === this.cursorLeft;\n const title = this.truncate(itemLeft.title, colWidth - 2);\n if (isSelected) {\n leftStr = `${theme.main}${symbols.pointer} ${title}${ANSI.RESET}`;\n } else {\n leftStr = ` ${title}`;\n }\n } else {\n leftStr = ''; // Empty\n }\n\n // Right Column\n let rightStr = '';\n if (itemRight) {\n const isSelected = this.activeSide === 'right' && idxRight === this.cursorRight;\n const title = this.truncate(itemRight.title, colWidth - 2);\n if (isSelected) {\n rightStr = `${theme.main}${symbols.pointer} ${title}${ANSI.RESET}`;\n } else {\n rightStr = ` ${title}`;\n }\n }\n\n const leftVisualWidth = itemLeft ? (stringWidth(this.truncate(itemLeft.title, colWidth - 2)) + 2) : 0;\n // Pad visually\n const padding = ' '.repeat(Math.max(0, colWidth - leftVisualWidth));\n\n output += leftStr + padding + ' | ' + rightStr + '\\n';\n }\n\n output += `\\n${ANSI.DIM}(Tab: Switch | a: Move All Right | r: Reset/All Left)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n const leftValues = this.leftList.map(i => i.value);\n const rightValues = this.rightList.map(i => i.value);\n this.submit([leftValues, rightValues]);\n return;\n }\n\n if (char === '\\t' || this.isLeft(char) || this.isRight(char)) {\n // Toggle side\n this.activeSide = this.activeSide === 'left' ? 'right' : 'left';\n this.render(false);\n return;\n }\n\n // --- Batch Transfer Shortcuts ---\n\n // Move All to Right ('a' or '>')\n if (char === 'a' || char === '>') {\n if (this.leftList.length > 0) {\n this.rightList.push(...this.leftList);\n this.leftList = [];\n this.cursorLeft = 0;\n this.activeSide = 'right';\n this.render(false);\n }\n return;\n }\n\n // Move All to Left ('r' or '<')\n if (char === 'r' || char === '<') {\n if (this.rightList.length > 0) {\n this.leftList.push(...this.rightList);\n this.rightList = [];\n this.cursorRight = 0;\n this.activeSide = 'left';\n this.render(false);\n }\n return;\n }\n\n if (this.isUp(char)) {\n if (this.activeSide === 'left') {\n this.cursorLeft = Math.max(0, this.cursorLeft - 1);\n } else {\n this.cursorRight = Math.max(0, this.cursorRight - 1);\n }\n this.render(false);\n return;\n }\n\n if (this.isDown(char)) {\n if (this.activeSide === 'left') {\n this.cursorLeft = Math.min(this.leftList.length - 1, this.cursorLeft + 1);\n } else {\n this.cursorRight = Math.min(this.rightList.length - 1, this.cursorRight + 1);\n }\n this.render(false);\n return;\n }\n\n if (char === ' ') {\n // Move item\n if (this.activeSide === 'left') {\n if (this.leftList.length > 0) {\n const [item] = this.leftList.splice(this.cursorLeft, 1);\n this.rightList.push(item);\n if (this.cursorLeft >= this.leftList.length) {\n this.cursorLeft = Math.max(0, this.leftList.length - 1);\n }\n }\n } else {\n if (this.rightList.length > 0) {\n const [item] = this.rightList.splice(this.cursorRight, 1);\n this.leftList.push(item);\n if (this.cursorRight >= this.rightList.length) {\n this.cursorRight = Math.max(0, this.rightList.length - 1);\n }\n }\n }\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.activeSide === 'left') {\n this.cursorLeft = Math.max(0, this.cursorLeft - 1);\n } else {\n this.cursorRight = Math.max(0, this.cursorRight - 1);\n }\n } else {\n if (this.activeSide === 'left') {\n this.cursorLeft = Math.min(this.leftList.length - 1, this.cursorLeft + 1);\n } else {\n this.cursorRight = Math.min(this.rightList.length - 1, this.cursorRight + 1);\n }\n }\n this.render(false);\n }\n }\n}\n"],"names":["TransferPrompt","Prompt","normalize","items","map","item","title","value","truncate","str","width","stringWidth","res","length","slice","render","_firstRender","termWidth","process","stdout","columns","colWidth","Math","floor","activeSide","cursorLeft","scrollTopLeft","pageSize","cursorRight","scrollTopRight","output","theme","success","ANSI","RESET","BOLD","options","message","leftTitle","main","rightTitle","padEnd","DIM","symbols","line","repeat","i","idxLeft","idxRight","itemLeft","leftList","itemRight","rightList","leftStr","isSelected","pointer","rightStr","leftVisualWidth","padding","max","renderFrame","handleInput","char","leftValues","rightValues","submit","isLeft","isRight","push","isUp","isDown","min","splice","handleMouse","event","action","scroll","source","target"],"mappings":"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"}
@@ -1,47 +1,41 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TreeSelectPrompt = 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
- /**
9
- * FIXED-ISH: This prompt may hang on Windows TTY after multiple prompt cycles.
10
- * Current workaround: User must press 'Enter' to flush the stdin buffer.
11
- * Potential root cause: Synchronous recursion during initialization blocking setRawMode.
12
- */
13
- class TreeSelectPrompt extends base_1.Prompt {
14
- constructor(options) {
15
- super(options);
16
- this.cursor = 0;
17
- this.expandedNodes = new Set();
18
- this.flatList = [];
19
- this.scrollTop = 0;
20
- this.pageSize = 15;
21
- this.parentMap = new Map();
22
- this.ICON_CLOSED = symbols_1.symbols.pointer === '>' ? '+' : '▸';
23
- this.ICON_OPEN = symbols_1.symbols.pointer === '>' ? '-' : '▾';
24
- this.buildParentMap(this.options.data, null);
25
- this.initializeExpanded(this.options.data);
26
- if (this.options.initial) {
27
- const initialSet = new Set(this.options.initial);
28
- this.initializeSelection(this.options.data, initialSet);
29
- this.recalculateAllParents(this.options.data);
30
- }
31
- this.checkWindowsAttention();
32
- this.recalculateFlatList();
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "TreeSelectPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return TreeSelectPrompt;
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;
33
25
  }
26
+ return obj;
27
+ }
28
+ let TreeSelectPrompt = class TreeSelectPrompt extends _base.Prompt {
34
29
  buildParentMap(nodes, parent) {
35
- for (const node of nodes) {
36
- if (parent)
37
- this.parentMap.set(node, parent);
30
+ for (const node of nodes){
31
+ if (parent) this.parentMap.set(node, parent);
38
32
  if (node.children) {
39
33
  this.buildParentMap(node.children, node);
40
34
  }
41
35
  }
42
36
  }
43
37
  initializeExpanded(nodes) {
44
- for (const node of nodes) {
38
+ for (const node of nodes){
45
39
  if (node.expanded) {
46
40
  this.expandedNodes.add(node);
47
41
  }
@@ -51,7 +45,7 @@ class TreeSelectPrompt extends base_1.Prompt {
51
45
  }
52
46
  }
53
47
  initializeSelection(nodes, initialValues) {
54
- for (const node of nodes) {
48
+ for (const node of nodes){
55
49
  if (initialValues.has(node.value)) {
56
50
  this.setNodeState(node, true, false);
57
51
  }
@@ -61,7 +55,7 @@ class TreeSelectPrompt extends base_1.Prompt {
61
55
  }
62
56
  }
63
57
  recalculateAllParents(nodes) {
64
- for (const node of nodes) {
58
+ for (const node of nodes){
65
59
  if (node.children) {
66
60
  this.recalculateAllParents(node.children);
67
61
  this.updateNodeStateFromChildren(node);
@@ -69,28 +63,25 @@ class TreeSelectPrompt extends base_1.Prompt {
69
63
  }
70
64
  }
71
65
  updateNodeStateFromChildren(node) {
72
- if (!node.children || node.children.length === 0)
73
- return;
74
- const allChecked = node.children.every(c => c.selected === true);
75
- const allUnchecked = node.children.every(c => !c.selected);
66
+ if (!node.children || node.children.length === 0) return;
67
+ const allChecked = node.children.every((c)=>c.selected === true);
68
+ const allUnchecked = node.children.every((c)=>!c.selected);
76
69
  if (allChecked) {
77
70
  node.selected = true;
78
- }
79
- else if (allUnchecked) {
71
+ } else if (allUnchecked) {
80
72
  node.selected = false;
81
- }
82
- else {
73
+ } else {
83
74
  node.selected = 'indeterminate';
84
75
  }
85
76
  }
86
77
  setNodeState(node, state, updateParents = true) {
87
78
  node.selected = state;
88
79
  if (node.children) {
89
- node.children.forEach(c => this.setNodeState(c, state, false));
80
+ node.children.forEach((c)=>this.setNodeState(c, state, false));
90
81
  }
91
82
  if (updateParents) {
92
83
  let curr = node;
93
- while (this.parentMap.has(curr)) {
84
+ while(this.parentMap.has(curr)){
94
85
  const parent = this.parentMap.get(curr);
95
86
  this.updateNodeStateFromChildren(parent);
96
87
  curr = parent;
@@ -105,42 +96,43 @@ class TreeSelectPrompt extends base_1.Prompt {
105
96
  }
106
97
  }
107
98
  traverse(nodes, depth, parent) {
108
- for (const node of nodes) {
109
- this.flatList.push({ node, depth, parent });
99
+ for (const node of nodes){
100
+ this.flatList.push({
101
+ node,
102
+ depth,
103
+ parent
104
+ });
110
105
  if (node.children && node.children.length > 0 && this.expandedNodes.has(node)) {
111
106
  this.traverse(node.children, depth + 1, node);
112
107
  }
113
108
  }
114
109
  }
115
110
  toggleRecursive(node, expand) {
116
- if (expand)
117
- this.expandedNodes.add(node);
118
- else
119
- this.expandedNodes.delete(node);
111
+ if (expand) this.expandedNodes.add(node);
112
+ else this.expandedNodes.delete(node);
120
113
  if (node.children) {
121
- node.children.forEach(child => this.toggleRecursive(child, expand));
114
+ node.children.forEach((child)=>this.toggleRecursive(child, expand));
122
115
  }
123
116
  }
124
117
  render(_firstRender) {
125
- let output = `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
118
+ let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
126
119
  if (this.flatList.length === 0) {
127
- output += ` ${theme_1.theme.muted}No data${ansi_1.ANSI.RESET}`;
120
+ output += ` ${_theme.theme.muted}No data${_ansi.ANSI.RESET}`;
128
121
  this.renderFrame(output);
129
122
  return;
130
123
  }
131
124
  if (this.cursor < this.scrollTop) {
132
125
  this.scrollTop = this.cursor;
133
- }
134
- else if (this.cursor >= this.scrollTop + this.pageSize) {
126
+ } else if (this.cursor >= this.scrollTop + this.pageSize) {
135
127
  this.scrollTop = this.cursor - this.pageSize + 1;
136
128
  }
137
129
  const visible = this.flatList.slice(this.scrollTop, this.scrollTop + this.pageSize);
138
- visible.forEach((item, index) => {
130
+ visible.forEach((item, index)=>{
139
131
  const actualIndex = this.scrollTop + index;
140
132
  const isSelected = actualIndex === this.cursor;
141
133
  const indentSize = this.options.indent || 2;
142
134
  const indentation = ' '.repeat(item.depth * indentSize);
143
- const linePrefix = isSelected ? `${theme_1.theme.main}${symbols_1.symbols.pointer} ` : ' ';
135
+ const linePrefix = isSelected ? `${_theme.theme.main}${_symbols.symbols.pointer} ` : ' ';
144
136
  let folderIcon = ' ';
145
137
  const hasChildren = item.node.children && item.node.children.length > 0;
146
138
  if (hasChildren) {
@@ -149,32 +141,28 @@ class TreeSelectPrompt extends base_1.Prompt {
149
141
  // Checkbox
150
142
  let checkIcon = `[ ]`;
151
143
  if (item.node.selected === true) {
152
- checkIcon = `${theme_1.theme.success}[x]${ansi_1.ANSI.RESET}`;
153
- }
154
- else if (item.node.selected === 'indeterminate') {
155
- checkIcon = `${ansi_1.ANSI.FG_YELLOW}[-]${ansi_1.ANSI.RESET}`;
156
- }
157
- else {
158
- checkIcon = `${theme_1.theme.muted}[ ]${ansi_1.ANSI.RESET}`;
144
+ checkIcon = `${_theme.theme.success}[x]${_ansi.ANSI.RESET}`;
145
+ } else if (item.node.selected === 'indeterminate') {
146
+ checkIcon = `${_ansi.ANSI.FG_YELLOW}[-]${_ansi.ANSI.RESET}`;
147
+ } else {
148
+ checkIcon = `${_theme.theme.muted}[ ]${_ansi.ANSI.RESET}`;
159
149
  }
160
150
  let title = item.node.title;
161
151
  if (item.node.disabled) {
162
- title = `${theme_1.theme.muted}${title} (disabled)${ansi_1.ANSI.RESET}`;
152
+ title = `${_theme.theme.muted}${title} (disabled)${_ansi.ANSI.RESET}`;
163
153
  }
164
154
  let line = `${indentation}${folderIcon}${checkIcon} ${title}`;
165
155
  if (isSelected) {
166
- line = `${theme_1.theme.main}${line}${ansi_1.ANSI.RESET}`;
156
+ line = `${_theme.theme.main}${line}${_ansi.ANSI.RESET}`;
167
157
  }
168
158
  output += linePrefix + line;
169
- if (index < visible.length - 1)
170
- output += '\n';
159
+ if (index < visible.length - 1) output += '\n';
171
160
  });
172
- output += `\n${theme_1.theme.muted}(e: Expand All, c: Collapse All, Space: Toggle)${ansi_1.ANSI.RESET}`;
161
+ output += `\n${_theme.theme.muted}(e: Expand All, c: Collapse All, Space: Toggle)${_ansi.ANSI.RESET}`;
173
162
  this.renderFrame(output);
174
163
  }
175
164
  handleInput(char, _key) {
176
- if (this.flatList.length === 0)
177
- return;
165
+ if (this.flatList.length === 0) return;
178
166
  // 1. Priority: Navigation keys (ANSI sequences)
179
167
  if (this.isUp(char)) {
180
168
  this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;
@@ -187,8 +175,7 @@ class TreeSelectPrompt extends base_1.Prompt {
187
175
  return;
188
176
  }
189
177
  const currentItem = this.flatList[this.cursor];
190
- if (!currentItem)
191
- return;
178
+ if (!currentItem) return;
192
179
  const node = currentItem.node;
193
180
  const hasChildren = node.children && node.children.length > 0;
194
181
  // 2. Right Arrow: Expand folder or move to first child
@@ -196,8 +183,7 @@ class TreeSelectPrompt extends base_1.Prompt {
196
183
  if (hasChildren && !this.expandedNodes.has(node)) {
197
184
  this.expandedNodes.add(node);
198
185
  this.recalculateFlatList();
199
- }
200
- else if (this.cursor + 1 < this.flatList.length) {
186
+ } else if (this.cursor + 1 < this.flatList.length) {
201
187
  this.cursor++;
202
188
  }
203
189
  this.render(false);
@@ -208,9 +194,8 @@ class TreeSelectPrompt extends base_1.Prompt {
208
194
  if (hasChildren && this.expandedNodes.has(node)) {
209
195
  this.expandedNodes.delete(node);
210
196
  this.recalculateFlatList();
211
- }
212
- else if (currentItem.parent) {
213
- const parentIndex = this.flatList.findIndex(x => x.node === currentItem.parent);
197
+ } else if (currentItem.parent) {
198
+ const parentIndex = this.flatList.findIndex((x)=>x.node === currentItem.parent);
214
199
  if (parentIndex !== -1) {
215
200
  this.cursor = parentIndex;
216
201
  }
@@ -248,7 +233,7 @@ class TreeSelectPrompt extends base_1.Prompt {
248
233
  }
249
234
  }
250
235
  collectSelected(nodes, result) {
251
- for (const node of nodes) {
236
+ for (const node of nodes){
252
237
  if (node.selected === true) {
253
238
  result.push(node.value);
254
239
  }
@@ -262,12 +247,24 @@ class TreeSelectPrompt extends base_1.Prompt {
262
247
  if (event.scroll === 'up') {
263
248
  this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;
264
249
  this.render(false);
265
- }
266
- else if (event.scroll === 'down') {
250
+ } else if (event.scroll === 'down') {
267
251
  this.cursor = (this.cursor + 1) % this.flatList.length;
268
252
  this.render(false);
269
253
  }
270
254
  }
271
255
  }
272
- }
273
- exports.TreeSelectPrompt = TreeSelectPrompt;
256
+ constructor(options){
257
+ super(options), _define_property(this, "cursor", 0), _define_property(this, "expandedNodes", new Set()), _define_property(this, "flatList", []), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 15), _define_property(this, "parentMap", new Map()), _define_property(this, "ICON_CLOSED", _symbols.symbols.pointer === '>' ? '+' : '▸'), _define_property(this, "ICON_OPEN", _symbols.symbols.pointer === '>' ? '-' : '▾');
258
+ this.buildParentMap(this.options.data, null);
259
+ this.initializeExpanded(this.options.data);
260
+ if (this.options.initial) {
261
+ const initialSet = new Set(this.options.initial);
262
+ this.initializeSelection(this.options.data, initialSet);
263
+ this.recalculateAllParents(this.options.data);
264
+ }
265
+ this.checkWindowsAttention();
266
+ this.recalculateFlatList();
267
+ }
268
+ };
269
+
270
+ //# sourceMappingURL=tree-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/tree-select.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { TreeSelectOptions, TreeSelectNode, MouseEvent } from '../types';\n\ninterface FlatNode<V> {\n node: TreeSelectNode<V>;\n depth: number;\n parent: TreeSelectNode<V> | null;\n}\n\n/**\n * FIXED-ISH: This prompt may hang on Windows TTY after multiple prompt cycles.\n * Current workaround: User must press 'Enter' to flush the stdin buffer.\n * Potential root cause: Synchronous recursion during initialization blocking setRawMode.\n */\nexport class TreeSelectPrompt<V> extends Prompt<V[], TreeSelectOptions<V>> {\n private cursor: number = 0;\n private expandedNodes: Set<TreeSelectNode<V>> = new Set();\n private flatList: FlatNode<V>[] = [];\n private scrollTop: number = 0;\n private readonly pageSize: number = 15;\n private parentMap: Map<TreeSelectNode<V>, TreeSelectNode<V>> = new Map();\n\n private readonly ICON_CLOSED = symbols.pointer === '>' ? '+' : '▸';\n private readonly ICON_OPEN = symbols.pointer === '>' ? '-' : '▾';\n\n constructor(options: TreeSelectOptions<V>) {\n super(options);\n this.buildParentMap(this.options.data, null);\n this.initializeExpanded(this.options.data);\n\n if (this.options.initial) {\n const initialSet = new Set(this.options.initial);\n this.initializeSelection(this.options.data, initialSet);\n this.recalculateAllParents(this.options.data);\n }\n\n this.checkWindowsAttention();\n this.recalculateFlatList();\n }\n\n private buildParentMap(nodes: TreeSelectNode<V>[], parent: TreeSelectNode<V> | null) {\n for (const node of nodes) {\n if (parent) this.parentMap.set(node, parent);\n if (node.children) {\n this.buildParentMap(node.children, node);\n }\n }\n }\n\n private initializeExpanded(nodes: TreeSelectNode<V>[]) {\n for (const node of nodes) {\n if (node.expanded) {\n this.expandedNodes.add(node);\n }\n if (node.children) {\n this.initializeExpanded(node.children);\n }\n }\n }\n\n private initializeSelection(nodes: TreeSelectNode<V>[], initialValues: Set<V>) {\n for (const node of nodes) {\n if (initialValues.has(node.value)) {\n this.setNodeState(node, true, false);\n }\n if (node.children) {\n this.initializeSelection(node.children, initialValues);\n }\n }\n }\n\n private recalculateAllParents(nodes: TreeSelectNode<V>[]) {\n for (const node of nodes) {\n if (node.children) {\n this.recalculateAllParents(node.children);\n this.updateNodeStateFromChildren(node);\n }\n }\n }\n\n private updateNodeStateFromChildren(node: TreeSelectNode<V>) {\n if (!node.children || node.children.length === 0) return;\n\n const allChecked = node.children.every(c => c.selected === true);\n const allUnchecked = node.children.every(c => !c.selected);\n\n if (allChecked) {\n node.selected = true;\n } else if (allUnchecked) {\n node.selected = false;\n } else {\n node.selected = 'indeterminate';\n }\n }\n\n private setNodeState(node: TreeSelectNode<V>, state: boolean, updateParents: boolean = true) {\n node.selected = state;\n\n if (node.children) {\n node.children.forEach(c => this.setNodeState(c, state, false));\n }\n\n if (updateParents) {\n let curr = node;\n while (this.parentMap.has(curr)) {\n const parent = this.parentMap.get(curr)!;\n this.updateNodeStateFromChildren(parent);\n curr = parent;\n }\n }\n }\n\n private recalculateFlatList() {\n this.flatList = [];\n this.traverse(this.options.data, 0, null);\n if (this.cursor >= this.flatList.length) {\n this.cursor = Math.max(0, this.flatList.length - 1);\n }\n }\n\n private traverse(nodes: TreeSelectNode<V>[], depth: number, parent: TreeSelectNode<V> | null) {\n for (const node of nodes) {\n this.flatList.push({ node, depth, parent });\n if (node.children && node.children.length > 0 && this.expandedNodes.has(node)) {\n this.traverse(node.children, depth + 1, node);\n }\n }\n }\n\n private toggleRecursive(node: TreeSelectNode<V>, expand: boolean) {\n if (expand) this.expandedNodes.add(node);\n else this.expandedNodes.delete(node);\n\n if (node.children) {\n node.children.forEach(child => this.toggleRecursive(child, expand));\n }\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.flatList.length === 0) {\n output += ` ${theme.muted}No data${ANSI.RESET}`;\n this.renderFrame(output);\n return;\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((item, index) => {\n const actualIndex = this.scrollTop + index;\n const isSelected = actualIndex === this.cursor;\n\n const indentSize = this.options.indent || 2;\n const indentation = ' '.repeat(item.depth * indentSize);\n\n const linePrefix = isSelected ? `${theme.main}${symbols.pointer} ` : ' ';\n\n let folderIcon = ' ';\n const hasChildren = item.node.children && item.node.children.length > 0;\n if (hasChildren) {\n folderIcon = this.expandedNodes.has(item.node) ? `${this.ICON_OPEN} ` : `${this.ICON_CLOSED} `;\n }\n\n // Checkbox\n let checkIcon = `[ ]`;\n if (item.node.selected === true) {\n checkIcon = `${theme.success}[x]${ANSI.RESET}`;\n } else if (item.node.selected === 'indeterminate') {\n checkIcon = `${ANSI.FG_YELLOW}[-]${ANSI.RESET}`;\n } else {\n checkIcon = `${theme.muted}[ ]${ANSI.RESET}`;\n }\n\n let title = item.node.title;\n if (item.node.disabled) {\n title = `${theme.muted}${title} (disabled)${ANSI.RESET}`;\n }\n\n let line = `${indentation}${folderIcon}${checkIcon} ${title}`;\n if (isSelected) {\n line = `${theme.main}${line}${ANSI.RESET}`;\n }\n\n output += linePrefix + line;\n if (index < visible.length - 1) output += '\\n';\n });\n\n output += `\\n${theme.muted}(e: Expand All, c: Collapse All, Space: Toggle)${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (this.flatList.length === 0) return;\n\n // 1. Priority: Navigation keys (ANSI sequences)\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\n if (this.isDown(char)) {\n this.cursor = (this.cursor + 1) % this.flatList.length;\n this.render(false);\n return;\n }\n\n const currentItem = this.flatList[this.cursor];\n if (!currentItem) return;\n\n const node = currentItem.node;\n const hasChildren = node.children && node.children.length > 0;\n\n // 2. Right Arrow: Expand folder or move to first child\n if (this.isRight(char)) {\n if (hasChildren && !this.expandedNodes.has(node)) {\n this.expandedNodes.add(node);\n this.recalculateFlatList();\n } else if (this.cursor + 1 < this.flatList.length) {\n this.cursor++;\n }\n this.render(false);\n return;\n }\n\n // 3. Left Arrow: Collapse folder or move to parent\n if (this.isLeft(char)) {\n if (hasChildren && this.expandedNodes.has(node)) {\n this.expandedNodes.delete(node);\n this.recalculateFlatList();\n } else if (currentItem.parent) {\n const parentIndex = this.flatList.findIndex(x => x.node === currentItem.parent);\n if (parentIndex !== -1) {\n this.cursor = parentIndex;\n }\n }\n this.render(false);\n return;\n }\n\n // 4. Space: Toggle selection\n if (char === ' ') {\n if (!node.disabled) {\n const newState = node.selected === true ? false : true;\n this.setNodeState(node, newState);\n this.render(false);\n }\n return;\n }\n\n // 5. Functional keys (Keep it simple to avoid blocking)\n if (char === 'e' && hasChildren) {\n this.toggleRecursive(node, true);\n this.recalculateFlatList();\n this.render(false);\n return;\n }\n\n if (char === 'c' && hasChildren) {\n this.toggleRecursive(node, false);\n this.recalculateFlatList();\n this.render(false);\n return;\n }\n\n // 6. Submit: Enter\n if (char === '\\r' || char === '\\n') {\n const selectedValues: V[] = [];\n this.collectSelected(this.options.data, selectedValues);\n this.submit(selectedValues);\n }\n }\n\n private collectSelected(nodes: TreeSelectNode<V>[], result: V[]) {\n for (const node of nodes) {\n if (node.selected === true) {\n result.push(node.value);\n }\n if (node.children) {\n this.collectSelected(node.children, result);\n }\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;\n this.render(false);\n } else if (event.scroll === 'down') {\n this.cursor = (this.cursor + 1) % this.flatList.length;\n this.render(false);\n }\n }\n }\n}\n"],"names":["TreeSelectPrompt","Prompt","buildParentMap","nodes","parent","node","parentMap","set","children","initializeExpanded","expanded","expandedNodes","add","initializeSelection","initialValues","has","value","setNodeState","recalculateAllParents","updateNodeStateFromChildren","length","allChecked","every","c","selected","allUnchecked","state","updateParents","forEach","curr","get","recalculateFlatList","flatList","traverse","options","data","cursor","Math","max","depth","push","toggleRecursive","expand","delete","child","render","_firstRender","output","theme","success","ANSI","RESET","BOLD","title","message","muted","renderFrame","scrollTop","pageSize","visible","slice","item","index","actualIndex","isSelected","indentSize","indent","indentation","repeat","linePrefix","main","symbols","pointer","folderIcon","hasChildren","ICON_OPEN","ICON_CLOSED","checkIcon","FG_YELLOW","disabled","line","handleInput","char","_key","isUp","isDown","currentItem","isRight","isLeft","parentIndex","findIndex","x","newState","selectedValues","collectSelected","submit","result","handleMouse","event","action","scroll","Set","Map","initial","initialSet","checkWindowsAttention"],"mappings":"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"}
@@ -1,38 +1,35 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TreePrompt = 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
- class TreePrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- this.cursor = 0;
12
- this.expandedNodes = new Set();
13
- this.flatList = [];
14
- this.scrollTop = 0;
15
- this.pageSize = 15;
16
- // Icons
17
- this.ICON_CLOSED = symbols_1.symbols.pointer === '>' ? '+' : '▸';
18
- this.ICON_OPEN = symbols_1.symbols.pointer === '>' ? '-' : '▾';
19
- this.initializeExpanded(this.options.data);
20
- if (this.options.initial !== undefined) {
21
- this.expandPathTo(this.options.initial);
22
- }
23
- this.recalculateFlatList();
24
- if (this.options.initial !== undefined) {
25
- const index = this.flatList.findIndex(item => item.node.value === this.options.initial);
26
- if (index !== -1) {
27
- this.cursor = index;
28
- }
29
- }
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "TreePrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return TreePrompt;
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;
30
25
  }
26
+ return obj;
27
+ }
28
+ let TreePrompt = class TreePrompt extends _base.Prompt {
31
29
  expandPathTo(value) {
32
- const find = (nodes) => {
33
- for (const node of nodes) {
34
- if (node.value === value)
35
- return true;
30
+ const find = (nodes)=>{
31
+ for (const node of nodes){
32
+ if (node.value === value) return true;
36
33
  if (node.children) {
37
34
  if (find(node.children)) {
38
35
  this.expandedNodes.add(node);
@@ -45,7 +42,7 @@ class TreePrompt extends base_1.Prompt {
45
42
  find(this.options.data);
46
43
  }
47
44
  initializeExpanded(nodes) {
48
- for (const node of nodes) {
45
+ for (const node of nodes){
49
46
  if (node.expanded) {
50
47
  this.expandedNodes.add(node);
51
48
  }
@@ -62,7 +59,7 @@ class TreePrompt extends base_1.Prompt {
62
59
  }
63
60
  }
64
61
  traverse(nodes, depth, parent) {
65
- for (const node of nodes) {
62
+ for (const node of nodes){
66
63
  this.flatList.push({
67
64
  node,
68
65
  depth,
@@ -74,38 +71,34 @@ class TreePrompt extends base_1.Prompt {
74
71
  }
75
72
  }
76
73
  toggleRecursive(node, expand) {
77
- if (expand)
78
- this.expandedNodes.add(node);
79
- else
80
- this.expandedNodes.delete(node);
74
+ if (expand) this.expandedNodes.add(node);
75
+ else this.expandedNodes.delete(node);
81
76
  if (node.children) {
82
- node.children.forEach(child => this.toggleRecursive(child, expand));
77
+ node.children.forEach((child)=>this.toggleRecursive(child, expand));
83
78
  }
84
79
  }
85
80
  render(_firstRender) {
86
- let output = `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET}\n`;
81
+ let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
87
82
  if (this.flatList.length === 0) {
88
- output += ` ${theme_1.theme.muted}No data${ansi_1.ANSI.RESET}`;
83
+ output += ` ${_theme.theme.muted}No data${_ansi.ANSI.RESET}`;
89
84
  this.renderFrame(output);
90
85
  return;
91
86
  }
92
87
  if (this.cursor < this.scrollTop) {
93
88
  this.scrollTop = this.cursor;
94
- }
95
- else if (this.cursor >= this.scrollTop + this.pageSize) {
89
+ } else if (this.cursor >= this.scrollTop + this.pageSize) {
96
90
  this.scrollTop = this.cursor - this.pageSize + 1;
97
91
  }
98
92
  const visible = this.flatList.slice(this.scrollTop, this.scrollTop + this.pageSize);
99
- visible.forEach((item, index) => {
93
+ visible.forEach((item, index)=>{
100
94
  const actualIndex = this.scrollTop + index;
101
95
  const isSelected = actualIndex === this.cursor;
102
96
  const indentSize = this.options.indent || 2;
103
97
  const indentation = ' '.repeat(item.depth * indentSize);
104
98
  let linePrefix = '';
105
99
  if (isSelected) {
106
- linePrefix = `${theme_1.theme.main}${symbols_1.symbols.pointer} `;
107
- }
108
- else {
100
+ linePrefix = `${_theme.theme.main}${_symbols.symbols.pointer} `;
101
+ } else {
109
102
  linePrefix = ' ';
110
103
  }
111
104
  let icon = ' ';
@@ -113,29 +106,26 @@ class TreePrompt extends base_1.Prompt {
113
106
  if (hasChildren) {
114
107
  if (this.expandedNodes.has(item.node)) {
115
108
  icon = `${this.ICON_OPEN} `;
116
- }
117
- else {
109
+ } else {
118
110
  icon = `${this.ICON_CLOSED} `;
119
111
  }
120
112
  }
121
113
  let title = item.node.title;
122
114
  if (item.node.disabled) {
123
- title = `${theme_1.theme.muted}${title} (disabled)${ansi_1.ANSI.RESET}`;
115
+ title = `${_theme.theme.muted}${title} (disabled)${_ansi.ANSI.RESET}`;
124
116
  }
125
117
  let line = `${indentation}${icon}${title}`;
126
118
  if (isSelected) {
127
- line = `${theme_1.theme.main}${line}${ansi_1.ANSI.RESET}`;
119
+ line = `${_theme.theme.main}${line}${_ansi.ANSI.RESET}`;
128
120
  }
129
121
  output += linePrefix + line;
130
- if (index < visible.length - 1)
131
- output += '\n';
122
+ if (index < visible.length - 1) output += '\n';
132
123
  });
133
- output += `\n${theme_1.theme.muted}(Arrows: Nav, e: Expand All, c: Collapse All)${ansi_1.ANSI.RESET}`;
124
+ output += `\n${_theme.theme.muted}(Arrows: Nav, e: Expand All, c: Collapse All)${_ansi.ANSI.RESET}`;
134
125
  this.renderFrame(output);
135
126
  }
136
127
  handleInput(char, _key) {
137
- if (this.flatList.length === 0)
138
- return;
128
+ if (this.flatList.length === 0) return;
139
129
  if (this.isUp(char)) {
140
130
  this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;
141
131
  this.render(false);
@@ -168,8 +158,7 @@ class TreePrompt extends base_1.Prompt {
168
158
  if (!this.expandedNodes.has(node)) {
169
159
  this.expandedNodes.add(node);
170
160
  this.recalculateFlatList();
171
- }
172
- else {
161
+ } else {
173
162
  if (this.cursor + 1 < this.flatList.length) {
174
163
  this.cursor++;
175
164
  }
@@ -184,10 +173,9 @@ class TreePrompt extends base_1.Prompt {
184
173
  this.recalculateFlatList();
185
174
  this.render(false);
186
175
  return;
187
- }
188
- else {
176
+ } else {
189
177
  if (currentItem.parent) {
190
- const parentIndex = this.flatList.findIndex(x => x.node === currentItem.parent);
178
+ const parentIndex = this.flatList.findIndex((x)=>x.node === currentItem.parent);
191
179
  if (parentIndex !== -1) {
192
180
  this.cursor = parentIndex;
193
181
  this.render(false);
@@ -200,8 +188,7 @@ class TreePrompt extends base_1.Prompt {
200
188
  if (hasChildren) {
201
189
  if (this.expandedNodes.has(node)) {
202
190
  this.expandedNodes.delete(node);
203
- }
204
- else {
191
+ } else {
205
192
  this.expandedNodes.add(node);
206
193
  }
207
194
  this.recalculateFlatList();
@@ -220,12 +207,27 @@ class TreePrompt extends base_1.Prompt {
220
207
  if (event.scroll === 'up') {
221
208
  this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;
222
209
  this.render(false);
223
- }
224
- else if (event.scroll === 'down') {
210
+ } else if (event.scroll === 'down') {
225
211
  this.cursor = (this.cursor + 1) % this.flatList.length;
226
212
  this.render(false);
227
213
  }
228
214
  }
229
215
  }
230
- }
231
- exports.TreePrompt = TreePrompt;
216
+ constructor(options){
217
+ super(options), _define_property(this, "cursor", 0), _define_property(this, "expandedNodes", new Set()), _define_property(this, "flatList", []), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 15), // Icons
218
+ _define_property(this, "ICON_CLOSED", _symbols.symbols.pointer === '>' ? '+' : '▸'), _define_property(this, "ICON_OPEN", _symbols.symbols.pointer === '>' ? '-' : '▾');
219
+ this.initializeExpanded(this.options.data);
220
+ if (this.options.initial !== undefined) {
221
+ this.expandPathTo(this.options.initial);
222
+ }
223
+ this.recalculateFlatList();
224
+ if (this.options.initial !== undefined) {
225
+ const index = this.flatList.findIndex((item)=>item.node.value === this.options.initial);
226
+ if (index !== -1) {
227
+ this.cursor = index;
228
+ }
229
+ }
230
+ }
231
+ };
232
+
233
+ //# sourceMappingURL=tree.js.map