@tanstack/create 0.49.1 → 0.49.3

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 (223) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +21 -0
  3. package/dist/file-helpers.js +3 -1
  4. package/dist/frameworks/react/add-ons/ai/assets/src/data/demo-guitars.ts +93 -0
  5. package/dist/frameworks/react/add-ons/ai/assets/src/hooks/demo-useAudioRecorder.ts +85 -0
  6. package/dist/frameworks/react/add-ons/ai/assets/src/hooks/demo-useTTS.ts +78 -0
  7. package/dist/frameworks/react/add-ons/ai/assets/src/lib/demo-ai-hook.ts +22 -0
  8. package/dist/frameworks/react/add-ons/ai/assets/src/lib/demo-guitar-tools.ts +40 -0
  9. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.chat.ts +99 -0
  10. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.image.ts +72 -0
  11. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.structured.ts +136 -0
  12. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.transcription.ts +89 -0
  13. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.tts.ts +81 -0
  14. package/dist/frameworks/react/add-ons/better-auth/assets/src/lib/auth-client.ts +3 -0
  15. package/dist/frameworks/react/add-ons/better-auth/assets/src/lib/auth.ts +9 -0
  16. package/dist/frameworks/react/add-ons/better-auth/assets/src/routes/api/auth/$.ts +11 -0
  17. package/dist/frameworks/react/add-ons/convex/assets/convex/schema.ts +14 -0
  18. package/dist/frameworks/react/add-ons/convex/assets/convex/todos.ts +43 -0
  19. package/dist/frameworks/react/add-ons/db/assets/src/db-collections/index.ts +20 -0
  20. package/dist/frameworks/react/add-ons/db/assets/src/hooks/demo.useChat.ts +62 -0
  21. package/dist/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat-api.ts +83 -0
  22. package/dist/frameworks/react/add-ons/form/assets/src/hooks/demo.form-context.ts +4 -0
  23. package/dist/frameworks/react/add-ons/form/assets/src/hooks/demo.form.ts +22 -0
  24. package/dist/frameworks/react/add-ons/mcp/assets/src/mcp-todos.ts +51 -0
  25. package/dist/frameworks/react/add-ons/mcp/assets/src/routes/demo/api.mcp-todos.ts +37 -0
  26. package/dist/frameworks/react/add-ons/mcp/assets/src/routes/{mcp.js → mcp.ts} +27 -17
  27. package/dist/frameworks/react/add-ons/mcp/assets/src/utils/mcp-handler.ts +61 -0
  28. package/dist/frameworks/react/add-ons/neon/assets/neon-vite-plugin.ts +10 -0
  29. package/dist/frameworks/react/add-ons/neon/assets/src/db.ts +13 -0
  30. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/client.ts +29 -0
  31. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/router/index.ts +6 -0
  32. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/router/todos.ts +20 -0
  33. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/schema.ts +6 -0
  34. package/dist/frameworks/react/add-ons/oRPC/assets/src/{polyfill.js → polyfill.ts} +4 -1
  35. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/api.$.ts +77 -0
  36. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/api.rpc.$.ts +29 -0
  37. package/dist/frameworks/react/add-ons/shadcn/assets/src/lib/utils.ts +6 -0
  38. package/dist/frameworks/react/add-ons/start/assets/src/data/demo.punk-songs.ts +13 -0
  39. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/api.names.ts +10 -0
  40. package/dist/frameworks/react/add-ons/store/assets/src/lib/demo-store.ts +13 -0
  41. package/dist/frameworks/react/add-ons/storybook/assets/_dot_storybook/main.ts +17 -0
  42. package/dist/frameworks/react/add-ons/storybook/assets/_dot_storybook/preview.ts +15 -0
  43. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.stories.ts +67 -0
  44. package/dist/{types/frameworks/react/add-ons/storybook/assets/src/components/storybook/index.d.ts → frameworks/react/add-ons/storybook/assets/src/components/storybook/index.ts} +4 -0
  45. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.stories.ts +43 -0
  46. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.stories.ts +53 -0
  47. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.stories.ts +55 -0
  48. package/dist/frameworks/{solid/add-ons/strapi/assets/src/lib/strapiClient.js → react/add-ons/strapi/assets/src/lib/strapiClient.ts} +3 -1
  49. package/dist/frameworks/react/add-ons/t3env/assets/src/env.ts +39 -0
  50. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/{init.js → init.ts} +3 -1
  51. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/react.ts +4 -0
  52. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/router.ts +27 -0
  53. package/dist/frameworks/react/add-ons/table/assets/src/data/demo-table-data.ts +50 -0
  54. package/dist/frameworks/react/examples/events/assets/content-collections.ts +56 -0
  55. package/dist/frameworks/react/examples/events/assets/src/lib/conference-ai-hook.ts +26 -0
  56. package/dist/frameworks/react/examples/events/assets/src/lib/conference-tools.ts +210 -0
  57. package/dist/frameworks/react/examples/events/assets/src/lib/utils.ts +6 -0
  58. package/dist/frameworks/react/examples/events/assets/src/routes/api.remy-chat.ts +121 -0
  59. package/dist/frameworks/react/examples/resume/assets/content-collections.ts +36 -0
  60. package/dist/frameworks/react/examples/resume/assets/src/lib/resume-ai-hook.ts +21 -0
  61. package/dist/frameworks/react/examples/resume/assets/src/lib/resume-tools.ts +165 -0
  62. package/dist/frameworks/react/examples/resume/assets/src/lib/utils.ts +6 -0
  63. package/dist/frameworks/react/examples/resume/assets/src/routes/api.resume-chat.ts +110 -0
  64. package/dist/frameworks/solid/add-ons/better-auth/assets/src/lib/auth-client.ts +3 -0
  65. package/dist/frameworks/solid/add-ons/better-auth/assets/src/lib/auth.ts +9 -0
  66. package/dist/frameworks/solid/add-ons/better-auth/assets/src/routes/api/auth/$.ts +11 -0
  67. package/dist/frameworks/solid/add-ons/convex/assets/convex/schema.ts +14 -0
  68. package/dist/frameworks/solid/add-ons/convex/assets/convex/todos.ts +43 -0
  69. package/dist/frameworks/solid/add-ons/solid-ui/assets/src/lib/utils.ts +6 -0
  70. package/dist/frameworks/solid/add-ons/store/assets/src/lib/demo-store.ts +13 -0
  71. package/dist/frameworks/{react/add-ons/strapi/assets/src/lib/strapiClient.js → solid/add-ons/strapi/assets/src/lib/strapiClient.ts} +3 -1
  72. package/dist/frameworks/solid/add-ons/t3env/assets/src/env.ts +39 -0
  73. package/dist/frameworks/solid/examples/tanchat/assets/ai-streaming-server/src/index.ts +102 -0
  74. package/dist/frameworks/solid/examples/tanchat/assets/src/lib/demo-store.ts +13 -0
  75. package/dist/frameworks/solid/examples/tanchat/assets/src/store/demo.hooks.ts +17 -0
  76. package/dist/frameworks/solid/examples/tanchat/assets/src/store/demo.store.ts +133 -0
  77. package/dist/special-steps/post-init-script.js +6 -6
  78. package/package.json +11 -12
  79. package/src/file-helpers.ts +4 -1
  80. package/src/special-steps/post-init-script.ts +6 -6
  81. package/tests/copy-assets.test.ts +53 -0
  82. package/tests/file-helper.test.ts +19 -0
  83. package/tests/special-steps.test.ts +12 -12
  84. package/dist/frameworks/react/add-ons/ai/assets/src/data/demo-guitars.js +0 -67
  85. package/dist/frameworks/react/add-ons/ai/assets/src/hooks/demo-useAudioRecorder.js +0 -70
  86. package/dist/frameworks/react/add-ons/ai/assets/src/hooks/demo-useTTS.js +0 -66
  87. package/dist/frameworks/react/add-ons/ai/assets/src/lib/demo-ai-hook.js +0 -11
  88. package/dist/frameworks/react/add-ons/ai/assets/src/lib/demo-guitar-tools.js +0 -32
  89. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.chat.js +0 -87
  90. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.image.js +0 -55
  91. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.structured.js +0 -116
  92. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.transcription.js +0 -73
  93. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.tts.js +0 -58
  94. package/dist/frameworks/react/add-ons/better-auth/assets/src/lib/auth-client.js +0 -2
  95. package/dist/frameworks/react/add-ons/better-auth/assets/src/lib/auth.js +0 -8
  96. package/dist/frameworks/react/add-ons/better-auth/assets/src/routes/api/auth/$.js +0 -10
  97. package/dist/frameworks/react/add-ons/convex/assets/convex/schema.js +0 -13
  98. package/dist/frameworks/react/add-ons/convex/assets/convex/todos.js +0 -39
  99. package/dist/frameworks/react/add-ons/db/assets/src/db-collections/index.js +0 -11
  100. package/dist/frameworks/react/add-ons/db/assets/src/hooks/demo.useChat.js +0 -47
  101. package/dist/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat-api.js +0 -68
  102. package/dist/frameworks/react/add-ons/form/assets/src/hooks/demo.form-context.js +0 -2
  103. package/dist/frameworks/react/add-ons/form/assets/src/hooks/demo.form.js +0 -15
  104. package/dist/frameworks/react/add-ons/mcp/assets/src/mcp-todos.js +0 -40
  105. package/dist/frameworks/react/add-ons/mcp/assets/src/routes/demo/api.mcp-todos.js +0 -36
  106. package/dist/frameworks/react/add-ons/mcp/assets/src/utils/mcp-handler.js +0 -41
  107. package/dist/frameworks/react/add-ons/neon/assets/neon-vite-plugin.js +0 -9
  108. package/dist/frameworks/react/add-ons/neon/assets/src/db.js +0 -11
  109. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/client.js +0 -21
  110. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/router/index.js +0 -5
  111. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/router/todos.js +0 -17
  112. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/schema.js +0 -5
  113. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/api.$.js +0 -71
  114. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/api.rpc.$.js +0 -24
  115. package/dist/frameworks/react/add-ons/shadcn/assets/src/lib/utils.js +0 -5
  116. package/dist/frameworks/react/add-ons/start/assets/src/data/demo.punk-songs.js +0 -12
  117. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/api.names.js +0 -9
  118. package/dist/frameworks/react/add-ons/store/assets/src/lib/demo-store.js +0 -10
  119. package/dist/frameworks/react/add-ons/storybook/assets/_dot_storybook/main.js +0 -15
  120. package/dist/frameworks/react/add-ons/storybook/assets/_dot_storybook/preview.js +0 -12
  121. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.stories.js +0 -55
  122. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/index.js +0 -5
  123. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.stories.js +0 -35
  124. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.stories.js +0 -45
  125. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.stories.js +0 -46
  126. package/dist/frameworks/react/add-ons/t3env/assets/src/env.js +0 -34
  127. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/react.js +0 -2
  128. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/router.js +0 -20
  129. package/dist/frameworks/react/add-ons/table/assets/src/data/demo-table-data.js +0 -35
  130. package/dist/frameworks/react/examples/events/assets/content-collections.js +0 -53
  131. package/dist/frameworks/react/examples/events/assets/src/lib/conference-ai-hook.js +0 -16
  132. package/dist/frameworks/react/examples/events/assets/src/lib/conference-tools.js +0 -177
  133. package/dist/frameworks/react/examples/events/assets/src/lib/utils.js +0 -5
  134. package/dist/frameworks/react/examples/events/assets/src/routes/api.remy-chat.js +0 -103
  135. package/dist/frameworks/react/examples/resume/assets/content-collections.js +0 -33
  136. package/dist/frameworks/react/examples/resume/assets/src/lib/resume-ai-hook.js +0 -11
  137. package/dist/frameworks/react/examples/resume/assets/src/lib/resume-tools.js +0 -135
  138. package/dist/frameworks/react/examples/resume/assets/src/lib/utils.js +0 -5
  139. package/dist/frameworks/react/examples/resume/assets/src/routes/api.resume-chat.js +0 -92
  140. package/dist/frameworks/solid/add-ons/better-auth/assets/src/lib/auth-client.js +0 -2
  141. package/dist/frameworks/solid/add-ons/better-auth/assets/src/lib/auth.js +0 -8
  142. package/dist/frameworks/solid/add-ons/better-auth/assets/src/routes/api/auth/$.js +0 -10
  143. package/dist/frameworks/solid/add-ons/convex/assets/convex/schema.js +0 -13
  144. package/dist/frameworks/solid/add-ons/convex/assets/convex/todos.js +0 -39
  145. package/dist/frameworks/solid/add-ons/solid-ui/assets/src/lib/utils.js +0 -5
  146. package/dist/frameworks/solid/add-ons/store/assets/src/lib/demo-store.js +0 -10
  147. package/dist/frameworks/solid/add-ons/t3env/assets/src/env.js +0 -34
  148. package/dist/frameworks/solid/examples/tanchat/assets/ai-streaming-server/src/index.js +0 -73
  149. package/dist/frameworks/solid/examples/tanchat/assets/src/lib/demo-store.js +0 -10
  150. package/dist/frameworks/solid/examples/tanchat/assets/src/store/demo.hooks.js +0 -12
  151. package/dist/frameworks/solid/examples/tanchat/assets/src/store/demo.store.js +0 -92
  152. package/dist/types/frameworks/react/add-ons/ai/assets/src/data/demo-guitars.d.ts +0 -10
  153. package/dist/types/frameworks/react/add-ons/ai/assets/src/hooks/demo-useAudioRecorder.d.ts +0 -9
  154. package/dist/types/frameworks/react/add-ons/ai/assets/src/hooks/demo-useTTS.d.ts +0 -8
  155. package/dist/types/frameworks/react/add-ons/ai/assets/src/lib/demo-ai-hook.d.ts +0 -5
  156. package/dist/types/frameworks/react/add-ons/ai/assets/src/lib/demo-guitar-tools.d.ts +0 -3
  157. package/dist/types/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.chat.d.ts +0 -1
  158. package/dist/types/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.image.d.ts +0 -1
  159. package/dist/types/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.structured.d.ts +0 -83
  160. package/dist/types/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.transcription.d.ts +0 -1
  161. package/dist/types/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.tts.d.ts +0 -1
  162. package/dist/types/frameworks/react/add-ons/better-auth/assets/src/lib/auth-client.d.ts +0 -1
  163. package/dist/types/frameworks/react/add-ons/better-auth/assets/src/lib/auth.d.ts +0 -1
  164. package/dist/types/frameworks/react/add-ons/better-auth/assets/src/routes/api/auth/$.d.ts +0 -1
  165. package/dist/types/frameworks/react/add-ons/convex/assets/convex/schema.d.ts +0 -2
  166. package/dist/types/frameworks/react/add-ons/convex/assets/convex/todos.d.ts +0 -4
  167. package/dist/types/frameworks/react/add-ons/db/assets/src/db-collections/index.d.ts +0 -17
  168. package/dist/types/frameworks/react/add-ons/db/assets/src/hooks/demo.useChat.d.ts +0 -5
  169. package/dist/types/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat-api.d.ts +0 -19
  170. package/dist/types/frameworks/react/add-ons/form/assets/src/hooks/demo.form-context.d.ts +0 -1
  171. package/dist/types/frameworks/react/add-ons/form/assets/src/hooks/demo.form.d.ts +0 -1
  172. package/dist/types/frameworks/react/add-ons/mcp/assets/src/mcp-todos.d.ts +0 -7
  173. package/dist/types/frameworks/react/add-ons/mcp/assets/src/routes/demo/api.mcp-todos.d.ts +0 -1
  174. package/dist/types/frameworks/react/add-ons/mcp/assets/src/routes/mcp.d.ts +0 -1
  175. package/dist/types/frameworks/react/add-ons/mcp/assets/src/utils/mcp-handler.d.ts +0 -2
  176. package/dist/types/frameworks/react/add-ons/neon/assets/neon-vite-plugin.d.ts +0 -2
  177. package/dist/types/frameworks/react/add-ons/neon/assets/src/db.d.ts +0 -1
  178. package/dist/types/frameworks/react/add-ons/oRPC/assets/src/orpc/client.d.ts +0 -4
  179. package/dist/types/frameworks/react/add-ons/oRPC/assets/src/orpc/router/index.d.ts +0 -5
  180. package/dist/types/frameworks/react/add-ons/oRPC/assets/src/orpc/router/todos.d.ts +0 -2
  181. package/dist/types/frameworks/react/add-ons/oRPC/assets/src/orpc/schema.d.ts +0 -11
  182. package/dist/types/frameworks/react/add-ons/oRPC/assets/src/polyfill.d.ts +0 -1
  183. package/dist/types/frameworks/react/add-ons/oRPC/assets/src/routes/api.$.d.ts +0 -2
  184. package/dist/types/frameworks/react/add-ons/oRPC/assets/src/routes/api.rpc.$.d.ts +0 -2
  185. package/dist/types/frameworks/react/add-ons/shadcn/assets/src/lib/utils.d.ts +0 -2
  186. package/dist/types/frameworks/react/add-ons/start/assets/src/data/demo.punk-songs.d.ts +0 -1
  187. package/dist/types/frameworks/react/add-ons/start/assets/src/routes/demo/api.names.d.ts +0 -1
  188. package/dist/types/frameworks/react/add-ons/store/assets/src/lib/demo-store.d.ts +0 -2
  189. package/dist/types/frameworks/react/add-ons/storybook/assets/_dot_storybook/main.d.ts +0 -3
  190. package/dist/types/frameworks/react/add-ons/storybook/assets/_dot_storybook/preview.d.ts +0 -4
  191. package/dist/types/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.stories.d.ts +0 -11
  192. package/dist/types/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.stories.d.ts +0 -7
  193. package/dist/types/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.stories.d.ts +0 -7
  194. package/dist/types/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.stories.d.ts +0 -8
  195. package/dist/types/frameworks/react/add-ons/strapi/assets/src/lib/strapiClient.d.ts +0 -2
  196. package/dist/types/frameworks/react/add-ons/t3env/assets/src/env.d.ts +0 -1
  197. package/dist/types/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/init.d.ts +0 -2
  198. package/dist/types/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/react.d.ts +0 -1
  199. package/dist/types/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/router.d.ts +0 -2
  200. package/dist/types/frameworks/react/add-ons/table/assets/src/data/demo-table-data.d.ts +0 -11
  201. package/dist/types/frameworks/react/examples/events/assets/content-collections.d.ts +0 -2
  202. package/dist/types/frameworks/react/examples/events/assets/src/lib/conference-ai-hook.d.ts +0 -5
  203. package/dist/types/frameworks/react/examples/events/assets/src/lib/conference-tools.d.ts +0 -10
  204. package/dist/types/frameworks/react/examples/events/assets/src/lib/utils.d.ts +0 -2
  205. package/dist/types/frameworks/react/examples/events/assets/src/routes/api.remy-chat.d.ts +0 -1
  206. package/dist/types/frameworks/react/examples/resume/assets/content-collections.d.ts +0 -2
  207. package/dist/types/frameworks/react/examples/resume/assets/src/lib/resume-ai-hook.d.ts +0 -5
  208. package/dist/types/frameworks/react/examples/resume/assets/src/lib/resume-tools.d.ts +0 -8
  209. package/dist/types/frameworks/react/examples/resume/assets/src/lib/utils.d.ts +0 -2
  210. package/dist/types/frameworks/react/examples/resume/assets/src/routes/api.resume-chat.d.ts +0 -1
  211. package/dist/types/frameworks/solid/add-ons/better-auth/assets/src/lib/auth-client.d.ts +0 -1
  212. package/dist/types/frameworks/solid/add-ons/better-auth/assets/src/lib/auth.d.ts +0 -1
  213. package/dist/types/frameworks/solid/add-ons/better-auth/assets/src/routes/api/auth/$.d.ts +0 -1
  214. package/dist/types/frameworks/solid/add-ons/convex/assets/convex/schema.d.ts +0 -2
  215. package/dist/types/frameworks/solid/add-ons/convex/assets/convex/todos.d.ts +0 -4
  216. package/dist/types/frameworks/solid/add-ons/solid-ui/assets/src/lib/utils.d.ts +0 -2
  217. package/dist/types/frameworks/solid/add-ons/store/assets/src/lib/demo-store.d.ts +0 -2
  218. package/dist/types/frameworks/solid/add-ons/strapi/assets/src/lib/strapiClient.d.ts +0 -2
  219. package/dist/types/frameworks/solid/add-ons/t3env/assets/src/env.d.ts +0 -1
  220. package/dist/types/frameworks/solid/examples/tanchat/assets/ai-streaming-server/src/index.d.ts +0 -1
  221. package/dist/types/frameworks/solid/examples/tanchat/assets/src/lib/demo-store.d.ts +0 -2
  222. package/dist/types/frameworks/solid/examples/tanchat/assets/src/store/demo.hooks.d.ts +0 -23
  223. package/dist/types/frameworks/solid/examples/tanchat/assets/src/store/demo.store.d.ts +0 -40
