@tanstack/cta-framework-react-cra 0.10.0-alpha.20

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 (166) hide show
  1. package/ADD-ON-AUTHORING.md +169 -0
  2. package/LICENSE +21 -0
  3. package/add-ons/clerk/README.md +3 -0
  4. package/add-ons/clerk/assets/_dot_env.local.append +2 -0
  5. package/add-ons/clerk/assets/src/integrations/clerk/header-user.tsx +19 -0
  6. package/add-ons/clerk/assets/src/integrations/clerk/provider.tsx +18 -0
  7. package/add-ons/clerk/assets/src/routes/demo.clerk.tsx +20 -0
  8. package/add-ons/clerk/info.json +28 -0
  9. package/add-ons/clerk/logo.svg +6 -0
  10. package/add-ons/clerk/package.json +5 -0
  11. package/add-ons/clerk/small-logo.svg +5 -0
  12. package/add-ons/convex/README.md +4 -0
  13. package/add-ons/convex/assets/_dot_cursorrules.append +93 -0
  14. package/add-ons/convex/assets/_dot_env.local.append +3 -0
  15. package/add-ons/convex/assets/convex/products.ts +8 -0
  16. package/add-ons/convex/assets/convex/schema.ts +10 -0
  17. package/add-ons/convex/assets/src/integrations/convex/provider.tsx +20 -0
  18. package/add-ons/convex/assets/src/routes/demo.convex.tsx +33 -0
  19. package/add-ons/convex/info.json +23 -0
  20. package/add-ons/convex/package.json +6 -0
  21. package/add-ons/convex/small-logo.svg +5 -0
  22. package/add-ons/form/assets/src/components/demo.FormComponents.tsx.ejs +300 -0
  23. package/add-ons/form/assets/src/hooks/demo.form-context.ts +4 -0
  24. package/add-ons/form/assets/src/hooks/demo.form.ts +22 -0
  25. package/add-ons/form/assets/src/routes/demo.form.address.tsx.ejs +213 -0
  26. package/add-ons/form/assets/src/routes/demo.form.simple.tsx.ejs +77 -0
  27. package/add-ons/form/info.json +31 -0
  28. package/add-ons/form/package.json +6 -0
  29. package/add-ons/form/small-logo.svg +1 -0
  30. package/add-ons/module-federation/assets/module-federation.config.js.ejs +31 -0
  31. package/add-ons/module-federation/assets/src/demo-mf-component.tsx +3 -0
  32. package/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +11 -0
  33. package/add-ons/module-federation/info.json +8 -0
  34. package/add-ons/module-federation/package.json +5 -0
  35. package/add-ons/netlify/README.md +11 -0
  36. package/add-ons/netlify/info.json +8 -0
  37. package/add-ons/netlify/small-logo.svg +1 -0
  38. package/add-ons/sentry/assets/_dot_cursorrules.append +22 -0
  39. package/add-ons/sentry/assets/_dot_env.local.append +11 -0
  40. package/add-ons/sentry/assets/src/app/global-middleware.ts +11 -0
  41. package/add-ons/sentry/assets/src/routes/demo.sentry.testing.tsx +489 -0
  42. package/add-ons/sentry/info.json +17 -0
  43. package/add-ons/sentry/package.json +5 -0
  44. package/add-ons/sentry/small-logo.svg +1 -0
  45. package/add-ons/shadcn/README.md +7 -0
  46. package/add-ons/shadcn/assets/_dot_cursorrules.append +7 -0
  47. package/add-ons/shadcn/assets/components.json +21 -0
  48. package/add-ons/shadcn/assets/src/lib/utils.ts +6 -0
  49. package/add-ons/shadcn/assets/src/styles.css +138 -0
  50. package/add-ons/shadcn/info.json +8 -0
  51. package/add-ons/shadcn/package.json +9 -0
  52. package/add-ons/shadcn/small-logo.svg +1 -0
  53. package/add-ons/start/assets/_dot_gitignore.append +2 -0
  54. package/add-ons/start/assets/app.config.ts.ejs +32 -0
  55. package/add-ons/start/assets/src/api.ts +6 -0
  56. package/add-ons/start/assets/src/client.tsx.ejs +33 -0
  57. package/add-ons/start/assets/src/router.tsx.ejs +48 -0
  58. package/add-ons/start/assets/src/routes/api.demo-names.ts +11 -0
  59. package/add-ons/start/assets/src/routes/demo.start.api-request.tsx.ejs +33 -0
  60. package/add-ons/start/assets/src/routes/demo.start.server-funcs.tsx +50 -0
  61. package/add-ons/start/assets/src/ssr.tsx.ejs +30 -0
  62. package/add-ons/start/info.json +31 -0
  63. package/add-ons/start/package.json +13 -0
  64. package/add-ons/start/small-logo.svg +1 -0
  65. package/add-ons/store/assets/src/lib/demo-store.ts +13 -0
  66. package/add-ons/store/assets/src/routes/demo.store.tsx.ejs +75 -0
  67. package/add-ons/store/info.json +16 -0
  68. package/add-ons/store/package.json +6 -0
  69. package/add-ons/store/small-logo.svg +1 -0
  70. package/add-ons/t3env/README.md +16 -0
  71. package/add-ons/t3env/assets/src/env.ts +39 -0
  72. package/add-ons/t3env/info.json +8 -0
  73. package/add-ons/t3env/package.json +6 -0
  74. package/add-ons/t3env/small-logo.svg +6 -0
  75. package/add-ons/tRPC/assets/src/integrations/trpc/init.ts +9 -0
  76. package/add-ons/tRPC/assets/src/integrations/trpc/react.ts +4 -0
  77. package/add-ons/tRPC/assets/src/integrations/trpc/router.ts +21 -0
  78. package/add-ons/tRPC/assets/src/routes/api.trpc.$.tsx +16 -0
  79. package/add-ons/tRPC/info.json +9 -0
  80. package/add-ons/tRPC/package.json +9 -0
  81. package/add-ons/tRPC/small-logo.svg +1 -0
  82. package/add-ons/table/assets/src/data/demo-table-data.ts +50 -0
  83. package/add-ons/table/assets/src/routes/demo.table.tsx.ejs +373 -0
  84. package/add-ons/table/info.json +16 -0
  85. package/add-ons/table/package.json +7 -0
  86. package/add-ons/table/small-logo.svg +1 -0
  87. package/add-ons/tanstack-query/assets/src/integrations/tanstack-query/layout.tsx +5 -0
  88. package/add-ons/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +70 -0
  89. package/add-ons/tanstack-query/assets/src/routes/demo.tanstack-query.tsx.ejs +53 -0
  90. package/add-ons/tanstack-query/info.json +28 -0
  91. package/add-ons/tanstack-query/package.json +6 -0
  92. package/add-ons/tanstack-query/small-logo.svg +1 -0
  93. package/dist/index.js +18 -0
  94. package/dist/types/index.d.ts +1 -0
  95. package/examples/tanchat/README.md +37 -0
  96. package/examples/tanchat/assets/_dot_env.local.append +2 -0
  97. package/examples/tanchat/assets/public/example-guitar-flowers.jpg +0 -0
  98. package/examples/tanchat/assets/public/example-guitar-motherboard.jpg +0 -0
  99. package/examples/tanchat/assets/public/example-guitar-racing.jpg +0 -0
  100. package/examples/tanchat/assets/public/example-guitar-steamer-trunk.jpg +0 -0
  101. package/examples/tanchat/assets/public/example-guitar-superhero.jpg +0 -0
  102. package/examples/tanchat/assets/public/example-guitar-traveling.jpg +0 -0
  103. package/examples/tanchat/assets/public/example-guitar-video-games.jpg +0 -0
  104. package/examples/tanchat/assets/src/components/example-AIAssistant.tsx +173 -0
  105. package/examples/tanchat/assets/src/components/example-GuitarRecommendation.tsx +47 -0
  106. package/examples/tanchat/assets/src/data/example-guitars.ts +83 -0
  107. package/examples/tanchat/assets/src/demo.index.css +220 -0
  108. package/examples/tanchat/assets/src/integrations/tanchat/header-user.tsx +5 -0
  109. package/examples/tanchat/assets/src/routes/api.messages.ts +24 -0
  110. package/examples/tanchat/assets/src/routes/api.sse.ts +23 -0
  111. package/examples/tanchat/assets/src/routes/example.chat.tsx +159 -0
  112. package/examples/tanchat/assets/src/routes/example.guitars/$guitarId.tsx +50 -0
  113. package/examples/tanchat/assets/src/routes/example.guitars/index.tsx +54 -0
  114. package/examples/tanchat/assets/src/store/example-assistant.ts +3 -0
  115. package/examples/tanchat/assets/src/utils/demo.ai.ts +62 -0
  116. package/examples/tanchat/assets/src/utils/demo.sse.ts +31 -0
  117. package/examples/tanchat/assets/src/utils/demo.tools.ts +47 -0
  118. package/examples/tanchat/info.json +35 -0
  119. package/examples/tanchat/package.json +16 -0
  120. package/examples/tanchat/small-logo.svg +1 -0
  121. package/package.json +34 -0
  122. package/project/base/README.md.ejs +558 -0
  123. package/project/base/_dot_gitignore +5 -0
  124. package/project/base/_dot_vscode/settings.json.ejs +35 -0
  125. package/project/base/index.html.ejs +20 -0
  126. package/project/base/package.json +30 -0
  127. package/project/base/public/favicon.ico +0 -0
  128. package/project/base/public/logo192.png +0 -0
  129. package/project/base/public/logo512.png +0 -0
  130. package/project/base/public/manifest.json +25 -0
  131. package/project/base/public/robots.txt +3 -0
  132. package/project/base/src/App.css.ejs +38 -0
  133. package/project/base/src/App.test.tsx.ejs +10 -0
  134. package/project/base/src/App.tsx.ejs +63 -0
  135. package/project/base/src/components/Header.tsx.ejs +27 -0
  136. package/project/base/src/logo.svg +44 -0
  137. package/project/base/src/main.tsx.ejs +155 -0
  138. package/project/base/src/reportWebVitals.ts.ejs +28 -0
  139. package/project/base/src/routes/__root.tsx.ejs +82 -0
  140. package/project/base/src/routes/index.tsx.ejs +67 -0
  141. package/project/base/src/styles.css.ejs +15 -0
  142. package/project/base/tsconfig.json.ejs +29 -0
  143. package/project/base/vite.config.js.ejs +23 -0
  144. package/project/packages.json +20 -0
  145. package/src/index.ts +26 -0
  146. package/tests/react-cra.test.ts +150 -0
  147. package/tests/snapshots/react-cra/cr-js-form-npm.json +29 -0
  148. package/tests/snapshots/react-cra/cr-js-npm.json +23 -0
  149. package/tests/snapshots/react-cra/cr-ts-npm.json +24 -0
  150. package/tests/snapshots/react-cra/cr-ts-start-npm.json +28 -0
  151. package/tests/snapshots/react-cra/cr-ts-start-tanstack-query-npm.json +31 -0
  152. package/tests/snapshots/react-cra/fr-ts-biome-npm.json +26 -0
  153. package/tests/snapshots/react-cra/fr-ts-npm.json +24 -0
  154. package/tests/snapshots/react-cra/fr-ts-tw-npm.json +23 -0
  155. package/tests/test-utilities.ts +44 -0
  156. package/toolchains/biome/assets/biome.json +31 -0
  157. package/toolchains/biome/info.json +8 -0
  158. package/toolchains/biome/package.json +10 -0
  159. package/toolchains/biome/small-logo.svg +5 -0
  160. package/toolchains/eslint/assets/_dot_prettierignore +3 -0
  161. package/toolchains/eslint/assets/eslint.config.js +5 -0
  162. package/toolchains/eslint/assets/prettier.config.js +10 -0
  163. package/toolchains/eslint/info.json +8 -0
  164. package/toolchains/eslint/package.json +11 -0
  165. package/toolchains/eslint/small-logo.svg +7 -0
  166. package/tsconfig.json +17 -0
