@tanstack/cta-engine 0.10.0-alpha.6

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 (272) hide show
  1. package/LICENSE +21 -0
  2. package/dist/add-ons.js +109 -0
  3. package/dist/add.js +127 -0
  4. package/dist/cli.js +112 -0
  5. package/dist/config-file.js +23 -0
  6. package/dist/constants.js +5 -0
  7. package/dist/create-app.js +491 -0
  8. package/dist/custom-add-on.js +254 -0
  9. package/dist/environment.js +119 -0
  10. package/dist/index.js +1 -0
  11. package/dist/mcp.js +211 -0
  12. package/dist/options.js +309 -0
  13. package/dist/package-manager.js +30 -0
  14. package/dist/templates.js +6 -0
  15. package/dist/toolchain.js +6 -0
  16. package/dist/types/add-ons.d.ts +5 -0
  17. package/dist/types/add.d.ts +3 -0
  18. package/dist/types/cli.d.ts +1 -0
  19. package/dist/types/config-file.d.ts +7 -0
  20. package/dist/types/constants.d.ts +6 -0
  21. package/dist/types/create-app.d.ts +6 -0
  22. package/dist/types/custom-add-on.d.ts +3 -0
  23. package/dist/types/environment.d.ts +12 -0
  24. package/dist/types/index.d.ts +1 -0
  25. package/dist/types/mcp.d.ts +1 -0
  26. package/dist/types/options.d.ts +3 -0
  27. package/dist/types/package-manager.d.ts +6 -0
  28. package/dist/types/templates.d.ts +1 -0
  29. package/dist/types/toolchain.d.ts +3 -0
  30. package/dist/types/types.d.ts +107 -0
  31. package/dist/types/utils.d.ts +1 -0
  32. package/dist/types.js +1 -0
  33. package/dist/utils.js +8 -0
  34. package/package.json +49 -0
  35. package/src/add-ons.ts +145 -0
  36. package/src/add.ts +184 -0
  37. package/src/cli.ts +163 -0
  38. package/src/config-file.ts +45 -0
  39. package/src/constants.ts +9 -0
  40. package/src/create-app.ts +791 -0
  41. package/src/custom-add-on.ts +323 -0
  42. package/src/environment.ts +144 -0
  43. package/src/index.ts +1 -0
  44. package/src/mcp.ts +252 -0
  45. package/src/options.ts +359 -0
  46. package/src/package-manager.ts +46 -0
  47. package/src/templates.ts +7 -0
  48. package/src/toolchain.ts +7 -0
  49. package/src/types.ts +119 -0
  50. package/src/utils.ts +10 -0
  51. package/templates/react/add-on/clerk/README.md +3 -0
  52. package/templates/react/add-on/clerk/assets/_dot_env.local.append +2 -0
  53. package/templates/react/add-on/clerk/assets/src/integrations/clerk/header-user.tsx +19 -0
  54. package/templates/react/add-on/clerk/assets/src/integrations/clerk/provider.tsx +18 -0
  55. package/templates/react/add-on/clerk/assets/src/routes/demo.clerk.tsx +20 -0
  56. package/templates/react/add-on/clerk/info.json +13 -0
  57. package/templates/react/add-on/clerk/package.json +5 -0
  58. package/templates/react/add-on/convex/README.md +4 -0
  59. package/templates/react/add-on/convex/assets/_dot_cursorrules.append +93 -0
  60. package/templates/react/add-on/convex/assets/_dot_env.local.append +3 -0
  61. package/templates/react/add-on/convex/assets/convex/products.ts +8 -0
  62. package/templates/react/add-on/convex/assets/convex/schema.ts +10 -0
  63. package/templates/react/add-on/convex/assets/src/integrations/convex/provider.tsx +20 -0
  64. package/templates/react/add-on/convex/assets/src/routes/demo.convex.tsx +33 -0
  65. package/templates/react/add-on/convex/info.json +13 -0
  66. package/templates/react/add-on/convex/package.json +6 -0
  67. package/templates/react/add-on/form/assets/src/components/demo.FormComponents.tsx.ejs +300 -0
  68. package/templates/react/add-on/form/assets/src/hooks/demo.form-context.ts +4 -0
  69. package/templates/react/add-on/form/assets/src/hooks/demo.form.ts +22 -0
  70. package/templates/react/add-on/form/assets/src/routes/demo.form.address.tsx.ejs +213 -0
  71. package/templates/react/add-on/form/assets/src/routes/demo.form.simple.tsx.ejs +77 -0
  72. package/templates/react/add-on/form/info.json +26 -0
  73. package/templates/react/add-on/form/package.json +6 -0
  74. package/templates/react/add-on/module-federation/assets/module-federation.config.js.ejs +31 -0
  75. package/templates/react/add-on/module-federation/assets/src/demo-mf-component.tsx +3 -0
  76. package/templates/react/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +11 -0
  77. package/templates/react/add-on/module-federation/info.json +7 -0
  78. package/templates/react/add-on/module-federation/package.json +5 -0
  79. package/templates/react/add-on/netlify/README.md +11 -0
  80. package/templates/react/add-on/netlify/info.json +7 -0
  81. package/templates/react/add-on/sentry/assets/_dot_cursorrules.append +22 -0
  82. package/templates/react/add-on/sentry/assets/_dot_env.local.append +2 -0
  83. package/templates/react/add-on/sentry/assets/src/app/global-middleware.ts +25 -0
  84. package/templates/react/add-on/sentry/assets/src/routes/demo.sentry.testing.tsx +480 -0
  85. package/templates/react/add-on/sentry/info.json +14 -0
  86. package/templates/react/add-on/sentry/package.json +7 -0
  87. package/templates/react/add-on/shadcn/README.md +7 -0
  88. package/templates/react/add-on/shadcn/assets/_dot_cursorrules.append +7 -0
  89. package/templates/react/add-on/shadcn/assets/components.json +21 -0
  90. package/templates/react/add-on/shadcn/assets/src/lib/utils.ts +6 -0
  91. package/templates/react/add-on/shadcn/assets/src/styles.css +138 -0
  92. package/templates/react/add-on/shadcn/info.json +7 -0
  93. package/templates/react/add-on/shadcn/package.json +9 -0
  94. package/templates/react/add-on/start/assets/_dot_gitignore.append +2 -0
  95. package/templates/react/add-on/start/assets/app.config.ts.ejs +19 -0
  96. package/templates/react/add-on/start/assets/src/api.ts +6 -0
  97. package/templates/react/add-on/start/assets/src/client.tsx +8 -0
  98. package/templates/react/add-on/start/assets/src/router.tsx.ejs +77 -0
  99. package/templates/react/add-on/start/assets/src/routes/api.demo-names.ts +11 -0
  100. package/templates/react/add-on/start/assets/src/routes/demo.start.api-request.tsx.ejs +33 -0
  101. package/templates/react/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +50 -0
  102. package/templates/react/add-on/start/assets/src/ssr.tsx +12 -0
  103. package/templates/react/add-on/start/info.json +18 -0
  104. package/templates/react/add-on/start/package.json +13 -0
  105. package/templates/react/add-on/store/assets/src/lib/demo-store.ts +13 -0
  106. package/templates/react/add-on/store/assets/src/routes/demo.store.tsx.ejs +75 -0
  107. package/templates/react/add-on/store/info.json +13 -0
  108. package/templates/react/add-on/store/package.json +6 -0
  109. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/init.ts +9 -0
  110. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/react.ts +4 -0
  111. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/router.ts +18 -0
  112. package/templates/react/add-on/tRPC/assets/src/routes/api.trpc.$.tsx +16 -0
  113. package/templates/react/add-on/tRPC/info.json +9 -0
  114. package/templates/react/add-on/tRPC/package.json +9 -0
  115. package/templates/react/add-on/table/assets/src/data/demo-table-data.ts +50 -0
  116. package/templates/react/add-on/table/assets/src/routes/demo.table.tsx.ejs +373 -0
  117. package/templates/react/add-on/table/info.json +13 -0
  118. package/templates/react/add-on/table/package.json +7 -0
  119. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/layout.tsx +5 -0
  120. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +70 -0
  121. package/templates/react/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx.ejs +53 -0
  122. package/templates/react/add-on/tanstack-query/info.json +13 -0
  123. package/templates/react/add-on/tanstack-query/package.json +6 -0
  124. package/templates/react/base/README.md.ejs +558 -0
  125. package/templates/react/base/_dot_gitignore +5 -0
  126. package/templates/react/base/_dot_vscode/settings.biome.json +38 -0
  127. package/templates/react/base/_dot_vscode/settings.json +11 -0
  128. package/templates/react/base/index.html.ejs +20 -0
  129. package/templates/react/base/package.biome.json +10 -0
  130. package/templates/react/base/package.eslintprettier.json +11 -0
  131. package/templates/react/base/package.json +29 -0
  132. package/templates/react/base/package.ts.json +7 -0
  133. package/templates/react/base/package.tw.json +6 -0
  134. package/templates/react/base/public/favicon.ico +0 -0
  135. package/templates/react/base/public/logo192.png +0 -0
  136. package/templates/react/base/public/logo512.png +0 -0
  137. package/templates/react/base/public/manifest.json +25 -0
  138. package/templates/react/base/public/robots.txt +3 -0
  139. package/templates/react/base/src/App.css +38 -0
  140. package/templates/react/base/src/App.test.tsx.ejs +10 -0
  141. package/templates/react/base/src/App.tsx.ejs +74 -0
  142. package/templates/react/base/src/components/Header.tsx.ejs +27 -0
  143. package/templates/react/base/src/logo.svg +44 -0
  144. package/templates/react/base/src/reportWebVitals.ts.ejs +28 -0
  145. package/templates/react/base/src/styles.css.ejs +15 -0
  146. package/templates/react/base/toolchain/.prettierignore +3 -0
  147. package/templates/react/base/toolchain/biome.json +31 -0
  148. package/templates/react/base/toolchain/eslint.config.js +5 -0
  149. package/templates/react/base/toolchain/prettier.config.js +10 -0
  150. package/templates/react/base/tsconfig.json.ejs +29 -0
  151. package/templates/react/base/vite.config.js.ejs +23 -0
  152. package/templates/react/code-router/src/main.tsx.ejs +92 -0
  153. package/templates/react/example/tanchat/README.md +37 -0
  154. package/templates/react/example/tanchat/assets/_dot_env.local.append +2 -0
  155. package/templates/react/example/tanchat/assets/public/example-guitar-flowers.jpg +0 -0
  156. package/templates/react/example/tanchat/assets/public/example-guitar-motherboard.jpg +0 -0
  157. package/templates/react/example/tanchat/assets/public/example-guitar-racing.jpg +0 -0
  158. package/templates/react/example/tanchat/assets/public/example-guitar-steamer-trunk.jpg +0 -0
  159. package/templates/react/example/tanchat/assets/public/example-guitar-superhero.jpg +0 -0
  160. package/templates/react/example/tanchat/assets/public/example-guitar-traveling.jpg +0 -0
  161. package/templates/react/example/tanchat/assets/public/example-guitar-video-games.jpg +0 -0
  162. package/templates/react/example/tanchat/assets/src/components/example-AIAssistant.tsx +173 -0
  163. package/templates/react/example/tanchat/assets/src/components/example-GuitarRecommendation.tsx +47 -0
  164. package/templates/react/example/tanchat/assets/src/data/example-guitars.ts +83 -0
  165. package/templates/react/example/tanchat/assets/src/demo.index.css +220 -0
  166. package/templates/react/example/tanchat/assets/src/integrations/tanchat/header-user.tsx +5 -0
  167. package/templates/react/example/tanchat/assets/src/routes/example.chat.tsx +159 -0
  168. package/templates/react/example/tanchat/assets/src/routes/example.guitars/$guitarId.tsx +50 -0
  169. package/templates/react/example/tanchat/assets/src/routes/example.guitars/index.tsx +54 -0
  170. package/templates/react/example/tanchat/assets/src/store/example-assistant.ts +3 -0
  171. package/templates/react/example/tanchat/assets/src/utils/demo.ai.ts +62 -0
  172. package/templates/react/example/tanchat/assets/src/utils/demo.tools.ts +47 -0
  173. package/templates/react/example/tanchat/info.json +19 -0
  174. package/templates/react/example/tanchat/package.json +15 -0
  175. package/templates/react/file-router/package.fr.json +5 -0
  176. package/templates/react/file-router/src/main.tsx.ejs +55 -0
  177. package/templates/react/file-router/src/routes/__root.tsx.ejs +82 -0
  178. package/templates/solid/add-on/form/assets/src/routes/demo.form.tsx.ejs +352 -0
  179. package/templates/solid/add-on/form/info.json +13 -0
  180. package/templates/solid/add-on/form/package.json +5 -0
  181. package/templates/solid/add-on/module-federation/assets/module-federation.config.js.ejs +27 -0
  182. package/templates/solid/add-on/module-federation/assets/src/demo-mf-component.tsx +3 -0
  183. package/templates/solid/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +9 -0
  184. package/templates/solid/add-on/module-federation/info.json +7 -0
  185. package/templates/solid/add-on/module-federation/package.json +5 -0
  186. package/templates/solid/add-on/sentry/assets/_dot_cursorrules.append +22 -0
  187. package/templates/solid/add-on/sentry/assets/_dot_env.local.append +2 -0
  188. package/templates/solid/add-on/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +20 -0
  189. package/templates/solid/add-on/sentry/info.json +13 -0
  190. package/templates/solid/add-on/sentry/package.json +5 -0
  191. package/templates/solid/add-on/solid-ui/README.md +9 -0
  192. package/templates/solid/add-on/solid-ui/assets/src/lib/utils.ts +6 -0
  193. package/templates/solid/add-on/solid-ui/assets/src/styles.css +138 -0
  194. package/templates/solid/add-on/solid-ui/assets/ui.config.json +13 -0
  195. package/templates/solid/add-on/solid-ui/info.json +11 -0
  196. package/templates/solid/add-on/solid-ui/package.json +9 -0
  197. package/templates/solid/add-on/start/assets/app.config.ts +16 -0
  198. package/templates/solid/add-on/start/assets/src/api.ts +6 -0
  199. package/templates/solid/add-on/start/assets/src/client.tsx +7 -0
  200. package/templates/solid/add-on/start/assets/src/router.tsx.ejs +24 -0
  201. package/templates/solid/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +49 -0
  202. package/templates/solid/add-on/start/assets/src/ssr.tsx +12 -0
  203. package/templates/solid/add-on/start/info.json +14 -0
  204. package/templates/solid/add-on/start/package.json +12 -0
  205. package/templates/solid/add-on/store/assets/src/lib/demo-store.ts +13 -0
  206. package/templates/solid/add-on/store/assets/src/routes/demo.store.tsx.ejs +77 -0
  207. package/templates/solid/add-on/store/info.json +13 -0
  208. package/templates/solid/add-on/store/package.json +6 -0
  209. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/header-user.tsx +5 -0
  210. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/provider.tsx +15 -0
  211. package/templates/solid/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx +30 -0
  212. package/templates/solid/add-on/tanstack-query/info.json +13 -0
  213. package/templates/solid/add-on/tanstack-query/package.json +6 -0
  214. package/templates/solid/base/README.md.ejs +215 -0
  215. package/templates/solid/base/_dot_cursorrules.append +35 -0
  216. package/templates/solid/base/_dot_gitignore +5 -0
  217. package/templates/solid/base/_dot_vscode/settings.biome.json +38 -0
  218. package/templates/solid/base/_dot_vscode/settings.json +11 -0
  219. package/templates/solid/base/index.html.ejs +20 -0
  220. package/templates/solid/base/package.biome.json +10 -0
  221. package/templates/solid/base/package.eslintprettier.json +11 -0
  222. package/templates/solid/base/package.json +22 -0
  223. package/templates/solid/base/package.ts.json +5 -0
  224. package/templates/solid/base/package.tw.json +6 -0
  225. package/templates/solid/base/public/favicon.ico +0 -0
  226. package/templates/solid/base/public/logo192.png +0 -0
  227. package/templates/solid/base/public/logo512.png +0 -0
  228. package/templates/solid/base/public/manifest.json +25 -0
  229. package/templates/solid/base/public/robots.txt +3 -0
  230. package/templates/solid/base/src/App.css +0 -0
  231. package/templates/solid/base/src/App.tsx.ejs +47 -0
  232. package/templates/solid/base/src/components/Header.tsx.ejs +26 -0
  233. package/templates/solid/base/src/logo.svg +120 -0
  234. package/templates/solid/base/src/styles.css.ejs +15 -0
  235. package/templates/solid/base/toolchain/.prettierignore +3 -0
  236. package/templates/solid/base/toolchain/biome.json +31 -0
  237. package/templates/solid/base/toolchain/eslint.config.js +5 -0
  238. package/templates/solid/base/toolchain/prettier.config.js +10 -0
  239. package/templates/solid/base/tsconfig.json.ejs +31 -0
  240. package/templates/solid/base/vite.config.js.ejs +22 -0
  241. package/templates/solid/code-router/src/main.tsx.ejs +71 -0
  242. package/templates/solid/example/tanchat/README.md +52 -0
  243. package/templates/solid/example/tanchat/assets/ai-streaming-server/README.md +110 -0
  244. package/templates/solid/example/tanchat/assets/ai-streaming-server/_dot_env.example +1 -0
  245. package/templates/solid/example/tanchat/assets/ai-streaming-server/package.json +26 -0
  246. package/templates/solid/example/tanchat/assets/ai-streaming-server/src/index.ts +102 -0
  247. package/templates/solid/example/tanchat/assets/ai-streaming-server/tsconfig.json +15 -0
  248. package/templates/solid/example/tanchat/assets/src/components/demo.SettingsDialog.tsx +149 -0
  249. package/templates/solid/example/tanchat/assets/src/demo.index.css +227 -0
  250. package/templates/solid/example/tanchat/assets/src/lib/demo-store.ts +13 -0
  251. package/templates/solid/example/tanchat/assets/src/routes/example.chat.tsx +435 -0
  252. package/templates/solid/example/tanchat/assets/src/store/demo.hooks.ts +17 -0
  253. package/templates/solid/example/tanchat/assets/src/store/demo.store.ts +133 -0
  254. package/templates/solid/example/tanchat/info.json +14 -0
  255. package/templates/solid/example/tanchat/package.json +7 -0
  256. package/templates/solid/file-router/package.fr.json +5 -0
  257. package/templates/solid/file-router/src/main.tsx.ejs +47 -0
  258. package/templates/solid/file-router/src/routes/__root.tsx.ejs +41 -0
  259. package/templates/solid/file-router/src/routes/index.tsx +43 -0
  260. package/tests/cra.test.ts +293 -0
  261. package/tests/snapshots/cra/cr-js-npm.json +33 -0
  262. package/tests/snapshots/cra/cr-ts-npm.json +34 -0
  263. package/tests/snapshots/cra/cr-ts-start-npm.json +38 -0
  264. package/tests/snapshots/cra/fr-ts-npm.json +34 -0
  265. package/tests/snapshots/cra/fr-ts-tw-npm.json +33 -0
  266. package/tests/snapshots/cra/solid-cr-js-npm.json +31 -0
  267. package/tests/snapshots/cra/solid-cr-ts-npm.json +32 -0
  268. package/tests/snapshots/cra/solid-cr-ts-start-npm.json +36 -0
  269. package/tests/snapshots/cra/solid-fr-ts-npm.json +33 -0
  270. package/tests/snapshots/cra/solid-fr-ts-tw-npm.json +32 -0
  271. package/tests/test-utilities.ts +87 -0
  272. package/tsconfig.json +11 -0
