@tanstack/create 0.49.2 → 0.59.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/CHANGELOG.md +603 -0
  2. package/dist/add-ons.js +42 -2
  3. package/dist/add-to-app.js +36 -7
  4. package/dist/custom-add-ons/add-on.js +2 -26
  5. package/dist/custom-add-ons/starter.js +1 -2
  6. package/dist/file-helpers.js +11 -10
  7. package/dist/frameworks/react/add-ons/ai/assets/src/data/demo-guitars.ts +93 -0
  8. package/dist/frameworks/react/add-ons/ai/assets/src/hooks/demo-useAudioRecorder.ts +85 -0
  9. package/dist/frameworks/react/add-ons/ai/assets/src/hooks/demo-useTTS.ts +78 -0
  10. package/dist/frameworks/react/add-ons/ai/assets/src/lib/demo-ai-hook.ts +22 -0
  11. package/dist/frameworks/react/add-ons/ai/assets/src/lib/demo-guitar-tools.ts +40 -0
  12. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.chat.ts +99 -0
  13. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.image.ts +72 -0
  14. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.structured.ts +136 -0
  15. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.transcription.ts +89 -0
  16. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.tts.ts +81 -0
  17. package/dist/frameworks/react/add-ons/ai/info.json +1 -1
  18. package/dist/frameworks/react/add-ons/apollo-client/info.json +1 -1
  19. package/dist/frameworks/react/add-ons/better-auth/assets/src/lib/auth-client.ts +3 -0
  20. package/dist/frameworks/react/add-ons/better-auth/assets/src/lib/auth.ts +9 -0
  21. package/dist/frameworks/react/add-ons/better-auth/assets/src/routes/api/auth/$.ts +11 -0
  22. package/dist/frameworks/react/add-ons/better-auth/info.json +0 -2
  23. package/dist/frameworks/react/add-ons/clerk/info.json +0 -1
  24. package/dist/frameworks/react/add-ons/convex/assets/convex/schema.ts +14 -0
  25. package/dist/frameworks/react/add-ons/convex/assets/convex/todos.ts +43 -0
  26. package/dist/frameworks/react/add-ons/db/assets/src/db-collections/index.ts +20 -0
  27. package/dist/frameworks/react/add-ons/db/assets/src/hooks/demo.useChat.ts +62 -0
  28. package/dist/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat-api.ts +83 -0
  29. package/dist/frameworks/react/add-ons/db/info.json +1 -1
  30. package/dist/frameworks/react/add-ons/drizzle/info.json +1 -1
  31. package/dist/frameworks/react/add-ons/drizzle/package.json.ejs +4 -0
  32. package/dist/frameworks/react/add-ons/form/assets/src/hooks/demo.form-context.ts +4 -0
  33. package/dist/frameworks/react/add-ons/form/assets/src/hooks/demo.form.ts +22 -0
  34. package/dist/frameworks/react/add-ons/mcp/assets/src/mcp-todos.ts +51 -0
  35. package/dist/frameworks/react/add-ons/mcp/assets/src/routes/demo/api.mcp-todos.ts +37 -0
  36. package/dist/frameworks/react/add-ons/mcp/assets/src/routes/mcp.ts +53 -0
  37. package/dist/frameworks/react/add-ons/mcp/assets/src/utils/mcp-handler.ts +61 -0
  38. package/dist/frameworks/react/add-ons/mcp/info.json +1 -2
  39. package/dist/frameworks/react/add-ons/neon/assets/neon-vite-plugin.ts +10 -0
  40. package/dist/frameworks/react/add-ons/neon/assets/src/db.ts +13 -0
  41. package/dist/frameworks/react/add-ons/neon/info.json +1 -2
  42. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/client.ts +29 -0
  43. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/router/index.ts +6 -0
  44. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/router/todos.ts +20 -0
  45. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/schema.ts +6 -0
  46. package/dist/frameworks/react/add-ons/oRPC/assets/src/polyfill.ts +21 -0
  47. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/api.$.ts +77 -0
  48. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/api.rpc.$.ts +29 -0
  49. package/dist/frameworks/react/add-ons/oRPC/info.json +1 -1
  50. package/dist/frameworks/react/add-ons/paraglide/info.json +1 -1
  51. package/dist/frameworks/react/add-ons/prisma/info.json +1 -1
  52. package/dist/frameworks/react/add-ons/prisma/package.json.ejs +4 -0
  53. package/dist/frameworks/react/add-ons/sentry/info.json +1 -2
  54. package/dist/frameworks/react/add-ons/shadcn/assets/src/lib/utils.ts +6 -0
  55. package/dist/frameworks/react/add-ons/store/assets/src/lib/demo-store.ts +13 -0
  56. package/dist/frameworks/react/add-ons/storybook/assets/_dot_storybook/main.ts +17 -0
  57. package/dist/frameworks/react/add-ons/storybook/assets/_dot_storybook/preview.ts +15 -0
  58. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.stories.ts +67 -0
  59. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/index.ts +14 -0
  60. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.stories.ts +43 -0
  61. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.stories.ts +53 -0
  62. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.stories.ts +55 -0
  63. package/dist/frameworks/react/add-ons/strapi/assets/src/lib/strapiClient.ts +7 -0
  64. package/dist/frameworks/react/add-ons/t3env/assets/src/env.ts +39 -0
  65. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/init.ts +9 -0
  66. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/react.ts +4 -0
  67. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/router.ts +27 -0
  68. package/dist/frameworks/react/add-ons/tRPC/info.json +1 -1
  69. package/dist/frameworks/react/add-ons/table/assets/src/data/demo-table-data.ts +50 -0
  70. package/dist/frameworks/react/add-ons/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +1 -29
  71. package/dist/frameworks/react/add-ons/workos/info.json +0 -1
  72. package/dist/frameworks/react/examples/events/assets/content-collections.ts +56 -0
  73. package/dist/frameworks/react/examples/events/assets/src/lib/conference-ai-hook.ts +26 -0
  74. package/dist/frameworks/react/examples/events/assets/src/lib/conference-tools.ts +210 -0
  75. package/dist/frameworks/react/examples/events/assets/src/lib/utils.ts +6 -0
  76. package/dist/frameworks/react/examples/events/assets/src/routes/api.remy-chat.ts +121 -0
  77. package/dist/frameworks/react/examples/resume/assets/content-collections.ts +36 -0
  78. package/dist/frameworks/react/examples/resume/assets/src/lib/resume-ai-hook.ts +21 -0
  79. package/dist/frameworks/react/examples/resume/assets/src/lib/resume-tools.ts +165 -0
  80. package/dist/frameworks/react/examples/resume/assets/src/lib/utils.ts +6 -0
  81. package/dist/frameworks/react/examples/resume/assets/src/routes/api.resume-chat.ts +110 -0
  82. package/dist/frameworks/react/hosts/cloudflare/info.json +0 -1
  83. package/dist/frameworks/react/hosts/netlify/info.json +0 -1
  84. package/dist/frameworks/react/hosts/nitro/info.json +0 -1
  85. package/dist/frameworks/react/hosts/railway/info.json +0 -1
  86. package/dist/frameworks/react/index.js +1 -6
  87. package/dist/frameworks/react/project/base/README.md.ejs +86 -436
  88. package/dist/frameworks/react/project/base/_dot_gitignore +4 -0
  89. package/dist/frameworks/react/project/base/package.json +8 -5
  90. package/dist/frameworks/react/project/base/src/components/Header.tsx.ejs +2 -32
  91. package/dist/frameworks/react/project/base/src/routes/__root.tsx.ejs +4 -44
  92. package/dist/frameworks/react/project/base/src/routes/index.tsx.ejs +99 -61
  93. package/dist/frameworks/react/project/base/src/styles.css.ejs +3 -3
  94. package/dist/frameworks/react/project/base/tsconfig.json.ejs +1 -1
  95. package/dist/frameworks/react/project/base/vite.config.ts.ejs +33 -27
  96. package/dist/frameworks/react/project/packages.json +2 -2
  97. package/dist/frameworks/solid/add-ons/better-auth/assets/src/lib/auth-client.ts +3 -0
  98. package/dist/frameworks/solid/add-ons/better-auth/assets/src/lib/auth.ts +9 -0
  99. package/dist/frameworks/solid/add-ons/better-auth/assets/src/routes/api/auth/$.ts +11 -0
  100. package/dist/frameworks/solid/add-ons/better-auth/info.json +1 -1
  101. package/dist/frameworks/solid/add-ons/convex/assets/convex/schema.ts +14 -0
  102. package/dist/frameworks/solid/add-ons/convex/assets/convex/todos.ts +43 -0
  103. package/dist/frameworks/solid/add-ons/solid-ui/assets/src/lib/utils.ts +6 -0
  104. package/dist/frameworks/solid/add-ons/store/assets/src/lib/demo-store.ts +13 -0
  105. package/dist/frameworks/solid/add-ons/strapi/assets/src/lib/strapiClient.ts +7 -0
  106. package/dist/frameworks/solid/add-ons/t3env/assets/src/env.ts +39 -0
  107. package/dist/frameworks/solid/examples/tanchat/assets/ai-streaming-server/src/index.ts +102 -0
  108. package/dist/frameworks/solid/examples/tanchat/assets/src/lib/demo-store.ts +13 -0
  109. package/dist/frameworks/solid/examples/tanchat/assets/src/store/demo.hooks.ts +17 -0
  110. package/dist/frameworks/solid/examples/tanchat/assets/src/store/demo.store.ts +133 -0
  111. package/dist/frameworks/solid/hosts/cloudflare/info.json +0 -1
  112. package/dist/frameworks/solid/hosts/netlify/info.json +0 -1
  113. package/dist/frameworks/solid/hosts/nitro/info.json +0 -1
  114. package/dist/frameworks/solid/hosts/railway/info.json +0 -1
  115. package/dist/frameworks/solid/index.js +1 -6
  116. package/dist/frameworks/solid/project/base/README.md.ejs +43 -117
  117. package/dist/frameworks/solid/project/base/_dot_gitignore +4 -0
  118. package/dist/frameworks/solid/project/base/package.json +8 -3
  119. package/dist/frameworks/solid/project/base/src/components/Header.tsx.ejs +2 -25
  120. package/dist/frameworks/solid/project/base/src/routes/__root.tsx.ejs +3 -30
  121. package/dist/frameworks/solid/project/base/src/routes/index.tsx.ejs +97 -35
  122. package/dist/frameworks/solid/project/base/tsconfig.json.ejs +1 -1
  123. package/dist/frameworks/solid/project/base/vite.config.ts.ejs +15 -20
  124. package/dist/frameworks/solid/project/packages.json +2 -2
  125. package/dist/frameworks.js +0 -1
  126. package/dist/package-json.js +6 -10
  127. package/dist/template-file.js +21 -7
  128. package/dist/types/custom-add-ons/add-on.d.ts +1 -1
  129. package/dist/types/file-helpers.d.ts +0 -1
  130. package/dist/types/types.d.ts +12 -12
  131. package/dist/types.js +1 -2
  132. package/package.json +2 -2
  133. package/src/add-ons.ts +54 -2
  134. package/src/add-to-app.ts +42 -7
  135. package/src/custom-add-ons/add-on.ts +2 -33
  136. package/src/custom-add-ons/starter.ts +1 -2
  137. package/src/file-helpers.ts +11 -10
  138. package/src/frameworks/react/add-ons/ai/info.json +1 -1
  139. package/src/frameworks/react/add-ons/apollo-client/info.json +1 -1
  140. package/src/frameworks/react/add-ons/better-auth/info.json +0 -2
  141. package/src/frameworks/react/add-ons/clerk/info.json +0 -1
  142. package/src/frameworks/react/add-ons/db/info.json +1 -1
  143. package/src/frameworks/react/add-ons/drizzle/info.json +1 -1
  144. package/src/frameworks/react/add-ons/drizzle/package.json.ejs +4 -0
  145. package/src/frameworks/react/add-ons/mcp/info.json +1 -2
  146. package/src/frameworks/react/add-ons/neon/assets/neon-vite-plugin.ts +1 -1
  147. package/src/frameworks/react/add-ons/neon/info.json +1 -2
  148. package/src/frameworks/react/add-ons/oRPC/info.json +1 -1
  149. package/src/frameworks/react/add-ons/paraglide/info.json +1 -1
  150. package/src/frameworks/react/add-ons/prisma/info.json +1 -1
  151. package/src/frameworks/react/add-ons/prisma/package.json.ejs +4 -0
  152. package/src/frameworks/react/add-ons/sentry/info.json +1 -2
  153. package/src/frameworks/react/add-ons/tRPC/info.json +1 -1
  154. package/src/frameworks/react/add-ons/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +1 -29
  155. package/src/frameworks/react/add-ons/workos/info.json +0 -1
  156. package/src/frameworks/react/hosts/cloudflare/info.json +0 -1
  157. package/src/frameworks/react/hosts/netlify/info.json +0 -1
  158. package/src/frameworks/react/hosts/nitro/info.json +0 -1
  159. package/src/frameworks/react/hosts/railway/info.json +0 -1
  160. package/src/frameworks/react/index.ts +1 -6
  161. package/src/frameworks/react/project/base/README.md.ejs +86 -436
  162. package/src/frameworks/react/project/base/_dot_gitignore +4 -0
  163. package/src/frameworks/react/project/base/package.json +8 -5
  164. package/src/frameworks/react/project/base/src/components/Header.tsx.ejs +2 -32
  165. package/src/frameworks/react/project/base/src/routes/__root.tsx.ejs +4 -44
  166. package/src/frameworks/react/project/base/src/routes/index.tsx.ejs +99 -61
  167. package/src/frameworks/react/project/base/src/styles.css.ejs +3 -3
  168. package/src/frameworks/react/project/base/tsconfig.json.ejs +1 -1
  169. package/src/frameworks/react/project/base/vite.config.ts.ejs +33 -27
  170. package/src/frameworks/react/project/packages.json +2 -2
  171. package/src/frameworks/solid/add-ons/better-auth/info.json +1 -1
  172. package/src/frameworks/solid/hosts/cloudflare/info.json +0 -1
  173. package/src/frameworks/solid/hosts/netlify/info.json +0 -1
  174. package/src/frameworks/solid/hosts/nitro/info.json +0 -1
  175. package/src/frameworks/solid/hosts/railway/info.json +0 -1
  176. package/src/frameworks/solid/index.ts +1 -6
  177. package/src/frameworks/solid/project/base/README.md.ejs +43 -117
  178. package/src/frameworks/solid/project/base/_dot_gitignore +4 -0
  179. package/src/frameworks/solid/project/base/package.json +8 -3
  180. package/src/frameworks/solid/project/base/src/components/Header.tsx.ejs +2 -25
  181. package/src/frameworks/solid/project/base/src/routes/__root.tsx.ejs +3 -30
  182. package/src/frameworks/solid/project/base/src/routes/index.tsx.ejs +97 -35
  183. package/src/frameworks/solid/project/base/tsconfig.json.ejs +1 -1
  184. package/src/frameworks/solid/project/base/vite.config.ts.ejs +15 -20
  185. package/src/frameworks/solid/project/packages.json +2 -2
  186. package/src/frameworks.ts +0 -1
  187. package/src/package-json.ts +6 -10
  188. package/src/template-file.ts +27 -8
  189. package/src/types.ts +1 -2
  190. package/tests/add-to-app.test.ts +37 -0
  191. package/tests/copy-assets.test.ts +53 -0
  192. package/tests/file-helper.test.ts +23 -2
  193. package/tests/package-json.test.ts +32 -0
  194. package/tests/template-file.test.ts +28 -0
  195. package/dist/frameworks/react/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -31
  196. package/dist/frameworks/react/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  197. package/dist/frameworks/react/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
  198. package/dist/frameworks/react/add-ons/module-federation/info.json +0 -11
  199. package/dist/frameworks/react/add-ons/module-federation/package.json +0 -5
  200. package/dist/frameworks/react/add-ons/module-federation/small-logo.svg +0 -87
  201. package/dist/frameworks/react/add-ons/start/assets/_dot_gitignore.append +0 -3
  202. package/dist/frameworks/react/add-ons/start/assets/src/router.tsx.ejs +0 -77
  203. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/api.tq-todos.ts.ejs +0 -35
  204. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.api-request.tsx.ejs +0 -68
  205. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.css.ejs +0 -43
  206. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.server-funcs.tsx.ejs +0 -183
  207. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.data-only.tsx.ejs +0 -55
  208. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.full-ssr.tsx.ejs +0 -55
  209. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.index.tsx.ejs +0 -62
  210. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.spa-mode.tsx.ejs +0 -62
  211. package/dist/frameworks/react/add-ons/start/assets/src/routes/index.tsx.ejs +0 -142
  212. package/dist/frameworks/react/add-ons/start/assets/src/server.ts.ejs +0 -9
  213. package/dist/frameworks/react/add-ons/start/assets/vite.config.ts.ejs +0 -40
  214. package/dist/frameworks/react/add-ons/start/info.json +0 -61
  215. package/dist/frameworks/react/add-ons/start/package.json +0 -12
  216. package/dist/frameworks/react/add-ons/start/small-logo.svg +0 -1
  217. package/dist/frameworks/react/project/base/index.html.ejs +0 -20
  218. package/dist/frameworks/react/project/base/src/App.css.ejs +0 -38
  219. package/dist/frameworks/react/project/base/src/App.tsx.ejs +0 -63
  220. package/dist/frameworks/react/project/base/src/components/Header.css.ejs +0 -18
  221. package/dist/frameworks/react/project/base/src/logo.svg +0 -12
  222. package/dist/frameworks/react/project/base/src/main.tsx.ejs +0 -166
  223. package/dist/frameworks/react/project/base/src/reportWebVitals.ts.ejs +0 -28
  224. package/dist/frameworks/solid/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -27
  225. package/dist/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  226. package/dist/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
  227. package/dist/frameworks/solid/add-ons/module-federation/info.json +0 -10
  228. package/dist/frameworks/solid/add-ons/module-federation/package.json +0 -5
  229. package/dist/frameworks/solid/add-ons/module-federation/small-logo.svg +0 -87
  230. package/dist/frameworks/solid/add-ons/start/assets/public/tanstack-circle-logo.png +0 -0
  231. package/dist/frameworks/solid/add-ons/start/assets/public/tanstack-word-logo-white.svg +0 -1
  232. package/dist/frameworks/solid/add-ons/start/assets/src/router.tsx.ejs +0 -30
  233. package/dist/frameworks/solid/add-ons/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
  234. package/dist/frameworks/solid/add-ons/start/assets/src/routes/index.tsx.ejs +0 -138
  235. package/dist/frameworks/solid/add-ons/start/assets/vite.config.ts.ejs +0 -22
  236. package/dist/frameworks/solid/add-ons/start/info.json +0 -18
  237. package/dist/frameworks/solid/add-ons/start/package.json +0 -15
  238. package/dist/frameworks/solid/add-ons/start/small-logo.svg +0 -1
  239. package/dist/frameworks/solid/project/base/index.html.ejs +0 -20
  240. package/dist/frameworks/solid/project/base/src/App.css.ejs +0 -38
  241. package/dist/frameworks/solid/project/base/src/App.tsx.ejs +0 -34
  242. package/dist/frameworks/solid/project/base/src/logo.svg +0 -120
  243. package/dist/frameworks/solid/project/base/src/main.tsx.ejs +0 -126
  244. package/src/frameworks/react/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -31
  245. package/src/frameworks/react/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  246. package/src/frameworks/react/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
  247. package/src/frameworks/react/add-ons/module-federation/info.json +0 -11
  248. package/src/frameworks/react/add-ons/module-federation/package.json +0 -5
  249. package/src/frameworks/react/add-ons/module-federation/small-logo.svg +0 -87
  250. package/src/frameworks/react/add-ons/start/assets/_dot_gitignore.append +0 -3
  251. package/src/frameworks/react/add-ons/start/assets/src/data/demo.punk-songs.ts +0 -13
  252. package/src/frameworks/react/add-ons/start/assets/src/router.tsx.ejs +0 -77
  253. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/api.names.ts +0 -10
  254. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/api.tq-todos.ts.ejs +0 -35
  255. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.api-request.tsx.ejs +0 -68
  256. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.css.ejs +0 -43
  257. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.server-funcs.tsx.ejs +0 -183
  258. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.data-only.tsx.ejs +0 -55
  259. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.full-ssr.tsx.ejs +0 -55
  260. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.index.tsx.ejs +0 -62
  261. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.spa-mode.tsx.ejs +0 -62
  262. package/src/frameworks/react/add-ons/start/assets/src/routes/index.tsx.ejs +0 -142
  263. package/src/frameworks/react/add-ons/start/assets/src/server.ts.ejs +0 -9
  264. package/src/frameworks/react/add-ons/start/assets/vite.config.ts.ejs +0 -40
  265. package/src/frameworks/react/add-ons/start/info.json +0 -61
  266. package/src/frameworks/react/add-ons/start/package.json +0 -12
  267. package/src/frameworks/react/add-ons/start/small-logo.svg +0 -1
  268. package/src/frameworks/react/project/base/index.html.ejs +0 -20
  269. package/src/frameworks/react/project/base/src/App.css.ejs +0 -38
  270. package/src/frameworks/react/project/base/src/App.tsx.ejs +0 -63
  271. package/src/frameworks/react/project/base/src/components/Header.css.ejs +0 -18
  272. package/src/frameworks/react/project/base/src/logo.svg +0 -12
  273. package/src/frameworks/react/project/base/src/main.tsx.ejs +0 -166
  274. package/src/frameworks/react/project/base/src/reportWebVitals.ts.ejs +0 -28
  275. package/src/frameworks/solid/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -27
  276. package/src/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  277. package/src/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
  278. package/src/frameworks/solid/add-ons/module-federation/info.json +0 -10
  279. package/src/frameworks/solid/add-ons/module-federation/package.json +0 -5
  280. package/src/frameworks/solid/add-ons/module-federation/small-logo.svg +0 -87
  281. package/src/frameworks/solid/add-ons/start/assets/public/tanstack-circle-logo.png +0 -0
  282. package/src/frameworks/solid/add-ons/start/assets/public/tanstack-word-logo-white.svg +0 -1
  283. package/src/frameworks/solid/add-ons/start/assets/src/router.tsx.ejs +0 -30
  284. package/src/frameworks/solid/add-ons/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
  285. package/src/frameworks/solid/add-ons/start/assets/src/routes/index.tsx.ejs +0 -138
  286. package/src/frameworks/solid/add-ons/start/assets/vite.config.ts.ejs +0 -22
  287. package/src/frameworks/solid/add-ons/start/info.json +0 -18
  288. package/src/frameworks/solid/add-ons/start/package.json +0 -15
  289. package/src/frameworks/solid/add-ons/start/small-logo.svg +0 -1
  290. package/src/frameworks/solid/project/base/index.html.ejs +0 -20
  291. package/src/frameworks/solid/project/base/src/App.css.ejs +0 -38
  292. package/src/frameworks/solid/project/base/src/App.tsx.ejs +0 -34
  293. package/src/frameworks/solid/project/base/src/logo.svg +0 -120
  294. package/src/frameworks/solid/project/base/src/main.tsx.ejs +0 -126