@@ -1,177 +0,0 @@
1
- import { toolDefinition } from '@tanstack/ai';
2
- import { z } from 'zod';
3
- import { allSpeakers, allTalks } from 'content-collections';
4
- // Tool definition for getting a speaker by slug
5
- export const getSpeakerBySlugToolDef = toolDefinition({
6
- name: 'getSpeakerBySlug',
7
- description: 'Get the full profile and bio of a specific speaker. Use this when asked about a particular speaker.',
8
- inputSchema: z.object({
9
- slug: z.string().describe('The slug of the speaker'),
10
- }),
11
- outputSchema: z.object({
12
- name: z.string(),
13
- title: z.string(),
14
- specialty: z.string(),
15
- restaurant: z.string(),
16
- location: z.string(),
17
- bio: z.string(),
18
- awards: z.array(z.string()),
19
- }),
20
- });
21
- // Server implementation
22
- export const getSpeakerBySlug = getSpeakerBySlugToolDef.server(({ slug }) => {
23
- const speaker = allSpeakers.find((s) => s.slug === slug);
24
- if (!speaker) {
25
- return {
26
- name: 'Speaker not found',
27
- title: '',
28
- specialty: '',
29
- restaurant: '',
30
- location: '',
31
- bio: 'The requested speaker was not found.',
32
- awards: [],
33
- };
34
- }
35
- return {
36
- name: speaker.name,
37
- title: speaker.title,
38
- specialty: speaker.specialty,
39
- restaurant: speaker.restaurant,
40
- location: speaker.location,
41
- bio: speaker.content,
42
- awards: speaker.awards || [],
43
- };
44
- });
45
- // Tool definition for getting a talk by slug
46
- export const getTalkBySlugToolDef = toolDefinition({
47
- name: 'getTalkBySlug',
48
- description: 'Get the full details of a specific session/talk. Use this when asked about a particular session.',
49
- inputSchema: z.object({
50
- slug: z.string().describe('The slug of the talk'),
51
- }),
52
- outputSchema: z.object({
53
- title: z.string(),
54
- speaker: z.string(),
55
- duration: z.string(),
56
- topics: z.array(z.string()),
57
- description: z.string(),
58
- }),
59
- });
60
- // Server implementation
61
- export const getTalkBySlug = getTalkBySlugToolDef.server(({ slug }) => {
62
- const talk = allTalks.find((t) => t.slug === slug);
63
- if (!talk) {
64
- return {
65
- title: 'Session not found',
66
- speaker: '',
67
- duration: '',
68
- topics: [],
69
- description: 'The requested session was not found.',
70
- };
71
- }
72
- return {
73
- title: talk.title,
74
- speaker: talk.speaker,
75
- duration: talk.duration,
76
- topics: talk.topics,
77
- description: talk.content,
78
- };
79
- });
80
- // Tool definition for listing all speakers
81
- export const getAllSpeakersToolDef = toolDefinition({
82
- name: 'getAllSpeakers',
83
- description: 'Get a list of all speakers at the conference with their names, specialties, and restaurants.',
84
- inputSchema: z.object({}),
85
- outputSchema: z.array(z.object({
86
- slug: z.string(),
87
- name: z.string(),
88
- specialty: z.string(),
89
- restaurant: z.string(),
90
- location: z.string(),
91
- })),
92
- });
93
- // Server implementation
94
- export const getAllSpeakers = getAllSpeakersToolDef.server(() => {
95
- return allSpeakers.map((speaker) => ({
96
- slug: speaker.slug,
97
- name: speaker.name,
98
- specialty: speaker.specialty,
99
- restaurant: speaker.restaurant,
100
- location: speaker.location,
101
- }));
102
- });
103
- // Tool definition for listing all talks
104
- export const getAllTalksToolDef = toolDefinition({
105
- name: 'getAllTalks',
106
- description: 'Get a list of all sessions/talks at the conference with their titles, speakers, and topics.',
107
- inputSchema: z.object({}),
108
- outputSchema: z.array(z.object({
109
- slug: z.string(),
110
- title: z.string(),
111
- speaker: z.string(),
112
- duration: z.string(),
113
- topics: z.array(z.string()),
114
- })),
115
- });
116
- // Server implementation
117
- export const getAllTalks = getAllTalksToolDef.server(() => {
118
- return allTalks.map((talk) => ({
119
- slug: talk.slug,
120
- title: talk.title,
121
- speaker: talk.speaker,
122
- duration: talk.duration,
123
- topics: talk.topics,
124
- }));
125
- });
126
- // Tool definition for searching conference content
127
- export const searchConferenceToolDef = toolDefinition({
128
- name: 'searchConference',
129
- description: 'Search for speakers or sessions by keyword. Use this to find content matching user queries about topics, techniques, or names.',
130
- inputSchema: z.object({
131
- query: z.string().describe('The search query'),
132
- }),
133
- outputSchema: z.object({
134
- speakers: z.array(z.object({
135
- slug: z.string(),
136
- name: z.string(),
137
- specialty: z.string(),
138
- restaurant: z.string(),
139
- })),
140
- talks: z.array(z.object({
141
- slug: z.string(),
142
- title: z.string(),
143
- speaker: z.string(),
144
- topics: z.array(z.string()),
145
- })),
146
- }),
147
- });
148
- // Server implementation
149
- export const searchConference = searchConferenceToolDef.server(({ query }) => {
150
- const queryLower = query.toLowerCase();
151
- const matchingSpeakers = allSpeakers
152
- .filter((speaker) => speaker.name.toLowerCase().includes(queryLower) ||
153
- speaker.specialty.toLowerCase().includes(queryLower) ||
154
- speaker.restaurant.toLowerCase().includes(queryLower) ||
155
- speaker.content.toLowerCase().includes(queryLower))
156
- .map((speaker) => ({
157
- slug: speaker.slug,
158
- name: speaker.name,
159
- specialty: speaker.specialty,
160
- restaurant: speaker.restaurant,
161
- }));
162
- const matchingTalks = allTalks
163
- .filter((talk) => talk.title.toLowerCase().includes(queryLower) ||
164
- talk.speaker.toLowerCase().includes(queryLower) ||
165
- talk.topics.some((topic) => topic.toLowerCase().includes(queryLower)) ||
166
- talk.content.toLowerCase().includes(queryLower))
167
- .map((talk) => ({
168
- slug: talk.slug,
169
- title: talk.title,
170
- speaker: talk.speaker,
171
- topics: talk.topics,
172
- }));
173
- return {
174
- speakers: matchingSpeakers,
175
- talks: matchingTalks,
176
- };
177
- });
@@ -1,5 +0,0 @@
1
- import { clsx } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
- export function cn(...inputs) {
4
- return twMerge(clsx(inputs));
5
- }
@@ -1,103 +0,0 @@
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
- import { getSpeakerBySlug, getTalkBySlug, getAllSpeakers, getAllTalks, searchConference, } from '@/lib/conference-tools';
8
- export const Route = createFileRoute('/api/remy-chat')({
9
- server: {
10
- handlers: {
11
- POST: async ({ request }) => {
12
- const requestSignal = request.signal;
13
- if (requestSignal.aborted) {
14
- return new Response(null, { status: 499 });
15
- }
16
- const abortController = new AbortController();
17
- try {
18
- const body = await request.json();
19
- const { messages, speakerSlug, talkSlug } = body;
20
- const data = body.data || {};
21
- 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.
22
-
23
- PERSONALITY:
24
- - Speak with warmth and a touch of French flair (occasional "magnifique!", "c'est parfait!", etc.)
25
- - Be genuinely passionate about pastry, bread, and culinary arts
26
- - Knowledgeable about techniques, ingredients, and the history of baking
27
- - Helpful and encouraging to both novices and professionals
28
-
29
- CAPABILITIES:
30
- 1. Use getSpeakerBySlug to get detailed information about a specific speaker
31
- 2. Use getTalkBySlug to get detailed information about a specific session
32
- 3. Use getAllSpeakers to see the complete speaker lineup
33
- 4. Use getAllTalks to see all available sessions
34
- 5. Use searchConference to find speakers or sessions matching a topic or keyword
35
-
36
- INSTRUCTIONS:
37
- - When asked about the conference, speakers, or sessions, use your tools to provide accurate information
38
- - Help attendees find sessions that match their interests
39
- - Share enthusiasm about the speakers and their expertise
40
- - If asked about pastry techniques, you can provide general knowledge while recommending relevant sessions
41
- - Keep responses conversational but informative
42
- - When recommending sessions, explain why they might be interesting based on the user's query
43
-
44
- ${speakerSlug ? `CONTEXT: The user is viewing the profile of the speaker with slug "${speakerSlug}".` : ''}
45
- ${talkSlug ? `CONTEXT: The user is viewing the session with slug "${talkSlug}".` : ''}
46
-
47
- Remember: You are the friendly face of Haute Pâtisserie 2026. Make every attendee feel welcome and excited about the culinary journey ahead!`;
48
- // Determine the best available provider
49
- let provider = 'ollama';
50
- let model = 'mistral:7b';
51
- if (process.env.ANTHROPIC_API_KEY) {
52
- provider = 'anthropic';
53
- model = 'claude-haiku-4-5';
54
- }
55
- else if (process.env.OPENAI_API_KEY) {
56
- provider = 'openai';
57
- model = 'gpt-4o';
58
- }
59
- else if (process.env.GEMINI_API_KEY) {
60
- provider = 'gemini';
61
- model = 'gemini-2.0-flash-exp';
62
- }
63
- // Adapter factory pattern for multi-vendor support
64
- const adapterConfig = {
65
- anthropic: () => anthropicText((model || 'claude-haiku-4-5')),
66
- openai: () => openaiText((model || 'gpt-4o')),
67
- gemini: () => geminiText((model || 'gemini-2.0-flash-exp')),
68
- ollama: () => ollamaText((model || 'mistral:7b')),
69
- };
70
- const adapter = adapterConfig[provider]();
71
- const stream = chat({
72
- adapter,
73
- tools: [
74
- getSpeakerBySlug,
75
- getTalkBySlug,
76
- getAllSpeakers,
77
- getAllTalks,
78
- searchConference,
79
- ],
80
- systemPrompts: [SYSTEM_PROMPT],
81
- agentLoopStrategy: maxIterations(5),
82
- messages,
83
- abortController,
84
- });
85
- return toServerSentEventsResponse(stream, { abortController });
86
- }
87
- catch (error) {
88
- console.error('Remy chat error:', error);
89
- if (error.name === 'AbortError' || abortController.signal.aborted) {
90
- return new Response(null, { status: 499 });
91
- }
92
- return new Response(JSON.stringify({
93
- error: 'Failed to process chat request',
94
- message: error.message,
95
- }), {
96
- status: 500,
97
- headers: { 'Content-Type': 'application/json' },
98
- });
99
- }
100
- },
101
- },
102
- },
103
- });
@@ -1,33 +0,0 @@
1
- import { defineCollection, defineConfig } from '@content-collections/core';
2
- import { z } from 'zod';
3
- const jobs = defineCollection({
4
- name: 'jobs',
5
- directory: 'content/jobs',
6
- include: '**/*.md',
7
- schema: z.object({
8
- jobTitle: z.string(),
9
- summary: z.string(),
10
- startDate: z.string(),
11
- endDate: z.string().optional(),
12
- company: z.string(),
13
- location: z.string(),
14
- tags: z.array(z.string()),
15
- content: z.string(),
16
- }),
17
- });
18
- const education = defineCollection({
19
- name: 'education',
20
- directory: 'content/education',
21
- include: '**/*.md',
22
- schema: z.object({
23
- school: z.string(),
24
- summary: z.string(),
25
- startDate: z.string(),
26
- endDate: z.string().optional(),
27
- tags: z.array(z.string()),
28
- content: z.string(),
29
- }),
30
- });
31
- export default defineConfig({
32
- collections: [jobs, education],
33
- });
@@ -1,11 +0,0 @@
1
- import { fetchServerSentEvents, useChat, createChatClientOptions, } from '@tanstack/ai-react';
2
- // Default chat options for type inference
3
- const defaultChatOptions = createChatClientOptions({
4
- connection: fetchServerSentEvents('/api/resume-chat'),
5
- });
6
- export const useResumeChat = () => {
7
- const chatOptions = createChatClientOptions({
8
- connection: fetchServerSentEvents('/api/resume-chat'),
9
- });
10
- return useChat(chatOptions);
11
- };
@@ -1,135 +0,0 @@
1
- import { toolDefinition } from '@tanstack/ai';
2
- import { z } from 'zod';
3
- import { allJobs, allEducations } from 'content-collections';
4
- // Tool definition for getting jobs by skill
5
- export const getJobsBySkillToolDef = toolDefinition({
6
- name: 'getJobsBySkill',
7
- description: 'Find all jobs where the candidate used a specific technology or skill. Use this to check if the candidate has experience with particular technologies.',
8
- inputSchema: z.object({
9
- skill: z
10
- .string()
11
- .describe('The skill or technology to search for (e.g., "React", "TypeScript", "Leadership")'),
12
- }),
13
- outputSchema: z.array(z.object({
14
- jobTitle: z.string(),
15
- company: z.string(),
16
- location: z.string(),
17
- startDate: z.string(),
18
- endDate: z.string().optional(),
19
- summary: z.string(),
20
- tags: z.array(z.string()),
21
- content: z.string(),
22
- })),
23
- });
24
- // Server implementation
25
- export const getJobsBySkill = getJobsBySkillToolDef.server(({ skill }) => {
26
- return allJobs.filter((job) => job.tags.some((tag) => tag.toLowerCase().includes(skill.toLowerCase())));
27
- });
28
- // Tool definition for getting all jobs
29
- export const getAllJobsToolDef = toolDefinition({
30
- name: 'getAllJobs',
31
- description: '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.',
32
- inputSchema: z.object({}),
33
- outputSchema: z.array(z.object({
34
- jobTitle: z.string(),
35
- company: z.string(),
36
- location: z.string(),
37
- startDate: z.string(),
38
- endDate: z.string().optional(),
39
- summary: z.string(),
40
- tags: z.array(z.string()),
41
- content: z.string(),
42
- })),
43
- });
44
- // Server implementation
45
- export const getAllJobs = getAllJobsToolDef.server(() => {
46
- return allJobs.map((job) => ({
47
- jobTitle: job.jobTitle,
48
- company: job.company,
49
- location: job.location,
50
- startDate: job.startDate,
51
- endDate: job.endDate,
52
- summary: job.summary,
53
- tags: job.tags,
54
- content: job.content,
55
- }));
56
- });
57
- // Tool definition for getting all education
58
- export const getAllEducationToolDef = toolDefinition({
59
- name: 'getAllEducation',
60
- description: 'Get a complete list of all education history including schools, programs, dates, and skills learned. Use this to understand the candidate\'s educational background.',
61
- inputSchema: z.object({}),
62
- outputSchema: z.array(z.object({
63
- school: z.string(),
64
- summary: z.string(),
65
- startDate: z.string(),
66
- endDate: z.string().optional(),
67
- tags: z.array(z.string()),
68
- content: z.string(),
69
- })),
70
- });
71
- // Server implementation
72
- export const getAllEducation = getAllEducationToolDef.server(() => {
73
- return allEducations.map((education) => ({
74
- school: education.school,
75
- summary: education.summary,
76
- startDate: education.startDate,
77
- endDate: education.endDate,
78
- tags: education.tags,
79
- content: education.content,
80
- }));
81
- });
82
- // Tool definition for searching experience
83
- export const searchExperienceToolDef = toolDefinition({
84
- name: 'searchExperience',
85
- description: 'Search for jobs by keywords in the job title, company name, summary, or content. Use this to find specific types of experience or roles.',
86
- inputSchema: z.object({
87
- query: z
88
- .string()
89
- .describe('The search query (e.g., "senior", "lead", "frontend", "startup")'),
90
- }),
91
- outputSchema: z.array(z.object({
92
- jobTitle: z.string(),
93
- company: z.string(),
94
- location: z.string(),
95
- startDate: z.string(),
96
- endDate: z.string().optional(),
97
- summary: z.string(),
98
- tags: z.array(z.string()),
99
- matchedIn: z
100
- .array(z.string())
101
- .describe('Which fields matched the search'),
102
- })),
103
- });
104
- // Server implementation
105
- export const searchExperience = searchExperienceToolDef.server(({ query }) => {
106
- const lowerQuery = query.toLowerCase();
107
- return allJobs
108
- .map((job) => {
109
- const matchedIn = [];
110
- if (job.jobTitle.toLowerCase().includes(lowerQuery)) {
111
- matchedIn.push('job title');
112
- }
113
- if (job.company.toLowerCase().includes(lowerQuery)) {
114
- matchedIn.push('company');
115
- }
116
- if (job.summary.toLowerCase().includes(lowerQuery)) {
117
- matchedIn.push('summary');
118
- }
119
- if (job.content.toLowerCase().includes(lowerQuery)) {
120
- matchedIn.push('description');
121
- }
122
- return { job, matchedIn };
123
- })
124
- .filter(({ matchedIn }) => matchedIn.length > 0)
125
- .map(({ job, matchedIn }) => ({
126
- jobTitle: job.jobTitle,
127
- company: job.company,
128
- location: job.location,
129
- startDate: job.startDate,
130
- endDate: job.endDate,
131
- summary: job.summary,
132
- tags: job.tags,
133
- matchedIn,
134
- }));
135
- });
@@ -1,5 +0,0 @@
1
- import { clsx } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
- export function cn(...inputs) {
4
- return twMerge(clsx(inputs));
5
- }
@@ -1,92 +0,0 @@
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
- import { getJobsBySkill, getAllJobs, getAllEducation, searchExperience, } from '@/lib/resume-tools';
8
- export const Route = createFileRoute('/api/resume-chat')({
9
- server: {
10
- handlers: {
11
- POST: async ({ request }) => {
12
- const requestSignal = request.signal;
13
- if (requestSignal.aborted) {
14
- return new Response(null, { status: 499 });
15
- }
16
- const abortController = new AbortController();
17
- try {
18
- const body = await request.json();
19
- const { messages } = body;
20
- const data = body.data || {};
21
- 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.
22
-
23
- CAPABILITIES:
24
- 1. Use getJobsBySkill to find jobs where the candidate used specific technologies or skills
25
- 2. Use getAllJobs to get the candidate's complete work history with all details
26
- 3. Use getAllEducation to get the candidate's educational background
27
- 4. Use searchExperience to search for specific types of roles or experience by keywords
28
-
29
- INSTRUCTIONS:
30
- - When asked about specific technologies or skills, use getJobsBySkill to find relevant experience
31
- - When asked about overall experience or career progression, use getAllJobs
32
- - When asked about education or training, use getAllEducation
33
- - When asked about specific types of roles (e.g., "senior", "lead"), use searchExperience
34
- - Be professional, concise, and helpful in your responses
35
- - Provide specific details from the resume when available
36
- - When calculating years of experience, consider the date ranges provided
37
- - If the candidate has experience with something, highlight specific roles and time periods
38
- - If the candidate lacks certain experience, be honest but constructive
39
-
40
- CONTEXT: You are helping evaluate this candidate's qualifications for potential job opportunities.`;
41
- // Determine the best available provider
42
- let provider = data.provider || 'ollama';
43
- let model = data.model || 'mistral:7b';
44
- // Use the first available provider with an API key, fallback to ollama
45
- if (process.env.ANTHROPIC_API_KEY) {
46
- provider = 'anthropic';
47
- model = 'claude-haiku-4-5';
48
- }
49
- else if (process.env.OPENAI_API_KEY) {
50
- provider = 'openai';
51
- model = 'gpt-4o';
52
- }
53
- else if (process.env.GEMINI_API_KEY) {
54
- provider = 'gemini';
55
- model = 'gemini-2.0-flash-exp';
56
- }
57
- // else keep ollama as default
58
- // Adapter factory pattern for multi-vendor support
59
- const adapterConfig = {
60
- anthropic: () => anthropicText((model || 'claude-haiku-4-5')),
61
- openai: () => openaiText((model || 'gpt-4o')),
62
- gemini: () => geminiText((model || 'gemini-2.0-flash-exp')),
63
- ollama: () => ollamaText((model || 'mistral:7b')),
64
- };
65
- const adapter = adapterConfig[provider]();
66
- const stream = chat({
67
- adapter,
68
- tools: [getJobsBySkill, getAllJobs, getAllEducation, searchExperience],
69
- systemPrompts: [SYSTEM_PROMPT],
70
- agentLoopStrategy: maxIterations(5),
71
- messages,
72
- abortController,
73
- });
74
- return toServerSentEventsResponse(stream, { abortController });
75
- }
76
- catch (error) {
77
- console.error('Resume chat error:', error);
78
- if (error.name === 'AbortError' || abortController.signal.aborted) {
79
- return new Response(null, { status: 499 });
80
- }
81
- return new Response(JSON.stringify({
82
- error: 'Failed to process chat request',
83
- message: error.message,
84
- }), {
85
- status: 500,
86
- headers: { 'Content-Type': 'application/json' },
87
- });
88
- }
89
- },
90
- },
91
- },
92
- });
@@ -1,2 +0,0 @@
1
- import { createAuthClient } from 'better-auth/solid';
2
- export const authClient = createAuthClient();
@@ -1,8 +0,0 @@
1
- import { betterAuth } from 'better-auth';
2
- import { tanstackStartCookies } from 'better-auth/tanstack-start';
3
- export const auth = betterAuth({
4
- emailAndPassword: {
5
- enabled: true,
6
- },
7
- plugins: [tanstackStartCookies()],
8
- });
@@ -1,10 +0,0 @@
1
- import { createFileRoute } from '@tanstack/solid-router';
2
- import { auth } from '../../../lib/auth';
3
- export const Route = createFileRoute('/api/auth/$')({
4
- server: {
5
- handlers: {
6
- GET: ({ request }) => auth.handler(request),
7
- POST: ({ request }) => auth.handler(request),
8
- },
9
- },
10
- });
@@ -1,13 +0,0 @@
1
- import { defineSchema, defineTable } from 'convex/server';
2
- import { v } from 'convex/values';
3
- export default defineSchema({
4
- products: defineTable({
5
- title: v.string(),
6
- imageId: v.string(),
7
- price: v.number(),
8
- }),
9
- todos: defineTable({
10
- text: v.string(),
11
- completed: v.boolean(),
12
- }),
13
- });
@@ -1,39 +0,0 @@
1
- import { mutation, query } from './_generated/server';
2
- import { v } from 'convex/values';
3
- export const list = query({
4
- args: {},
5
- handler: async (ctx) => {
6
- return await ctx.db
7
- .query('todos')
8
- .withIndex('by_creation_time')
9
- .order('desc')
10
- .collect();
11
- },
12
- });
13
- export const add = mutation({
14
- args: { text: v.string() },
15
- handler: async (ctx, args) => {
16
- return await ctx.db.insert('todos', {
17
- text: args.text,
18
- completed: false,
19
- });
20
- },
21
- });
22
- export const toggle = mutation({
23
- args: { id: v.id('todos') },
24
- handler: async (ctx, args) => {
25
- const todo = await ctx.db.get(args.id);
26
- if (!todo) {
27
- throw new Error('Todo not found');
28
- }
29
- return await ctx.db.patch(args.id, {
30
- completed: !todo.completed,
31
- });
32
- },
33
- });
34
- export const remove = mutation({
35
- args: { id: v.id('todos') },
36
- handler: async (ctx, args) => {
37
- return await ctx.db.delete(args.id);
38
- },
39
- });
@@ -1,5 +0,0 @@
1
- import { clsx } from "clsx";
2
- import { twMerge } from "tailwind-merge";
3
- export function cn(...inputs) {
4
- return twMerge(clsx(inputs));
5
- }
@@ -1,10 +0,0 @@
1
- import { Derived, Store } from '@tanstack/store';
2
- export const store = new Store({
3
- firstName: 'Jane',
4
- lastName: 'Smith',
5
- });
6
- export const fullName = new Derived({
7
- fn: () => `${store.state.firstName} ${store.state.lastName}`,
8
- deps: [store],
9
- });
10
- fullName.mount();