@@ -0,0 +1,20 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <link rel="icon" href="/favicon.ico" />
7
+ <meta name="theme-color" content="#000000" />
8
+ <meta
9
+ name="description"
10
+ content="Web site created using create-tsrouter-app"
11
+ />
12
+ <link rel="apple-touch-icon" href="/logo192.png" />
13
+ <link rel="manifest" href="/manifest.json" />
14
+ <title>Create TanStack App - app-ts</title>
15
+ </head>
16
+ <body>
17
+ <div id="app"></div>
18
+ <script type="module" src="/src/main.tsx"></script>
19
+ </body>
20
+ </html>
@@ -0,0 +1,10 @@
1
+ {
2
+ "scripts": {
3
+ "format": "biome format",
4
+ "lint": "biome lint",
5
+ "check": "biome check"
6
+ },
7
+ "devDependencies": {
8
+ "@biomejs/biome": "1.9.4"
9
+ }
10
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "scripts": {
3
+ "lint": "eslint",
4
+ "format": "prettier",
5
+ "check": "prettier --write . && eslint --fix"
6
+ },
7
+ "devDependencies": {
8
+ "@tanstack/eslint-config": "^0.1.0",
9
+ "prettier": "^3.5.3"
10
+ }
11
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "app-ts",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "start": "vite --port 3000",
7
+ "build": "vite build && tsc",
8
+ "serve": "vite preview",
9
+ "test": "vitest run"
10
+ },
11
+ "dependencies": {
12
+ "@tanstack/solid-router": "^1.110.0",
13
+ "@tanstack/solid-router-devtools": "^1.109.2",
14
+ "@tanstack/router-plugin": "^1.109.2",
15
+ "solid-js": "^1.9.4"
16
+ },
17
+ "devDependencies": {
18
+ "vite-plugin-solid": "^2.11.2",
19
+ "typescript": "^5.7.2",
20
+ "vite": "^6.0.11"
21
+ }
22
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "devDependencies": {
3
+ "typescript": "^5.7.2"
4
+ }
5
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "dependencies": {
3
+ "@tailwindcss/vite": "^4.0.6",
4
+ "tailwindcss": "^4.0.6"
5
+ }
6
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "short_name": "TanStack App",
3
+ "name": "Create TanStack App Sample",
4
+ "icons": [
5
+ {
6
+ "src": "favicon.ico",
7
+ "sizes": "64x64 32x32 24x24 16x16",
8
+ "type": "image/x-icon"
9
+ },
10
+ {
11
+ "src": "logo192.png",
12
+ "type": "image/png",
13
+ "sizes": "192x192"
14
+ },
15
+ {
16
+ "src": "logo512.png",
17
+ "type": "image/png",
18
+ "sizes": "512x512"
19
+ }
20
+ ],
21
+ "start_url": ".",
22
+ "display": "standalone",
23
+ "theme_color": "#000000",
24
+ "background_color": "#ffffff"
25
+ }
@@ -0,0 +1,3 @@
1
+ # https://www.robotstxt.org/robotstxt.html
2
+ User-agent: *
3
+ Disallow:
File without changes
@@ -0,0 +1,47 @@
1
+ <% if (fileRouter) { %>
2
+ import { createFileRoute } from "@tanstack/solid-router";
3
+ import logo from "../logo.svg";
4
+ <% } else { %>
5
+ import logo from "./logo.svg";
6
+ <% } %>
7
+
8
+
9
+ <% if (fileRouter) { %>
10
+ export const Route = createFileRoute("/")({
11
+ component: App,
12
+ });<% } %>
13
+
14
+ function App() {
15
+ return (
16
+ <main class="min-h-screen flex flex-col items-center justify-center bg-[#282c34] text-white text-[calc(10px+2vmin)] text-center">
17
+ <img
18
+ src={logo}
19
+ class="h-[40vmin] pointer-events-none animate-[spin_20s_linear_infinite]"
20
+ alt="logo"
21
+ />
22
+ <p>
23
+ Edit <code><% if (fileRouter) { %>src/routes/index.tsx<% } else {%>src/App.<%= jsx %><% } %></code> and save to reload.
24
+ </p>
25
+ <a
26
+ class="text-[#61dafb] hover:underline"
27
+ href="https://solidjs.com"
28
+ target="_blank"
29
+ rel="noopener noreferrer"
30
+ >
31
+ Learn Solid
32
+ </a>
33
+ <a
34
+ class="text-[#61dafb] hover:underline"
35
+ href="https://tanstack.com"
36
+ target="_blank"
37
+ rel="noopener noreferrer"
38
+ >
39
+ Learn TanStack
40
+ </a>
41
+ </main>
42
+ );
43
+ }
44
+
45
+ <% if (!fileRouter) { %>
46
+ export default App;
47
+ <% } %>
@@ -0,0 +1,26 @@
1
+ import { Link } from '@tanstack/solid-router'
2
+ <% for(const integration of integrations.filter(i => i.type === 'header-user')) { %>
3
+ import <%= integration.name %> from "../<%= integration.path %>";
4
+ <% } %>
5
+
6
+ export default function Header() {
7
+ return (
8
+ <header class="p-2 flex gap-2 bg-white text-black justify-between">
9
+ <nav class="flex flex-row">
10
+ <div class="px-2 font-bold">
11
+ <Link to="/">Home</Link>
12
+ </div>
13
+ <% for(const addOn of addOns) {
14
+ for(const route of addOn?.routes || []) { %>
15
+ <div class="px-2 font-bold"><Link to="<%= route.url %>"><%= route.name %></Link></div>
16
+ <% } } %>
17
+ </nav>
18
+
19
+ <div>
20
+ <% for(const integration of integrations.filter(i => i.type === 'header-user')) { %>
21
+ <<%= integration.name %> />
22
+ <% } %>
23
+ </div>
24
+ </header>
25
+ )
26
+ }
@@ -0,0 +1,120 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 166 155.3">
3
+ <!-- Generator: Adobe Illustrator 29.3.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 151) -->
4
+ <defs>
5
+ <style>
6
+ .st0 {
7
+ fill: url(#linear-gradient2);
8
+ }
9
+
10
+ .st1 {
11
+ fill: url(#linear-gradient3);
12
+ }
13
+
14
+ .st2 {
15
+ fill: #9ae7fc;
16
+ }
17
+
18
+ .st3 {
19
+ fill: #518ac8;
20
+ }
21
+
22
+ .st4 {
23
+ fill: #76b3e1;
24
+ }
25
+
26
+ .st5 {
27
+ fill: url(#linear-gradient);
28
+ }
29
+
30
+ .st5, .st6 {
31
+ isolation: isolate;
32
+ opacity: .3;
33
+ }
34
+
35
+ .st7 {
36
+ fill: #61dafb;
37
+ }
38
+
39
+ .st6 {
40
+ fill: url(#linear-gradient1);
41
+ }
42
+ </style>
43
+ <linearGradient id="linear-gradient" x1="27.4" y1="154.8" x2="151.9" y2="94.3" gradientTransform="translate(0 158) scale(1 -1)" gradientUnits="userSpaceOnUse">
44
+ <stop offset="0" stop-color="#76b3e1"/>
45
+ <stop offset=".3" stop-color="#dcf2fd"/>
46
+ <stop offset="1" stop-color="#76b3e1"/>
47
+ </linearGradient>
48
+ <linearGradient id="linear-gradient1" x1="95.9" y1="125.4" x2="74.1" y2="52.8" gradientTransform="translate(0 158) scale(1 -1)" gradientUnits="userSpaceOnUse">
49
+ <stop offset="0" stop-color="#76b3e1"/>
50
+ <stop offset=".5" stop-color="#4377bb"/>
51
+ <stop offset="1" stop-color="#1f3b77"/>
52
+ </linearGradient>
53
+ <linearGradient id="linear-gradient2" x1="18.3" y1="93.7" x2="144.2" y2="8.1" gradientTransform="translate(0 158) scale(1 -1)" gradientUnits="userSpaceOnUse">
54
+ <stop offset="0" stop-color="#315aa9"/>
55
+ <stop offset=".5" stop-color="#518ac8"/>
56
+ <stop offset="1" stop-color="#315aa9"/>
57
+ </linearGradient>
58
+ <linearGradient id="linear-gradient3" x1="75.3" y1="83.5" x2="24.5" y2="-102.8" gradientTransform="translate(0 158) scale(1 -1)" gradientUnits="userSpaceOnUse">
59
+ <stop offset="0" stop-color="#4377bb"/>
60
+ <stop offset=".5" stop-color="#1a336b"/>
61
+ <stop offset="1" stop-color="#1a336b"/>
62
+ </linearGradient>
63
+ </defs>
64
+ <g id="Layer_1">
65
+ <path class="st4" d="M163,35S110-4,69,5l-3,1c-6,2-11,5-14,9l-2,3-15,26,26,5c11,7,25,10,38,7l46,9,18-30Z"/>
66
+ <path class="st5" d="M163,35S110-4,69,5l-3,1c-6,2-11,5-14,9l-2,3-15,26,26,5c11,7,25,10,38,7l46,9,18-30Z"/>
67
+ <path class="st3" d="M52,35l-4,1c-17,5-22,21-13,35,10,13,31,20,48,15l62-21s-53-39-93-30Z"/>
68
+ <path class="st6" d="M52,35l-4,1c-17,5-22,21-13,35,10,13,31,20,48,15l62-21s-53-39-93-30Z"/>
69
+ <path class="st0" d="M134,80c-11.5-14.3-30.4-20.2-48-15l-62,20L4,120l112,19,20-36c4-7,3-15-2-23Z"/>
70
+ <path class="st1" d="M114,115c-11.5-14.3-30.4-20.2-48-15L4,120s53,40,94,30l3-1c17-5,23-21,13-34Z"/>
71
+ </g>
72
+ <g id="Layer_2">
73
+ <circle class="st2" cx="92.8" cy="127.3" r="7.6"/>
74
+ <path class="st7" d="M100.8,127.3c0,4.4-3.6,8-8,8s-8-3.6-8-8,3.6-8,8-8,8,3.6,8,8ZM86.6,127.1v-1.1c0-.2.2-.9.3-1.1.2-.3.5-.6.8-.8l-.6-.6c.7-.6,1.7-.7,2.4-.1.3-.8,1.2-1.3,2.1-1.2v.7c.9,0,2.2.7,2.2,1.9s0,0-.1.1c-.3,0-.6,0-.9-.1s-.2,0-.2,0,.4.7.5,1,.2.6.1.9c-1-.1-1.9-.6-2.6-1.2,0,.5.7,3.8.9,3.9s.1-.1.2-.2.2-1.1.2-1.2c0-.2-.3-.3-.4-.5-.2-.5.2-.8.7-.6s.9,1.1,1.3,1.3,2.3.2,2.6.6-.5.8-.3,1.3c1.2-.5,2.4-.6,3.6-.4.5-1.7.5-3.6-.2-5.3-1.3,0-2.6-.6-3-1.9-.4-1.3-.1-1.5-.2-1.6-.1-.2-1.1.1-1.3-.3s0-.2,0-.2-.3-.1-.5-.1c-4.6-1.1-9.1,2.8-8.8,7.4,0,.3.3,1.8.4,2s.8,0,1.1,0,.7,0,.9,0c.5,0,1.3.4,1.7.4s.4-.1.5-.4c0-.5,0-1.3,0-1.8s-.2-1.4-.2-2.1c-.2,0-.1,0-.2,0-.1.2-.2.6-.3.8s-.9,1.5-1,1.6-.1,0-.1-.1c-.3-.6-.4-1.4-.3-2.1-.2-.2-1,.9-1.2.9h-.1c0-.1,0-.1,0-.1h0ZM98.9,123.7c.2-.2-1.1-1.6-1.3-1.8-.5-.5-1-.8-.6.2s1,1.4,1.9,1.5h0ZM91,122.6c0,0-1.1.5-1,.8.3-.2,1-.3,1-.8ZM89.2,123.7c0-.4-1.1-.5-1.3-.2s.3.2.3.2c.3,0,.6-.1.9,0h0ZM91.1,123.8c.7.2,1.2.6,1.9.7s0-.5-.2-.7c-.4-.3-.9-.4-1.4-.4s-.3,0-.2,0c.5.1,1.3.1,1.5.7-.4,0-.7-.3-1.1-.4s-.4,0-.5,0h0ZM92.7,126.1c-.1-.9-1-1.9-1.9-2.1s-.2,0-.1,0,.8.6,1,.7.8.7.4.7-1.5-1.4-1.7-1.2c0,.2.2.3.3.5.5.7,1.2,1.2,2.1,1.3h0ZM88.3,124.3c-.9.2-1.2,1.1-1.2,1.9.1.1.9-.7,1-.8s.5-.8.2-.7-.5.8-.7.8,0-.4,0-.4c.2-.3.5-.5.7-.8h0ZM89.2,124.6c0,0-.4.2-.4.3-.5.7-.5,1.8-.3,2.6.1,0,.1,0,.2-.1.5-.7,1-1.9.8-2.7-.4.5-.5,1.3-.6,1.9h-.2c0-.7.3-1.4.5-2h0ZM93.8,128.9c0-.3-.3-.2-.4-.3s-.2-.3-.5-.2c.2.4.5.6,1,.6h0ZM92.1,129.4c1.3.1,1-.3.2-1-.2,0-.3.8-.2,1ZM95.6,129.6c-.6,0-1.4-.4-2-.4s-.2,0-.3.1c.7.2,1.5.3,2.1.7l.2-.4h0ZM92.7,130.1c-1.3,0-2.7.7-3.6,1.6s-.8.9-.8,1.1c0,.3,1.5,1.1,1.9,1.2,2.1.8,4.9.6,6.8-.7s.5-.5,0-1.1c-1-1.2-2.6-2-4.1-2h0ZM88.9,130.8c-.2-.2-.9-.3-1.2-.4s-.9,0-1.2.1l2.5.2h0ZM99.2,130.5h-1.3c-.2,0-.9.2-1.1.3s-.1.1,0,0c.4,0,.9-.2,1.3-.2s.6,0,.9,0,.2,0,.1-.1h0Z"/>
75
+ <path class="st2" d="M86.6,127.1h.1c.2,0,1-1,1.2-.9,0,.7,0,1.5.3,2.1s0,.2.1.1.9-1.4,1-1.6.2-.6.3-.8,0-.1.2,0c0,.7.2,1.4.2,2.1s0,1.3,0,1.8-.2.4-.5.4-1.2-.4-1.7-.4-.7,0-.9,0-1,.2-1.1,0-.4-1.7-.4-2c-.3-4.7,4.2-8.6,8.8-7.4,4.6,1.1.4,0,.5.1s0,.2,0,.2c.2.4,1.2,0,1.3.3s0,1.2.2,1.6c.4,1.3,1.8,1.9,3,1.9.7,1.7.7,3.6.2,5.3-1.3-.1-2.5,0-3.6.4-.2-.5.7-.9.3-1.3s-2.1-.3-2.6-.6-1-1.1-1.3-1.3-.9.1-.7.6.4.3.4.5-.2,1.1-.2,1.2,0,.2-.2.2c-.2,0-.9-3.4-.9-3.9.8.6,1.6,1,2.6,1.2,0-.3,0-.6-.1-.9s-.5-.9-.5-1c0-.1.2,0,.2,0,.3,0,.6.1.9.1s.1,0,.1-.1c0-1.2-1.3-1.9-2.3-1.9v-.7c-.8,0-1.6.4-1.9,1.2-.8-.5-1.7-.5-2.4.1l.6.6c-.3.2-.6.5-.8.8s-.3.9-.3,1.1v1.2h0,0ZM94.7,121.7c1.4.4,1.5-.6,0-.2v.2ZM94.8,122.7c0,.1,1.1,0,1-.4s-.8.1-1,.1v.3s0,0,0,0h0ZM95.2,123.6c.1.2,1-.3,1-.5,0-.3-1.2.2-1,.5ZM96.7,123.7c-.2-.2-.9.5-.8.7.1.4,1-.5.8-.7ZM97.1,124.3c0,0-.5.8-.3.9s.6-.6.6-.7-.2-.2-.4-.2h0ZM97.7,125.6c.4.1.7-.9.4-1-.3-.1-.5.9-.4,1ZM99.2,125.8c0-.3.2-.8-.2-1-.2,0-.1.7-.1.8h0c0,0,.2.1.2.1h0Z"/>
76
+ <path class="st2" d="M98.9,123.7c-.9-.1-1.6-.6-1.9-1.5s0-.7.6-.2,1.5,1.5,1.3,1.8h0Z"/>
77
+ <path class="st2" d="M92.7,126.1c-.9-.1-1.6-.6-2.1-1.3s-.3-.3-.3-.5c.2-.2,1.5,1.2,1.7,1.2.4,0-.3-.6-.4-.7-.2-.1-1-.6-1-.7,0-.1,0,0,.1,0,.9.1,1.8,1.2,1.9,2.1h0Z"/>
78
+ <path class="st2" d="M89.2,124.6c-.2.7-.5,1.3-.5,2h.2c0-.7.3-1.4.6-1.9.2.8-.3,2.1-.8,2.7s0,.1-.2.1c-.2-.8-.2-1.9.3-2.6s.3-.4.4-.3h0Z"/>
79
+ <path class="st2" d="M91.1,123.8c0-.1.4,0,.5,0,.4,0,.7.3,1.1.4-.2-.5-1-.6-1.5-.7,0-.1.2,0,.2,0,.5,0,1,.1,1.4.4.4.3.7.7.2.7-.8,0-1.3-.4-1.9-.7h0Z"/>
80
+ <path class="st2" d="M88.3,124.3c-.2.3-.5.5-.7.8s-.3.5,0,.4.5-.7.7-.8-.2.6-.2.7c0,.1-.8.9-1,.8,0-.8.3-1.8,1.2-1.9h0Z"/>
81
+ <path class="st2" d="M95.6,129.6l-.2.4c-.6-.4-1.4-.5-2.1-.7,0-.1.2-.1.3-.1.6,0,1.4.3,2,.4h0Z"/>
82
+ <path class="st2" d="M92.1,129.4c0-.2,0-1,.2-1,.7.6,1.1,1.1-.2,1Z"/>
83
+ <path class="st2" d="M89.2,123.7c-.3,0-.6.1-.9,0s-.4-.1-.3-.2c.1-.3,1.2-.2,1.3.2h0Z"/>
84
+ <path class="st2" d="M91,122.6c0,.5-.6.6-1,.8-.1-.3.9-.9,1-.8Z"/>
85
+ <path class="st2" d="M93.8,128.9c-.4,0-.7-.2-1-.6.3,0,.4.1.5.2s.5,0,.4.3h0Z"/>
86
+ <path class="st7" d="M94.8,122.7v-.3c.2,0,.9-.4,1-.1s-1,.5-1,.4h0Z"/>
87
+ <path class="st7" d="M94.7,121.7v-.2c1.5-.4,1.4.6,0,.2Z"/>
88
+ <path class="st7" d="M95.2,123.6c-.2-.3.9-.8,1-.5s-.8.7-1,.5Z"/>
89
+ <path class="st7" d="M96.7,123.7c.2.2-.7,1.1-.8.7s.7-.9.8-.7Z"/>
90
+ <path class="st7" d="M97.1,124.3c.1,0,.4,0,.4.2s-.4.8-.6.7.2-.8.3-.9h0Z"/>
91
+ <path class="st7" d="M97.7,125.6c0,0,0-1.1.4-1,.2,0,0,1.1-.4,1Z"/>
92
+ <path class="st7" d="M99.2,125.8h-.2s0-.1,0-.1c0-.2,0-.8.1-.8.4.1.3.7.2,1h0Z"/>
93
+ <path class="st2" d="M92.7,130.1c1.6,0,3.2.8,4.1,2,1,1.2.7.6,0,1.1-1.9,1.4-4.6,1.6-6.8.7-.3-.1-1.9-.9-1.9-1.2s.7-.9.8-1.1c.9-.9,2.3-1.5,3.6-1.6h0Z"/>
94
+ <path class="st2" d="M88.9,130.8l-2.5-.2c.3-.2.9-.1,1.2-.1s1,.1,1.2.4h0Z"/>
95
+ <path class="st2" d="M99.2,130.5c.1,0,0,.1-.1.1-.3,0-.6,0-.9,0-.4,0-.9.2-1.3.2s-.2,0,0,0,.9-.3,1.1-.3h1.3,0Z"/>
96
+ <circle class="st2" cx="47.9" cy="57.2" r="5.2"/>
97
+ <path class="st7" d="M53.4,57.2c0,3-2.4,5.5-5.5,5.5s-5.5-2.4-5.5-5.5,2.4-5.5,5.5-5.5,5.5,2.4,5.5,5.5ZM43.7,57v-.8c0-.1.1-.6.2-.8.1-.2.4-.4.6-.6l-.4-.4c.5-.4,1.1-.4,1.7,0,.2-.6.8-.9,1.4-.8v.5c.6,0,1.5.5,1.5,1.3s0,0,0,0c-.2,0-.4,0-.6,0s-.1,0-.1,0,.3.5.4.7.1.4,0,.6c-.7,0-1.3-.4-1.8-.8,0,.3.5,2.6.6,2.7s0,0,.1-.1.2-.8.2-.8c0-.1-.2-.2-.3-.3-.1-.3.2-.6.4-.4s.6.8.9.9,1.6.2,1.8.4-.4.6-.2.9c.8-.3,1.6-.4,2.5-.3.4-1.2.4-2.5-.1-3.6-.9,0-1.8-.4-2.1-1.3-.3-.9,0-1-.2-1.1,0-.1-.8,0-.9-.2s0-.1,0-.2-.2,0-.3,0c-3.1-.8-6.2,1.9-6,5.1,0,.2.2,1.2.3,1.3s.6,0,.8,0,.4,0,.6,0c.4,0,.9.3,1.1.3s.3,0,.3-.3c0-.3,0-.9,0-1.2s-.1-.9-.2-1.4c-.1,0,0,0-.1,0,0,.2-.1.4-.2.6s-.6,1.1-.7,1.1,0,0,0,0c-.2-.4-.2-1-.2-1.4-.1-.1-.7.6-.8.6h0c0,0,0,0,0,0h0ZM52.2,54.7c.1-.1-.7-1.1-.9-1.2-.4-.3-.7-.5-.4.2s.7.9,1.3,1h0ZM46.7,54c0,0-.7.4-.7.6.2-.2.7-.2.7-.6ZM45.5,54.7c0-.3-.8-.3-.9-.1s.2.2.2.2c.2,0,.4,0,.6,0h0ZM46.8,54.8c.5.2.8.4,1.3.4s0-.4-.1-.5c-.3-.2-.6-.3-.9-.3s-.2,0-.2,0c.3,0,.9,0,1,.5-.3,0-.5-.2-.8-.2s-.3,0-.3,0h0ZM47.9,56.4c0-.6-.7-1.3-1.3-1.4s-.2,0,0,0,.6.4.7.5.5.5.3.5-1-.9-1.1-.8c0,.1.1.2.2.3.4.5.8.8,1.4.9h0ZM44.8,55.1c-.6.1-.8.8-.8,1.3,0,0,.6-.5.7-.5s.3-.6.1-.5-.4.5-.5.6,0-.3,0-.3c.1-.2.4-.4.5-.6h0ZM45.5,55.3c0,0-.2.2-.3.2-.4.5-.3,1.2-.2,1.8,0,0,0,0,.1,0,.4-.5.7-1.3.5-1.9-.3.4-.4.9-.4,1.3h-.2c0-.5.2-.9.4-1.4h0ZM48.7,58.3c0-.2-.2-.2-.3-.2s-.2-.2-.4-.2c.2.3.4.4.7.4h0ZM47.5,58.6c.9,0,.7-.2.2-.7-.2,0-.2.5-.2.7ZM49.9,58.8c-.4,0-.9-.2-1.4-.3s-.2,0-.2,0c.5.2,1,.2,1.5.5v-.3h.1ZM47.9,59.1c-.9,0-1.8.4-2.5,1.1s-.6.6-.6.8c0,.2,1,.8,1.3.8,1.5.6,3.3.4,4.6-.5s.4-.3,0-.8c-.7-.8-1.8-1.4-2.8-1.4h0ZM45.3,59.6c-.2-.2-.6-.2-.8-.3s-.6,0-.8,0l1.7.2h0ZM52.3,59.4h-.9c-.1,0-.6.1-.7.2s0,0,0,0c.3,0,.6-.1.9-.2s.4,0,.6,0,.2,0,0,0h0Z"/>
98
+ <path class="st2" d="M43.7,57h0c.2,0,.7-.7.8-.6,0,.5,0,1,.2,1.4s0,.1,0,0,.6-.9.7-1.1.2-.4.2-.6,0,0,.1,0c0,.5.1.9.2,1.4s0,.9,0,1.2-.1.3-.3.3-.8-.3-1.1-.3-.4,0-.6,0-.7.1-.8,0-.3-1.2-.3-1.3c-.2-3.2,2.9-5.9,6-5.1s.3,0,.3,0,0,.1,0,.2c.1.2.8,0,.9.2s0,.8.2,1.1c.3.9,1.2,1.3,2.1,1.3.5,1.1.5,2.4.1,3.6-.9,0-1.7,0-2.5.3-.2-.4.5-.6.2-.9s-1.4-.2-1.8-.4-.7-.7-.9-.9-.6,0-.4.4.3.2.3.3-.1.8-.2.8,0,.2-.1.1c-.1,0-.6-2.3-.6-2.7.5.4,1.1.7,1.8.8,0-.2,0-.4,0-.6s-.4-.6-.4-.7c0,0,.1,0,.1,0,.2,0,.4,0,.6,0s0,0,0,0c0-.8-.9-1.3-1.6-1.3v-.5c-.5,0-1.1.2-1.3.8-.5-.4-1.2-.4-1.7,0l.4.4c-.2.2-.4.3-.6.6s-.2.6-.2.8v.8h0,0ZM49.2,53.3c.9.3,1.1-.4,0-.2v.2ZM49.3,54.1c0,0,.8,0,.7-.3s-.6,0-.7,0v.2s0,0,0,0h0ZM49.6,54.7c0,.1.7-.2.7-.3,0-.2-.8.1-.7.3ZM50.6,54.7c-.1-.1-.6.3-.6.5,0,.3.7-.4.6-.5ZM50.9,55.1s-.4.6-.2.6.4-.4.4-.5-.2-.2-.2-.1h0ZM51.3,56.1c.3,0,.5-.6.3-.7-.2,0-.3.6-.3.7ZM52.4,56.2c0-.2.1-.6-.1-.7-.1,0,0,.5,0,.6h0c0,0,.2,0,.2,0h0Z"/>
99
+ <path class="st2" d="M52.2,54.7c-.6,0-1.1-.4-1.3-1s0-.5.4-.2,1,1.1.9,1.2h0Z"/>
100
+ <path class="st2" d="M47.9,56.4c-.6,0-1.1-.4-1.4-.9s-.2-.2-.2-.3c.1-.1,1,.8,1.1.8.3,0-.2-.4-.3-.5-.1,0-.7-.4-.7-.5,0,0,0,0,0,0,.6,0,1.2.8,1.3,1.4h0Z"/>
101
+ <path class="st2" d="M45.5,55.3c-.1.4-.4.9-.4,1.4h.2c0-.4.2-.9.4-1.3.1.6-.2,1.4-.5,1.9s0,0-.1,0c-.1-.5-.2-1.3.2-1.8s.2-.3.3-.2h0Z"/>
102
+ <path class="st2" d="M46.8,54.8c0,0,.3,0,.3,0,.3,0,.5.2.8.2-.1-.4-.7-.4-1-.5,0,0,.1,0,.2,0,.3,0,.7,0,.9.3.3.2.5.5.1.5-.5,0-.9-.3-1.3-.4h0Z"/>
103
+ <path class="st2" d="M44.8,55.1c-.1.2-.4.4-.5.6s-.2.3,0,.3.3-.5.5-.6-.1.4-.1.5c0,0-.6.6-.7.5,0-.6.2-1.2.8-1.3h0Z"/>
104
+ <path class="st2" d="M49.9,58.8v.3c-.6-.3-1.1-.3-1.6-.5,0,0,.1,0,.2,0,.4,0,.9.2,1.4.3h0Z"/>
105
+ <path class="st2" d="M47.5,58.6c0-.1,0-.7.2-.7.5.4.7.8-.2.7Z"/>
106
+ <path class="st2" d="M45.5,54.7c-.2,0-.4,0-.6,0s-.3,0-.2-.2c0-.2.8-.2.9.1h0Z"/>
107
+ <path class="st2" d="M46.7,54c0,.4-.4.4-.7.6,0-.2.6-.6.7-.6Z"/>
108
+ <path class="st2" d="M48.7,58.3c-.3,0-.5-.2-.7-.4.2,0,.2,0,.4.2s.3,0,.3.2h0Z"/>
109
+ <path class="st7" d="M49.3,54.1v-.2c.2,0,.6-.3.7,0s-.7.4-.7.3h0Z"/>
110
+ <path class="st7" d="M49.2,53.3v-.2c1-.3,1,.4,0,.2Z"/>
111
+ <path class="st7" d="M49.6,54.7c-.1-.2.6-.6.7-.3s-.6.5-.7.3Z"/>
112
+ <path class="st7" d="M50.6,54.7c.1.1-.5.8-.6.5s.4-.6.6-.5Z"/>
113
+ <path class="st7" d="M50.9,55.1c0,0,.3,0,.2.1s-.3.5-.4.5.2-.6.2-.6h0Z"/>
114
+ <path class="st7" d="M51.3,56.1s0-.7.3-.7c.2,0,0,.8-.3.7Z"/>
115
+ <path class="st7" d="M52.4,56.2h-.2s0,0,0,0c0-.1,0-.6,0-.6.3,0,.2.5.1.7h0Z"/>
116
+ <path class="st2" d="M47.9,59.1c1.1,0,2.2.6,2.8,1.4.7.8.5.4,0,.8-1.3.9-3.2,1.1-4.6.5-.2,0-1.3-.6-1.3-.8s.5-.6.6-.8c.6-.6,1.6-1,2.5-1.1h0Z"/>
117
+ <path class="st2" d="M45.3,59.6l-1.7-.2c.2-.1.6,0,.8,0s.7,0,.8.3h0Z"/>
118
+ <path class="st2" d="M52.3,59.4c0,0,0,0,0,0-.2,0-.4,0-.6,0-.3,0-.6.1-.9.2s-.1,0,0,0,.6-.2.7-.2h.9,0Z"/>
119
+ </g>
120
+ </svg>
@@ -0,0 +1,15 @@
1
+ @import "tailwindcss";
2
+
3
+ body {
4
+ @apply m-0;
5
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
6
+ "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
7
+ sans-serif;
8
+ -webkit-font-smoothing: antialiased;
9
+ -moz-osx-font-smoothing: grayscale;
10
+ }
11
+
12
+ code {
13
+ font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
14
+ monospace;
15
+ }
@@ -0,0 +1,3 @@
1
+ package-lock.json
2
+ pnpm-lock.yaml
3
+ yarn.lock
@@ -0,0 +1,31 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3
+ "vcs": {
4
+ "enabled": false,
5
+ "clientKind": "git",
6
+ "useIgnoreFile": false
7
+ },
8
+ "files": {
9
+ "ignoreUnknown": false,
10
+ "ignore": ["src/routeTree.gen.ts"],
11
+ "include": ["src/*", ".vscode/*", "index.html", "vite.config.js"]
12
+ },
13
+ "formatter": {
14
+ "enabled": true,
15
+ "indentStyle": "tab"
16
+ },
17
+ "organizeImports": {
18
+ "enabled": true
19
+ },
20
+ "linter": {
21
+ "enabled": true,
22
+ "rules": {
23
+ "recommended": true
24
+ }
25
+ },
26
+ "javascript": {
27
+ "formatter": {
28
+ "quoteStyle": "double"
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,5 @@
1
+ // @ts-check
2
+
3
+ import { tanstackConfig } from "@tanstack/eslint-config";
4
+
5
+ export default [...tanstackConfig];
@@ -0,0 +1,10 @@
1
+ // @ts-check
2
+
3
+ /** @type {import('prettier').Config} */
4
+ const config = {
5
+ semi: false,
6
+ singleQuote: true,
7
+ trailingComma: "all",
8
+ };
9
+
10
+ export default config;
@@ -0,0 +1,31 @@
1
+ {
2
+ <% if (toolchain && toolchain === 'eslint+prettier') { %>"include": ["**/*.ts", "**/*.tsx", "eslint.config.js", "prettier.config.js", "vite.config.js"],
3
+ <% } else { %>"include": ["**/*.ts", "**/*.tsx"],<% } %>
4
+ "compilerOptions": {
5
+ "target": "ES2022",
6
+ "jsx": "preserve",
7
+ "jsxImportSource": "solid-js",
8
+ "module": "ESNext",
9
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
10
+ "types": ["vite/client"],
11
+
12
+ /* Bundler mode */
13
+ "moduleResolution": "bundler",
14
+ "allowImportingTsExtensions": true,
15
+ "verbatimModuleSyntax": true,
16
+ "noEmit": true,
17
+
18
+ /* Linting */
19
+ "skipLibCheck": true,
20
+ "strict": true,
21
+ "noUnusedLocals": true,
22
+ "noUnusedParameters": true,
23
+ "noFallthroughCasesInSwitch": true,
24
+ "noUncheckedSideEffectImports": true<% if (addOnEnabled['solid-ui']) { %>,
25
+ "baseUrl": ".",
26
+ "paths": {
27
+ "~/*": ["./src/*"]
28
+ }
29
+ <% } %>
30
+ }
31
+ }
@@ -0,0 +1,22 @@
1
+ import { defineConfig } from 'vite'
2
+ <%if (fileRouter) { %>import { TanStackRouterVite } from '@tanstack/router-plugin/vite'<% } %>
3
+ import solidPlugin from 'vite-plugin-solid'
4
+ import tailwindcss from '@tailwindcss/vite'<% if (addOnEnabled['solid-ui']) { %>
5
+ import { resolve } from 'node:path'<% } %><% if (addOnEnabled['module-federation']) { %>
6
+ import {federation} from "@module-federation/vite";<% } %><% if (addOnEnabled['module-federation']) { %>
7
+ import federationConfig from "./module-federation.config.js";
8
+ <% } %>
9
+
10
+ // https://vitejs.dev/config/
11
+ export default defineConfig({
12
+ plugins: [<% if (addOnEnabled['module-federation']) { %>federation(federationConfig), <% } %><%if (fileRouter) { %>
13
+ TanStackRouterVite({ target: 'solid', autoCodeSplitting: true }),<% } %>
14
+ solidPlugin(),
15
+ tailwindcss(),
16
+ ],<% if (addOnEnabled['solid-ui']) { %>
17
+ resolve: {
18
+ alias: {
19
+ '~': resolve(__dirname, './src'),
20
+ },
21
+ },<% } %>
22
+ })
@@ -0,0 +1,71 @@
1
+ import {
2
+ Outlet,
3
+ RouterProvider,
4
+ createRootRoute,
5
+ createRoute,
6
+ createRouter,
7
+ } from "@tanstack/solid-router";
8
+ import { TanStackRouterDevtools } from "@tanstack/solid-router-devtools";
9
+ import { render } from 'solid-js/web'
10
+ <% for(const route of routes) { %>import <%= route.name %> from "<%= route.path %>";
11
+ <% } %><% if (routes.length > 0) { %>
12
+ import Header from "./components/Header";
13
+ <% } %><% for(const integration of integrations.filter(i => i.type === 'layout' || i.type === 'provider')) { %>
14
+ import <%= integration.name %> from "./<%= integration.path %>";
15
+ <% } %>
16
+
17
+ import "./styles.css";
18
+
19
+ import App from "./App.<%= jsx %>";
20
+
21
+ const rootRoute = createRootRoute({
22
+ component: () => (
23
+ <>
24
+ <% for(const integration of integrations.filter(i => i.type === 'provider')) { %>
25
+ <<%= integration.name %>>
26
+ <% } %>
27
+ <% if (routes.length > 0) { %><Header /><% } %>
28
+ <Outlet />
29
+ <TanStackRouterDevtools />
30
+ <% for(const integration of integrations.filter(i => i.type === 'layout')) { %>
31
+ <<%= integration.name %> />
32
+ <% } %>
33
+ <% for(const integration of integrations.filter(i => i.type === 'provider').reverse()) { %>
34
+ </<%= integration.name %>>
35
+ <% } %>
36
+ </>
37
+ ),
38
+ });
39
+
40
+ const indexRoute = createRoute({
41
+ getParentRoute: () => rootRoute,
42
+ path: "/",
43
+ component: App,
44
+ });
45
+
46
+ const routeTree = rootRoute.addChildren([indexRoute<%= routes.map(route => `, ${route.name}(rootRoute)`).join('') %>]);
47
+
48
+ const router = createRouter({
49
+ routeTree,
50
+ defaultPreload: "intent",
51
+ scrollRestoration: true,
52
+ });
53
+
54
+ declare module '@tanstack/solid-router' {
55
+ interface Register {
56
+ router: typeof router
57
+ }
58
+ }
59
+
60
+ function MainApp() {
61
+ return (
62
+ <>
63
+ <RouterProvider router={router} />
64
+ </>
65
+ )
66
+ }
67
+
68
+ const rootElement = document.getElementById('app')
69
+ if(rootElement) {
70
+ render(() => <MainApp />, rootElement)
71
+ }
@@ -0,0 +1,52 @@
1
+ # TanStack Chat Application
2
+
3
+ Am example chat application built with TanStack Start, TanStack Store, and Claude AI.
4
+
5
+ ## Sidecar service
6
+
7
+ This applicaton requires a sidecar microservice to be running. The server is located in the `ai-streaming-service` directory.
8
+
9
+ In that directory you should edit the `.env.local` file to add your Anthropic API key:
10
+
11
+ ```env
12
+ ANTHROPIC_API_KEY=your_anthropic_api_key
13
+ ```
14
+
15
+ Then run the server:
16
+
17
+ ```bash
18
+ cd ai-streaming-service
19
+ npm install
20
+ npm run dev
21
+ ```
22
+
23
+ ## ✨ Features
24
+
25
+ ### AI Capabilities
26
+
27
+ - 🤖 Powered by Claude 3.5 Sonnet
28
+ - 📝 Rich markdown formatting with syntax highlighting
29
+ - 🎯 Customizable system prompts for tailored AI behavior
30
+ - 🔄 Real-time message updates and streaming responses (coming soon)
31
+
32
+ ### User Experience
33
+
34
+ - 🎨 Modern UI with Tailwind CSS and Lucide icons
35
+ - 🔍 Conversation management and history
36
+ - 🔐 Secure API key management
37
+ - 📋 Markdown rendering with code highlighting
38
+
39
+ ### Technical Features
40
+
41
+ - 📦 Centralized state management with TanStack Store
42
+ - 🔌 Extensible architecture for multiple AI providers
43
+ - 🛠️ TypeScript for type safety
44
+
45
+ ## Architecture
46
+
47
+ ### Tech Stack
48
+
49
+ - **Routing**: TanStack Router
50
+ - **State Management**: TanStack Store
51
+ - **Styling**: Tailwind CSS
52
+ - **AI Integration**: Anthropic's Claude API