@tanstack/cta-engine 0.14.3 → 0.15.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 (343) hide show
  1. package/dist/add-ons.js +5 -91
  2. package/dist/add-to-app.js +171 -0
  3. package/dist/config-file.js +34 -11
  4. package/dist/constants.js +0 -2
  5. package/dist/create-app.js +142 -451
  6. package/dist/custom-add-ons/add-on.js +175 -0
  7. package/dist/custom-add-ons/shared.js +116 -0
  8. package/dist/custom-add-ons/starter.js +84 -0
  9. package/dist/environment.js +67 -44
  10. package/dist/file-helpers.js +165 -0
  11. package/dist/frameworks.js +92 -0
  12. package/dist/index.js +18 -1
  13. package/dist/integrations/git.js +4 -0
  14. package/dist/integrations/shadcn.js +33 -0
  15. package/dist/options.js +9 -333
  16. package/dist/package-json.js +48 -0
  17. package/dist/package-manager.js +51 -6
  18. package/dist/registry.js +56 -0
  19. package/dist/special-steps/index.js +24 -0
  20. package/dist/special-steps/rimraf-node-modules.js +16 -0
  21. package/dist/template-file.js +112 -0
  22. package/dist/types/add-ons.d.ts +3 -8
  23. package/dist/types/add-to-app.d.ts +17 -0
  24. package/dist/types/config-file.d.ts +7 -4
  25. package/dist/types/constants.d.ts +0 -3
  26. package/dist/types/create-app.d.ts +1 -7
  27. package/dist/types/custom-add-ons/add-on.d.ts +69 -0
  28. package/dist/types/custom-add-ons/shared.d.ts +15 -0
  29. package/dist/types/custom-add-ons/starter.d.ts +7 -0
  30. package/dist/types/environment.d.ts +2 -1
  31. package/dist/types/file-helpers.d.ts +15 -0
  32. package/dist/types/frameworks.d.ts +7 -0
  33. package/dist/types/index.d.ts +21 -1
  34. package/dist/types/integrations/git.d.ts +2 -0
  35. package/dist/types/integrations/shadcn.d.ts +2 -0
  36. package/dist/types/options.d.ts +2 -6
  37. package/dist/types/package-json.d.ts +7 -0
  38. package/dist/types/package-manager.d.ts +18 -1
  39. package/dist/types/registry.d.ts +25 -0
  40. package/dist/types/special-steps/index.d.ts +2 -0
  41. package/dist/types/special-steps/rimraf-node-modules.d.ts +2 -0
  42. package/dist/types/template-file.d.ts +2 -0
  43. package/dist/types/types.d.ts +788 -85
  44. package/dist/types/utils.d.ts +5 -0
  45. package/dist/types.js +65 -1
  46. package/dist/utils.js +9 -0
  47. package/package.json +9 -12
  48. package/src/add-ons.ts +7 -123
  49. package/src/add-to-app.ts +276 -0
  50. package/src/config-file.ts +51 -20
  51. package/src/constants.ts +0 -5
  52. package/src/create-app.ts +180 -730
  53. package/src/custom-add-ons/add-on.ts +261 -0
  54. package/src/custom-add-ons/shared.ts +160 -0
  55. package/src/custom-add-ons/starter.ts +126 -0
  56. package/src/environment.ts +80 -45
  57. package/src/file-helpers.ts +235 -0
  58. package/src/frameworks.ts +134 -0
  59. package/src/index.ts +85 -1
  60. package/src/integrations/git.ts +7 -0
  61. package/src/integrations/shadcn.ts +54 -0
  62. package/src/options.ts +8 -409
  63. package/src/package-json.ts +69 -0
  64. package/src/package-manager.ts +80 -9
  65. package/src/registry.ts +92 -0
  66. package/src/special-steps/index.ts +36 -0
  67. package/src/special-steps/rimraf-node-modules.ts +25 -0
  68. package/src/template-file.ts +150 -0
  69. package/src/types.ts +175 -87
  70. package/src/utils.ts +17 -0
  71. package/tests/add-ons.test.ts +67 -0
  72. package/tests/add-to-app.test.ts +358 -0
  73. package/tests/config-file.test.ts +105 -0
  74. package/tests/create-app.test.ts +120 -0
  75. package/tests/custom-add-ons/add-on.test.ts +12 -0
  76. package/tests/custom-add-ons/shared.test.ts +253 -0
  77. package/tests/custom-add-ons/starter.test.ts +58 -0
  78. package/tests/environment.test.ts +115 -0
  79. package/tests/file-helper.test.ts +90 -0
  80. package/tests/frameworks.test.ts +95 -0
  81. package/tests/index.test.ts +9 -0
  82. package/tests/integrations/git.test.ts +20 -0
  83. package/tests/integrations/shadcn.test.ts +91 -0
  84. package/tests/options.test.ts +42 -0
  85. package/tests/package-json.test.ts +63 -0
  86. package/tests/package-manager.test.ts +154 -0
  87. package/tests/setupVitest.ts +6 -0
  88. package/tests/template-file.test.ts +178 -0
  89. package/tests/utils.test.ts +23 -0
  90. package/vitest.config.ts +21 -0
  91. package/dist/add.js +0 -125
  92. package/dist/cli.js +0 -132
  93. package/dist/custom-add-on.js +0 -254
  94. package/dist/file-helper.js +0 -18
  95. package/dist/mcp.js +0 -229
  96. package/dist/templates.js +0 -6
  97. package/dist/toolchain.js +0 -6
  98. package/dist/types/add.d.ts +0 -3
  99. package/dist/types/cli.d.ts +0 -7
  100. package/dist/types/custom-add-on.d.ts +0 -3
  101. package/dist/types/file-helper.d.ts +0 -2
  102. package/dist/types/mcp.d.ts +0 -7
  103. package/dist/types/templates.d.ts +0 -1
  104. package/dist/types/toolchain.d.ts +0 -3
  105. package/src/add.ts +0 -186
  106. package/src/cli.ts +0 -210
  107. package/src/custom-add-on.ts +0 -325
  108. package/src/file-helper.ts +0 -20
  109. package/src/mcp.ts +0 -302
  110. package/src/templates.ts +0 -7
  111. package/src/toolchain.ts +0 -7
  112. package/templates/react/add-on/clerk/README.md +0 -3
  113. package/templates/react/add-on/clerk/assets/_dot_env.local.append +0 -2
  114. package/templates/react/add-on/clerk/assets/src/integrations/clerk/header-user.tsx +0 -19
  115. package/templates/react/add-on/clerk/assets/src/integrations/clerk/provider.tsx +0 -18
  116. package/templates/react/add-on/clerk/assets/src/routes/demo.clerk.tsx +0 -20
  117. package/templates/react/add-on/clerk/info.json +0 -13
  118. package/templates/react/add-on/clerk/package.json +0 -5
  119. package/templates/react/add-on/convex/README.md +0 -4
  120. package/templates/react/add-on/convex/assets/_dot_cursorrules.append +0 -93
  121. package/templates/react/add-on/convex/assets/_dot_env.local.append +0 -3
  122. package/templates/react/add-on/convex/assets/convex/products.ts +0 -8
  123. package/templates/react/add-on/convex/assets/convex/schema.ts +0 -10
  124. package/templates/react/add-on/convex/assets/src/integrations/convex/provider.tsx +0 -20
  125. package/templates/react/add-on/convex/assets/src/routes/demo.convex.tsx +0 -33
  126. package/templates/react/add-on/convex/info.json +0 -13
  127. package/templates/react/add-on/convex/package.json +0 -6
  128. package/templates/react/add-on/form/assets/src/components/demo.FormComponents.tsx.ejs +0 -300
  129. package/templates/react/add-on/form/assets/src/hooks/demo.form-context.ts +0 -4
  130. package/templates/react/add-on/form/assets/src/hooks/demo.form.ts +0 -22
  131. package/templates/react/add-on/form/assets/src/routes/demo.form.address.tsx.ejs +0 -213
  132. package/templates/react/add-on/form/assets/src/routes/demo.form.simple.tsx.ejs +0 -77
  133. package/templates/react/add-on/form/info.json +0 -26
  134. package/templates/react/add-on/form/package.json +0 -6
  135. package/templates/react/add-on/module-federation/assets/module-federation.config.js.ejs +0 -31
  136. package/templates/react/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
  137. package/templates/react/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
  138. package/templates/react/add-on/module-federation/info.json +0 -7
  139. package/templates/react/add-on/module-federation/package.json +0 -5
  140. package/templates/react/add-on/netlify/README.md +0 -11
  141. package/templates/react/add-on/netlify/info.json +0 -7
  142. package/templates/react/add-on/sentry/assets/_dot_cursorrules.append +0 -22
  143. package/templates/react/add-on/sentry/assets/_dot_env.local.append +0 -11
  144. package/templates/react/add-on/sentry/assets/src/app/global-middleware.ts +0 -11
  145. package/templates/react/add-on/sentry/assets/src/routes/demo.sentry.testing.tsx +0 -489
  146. package/templates/react/add-on/sentry/info.json +0 -14
  147. package/templates/react/add-on/sentry/package.json +0 -5
  148. package/templates/react/add-on/shadcn/README.md +0 -7
  149. package/templates/react/add-on/shadcn/assets/_dot_cursorrules.append +0 -7
  150. package/templates/react/add-on/shadcn/assets/components.json +0 -21
  151. package/templates/react/add-on/shadcn/assets/src/lib/utils.ts +0 -6
  152. package/templates/react/add-on/shadcn/assets/src/styles.css +0 -138
  153. package/templates/react/add-on/shadcn/info.json +0 -7
  154. package/templates/react/add-on/shadcn/package.json +0 -9
  155. package/templates/react/add-on/start/assets/_dot_gitignore.append +0 -2
  156. package/templates/react/add-on/start/assets/app.config.ts.ejs +0 -32
  157. package/templates/react/add-on/start/assets/src/api.ts +0 -6
  158. package/templates/react/add-on/start/assets/src/client.tsx.ejs +0 -33
  159. package/templates/react/add-on/start/assets/src/router.tsx.ejs +0 -48
  160. package/templates/react/add-on/start/assets/src/routes/api.demo-names.ts +0 -11
  161. package/templates/react/add-on/start/assets/src/routes/demo.start.api-request.tsx.ejs +0 -33
  162. package/templates/react/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -50
  163. package/templates/react/add-on/start/assets/src/ssr.tsx.ejs +0 -30
  164. package/templates/react/add-on/start/info.json +0 -18
  165. package/templates/react/add-on/start/package.json +0 -13
  166. package/templates/react/add-on/store/assets/src/lib/demo-store.ts +0 -13
  167. package/templates/react/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -75
  168. package/templates/react/add-on/store/info.json +0 -13
  169. package/templates/react/add-on/store/package.json +0 -6
  170. package/templates/react/add-on/t3env/README.md +0 -16
  171. package/templates/react/add-on/t3env/assets/src/env.ts +0 -39
  172. package/templates/react/add-on/t3env/info.json +0 -10
  173. package/templates/react/add-on/t3env/package.json +0 -6
  174. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/init.ts +0 -9
  175. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/react.ts +0 -4
  176. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/router.ts +0 -18
  177. package/templates/react/add-on/tRPC/assets/src/routes/api.trpc.$.tsx +0 -16
  178. package/templates/react/add-on/tRPC/info.json +0 -9
  179. package/templates/react/add-on/tRPC/package.json +0 -9
  180. package/templates/react/add-on/table/assets/src/data/demo-table-data.ts +0 -50
  181. package/templates/react/add-on/table/assets/src/routes/demo.table.tsx.ejs +0 -373
  182. package/templates/react/add-on/table/info.json +0 -13
  183. package/templates/react/add-on/table/package.json +0 -7
  184. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/layout.tsx +0 -5
  185. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +0 -70
  186. package/templates/react/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx.ejs +0 -53
  187. package/templates/react/add-on/tanstack-query/info.json +0 -13
  188. package/templates/react/add-on/tanstack-query/package.json +0 -6
  189. package/templates/react/base/README.md.ejs +0 -558
  190. package/templates/react/base/_dot_gitignore +0 -5
  191. package/templates/react/base/_dot_vscode/settings.biome.json +0 -38
  192. package/templates/react/base/_dot_vscode/settings.json +0 -11
  193. package/templates/react/base/index.html.ejs +0 -20
  194. package/templates/react/base/package.biome.json +0 -10
  195. package/templates/react/base/package.eslintprettier.json +0 -11
  196. package/templates/react/base/package.json +0 -30
  197. package/templates/react/base/package.ts.json +0 -7
  198. package/templates/react/base/package.tw.json +0 -6
  199. package/templates/react/base/public/favicon.ico +0 -0
  200. package/templates/react/base/public/logo192.png +0 -0
  201. package/templates/react/base/public/logo512.png +0 -0
  202. package/templates/react/base/public/manifest.json +0 -25
  203. package/templates/react/base/public/robots.txt +0 -3
  204. package/templates/react/base/src/App.css +0 -38
  205. package/templates/react/base/src/App.test.tsx.ejs +0 -10
  206. package/templates/react/base/src/App.tsx.ejs +0 -74
  207. package/templates/react/base/src/components/Header.tsx.ejs +0 -27
  208. package/templates/react/base/src/logo.svg +0 -44
  209. package/templates/react/base/src/reportWebVitals.ts.ejs +0 -28
  210. package/templates/react/base/src/styles.css.ejs +0 -15
  211. package/templates/react/base/toolchain/.prettierignore +0 -3
  212. package/templates/react/base/toolchain/biome.json +0 -31
  213. package/templates/react/base/toolchain/eslint.config.js +0 -5
  214. package/templates/react/base/toolchain/prettier.config.js +0 -10
  215. package/templates/react/base/tsconfig.json.ejs +0 -29
  216. package/templates/react/base/vite.config.js.ejs +0 -23
  217. package/templates/react/code-router/src/main.tsx.ejs +0 -92
  218. package/templates/react/example/tanchat/README.md +0 -37
  219. package/templates/react/example/tanchat/assets/_dot_env.local.append +0 -2
  220. package/templates/react/example/tanchat/assets/public/example-guitar-flowers.jpg +0 -0
  221. package/templates/react/example/tanchat/assets/public/example-guitar-motherboard.jpg +0 -0
  222. package/templates/react/example/tanchat/assets/public/example-guitar-racing.jpg +0 -0
  223. package/templates/react/example/tanchat/assets/public/example-guitar-steamer-trunk.jpg +0 -0
  224. package/templates/react/example/tanchat/assets/public/example-guitar-superhero.jpg +0 -0
  225. package/templates/react/example/tanchat/assets/public/example-guitar-traveling.jpg +0 -0
  226. package/templates/react/example/tanchat/assets/public/example-guitar-video-games.jpg +0 -0
  227. package/templates/react/example/tanchat/assets/src/components/example-AIAssistant.tsx +0 -173
  228. package/templates/react/example/tanchat/assets/src/components/example-GuitarRecommendation.tsx +0 -47
  229. package/templates/react/example/tanchat/assets/src/data/example-guitars.ts +0 -83
  230. package/templates/react/example/tanchat/assets/src/demo.index.css +0 -220
  231. package/templates/react/example/tanchat/assets/src/integrations/tanchat/header-user.tsx +0 -5
  232. package/templates/react/example/tanchat/assets/src/routes/api.messages.ts +0 -24
  233. package/templates/react/example/tanchat/assets/src/routes/api.sse.ts +0 -23
  234. package/templates/react/example/tanchat/assets/src/routes/example.chat.tsx +0 -159
  235. package/templates/react/example/tanchat/assets/src/routes/example.guitars/$guitarId.tsx +0 -50
  236. package/templates/react/example/tanchat/assets/src/routes/example.guitars/index.tsx +0 -54
  237. package/templates/react/example/tanchat/assets/src/store/example-assistant.ts +0 -3
  238. package/templates/react/example/tanchat/assets/src/utils/demo.ai.ts +0 -62
  239. package/templates/react/example/tanchat/assets/src/utils/demo.sse.ts +0 -31
  240. package/templates/react/example/tanchat/assets/src/utils/demo.tools.ts +0 -47
  241. package/templates/react/example/tanchat/info.json +0 -19
  242. package/templates/react/example/tanchat/package.json +0 -16
  243. package/templates/react/file-router/package.fr.json +0 -5
  244. package/templates/react/file-router/src/main.tsx.ejs +0 -55
  245. package/templates/react/file-router/src/routes/__root.tsx.ejs +0 -82
  246. package/templates/solid/add-on/form/assets/src/routes/demo.form.tsx.ejs +0 -352
  247. package/templates/solid/add-on/form/info.json +0 -13
  248. package/templates/solid/add-on/form/package.json +0 -5
  249. package/templates/solid/add-on/module-federation/assets/module-federation.config.js.ejs +0 -27
  250. package/templates/solid/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
  251. package/templates/solid/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
  252. package/templates/solid/add-on/module-federation/info.json +0 -7
  253. package/templates/solid/add-on/module-federation/package.json +0 -5
  254. package/templates/solid/add-on/sentry/assets/_dot_cursorrules.append +0 -22
  255. package/templates/solid/add-on/sentry/assets/_dot_env.local.append +0 -2
  256. package/templates/solid/add-on/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +0 -20
  257. package/templates/solid/add-on/sentry/info.json +0 -13
  258. package/templates/solid/add-on/sentry/package.json +0 -5
  259. package/templates/solid/add-on/solid-ui/README.md +0 -9
  260. package/templates/solid/add-on/solid-ui/assets/src/lib/utils.ts +0 -6
  261. package/templates/solid/add-on/solid-ui/assets/src/styles.css +0 -138
  262. package/templates/solid/add-on/solid-ui/assets/ui.config.json +0 -13
  263. package/templates/solid/add-on/solid-ui/info.json +0 -11
  264. package/templates/solid/add-on/solid-ui/package.json +0 -9
  265. package/templates/solid/add-on/start/assets/app.config.ts +0 -16
  266. package/templates/solid/add-on/start/assets/src/api.ts +0 -6
  267. package/templates/solid/add-on/start/assets/src/client.tsx +0 -7
  268. package/templates/solid/add-on/start/assets/src/router.tsx.ejs +0 -24
  269. package/templates/solid/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
  270. package/templates/solid/add-on/start/assets/src/ssr.tsx +0 -12
  271. package/templates/solid/add-on/start/info.json +0 -14
  272. package/templates/solid/add-on/start/package.json +0 -12
  273. package/templates/solid/add-on/store/assets/src/lib/demo-store.ts +0 -13
  274. package/templates/solid/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -77
  275. package/templates/solid/add-on/store/info.json +0 -13
  276. package/templates/solid/add-on/store/package.json +0 -6
  277. package/templates/solid/add-on/t3env/README.md +0 -16
  278. package/templates/solid/add-on/t3env/assets/src/env.ts +0 -39
  279. package/templates/solid/add-on/t3env/info.json +0 -10
  280. package/templates/solid/add-on/t3env/package.json +0 -6
  281. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/header-user.tsx +0 -5
  282. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/provider.tsx +0 -15
  283. package/templates/solid/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx +0 -30
  284. package/templates/solid/add-on/tanstack-query/info.json +0 -13
  285. package/templates/solid/add-on/tanstack-query/package.json +0 -6
  286. package/templates/solid/base/README.md.ejs +0 -215
  287. package/templates/solid/base/_dot_cursorrules.append +0 -35
  288. package/templates/solid/base/_dot_gitignore +0 -5
  289. package/templates/solid/base/_dot_vscode/settings.biome.json +0 -38
  290. package/templates/solid/base/_dot_vscode/settings.json +0 -11
  291. package/templates/solid/base/index.html.ejs +0 -20
  292. package/templates/solid/base/package.biome.json +0 -10
  293. package/templates/solid/base/package.eslintprettier.json +0 -11
  294. package/templates/solid/base/package.json +0 -23
  295. package/templates/solid/base/package.ts.json +0 -5
  296. package/templates/solid/base/package.tw.json +0 -6
  297. package/templates/solid/base/public/favicon.ico +0 -0
  298. package/templates/solid/base/public/logo192.png +0 -0
  299. package/templates/solid/base/public/logo512.png +0 -0
  300. package/templates/solid/base/public/manifest.json +0 -25
  301. package/templates/solid/base/public/robots.txt +0 -3
  302. package/templates/solid/base/src/App.css +0 -0
  303. package/templates/solid/base/src/App.tsx.ejs +0 -47
  304. package/templates/solid/base/src/components/Header.tsx.ejs +0 -26
  305. package/templates/solid/base/src/logo.svg +0 -120
  306. package/templates/solid/base/src/styles.css.ejs +0 -15
  307. package/templates/solid/base/toolchain/.prettierignore +0 -3
  308. package/templates/solid/base/toolchain/biome.json +0 -31
  309. package/templates/solid/base/toolchain/eslint.config.js +0 -5
  310. package/templates/solid/base/toolchain/prettier.config.js +0 -10
  311. package/templates/solid/base/tsconfig.json.ejs +0 -31
  312. package/templates/solid/base/vite.config.js.ejs +0 -22
  313. package/templates/solid/code-router/src/main.tsx.ejs +0 -71
  314. package/templates/solid/example/tanchat/README.md +0 -52
  315. package/templates/solid/example/tanchat/assets/ai-streaming-server/README.md +0 -110
  316. package/templates/solid/example/tanchat/assets/ai-streaming-server/_dot_env.example +0 -1
  317. package/templates/solid/example/tanchat/assets/ai-streaming-server/package.json +0 -26
  318. package/templates/solid/example/tanchat/assets/ai-streaming-server/src/index.ts +0 -102
  319. package/templates/solid/example/tanchat/assets/ai-streaming-server/tsconfig.json +0 -15
  320. package/templates/solid/example/tanchat/assets/src/components/demo.SettingsDialog.tsx +0 -149
  321. package/templates/solid/example/tanchat/assets/src/demo.index.css +0 -227
  322. package/templates/solid/example/tanchat/assets/src/lib/demo-store.ts +0 -13
  323. package/templates/solid/example/tanchat/assets/src/routes/example.chat.tsx +0 -435
  324. package/templates/solid/example/tanchat/assets/src/store/demo.hooks.ts +0 -17
  325. package/templates/solid/example/tanchat/assets/src/store/demo.store.ts +0 -133
  326. package/templates/solid/example/tanchat/info.json +0 -14
  327. package/templates/solid/example/tanchat/package.json +0 -7
  328. package/templates/solid/file-router/package.fr.json +0 -5
  329. package/templates/solid/file-router/src/main.tsx.ejs +0 -47
  330. package/templates/solid/file-router/src/routes/__root.tsx.ejs +0 -41
  331. package/templates/solid/file-router/src/routes/index.tsx +0 -43
  332. package/tests/cra.test.ts +0 -293
  333. package/tests/snapshots/cra/cr-js-npm.json +0 -33
  334. package/tests/snapshots/cra/cr-ts-npm.json +0 -34
  335. package/tests/snapshots/cra/cr-ts-start-npm.json +0 -38
  336. package/tests/snapshots/cra/fr-ts-npm.json +0 -34
  337. package/tests/snapshots/cra/fr-ts-tw-npm.json +0 -33
  338. package/tests/snapshots/cra/solid-cr-js-npm.json +0 -31
  339. package/tests/snapshots/cra/solid-cr-ts-npm.json +0 -32
  340. package/tests/snapshots/cra/solid-cr-ts-start-npm.json +0 -36
  341. package/tests/snapshots/cra/solid-fr-ts-npm.json +0 -33
  342. package/tests/snapshots/cra/solid-fr-ts-tw-npm.json +0 -32
  343. package/tests/test-utilities.ts +0 -87