@@ -0,0 +1,35 @@
1
+ {
2
+ "files.watcherExclude": {
3
+ "**/routeTree.gen.ts": true
4
+ },
5
+ "search.exclude": {
6
+ "**/routeTree.gen.ts": true
7
+ },
8
+ "files.readonlyInclude": {
9
+ "**/routeTree.gen.ts": true
10
+ }<% if (addOnEnabled.biome) { %>,
11
+ "[javascript]": {
12
+ "editor.defaultFormatter": "biomejs.biome"
13
+ },
14
+ "[javascriptreact]": {
15
+ "editor.defaultFormatter": "biomejs.biome"
16
+ },
17
+ "[typescript]": {
18
+ "editor.defaultFormatter": "biomejs.biome"
19
+ },
20
+ "[typescriptreact]": {
21
+ "editor.defaultFormatter": "biomejs.biome"
22
+ },
23
+ "[json]": {
24
+ "editor.defaultFormatter": "biomejs.biome"
25
+ },
26
+ "[jsonc]": {
27
+ "editor.defaultFormatter": "biomejs.biome"
28
+ },
29
+ "[css]": {
30
+ "editor.defaultFormatter": "biomejs.biome"
31
+ },
32
+ "editor.codeActionsOnSave": {
33
+ "source.organizeImports.biome": "explicit"
34
+ }<% } %>
35
+ }
@@ -0,0 +1,20 @@
1
+ <% if (addOnEnabled.start) { ignoreFile() } %><!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 - <%= projectName %></title>
15
+ </head>
16
+ <body>
17
+ <div id="app"></div>
18
+ <script type="module" src="/src/main.<%= jsx %>"></script>
19
+ </body>
20
+ </html>
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "vite --port 3000",
7
+ "start": "vite --port 3000",
8
+ "build": "vite build && tsc",
9
+ "serve": "vite preview",
10
+ "test": "vitest run"
11
+ },
12
+ "dependencies": {
13
+ "@tanstack/react-router": "^1.114.3",
14
+ "@tanstack/react-router-devtools": "^1.114.3",
15
+ "react": "^19.0.0",
16
+ "react-dom": "^19.0.0"
17
+ },
18
+ "devDependencies": {
19
+ "@testing-library/dom": "^10.4.0",
20
+ "@testing-library/react": "^16.2.0",
21
+ "@types/react": "^19.0.8",
22
+ "@types/react-dom": "^19.0.3",
23
+ "@vitejs/plugin-react": "^4.3.4",
24
+ "jsdom": "^26.0.0",
25
+ "typescript": "^5.7.2",
26
+ "vite": "^6.1.0",
27
+ "vitest": "^3.0.5",
28
+ "web-vitals": "^4.2.4"
29
+ }
30
+ }
Binary file
Binary file
Binary file
@@ -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:
@@ -0,0 +1,38 @@
1
+ <% if (tailwind) { ignoreFile() } %>.App {
2
+ text-align: center;
3
+ }
4
+
5
+ .App-logo {
6
+ height: 40vmin;
7
+ pointer-events: none;
8
+ }
9
+
10
+ @media (prefers-reduced-motion: no-preference) {
11
+ .App-logo {
12
+ animation: App-logo-spin infinite 20s linear;
13
+ }
14
+ }
15
+
16
+ .App-header {
17
+ background-color: #282c34;
18
+ min-height: 100vh;
19
+ display: flex;
20
+ flex-direction: column;
21
+ align-items: center;
22
+ justify-content: center;
23
+ font-size: calc(10px + 2vmin);
24
+ color: white;
25
+ }
26
+
27
+ .App-link {
28
+ color: #61dafb;
29
+ }
30
+
31
+ @keyframes App-logo-spin {
32
+ from {
33
+ transform: rotate(0deg);
34
+ }
35
+ to {
36
+ transform: rotate(360deg);
37
+ }
38
+ }
@@ -0,0 +1,10 @@
1
+ <% if (fileRouter) { ignoreFile() } %>import { describe, expect, test } from "vitest";
2
+ import { render, screen } from "@testing-library/react";
3
+ import App from "./App.<%= jsx %>";
4
+
5
+ describe("App", () => {
6
+ test("renders", () => {
7
+ render(<App />);
8
+ expect(screen.getByText("Learn React")).toBeDefined();
9
+ });
10
+ });
@@ -0,0 +1,63 @@
1
+ <% if (fileRouter) { ignoreFile() } %>import logo from "./logo.svg";<% if (!tailwind) { %>
2
+ import "./App.css";
3
+ <% } %>
4
+
5
+ function App() {
6
+ return (<% if (tailwind) { %>
7
+ <div className="text-center">
8
+ <header className="min-h-screen flex flex-col items-center justify-center bg-[#282c34] text-white text-[calc(10px+2vmin)]">
9
+ <img
10
+ src={logo}
11
+ className="h-[40vmin] pointer-events-none animate-[spin_20s_linear_infinite]"
12
+ alt="logo"
13
+ />
14
+ <p>
15
+ Edit <code>src/App.<%= jsx %></code> and save to reload.
16
+ </p>
17
+ <a
18
+ className="text-[#61dafb] hover:underline"
19
+ href="https://reactjs.org"
20
+ target="_blank"
21
+ rel="noopener noreferrer"
22
+ >
23
+ Learn React
24
+ </a>
25
+ <a
26
+ className="text-[#61dafb] hover:underline"
27
+ href="https://tanstack.com"
28
+ target="_blank"
29
+ rel="noopener noreferrer"
30
+ >
31
+ Learn TanStack
32
+ </a>
33
+ </header>
34
+ </div>
35
+ <% } else { %>
36
+ <div className="App">
37
+ <header className="App-header">
38
+ <img src={logo} className="App-logo" alt="logo" />
39
+ <p>
40
+ Edit <code>src/App.<%= jsx %></code> and save to reload.
41
+ </p>
42
+ <a
43
+ className="App-link"
44
+ href="https://reactjs.org"
45
+ target="_blank"
46
+ rel="noopener noreferrer"
47
+ >
48
+ Learn React
49
+ </a>
50
+ <a
51
+ className="App-link"
52
+ href="https://tanstack.com"
53
+ target="_blank"
54
+ rel="noopener noreferrer"
55
+ >
56
+ Learn TanStack
57
+ </a>
58
+ </header>
59
+ </div>
60
+ <% } %> );
61
+ }
62
+
63
+ export default App;
@@ -0,0 +1,27 @@
1
+ <% if (addOns.length === 0 && integrations.length === 0 && routes.length === 0) { ignoreFile() } %>import { Link } from '@tanstack/react-router'
2
+ <% for(const integration of integrations.filter(i => i.type === 'header-user')) { %>
3
+ import <%= integration.jsName %> from "<%= relativePath(integration.path) %>";
4
+ <% } %>
5
+
6
+ export default function Header() {
7
+ return (
8
+ <header className="p-2 flex gap-2 bg-white text-black justify-between">
9
+ <nav className="flex flex-row">
10
+ <div className="px-2 font-bold">
11
+ <Link to="/">Home</Link>
12
+ </div>
13
+ <% for(const addOn of addOns) {
14
+ for(const route of (addOn?.routes||[])?.filter(r => r.url && r.name)) { %>
15
+ <div className="px-2 font-bold"><Link to="<%= route.url %>"><%= route.name %></Link></div>
16
+ <% } } %>
17
+ </nav>
18
+ <% if (integrations.filter(i => i.type === 'header-user').length > 0) { %>
19
+ <div>
20
+ <% for(const integration of integrations.filter(i => i.type === 'header-user')) { %>
21
+ <<%= integration.jsName %> />
22
+ <% } %>
23
+ </div>
24
+ <% } %>
25
+ </header>
26
+ )
27
+ }
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Layer_1"
3
+ xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 841.9 595.3">
4
+ <!-- Generator: Adobe Illustrator 29.3.0, SVG Export Plug-In . SVG Version: 2.1.0 Build 146) -->
5
+ <defs>
6
+ <style>
7
+ .st0 {
8
+ fill: #9ae7fc;
9
+ }
10
+
11
+ .st1 {
12
+ fill: #61dafb;
13
+ }
14
+ </style>
15
+ </defs>
16
+ <g>
17
+ <path class="st1" d="M666.3,296.5c0-32.5-40.7-63.3-103.1-82.4,14.4-63.6,8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6,0,8.3.9,11.4,2.6,13.6,7.8,19.5,37.5,14.9,75.7-1.1,9.4-2.9,19.3-5.1,29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50,32.6-30.3,63.2-46.9,84-46.9v-22.3c-27.5,0-63.5,19.6-99.9,53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7,0,51.4,16.5,84,46.6-14,14.7-28,31.4-41.3,49.9-22.6,2.4-44,6.1-63.6,11-2.3-10-4-19.7-5.2-29-4.7-38.2,1.1-67.9,14.6-75.8,3-1.8,6.9-2.6,11.5-2.6v-22.3c-8.4,0-16,1.8-22.6,5.6-28.1,16.2-34.4,66.7-19.9,130.1-62.2,19.2-102.7,49.9-102.7,82.3s40.7,63.3,103.1,82.4c-14.4,63.6-8,114.2,20.2,130.4,6.5,3.8,14.1,5.6,22.5,5.6,27.5,0,63.5-19.6,99.9-53.6,36.4,33.8,72.4,53.2,99.9,53.2,8.4,0,16-1.8,22.6-5.6,28.1-16.2,34.4-66.7,19.9-130.1,62-19.1,102.5-49.9,102.5-82.3zm-130.2-66.7c-3.7,12.9-8.3,26.2-13.5,39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4,14.2,2.1,27.9,4.7,41,7.9zm-45.8,106.5c-7.8,13.5-15.8,26.3-24.1,38.2-14.9,1.3-30,2-45.2,2s-30.2-.7-45-1.9c-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8,6.2-13.4,13.2-26.8,20.7-39.9,7.8-13.5,15.8-26.3,24.1-38.2,14.9-1.3,30-2,45.2-2s30.2.7,45,1.9c8.3,11.9,16.4,24.6,24.2,38,7.6,13.1,14.5,26.4,20.8,39.8-6.3,13.4-13.2,26.8-20.7,39.9zm32.3-13c5.4,13.4,10,26.8,13.8,39.8-13.1,3.2-26.9,5.9-41.2,8,4.9-7.7,9.8-15.6,14.4-23.7,4.6-8,8.9-16.1,13-24.1zm-101.4,106.7c-9.3-9.6-18.6-20.3-27.8-32,9,.4,18.2.7,27.5.7s18.7-.2,27.8-.7c-9,11.7-18.3,22.4-27.5,32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9,3.7-12.9,8.3-26.2,13.5-39.5,4.1,8,8.4,16,13.1,24s9.5,15.8,14.4,23.4zm73.9-208.1c9.3,9.6,18.6,20.3,27.8,32-9-.4-18.2-.7-27.5-.7s-18.7.2-27.8.7c9-11.7,18.3-22.4,27.5-32zm-74,58.9c-4.9,7.7-9.8,15.6-14.4,23.7-4.6,8-8.9,16-13,24-5.4-13.4-10-26.8-13.8-39.8,13.1-3.1,26.9-5.8,41.2-7.9zm-90.5,125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6,58.3-50.6c8.6-3.7,18-7,27.7-10.1,5.7,19.6,13.2,40,22.5,60.9-9.2,20.8-16.6,41.1-22.2,60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8,142.9c-13.6-7.8-19.5-37.5-14.9-75.7,1.1-9.4,2.9-19.3,5.1-29.4,19.6,4.8,41,8.5,63.5,10.9,13.5,18.5,27.5,35.3,41.6,50-32.6,30.3-63.2,46.9-84,46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7,38.2-1.1,67.9-14.6,75.8-3,1.8-6.9,2.6-11.5,2.6-20.7,0-51.4-16.5-84-46.6,14-14.7,28-31.4,41.3-49.9,22.6-2.4,44-6.1,63.6-11,2.3,10.1,4.1,19.8,5.2,29.1zm38.5-66.7c-8.6,3.7-18,7-27.7,10.1-5.7-19.6-13.2-40-22.5-60.9,9.2-20.8,16.6-41.1,22.2-60.6,9.9,3.1,19.3,6.5,28.1,10.2,35.4,15.1,58.3,34.9,58.3,50.6,0,15.7-23,35.6-58.4,50.6zm-264.9-268.7z"/>
18
+ <circle class="st1" cx="420.9" cy="296.5" r="45.7"/>
19
+ <path class="st1" d="M520.5,78.1"/>
20
+ </g>
21
+ <circle class="st0" cx="420.8" cy="296.6" r="43"/>
22
+ <path class="st1" d="M466.1,296.6c0,25-20.2,45.2-45.2,45.2s-45.2-20.2-45.2-45.2,20.2-45.2,45.2-45.2,45.2,20.2,45.2,45.2ZM386,295.6v-6.3c0-1.1,1.2-5.1,1.8-6.2,1-1.9,2.9-3.5,4.6-4.7l-3.4-3.4c4-3.6,9.4-3.7,13.7-.7,1.9-4.7,6.6-7.1,11.6-6.7l-.8,4.2c5.9.2,13.1,4.1,13.1,10.8s0,.5-.7.7c-1.7.3-3.4-.4-5-.6s-1.2-.4-1.2.3,2.5,4.1,3,5.5,1,3.5.8,5.3c-5.6-.8-10.5-3.2-14.8-6.7.3,2.6,4.1,21.7,5.3,21.9s.8-.6,1-1.1,1.3-6.3,1.3-6.7c0-1-1.7-1.8-2.2-2.8-1.2-2.7,1.3-4.7,3.7-3.3s5.2,6.2,7.5,7.3,13,1.4,14.8,3.3-2.9,4.6-1.5,7.6c6.7-2.6,13.5-3.3,20.6-2.5,3.1-9.7,3.1-20.3-.9-29.8-7.3,0-14.7-3.6-17.2-10.8-2.5-7.2-.7-8.6-1.3-9.3-.8-1-6.3.6-7.4-1.5s.3-1.1-.2-1.4-1.9-.6-2.6-.8c-26-6.4-51.3,15.7-49.7,42.1,0,1.6,1.6,10.3,2.4,11.1s4.8,0,6.3,0,3.7.3,5,.5c2.9.4,7.2,2.4,9.4,2.5s2.4-.8,2.7-2.4c.4-2.6.5-7.4.5-10.1s-1-7.8-1.3-11.6c-.9-.2-.7,0-.9.5-.7,1.3-1.1,3.2-1.9,4.8s-5.2,8.7-5.7,9-.7-.5-.8-.8c-1.6-3.5-2-7.9-1.9-11.8-.9-1-5.4,4.9-6.7,5.3l-.8-.4v-.3h-.2ZM455.6,276.4c1.1-1.2-6-8.9-7.2-10-3-2.7-5.4-4.5-3.5,1.4s5.7,7.8,10.6,8.5h.1ZM410.9,270.1c-.4-.5-6.1,2.9-5.5,4.6,1.9-1.3,5.9-1.7,5.5-4.6ZM400.4,276.4c-.3-2.4-6.3-2.7-7.2-1s1.6,1.4,1.9,1.4c1.8.3,3.5-.6,5.2-.4h.1ZM411.3,276.8c3.8,1.3,6.6,3.6,10.9,3.7s0-3-1.2-3.9c-2.2-1.7-5.1-2.4-7.8-2.4s-1.6-.3-1.4.4c2.8.6,7.3.7,8.4,3.8-2.3-.3-3.9-1.6-6.2-2s-2.5-.5-2.6.3h0ZM420.6,290.3c-.8-5.1-5.7-10.8-10.9-11.6s-1.3-.4-.8.5,4.7,3.2,5.7,4,4.5,4.2,2.1,3.8-8.4-7.8-9.4-6.7c.2.9,1.1,1.9,1.7,2.7,3,3.8,6.9,6.8,11.8,7.4h-.2ZM395.3,279.8c-5,1.1-6.9,6.3-6.7,11,.7.8,5-3.8,5.4-4.5s2.7-4.6,1.1-4-2.9,4.4-4.2,4.6.2-2.1.4-2.5c1.1-1.6,2.9-3.1,4-4.6h0ZM400.4,281.5c-.4-.5-2,1.3-2.3,1.7-2.9,3.9-2.6,10.2-1.5,14.8.8.2.8-.3,1.2-.7,3-3.8,5.5-10.5,4.5-15.4-2.1,3.1-3.1,7.3-3.6,11h-1.3c0-4,1.9-7.7,3-11.4h0ZM426.9,305.9c0-1.7-1.7-1.4-2.5-1.9s-1.3-1.9-3-1.4c1.3,2.1,3,3.2,5.5,3.4h0ZM417.2,308.5c7.6.7,5.5-1.9,1.4-5.5-1.3-.3-1.5,4.5-1.4,5.5ZM437,309.7c-3.5-.3-7.8-2-11.2-2.1s-1.3,0-1.9.7c4,1.3,8.4,1.7,12.1,4l1-2.5h0ZM420.5,312.8c-7.3,0-15.1,3.7-20.4,8.8s-4.8,5.3-4.8,6.2c0,1.8,8.6,6.2,10.5,6.8,12.1,4.8,27.5,3.5,38.2-4.2s3.1-2.7,0-6.2c-5.7-6.6-14.7-11.4-23.4-11.3h-.1ZM398.7,316.9c-1.4-1.4-5-1.9-7-2.1s-5.3-.3-6.9.6l13.9,1.4h0ZM456.9,314.8h-7.4c-.9,0-4.9,1.1-6,1.6s-.8.6,0,.5c2.4,0,5.1-1,7.6-1.3s3.5.2,5.1,0,1.3-.3.6-.8h0Z"/>
23
+ <path class="st0" d="M386,295.6l.8.4c1.3-.3,5.8-6.2,6.7-5.3,0,3.9.3,8.3,1.9,11.8s0,1.2.8.8,5.1-7.8,5.7-9,1.3-3.5,1.9-4.8,0-.7.9-.5c.3,3.8,1.2,7.8,1.3,11.6s0,7.5-.5,10.1-1.1,2.4-2.7,2.4-6.5-2.1-9.4-2.5-3.7-.5-5-.5-5.4,1.1-6.3,0-2.2-9.5-2.4-11.1c-1.5-26.4,23.7-48.5,49.7-42.1s2.2.4,2.6.8,0,1,.2,1.4c1.1,2,6.5.5,7.4,1.5s.4,6.9,1.3,9.3c2.5,7.2,10,10.9,17.2,10.8,4,9.4,4,20.1.9,29.8-7.2-.7-13.9,0-20.6,2.5-1.3-3.1,4.1-5.1,1.5-7.6s-11.8-1.9-14.8-3.3-5.4-6.1-7.5-7.3-4.9.6-3.7,3.3,2.1,1.8,2.2,2.8-1,6.2-1.3,6.7-.3,1.3-1,1.1c-1.1-.3-5-19.3-5.3-21.9,4.3,3.5,9.2,5.9,14.8,6.7.2-1.9-.3-3.5-.8-5.3s-3-5.1-3-5.5c0-.8.9-.3,1.2-.3,1.6,0,3.3.8,5,.6s.7.3.7-.7c0-6.6-7.2-10.6-13.1-10.8l.8-4.2c-5.1-.3-9.6,2-11.6,6.7-4.3-3-9.8-3-13.7.7l3.4,3.4c-1.8,1.3-3.5,2.8-4.6,4.7s-1.8,5.1-1.8,6.2v6.6h.2ZM431.6,265c7.8,2.1,8.7-3.5.2-1.3l-.2,1.3ZM432.4,270.9c.3.6,6.4-.4,5.8-2.3s-4.6.6-5.7.6l-.2,1.7h.1ZM434.5,276c.8,1.2,5.7-1.8,5.5-2.7-.4-1.9-6.6,1.2-5.5,2.7ZM442.9,276.4c-.9-.9-5,2.8-4.6,4,.6,2.4,5.7-3,4.6-4ZM445.1,279.9c-.3.2-3.1,4.6-1.5,5s3.5-3.4,3.5-4-1.3-1.3-2-.9h0ZM448.9,287.4c2.1.8,3.8-5.1,2.3-5.5-1.9-.6-2.6,5.1-2.3,5.5ZM457.3,288.6c.5-1.7,1.1-4.7-1-5.5-1,.3-.6,3.9-.6,4.8l.3.5,1.3.2h0Z"/>
24
+ <path class="st0" d="M455.6,276.4c-5-.8-9.1-3.6-10.6-8.5s.5-4,3.5-1.4,8.3,8.7,7.2,10h-.1Z"/>
25
+ <path class="st0" d="M420.6,290.3c-4.9-.6-8.9-3.6-11.8-7.4s-1.5-1.8-1.7-2.7c1-1,8.5,6.6,9.4,6.7,2.4.4-1.8-3.5-2.1-3.8-1-.8-5.4-3.5-5.7-4-.4-.8.5-.5.8-.5,5.2.8,10.1,6.6,10.9,11.6h.2Z"/>
26
+ <path class="st0" d="M400.4,281.5c-1.1,3.7-3,7.3-3,11.4h1.3c.5-3.7,1.5-7.8,3.6-11,1,4.8-1.5,11.6-4.5,15.4s-.4.8-1.2.7c-1.1-4.5-1.3-10.8,1.5-14.8s1.9-2.2,2.3-1.7h0Z"/>
27
+ <path class="st0" d="M411.3,276.8c0-.8,2.1-.4,2.6-.3,2.4.4,4,1.7,6.2,2-1.2-3.1-5.7-3.2-8.4-3.8,0-.8.9-.4,1.4-.4,2.8,0,5.6.7,7.8,2.4,2.2,1.7,4,4,1.2,3.9-4.3,0-7.1-2.4-10.9-3.7h0Z"/>
28
+ <path class="st0" d="M395.3,279.8c-1.1,1.6-3,3-4,4.6s-1.9,2.8-.4,2.5,2.8-4,4.2-4.6-.9,3.6-1.1,4c-.4.7-4.7,5.2-5.4,4.5-.2-4.6,1.8-9.9,6.7-11h0Z"/>
29
+ <path class="st0" d="M437,309.7l-1,2.5c-3.6-2.3-8-2.8-12.1-4,.5-.7,1.1-.7,1.9-.7,3.4,0,7.8,1.8,11.2,2.1h0Z"/>
30
+ <path class="st0" d="M417.2,308.5c0-1,0-5.8,1.4-5.5,4,3.5,6.1,6.2-1.4,5.5Z"/>
31
+ <path class="st0" d="M400.4,276.4c-1.8-.3-3.5.7-5.2.4s-2.3-.8-1.9-1.4c.8-1.6,6.9-1.4,7.2,1h-.1Z"/>
32
+ <path class="st0" d="M410.9,270.1c.4,3-3.6,3.3-5.5,4.6-.6-1.8,5-5.1,5.5-4.6Z"/>
33
+ <path class="st0" d="M426.9,305.9c-2.5-.2-4.1-1.3-5.5-3.4,1.7-.4,2,.8,3,1.4s2.6.3,2.5,1.9h0Z"/>
34
+ <path class="st1" d="M432.4,270.9l.2-1.7c1.1,0,5.1-2.2,5.7-.6s-5.5,2.9-5.8,2.3h-.1Z"/>
35
+ <path class="st1" d="M431.6,265l.2-1.3c8.4-2.1,7.7,3.4-.2,1.3Z"/>
36
+ <path class="st1" d="M434.5,276c-1.1-1.5,5.1-4.6,5.5-2.7s-4.6,4-5.5,2.7Z"/>
37
+ <path class="st1" d="M442.9,276.4c1.1,1.1-4,6.4-4.6,4s3.7-4.9,4.6-4Z"/>
38
+ <path class="st1" d="M445.1,279.9c.7-.4,2.1,0,2,.9s-2.4,4.4-3.5,4,1.3-4.8,1.5-5h0Z"/>
39
+ <path class="st1" d="M448.9,287.4c-.3-.3.4-6.1,2.3-5.5,1.4.4-.2,6.2-2.3,5.5Z"/>
40
+ <path class="st1" d="M457.3,288.6l-1.3-.2-.3-.5c0-.9-.4-4.6.6-4.8,2.1.8,1.5,3.8,1,5.5h0Z"/>
41
+ <path class="st0" d="M420.5,312.8c8.9,0,17.9,4.7,23.4,11.3,5.6,6.6,3.8,3.5,0,6.2-10.7,7.7-26.1,9-38.2,4.2-1.9-.8-10.5-5.1-10.5-6.8s4-5.3,4.8-6.2c5.3-5,13.1-8.6,20.4-8.8h.1Z"/>
42
+ <path class="st0" d="M398.7,316.9l-13.9-1.4c1.7-1,5-.8,6.9-.6s5.6.7,7,2.1h0Z"/>
43
+ <path class="st0" d="M456.9,314.8c.7.5,0,.8-.6.8-1.6.2-3.5-.2-5.1,0-2.4.3-5.2,1.2-7.6,1.3s-1.1,0,0-.5,5.1-1.6,6-1.6h7.4,0Z"/>
44
+ </svg>
@@ -0,0 +1,155 @@
1
+ <% if (addOnEnabled.start) { ignoreFile() } %><% if (codeRouter) {
2
+
3
+ /// Code Router
4
+
5
+ %>import { StrictMode } from "react";
6
+ import ReactDOM from "react-dom/client";
7
+ import {
8
+ Outlet,
9
+ RouterProvider,
10
+ createRootRoute,
11
+ createRoute,
12
+ createRouter,
13
+ } from "@tanstack/react-router";
14
+ import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";
15
+ <% for(const route of routes) { %>import <%= route.jsName %> from "<%= relativePath(route.path) %>";
16
+ <% } %><% if (routes.length > 0) { %>
17
+ import Header from "./components/Header";
18
+ <% } %><% for(const integration of integrations.filter(i => i.type === 'layout' || i.type === 'provider')) { %>
19
+ import <%= integration.jsName %> from "<%= relativePath(integration.path) %>";
20
+ <% } %><% for(const integration of integrations.filter(i => i.type === 'root-provider')) { %>
21
+ import * as <%= integration.jsName %> from "<%= relativePath(integration.path) %>";
22
+ <% } %>
23
+
24
+ import "./styles.css";
25
+ import reportWebVitals from "./reportWebVitals.<%= js %>";
26
+
27
+ import App from "./App.<%= jsx %>";
28
+
29
+ const rootRoute = createRootRoute({
30
+ component: () => (
31
+ <>
32
+ <% for(const integration of integrations.filter(i => i.type === 'provider')) { %>
33
+ <<%= integration.jsName %>>
34
+ <% } %>
35
+ <% if (routes.length > 0) { %><Header /><% } %>
36
+ <Outlet />
37
+ <TanStackRouterDevtools />
38
+ <% for(const integration of integrations.filter(i => i.type === 'layout')) { %>
39
+ <<%= integration.jsName %> />
40
+ <% } %>
41
+ <% for(const integration of integrations.filter(i => i.type === 'provider').reverse()) { %>
42
+ </<%= integration.jsName %>>
43
+ <% } %>
44
+ </>
45
+ ),
46
+ });
47
+
48
+ const indexRoute = createRoute({
49
+ getParentRoute: () => rootRoute,
50
+ path: "/",
51
+ component: App,
52
+ });
53
+
54
+ const routeTree = rootRoute.addChildren([indexRoute<%= routes.map(route => `, ${route.jsName}(rootRoute)`).join('') %>]);
55
+
56
+ const router = createRouter({
57
+ routeTree,
58
+ context: {
59
+ <% for(const integration of integrations.filter(i => i.type === 'root-provider')) { %>
60
+ ...<%= integration.jsName %>.getContext(),
61
+ <% } %>
62
+ },
63
+ defaultPreload: "intent",
64
+ scrollRestoration: true,
65
+ defaultStructuralSharing: true,
66
+ defaultPreloadStaleTime: 0,
67
+ });
68
+ <% if (typescript) { %>
69
+ declare module "@tanstack/react-router" {
70
+ interface Register {
71
+ router: typeof router;
72
+ }
73
+ }
74
+
75
+ const rootElement = document.getElementById("app");
76
+ <% } else { %>
77
+ const rootElement = document.getElementById("app");
78
+ <% } %>if (rootElement && !rootElement.innerHTML) {
79
+ const root = ReactDOM.createRoot(rootElement);
80
+ root.render(
81
+ <StrictMode>
82
+ <% for(const integration of integrations.filter(i => i.type === 'root-provider')) { %>
83
+ <<%= integration.jsName %>.Provider>
84
+ <% } %>
85
+ <RouterProvider router={router} />
86
+ <% for(const integration of integrations.filter(i => i.type === 'root-provider').reverse()) { %>
87
+ </<%= integration.jsName %>.Provider>
88
+ <% } %>
89
+ </StrictMode>
90
+ );
91
+ }
92
+
93
+ // If you want to start measuring performance in your app, pass a function
94
+ // to log results (for example: reportWebVitals(console.log))
95
+ // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
96
+ reportWebVitals();
97
+ <% } else {
98
+
99
+ /* File Router */
100
+
101
+ %>import { StrictMode } from "react";
102
+ import ReactDOM from "react-dom/client";
103
+ import { RouterProvider, createRouter } from "@tanstack/react-router";
104
+ <% for(const integration of integrations.filter(i => i.type === 'root-provider')) { %>
105
+ import * as <%= integration.jsName %> from "<%= relativePath(integration.path) %>";
106
+ <% } %>
107
+
108
+ // Import the generated route tree
109
+ import { routeTree } from "./routeTree.gen";
110
+
111
+ import "./styles.css";
112
+ import reportWebVitals from "./reportWebVitals.<%= js %>";
113
+
114
+ // Create a new router instance
115
+ const router = createRouter({
116
+ routeTree,
117
+ context: {
118
+ <% for(const integration of integrations.filter(i => i.type === 'root-provider')) { %>
119
+ ...<%= integration.jsName %>.getContext(),
120
+ <% } %>
121
+ },
122
+ defaultPreload: "intent",
123
+ scrollRestoration: true,
124
+ defaultStructuralSharing: true,
125
+ defaultPreloadStaleTime: 0,
126
+ });
127
+
128
+ // Register the router instance for type safety
129
+ declare module "@tanstack/react-router" {
130
+ interface Register {
131
+ router: typeof router;
132
+ }
133
+ }
134
+
135
+ // Render the app
136
+ const rootElement = document.getElementById("app");
137
+ if (rootElement && !rootElement.innerHTML) {
138
+ const root = ReactDOM.createRoot(rootElement);
139
+ root.render(
140
+ <StrictMode>
141
+ <% for(const integration of integrations.filter(i => i.type === 'root-provider')) { %>
142
+ <<%= integration.jsName %>.Provider>
143
+ <% } %>
144
+ <RouterProvider router={router} />
145
+ <% for(const integration of integrations.filter(i => i.type === 'root-provider').reverse()) { %>
146
+ </<%= integration.jsName %>.Provider>
147
+ <% } %>
148
+ </StrictMode>
149
+ );
150
+ }
151
+
152
+ // If you want to start measuring performance in your app, pass a function
153
+ // to log results (for example: reportWebVitals(console.log))
154
+ // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
155
+ reportWebVitals();<% } %>
@@ -0,0 +1,28 @@
1
+ <% if (addOnEnabled.start) { ignoreFile() } %><% if (typescript) { %>
2
+ const reportWebVitals = (onPerfEntry?: () => void) => {
3
+ if (onPerfEntry && onPerfEntry instanceof Function) {
4
+ import("web-vitals").then(
5
+ ({ onCLS, onINP, onFCP, onLCP, onTTFB }) => {
6
+ onCLS(onPerfEntry);
7
+ onINP(onPerfEntry);
8
+ onFCP(onPerfEntry);
9
+ onLCP(onPerfEntry);
10
+ onTTFB(onPerfEntry);
11
+ }
12
+ );
13
+ }
14
+ };
15
+ <% } else { %>
16
+ const reportWebVitals = onPerfEntry => {
17
+ if (onPerfEntry && onPerfEntry instanceof Function) {
18
+ import('web-vitals').then(({ onCLS, onINP, onFCP, onLCP, onTTFB }) => {
19
+ onCLS(onPerfEntry);
20
+ onINP(onPerfEntry);
21
+ onFCP(onPerfEntry);
22
+ onLCP(onPerfEntry);
23
+ onTTFB(onPerfEntry);
24
+ });
25
+ }
26
+ };
27
+ <% } %>
28
+ export default reportWebVitals;
@@ -0,0 +1,82 @@
1
+ <% if (!fileRouter) { ignoreFile() } %>import { Outlet<% if (addOnEnabled.start) { %>
2
+ , HeadContent, Scripts<% } %>, <% if (addOnEnabled["tanstack-query"]) { %>createRootRouteWithContext<% } else { %>createRootRoute<% } %> } from '@tanstack/react-router'
3
+ import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'
4
+ <% if (addOns.length) { %>
5
+ import Header from '../components/Header'
6
+ <% } %><% for(const integration of integrations.filter(i => i.type === 'layout' || i.type === 'provider')) { %>
7
+ import <%= integration.jsName %> from "<%= relativePath(integration.path) %>";
8
+ <% } %>
9
+ <% if (addOnEnabled.start) { %>
10
+ import appCss from '../styles.css?url'
11
+ <% } %><% if (addOnEnabled["tanstack-query"]) { %>
12
+ import type { QueryClient } from '@tanstack/react-query'
13
+ <% if (addOnEnabled.tRPC) { %>
14
+ import type { TRPCRouter } from '@/integrations/trpc/router'
15
+ import type { TRPCOptionsProxy } from '@trpc/tanstack-react-query'
16
+ <% } %>
17
+
18
+ interface MyRouterContext {
19
+ queryClient: QueryClient
20
+ <% if (addOnEnabled.tRPC) { %>
21
+ trpc: TRPCOptionsProxy<TRPCRouter>
22
+ <% } %>
23
+ }<% } %>
24
+
25
+ export const Route = <% if (addOnEnabled["tanstack-query"]) { %>createRootRouteWithContext<MyRouterContext>()<% } else { %>createRootRoute<% } %>({
26
+ <% if (addOnEnabled.start) { %>
27
+ head: () => ({
28
+ meta: [
29
+ {
30
+ charSet: 'utf-8',
31
+ },
32
+ {
33
+ name: 'viewport',
34
+ content: 'width=device-width, initial-scale=1',
35
+ },
36
+ {
37
+ title: 'TanStack Start Starter',
38
+ },
39
+ ],
40
+ links: [
41
+ {
42
+ rel: 'stylesheet',
43
+ href: appCss,
44
+ },
45
+ ],
46
+ }),
47
+ <% } %>
48
+ component: () => (
49
+ <% if (addOnEnabled.start) { %><RootDocument><% } else { %><><% } %>
50
+ <% for(const integration of integrations.filter(i => i.type === 'provider')) { %>
51
+ <<%= integration.jsName %>>
52
+ <% } %>
53
+ <% if (addOns.length) { %>
54
+ <Header />
55
+ <% } %>
56
+ <Outlet />
57
+ <TanStackRouterDevtools />
58
+ <% for(const integration of integrations.filter(i => i.type === 'layout')) { %>
59
+ <<%= integration.jsName %> />
60
+ <% } %>
61
+ <% for(const integration of integrations.filter(i => i.type === 'provider').reverse()) { %>
62
+ </<%= integration.jsName %>>
63
+ <% } %>
64
+ <% if (addOnEnabled.start) { %></RootDocument><% } else { %></><% } %>
65
+ ),
66
+ })
67
+
68
+ <% if (addOnEnabled.start) { %>
69
+ function RootDocument({ children }: { children: React.ReactNode }) {
70
+ return (
71
+ <html lang="en">
72
+ <head>
73
+ <HeadContent />
74
+ </head>
75
+ <body>
76
+ {children}
77
+ <Scripts />
78
+ </body>
79
+ </html>
80
+ )
81
+ }
82
+ <% } %>
@@ -0,0 +1,67 @@
1
+ <% if (codeRouter) { ignoreFile() } %>
2
+ import { createFileRoute } from "@tanstack/react-router";
3
+ import logo from "../logo.svg";<% if (!tailwind) { %>
4
+ import "../App.css";
5
+ <% } %>
6
+
7
+ export const Route = createFileRoute("/")({
8
+ component: App,
9
+ });
10
+
11
+ function App() {
12
+ return (<% if (tailwind) { %>
13
+ <div className="text-center">
14
+ <header className="min-h-screen flex flex-col items-center justify-center bg-[#282c34] text-white text-[calc(10px+2vmin)]">
15
+ <img
16
+ src={logo}
17
+ className="h-[40vmin] pointer-events-none animate-[spin_20s_linear_infinite]"
18
+ alt="logo"
19
+ />
20
+ <p>
21
+ Edit <code>src/routes/index.tsx</code> and save to reload.
22
+ </p>
23
+ <a
24
+ className="text-[#61dafb] hover:underline"
25
+ href="https://reactjs.org"
26
+ target="_blank"
27
+ rel="noopener noreferrer"
28
+ >
29
+ Learn React
30
+ </a>
31
+ <a
32
+ className="text-[#61dafb] hover:underline"
33
+ href="https://tanstack.com"
34
+ target="_blank"
35
+ rel="noopener noreferrer"
36
+ >
37
+ Learn TanStack
38
+ </a>
39
+ </header>
40
+ </div>
41
+ <% } else { %>
42
+ <div className="App">
43
+ <header className="App-header">
44
+ <img src={logo} className="App-logo" alt="logo" />
45
+ <p>
46
+ Edit <code>src/routes/index.tsx</code> and save to reload.
47
+ </p>
48
+ <a
49
+ className="App-link"
50
+ href="https://reactjs.org"
51
+ target="_blank"
52
+ rel="noopener noreferrer"
53
+ >
54
+ Learn React
55
+ </a>
56
+ <a
57
+ className="App-link"
58
+ href="https://tanstack.com"
59
+ target="_blank"
60
+ rel="noopener noreferrer"
61
+ >
62
+ Learn TanStack
63
+ </a>
64
+ </header>
65
+ </div>
66
+ <% } %> );
67
+ }