@tanstack/cta-framework-react-cra 0.25.1 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/add-ons/convex/assets/src/routes/{demo.convex.tsx → demo/convex.tsx} +2 -2
- package/add-ons/db/info.json +1 -0
- package/add-ons/form/assets/src/components/demo.FormComponents.tsx.ejs +1 -1
- package/add-ons/form/assets/src/routes/{demo.form.address.tsx.ejs → demo/form.address.tsx.ejs} +1 -1
- package/add-ons/form/assets/src/routes/{demo.form.simple.tsx.ejs → demo/form.simple.tsx.ejs} +1 -1
- package/add-ons/form/info.json +2 -0
- package/add-ons/mcp/assets/src/routes/{demo.mcp-todos.tsx → demo/mcp-todos.tsx} +2 -2
- package/add-ons/mcp/info.json +1 -0
- package/add-ons/neon/info.json +1 -0
- package/add-ons/oRPC/info.json +1 -0
- package/add-ons/start/assets/public/tanstack-circle-logo.png +0 -0
- package/add-ons/start/assets/public/tanstack-word-logo-white.svg +1 -0
- package/add-ons/start/assets/src/data/demo.punk-songs.ts +13 -0
- package/add-ons/start/assets/src/routes/{api.demo-names.ts → demo/api.names.ts} +1 -1
- package/add-ons/start/assets/src/routes/{api.demo-tq-todos.ts.ejs → demo/api.tq-todos.ts.ejs} +1 -1
- package/add-ons/start/assets/src/routes/{demo.start.api-request.tsx.ejs → demo/start.api-request.tsx.ejs} +1 -1
- package/add-ons/start/assets/src/routes/demo/start.ssr.data-only.tsx.ejs +55 -0
- package/add-ons/start/assets/src/routes/demo/start.ssr.full-ssr.tsx.ejs +55 -0
- package/add-ons/start/assets/src/routes/demo/start.ssr.index.tsx.ejs +62 -0
- package/add-ons/start/assets/src/routes/demo/start.ssr.spa-mode.tsx.ejs +63 -0
- package/add-ons/start/assets/src/routes/index.tsx.ejs +154 -0
- package/add-ons/start/info.json +32 -0
- package/add-ons/start/package.json +2 -1
- package/add-ons/store/assets/src/routes/{demo.store.tsx.ejs → demo/store.tsx.ejs} +1 -1
- package/add-ons/store/info.json +1 -0
- package/add-ons/storybook/info.json +1 -0
- package/add-ons/tRPC/info.json +1 -0
- package/add-ons/table/assets/src/routes/{demo.table.tsx.ejs → demo/table.tsx.ejs} +2 -2
- package/add-ons/table/info.json +1 -0
- package/add-ons/tanstack-query/assets/src/routes/{demo.tanstack-query.tsx.ejs → demo/tanstack-query.tsx.ejs} +2 -2
- package/add-ons/tanstack-query/info.json +1 -0
- package/examples/tanchat/assets/src/components/example-AIAssistant.tsx +14 -7
- package/examples/tanchat/assets/src/components/example-GuitarRecommendation.tsx +1 -1
- package/examples/tanchat/assets/src/routes/{example.chat.tsx → demo/tanchat.tsx} +2 -2
- package/examples/tanchat/info.json +6 -4
- package/package.json +2 -2
- package/project/base/package.json +0 -1
- package/project/base/src/components/Header.tsx.ejs +148 -0
- package/project/base/src/routes/__root.tsx.ejs +2 -2
- package/project/base/src/routes/index.tsx.ejs +1 -1
- package/tests/snapshots/react-cra/cr-js-form-npm.json +5 -5
- package/tests/snapshots/react-cra/cr-js-npm.json +2 -2
- package/tests/snapshots/react-cra/cr-ts-npm.json +2 -2
- package/tests/snapshots/react-cra/cr-ts-start-npm.json +12 -7
- package/tests/snapshots/react-cra/cr-ts-start-tanstack-query-npm.json +14 -9
- package/tests/snapshots/react-cra/fr-ts-biome-npm.json +2 -2
- package/tests/snapshots/react-cra/fr-ts-npm.json +2 -2
- package/tests/snapshots/react-cra/fr-ts-tw-npm.json +2 -2
- package/examples/tanchat/assets/src/integrations/tanchat/header-user.tsx +0 -5
- package/examples/tanchat/assets/src/routes/api.messages.ts +0 -26
- package/examples/tanchat/assets/src/routes/api.sse.ts +0 -44
- package/examples/tanchat/assets/src/store/example-assistant.ts +0 -3
- package/examples/tanchat/assets/src/utils/demo.sse.ts +0 -29
- /package/add-ons/clerk/assets/src/routes/{demo.clerk.tsx → demo/clerk.tsx} +0 -0
- /package/add-ons/db/assets/src/routes/{demo.db-chat-api.ts → demo/db-chat-api.ts} +0 -0
- /package/add-ons/db/assets/src/routes/{demo.db-chat.tsx → demo/db-chat.tsx} +0 -0
- /package/add-ons/mcp/assets/src/routes/{api.mcp-todos.ts → demo/api.mcp-todos.ts} +0 -0
- /package/add-ons/neon/assets/src/routes/{demo.neon.tsx → demo/neon.tsx} +0 -0
- /package/add-ons/oRPC/assets/src/routes/{demo.orpc-todo.tsx → demo/orpc-todo.tsx} +0 -0
- /package/add-ons/sentry/assets/src/routes/{demo.sentry.testing.tsx → demo/sentry.testing.tsx} +0 -0
- /package/add-ons/start/assets/src/routes/{demo.start.server-funcs.tsx → demo/start.server-funcs.tsx} +0 -0
- /package/add-ons/storybook/assets/src/routes/{demo.storybook.tsx → demo/storybook.tsx} +0 -0
- /package/add-ons/tRPC/assets/src/routes/{demo.trpc-todo.tsx → demo/trpc-todo.tsx} +0 -0
- /package/examples/tanchat/assets/src/routes/{api.demo-chat.ts → demo/api.tanchat.ts} +0 -0
- /package/examples/tanchat/assets/src/{demo.index.css → routes/demo/tanchat.css} +0 -0
|
@@ -3,8 +3,8 @@ import { createFileRoute } from '@tanstack/react-router'
|
|
|
3
3
|
import { useQuery, useMutation } from 'convex/react'
|
|
4
4
|
import { Trash2, Plus, Check, Circle } from 'lucide-react'
|
|
5
5
|
|
|
6
|
-
import { api } from '
|
|
7
|
-
import { Id } from '
|
|
6
|
+
import { api } from '../../../convex/_generated/api'
|
|
7
|
+
import { Id } from '../../../convex/_generated/dataModel'
|
|
8
8
|
|
|
9
9
|
export const Route = createFileRoute('/demo/convex')({
|
|
10
10
|
ssr: false,
|
package/add-ons/db/info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useStore } from '@tanstack/react-form'
|
|
2
2
|
|
|
3
|
-
import { useFieldContext, useFormContext } from '
|
|
3
|
+
import { useFieldContext, useFormContext } from '@/hooks/demo.form-context'
|
|
4
4
|
<% if (addOnEnabled.shadcn) { %>
|
|
5
5
|
import { Button } from '@/components/ui/button'
|
|
6
6
|
import { Input } from '@/components/ui/input'
|
package/add-ons/form/assets/src/routes/{demo.form.address.tsx.ejs → demo/form.address.tsx.ejs}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { <% if (fileRouter) { %>createFileRoute<% } else { %>createRoute<% } %> } from '@tanstack/react-router'
|
|
2
2
|
|
|
3
|
-
import { useAppForm } from '
|
|
3
|
+
import { useAppForm } from '@/hooks/demo.form'
|
|
4
4
|
|
|
5
5
|
<% if (codeRouter) { %>
|
|
6
6
|
import type { RootRoute } from '@tanstack/react-router'
|
package/add-ons/form/assets/src/routes/{demo.form.simple.tsx.ejs → demo/form.simple.tsx.ejs}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { <% if (fileRouter) { %>createFileRoute<% } else { %>createRoute<% } %> } from '@tanstack/react-router'
|
|
2
2
|
import { z } from 'zod'
|
|
3
3
|
|
|
4
|
-
import { useAppForm } from '
|
|
4
|
+
import { useAppForm } from '@/hooks/demo.form'
|
|
5
5
|
|
|
6
6
|
<% if (codeRouter) { %>
|
|
7
7
|
import type { RootRoute } from '@tanstack/react-router'
|
package/add-ons/form/info.json
CHANGED
|
@@ -7,12 +7,14 @@
|
|
|
7
7
|
"link": "https://tanstack.com/form/latest",
|
|
8
8
|
"routes": [
|
|
9
9
|
{
|
|
10
|
+
"icon": "ClipboardType",
|
|
10
11
|
"url": "/demo/form/simple",
|
|
11
12
|
"name": "Simple Form",
|
|
12
13
|
"path": "src/routes/demo.form.simple.tsx",
|
|
13
14
|
"jsName": "FormSimpleDemo"
|
|
14
15
|
},
|
|
15
16
|
{
|
|
17
|
+
"icon": "ClipboardType",
|
|
16
18
|
"url": "/demo/form/address",
|
|
17
19
|
"name": "Address Form",
|
|
18
20
|
"path": "src/routes/demo.form.address.tsx",
|
|
@@ -14,7 +14,7 @@ function ORPCTodos() {
|
|
|
14
14
|
const [todos, setTodos] = useState<Todo[]>([])
|
|
15
15
|
|
|
16
16
|
useEffect(() => {
|
|
17
|
-
const eventSource = new EventSource('/api/mcp-todos')
|
|
17
|
+
const eventSource = new EventSource('/demo/api/mcp-todos')
|
|
18
18
|
eventSource.onmessage = (event) => {
|
|
19
19
|
setTodos(JSON.parse(event.data))
|
|
20
20
|
}
|
|
@@ -24,7 +24,7 @@ function ORPCTodos() {
|
|
|
24
24
|
const [todo, setTodo] = useState('')
|
|
25
25
|
|
|
26
26
|
const submitTodo = useCallback(async () => {
|
|
27
|
-
await fetch('/api/mcp-todos', {
|
|
27
|
+
await fetch('/demo/api/mcp-todos', {
|
|
28
28
|
method: 'POST',
|
|
29
29
|
body: JSON.stringify({ title: todo }),
|
|
30
30
|
})
|
package/add-ons/mcp/info.json
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"warning": "MCP is still in development and may change significantly or not be compatible with other add-ons.\nThe MCP implementation does not support authentication.",
|
|
9
9
|
"routes": [
|
|
10
10
|
{
|
|
11
|
+
"icon": "Webhook",
|
|
11
12
|
"url": "/demo/mcp-todos",
|
|
12
13
|
"name": "MCP",
|
|
13
14
|
"path": "src/routes/demo.mcp-todos.tsx",
|
package/add-ons/neon/info.json
CHANGED
package/add-ons/oRPC/info.json
CHANGED
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg height="660" viewBox="0 0 3178 660" width="3178" xmlns="http://www.w3.org/2000/svg"><g fill="#fff" transform="translate(.9778)"><g transform="translate(740.0222 38)"><path d="m101.695801 467h101.445312v-264.858398h90.917969v-80.390625h-283.28125v80.390625h90.917969z"/><path d="m241.544434 467h106.708984l68.666992-262.944336h33.017578v-82.304687h-95.703125zm70.820312-68.666992h211.025391l-21.054688-71.538086h-168.916015zm175.136719 68.666992h106.708984l-112.690429-345.249023h-62.685547v82.304687z"/><path d="m600.313965 467h101.445312v-179.443359h41.391602l-66.274414-38.759766 149.536133 218.203125h83.500976v-345.249023h-101.445312v176.572265h-41.391602l66.513672 38.759766-148.818359-215.332031h-84.458008z"/><path d="m1072.01318 473.220703c31.74154 0 58.85743-4.74528 81.34766-14.23584s39.67692-22.96875 51.56006-40.43457 17.82471-38.081869 17.82471-61.848145v-.239257c0-18.66211-3.94776-34.572754-11.84327-47.731934-7.8955-13.15918-19.89827-23.965658-36.0083-32.419434-16.11002-8.453776-36.52669-14.913737-61.25-19.379882l-34.69238-6.220703c-17.22656-3.190105-29.74772-6.898601-37.56348-11.125489-7.81575-4.226888-11.72363-10.248209-11.72363-18.063965v-.239257c0-5.263672 1.59505-10.008952 4.78516-14.23584 3.1901-4.226888 7.93538-7.576498 14.23584-10.048828 6.30045-2.472331 14.07633-3.708497 23.32763-3.708497 9.25131 0 17.5057 1.276042 24.76319 3.828126 7.25748 2.552083 13.07942 6.101074 17.46582 10.646972 4.38639 4.545899 6.8986 10.008952 7.53662 16.38916l.23926 2.392578h93.31054l-.23925-5.263671c-.95704-21.533204-7.01823-40.235189-18.1836-56.105957-11.16536-15.870769-27.27539-28.112793-48.33008-36.726075-21.05468-8.613281-46.97428-12.919922-77.75879-12.919922-27.27539 0-51.59993 4.625651-72.973628 13.876954-21.373698 9.251302-38.161621 22.330729-50.36377 39.238281-12.202148 16.907552-18.303222 36.925456-18.303222 60.053711v.239258c0 26.796875 9.131673 48.728841 27.395019 65.795898s44.541831 28.631185 78.835451 34.692383l34.69238 6.220703c19.14063 3.509115 32.61882 7.33724 40.43457 11.484375 7.81576 4.147135 11.72363 10.288086 11.72363 18.422852v.239257c0 5.742188-1.99381 10.846354-5.98144 15.3125s-9.61019 7.975261-16.86768 10.527344c-7.25748 2.552083-15.99039 3.828125-26.19873 3.828125-9.57031 0-18.3431-1.315918-26.31836-3.947754s-14.59472-6.260579-19.8584-10.88623c-5.26367-4.625651-8.61328-10.048828-10.04882-16.269532l-.47852-2.15332h-93.310546l.239258 4.545899c1.276042 22.649739 8.015137 41.909993 20.217285 57.780761 12.202149 15.870769 29.189453 27.953288 50.961914 36.247559 21.772459 8.294271 47.572429 12.441406 77.399899 12.441406z"/><path d="m1303.73682 467h101.44531v-264.858398h90.91797v-80.390625h-283.28125v80.390625h90.91797z"/><path d="m1443.58545 467h106.70898l68.667-262.944336h33.01757v-82.304687h-95.70312zm70.82031-68.666992h211.02539l-21.05469-71.538086h-168.91601zm175.13672 68.666992h106.70898l-112.69042-345.249023h-62.68555v82.304687z"/><path d="m1941.12451 473.220703c31.74154 0 59.65495-6.300456 83.74024-18.901367 24.08528-12.600912 42.94677-29.667969 56.58447-51.201172 13.63769-21.533203 20.45654-45.777995 20.45654-72.734375v-2.631836h-97.13867l-.23926 2.631836c-1.11653 12.122396-4.46614 22.689616-10.04883 31.70166-5.58268 9.012044-12.91992 15.990397-22.01171 20.935059-9.0918 4.944661-19.45964 7.416992-31.10352 7.416992-13.87695 0-25.9196-3.748372-36.12793-11.245117s-18.06396-18.462728-23.56689-32.897949c-5.50293-14.435222-8.2544-31.861166-8.2544-52.277832v-.239258c0-20.257162 2.75147-37.483724 8.2544-51.679688 5.50293-14.195963 13.31868-25.042317 23.44726-32.539062s22.13135-11.245117 36.0083-11.245117c12.60091 0 23.40739 2.591959 32.41944 7.775878 9.01204 5.18392 16.11002 12.281902 21.29394 21.293946s8.2544 19.260254 9.21143 30.744629l.23925 2.871093h97.13868v-2.15332c0-27.115885-6.69922-51.480306-20.09766-73.093262-13.39844-21.612955-32.10042-38.719889-56.10596-51.3208-24.00553-12.600912-52.03857-18.901368-84.09912-18.901368-35.09114 0-65.43701 6.978353-91.0376 20.935059-25.60058 13.956706-45.33935 34.213867-59.2163 60.771484-13.87696 26.557618-20.81543 58.817546-20.81543 96.779786v.239257c0 37.96224 6.8986 70.262045 20.6958 96.899414 13.7972 26.63737 33.49609 46.974284 59.09668 61.010743 25.60058 14.036458 56.0262 21.054687 91.27685 21.054687z"/><path d="m2214.23975 379.670898 75.36621-101.445312h26.0791l116.04004-156.474609h-106.46973l-106.70898 146.425781h-4.30664zm-99.05274 87.329102h101.44531v-345.249023h-101.44531zm203.84766 0h117.9541l-140.20508-226.577148-74.16992 64.121093z"/></g><path d="m305.114318.62443771c8.717817-1.14462121 17.926803-.36545135 26.712694-.36545135 32.548987 0 64.505987 5.05339923 95.64868 14.63098274 39.74418 12.2236582 76.762804 31.7666864 109.435876 57.477568 40.046637 31.5132839 73.228974 72.8472109 94.520714 119.2362609 39.836383 86.790386 39.544267 191.973146-1.268422 278.398081-26.388695 55.880442-68.724007 102.650458-119.964986 136.75724-41.808813 27.828603-90.706831 44.862601-140.45707 50.89341-63.325458 7.677926-131.784923-3.541603-188.712259-32.729444-106.868873-54.795293-179.52309291-165.076271-180.9604082-285.932068-.27660564-23.300971.08616998-46.74071 4.69884909-69.814998 7.51316071-37.57857 20.61272131-73.903917 40.28618971-106.877282 21.2814003-35.670293 48.7704861-67.1473767 81.6882804-92.5255597 38.602429-29.7610135 83.467691-51.1674988 130.978372-62.05777669 11.473831-2.62966514 22.9946-4.0869914 34.57273-5.4964306l3.658171-.44480576c3.050084-.37153079 6.104217-.74794222 9.162589-1.14972654zm-110.555861 549.44131429c-14.716752 1.577863-30.238964 4.25635-42.869928 12.522173 2.84343.683658 6.102369.004954 9.068638 0 7.124652-.011559 14.317732-.279903 21.434964.032202 17.817402.781913 36.381729 3.63214 53.58741 8.350042 22.029372 6.040631 41.432961 17.928687 62.656049 25.945156 22.389644 8.456554 44.67706 11.084675 68.427 11.084675 11.96813 0 23.845573-.035504 35.450133-3.302696-6.056202-3.225083-14.72582-2.619864-21.434964-3.963236-14.556814-2.915455-28.868774-6.474936-42.869928-11.470264-10.304996-3.676672-20.230803-8.214291-30.11097-12.848661l-6.348531-2.985046c-9.1705-4.309263-18.363277-8.560752-27.845391-12.142608-24.932161-9.418465-52.560181-14.071964-79.144482-11.221737zm22.259385-62.614168c-29.163917 0-58.660076 5.137344-84.915434 18.369597-6.361238 3.206092-12.407546 7.02566-18.137277 11.258891-1.746125 1.290529-4.841829 2.948483-5.487351 5.191839-.654591 2.275558 1.685942 4.182039 3.014086 5.637703 6.562396-3.497556 12.797498-7.199878 19.78612-9.855246 45.19892-17.169893 99.992458-13.570779 145.098218 2.172348 22.494346 7.851335 43.219483 19.592421 65.129314 28.800338 24.503461 10.297807 49.53043 16.975034 75.846795 20.399104 31.04195 4.037546 66.433549.7654 94.808495-13.242161 9.970556-4.921843 23.814245-12.422267 28.030337-23.320339-5.207047.454947-9.892236 2.685918-14.83959 4.224149-7.866632 2.445646-15.827248 4.51974-23.908229 6.138887-27.388113 5.486604-56.512458 6.619429-84.091013 1.639788-25.991939-4.693152-50.142596-14.119246-74.179513-24.03502l-3.068058-1.268177c-2.045137-.846788-4.089983-1.695816-6.135603-2.544467l-3.069142-1.272366c-12.279956-5.085721-24.606928-10.110797-37.210937-14.51024-24.485325-8.546552-50.726667-13.784628-76.671218-13.784628zm51.114145-447.9909432c-34.959602 7.7225298-66.276908 22.7605319-96.457338 41.7180089-17.521434 11.0054099-34.281927 22.2799893-49.465301 36.4444283-22.5792616 21.065423-39.8360564 46.668751-54.8866988 73.411509-15.507372 27.55357-25.4498976 59.665686-30.2554517 90.824149-4.7140432 30.568106-5.4906485 62.70747-.0906864 93.301172 6.7503648 38.248526 19.5989769 74.140579 39.8896436 107.337631 6.8187918-3.184625 11.659796-10.445603 17.3128555-15.336896 11.4149428-9.875888 23.3995608-19.029311 36.2745548-26.928535 4.765981-2.923712 9.662222-5.194315 14.83959-7.275014 1.953055-.785216 5.14604-1.502727 6.06527-3.647828 1.460876-3.406732-1.240754-9.335897-1.704904-12.865654-1.324845-10.095517-2.124534-20.362774-1.874735-30.549941.725492-29.668947 6.269727-59.751557 16.825623-87.521453 7.954845-20.924233 20.10682-39.922168 34.502872-56.971512 4.884699-5.785498 10.077731-11.170545 15.437296-16.512656 3.167428-3.157378 7.098271-5.858983 9.068639-9.908915-10.336599.006606-20.674847 2.987289-30.503603 6.013385-21.174447 6.519522-41.801477 16.19312-59.358362 29.841512-8.008432 6.226409-13.873368 14.387371-21.44733 20.939921-2.32322 2.010516-6.484901 4.704691-9.695199 3.187928-4.8500728-2.29042-4.1014979-11.835213-4.6571581-16.222019-2.1369011-16.873476 4.2548401-38.216325 12.3778671-52.843142 13.039878-23.479694 37.150915-43.528712 65.467327-42.82854 12.228647.302197 22.934587 4.551115 34.625711 7.324555-2.964621-4.211764-6.939158-7.28162-10.717482-10.733763-9.257431-8.459031-19.382979-16.184864-30.503603-22.028985-4.474136-2.350694-9.291232-3.77911-14.015169-5.506421-2.375159-.867783-5.36616-2.062533-6.259834-4.702213-1.654614-4.888817 7.148561-9.416813 10.381943-11.478522 12.499882-7.969406 27.826705-14.525258 42.869928-14.894334 23.509209-.577147 46.479246 12.467678 56.162903 34.665926 3.404469 7.803171 4.411273 16.054969 5.079109 24.382907l.121749 1.56229.174325 2.345587c.01913.260708.038244.521433.057403.782164l.11601 1.56437.120128 1.563971c7.38352-6.019164 12.576553-14.876995 19.78612-21.323859 16.861073-15.07846 39.936636-21.7722 61.831627-14.984333 19.786945 6.133107 36.984382 19.788105 47.105807 37.959541 2.648042 4.754231 10.035685 16.373942 4.698379 21.109183-4.177345 3.707277-9.475079.818243-13.880788-.719162-3.33605-1.16376-6.782939-1.90214-10.241828-2.585698l-1.887262-.369639c-.629089-.122886-1.257979-.246187-1.886079-.372129-11.980496-2.401886-25.91652-2.152533-37.923398-.041284-7.762754 1.364839-15.349083 4.127545-23.083807 5.271929v1.651348c21.149714.175043 41.608563 12.240618 52.043268 30.549941 4.323267 7.585468 6.482428 16.267431 8.138691 24.770223 2.047864 10.50918.608423 21.958802-2.263037 32.201289-.962925 3.433979-2.710699 9.255807-6.817143 10.046802-2.902789.558982-5.36781-2.330878-7.024898-4.279468-4.343878-5.10762-8.475879-9.96341-13.573278-14.374161-12.895604-11.157333-26.530715-21.449361-40.396663-31.373138-7.362086-5.269452-15.425755-12.12007-23.908229-15.340199 2.385052 5.745041 4.721463 11.086326 5.532694 17.339156 2.385876 18.392716-5.314223 35.704625-16.87179 49.540445-3.526876 4.222498-7.29943 8.475545-11.744712 11.755948-1.843407 1.360711-4.156734 3.137561-6.595373 2.752797-7.645687-1.207961-8.555849-12.73272-9.728176-18.637115-3.970415-19.998652-2.375984-39.861068 3.132802-59.448534-4.901187 2.485279-8.443727 7.923994-11.521293 12.385111-6.770975 9.816439-12.645804 20.199291-16.858599 31.375615-16.777806 44.519521-16.616219 96.664142 5.118834 139.523233 2.427098 4.786433 6.110614 4.144058 10.894733 4.144058.720854 0 1.44257-.004515 2.164851-.010924l2.168232-.022283c4.338648-.045438 8.686803-.064635 12.979772.508795 2.227588.297243 5.320818.032202 7.084256 1.673642 2.111344 1.966755.986008 5.338808.4996 7.758859-1.358647 6.765574-1.812904 12.914369-1.812904 19.816178 9.02412-1.398692 11.525415-15.866153 14.724172-23.118874 3.624982-8.216283 7.313444-16.440823 10.667192-24.770223 1.648843-4.093692 3.854171-8.671229 3.275427-13.210785-.649644-5.10184-4.335633-10.510831-6.904531-14.862134-4.86244-8.234447-10.389363-16.70834-13.969002-25.595896-2.861567-7.104926-.197036-15.983399 7.871579-18.521521 4.450228-1.400344 9.198073 1.345848 12.094266 4.562675 6.07269 6.74328 9.992815 16.777697 14.401823 24.692609l34.394873 61.925556c2.920926 5.243856 5.848447 10.481933 8.836976 15.687808 1.165732 2.031158 2.352075 5.167068 4.740424 6.0332 2.127008.77118 5.033095-.325315 7.148561-.748886 5.492297-1.099798 10.97635-2.287117 16.488434-3.28288 6.605266-1.193099 16.673928-.969342 21.434964-6.129805-6.963066-2.205375-15.011895-2.074919-22.259386-1.577863-4.352947.298894-9.178287 1.856116-13.178381-.686135-5.953149-3.783239-9.910373-12.522173-13.552668-18.377854-8.980425-14.439388-17.441465-29.095929-26.041008-43.760726l-1.376261-2.335014-2.765943-4.665258c-1.380597-2.334387-2.750786-4.67476-4.079753-7.036188-1.02723-1.826391-2.549937-4.233231-1.078344-6.24705 1.545791-2.114476 4.91472-2.239146 7.956473-2.243117l.603351.000261c1.195428.001526 2.315572.002427 3.222811-.11692 12.27399-1.615019 24.718635-2.952611 37.098976-2.952611-.963749-3.352237-3.719791-7.141255-2.838484-10.73046 1.972017-8.030506 13.526287-10.543033 18.899867-4.780653 3.60767 3.868283 5.704174 9.192229 8.051303 13.859765 3.097352 6.162006 6.624228 12.118418 9.940876 18.16483 5.805578 10.585967 12.146205 20.881297 18.116667 31.375615.49237.865561.999687 1.726685 1.512269 2.587098l.771613 1.290552c2.577138 4.303168 5.164895 8.635123 6.553094 13.461506-20.735854-.9487-36.30176-25.018751-45.343193-41.283704-.721369 2.604176.450959 4.928448 1.388326 7.431066 1.948109 5.197619 4.276275 10.147535 7.20627 14.862134 4.184765 6.732546 8.982075 13.665732 15.313633 18.553722 11.236043 8.673707 26.05255 8.721596 39.572241 7.794364 8.669619-.595311 19.50252-4.542034 28.030338-1.864372 8.513803 2.673532 11.940924 12.063098 6.884745 19.276187-3.787393 5.403211-8.842747 7.443452-15.128962 8.257566 4.445282 9.53571 10.268996 18.385285 14.490036 28.072919 1.758491 4.035895 3.59118 10.22102 7.8048 12.350433 2.805507 1.416857 6.824562.09743 9.85761.034678-3.043765-8.053625-8.742992-14.887729-11.541904-23.118874 8.533589.390544 16.786875 4.843404 24.732651 7.685374 15.630376 5.590144 31.063836 11.701854 46.475333 17.86913l7.112077 2.848685c6.338978 2.538947 12.71588 5.052299 18.961699 7.812528 2.285297 1.009799 5.449427 3.370401 7.975455 1.917215 2.061054-1.186494 3.394144-4.015253 4.665403-5.931643 3.55573-5.361927 6.775921-10.928622 9.965609-16.513481 12.774414-22.36586 22.143967-46.872692 28.402976-71.833646 20.645168-82.323009 2.934117-173.156241-46.677107-241.922507-19.061454-26.420745-43.033164-49.262193-69.46165-68.1783861-66.13923-47.336721-152.911262-66.294198-232.486917-48.7172481zm135.205158 410.5292842c-17.532977 4.570931-35.601827 8.714164-53.58741 11.040088 2.365265 8.052799 8.145286 15.885969 12.376218 23.118874 1.635653 2.796558 3.3859 6.541816 6.618457 7.755557 3.651364 1.370619 8.063669-.853747 11.508927-1.975838-1.595256-4.364513-4.279573-8.292245-6.476657-12.385112-.905215-1.687677-2.305907-3.685809-1.559805-5.68972 1.410585-3.786541 7.266452-3.563609 10.509727-4.221671 8.54678-1.733916 17.004522-3.898008 25.557073-5.611281 3.150939-.631641 7.538512-2.342438 10.705115-1.285575 2.371037.791232 3.800147 2.744743 5.152304 4.781948l.606196.918752c.80912 1.222827 1.637246 2.41754 2.671212 3.351165 3.457625 3.121874 8.628398 3.60159 13.017619 4.453686-2.678546-6.027421-7.130424-11.301001-9.984571-17.339156-1.659561-3.511592-3.023155-8.677834-6.656381-10.707341-5.005064-2.795733-15.341663 2.461334-20.458024 3.795624zm-110.472507-40.151706c-.825246 10.467897-4.036369 18.984725-9.068639 28.072919 5.76683.729896 11.649079.989984 17.312856 2.39363 4.244947 1.051908 8.156828 3.058296 12.366325 4.211763-2.250671-6.157877-6.426367-11.651913-9.661398-17.339156-3.266358-5.740912-6.189758-12.717032-10.949144-17.339156z"/></g></svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createServerFn } from "@tanstack/react-start";
|
|
2
|
+
|
|
3
|
+
export const getPunkSongs = createServerFn({
|
|
4
|
+
method: "GET",
|
|
5
|
+
}).handler(async () => [
|
|
6
|
+
{ id: 1, name: "Teenage Dirtbag", artist: "Wheatus" },
|
|
7
|
+
{ id: 2, name: "Smells Like Teen Spirit", artist: "Nirvana" },
|
|
8
|
+
{ id: 3, name: "The Middle", artist: "Jimmy Eat World" },
|
|
9
|
+
{ id: 4, name: "My Own Worst Enemy", artist: "Lit" },
|
|
10
|
+
{ id: 5, name: "Fat Lip", artist: "Sum 41" },
|
|
11
|
+
{ id: 6, name: "All the Small Things", artist: "blink-182" },
|
|
12
|
+
{ id: 7, name: "Beverly Hills", artist: "Weezer" },
|
|
13
|
+
]);
|
|
@@ -6,7 +6,7 @@ import { useEffect, useState } from 'react'
|
|
|
6
6
|
import { createFileRoute } from '@tanstack/react-router'
|
|
7
7
|
|
|
8
8
|
function getNames() {
|
|
9
|
-
return fetch('/api/
|
|
9
|
+
return fetch('/demo/api/names').then((res) => res.json())
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export const Route = createFileRoute('/demo/start/api-request')({
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { getPunkSongs } from "@/data/demo.punk-songs";
|
|
3
|
+
|
|
4
|
+
export const Route = createFileRoute("/demo/start/ssr/data-only")({
|
|
5
|
+
ssr: "data-only",
|
|
6
|
+
component: RouteComponent,
|
|
7
|
+
loader: async () => await getPunkSongs(),
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
function RouteComponent() {
|
|
11
|
+
const punkSongs = Route.useLoaderData();
|
|
12
|
+
<% if (tailwind) { %>
|
|
13
|
+
return (
|
|
14
|
+
<div
|
|
15
|
+
className="flex items-center justify-center min-h-screen bg-gradient-to-br from-zinc-800 to-black p-4 text-white"
|
|
16
|
+
style={{
|
|
17
|
+
backgroundImage:
|
|
18
|
+
"radial-gradient(50% 50% at 20% 60%, #1a1a1a 0%, #0a0a0a 50%, #000000 100%)",
|
|
19
|
+
}}
|
|
20
|
+
>
|
|
21
|
+
<div className="w-full max-w-2xl p-8 rounded-xl backdrop-blur-md bg-black/50 shadow-xl border-8 border-black/10">
|
|
22
|
+
<h1 className="text-3xl font-bold mb-6 text-pink-400">
|
|
23
|
+
Data Only SSR - Punk Songs
|
|
24
|
+
</h1>
|
|
25
|
+
<ul className="space-y-3">
|
|
26
|
+
{punkSongs.map((song) => (
|
|
27
|
+
<li
|
|
28
|
+
key={song.id}
|
|
29
|
+
className="bg-white/10 border border-white/20 rounded-lg p-4 backdrop-blur-sm shadow-md"
|
|
30
|
+
>
|
|
31
|
+
<span className="text-lg text-white font-medium">
|
|
32
|
+
{song.name}
|
|
33
|
+
</span>
|
|
34
|
+
<span className="text-white/60"> - {song.artist}</span>
|
|
35
|
+
</li>
|
|
36
|
+
))}
|
|
37
|
+
</ul>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
<% } else { %>
|
|
42
|
+
return (
|
|
43
|
+
<div>
|
|
44
|
+
<h1>Data Only SSR - Punk Songs</h1>
|
|
45
|
+
<ul>
|
|
46
|
+
{punkSongs.map((song) => (
|
|
47
|
+
<li key={song.id}>
|
|
48
|
+
{song.name} - {song.artist}
|
|
49
|
+
</li>
|
|
50
|
+
))}
|
|
51
|
+
</ul>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
<% } %>
|
|
55
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { getPunkSongs } from "@/data/demo.punk-songs";
|
|
3
|
+
|
|
4
|
+
export const Route = createFileRoute("/demo/start/ssr/full-ssr")({
|
|
5
|
+
component: RouteComponent,
|
|
6
|
+
loader: async () => await getPunkSongs(),
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
function RouteComponent() {
|
|
10
|
+
const punkSongs = Route.useLoaderData();
|
|
11
|
+
|
|
12
|
+
<% if (tailwind) { %>
|
|
13
|
+
return (
|
|
14
|
+
<div
|
|
15
|
+
className="flex items-center justify-center min-h-screen bg-gradient-to-br from-zinc-800 to-black p-4 text-white"
|
|
16
|
+
style={{
|
|
17
|
+
backgroundImage:
|
|
18
|
+
"radial-gradient(50% 50% at 20% 60%, #1a1a1a 0%, #0a0a0a 50%, #000000 100%)",
|
|
19
|
+
}}
|
|
20
|
+
>
|
|
21
|
+
<div className="w-full max-w-2xl p-8 rounded-xl backdrop-blur-md bg-black/50 shadow-xl border-8 border-black/10">
|
|
22
|
+
<h1 className="text-3xl font-bold mb-6 text-purple-400">
|
|
23
|
+
Full SSR - Punk Songs
|
|
24
|
+
</h1>
|
|
25
|
+
<ul className="space-y-3">
|
|
26
|
+
{punkSongs.map((song) => (
|
|
27
|
+
<li
|
|
28
|
+
key={song.id}
|
|
29
|
+
className="bg-white/10 border border-white/20 rounded-lg p-4 backdrop-blur-sm shadow-md"
|
|
30
|
+
>
|
|
31
|
+
<span className="text-lg text-white font-medium">
|
|
32
|
+
{song.name}
|
|
33
|
+
</span>
|
|
34
|
+
<span className="text-white/60"> - {song.artist}</span>
|
|
35
|
+
</li>
|
|
36
|
+
))}
|
|
37
|
+
</ul>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
<% } else { %>
|
|
42
|
+
return (
|
|
43
|
+
<div>
|
|
44
|
+
<h1>Full SSR - Punk Songs</h1>
|
|
45
|
+
<ul>
|
|
46
|
+
{punkSongs.map((song) => (
|
|
47
|
+
<li key={song.id}>
|
|
48
|
+
{song.name} - {song.artist}
|
|
49
|
+
</li>
|
|
50
|
+
))}
|
|
51
|
+
</ul>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
<% } %>
|
|
55
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { createFileRoute, Link } from "@tanstack/react-router";
|
|
2
|
+
|
|
3
|
+
export const Route = createFileRoute("/demo/start/ssr/")({
|
|
4
|
+
component: RouteComponent,
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
function RouteComponent() {
|
|
8
|
+
<% if (tailwind) { %>
|
|
9
|
+
return (
|
|
10
|
+
<div
|
|
11
|
+
className="flex items-center justify-center min-h-screen bg-gradient-to-br from-zinc-900 to-black p-4 text-white"
|
|
12
|
+
style={{
|
|
13
|
+
backgroundImage:
|
|
14
|
+
"radial-gradient(50% 50% at 20% 60%, #1a1a1a 0%, #0a0a0a 50%, #000000 100%)",
|
|
15
|
+
}}
|
|
16
|
+
>
|
|
17
|
+
<div className="w-full max-w-2xl p-8 rounded-xl backdrop-blur-md bg-black/50 shadow-xl border-8 border-black/10">
|
|
18
|
+
<h1 className="text-4xl font-bold mb-8 text-center bg-gradient-to-r from-pink-500 via-purple-500 to-green-400 bg-clip-text text-transparent">
|
|
19
|
+
SSR Demos
|
|
20
|
+
</h1>
|
|
21
|
+
<div className="flex flex-col gap-4">
|
|
22
|
+
<Link
|
|
23
|
+
to="/demo/start/ssr/spa-mode"
|
|
24
|
+
className="text-2xl font-bold py-6 px-8 rounded-lg bg-gradient-to-r from-pink-600 to-pink-500 hover:from-pink-700 hover:to-pink-600 text-white text-center shadow-lg transform transition-all hover:scale-105 hover:shadow-pink-500/50 border-2 border-pink-400"
|
|
25
|
+
>
|
|
26
|
+
SPA Mode
|
|
27
|
+
</Link>
|
|
28
|
+
<Link
|
|
29
|
+
to="/demo/start/ssr/full-ssr"
|
|
30
|
+
className="text-2xl font-bold py-6 px-8 rounded-lg bg-gradient-to-r from-purple-600 to-purple-500 hover:from-purple-700 hover:to-purple-600 text-white text-center shadow-lg transform transition-all hover:scale-105 hover:shadow-purple-500/50 border-2 border-purple-400"
|
|
31
|
+
>
|
|
32
|
+
Full SSR
|
|
33
|
+
</Link>
|
|
34
|
+
<Link
|
|
35
|
+
to="/demo/start/ssr/data-only"
|
|
36
|
+
className="text-2xl font-bold py-6 px-8 rounded-lg bg-gradient-to-r from-green-500 to-emerald-500 hover:from-green-600 hover:to-emerald-600 text-white text-center shadow-lg transform transition-all hover:scale-105 hover:shadow-green-500/50 border-2 border-green-400"
|
|
37
|
+
>
|
|
38
|
+
Data Only
|
|
39
|
+
</Link>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
);
|
|
44
|
+
<% } else { %>
|
|
45
|
+
return (
|
|
46
|
+
<div>
|
|
47
|
+
<h1>SSR Demos</h1>
|
|
48
|
+
<ul>
|
|
49
|
+
<li>
|
|
50
|
+
<Link to="/demo/start/ssr/spa-mode">SPA Mode</Link>
|
|
51
|
+
</li>
|
|
52
|
+
<li>
|
|
53
|
+
<Link to="/demo/start/ssr/full-ssr">Full SSR</Link>
|
|
54
|
+
</li>
|
|
55
|
+
<li>
|
|
56
|
+
<Link to="/demo/start/ssr/data-only">Data Only</Link>
|
|
57
|
+
</li>
|
|
58
|
+
</ul>
|
|
59
|
+
</div>
|
|
60
|
+
);
|
|
61
|
+
<% } %>
|
|
62
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
3
|
+
import { getPunkSongs } from "@/data/demo.punk-songs";
|
|
4
|
+
|
|
5
|
+
export const Route = createFileRoute("/demo/start/ssr/spa-mode")({
|
|
6
|
+
ssr: false,
|
|
7
|
+
component: RouteComponent,
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
function RouteComponent() {
|
|
11
|
+
const [punkSongs, setPunkSongs] = useState<
|
|
12
|
+
Awaited<ReturnType<typeof getPunkSongs>>
|
|
13
|
+
>([]);
|
|
14
|
+
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
getPunkSongs().then(setPunkSongs);
|
|
17
|
+
}, []);
|
|
18
|
+
|
|
19
|
+
<% if (tailwind) { %>
|
|
20
|
+
return (
|
|
21
|
+
<div
|
|
22
|
+
className="flex items-center justify-center min-h-screen bg-gradient-to-br from-zinc-800 to-black p-4 text-white"
|
|
23
|
+
style={{
|
|
24
|
+
backgroundImage:
|
|
25
|
+
"radial-gradient(50% 50% at 20% 60%, #1a1a1a 0%, #0a0a0a 50%, #000000 100%)",
|
|
26
|
+
}}
|
|
27
|
+
>
|
|
28
|
+
<div className="w-full max-w-2xl p-8 rounded-xl backdrop-blur-md bg-black/50 shadow-xl border-8 border-black/10">
|
|
29
|
+
<h1 className="text-3xl font-bold mb-6 text-green-400">
|
|
30
|
+
SPA Mode - Punk Songs
|
|
31
|
+
</h1>
|
|
32
|
+
<ul className="space-y-3">
|
|
33
|
+
{punkSongs.map((song) => (
|
|
34
|
+
<li
|
|
35
|
+
key={song.id}
|
|
36
|
+
className="bg-white/10 border border-white/20 rounded-lg p-4 backdrop-blur-sm shadow-md"
|
|
37
|
+
>
|
|
38
|
+
<span className="text-lg text-white font-medium">
|
|
39
|
+
{song.name}
|
|
40
|
+
</span>
|
|
41
|
+
<span className="text-white/60"> - {song.artist}</span>
|
|
42
|
+
</li>
|
|
43
|
+
))}
|
|
44
|
+
</ul>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
);
|
|
48
|
+
<% } else { %>
|
|
49
|
+
return (
|
|
50
|
+
<div>
|
|
51
|
+
<h1>SPA Mode - Punk Songs</h1>
|
|
52
|
+
</div>
|
|
53
|
+
<ul>
|
|
54
|
+
{punkSongs.map((song) => (
|
|
55
|
+
<li key={song.id}>
|
|
56
|
+
{song.name} - {song.artist}
|
|
57
|
+
</li>
|
|
58
|
+
))}
|
|
59
|
+
</ul>
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
<% } %>
|
|
63
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
<% if (!tailwind) { %>
|
|
3
|
+
import logo from "../logo.svg";
|
|
4
|
+
import "../App.css";
|
|
5
|
+
<% } else { %>
|
|
6
|
+
import {
|
|
7
|
+
Zap,
|
|
8
|
+
Server,
|
|
9
|
+
Route as RouteIcon,
|
|
10
|
+
Shield,
|
|
11
|
+
Waves,
|
|
12
|
+
Sparkles,
|
|
13
|
+
} from "lucide-react";
|
|
14
|
+
<% } %>
|
|
15
|
+
|
|
16
|
+
export const Route = createFileRoute("/")({
|
|
17
|
+
component: App,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
function App() {
|
|
21
|
+
<% if (tailwind) { %>
|
|
22
|
+
const features = [
|
|
23
|
+
{
|
|
24
|
+
icon: <Zap className="w-12 h-12 text-cyan-400" />,
|
|
25
|
+
title: "Powerful Server Functions",
|
|
26
|
+
description:
|
|
27
|
+
"Write server-side code that seamlessly integrates with your client components. Type-safe, secure, and simple.",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
icon: <Server className="w-12 h-12 text-cyan-400" />,
|
|
31
|
+
title: "Flexible Server Side Rendering",
|
|
32
|
+
description:
|
|
33
|
+
"Full-document SSR, streaming, and progressive enhancement out of the box. Control exactly what renders where.",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
icon: <RouteIcon className="w-12 h-12 text-cyan-400" />,
|
|
37
|
+
title: "API Routes",
|
|
38
|
+
description:
|
|
39
|
+
"Build type-safe API endpoints alongside your application. No separate backend needed.",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
icon: <Shield className="w-12 h-12 text-cyan-400" />,
|
|
43
|
+
title: "Strongly Typed Everything",
|
|
44
|
+
description:
|
|
45
|
+
"End-to-end type safety from server to client. Catch errors before they reach production.",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
icon: <Waves className="w-12 h-12 text-cyan-400" />,
|
|
49
|
+
title: "Full Streaming Support",
|
|
50
|
+
description:
|
|
51
|
+
"Stream data from server to client progressively. Perfect for AI applications and real-time updates.",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
icon: <Sparkles className="w-12 h-12 text-cyan-400" />,
|
|
55
|
+
title: "Next Generation Ready",
|
|
56
|
+
description:
|
|
57
|
+
"Built from the ground up for modern web applications. Deploy anywhere JavaScript runs.",
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<div className="min-h-screen bg-gradient-to-b from-slate-900 via-slate-800 to-slate-900">
|
|
63
|
+
<section className="relative py-20 px-6 text-center overflow-hidden">
|
|
64
|
+
<div className="absolute inset-0 bg-gradient-to-r from-cyan-500/10 via-blue-500/10 to-purple-500/10"></div>
|
|
65
|
+
<div className="relative max-w-5xl mx-auto">
|
|
66
|
+
<div className="flex items-center justify-center gap-6 mb-6">
|
|
67
|
+
<img
|
|
68
|
+
src="/tanstack-circle-logo.png"
|
|
69
|
+
alt="TanStack Logo"
|
|
70
|
+
className="w-24 h-24 md:w-32 md:h-32"
|
|
71
|
+
/>
|
|
72
|
+
<h1 className="text-6xl md:text-7xl font-bold text-white">
|
|
73
|
+
<span className="text-gray-300">TANSTACK</span>{" "}
|
|
74
|
+
<span className="bg-gradient-to-r from-cyan-400 to-blue-400 bg-clip-text text-transparent">
|
|
75
|
+
START
|
|
76
|
+
</span>
|
|
77
|
+
</h1>
|
|
78
|
+
</div>
|
|
79
|
+
<p className="text-2xl md:text-3xl text-gray-300 mb-4 font-light">
|
|
80
|
+
The framework for next generation AI applications
|
|
81
|
+
</p>
|
|
82
|
+
<p className="text-lg text-gray-400 max-w-3xl mx-auto mb-8">
|
|
83
|
+
Full-stack framework powered by TanStack Router for React and Solid.
|
|
84
|
+
Build modern applications with server functions, streaming, and type
|
|
85
|
+
safety.
|
|
86
|
+
</p>
|
|
87
|
+
<div className="flex flex-col items-center gap-4">
|
|
88
|
+
<a
|
|
89
|
+
href="https://tanstack.com/start"
|
|
90
|
+
target="_blank"
|
|
91
|
+
rel="noopener noreferrer"
|
|
92
|
+
className="px-8 py-3 bg-cyan-500 hover:bg-cyan-600 text-white font-semibold rounded-lg transition-colors shadow-lg shadow-cyan-500/50"
|
|
93
|
+
>
|
|
94
|
+
Documentation
|
|
95
|
+
</a>
|
|
96
|
+
<p className="text-gray-400 text-sm mt-2">
|
|
97
|
+
Begin your TanStack Start journey by editing{" "}
|
|
98
|
+
<code className="px-2 py-1 bg-slate-700 rounded text-cyan-400">
|
|
99
|
+
/src/routes/index.tsx
|
|
100
|
+
</code>
|
|
101
|
+
</p>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
</section>
|
|
105
|
+
|
|
106
|
+
<section className="py-16 px-6 max-w-7xl mx-auto">
|
|
107
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
108
|
+
{features.map((feature, index) => (
|
|
109
|
+
<div
|
|
110
|
+
key={index}
|
|
111
|
+
className="bg-slate-800/50 backdrop-blur-sm border border-slate-700 rounded-xl p-6 hover:border-cyan-500/50 transition-all duration-300 hover:shadow-lg hover:shadow-cyan-500/10"
|
|
112
|
+
>
|
|
113
|
+
<div className="mb-4">{feature.icon}</div>
|
|
114
|
+
<h3 className="text-xl font-semibold text-white mb-3">
|
|
115
|
+
{feature.title}
|
|
116
|
+
</h3>
|
|
117
|
+
<p className="text-gray-400 leading-relaxed">
|
|
118
|
+
{feature.description}
|
|
119
|
+
</p>
|
|
120
|
+
</div>
|
|
121
|
+
))}
|
|
122
|
+
</div>
|
|
123
|
+
</section>
|
|
124
|
+
</div>
|
|
125
|
+
);
|
|
126
|
+
<% } else { %>
|
|
127
|
+
return (
|
|
128
|
+
<div className="App">
|
|
129
|
+
<header className="App-header">
|
|
130
|
+
<img src={logo} className="App-logo" alt="logo" />
|
|
131
|
+
<p>
|
|
132
|
+
Edit <code>src/routes/index.tsx</code> and save to reload.
|
|
133
|
+
</p>
|
|
134
|
+
<a
|
|
135
|
+
className="App-link"
|
|
136
|
+
href="https://reactjs.org"
|
|
137
|
+
target="_blank"
|
|
138
|
+
rel="noopener noreferrer"
|
|
139
|
+
>
|
|
140
|
+
Learn React
|
|
141
|
+
</a>
|
|
142
|
+
<a
|
|
143
|
+
className="App-link"
|
|
144
|
+
href="https://tanstack.com"
|
|
145
|
+
target="_blank"
|
|
146
|
+
rel="noopener noreferrer"
|
|
147
|
+
>
|
|
148
|
+
Learn TanStack
|
|
149
|
+
</a>
|
|
150
|
+
</header>
|
|
151
|
+
</div>
|
|
152
|
+
);
|
|
153
|
+
<% } %>
|
|
154
|
+
}
|
package/add-ons/start/info.json
CHANGED
|
@@ -7,16 +7,48 @@
|
|
|
7
7
|
"type": "add-on",
|
|
8
8
|
"routes": [
|
|
9
9
|
{
|
|
10
|
+
"icon": "Server",
|
|
10
11
|
"url": "/demo/start/server-funcs",
|
|
11
12
|
"name": "Start - Server Functions",
|
|
12
13
|
"path": "src/routes/demo.start.server-funcs.tsx",
|
|
13
14
|
"jsName": "StartServerFuncsDemo"
|
|
14
15
|
},
|
|
15
16
|
{
|
|
17
|
+
"icon": "Server",
|
|
16
18
|
"url": "/demo/start/api-request",
|
|
17
19
|
"name": "Start - API Request",
|
|
18
20
|
"path": "src/routes/demo.start.api-request.tsx",
|
|
19
21
|
"jsName": "StartApiRequestDemo"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"icon": "Server",
|
|
25
|
+
"url": "/demo/start/ssr",
|
|
26
|
+
"name": "Start - SSR Demos",
|
|
27
|
+
"path": "src/routes/demo.start.ssr.index.tsx",
|
|
28
|
+
"jsName": "StartSSRDemo",
|
|
29
|
+
"children": [
|
|
30
|
+
{
|
|
31
|
+
"icon": "Server",
|
|
32
|
+
"url": "/demo/start/ssr/spa-mode",
|
|
33
|
+
"name": "SPA Mode",
|
|
34
|
+
"path": "src/routes/demo.start.ssr.spa-mode.tsx",
|
|
35
|
+
"jsName": "StartSSRSpamodeDemo"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"icon": "Server",
|
|
39
|
+
"url": "/demo/start/ssr/full-ssr",
|
|
40
|
+
"name": "Full SSR",
|
|
41
|
+
"path": "src/routes/demo.start.ssr.full-ssr.tsx",
|
|
42
|
+
"jsName": "StartSSRFullSsrDemo"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"icon": "Server",
|
|
46
|
+
"url": "/demo/start/ssr/data-only",
|
|
47
|
+
"name": "Data Only",
|
|
48
|
+
"path": "src/routes/demo.start.ssr.data-only.tsx",
|
|
49
|
+
"jsName": "StartSSRDataOnlyDemo"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
20
52
|
}
|
|
21
53
|
],
|
|
22
54
|
"deletedFiles": ["./index.html", "./src/main.tsx", "./src/App.css"],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { <% if (fileRouter) { %>createFileRoute<% } else { %>createRoute<% } %> } from '@tanstack/react-router'
|
|
2
2
|
import { useStore } from '@tanstack/react-store'
|
|
3
3
|
|
|
4
|
-
import { fullName, store } from '
|
|
4
|
+
import { fullName, store } from '@/lib/demo-store'
|
|
5
5
|
<% if (codeRouter) { %>
|
|
6
6
|
import type { RootRoute } from '@tanstack/react-router'
|
|
7
7
|
<% } else { %>
|