@@ -1,173 +0,0 @@
1
- import { useEffect, useRef } from 'react'
2
- import { useStore } from '@tanstack/react-store'
3
- import { Send, X } from 'lucide-react'
4
- import ReactMarkdown from 'react-markdown'
5
- import rehypeRaw from 'rehype-raw'
6
- import rehypeSanitize from 'rehype-sanitize'
7
- import rehypeHighlight from 'rehype-highlight'
8
- import remarkGfm from 'remark-gfm'
9
- import { useChat } from '@ai-sdk/react'
10
- import { genAIResponse } from '../utils/demo.ai'
11
-
12
- import { showAIAssistant } from '../store/example-assistant'
13
- import GuitarRecommendation from './example-GuitarRecommendation'
14
-
15
- import type { UIMessage } from 'ai'
16
-
17
- function Messages({ messages }: { messages: Array<UIMessage> }) {
18
- const messagesContainerRef = useRef<HTMLDivElement>(null)
19
-
20
- useEffect(() => {
21
- if (messagesContainerRef.current) {
22
- messagesContainerRef.current.scrollTop =
23
- messagesContainerRef.current.scrollHeight
24
- }
25
- }, [messages])
26
-
27
- if (!messages.length) {
28
- return (
29
- <div className="flex-1 flex items-center justify-center text-gray-400 text-sm">
30
- Ask me anything! I'm here to help.
31
- </div>
32
- )
33
- }
34
-
35
- return (
36
- <div ref={messagesContainerRef} className="flex-1 overflow-y-auto">
37
- {messages.map(({ id, role, content, parts }) => (
38
- <div
39
- key={id}
40
- className={`py-3 ${
41
- role === 'assistant'
42
- ? 'bg-gradient-to-r from-orange-500/5 to-red-600/5'
43
- : 'bg-transparent'
44
- }`}
45
- >
46
- {content.length > 0 && (
47
- <div className="flex items-start gap-2 px-4">
48
- {role === 'assistant' ? (
49
- <div className="w-6 h-6 rounded-lg bg-gradient-to-r from-orange-500 to-red-600 flex items-center justify-center text-xs font-medium text-white flex-shrink-0">
50
- AI
51
- </div>
52
- ) : (
53
- <div className="w-6 h-6 rounded-lg bg-gray-700 flex items-center justify-center text-xs font-medium text-white flex-shrink-0">
54
- Y
55
- </div>
56
- )}
57
- <div className="flex-1 min-w-0">
58
- <ReactMarkdown
59
- className="prose dark:prose-invert max-w-none prose-sm"
60
- rehypePlugins={[
61
- rehypeRaw,
62
- rehypeSanitize,
63
- rehypeHighlight,
64
- remarkGfm,
65
- ]}
66
- >
67
- {content}
68
- </ReactMarkdown>
69
- </div>
70
- </div>
71
- )}
72
- {parts
73
- .filter((part) => part.type === 'tool-invocation')
74
- .filter(
75
- (part) => part.toolInvocation.toolName === 'recommendGuitar',
76
- )
77
- .map((toolCall) => (
78
- <div
79
- key={toolCall.toolInvocation.toolName}
80
- className="max-w-[80%] mx-auto"
81
- >
82
- <GuitarRecommendation id={toolCall.toolInvocation.args.id} />
83
- </div>
84
- ))}
85
- </div>
86
- ))}
87
- </div>
88
- )
89
- }
90
-
91
- export default function AIAssistant() {
92
- const isOpen = useStore(showAIAssistant)
93
- const { messages, input, handleInputChange, handleSubmit } = useChat({
94
- initialMessages: [],
95
- fetch: (_url, options) => {
96
- const { messages } = JSON.parse(options!.body! as string)
97
- return genAIResponse({
98
- data: {
99
- messages,
100
- },
101
- })
102
- },
103
- onToolCall: (call) => {
104
- if (call.toolCall.toolName === 'recommendGuitar') {
105
- return 'Handled by the UI'
106
- }
107
- },
108
- })
109
-
110
- return (
111
- <div className="relative z-50">
112
- <button
113
- onClick={() => showAIAssistant.setState((state) => !state)}
114
- className="flex items-center gap-2 px-3 py-1 rounded-lg bg-gradient-to-r from-orange-500 to-red-600 text-white hover:opacity-90 transition-opacity"
115
- >
116
- <div className="w-5 h-5 rounded-lg bg-white/20 flex items-center justify-center text-xs font-medium">
117
- AI
118
- </div>
119
- AI Assistant
120
- </button>
121
-
122
- {isOpen && (
123
- <div className="absolute top-full right-0 mt-2 w-[700px] h-[600px] bg-gray-900 rounded-lg shadow-xl border border-orange-500/20 flex flex-col">
124
- <div className="flex items-center justify-between p-3 border-b border-orange-500/20">
125
- <h3 className="font-semibold text-white">AI Assistant</h3>
126
- <button
127
- onClick={() => showAIAssistant.setState((state) => !state)}
128
- className="text-gray-400 hover:text-white transition-colors"
129
- >
130
- <X className="w-4 h-4" />
131
- </button>
132
- </div>
133
-
134
- <Messages messages={messages} />
135
-
136
- <div className="p-3 border-t border-orange-500/20">
137
- <form onSubmit={handleSubmit}>
138
- <div className="relative">
139
- <textarea
140
- value={input}
141
- onChange={handleInputChange}
142
- placeholder="Type your message..."
143
- className="w-full rounded-lg border border-orange-500/20 bg-gray-800/50 pl-3 pr-10 py-2 text-sm text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-orange-500/50 focus:border-transparent resize-none overflow-hidden"
144
- rows={1}
145
- style={{ minHeight: '36px', maxHeight: '120px' }}
146
- onInput={(e) => {
147
- const target = e.target as HTMLTextAreaElement
148
- target.style.height = 'auto'
149
- target.style.height =
150
- Math.min(target.scrollHeight, 120) + 'px'
151
- }}
152
- onKeyDown={(e) => {
153
- if (e.key === 'Enter' && !e.shiftKey) {
154
- e.preventDefault()
155
- handleSubmit(e)
156
- }
157
- }}
158
- />
159
- <button
160
- type="submit"
161
- disabled={!input.trim()}
162
- className="absolute right-2 top-1/2 -translate-y-1/2 p-1.5 text-orange-500 hover:text-orange-400 disabled:text-gray-500 transition-colors focus:outline-none"
163
- >
164
- <Send className="w-4 h-4" />
165
- </button>
166
- </div>
167
- </form>
168
- </div>
169
- </div>
170
- )}
171
- </div>
172
- )
173
- }
@@ -1,47 +0,0 @@
1
- import { useNavigate } from '@tanstack/react-router'
2
-
3
- import { showAIAssistant } from '../store/example-assistant'
4
-
5
- import guitars from '../data/example-guitars'
6
-
7
- export default function GuitarRecommendation({ id }: { id: string }) {
8
- const navigate = useNavigate()
9
- const guitar = guitars.find((guitar) => guitar.id === +id)
10
- if (!guitar) {
11
- return null
12
- }
13
- return (
14
- <div className="my-4 rounded-lg overflow-hidden border border-orange-500/20 bg-gray-800/50">
15
- <div className="aspect-[4/3] relative overflow-hidden">
16
- <img
17
- src={guitar.image}
18
- alt={guitar.name}
19
- className="w-full h-full object-cover"
20
- />
21
- </div>
22
- <div className="p-4">
23
- <h3 className="text-lg font-semibold text-white mb-2">{guitar.name}</h3>
24
- <p className="text-sm text-gray-300 mb-3 line-clamp-2">
25
- {guitar.shortDescription}
26
- </p>
27
- <div className="flex items-center justify-between">
28
- <div className="text-lg font-bold text-emerald-400">
29
- ${guitar.price}
30
- </div>
31
- <button
32
- onClick={() => {
33
- navigate({
34
- to: '/example/guitars/$guitarId',
35
- params: { guitarId: guitar.id.toString() },
36
- })
37
- showAIAssistant.setState(() => false)
38
- }}
39
- className="bg-gradient-to-r from-orange-500 to-red-600 text-white px-4 py-1.5 rounded-lg text-sm hover:opacity-90 transition-opacity"
40
- >
41
- View Details
42
- </button>
43
- </div>
44
- </div>
45
- </div>
46
- )
47
- }
@@ -1,83 +0,0 @@
1
- export interface Guitar {
2
- id: number
3
- name: string
4
- image: string
5
- description: string
6
- shortDescription: string
7
- price: number
8
- }
9
-
10
- const guitars: Array<Guitar> = [
11
- {
12
- id: 1,
13
- name: 'Video Game Guitar',
14
- image: '/example-guitar-video-games.jpg',
15
- description:
16
- "The Video Game Guitar is a unique acoustic guitar that features a design inspired by video games. It has a sleek, high-gloss finish and a comfortable playability. The guitar's ergonomic body and fast neck profile ensure comfortable playability for hours on end.",
17
- shortDescription:
18
- 'A unique electric guitar with a video game design, high-gloss finish, and comfortable playability.',
19
- price: 699,
20
- },
21
- {
22
- id: 2,
23
- name: 'Superhero Guitar',
24
- image: '/example-guitar-superhero.jpg',
25
- description:
26
- "The Superhero Guitar is a bold black electric guitar that stands out with its unique superhero logo design. Its sleek, high-gloss finish and powerful pickups make it perfect for high-energy performances. The guitar's ergonomic body and fast neck profile ensure comfortable playability for hours on end.",
27
- shortDescription:
28
- 'A bold black electric guitar with a unique superhero logo, high-gloss finish, and powerful pickups.',
29
- price: 699,
30
- },
31
- {
32
- id: 3,
33
- name: 'Motherboard Guitar',
34
- image: '/example-guitar-motherboard.jpg',
35
- description:
36
- "This guitar is a tribute to the motherboard of a computer. It's a unique and stylish instrument that will make you feel like a hacker. The intricate circuit-inspired design features actual LED lights that pulse with your playing intensity, while the neck is inlaid with binary code patterns that glow under stage lights. Each pickup has been custom-wound to produce tones ranging from clean digital precision to glitched-out distortion, perfect for electronic music fusion. The Motherboard Guitar seamlessly bridges the gap between traditional craftsmanship and cutting-edge technology, making it the ultimate instrument for the digital age musician.",
37
- shortDescription:
38
- 'A tech-inspired electric guitar featuring LED lights and binary code inlays that glow under stage lights.',
39
- price: 649,
40
- },
41
- {
42
- id: 4,
43
- name: 'Racing Guitar',
44
- image: '/example-guitar-racing.jpg',
45
- description:
46
- "Engineered for speed and precision, the Racing Guitar embodies the spirit of motorsport in every curve and contour. Its aerodynamic body, painted in classic racing stripes and high-gloss finish, is crafted from lightweight materials that allow for effortless play during extended performances. The custom low-action setup and streamlined neck profile enable lightning-fast fretwork, while specially designed pickups deliver a high-octane tone that cuts through any mix. Built with performance-grade hardware including racing-inspired control knobs and checkered flag inlays, this guitar isn't just played—it's driven to the limits of musical possibility.",
47
- shortDescription:
48
- 'A lightweight, aerodynamic guitar with racing stripes and a low-action setup designed for speed and precision.',
49
- price: 679,
50
- },
51
- {
52
- id: 5,
53
- name: 'Steamer Trunk Guitar',
54
- image: '/example-guitar-steamer-trunk.jpg',
55
- description:
56
- 'The Steamer Trunk Guitar is a semi-hollow body instrument that exudes vintage charm and character. Crafted from reclaimed antique luggage wood, it features brass hardware that adds a touch of elegance and durability. The fretboard is adorned with a world map inlay, making it a unique piece that tells a story of travel and adventure.',
57
- shortDescription:
58
- 'A semi-hollow body guitar with brass hardware and a world map inlay, crafted from reclaimed antique luggage wood.',
59
- price: 629,
60
- },
61
- {
62
- id: 6,
63
- name: "Travelin' Man Guitar",
64
- image: '/example-guitar-traveling.jpg',
65
- description:
66
- "The Travelin' Man Guitar is an acoustic masterpiece adorned with vintage postcards from around the world. Each postcard tells a story of adventure and wanderlust, making this guitar a unique piece of art. Its rich, resonant tones and comfortable playability make it perfect for musicians who love to travel and perform.",
67
- shortDescription:
68
- 'An acoustic guitar with vintage postcards, rich tones, and comfortable playability.',
69
- price: 499,
70
- },
71
- {
72
- id: 7,
73
- name: 'Flowerly Love Guitar',
74
- image: '/example-guitar-flowers.jpg',
75
- description:
76
- "The Flowerly Love Guitar is an acoustic masterpiece adorned with intricate floral designs on its body. Each flower is hand-painted, adding a touch of nature's beauty to the instrument. Its warm, resonant tones make it perfect for both intimate performances and larger gatherings.",
77
- shortDescription:
78
- 'An acoustic guitar with hand-painted floral designs and warm, resonant tones.',
79
- price: 599,
80
- },
81
- ]
82
-
83
- export default guitars
@@ -1,220 +0,0 @@
1
- @import "tailwindcss";
2
- @import "highlight.js/styles/github-dark.css";
3
-
4
- /* Custom scrollbar styles */
5
- ::-webkit-scrollbar {
6
- width: 8px;
7
- }
8
-
9
- ::-webkit-scrollbar-track {
10
- background: transparent;
11
- }
12
-
13
- ::-webkit-scrollbar-thumb {
14
- background-color: rgba(156, 163, 175, 0.5);
15
- border-radius: 4px;
16
- }
17
-
18
- ::-webkit-scrollbar-thumb:hover {
19
- background-color: rgba(156, 163, 175, 0.7);
20
- }
21
-
22
- /* Smooth transitions for dark mode */
23
- html {
24
- transition: background-color 0.3s ease;
25
- }
26
-
27
- /* Markdown content styles */
28
- .prose {
29
- max-width: none;
30
- color: #e5e7eb; /* text-gray-200 */
31
- }
32
-
33
- /* .prose p {
34
- margin-top: 1.25em;
35
- margin-bottom: 1.25em;
36
- } */
37
-
38
- .prose code {
39
- color: #e5e7eb;
40
- background-color: rgba(31, 41, 55, 0.5);
41
- padding: 0.2em 0.4em;
42
- border-radius: 0.375rem;
43
- font-size: 0.875em;
44
- }
45
-
46
- .prose pre {
47
- background-color: rgba(31, 41, 55, 0.5);
48
- border-radius: 0.5rem;
49
- padding: 1rem;
50
- margin: 1.25em 0;
51
- overflow-x: auto;
52
- }
53
-
54
- .prose pre code {
55
- background-color: transparent;
56
- padding: 0;
57
- border-radius: 0;
58
- color: inherit;
59
- }
60
-
61
- .prose h1, .prose h2, .prose h3, .prose h4 {
62
- color: #f9fafb; /* text-gray-50 */
63
- /* margin-top: 2em; */
64
- /* margin-bottom: 1em; */
65
- }
66
-
67
- .prose ul, .prose ol {
68
- margin-top: 1.25em;
69
- margin-bottom: 1.25em;
70
- padding-left: 1.625em;
71
- }
72
-
73
- .prose li {
74
- margin-top: 0.5em;
75
- margin-bottom: 0.5em;
76
- }
77
-
78
- .prose blockquote {
79
- border-left-color: #f97316; /* orange-500 */
80
- background-color: rgba(249, 115, 22, 0.1);
81
- padding: 1em;
82
- margin: 1.25em 0;
83
- border-radius: 0.5rem;
84
- }
85
-
86
- .prose hr {
87
- border-color: rgba(249, 115, 22, 0.2);
88
- margin: 2em 0;
89
- }
90
-
91
- .prose a {
92
- color: #f97316; /* orange-500 */
93
- text-decoration: underline;
94
- text-decoration-thickness: 0.1em;
95
- text-underline-offset: 0.2em;
96
- }
97
-
98
- .prose a:hover {
99
- color: #fb923c; /* orange-400 */
100
- }
101
-
102
- .prose table {
103
- width: 100%;
104
- border-collapse: collapse;
105
- margin: 1.25em 0;
106
- }
107
-
108
- .prose th, .prose td {
109
- padding: 0.75em;
110
- border: 1px solid rgba(249, 115, 22, 0.2);
111
- }
112
-
113
- .prose th {
114
- background-color: rgba(249, 115, 22, 0.1);
115
- font-weight: 600;
116
- }
117
-
118
- /* Message transition animations */
119
- .message-enter {
120
- opacity: 0;
121
- transform: translateY(10px);
122
- }
123
-
124
- .message-enter-active {
125
- opacity: 1;
126
- transform: translateY(0);
127
- transition: opacity 300ms, transform 300ms;
128
- }
129
-
130
- .message-exit {
131
- opacity: 1;
132
- }
133
-
134
- .message-exit-active {
135
- opacity: 0;
136
- transition: opacity 300ms;
137
- }
138
-
139
- /* Add/update these styles to match AI formatting capabilities */
140
- .prose h1 {
141
- font-size: 2em;
142
- /* margin-top: 1em; */
143
- margin-bottom: 0.5em;
144
- }
145
-
146
- .prose h2 {
147
- font-size: 1.5em;
148
- margin-top: 1em;
149
- margin-bottom: 0.5em;
150
- }
151
-
152
- .prose h3 {
153
- font-size: 1.25em;
154
- margin-top: 1em;
155
- margin-bottom: 0.5em;
156
- }
157
-
158
- .prose ul {
159
- list-style-type: disc;
160
- padding-left: 1.5em;
161
- }
162
-
163
- .prose ol {
164
- list-style-type: decimal;
165
- padding-left: 1.5em;
166
- }
167
-
168
- .prose table {
169
- width: 100%;
170
- border-collapse: collapse;
171
- margin: 1em 0;
172
- }
173
-
174
- .prose th,
175
- .prose td {
176
- border: 1px solid rgba(249, 115, 22, 0.2);
177
- padding: 0.5em;
178
- }
179
-
180
- .prose th {
181
- background-color: rgba(249, 115, 22, 0.1);
182
- }
183
-
184
- .prose strong {
185
- color: #f9fafb; /* text-gray-50 */
186
- font-weight: 600;
187
- }
188
-
189
- .prose em {
190
- font-style: italic;
191
- }
192
-
193
- .prose blockquote {
194
- border-left: 4px solid #f97316; /* orange-500 */
195
- padding-left: 1em;
196
- margin: 1em 0;
197
- color: #d1d5db; /* text-gray-300 */
198
- }
199
-
200
- /* Ensure code blocks match the AI's formatting */
201
- .prose code {
202
- color: #e5e7eb;
203
- background-color: rgba(31, 41, 55, 0.5);
204
- padding: 0.2em 0.4em;
205
- border-radius: 0.375rem;
206
- font-size: 0.875em;
207
- }
208
-
209
- .prose pre {
210
- background-color: rgba(31, 41, 55, 0.5);
211
- border-radius: 0.5rem;
212
- padding: 1rem;
213
- margin: 1em 0;
214
- }
215
-
216
- .prose pre code {
217
- background-color: transparent;
218
- padding: 0;
219
- border-radius: 0;
220
- }
@@ -1,5 +0,0 @@
1
- import AIAssistant from '../../components/example-AIAssistant'
2
-
3
- export default function HeaderAIAssistant() {
4
- return <AIAssistant />
5
- }
@@ -1,24 +0,0 @@
1
- import { createAPIFileRoute } from "@tanstack/react-start/api";
2
- import { getEvent } from "vinxi/http";
3
-
4
- import { transports } from "@/utils/demo.sse";
5
-
6
- export const APIRoute = createAPIFileRoute("/api/messages")({
7
- // @ts-ignore
8
- POST: async ({ request, params }) => {
9
- const body = await request.json();
10
- const url = new URL(request.url);
11
- const sessionId = url.searchParams.get("sessionId") as string;
12
- const transport = transports[sessionId];
13
- if (transport) {
14
- try {
15
- getEvent().node.res.statusCode = 200;
16
- await transport.handleMessage(body);
17
- } catch (error) {
18
- getEvent().node.res.send("Error handling message");
19
- }
20
- } else {
21
- getEvent().node.res.send("No transport found for sessionId");
22
- }
23
- },
24
- });
@@ -1,23 +0,0 @@
1
- import { createAPIFileRoute } from '@tanstack/react-start/api'
2
- import { getEvent } from 'vinxi/http'
3
- import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'
4
-
5
- import { transports, server } from '@/utils/demo.sse'
6
-
7
- export const APIRoute = createAPIFileRoute('/api/sse')({
8
- // @ts-ignore
9
- GET: async ({}) => {
10
- const transport = new SSEServerTransport(
11
- '/api/messages',
12
- getEvent().node.res,
13
- )
14
- transports[transport.sessionId] = transport
15
- transport.onerror = (error) => {
16
- console.error(error)
17
- }
18
- getEvent().node.res.on('close', () => {
19
- delete transports[transport.sessionId]
20
- })
21
- await server.connect(transport)
22
- },
23
- })