@posthog/wizard 1.36.1 → 2.0.0

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 (464) hide show
  1. package/README.md +79 -0
  2. package/dist/bin.js +199 -12
  3. package/dist/bin.js.map +1 -1
  4. package/dist/src/__tests__/cli.test.js +7 -18
  5. package/dist/src/__tests__/cli.test.js.map +1 -1
  6. package/dist/src/__tests__/run.test.js +50 -5
  7. package/dist/src/__tests__/run.test.js.map +1 -1
  8. package/dist/src/__tests__/wizard-abort.test.js +127 -0
  9. package/dist/src/__tests__/wizard-abort.test.js.map +1 -0
  10. package/dist/src/{android → frameworks/android}/android-wizard-agent.d.ts +1 -1
  11. package/dist/src/{android → frameworks/android}/android-wizard-agent.js +2 -2
  12. package/dist/src/frameworks/android/android-wizard-agent.js.map +1 -0
  13. package/dist/src/{android → frameworks/android}/utils.d.ts +1 -1
  14. package/dist/src/{android → frameworks/android}/utils.js +1 -1
  15. package/dist/src/frameworks/android/utils.js.map +1 -0
  16. package/dist/src/{angular → frameworks/angular}/angular-wizard-agent.d.ts +1 -1
  17. package/dist/src/{angular → frameworks/angular}/angular-wizard-agent.js +9 -7
  18. package/dist/src/frameworks/angular/angular-wizard-agent.js.map +1 -0
  19. package/dist/src/{angular → frameworks/angular}/utils.js +1 -1
  20. package/dist/src/frameworks/angular/utils.js.map +1 -0
  21. package/dist/src/{astro → frameworks/astro}/astro-wizard-agent.d.ts +1 -1
  22. package/dist/src/{astro → frameworks/astro}/astro-wizard-agent.js +9 -7
  23. package/dist/src/frameworks/astro/astro-wizard-agent.js.map +1 -0
  24. package/dist/src/{astro → frameworks/astro}/utils.d.ts +2 -5
  25. package/dist/src/{astro → frameworks/astro}/utils.js +3 -52
  26. package/dist/src/frameworks/astro/utils.js.map +1 -0
  27. package/dist/src/{django → frameworks/django}/django-wizard-agent.d.ts +1 -1
  28. package/dist/src/{django → frameworks/django}/django-wizard-agent.js +3 -3
  29. package/dist/src/frameworks/django/django-wizard-agent.js.map +1 -0
  30. package/dist/src/{django → frameworks/django}/utils.d.ts +1 -1
  31. package/dist/src/{django → frameworks/django}/utils.js +6 -6
  32. package/dist/src/frameworks/django/utils.js.map +1 -0
  33. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.d.ts +5 -0
  34. package/dist/src/{fastapi → frameworks/fastapi}/fastapi-wizard-agent.js +3 -32
  35. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js.map +1 -0
  36. package/dist/src/{fastapi → frameworks/fastapi}/utils.d.ts +1 -1
  37. package/dist/src/{fastapi → frameworks/fastapi}/utils.js +4 -4
  38. package/dist/src/frameworks/fastapi/utils.js.map +1 -0
  39. package/dist/src/{flask → frameworks/flask}/flask-wizard-agent.d.ts +1 -1
  40. package/dist/src/{flask → frameworks/flask}/flask-wizard-agent.js +3 -3
  41. package/dist/src/frameworks/flask/flask-wizard-agent.js.map +1 -0
  42. package/dist/src/{flask → frameworks/flask}/utils.d.ts +1 -1
  43. package/dist/src/{flask → frameworks/flask}/utils.js +7 -7
  44. package/dist/src/frameworks/flask/utils.js.map +1 -0
  45. package/dist/src/{javascript-node → frameworks/javascript-node}/javascript-node-wizard-agent.d.ts +1 -1
  46. package/dist/src/{javascript-node → frameworks/javascript-node}/javascript-node-wizard-agent.js +4 -4
  47. package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js.map +1 -0
  48. package/dist/src/{javascript-web → frameworks/javascript-web}/javascript-web-wizard-agent.d.ts +1 -1
  49. package/dist/src/{javascript-web → frameworks/javascript-web}/javascript-web-wizard-agent.js +16 -14
  50. package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js.map +1 -0
  51. package/dist/src/{javascript-web → frameworks/javascript-web}/utils.d.ts +6 -1
  52. package/dist/src/{javascript-web → frameworks/javascript-web}/utils.js +49 -1
  53. package/dist/src/frameworks/javascript-web/utils.js.map +1 -0
  54. package/dist/src/{laravel → frameworks/laravel}/laravel-wizard-agent.d.ts +1 -1
  55. package/dist/src/{laravel → frameworks/laravel}/laravel-wizard-agent.js +2 -2
  56. package/dist/src/frameworks/laravel/laravel-wizard-agent.js.map +1 -0
  57. package/dist/src/{laravel → frameworks/laravel}/utils.d.ts +1 -1
  58. package/dist/src/{laravel → frameworks/laravel}/utils.js +5 -5
  59. package/dist/src/frameworks/laravel/utils.js.map +1 -0
  60. package/dist/src/{nextjs → frameworks/nextjs}/nextjs-wizard-agent.d.ts +1 -1
  61. package/dist/src/{nextjs → frameworks/nextjs}/nextjs-wizard-agent.js +30 -8
  62. package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js.map +1 -0
  63. package/dist/src/{nextjs → frameworks/nextjs}/utils.d.ts +5 -2
  64. package/dist/src/{nextjs → frameworks/nextjs}/utils.js +6 -20
  65. package/dist/src/frameworks/nextjs/utils.js.map +1 -0
  66. package/dist/src/{nuxt → frameworks/nuxt}/nuxt-wizard-agent.d.ts +1 -1
  67. package/dist/src/{nuxt → frameworks/nuxt}/nuxt-wizard-agent.js +11 -9
  68. package/dist/src/frameworks/nuxt/nuxt-wizard-agent.js.map +1 -0
  69. package/dist/src/{python → frameworks/python}/python-wizard-agent.d.ts +1 -1
  70. package/dist/src/{python → frameworks/python}/python-wizard-agent.js +3 -3
  71. package/dist/src/frameworks/python/python-wizard-agent.js.map +1 -0
  72. package/dist/src/{python → frameworks/python}/utils.d.ts +1 -1
  73. package/dist/src/frameworks/python/utils.js.map +1 -0
  74. package/dist/src/{rails → frameworks/rails}/rails-wizard-agent.d.ts +1 -1
  75. package/dist/src/{rails → frameworks/rails}/rails-wizard-agent.js +2 -2
  76. package/dist/src/frameworks/rails/rails-wizard-agent.js.map +1 -0
  77. package/dist/src/{rails → frameworks/rails}/utils.d.ts +1 -1
  78. package/dist/src/{rails → frameworks/rails}/utils.js +4 -4
  79. package/dist/src/frameworks/rails/utils.js.map +1 -0
  80. package/dist/src/{react-native → frameworks/react-native}/react-native-wizard-agent.d.ts +1 -1
  81. package/dist/src/{react-native → frameworks/react-native}/react-native-wizard-agent.js +9 -7
  82. package/dist/src/frameworks/react-native/react-native-wizard-agent.js.map +1 -0
  83. package/dist/src/{react-native → frameworks/react-native}/utils.d.ts +1 -1
  84. package/dist/src/{react-native → frameworks/react-native}/utils.js +7 -10
  85. package/dist/src/frameworks/react-native/utils.js.map +1 -0
  86. package/dist/src/{react-router → frameworks/react-router}/react-router-wizard-agent.d.ts +1 -1
  87. package/dist/src/{react-router → frameworks/react-router}/react-router-wizard-agent.js +15 -8
  88. package/dist/src/frameworks/react-router/react-router-wizard-agent.js.map +1 -0
  89. package/dist/src/frameworks/react-router/utils.d.ts +13 -0
  90. package/dist/src/{react-router → frameworks/react-router}/utils.js +14 -111
  91. package/dist/src/frameworks/react-router/utils.js.map +1 -0
  92. package/dist/src/{ruby → frameworks/ruby}/ruby-wizard-agent.d.ts +1 -1
  93. package/dist/src/{ruby → frameworks/ruby}/ruby-wizard-agent.js +2 -2
  94. package/dist/src/frameworks/ruby/ruby-wizard-agent.js.map +1 -0
  95. package/dist/src/{ruby → frameworks/ruby}/utils.d.ts +1 -1
  96. package/dist/src/{ruby → frameworks/ruby}/utils.js +1 -1
  97. package/dist/src/frameworks/ruby/utils.js.map +1 -0
  98. package/dist/src/{svelte → frameworks/svelte}/svelte-wizard-agent.d.ts +1 -1
  99. package/dist/src/{svelte → frameworks/svelte}/svelte-wizard-agent.js +5 -5
  100. package/dist/src/frameworks/svelte/svelte-wizard-agent.js.map +1 -0
  101. package/dist/src/{swift → frameworks/swift}/swift-wizard-agent.d.ts +1 -1
  102. package/dist/src/{swift → frameworks/swift}/swift-wizard-agent.js +2 -2
  103. package/dist/src/frameworks/swift/swift-wizard-agent.js.map +1 -0
  104. package/dist/src/{swift → frameworks/swift}/utils.d.ts +1 -1
  105. package/dist/src/frameworks/swift/utils.js.map +1 -0
  106. package/dist/src/{tanstack-router → frameworks/tanstack-router}/tanstack-router-wizard-agent.d.ts +1 -1
  107. package/dist/src/{tanstack-router → frameworks/tanstack-router}/tanstack-router-wizard-agent.js +15 -8
  108. package/dist/src/frameworks/tanstack-router/tanstack-router-wizard-agent.js.map +1 -0
  109. package/dist/src/frameworks/tanstack-router/utils.d.ts +11 -0
  110. package/dist/src/{tanstack-router → frameworks/tanstack-router}/utils.js +4 -47
  111. package/dist/src/frameworks/tanstack-router/utils.js.map +1 -0
  112. package/dist/src/{tanstack-start → frameworks/tanstack-start}/tanstack-start-wizard-agent.d.ts +1 -1
  113. package/dist/src/{tanstack-start → frameworks/tanstack-start}/tanstack-start-wizard-agent.js +9 -7
  114. package/dist/src/frameworks/tanstack-start/tanstack-start-wizard-agent.js.map +1 -0
  115. package/dist/src/{tanstack-start → frameworks/tanstack-start}/utils.js +1 -1
  116. package/dist/src/frameworks/tanstack-start/utils.js.map +1 -0
  117. package/dist/src/{vue → frameworks/vue}/vue-wizard-agent.d.ts +1 -1
  118. package/dist/src/{vue → frameworks/vue}/vue-wizard-agent.js +8 -8
  119. package/dist/src/frameworks/vue/vue-wizard-agent.js.map +1 -0
  120. package/dist/src/lib/__tests__/agent-interface.test.js +91 -19
  121. package/dist/src/lib/__tests__/agent-interface.test.js.map +1 -1
  122. package/dist/src/lib/agent-interface.d.ts +49 -2
  123. package/dist/src/lib/agent-interface.js +254 -40
  124. package/dist/src/lib/agent-interface.js.map +1 -1
  125. package/dist/src/lib/agent-runner.d.ts +4 -2
  126. package/dist/src/lib/agent-runner.js +132 -126
  127. package/dist/src/lib/agent-runner.js.map +1 -1
  128. package/dist/src/lib/api.d.ts +4 -4
  129. package/dist/src/lib/commandments.js +1 -0
  130. package/dist/src/lib/commandments.js.map +1 -1
  131. package/dist/src/lib/constants.d.ts +22 -9
  132. package/dist/src/lib/constants.js +35 -11
  133. package/dist/src/lib/constants.js.map +1 -1
  134. package/dist/src/lib/framework-config.d.ts +26 -0
  135. package/dist/src/lib/framework-config.js.map +1 -1
  136. package/dist/src/lib/health-checks/__tests__/health-checks.test.d.ts +18 -0
  137. package/dist/src/lib/health-checks/__tests__/health-checks.test.js +752 -0
  138. package/dist/src/lib/health-checks/__tests__/health-checks.test.js.map +1 -0
  139. package/dist/src/lib/health-checks/endpoints.d.ts +3 -0
  140. package/dist/src/lib/health-checks/endpoints.js +46 -0
  141. package/dist/src/lib/health-checks/endpoints.js.map +1 -0
  142. package/dist/src/lib/health-checks/index.d.ts +4 -0
  143. package/dist/src/lib/health-checks/index.js +23 -0
  144. package/dist/src/lib/health-checks/index.js.map +1 -0
  145. package/dist/src/lib/health-checks/readiness.d.ts +24 -0
  146. package/dist/src/lib/health-checks/readiness.js +119 -0
  147. package/dist/src/lib/health-checks/readiness.js.map +1 -0
  148. package/dist/src/lib/health-checks/statuspage.d.ts +9 -0
  149. package/dist/src/lib/health-checks/statuspage.js +105 -0
  150. package/dist/src/lib/health-checks/statuspage.js.map +1 -0
  151. package/dist/src/lib/health-checks/types.d.ts +31 -0
  152. package/dist/src/lib/health-checks/types.js +10 -0
  153. package/dist/src/lib/health-checks/types.js.map +1 -0
  154. package/dist/src/lib/middleware/benchmark.d.ts +2 -2
  155. package/dist/src/lib/middleware/benchmark.js +3 -3
  156. package/dist/src/lib/middleware/benchmark.js.map +1 -1
  157. package/dist/src/lib/middleware/benchmarks/json-writer.js +2 -2
  158. package/dist/src/lib/middleware/benchmarks/json-writer.js.map +1 -1
  159. package/dist/src/lib/middleware/benchmarks/summary.d.ts +2 -2
  160. package/dist/src/lib/middleware/benchmarks/summary.js +9 -9
  161. package/dist/src/lib/middleware/benchmarks/summary.js.map +1 -1
  162. package/dist/src/lib/middleware/types.d.ts +2 -2
  163. package/dist/src/lib/middleware/types.js.map +1 -1
  164. package/dist/src/lib/package-manager-detection.js +1 -1
  165. package/dist/src/lib/package-manager-detection.js.map +1 -1
  166. package/dist/src/lib/registry.js +21 -21
  167. package/dist/src/lib/registry.js.map +1 -1
  168. package/dist/src/lib/version.d.ts +1 -1
  169. package/dist/src/lib/version.js +1 -1
  170. package/dist/src/lib/version.js.map +1 -1
  171. package/dist/src/lib/wizard-session.d.ts +115 -0
  172. package/dist/src/lib/wizard-session.js +104 -0
  173. package/dist/src/lib/wizard-session.js.map +1 -0
  174. package/dist/src/lib/wizard-tools.js +13 -0
  175. package/dist/src/lib/wizard-tools.js.map +1 -1
  176. package/dist/src/run.d.ts +3 -1
  177. package/dist/src/run.js +73 -55
  178. package/dist/src/run.js.map +1 -1
  179. package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/codex.test.js +18 -22
  180. package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/codex.test.js.map +1 -1
  181. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.d.ts +6 -6
  182. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +6 -6
  183. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.d.ts +7 -7
  184. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js +8 -9
  185. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js.map +1 -1
  186. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.d.ts +6 -6
  187. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.d.ts +6 -6
  188. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.d.ts +6 -6
  189. package/dist/src/steps/add-mcp-server-to-clients/defaults.d.ts +6 -6
  190. package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +5 -2
  191. package/dist/src/steps/add-mcp-server-to-clients/index.js +24 -107
  192. package/dist/src/steps/add-mcp-server-to-clients/index.js.map +1 -1
  193. package/dist/src/steps/add-or-update-environment-variables.js +15 -20
  194. package/dist/src/steps/add-or-update-environment-variables.js.map +1 -1
  195. package/dist/src/steps/index.d.ts +0 -1
  196. package/dist/src/steps/index.js +0 -1
  197. package/dist/src/steps/index.js.map +1 -1
  198. package/dist/src/steps/run-prettier.js +9 -11
  199. package/dist/src/steps/run-prettier.js.map +1 -1
  200. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +6 -3
  201. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -1
  202. package/dist/src/steps/upload-environment-variables/index.d.ts +3 -3
  203. package/dist/src/steps/upload-environment-variables/index.js +7 -35
  204. package/dist/src/steps/upload-environment-variables/index.js.map +1 -1
  205. package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +3 -2
  206. package/dist/src/steps/upload-environment-variables/providers/vercel.js +2 -2
  207. package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +1 -1
  208. package/dist/src/ui/index.d.ts +8 -0
  209. package/dist/src/ui/index.js +17 -0
  210. package/dist/src/ui/index.js.map +1 -0
  211. package/dist/src/ui/logging-ui.d.ts +44 -0
  212. package/dist/src/ui/logging-ui.js +103 -0
  213. package/dist/src/ui/logging-ui.js.map +1 -0
  214. package/dist/src/ui/tui/App.d.ts +6 -0
  215. package/dist/src/ui/tui/App.js +10 -0
  216. package/dist/src/ui/tui/App.js.map +1 -0
  217. package/dist/src/ui/tui/__tests__/layout-helpers.test.js +68 -0
  218. package/dist/src/ui/tui/__tests__/layout-helpers.test.js.map +1 -0
  219. package/dist/src/ui/tui/__tests__/store.test.d.ts +1 -0
  220. package/dist/src/ui/tui/__tests__/store.test.js +723 -0
  221. package/dist/src/ui/tui/__tests__/store.test.js.map +1 -0
  222. package/dist/src/ui/tui/components/LearnCard.d.ts +10 -0
  223. package/dist/src/ui/tui/components/LearnCard.js +217 -0
  224. package/dist/src/ui/tui/components/LearnCard.js.map +1 -0
  225. package/dist/src/ui/tui/components/TipsCard.d.ts +9 -0
  226. package/dist/src/ui/tui/components/TipsCard.js +55 -0
  227. package/dist/src/ui/tui/components/TipsCard.js.map +1 -0
  228. package/dist/src/ui/tui/components/TitleBar.d.ts +6 -0
  229. package/dist/src/ui/tui/components/TitleBar.js +17 -0
  230. package/dist/src/ui/tui/components/TitleBar.js.map +1 -0
  231. package/dist/src/ui/tui/flows.d.ts +38 -0
  232. package/dist/src/ui/tui/flows.js +82 -0
  233. package/dist/src/ui/tui/flows.js.map +1 -0
  234. package/dist/src/ui/tui/hooks/useStdoutDimensions.d.ts +9 -0
  235. package/dist/src/ui/tui/hooks/useStdoutDimensions.js +37 -0
  236. package/dist/src/ui/tui/hooks/useStdoutDimensions.js.map +1 -0
  237. package/dist/src/ui/tui/ink-ui.d.ts +50 -0
  238. package/dist/src/ui/tui/ink-ui.js +108 -0
  239. package/dist/src/ui/tui/ink-ui.js.map +1 -0
  240. package/dist/src/ui/tui/package.json +1 -0
  241. package/dist/src/ui/tui/playground/PlaygroundApp.d.ts +12 -0
  242. package/dist/src/ui/tui/playground/PlaygroundApp.js +32 -0
  243. package/dist/src/ui/tui/playground/PlaygroundApp.js.map +1 -0
  244. package/dist/src/ui/tui/playground/demos/InputDemo.d.ts +4 -0
  245. package/dist/src/ui/tui/playground/demos/InputDemo.js +53 -0
  246. package/dist/src/ui/tui/playground/demos/InputDemo.js.map +1 -0
  247. package/dist/src/ui/tui/playground/demos/LayoutDemo.d.ts +5 -0
  248. package/dist/src/ui/tui/playground/demos/LayoutDemo.js +25 -0
  249. package/dist/src/ui/tui/playground/demos/LayoutDemo.js.map +1 -0
  250. package/dist/src/ui/tui/playground/demos/LogDemo.d.ts +5 -0
  251. package/dist/src/ui/tui/playground/demos/LogDemo.js +53 -0
  252. package/dist/src/ui/tui/playground/demos/LogDemo.js.map +1 -0
  253. package/dist/src/ui/tui/playground/demos/ProgressDemo.d.ts +5 -0
  254. package/dist/src/ui/tui/playground/demos/ProgressDemo.js +58 -0
  255. package/dist/src/ui/tui/playground/demos/ProgressDemo.js.map +1 -0
  256. package/dist/src/ui/tui/playground/demos/RunScreenDemo.d.ts +11 -0
  257. package/dist/src/ui/tui/playground/demos/RunScreenDemo.js +159 -0
  258. package/dist/src/ui/tui/playground/demos/RunScreenDemo.js.map +1 -0
  259. package/dist/src/ui/tui/playground/demos/WelcomeDemo.d.ts +9 -0
  260. package/dist/src/ui/tui/playground/demos/WelcomeDemo.js +15 -0
  261. package/dist/src/ui/tui/playground/demos/WelcomeDemo.js.map +1 -0
  262. package/dist/src/ui/tui/playground/start-playground.d.ts +4 -0
  263. package/dist/src/ui/tui/playground/start-playground.js +24 -0
  264. package/dist/src/ui/tui/playground/start-playground.js.map +1 -0
  265. package/dist/src/ui/tui/primitives/CardLayout.d.ts +12 -0
  266. package/dist/src/ui/tui/primitives/CardLayout.js +10 -0
  267. package/dist/src/ui/tui/primitives/CardLayout.js.map +1 -0
  268. package/dist/src/ui/tui/primitives/ConfirmationInput.d.ts +13 -0
  269. package/dist/src/ui/tui/primitives/ConfirmationInput.js +35 -0
  270. package/dist/src/ui/tui/primitives/ConfirmationInput.js.map +1 -0
  271. package/dist/src/ui/tui/primitives/ContentSequencer.d.ts +42 -0
  272. package/dist/src/ui/tui/primitives/ContentSequencer.js +137 -0
  273. package/dist/src/ui/tui/primitives/ContentSequencer.js.map +1 -0
  274. package/dist/src/ui/tui/primitives/DissolveTransition.d.ts +21 -0
  275. package/dist/src/ui/tui/primitives/DissolveTransition.js +149 -0
  276. package/dist/src/ui/tui/primitives/DissolveTransition.js.map +1 -0
  277. package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +9 -0
  278. package/dist/src/ui/tui/primitives/EventPlanViewer.js +9 -0
  279. package/dist/src/ui/tui/primitives/EventPlanViewer.js.map +1 -0
  280. package/dist/src/ui/tui/primitives/HNViewer.d.ts +7 -0
  281. package/dist/src/ui/tui/primitives/HNViewer.js +63 -0
  282. package/dist/src/ui/tui/primitives/HNViewer.js.map +1 -0
  283. package/dist/src/ui/tui/primitives/LinesBlock.d.ts +16 -0
  284. package/dist/src/ui/tui/primitives/LinesBlock.js +37 -0
  285. package/dist/src/ui/tui/primitives/LinesBlock.js.map +1 -0
  286. package/dist/src/ui/tui/primitives/LoadingBox.d.ts +8 -0
  287. package/dist/src/ui/tui/primitives/LoadingBox.js +10 -0
  288. package/dist/src/ui/tui/primitives/LoadingBox.js.map +1 -0
  289. package/dist/src/ui/tui/primitives/LogViewer.d.ts +11 -0
  290. package/dist/src/ui/tui/primitives/LogViewer.js +55 -0
  291. package/dist/src/ui/tui/primitives/LogViewer.js.map +1 -0
  292. package/dist/src/ui/tui/primitives/NodeBlock.d.ts +13 -0
  293. package/dist/src/ui/tui/primitives/NodeBlock.js +17 -0
  294. package/dist/src/ui/tui/primitives/NodeBlock.js.map +1 -0
  295. package/dist/src/ui/tui/primitives/PickerMenu.d.ts +20 -0
  296. package/dist/src/ui/tui/primitives/PickerMenu.js +134 -0
  297. package/dist/src/ui/tui/primitives/PickerMenu.js.map +1 -0
  298. package/dist/src/ui/tui/primitives/ProgressList.d.ts +15 -0
  299. package/dist/src/ui/tui/primitives/ProgressList.js +30 -0
  300. package/dist/src/ui/tui/primitives/ProgressList.js.map +1 -0
  301. package/dist/src/ui/tui/primitives/PromptLabel.d.ts +11 -0
  302. package/dist/src/ui/tui/primitives/PromptLabel.js +13 -0
  303. package/dist/src/ui/tui/primitives/PromptLabel.js.map +1 -0
  304. package/dist/src/ui/tui/primitives/ScreenContainer.d.ts +16 -0
  305. package/dist/src/ui/tui/primitives/ScreenContainer.js +36 -0
  306. package/dist/src/ui/tui/primitives/ScreenContainer.js.map +1 -0
  307. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.d.ts +22 -0
  308. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.js +35 -0
  309. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.js.map +1 -0
  310. package/dist/src/ui/tui/primitives/SplitView.d.ts +11 -0
  311. package/dist/src/ui/tui/primitives/SplitView.js +9 -0
  312. package/dist/src/ui/tui/primitives/SplitView.js.map +1 -0
  313. package/dist/src/ui/tui/primitives/TabContainer.d.ts +23 -0
  314. package/dist/src/ui/tui/primitives/TabContainer.js +45 -0
  315. package/dist/src/ui/tui/primitives/TabContainer.js.map +1 -0
  316. package/dist/src/ui/tui/primitives/TextBlock.d.ts +41 -0
  317. package/dist/src/ui/tui/primitives/TextBlock.js +144 -0
  318. package/dist/src/ui/tui/primitives/TextBlock.js.map +1 -0
  319. package/dist/src/ui/tui/primitives/content-types.d.ts +37 -0
  320. package/dist/src/ui/tui/primitives/content-types.js +19 -0
  321. package/dist/src/ui/tui/primitives/content-types.js.map +1 -0
  322. package/dist/src/ui/tui/primitives/index.d.ts +24 -0
  323. package/dist/src/ui/tui/primitives/index.js +21 -0
  324. package/dist/src/ui/tui/primitives/index.js.map +1 -0
  325. package/dist/src/ui/tui/primitives/layout-helpers.d.ts +36 -0
  326. package/dist/src/ui/tui/primitives/layout-helpers.js +95 -0
  327. package/dist/src/ui/tui/primitives/layout-helpers.js.map +1 -0
  328. package/dist/src/ui/tui/primitives/text-helpers.d.ts +10 -0
  329. package/dist/src/ui/tui/primitives/text-helpers.js +43 -0
  330. package/dist/src/ui/tui/primitives/text-helpers.js.map +1 -0
  331. package/dist/src/ui/tui/router.d.ts +56 -0
  332. package/dist/src/ui/tui/router.js +94 -0
  333. package/dist/src/ui/tui/router.js.map +1 -0
  334. package/dist/src/ui/tui/screen-registry.d.ts +19 -0
  335. package/dist/src/ui/tui/screen-registry.js +34 -0
  336. package/dist/src/ui/tui/screen-registry.js.map +1 -0
  337. package/dist/src/ui/tui/screens/AuthScreen.d.ts +13 -0
  338. package/dist/src/ui/tui/screens/AuthScreen.js +20 -0
  339. package/dist/src/ui/tui/screens/AuthScreen.js.map +1 -0
  340. package/dist/src/ui/tui/screens/IntroScreen.d.ts +16 -0
  341. package/dist/src/ui/tui/screens/IntroScreen.js +63 -0
  342. package/dist/src/ui/tui/screens/IntroScreen.js.map +1 -0
  343. package/dist/src/ui/tui/screens/McpScreen.d.ts +24 -0
  344. package/dist/src/ui/tui/screens/McpScreen.js +112 -0
  345. package/dist/src/ui/tui/screens/McpScreen.js.map +1 -0
  346. package/dist/src/ui/tui/screens/OutageScreen.d.ts +10 -0
  347. package/dist/src/ui/tui/screens/OutageScreen.js +17 -0
  348. package/dist/src/ui/tui/screens/OutageScreen.js.map +1 -0
  349. package/dist/src/ui/tui/screens/OutroScreen.d.ts +11 -0
  350. package/dist/src/ui/tui/screens/OutroScreen.js +22 -0
  351. package/dist/src/ui/tui/screens/OutroScreen.js.map +1 -0
  352. package/dist/src/ui/tui/screens/RunScreen.d.ts +16 -0
  353. package/dist/src/ui/tui/screens/RunScreen.js +73 -0
  354. package/dist/src/ui/tui/screens/RunScreen.js.map +1 -0
  355. package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +10 -0
  356. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +24 -0
  357. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js.map +1 -0
  358. package/dist/src/ui/tui/screens/SetupScreen.d.ts +13 -0
  359. package/dist/src/ui/tui/screens/SetupScreen.js +74 -0
  360. package/dist/src/ui/tui/screens/SetupScreen.js.map +1 -0
  361. package/dist/src/ui/tui/services/mcp-installer.d.ts +21 -0
  362. package/dist/src/ui/tui/services/mcp-installer.js +58 -0
  363. package/dist/src/ui/tui/services/mcp-installer.js.map +1 -0
  364. package/dist/src/ui/tui/start-tui.d.ts +9 -0
  365. package/dist/src/ui/tui/start-tui.js +41 -0
  366. package/dist/src/ui/tui/start-tui.js.map +1 -0
  367. package/dist/src/ui/tui/store.d.ts +132 -0
  368. package/dist/src/ui/tui/store.js +320 -0
  369. package/dist/src/ui/tui/store.js.map +1 -0
  370. package/dist/src/ui/tui/styles.d.ts +31 -0
  371. package/dist/src/ui/tui/styles.js +34 -0
  372. package/dist/src/ui/tui/styles.js.map +1 -0
  373. package/dist/src/ui/wizard-ui.d.ts +64 -0
  374. package/dist/src/ui/wizard-ui.js +19 -0
  375. package/dist/src/ui/wizard-ui.js.map +1 -0
  376. package/dist/src/utils/__tests__/setup-utils.test.d.ts +1 -0
  377. package/dist/src/utils/__tests__/{clack-utils.test.js → setup-utils.test.js} +31 -22
  378. package/dist/src/utils/__tests__/setup-utils.test.js.map +1 -0
  379. package/dist/src/utils/analytics.d.ts +18 -0
  380. package/dist/src/utils/analytics.js +53 -0
  381. package/dist/src/utils/analytics.js.map +1 -1
  382. package/dist/src/utils/anthropic-status.d.ts +1 -12
  383. package/dist/src/utils/anthropic-status.js +4 -56
  384. package/dist/src/utils/anthropic-status.js.map +1 -1
  385. package/dist/src/utils/custom-headers.d.ts +9 -0
  386. package/dist/src/utils/custom-headers.js +24 -0
  387. package/dist/src/utils/custom-headers.js.map +1 -0
  388. package/dist/src/utils/debug.js +2 -2
  389. package/dist/src/utils/debug.js.map +1 -1
  390. package/dist/src/utils/environment.js +4 -2
  391. package/dist/src/utils/environment.js.map +1 -1
  392. package/dist/src/utils/oauth.js +9 -10
  393. package/dist/src/utils/oauth.js.map +1 -1
  394. package/dist/src/utils/package-manager.js +13 -13
  395. package/dist/src/utils/package-manager.js.map +1 -1
  396. package/dist/src/utils/setup-utils.d.ts +76 -0
  397. package/dist/src/utils/setup-utils.js +364 -0
  398. package/dist/src/utils/setup-utils.js.map +1 -0
  399. package/dist/src/utils/wizard-abort.d.ts +13 -0
  400. package/dist/src/utils/wizard-abort.js +57 -0
  401. package/dist/src/utils/wizard-abort.js.map +1 -0
  402. package/package.json +19 -7
  403. package/dist/src/android/android-wizard-agent.js.map +0 -1
  404. package/dist/src/android/utils.js.map +0 -1
  405. package/dist/src/angular/angular-wizard-agent.js.map +0 -1
  406. package/dist/src/angular/utils.js.map +0 -1
  407. package/dist/src/astro/astro-wizard-agent.js.map +0 -1
  408. package/dist/src/astro/utils.js.map +0 -1
  409. package/dist/src/django/django-wizard-agent.js.map +0 -1
  410. package/dist/src/django/utils.js.map +0 -1
  411. package/dist/src/fastapi/fastapi-wizard-agent.d.ts +0 -7
  412. package/dist/src/fastapi/fastapi-wizard-agent.js.map +0 -1
  413. package/dist/src/fastapi/utils.js.map +0 -1
  414. package/dist/src/flask/flask-wizard-agent.js.map +0 -1
  415. package/dist/src/flask/utils.js.map +0 -1
  416. package/dist/src/javascript-node/javascript-node-wizard-agent.js.map +0 -1
  417. package/dist/src/javascript-web/javascript-web-wizard-agent.js.map +0 -1
  418. package/dist/src/javascript-web/utils.js.map +0 -1
  419. package/dist/src/laravel/laravel-wizard-agent.js.map +0 -1
  420. package/dist/src/laravel/utils.js.map +0 -1
  421. package/dist/src/mcp.d.ts +0 -8
  422. package/dist/src/mcp.js +0 -44
  423. package/dist/src/mcp.js.map +0 -1
  424. package/dist/src/nextjs/nextjs-wizard-agent.js.map +0 -1
  425. package/dist/src/nextjs/utils.js.map +0 -1
  426. package/dist/src/nuxt/nuxt-wizard-agent.js.map +0 -1
  427. package/dist/src/python/python-wizard-agent.js.map +0 -1
  428. package/dist/src/python/utils.js.map +0 -1
  429. package/dist/src/rails/rails-wizard-agent.js.map +0 -1
  430. package/dist/src/rails/utils.js.map +0 -1
  431. package/dist/src/react-native/react-native-wizard-agent.js.map +0 -1
  432. package/dist/src/react-native/utils.js.map +0 -1
  433. package/dist/src/react-router/react-router-wizard-agent.js.map +0 -1
  434. package/dist/src/react-router/utils.d.ts +0 -19
  435. package/dist/src/react-router/utils.js.map +0 -1
  436. package/dist/src/ruby/ruby-wizard-agent.js.map +0 -1
  437. package/dist/src/ruby/utils.js.map +0 -1
  438. package/dist/src/steps/__tests__/add-editor-rules.test.js +0 -208
  439. package/dist/src/steps/__tests__/add-editor-rules.test.js.map +0 -1
  440. package/dist/src/steps/add-editor-rules.d.ts +0 -8
  441. package/dist/src/steps/add-editor-rules.js +0 -71
  442. package/dist/src/steps/add-editor-rules.js.map +0 -1
  443. package/dist/src/svelte/svelte-wizard-agent.js.map +0 -1
  444. package/dist/src/swift/swift-wizard-agent.js.map +0 -1
  445. package/dist/src/swift/utils.js.map +0 -1
  446. package/dist/src/tanstack-router/tanstack-router-wizard-agent.js.map +0 -1
  447. package/dist/src/tanstack-router/utils.d.ts +0 -17
  448. package/dist/src/tanstack-router/utils.js.map +0 -1
  449. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +0 -1
  450. package/dist/src/tanstack-start/utils.js.map +0 -1
  451. package/dist/src/utils/__tests__/clack-utils.test.js.map +0 -1
  452. package/dist/src/utils/clack-utils.d.ts +0 -188
  453. package/dist/src/utils/clack-utils.js +0 -705
  454. package/dist/src/utils/clack-utils.js.map +0 -1
  455. package/dist/src/utils/clack.d.ts +0 -2
  456. package/dist/src/utils/clack.js +0 -9
  457. package/dist/src/utils/clack.js.map +0 -1
  458. package/dist/src/vue/vue-wizard-agent.js.map +0 -1
  459. /package/dist/src/{steps/__tests__/add-editor-rules.test.d.ts → __tests__/wizard-abort.test.d.ts} +0 -0
  460. /package/dist/src/{angular → frameworks/angular}/utils.d.ts +0 -0
  461. /package/dist/src/{python → frameworks/python}/utils.js +0 -0
  462. /package/dist/src/{swift → frameworks/swift}/utils.js +0 -0
  463. /package/dist/src/{tanstack-start → frameworks/tanstack-start}/utils.d.ts +0 -0
  464. /package/dist/src/{utils/__tests__/clack-utils.test.d.ts → ui/tui/__tests__/layout-helpers.test.d.ts} +0 -0
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ProgressDemo — Demonstrates ProgressList + LoadingBox.
4
+ * Auto-animates task progression through states.
5
+ */
6
+ import { Box, Text } from 'ink';
7
+ import { useState, useEffect } from 'react';
8
+ import { ProgressList, LoadingBox } from '../../primitives/index.js';
9
+ import { Colors } from '../../styles.js';
10
+ const INITIAL_ITEMS = [
11
+ {
12
+ label: 'Detect framework',
13
+ activeForm: 'Detecting framework',
14
+ status: 'pending',
15
+ },
16
+ {
17
+ label: 'Install dependencies',
18
+ activeForm: 'Installing dependencies',
19
+ status: 'pending',
20
+ },
21
+ {
22
+ label: 'Configure PostHog',
23
+ activeForm: 'Configuring PostHog',
24
+ status: 'pending',
25
+ },
26
+ {
27
+ label: 'Add analytics provider',
28
+ activeForm: 'Adding analytics provider',
29
+ status: 'pending',
30
+ },
31
+ { label: 'Verify setup', activeForm: 'Verifying setup', status: 'pending' },
32
+ ];
33
+ export const ProgressDemo = () => {
34
+ const [items, setItems] = useState(INITIAL_ITEMS);
35
+ const [tick, setTick] = useState(0);
36
+ useEffect(() => {
37
+ const timer = setInterval(() => {
38
+ setTick((t) => t + 1);
39
+ }, 1500);
40
+ return () => clearInterval(timer);
41
+ }, []);
42
+ useEffect(() => {
43
+ // Cycle: each tick advances the "active" task
44
+ const total = INITIAL_ITEMS.length;
45
+ // After all tasks complete, restart
46
+ const cycle = tick % (total + 2); // +2 for a pause at the end
47
+ setItems(INITIAL_ITEMS.map((item, i) => {
48
+ if (i < cycle)
49
+ return { ...item, status: 'completed' };
50
+ if (i === cycle)
51
+ return { ...item, status: 'in_progress' };
52
+ return { ...item, status: 'pending' };
53
+ }));
54
+ }, [tick]);
55
+ const allDone = items.every((i) => i.status === 'completed');
56
+ return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Text, { bold: true, color: Colors.accent, children: "Progress Demo" }), _jsx(Text, { dimColor: true, children: "Tasks auto-advance every 1.5s (cycles continuously)" }), _jsx(Box, { height: 1 }), _jsx(ProgressList, { items: items, title: "Setup in progress:" }), _jsx(Box, { height: 1 }), !allDone && _jsx(LoadingBox, { message: "Working..." }), allDone && (_jsxs(Text, { color: Colors.success, bold: true, children: ['\u2714', " All tasks complete! Restarting..."] }))] }));
57
+ };
58
+ //# sourceMappingURL=ProgressDemo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressDemo.js","sourceRoot":"","sources":["../../../../../../src/ui/tui/playground/demos/ProgressDemo.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,aAAa,GAAmB;IACpC;QACE,KAAK,EAAE,kBAAkB;QACzB,UAAU,EAAE,qBAAqB;QACjC,MAAM,EAAE,SAAS;KAClB;IACD;QACE,KAAK,EAAE,sBAAsB;QAC7B,UAAU,EAAE,yBAAyB;QACrC,MAAM,EAAE,SAAS;KAClB;IACD;QACE,KAAK,EAAE,mBAAmB;QAC1B,UAAU,EAAE,qBAAqB;QACjC,MAAM,EAAE,SAAS;KAClB;IACD;QACE,KAAK,EAAE,wBAAwB;QAC/B,UAAU,EAAE,2BAA2B;QACvC,MAAM,EAAE,SAAS;KAClB;IACD,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE;CAC5E,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAiB,aAAa,CAAC,CAAC;IAClE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,8CAA8C;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC;QACnC,oCAAoC;QACpC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,4BAA4B;QAE9D,QAAQ,CACN,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,GAAG,KAAK;gBAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,WAAoB,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,KAAK;gBAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,aAAsB,EAAE,CAAC;YACpE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC;QACjD,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IAE7D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,8BAExB,EACP,KAAC,IAAI,IAAC,QAAQ,0EAA2D,EACzE,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,YAAY,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC,oBAAoB,GAAG,EACzD,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EACjB,CAAC,OAAO,IAAI,KAAC,UAAU,IAAC,OAAO,EAAC,YAAY,GAAG,EAC/C,OAAO,IAAI,CACV,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,mBAC9B,QAAQ,0CACJ,CACR,IACG,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * ProgressDemo — Demonstrates ProgressList + LoadingBox.\n * Auto-animates task progression through states.\n */\n\nimport { Box, Text } from 'ink';\nimport { useState, useEffect } from 'react';\nimport { ProgressList, LoadingBox } from '../../primitives/index.js';\nimport type { ProgressItem } from '../../primitives/index.js';\nimport { Colors } from '../../styles.js';\n\nconst INITIAL_ITEMS: ProgressItem[] = [\n {\n label: 'Detect framework',\n activeForm: 'Detecting framework',\n status: 'pending',\n },\n {\n label: 'Install dependencies',\n activeForm: 'Installing dependencies',\n status: 'pending',\n },\n {\n label: 'Configure PostHog',\n activeForm: 'Configuring PostHog',\n status: 'pending',\n },\n {\n label: 'Add analytics provider',\n activeForm: 'Adding analytics provider',\n status: 'pending',\n },\n { label: 'Verify setup', activeForm: 'Verifying setup', status: 'pending' },\n];\n\nexport const ProgressDemo = () => {\n const [items, setItems] = useState<ProgressItem[]>(INITIAL_ITEMS);\n const [tick, setTick] = useState(0);\n\n useEffect(() => {\n const timer = setInterval(() => {\n setTick((t) => t + 1);\n }, 1500);\n return () => clearInterval(timer);\n }, []);\n\n useEffect(() => {\n // Cycle: each tick advances the \"active\" task\n const total = INITIAL_ITEMS.length;\n // After all tasks complete, restart\n const cycle = tick % (total + 2); // +2 for a pause at the end\n\n setItems(\n INITIAL_ITEMS.map((item, i) => {\n if (i < cycle) return { ...item, status: 'completed' as const };\n if (i === cycle) return { ...item, status: 'in_progress' as const };\n return { ...item, status: 'pending' as const };\n }),\n );\n }, [tick]);\n\n const allDone = items.every((i) => i.status === 'completed');\n\n return (\n <Box flexDirection=\"column\" flexGrow={1}>\n <Text bold color={Colors.accent}>\n Progress Demo\n </Text>\n <Text dimColor>Tasks auto-advance every 1.5s (cycles continuously)</Text>\n <Box height={1} />\n <ProgressList items={items} title=\"Setup in progress:\" />\n <Box height={1} />\n {!allDone && <LoadingBox message=\"Working...\" />}\n {allDone && (\n <Text color={Colors.success} bold>\n {'\\u2714'} All tasks complete! Restarting...\n </Text>\n )}\n </Box>\n );\n};\n"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * RunScreenDemo — Renders the real RunScreen with a mock store.
3
+ * Tasks auto-advance every 1.5s. Discovered features (Stripe, LLM)
4
+ * are pre-populated so conditional tips appear.
5
+ */
6
+ import { WizardStore } from '../../store.js';
7
+ interface RunScreenDemoProps {
8
+ store: WizardStore;
9
+ }
10
+ export declare const RunScreenDemo: ({ store }: RunScreenDemoProps) => import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -0,0 +1,159 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * RunScreenDemo — Renders the real RunScreen with a mock store.
4
+ * Tasks auto-advance every 1.5s. Discovered features (Stripe, LLM)
5
+ * are pre-populated so conditional tips appear.
6
+ */
7
+ import { useEffect, useRef, useSyncExternalStore } from 'react';
8
+ import { TaskStatus } from '../../store.js';
9
+ import { DiscoveredFeature } from '../../../../lib/wizard-session.js';
10
+ import { TabContainer, SplitView, ProgressList, LogViewer, EventPlanViewer, HNViewer, } from '../../primitives/index.js';
11
+ import { LearnCard } from '../../components/LearnCard.js';
12
+ import { TipsCard } from '../../components/TipsCard.js';
13
+ const MOCK_TASKS = [
14
+ {
15
+ label: 'Checking project structure and finding files for event tracking',
16
+ activeForm: 'Checking project structure',
17
+ status: TaskStatus.Pending,
18
+ done: false,
19
+ },
20
+ {
21
+ label: 'Verify PostHog dependencies',
22
+ activeForm: 'Verifying PostHog dependencies',
23
+ status: TaskStatus.Pending,
24
+ done: false,
25
+ },
26
+ {
27
+ label: 'Generate events plan (.posthog-events.json)',
28
+ activeForm: 'Generating events plan',
29
+ status: TaskStatus.Pending,
30
+ done: false,
31
+ },
32
+ {
33
+ label: 'Install posthog-js and posthog-node packages',
34
+ activeForm: 'Installing packages',
35
+ status: TaskStatus.Pending,
36
+ done: false,
37
+ },
38
+ {
39
+ label: 'Set up environment variables',
40
+ activeForm: 'Setting up environment variables',
41
+ status: TaskStatus.Pending,
42
+ done: false,
43
+ },
44
+ {
45
+ label: 'Create instrumentation-client.ts',
46
+ activeForm: 'Creating instrumentation-client.ts',
47
+ status: TaskStatus.Pending,
48
+ done: false,
49
+ },
50
+ {
51
+ label: 'Update next.config with rewrites',
52
+ activeForm: 'Updating next.config',
53
+ status: TaskStatus.Pending,
54
+ done: false,
55
+ },
56
+ {
57
+ label: 'Create posthog-server.ts',
58
+ activeForm: 'Creating posthog-server.ts',
59
+ status: TaskStatus.Pending,
60
+ done: false,
61
+ },
62
+ {
63
+ label: 'Add PostHog capture events to project files',
64
+ activeForm: 'Adding capture events',
65
+ status: TaskStatus.Pending,
66
+ done: false,
67
+ },
68
+ ];
69
+ const MOCK_EVENTS = [
70
+ { name: 'page_viewed', description: 'Fires when a user views any page' },
71
+ {
72
+ name: 'button_clicked',
73
+ description: 'Fires when the CTA button is clicked',
74
+ },
75
+ {
76
+ name: 'form_submitted',
77
+ description: 'Fires when the contact form is submitted',
78
+ },
79
+ {
80
+ name: 'signup_started',
81
+ description: 'Fires when a user begins the signup flow',
82
+ },
83
+ ];
84
+ export const RunScreenDemo = ({ store }) => {
85
+ const tickRef = useRef(0);
86
+ const lastStatusRef = useRef('');
87
+ // Seed the store with mock data on mount
88
+ useEffect(() => {
89
+ store.addDiscoveredFeature(DiscoveredFeature.Stripe);
90
+ store.addDiscoveredFeature(DiscoveredFeature.LLM);
91
+ store.setEventPlan(MOCK_EVENTS);
92
+ store.pushStatus('Checking project structure.');
93
+ lastStatusRef.current = 'Checking project structure.';
94
+ // Set initial tasks
95
+ const initial = MOCK_TASKS.map((t, i) => i === 0 ? { ...t, status: TaskStatus.InProgress } : t);
96
+ store.setTasks(initial);
97
+ }, []);
98
+ // Auto-advance tasks every 1.5s
99
+ useEffect(() => {
100
+ const timer = setInterval(() => {
101
+ tickRef.current += 1;
102
+ const tick = tickRef.current;
103
+ const total = MOCK_TASKS.length;
104
+ const cycle = tick % (total + 3); // +3 for pause at end before restart
105
+ const tasks = MOCK_TASKS.map((t, i) => {
106
+ if (i < cycle)
107
+ return { ...t, status: TaskStatus.Completed, done: true };
108
+ if (i === cycle)
109
+ return { ...t, status: TaskStatus.InProgress, done: false };
110
+ return { ...t, status: TaskStatus.Pending, done: false };
111
+ });
112
+ store.setTasks(tasks);
113
+ // Only push status when the message actually changes
114
+ if (cycle < total) {
115
+ const msg = MOCK_TASKS[cycle].activeForm + '...';
116
+ if (msg !== lastStatusRef.current) {
117
+ store.pushStatus(msg);
118
+ lastStatusRef.current = msg;
119
+ }
120
+ }
121
+ }, 1500);
122
+ return () => clearInterval(timer);
123
+ }, []);
124
+ useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
125
+ const progressItems = store.tasks.map((t) => ({
126
+ label: t.label,
127
+ activeForm: t.activeForm,
128
+ status: t.status,
129
+ }));
130
+ const statuses = store.statusMessages.length > 0 ? store.statusMessages : undefined;
131
+ const tabs = [
132
+ {
133
+ id: 'status',
134
+ label: 'Status',
135
+ component: (_jsx(SplitView, { left: store.learnCardComplete ? (_jsx(TipsCard, { store: store })) : (_jsx(LearnCard, { store: store, onComplete: () => store.setLearnCardComplete() })), right: _jsx(ProgressList, { items: progressItems, title: "Tasks" }) })),
136
+ },
137
+ ...(store.eventPlan.length > 0
138
+ ? [
139
+ {
140
+ id: 'events',
141
+ label: 'Event plan',
142
+ component: _jsx(EventPlanViewer, { events: store.eventPlan }),
143
+ },
144
+ ]
145
+ : []),
146
+ {
147
+ id: 'logs',
148
+ label: 'Tail logs',
149
+ component: _jsx(LogViewer, { filePath: "/tmp/posthog-wizard.log" }),
150
+ },
151
+ {
152
+ id: 'hn',
153
+ label: 'HN',
154
+ component: _jsx(HNViewer, {}),
155
+ },
156
+ ];
157
+ return (_jsx(TabContainer, { tabs: tabs, statusMessage: statuses, expandableStatus: true, store: store }));
158
+ };
159
+ //# sourceMappingURL=RunScreenDemo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunScreenDemo.js","sourceRoot":"","sources":["../../../../../../src/ui/tui/playground/demos/RunScreenDemo.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * RunScreenDemo — Renders the real RunScreen with a mock store.\n * Tasks auto-advance every 1.5s. Discovered features (Stripe, LLM)\n * are pre-populated so conditional tips appear.\n */\n\nimport { useEffect, useRef, useSyncExternalStore } from 'react';\nimport { WizardStore, TaskStatus } from '../../store.js';\nimport { DiscoveredFeature } from '../../../../lib/wizard-session.js';\nimport {\n TabContainer,\n SplitView,\n ProgressList,\n LogViewer,\n EventPlanViewer,\n HNViewer,\n} from '../../primitives/index.js';\nimport type { ProgressItem } from '../../primitives/index.js';\nimport { LearnCard } from '../../components/LearnCard.js';\nimport { TipsCard } from '../../components/TipsCard.js';\n\nconst MOCK_TASKS = [\n {\n label: 'Checking project structure and finding files for event tracking',\n activeForm: 'Checking project structure',\n status: TaskStatus.Pending,\n done: false,\n },\n {\n label: 'Verify PostHog dependencies',\n activeForm: 'Verifying PostHog dependencies',\n status: TaskStatus.Pending,\n done: false,\n },\n {\n label: 'Generate events plan (.posthog-events.json)',\n activeForm: 'Generating events plan',\n status: TaskStatus.Pending,\n done: false,\n },\n {\n label: 'Install posthog-js and posthog-node packages',\n activeForm: 'Installing packages',\n status: TaskStatus.Pending,\n done: false,\n },\n {\n label: 'Set up environment variables',\n activeForm: 'Setting up environment variables',\n status: TaskStatus.Pending,\n done: false,\n },\n {\n label: 'Create instrumentation-client.ts',\n activeForm: 'Creating instrumentation-client.ts',\n status: TaskStatus.Pending,\n done: false,\n },\n {\n label: 'Update next.config with rewrites',\n activeForm: 'Updating next.config',\n status: TaskStatus.Pending,\n done: false,\n },\n {\n label: 'Create posthog-server.ts',\n activeForm: 'Creating posthog-server.ts',\n status: TaskStatus.Pending,\n done: false,\n },\n {\n label: 'Add PostHog capture events to project files',\n activeForm: 'Adding capture events',\n status: TaskStatus.Pending,\n done: false,\n },\n];\n\nconst MOCK_EVENTS = [\n { name: 'page_viewed', description: 'Fires when a user views any page' },\n {\n name: 'button_clicked',\n description: 'Fires when the CTA button is clicked',\n },\n {\n name: 'form_submitted',\n description: 'Fires when the contact form is submitted',\n },\n {\n name: 'signup_started',\n description: 'Fires when a user begins the signup flow',\n },\n];\n\ninterface RunScreenDemoProps {\n store: WizardStore;\n}\n\nexport const RunScreenDemo = ({ store }: RunScreenDemoProps) => {\n const tickRef = useRef(0);\n const lastStatusRef = useRef('');\n\n // Seed the store with mock data on mount\n useEffect(() => {\n store.addDiscoveredFeature(DiscoveredFeature.Stripe);\n store.addDiscoveredFeature(DiscoveredFeature.LLM);\n store.setEventPlan(MOCK_EVENTS);\n store.pushStatus('Checking project structure.');\n lastStatusRef.current = 'Checking project structure.';\n\n // Set initial tasks\n const initial = MOCK_TASKS.map((t, i) =>\n i === 0 ? { ...t, status: TaskStatus.InProgress } : t,\n );\n store.setTasks(initial);\n }, []);\n\n // Auto-advance tasks every 1.5s\n useEffect(() => {\n const timer = setInterval(() => {\n tickRef.current += 1;\n const tick = tickRef.current;\n const total = MOCK_TASKS.length;\n const cycle = tick % (total + 3); // +3 for pause at end before restart\n\n const tasks = MOCK_TASKS.map((t, i) => {\n if (i < cycle)\n return { ...t, status: TaskStatus.Completed, done: true };\n if (i === cycle)\n return { ...t, status: TaskStatus.InProgress, done: false };\n return { ...t, status: TaskStatus.Pending, done: false };\n });\n\n store.setTasks(tasks);\n\n // Only push status when the message actually changes\n if (cycle < total) {\n const msg = MOCK_TASKS[cycle].activeForm + '...';\n if (msg !== lastStatusRef.current) {\n store.pushStatus(msg);\n lastStatusRef.current = msg;\n }\n }\n }, 1500);\n\n return () => clearInterval(timer);\n }, []);\n\n useSyncExternalStore(\n (cb) => store.subscribe(cb),\n () => store.getSnapshot(),\n );\n\n const progressItems: ProgressItem[] = store.tasks.map((t) => ({\n label: t.label,\n activeForm: t.activeForm,\n status: t.status,\n }));\n\n const statuses =\n store.statusMessages.length > 0 ? store.statusMessages : undefined;\n\n const tabs = [\n {\n id: 'status',\n label: 'Status',\n component: (\n <SplitView\n left={\n store.learnCardComplete ? (\n <TipsCard store={store} />\n ) : (\n <LearnCard\n store={store}\n onComplete={() => store.setLearnCardComplete()}\n />\n )\n }\n right={<ProgressList items={progressItems} title=\"Tasks\" />}\n />\n ),\n },\n ...(store.eventPlan.length > 0\n ? [\n {\n id: 'events',\n label: 'Event plan',\n component: <EventPlanViewer events={store.eventPlan} />,\n },\n ]\n : []),\n {\n id: 'logs',\n label: 'Tail logs',\n component: <LogViewer filePath=\"/tmp/posthog-wizard.log\" />,\n },\n {\n id: 'hn',\n label: 'HN',\n component: <HNViewer />,\n },\n ];\n\n return (\n <TabContainer\n tabs={tabs}\n statusMessage={statuses}\n expandableStatus\n store={store}\n />\n );\n};\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * WelcomeDemo — Splash screen. Press enter to push the tabbed view.
3
+ */
4
+ import type { WizardStore } from '../../store.js';
5
+ interface WelcomeDemoProps {
6
+ store: WizardStore;
7
+ }
8
+ export declare const WelcomeDemo: ({ store }: WelcomeDemoProps) => import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,15 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * WelcomeDemo — Splash screen. Press enter to push the tabbed view.
4
+ */
5
+ import { Box, Text, useInput } from 'ink';
6
+ import { Colors, Icons } from '../../styles.js';
7
+ export const WelcomeDemo = ({ store }) => {
8
+ useInput((_input, key) => {
9
+ if (key.return) {
10
+ store.completeSetup();
11
+ }
12
+ });
13
+ return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, justifyContent: "center", alignItems: "center", children: [_jsxs(Text, { bold: true, color: Colors.accent, children: [Icons.diamond, " PostHog Setup Wizard layout primitives playground"] }), _jsx(Box, { height: 1 }), _jsx(Text, { children: "Layout primitives for the PostHog Setup Wizard TUI." }), _jsx(Text, { dimColor: true, children: "CardLayout, SplitView, TabContainer, ProgressList, and more." }), _jsx(Box, { height: 1 }), _jsxs(Text, { color: Colors.primary, children: ["Press enter to continue ", Icons.triangleRight] })] }));
14
+ };
15
+ //# sourceMappingURL=WelcomeDemo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WelcomeDemo.js","sourceRoot":"","sources":["../../../../../../src/ui/tui/playground/demos/WelcomeDemo.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMhD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAoB,EAAE,EAAE;IACzD,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,QAAQ,EAAE,CAAC,EACX,cAAc,EAAC,QAAQ,EACvB,UAAU,EAAC,QAAQ,aAEnB,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,aAC5B,KAAK,CAAC,OAAO,0DACT,EACP,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,IAAI,sEAA2D,EAChE,KAAC,IAAI,IAAC,QAAQ,mFAEP,EACP,KAAC,GAAG,IAAC,MAAM,EAAE,CAAC,GAAI,EAClB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,yCACA,KAAK,CAAC,aAAa,IACvC,IACH,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * WelcomeDemo — Splash screen. Press enter to push the tabbed view.\n */\n\nimport { Box, Text, useInput } from 'ink';\nimport type { WizardStore } from '../../store.js';\nimport { Colors, Icons } from '../../styles.js';\n\ninterface WelcomeDemoProps {\n store: WizardStore;\n}\n\nexport const WelcomeDemo = ({ store }: WelcomeDemoProps) => {\n useInput((_input, key) => {\n if (key.return) {\n store.completeSetup();\n }\n });\n\n return (\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Text bold color={Colors.accent}>\n {Icons.diamond} PostHog Setup Wizard layout primitives playground\n </Text>\n <Box height={1} />\n <Text>Layout primitives for the PostHog Setup Wizard TUI.</Text>\n <Text dimColor>\n CardLayout, SplitView, TabContainer, ProgressList, and more.\n </Text>\n <Box height={1} />\n <Text color={Colors.primary}>\n Press enter to continue {Icons.triangleRight}\n </Text>\n </Box>\n );\n};\n"]}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * start-playground.ts — Launches the TUI primitives playground.
3
+ */
4
+ export declare function startPlayground(version: string): void;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * start-playground.ts — Launches the TUI primitives playground.
3
+ */
4
+ import { render } from 'ink';
5
+ import { createElement } from 'react';
6
+ import { WizardStore } from '../store.js';
7
+ import { PlaygroundApp } from './PlaygroundApp.js';
8
+ export function startPlayground(version) {
9
+ const store = new WizardStore();
10
+ store.version = version;
11
+ // Pre-fill session so the router skips auth and lands on 'run' after intro
12
+ store.setCredentials({
13
+ accessToken: 'fake',
14
+ projectApiKey: 'fake',
15
+ host: 'https://app.posthog.com',
16
+ projectId: 0,
17
+ });
18
+ const { unmount, waitUntilExit } = render(createElement(PlaygroundApp, { store }));
19
+ void waitUntilExit().then(() => {
20
+ unmount();
21
+ process.exit(0);
22
+ });
23
+ }
24
+ //# sourceMappingURL=start-playground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-playground.js","sourceRoot":"","sources":["../../../../../src/ui/tui/playground/start-playground.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;IAChC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAExB,2EAA2E;IAC3E,KAAK,CAAC,cAAc,CAAC;QACnB,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,MAAM;QACrB,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,CAAC;KACb,CAAC,CAAC;IAEH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CACvC,aAAa,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CACxC,CAAC;IAEF,KAAK,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAC7B,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * start-playground.ts — Launches the TUI primitives playground.\n */\n\nimport { render } from 'ink';\nimport { createElement } from 'react';\nimport { WizardStore } from '../store.js';\nimport { PlaygroundApp } from './PlaygroundApp.js';\n\nexport function startPlayground(version: string): void {\n const store = new WizardStore();\n store.version = version;\n\n // Pre-fill session so the router skips auth and lands on 'run' after intro\n store.setCredentials({\n accessToken: 'fake',\n projectApiKey: 'fake',\n host: 'https://app.posthog.com',\n projectId: 0,\n });\n\n const { unmount, waitUntilExit } = render(\n createElement(PlaygroundApp, { store }),\n );\n\n void waitUntilExit().then(() => {\n unmount();\n process.exit(0);\n });\n}\n"]}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CardLayout — Aligns a single child within available space.
3
+ */
4
+ import type { ReactNode } from 'react';
5
+ import { HAlign, VAlign } from '../styles.js';
6
+ interface CardLayoutProps {
7
+ hAlign?: HAlign;
8
+ vAlign?: VAlign;
9
+ children: ReactNode;
10
+ }
11
+ export declare const CardLayout: ({ hAlign, vAlign, children, }: CardLayoutProps) => import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * CardLayout — Aligns a single child within available space.
4
+ */
5
+ import { Box } from 'ink';
6
+ import { HAlign, VAlign } from '../styles.js';
7
+ export const CardLayout = ({ hAlign = HAlign.Left, vAlign = VAlign.Top, children, }) => {
8
+ return (_jsx(Box, { flexDirection: "column", flexGrow: 1, justifyContent: vAlign, alignItems: hAlign, children: children }));
9
+ };
10
+ //# sourceMappingURL=CardLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardLayout.js","sourceRoot":"","sources":["../../../../../src/ui/tui/primitives/CardLayout.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQ9C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,MAAM,GAAG,MAAM,CAAC,IAAI,EACpB,MAAM,GAAG,MAAM,CAAC,GAAG,EACnB,QAAQ,GACQ,EAAE,EAAE;IACpB,OAAO,CACL,KAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,QAAQ,EAAE,CAAC,EACX,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,YAEjB,QAAQ,GACL,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * CardLayout — Aligns a single child within available space.\n */\n\nimport { Box } from 'ink';\nimport type { ReactNode } from 'react';\nimport { HAlign, VAlign } from '../styles.js';\n\ninterface CardLayoutProps {\n hAlign?: HAlign;\n vAlign?: VAlign;\n children: ReactNode;\n}\n\nexport const CardLayout = ({\n hAlign = HAlign.Left,\n vAlign = VAlign.Top,\n children,\n}: CardLayoutProps) => {\n return (\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n justifyContent={vAlign}\n alignItems={hAlign}\n >\n {children}\n </Box>\n );\n};\n"]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * ConfirmationInput — Continue/cancel prompt.
3
+ * Enter confirms, escape cancels. Arrow keys toggle focus.
4
+ */
5
+ interface ConfirmationInputProps {
6
+ message: string;
7
+ onConfirm: () => void;
8
+ onCancel: () => void;
9
+ confirmLabel?: string;
10
+ cancelLabel?: string;
11
+ }
12
+ export declare const ConfirmationInput: ({ message, onConfirm, onCancel, confirmLabel, cancelLabel, }: ConfirmationInputProps) => import("react/jsx-runtime").JSX.Element;
13
+ export {};
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ConfirmationInput — Continue/cancel prompt.
4
+ * Enter confirms, escape cancels. Arrow keys toggle focus.
5
+ */
6
+ import { Box, Text, useInput } from 'ink';
7
+ import { useState } from 'react';
8
+ import { Icons, Colors } from '../styles.js';
9
+ import { PromptLabel } from './PromptLabel.js';
10
+ var FocusTarget;
11
+ (function (FocusTarget) {
12
+ FocusTarget["Continue"] = "continue";
13
+ FocusTarget["Cancel"] = "cancel";
14
+ })(FocusTarget || (FocusTarget = {}));
15
+ export const ConfirmationInput = ({ message, onConfirm, onCancel, confirmLabel = 'Continue [Enter]', cancelLabel = 'Cancel [Esc]', }) => {
16
+ const [focused, setFocused] = useState(FocusTarget.Continue);
17
+ useInput((_input, key) => {
18
+ if (key.leftArrow || key.rightArrow) {
19
+ setFocused((f) => f === FocusTarget.Continue ? FocusTarget.Cancel : FocusTarget.Continue);
20
+ }
21
+ if (key.return) {
22
+ if (focused === FocusTarget.Continue) {
23
+ onConfirm();
24
+ }
25
+ else {
26
+ onCancel();
27
+ }
28
+ }
29
+ if (key.escape) {
30
+ onCancel();
31
+ }
32
+ });
33
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(PromptLabel, { message: message }), _jsxs(Box, { gap: 2, marginTop: 1, marginLeft: 2, children: [_jsxs(Text, { bold: focused === FocusTarget.Continue, color: focused === FocusTarget.Continue ? Colors.accent : Colors.muted, children: [focused === FocusTarget.Continue ? Icons.triangleSmallRight : ' ', ' ', confirmLabel] }), _jsxs(Text, { bold: focused === FocusTarget.Cancel, color: focused === FocusTarget.Cancel ? Colors.accent : Colors.muted, children: [focused === FocusTarget.Cancel ? Icons.triangleSmallRight : ' ', ' ', cancelLabel] })] })] }));
34
+ };
35
+ //# sourceMappingURL=ConfirmationInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmationInput.js","sourceRoot":"","sources":["../../../../../src/ui/tui/primitives/ConfirmationInput.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAU/C,IAAK,WAGJ;AAHD,WAAK,WAAW;IACd,oCAAqB,CAAA;IACrB,gCAAiB,CAAA;AACnB,CAAC,EAHI,WAAW,KAAX,WAAW,QAGf;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,OAAO,EACP,SAAS,EACT,QAAQ,EACR,YAAY,GAAG,kBAAkB,EACjC,WAAW,GAAG,cAAc,GACL,EAAE,EAAE;IAC3B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAc,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE1E,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACpC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CACf,CAAC,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CACvE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,OAAO,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACrC,SAAS,EAAE,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,WAAW,IAAC,OAAO,EAAE,OAAO,GAAI,EACjC,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,aACtC,MAAC,IAAI,IACH,IAAI,EAAE,OAAO,KAAK,WAAW,CAAC,QAAQ,EACtC,KAAK,EACH,OAAO,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,aAGhE,OAAO,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EACtE,YAAY,IACR,EACP,MAAC,IAAI,IACH,IAAI,EAAE,OAAO,KAAK,WAAW,CAAC,MAAM,EACpC,KAAK,EAAE,OAAO,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,aAEnE,OAAO,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EACpE,WAAW,IACP,IACH,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * ConfirmationInput — Continue/cancel prompt.\n * Enter confirms, escape cancels. Arrow keys toggle focus.\n */\n\nimport { Box, Text, useInput } from 'ink';\nimport { useState } from 'react';\nimport { Icons, Colors } from '../styles.js';\nimport { PromptLabel } from './PromptLabel.js';\n\ninterface ConfirmationInputProps {\n message: string;\n onConfirm: () => void;\n onCancel: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n}\n\nenum FocusTarget {\n Continue = 'continue',\n Cancel = 'cancel',\n}\n\nexport const ConfirmationInput = ({\n message,\n onConfirm,\n onCancel,\n confirmLabel = 'Continue [Enter]',\n cancelLabel = 'Cancel [Esc]',\n}: ConfirmationInputProps) => {\n const [focused, setFocused] = useState<FocusTarget>(FocusTarget.Continue);\n\n useInput((_input, key) => {\n if (key.leftArrow || key.rightArrow) {\n setFocused((f) =>\n f === FocusTarget.Continue ? FocusTarget.Cancel : FocusTarget.Continue,\n );\n }\n if (key.return) {\n if (focused === FocusTarget.Continue) {\n onConfirm();\n } else {\n onCancel();\n }\n }\n if (key.escape) {\n onCancel();\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <PromptLabel message={message} />\n <Box gap={2} marginTop={1} marginLeft={2}>\n <Text\n bold={focused === FocusTarget.Continue}\n color={\n focused === FocusTarget.Continue ? Colors.accent : Colors.muted\n }\n >\n {focused === FocusTarget.Continue ? Icons.triangleSmallRight : ' '}{' '}\n {confirmLabel}\n </Text>\n <Text\n bold={focused === FocusTarget.Cancel}\n color={focused === FocusTarget.Cancel ? Colors.accent : Colors.muted}\n >\n {focused === FocusTarget.Cancel ? Icons.triangleSmallRight : ' '}{' '}\n {cancelLabel}\n </Text>\n </Box>\n </Box>\n );\n};\n"]}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * ContentSequencer — Plays content blocks in order.
3
+ *
4
+ * Each block is a self-animating component that fires onComplete() when done.
5
+ * The sequencer waits blockInterval ms between blocks, then advances.
6
+ *
7
+ * Block types:
8
+ * - string → TextBlock (animated text, sugar for { content: '...' })
9
+ * - { content: str } → TextBlock (animated text with per-block overrides)
10
+ * - { content: JSX } → NodeBlock (static JSX)
11
+ * - { type: 'lines' } → LinesBlock (line-by-line reveal)
12
+ * - { type: 'clear' } → ClearBlock (page break — hides all prior blocks)
13
+ */
14
+ import { type ReactNode } from 'react';
15
+ import { type TextRevealMode } from './TextBlock.js';
16
+ export type { ContentBlock, ContentObjectBlock, ContentLinesBlock, ContentClearBlock, } from './content-types.js';
17
+ export { isLinesBlock, isClearBlock, isObjectBlock } from './content-types.js';
18
+ import type { ContentBlock } from './content-types.js';
19
+ /** Resolve the pause after a block completes. */
20
+ export declare function getBlockPause(block: ContentBlock, blockInterval: number): number;
21
+ interface ContentSequencerProps {
22
+ blocks: ContentBlock[];
23
+ mode: TextRevealMode;
24
+ /** Row budget for visible content. When set, older blocks are evicted. */
25
+ maxHeight?: number;
26
+ /** Available text width in columns (for height estimation). */
27
+ availableWidth?: number;
28
+ bullet?: ReactNode;
29
+ animationInterval?: number;
30
+ sentenceInterval?: number;
31
+ lineInterval?: number;
32
+ blockInterval?: number;
33
+ /** Delay in ms before the first block appears. */
34
+ startDelay?: number;
35
+ /** Resume from a previously persisted block index. */
36
+ initialBlockIdx?: number;
37
+ /** Called whenever the active block index advances. */
38
+ onBlockChange?: (idx: number) => void;
39
+ /** Called once when the last block completes (after its pause). */
40
+ onSequenceComplete?: () => void;
41
+ }
42
+ export declare const ContentSequencer: ({ blocks, mode, maxHeight, availableWidth, bullet, animationInterval, sentenceInterval, lineInterval, blockInterval, startDelay, initialBlockIdx, onBlockChange, onSequenceComplete, }: ContentSequencerProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,137 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * ContentSequencer — Plays content blocks in order.
4
+ *
5
+ * Each block is a self-animating component that fires onComplete() when done.
6
+ * The sequencer waits blockInterval ms between blocks, then advances.
7
+ *
8
+ * Block types:
9
+ * - string → TextBlock (animated text, sugar for { content: '...' })
10
+ * - { content: str } → TextBlock (animated text with per-block overrides)
11
+ * - { content: JSX } → NodeBlock (static JSX)
12
+ * - { type: 'lines' } → LinesBlock (line-by-line reveal)
13
+ * - { type: 'clear' } → ClearBlock (page break — hides all prior blocks)
14
+ */
15
+ import { Box } from 'ink';
16
+ import { useState, useCallback, useEffect, useRef, useMemo, } from 'react';
17
+ import { TextBlock } from './TextBlock.js';
18
+ import { LinesBlock } from './LinesBlock.js';
19
+ import { NodeBlock } from './NodeBlock.js';
20
+ import { computeVisibleRange } from './layout-helpers.js';
21
+ import { isLinesBlock, isClearBlock, isObjectBlock } from './content-types.js';
22
+ export { isLinesBlock, isClearBlock, isObjectBlock } from './content-types.js';
23
+ /** Resolve the pause after a block completes. */
24
+ export function getBlockPause(block, blockInterval) {
25
+ if (typeof block === 'string')
26
+ return blockInterval;
27
+ return block.pause ?? blockInterval;
28
+ }
29
+ export const ContentSequencer = ({ blocks, mode, maxHeight, availableWidth, bullet, animationInterval, sentenceInterval, lineInterval = 200, blockInterval = 3200, startDelay = 0, initialBlockIdx = 0, onBlockChange, onSequenceComplete, }) => {
30
+ const resuming = initialBlockIdx > 0;
31
+ const [activeIdx, setActiveIdx] = useState(resuming ? initialBlockIdx : startDelay > 0 ? -1 : 0);
32
+ const transitionTimer = useRef(null);
33
+ // Initial delay before first block (skip when resuming)
34
+ useEffect(() => {
35
+ if (resuming || startDelay <= 0 || activeIdx !== -1)
36
+ return;
37
+ const timer = setTimeout(() => setActiveIdx(0), startDelay);
38
+ return () => clearTimeout(timer);
39
+ }, [startDelay, activeIdx]);
40
+ // Compute visible range reactively (re-evaluates on resize, block advance, etc.)
41
+ const [visibleStart, visibleEnd] = useMemo(() => {
42
+ if (activeIdx < 0)
43
+ return [0, -1];
44
+ if (maxHeight == null || availableWidth == null) {
45
+ return [0, activeIdx];
46
+ }
47
+ return computeVisibleRange(blocks, activeIdx, availableWidth, maxHeight);
48
+ }, [blocks, activeIdx, maxHeight, availableWidth]);
49
+ const handleComplete = useCallback((blockIndex) => {
50
+ // Only the active block can trigger advancement
51
+ if (blockIndex !== activeIdx)
52
+ return;
53
+ // Last block — fire sequence-complete after its pause, don't advance
54
+ if (activeIdx >= blocks.length - 1) {
55
+ if (onSequenceComplete && !transitionTimer.current) {
56
+ const pause = getBlockPause(blocks[blockIndex], blockInterval);
57
+ transitionTimer.current = setTimeout(() => {
58
+ transitionTimer.current = null;
59
+ onSequenceComplete();
60
+ }, pause);
61
+ }
62
+ return;
63
+ }
64
+ // Don't double-trigger
65
+ if (transitionTimer.current)
66
+ return;
67
+ const pause = getBlockPause(blocks[blockIndex], blockInterval);
68
+ transitionTimer.current = setTimeout(() => {
69
+ transitionTimer.current = null;
70
+ setActiveIdx((i) => {
71
+ const next = i + 1;
72
+ onBlockChange?.(next);
73
+ return next;
74
+ });
75
+ }, pause);
76
+ }, [activeIdx, blocks, blockInterval, onBlockChange, onSequenceComplete]);
77
+ // Find the most recent clear block — nothing before it renders.
78
+ // When the active block IS a clear block, immediately hide all prior content
79
+ // so the pause shows a blank screen (not dim prior text).
80
+ const clearFloor = useMemo(() => {
81
+ if (activeIdx >= 0 && isClearBlock(blocks[activeIdx]))
82
+ return activeIdx;
83
+ for (let i = activeIdx - 1; i >= 0; i--) {
84
+ if (isClearBlock(blocks[i]))
85
+ return i + 1;
86
+ }
87
+ return 0;
88
+ }, [blocks, activeIdx]);
89
+ return (_jsx(Box, { flexDirection: "column", children: blocks.map((block, i) => {
90
+ // Not yet reached
91
+ if (i > activeIdx)
92
+ return null;
93
+ // Hidden by clear block
94
+ if (i < clearFloor)
95
+ return null;
96
+ // Completed clear blocks don't render (active ones must mount to fire onComplete)
97
+ if (isClearBlock(block) && i < activeIdx)
98
+ return null;
99
+ // Evicted by viewport
100
+ if (i < visibleStart || i > visibleEnd)
101
+ return null;
102
+ const active = i === activeIdx;
103
+ const completed = i < activeIdx;
104
+ // Completed non-text blocks don't persist by default
105
+ if (completed && isObjectBlock(block)) {
106
+ const isText = typeof block.content === 'string';
107
+ const shouldPersist = block.persist ?? isText;
108
+ if (!shouldPersist)
109
+ return null;
110
+ }
111
+ return (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: _jsx(BlockRenderer, { block: block, active: active, completed: completed, onComplete: () => handleComplete(i), mode: mode, bullet: bullet, animationInterval: animationInterval, sentenceInterval: sentenceInterval, lineInterval: lineInterval, maxHeight: maxHeight, availableWidth: availableWidth }) }, i));
112
+ }) }));
113
+ };
114
+ const BlockRenderer = ({ block, active, completed, onComplete, mode, bullet, animationInterval, sentenceInterval, lineInterval, maxHeight, availableWidth, }) => {
115
+ // Clear block — completes immediately, renders nothing
116
+ if (isClearBlock(block)) {
117
+ useEffect(() => {
118
+ if (active)
119
+ onComplete();
120
+ }, [active, onComplete]);
121
+ return null;
122
+ }
123
+ // Bare string sugar → TextBlock with sequencer defaults
124
+ if (typeof block === 'string') {
125
+ return (_jsx(TextBlock, { text: block, active: active, completed: completed, onComplete: onComplete, mode: mode, bullet: bullet, animationInterval: animationInterval, sentenceInterval: sentenceInterval, maxHeight: maxHeight, availableWidth: availableWidth }));
126
+ }
127
+ // Lines block
128
+ if (isLinesBlock(block)) {
129
+ return (_jsx(LinesBlock, { lines: block.lines, interval: block.interval ?? lineInterval, active: active, completed: completed, onComplete: onComplete, maxHeight: maxHeight }));
130
+ }
131
+ // Object block — dispatch on content type
132
+ if (typeof block.content === 'string') {
133
+ return (_jsx(TextBlock, { text: block.content, active: active, completed: completed, onComplete: onComplete, mode: block.mode ?? mode, bullet: bullet, animationInterval: block.animationInterval ?? animationInterval, sentenceInterval: block.sentenceInterval ?? sentenceInterval, maxHeight: maxHeight, availableWidth: availableWidth }));
134
+ }
135
+ return (_jsx(NodeBlock, { content: block.content, active: active, completed: completed, onComplete: onComplete }));
136
+ };
137
+ //# sourceMappingURL=ContentSequencer.js.map