@@ -0,0 +1,121 @@
1
+ import { createFileRoute } from '@tanstack/react-router'
2
+ import { chat, maxIterations, toServerSentEventsResponse } from '@tanstack/ai'
3
+ import { anthropicText } from '@tanstack/ai-anthropic'
4
+ import { openaiText } from '@tanstack/ai-openai'
5
+ import { geminiText } from '@tanstack/ai-gemini'
6
+ import { ollamaText } from '@tanstack/ai-ollama'
7
+
8
+ import {
9
+ getSpeakerBySlug,
10
+ getTalkBySlug,
11
+ getAllSpeakers,
12
+ getAllTalks,
13
+ searchConference,
14
+ } from '@/lib/conference-tools'
15
+
16
+ export const Route = createFileRoute('/api/remy-chat')({
17
+ server: {
18
+ handlers: {
19
+ POST: async ({ request }) => {
20
+ const requestSignal = request.signal
21
+
22
+ if (requestSignal.aborted) {
23
+ return new Response(null, { status: 499 })
24
+ }
25
+
26
+ const abortController = new AbortController()
27
+
28
+ try {
29
+ const body = await request.json()
30
+ const { messages, speakerSlug, talkSlug } = body
31
+ const data = body.data || {}
32
+
33
+ const SYSTEM_PROMPT = `You are Remy, a charming and knowledgeable culinary assistant for the Haute Pâtisserie 2026 conference in Paris. You have a warm, enthusiastic personality and deep appreciation for the art of pastry and baking.
34
+
35
+ PERSONALITY:
36
+ - Speak with warmth and a touch of French flair (occasional "magnifique!", "c'est parfait!", etc.)
37
+ - Be genuinely passionate about pastry, bread, and culinary arts
38
+ - Knowledgeable about techniques, ingredients, and the history of baking
39
+ - Helpful and encouraging to both novices and professionals
40
+
41
+ CAPABILITIES:
42
+ 1. Use getSpeakerBySlug to get detailed information about a specific speaker
43
+ 2. Use getTalkBySlug to get detailed information about a specific session
44
+ 3. Use getAllSpeakers to see the complete speaker lineup
45
+ 4. Use getAllTalks to see all available sessions
46
+ 5. Use searchConference to find speakers or sessions matching a topic or keyword
47
+
48
+ INSTRUCTIONS:
49
+ - When asked about the conference, speakers, or sessions, use your tools to provide accurate information
50
+ - Help attendees find sessions that match their interests
51
+ - Share enthusiasm about the speakers and their expertise
52
+ - If asked about pastry techniques, you can provide general knowledge while recommending relevant sessions
53
+ - Keep responses conversational but informative
54
+ - When recommending sessions, explain why they might be interesting based on the user's query
55
+
56
+ ${speakerSlug ? `CONTEXT: The user is viewing the profile of the speaker with slug "${speakerSlug}".` : ''}
57
+ ${talkSlug ? `CONTEXT: The user is viewing the session with slug "${talkSlug}".` : ''}
58
+
59
+ Remember: You are the friendly face of Haute Pâtisserie 2026. Make every attendee feel welcome and excited about the culinary journey ahead!`
60
+
61
+ // Determine the best available provider
62
+ let provider: string = 'ollama'
63
+ let model: string = 'mistral:7b'
64
+ if (process.env.ANTHROPIC_API_KEY) {
65
+ provider = 'anthropic'
66
+ model = 'claude-haiku-4-5'
67
+ } else if (process.env.OPENAI_API_KEY) {
68
+ provider = 'openai'
69
+ model = 'gpt-4o'
70
+ } else if (process.env.GEMINI_API_KEY) {
71
+ provider = 'gemini'
72
+ model = 'gemini-2.0-flash-exp'
73
+ }
74
+
75
+ // Adapter factory pattern for multi-vendor support
76
+ const adapterConfig = {
77
+ anthropic: () =>
78
+ anthropicText((model || 'claude-haiku-4-5') as any),
79
+ openai: () => openaiText((model || 'gpt-4o') as any),
80
+ gemini: () => geminiText((model || 'gemini-2.0-flash-exp') as any),
81
+ ollama: () => ollamaText((model || 'mistral:7b') as any),
82
+ }
83
+
84
+ const adapter = adapterConfig[provider]()
85
+
86
+ const stream = chat({
87
+ adapter,
88
+ tools: [
89
+ getSpeakerBySlug,
90
+ getTalkBySlug,
91
+ getAllSpeakers,
92
+ getAllTalks,
93
+ searchConference,
94
+ ],
95
+ systemPrompts: [SYSTEM_PROMPT],
96
+ agentLoopStrategy: maxIterations(5),
97
+ messages,
98
+ abortController,
99
+ })
100
+
101
+ return toServerSentEventsResponse(stream, { abortController })
102
+ } catch (error: any) {
103
+ console.error('Remy chat error:', error)
104
+ if (error.name === 'AbortError' || abortController.signal.aborted) {
105
+ return new Response(null, { status: 499 })
106
+ }
107
+ return new Response(
108
+ JSON.stringify({
109
+ error: 'Failed to process chat request',
110
+ message: error.message,
111
+ }),
112
+ {
113
+ status: 500,
114
+ headers: { 'Content-Type': 'application/json' },
115
+ },
116
+ )
117
+ }
118
+ },
119
+ },
120
+ },
121
+ })
@@ -0,0 +1,36 @@
1
+ import { defineCollection, defineConfig } from '@content-collections/core'
2
+ import { z } from 'zod'
3
+
4
+ const jobs = defineCollection({
5
+ name: 'jobs',
6
+ directory: 'content/jobs',
7
+ include: '**/*.md',
8
+ schema: z.object({
9
+ jobTitle: z.string(),
10
+ summary: z.string(),
11
+ startDate: z.string(),
12
+ endDate: z.string().optional(),
13
+ company: z.string(),
14
+ location: z.string(),
15
+ tags: z.array(z.string()),
16
+ content: z.string(),
17
+ }),
18
+ })
19
+
20
+ const education = defineCollection({
21
+ name: 'education',
22
+ directory: 'content/education',
23
+ include: '**/*.md',
24
+ schema: z.object({
25
+ school: z.string(),
26
+ summary: z.string(),
27
+ startDate: z.string(),
28
+ endDate: z.string().optional(),
29
+ tags: z.array(z.string()),
30
+ content: z.string(),
31
+ }),
32
+ })
33
+
34
+ export default defineConfig({
35
+ collections: [jobs, education],
36
+ })
@@ -0,0 +1,21 @@
1
+ import {
2
+ fetchServerSentEvents,
3
+ useChat,
4
+ createChatClientOptions,
5
+ } from '@tanstack/ai-react'
6
+ import type { InferChatMessages } from '@tanstack/ai-react'
7
+
8
+ // Default chat options for type inference
9
+ const defaultChatOptions = createChatClientOptions({
10
+ connection: fetchServerSentEvents('/api/resume-chat'),
11
+ })
12
+
13
+ export type ResumeChatMessages = InferChatMessages<typeof defaultChatOptions>
14
+
15
+ export const useResumeChat = () => {
16
+ const chatOptions = createChatClientOptions({
17
+ connection: fetchServerSentEvents('/api/resume-chat'),
18
+ })
19
+
20
+ return useChat(chatOptions)
21
+ }
@@ -0,0 +1,165 @@
1
+ import { toolDefinition } from '@tanstack/ai'
2
+ import { z } from 'zod'
3
+
4
+ import { allJobs, allEducations } from 'content-collections'
5
+
6
+ // Tool definition for getting jobs by skill
7
+ export const getJobsBySkillToolDef = toolDefinition({
8
+ name: 'getJobsBySkill',
9
+ description:
10
+ 'Find all jobs where the candidate used a specific technology or skill. Use this to check if the candidate has experience with particular technologies.',
11
+ inputSchema: z.object({
12
+ skill: z
13
+ .string()
14
+ .describe(
15
+ 'The skill or technology to search for (e.g., "React", "TypeScript", "Leadership")',
16
+ ),
17
+ }),
18
+ outputSchema: z.array(
19
+ z.object({
20
+ jobTitle: z.string(),
21
+ company: z.string(),
22
+ location: z.string(),
23
+ startDate: z.string(),
24
+ endDate: z.string().optional(),
25
+ summary: z.string(),
26
+ tags: z.array(z.string()),
27
+ content: z.string(),
28
+ }),
29
+ ),
30
+ })
31
+
32
+ // Server implementation
33
+ export const getJobsBySkill = getJobsBySkillToolDef.server(({ skill }) => {
34
+ return allJobs.filter((job) =>
35
+ job.tags.some((tag) => tag.toLowerCase().includes(skill.toLowerCase())),
36
+ )
37
+ })
38
+
39
+ // Tool definition for getting all jobs
40
+ export const getAllJobsToolDef = toolDefinition({
41
+ name: 'getAllJobs',
42
+ description:
43
+ 'Get a complete list of all work experience with full details including job titles, companies, dates, summaries, and skills. Use this to get an overview of the candidate\'s entire work history.',
44
+ inputSchema: z.object({}),
45
+ outputSchema: z.array(
46
+ z.object({
47
+ jobTitle: z.string(),
48
+ company: z.string(),
49
+ location: z.string(),
50
+ startDate: z.string(),
51
+ endDate: z.string().optional(),
52
+ summary: z.string(),
53
+ tags: z.array(z.string()),
54
+ content: z.string(),
55
+ }),
56
+ ),
57
+ })
58
+
59
+ // Server implementation
60
+ export const getAllJobs = getAllJobsToolDef.server(() => {
61
+ return allJobs.map((job) => ({
62
+ jobTitle: job.jobTitle,
63
+ company: job.company,
64
+ location: job.location,
65
+ startDate: job.startDate,
66
+ endDate: job.endDate,
67
+ summary: job.summary,
68
+ tags: job.tags,
69
+ content: job.content,
70
+ }))
71
+ })
72
+
73
+ // Tool definition for getting all education
74
+ export const getAllEducationToolDef = toolDefinition({
75
+ name: 'getAllEducation',
76
+ description:
77
+ 'Get a complete list of all education history including schools, programs, dates, and skills learned. Use this to understand the candidate\'s educational background.',
78
+ inputSchema: z.object({}),
79
+ outputSchema: z.array(
80
+ z.object({
81
+ school: z.string(),
82
+ summary: z.string(),
83
+ startDate: z.string(),
84
+ endDate: z.string().optional(),
85
+ tags: z.array(z.string()),
86
+ content: z.string(),
87
+ }),
88
+ ),
89
+ })
90
+
91
+ // Server implementation
92
+ export const getAllEducation = getAllEducationToolDef.server(() => {
93
+ return allEducations.map((education) => ({
94
+ school: education.school,
95
+ summary: education.summary,
96
+ startDate: education.startDate,
97
+ endDate: education.endDate,
98
+ tags: education.tags,
99
+ content: education.content,
100
+ }))
101
+ })
102
+
103
+ // Tool definition for searching experience
104
+ export const searchExperienceToolDef = toolDefinition({
105
+ name: 'searchExperience',
106
+ description:
107
+ 'Search for jobs by keywords in the job title, company name, summary, or content. Use this to find specific types of experience or roles.',
108
+ inputSchema: z.object({
109
+ query: z
110
+ .string()
111
+ .describe(
112
+ 'The search query (e.g., "senior", "lead", "frontend", "startup")',
113
+ ),
114
+ }),
115
+ outputSchema: z.array(
116
+ z.object({
117
+ jobTitle: z.string(),
118
+ company: z.string(),
119
+ location: z.string(),
120
+ startDate: z.string(),
121
+ endDate: z.string().optional(),
122
+ summary: z.string(),
123
+ tags: z.array(z.string()),
124
+ matchedIn: z
125
+ .array(z.string())
126
+ .describe('Which fields matched the search'),
127
+ }),
128
+ ),
129
+ })
130
+
131
+ // Server implementation
132
+ export const searchExperience = searchExperienceToolDef.server(({ query }) => {
133
+ const lowerQuery = query.toLowerCase()
134
+
135
+ return allJobs
136
+ .map((job) => {
137
+ const matchedIn: string[] = []
138
+
139
+ if (job.jobTitle.toLowerCase().includes(lowerQuery)) {
140
+ matchedIn.push('job title')
141
+ }
142
+ if (job.company.toLowerCase().includes(lowerQuery)) {
143
+ matchedIn.push('company')
144
+ }
145
+ if (job.summary.toLowerCase().includes(lowerQuery)) {
146
+ matchedIn.push('summary')
147
+ }
148
+ if (job.content.toLowerCase().includes(lowerQuery)) {
149
+ matchedIn.push('description')
150
+ }
151
+
152
+ return { job, matchedIn }
153
+ })
154
+ .filter(({ matchedIn }) => matchedIn.length > 0)
155
+ .map(({ job, matchedIn }) => ({
156
+ jobTitle: job.jobTitle,
157
+ company: job.company,
158
+ location: job.location,
159
+ startDate: job.startDate,
160
+ endDate: job.endDate,
161
+ summary: job.summary,
162
+ tags: job.tags,
163
+ matchedIn,
164
+ }))
165
+ })
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from 'clsx'
2
+ import { twMerge } from 'tailwind-merge'
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
@@ -0,0 +1,110 @@
1
+ import { createFileRoute } from '@tanstack/react-router'
2
+ import { chat, maxIterations, toServerSentEventsResponse } from '@tanstack/ai'
3
+ import { anthropicText } from '@tanstack/ai-anthropic'
4
+ import { openaiText } from '@tanstack/ai-openai'
5
+ import { geminiText } from '@tanstack/ai-gemini'
6
+ import { ollamaText } from '@tanstack/ai-ollama'
7
+
8
+ import {
9
+ getJobsBySkill,
10
+ getAllJobs,
11
+ getAllEducation,
12
+ searchExperience,
13
+ } from '@/lib/resume-tools'
14
+
15
+ export const Route = createFileRoute('/api/resume-chat')({
16
+ server: {
17
+ handlers: {
18
+ POST: async ({ request }) => {
19
+ const requestSignal = request.signal
20
+
21
+ if (requestSignal.aborted) {
22
+ return new Response(null, { status: 499 })
23
+ }
24
+
25
+ const abortController = new AbortController()
26
+
27
+ try {
28
+ const body = await request.json()
29
+ const { messages } = body
30
+ const data = body.data || {}
31
+
32
+ const SYSTEM_PROMPT = `You are a helpful resume assistant helping recruiters and hiring managers evaluate if this candidate is a good fit for their job requirements.
33
+
34
+ CAPABILITIES:
35
+ 1. Use getJobsBySkill to find jobs where the candidate used specific technologies or skills
36
+ 2. Use getAllJobs to get the candidate's complete work history with all details
37
+ 3. Use getAllEducation to get the candidate's educational background
38
+ 4. Use searchExperience to search for specific types of roles or experience by keywords
39
+
40
+ INSTRUCTIONS:
41
+ - When asked about specific technologies or skills, use getJobsBySkill to find relevant experience
42
+ - When asked about overall experience or career progression, use getAllJobs
43
+ - When asked about education or training, use getAllEducation
44
+ - When asked about specific types of roles (e.g., "senior", "lead"), use searchExperience
45
+ - Be professional, concise, and helpful in your responses
46
+ - Provide specific details from the resume when available
47
+ - When calculating years of experience, consider the date ranges provided
48
+ - If the candidate has experience with something, highlight specific roles and time periods
49
+ - If the candidate lacks certain experience, be honest but constructive
50
+
51
+ CONTEXT: You are helping evaluate this candidate's qualifications for potential job opportunities.`
52
+
53
+ // Determine the best available provider
54
+ let provider: 'anthropic' | 'openai' | 'gemini' | 'ollama' = data.provider || 'ollama'
55
+ let model: string = data.model || 'mistral:7b'
56
+
57
+ // Use the first available provider with an API key, fallback to ollama
58
+ if (process.env.ANTHROPIC_API_KEY) {
59
+ provider = 'anthropic'
60
+ model = 'claude-haiku-4-5'
61
+ } else if (process.env.OPENAI_API_KEY) {
62
+ provider = 'openai'
63
+ model = 'gpt-4o'
64
+ } else if (process.env.GEMINI_API_KEY) {
65
+ provider = 'gemini'
66
+ model = 'gemini-2.0-flash-exp'
67
+ }
68
+ // else keep ollama as default
69
+
70
+ // Adapter factory pattern for multi-vendor support
71
+ const adapterConfig = {
72
+ anthropic: () =>
73
+ anthropicText((model || 'claude-haiku-4-5') as any),
74
+ openai: () => openaiText((model || 'gpt-4o') as any),
75
+ gemini: () => geminiText((model || 'gemini-2.0-flash-exp') as any),
76
+ ollama: () => ollamaText((model || 'mistral:7b') as any),
77
+ }
78
+
79
+ const adapter = adapterConfig[provider]()
80
+
81
+ const stream = chat({
82
+ adapter,
83
+ tools: [getJobsBySkill, getAllJobs, getAllEducation, searchExperience],
84
+ systemPrompts: [SYSTEM_PROMPT],
85
+ agentLoopStrategy: maxIterations(5),
86
+ messages,
87
+ abortController,
88
+ })
89
+
90
+ return toServerSentEventsResponse(stream, { abortController })
91
+ } catch (error: any) {
92
+ console.error('Resume chat error:', error)
93
+ if (error.name === 'AbortError' || abortController.signal.aborted) {
94
+ return new Response(null, { status: 499 })
95
+ }
96
+ return new Response(
97
+ JSON.stringify({
98
+ error: 'Failed to process chat request',
99
+ message: error.message,
100
+ }),
101
+ {
102
+ status: 500,
103
+ headers: { 'Content-Type': 'application/json' },
104
+ },
105
+ )
106
+ }
107
+ },
108
+ },
109
+ },
110
+ })
@@ -9,7 +9,6 @@
9
9
  "exclusive": ["deploy"],
10
10
  "color": "#F38020",
11
11
  "priority": 200,
12
- "tailwind": false,
13
12
  "integrations": [
14
13
  {
15
14
  "type": "vite-plugin",
@@ -9,7 +9,6 @@
9
9
  "exclusive": ["deploy"],
10
10
  "color": "#00C7B7",
11
11
  "priority": 180,
12
- "tailwind": false,
13
12
  "integrations": [
14
13
  {
15
14
  "type": "vite-plugin",
@@ -9,7 +9,6 @@
9
9
  "exclusive": ["deploy"],
10
10
  "color": "#ECDC5A",
11
11
  "priority": 0,
12
- "tailwind": false,
13
12
  "integrations": [
14
13
  {
15
14
  "type": "vite-plugin",
@@ -9,7 +9,6 @@
9
9
  "exclusive": ["deploy"],
10
10
  "color": "#9B4DCA",
11
11
  "priority": 160,
12
- "tailwind": false,
13
12
  "integrations": [
14
13
  {
15
14
  "type": "vite-plugin",
@@ -20,14 +20,9 @@ export function createFrameworkDefinition() {
20
20
  basePackageJSON,
21
21
  optionalPackages,
22
22
  supportedModes: {
23
- 'code-router': {
24
- displayName: 'Code Router',
25
- description: 'TanStack Router using code to define routes',
26
- forceTypescript: false,
27
- },
28
23
  'file-router': {
29
24
  displayName: 'File Router',
30
- description: 'TanStack Router using files to define routes',
25
+ description: 'TanStack Start with file-based routing',
31
26
  forceTypescript: true,
32
27
  },
33
28
  },