@tanstack/create 0.68.0 → 0.68.1
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/CHANGELOG.md +10 -0
- package/dist/frameworks/react/add-ons/ai/assets/src/components/demo-AIAssistant.tsx +15 -15
- package/dist/frameworks/react/add-ons/ai/assets/src/components/demo-GuitarRecommendation.tsx +8 -6
- package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.css +21 -21
- package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.tsx +14 -18
- package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-image.tsx +20 -26
- package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-structured.tsx +56 -67
- package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/$guitarId.tsx +17 -22
- package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/index.tsx +21 -27
- package/dist/frameworks/react/add-ons/apollo-client/assets/src/routes/demo.apollo-client.tsx +35 -38
- package/dist/frameworks/react/add-ons/better-auth/assets/src/routes/demo/better-auth.tsx +64 -64
- package/dist/frameworks/react/add-ons/clerk/assets/src/routes/demo/clerk.tsx +17 -25
- package/dist/frameworks/react/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -45
- package/dist/frameworks/react/add-ons/db/assets/src/components/demo.chat-area.tsx +5 -5
- package/dist/frameworks/react/add-ons/db/assets/src/components/demo.messages.tsx +7 -11
- package/dist/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat.tsx +5 -3
- package/dist/frameworks/react/add-ons/drizzle/assets/src/routes/demo/drizzle.tsx.ejs +29 -79
- package/dist/frameworks/react/add-ons/form/assets/src/components/demo.FormComponents.tsx.ejs +12 -12
- package/dist/frameworks/react/add-ons/form/assets/src/routes/demo/form.address.tsx.ejs +11 -10
- package/dist/frameworks/react/add-ons/form/assets/src/routes/demo/form.simple.tsx.ejs +11 -10
- package/dist/frameworks/react/add-ons/mcp/assets/src/routes/demo/mcp-todos.tsx +10 -18
- package/dist/frameworks/react/add-ons/neon/assets/src/routes/demo/neon.tsx +38 -57
- package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/demo/orpc-todo.tsx +10 -18
- package/dist/frameworks/react/add-ons/paraglide/assets/src/routes/demo.i18n.tsx.ejs +6 -7
- package/dist/frameworks/react/add-ons/posthog/assets/src/routes/demo/posthog.tsx +19 -22
- package/dist/frameworks/react/add-ons/powersync/assets/src/routes/demo/powersync.tsx +19 -18
- package/dist/frameworks/react/add-ons/prisma/assets/src/routes/demo/prisma.tsx.ejs +29 -79
- package/dist/frameworks/react/add-ons/sentry/assets/src/routes/demo/sentry.testing.tsx +71 -102
- package/dist/frameworks/react/add-ons/store/assets/src/lib/demo-store-devtools.tsx +3 -3
- package/dist/frameworks/react/add-ons/store/assets/src/routes/demo/store.tsx.ejs +9 -14
- package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.tsx +23 -26
- package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/dialog.tsx +12 -16
- package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.tsx +14 -17
- package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.tsx +15 -15
- package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.tsx +17 -17
- package/dist/frameworks/react/add-ons/storybook/assets/src/routes/demo/storybook.tsx +25 -25
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/media.tsx +9 -9
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/quote.tsx +8 -8
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/markdown-content.tsx +52 -35
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/pagination.tsx +8 -14
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/search.tsx +12 -12
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/strapi-image.tsx +15 -15
- package/dist/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.$articleId.tsx +52 -63
- package/dist/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.tsx +46 -61
- package/dist/frameworks/react/add-ons/tRPC/assets/src/routes/demo/trpc-todo.tsx +10 -18
- package/dist/frameworks/react/add-ons/table/assets/src/routes/demo/table.tsx.ejs +23 -22
- package/dist/frameworks/react/add-ons/tanstack-query/assets/src/routes/demo/tanstack-query.tsx.ejs +21 -35
- package/dist/frameworks/react/add-ons/workos/assets/src/components/workos-user.tsx +1 -1
- package/dist/frameworks/react/add-ons/workos/assets/src/routes/demo/workos.tsx +33 -43
- package/dist/frameworks/react/project/base/_dot_gitignore +1 -0
- package/dist/frameworks/react/project/base/src/styles.css.ejs +203 -0
- package/dist/frameworks/solid/add-ons/better-auth/assets/src/routes/demo.better-auth.tsx +62 -64
- package/dist/frameworks/solid/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -43
- package/dist/frameworks/solid/add-ons/form/assets/src/routes/demo.form.tsx.ejs +22 -22
- package/dist/frameworks/solid/add-ons/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +15 -10
- package/dist/frameworks/solid/add-ons/store/assets/src/routes/demo.store.tsx.ejs +9 -14
- package/dist/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi.tsx +11 -15
- package/dist/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi_.$articleId.tsx +11 -18
- package/dist/frameworks/solid/project/base/_dot_gitignore +1 -0
- package/dist/frameworks/solid/project/base/src/styles.css.ejs +203 -0
- package/package.json +1 -1
- package/src/frameworks/react/add-ons/ai/assets/src/components/demo-AIAssistant.tsx +15 -15
- package/src/frameworks/react/add-ons/ai/assets/src/components/demo-GuitarRecommendation.tsx +8 -6
- package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.css +21 -21
- package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.tsx +14 -18
- package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-image.tsx +20 -26
- package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-structured.tsx +56 -67
- package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/$guitarId.tsx +17 -22
- package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/index.tsx +21 -27
- package/src/frameworks/react/add-ons/apollo-client/assets/src/routes/demo.apollo-client.tsx +35 -38
- package/src/frameworks/react/add-ons/better-auth/assets/src/routes/demo/better-auth.tsx +64 -64
- package/src/frameworks/react/add-ons/clerk/assets/src/routes/demo/clerk.tsx +17 -25
- package/src/frameworks/react/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -45
- package/src/frameworks/react/add-ons/db/assets/src/components/demo.chat-area.tsx +5 -5
- package/src/frameworks/react/add-ons/db/assets/src/components/demo.messages.tsx +7 -11
- package/src/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat.tsx +5 -3
- package/src/frameworks/react/add-ons/drizzle/assets/src/routes/demo/drizzle.tsx.ejs +29 -79
- package/src/frameworks/react/add-ons/form/assets/src/components/demo.FormComponents.tsx.ejs +12 -12
- package/src/frameworks/react/add-ons/form/assets/src/routes/demo/form.address.tsx.ejs +11 -10
- package/src/frameworks/react/add-ons/form/assets/src/routes/demo/form.simple.tsx.ejs +11 -10
- package/src/frameworks/react/add-ons/mcp/assets/src/routes/demo/mcp-todos.tsx +10 -18
- package/src/frameworks/react/add-ons/neon/assets/src/routes/demo/neon.tsx +38 -57
- package/src/frameworks/react/add-ons/oRPC/assets/src/routes/demo/orpc-todo.tsx +10 -18
- package/src/frameworks/react/add-ons/paraglide/assets/src/routes/demo.i18n.tsx.ejs +6 -7
- package/src/frameworks/react/add-ons/posthog/assets/src/routes/demo/posthog.tsx +19 -22
- package/src/frameworks/react/add-ons/powersync/assets/src/routes/demo/powersync.tsx +19 -18
- package/src/frameworks/react/add-ons/prisma/assets/src/routes/demo/prisma.tsx.ejs +29 -79
- package/src/frameworks/react/add-ons/sentry/assets/src/routes/demo/sentry.testing.tsx +71 -102
- package/src/frameworks/react/add-ons/store/assets/src/lib/demo-store-devtools.tsx +3 -3
- package/src/frameworks/react/add-ons/store/assets/src/routes/demo/store.tsx.ejs +9 -14
- package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.tsx +23 -26
- package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/dialog.tsx +12 -16
- package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.tsx +14 -17
- package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.tsx +15 -15
- package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.tsx +17 -17
- package/src/frameworks/react/add-ons/storybook/assets/src/routes/demo/storybook.tsx +25 -25
- package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/media.tsx +9 -9
- package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/quote.tsx +8 -8
- package/src/frameworks/react/add-ons/strapi/assets/src/components/markdown-content.tsx +52 -35
- package/src/frameworks/react/add-ons/strapi/assets/src/components/pagination.tsx +8 -14
- package/src/frameworks/react/add-ons/strapi/assets/src/components/search.tsx +12 -12
- package/src/frameworks/react/add-ons/strapi/assets/src/components/strapi-image.tsx +15 -15
- package/src/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.$articleId.tsx +52 -63
- package/src/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.tsx +46 -61
- package/src/frameworks/react/add-ons/tRPC/assets/src/routes/demo/trpc-todo.tsx +10 -18
- package/src/frameworks/react/add-ons/table/assets/src/routes/demo/table.tsx.ejs +23 -22
- package/src/frameworks/react/add-ons/tanstack-query/assets/src/routes/demo/tanstack-query.tsx.ejs +21 -35
- package/src/frameworks/react/add-ons/workos/assets/src/components/workos-user.tsx +1 -1
- package/src/frameworks/react/add-ons/workos/assets/src/routes/demo/workos.tsx +33 -43
- package/src/frameworks/react/project/base/_dot_gitignore +1 -0
- package/src/frameworks/react/project/base/src/styles.css.ejs +203 -0
- package/src/frameworks/solid/add-ons/better-auth/assets/src/routes/demo.better-auth.tsx +62 -64
- package/src/frameworks/solid/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -43
- package/src/frameworks/solid/add-ons/form/assets/src/routes/demo.form.tsx.ejs +22 -22
- package/src/frameworks/solid/add-ons/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +15 -10
- package/src/frameworks/solid/add-ons/store/assets/src/routes/demo.store.tsx.ejs +9 -14
- package/src/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi.tsx +11 -15
- package/src/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi_.$articleId.tsx +11 -18
- package/src/frameworks/solid/project/base/_dot_gitignore +1 -0
- package/src/frameworks/solid/project/base/src/styles.css.ejs +203 -0
- package/tests/framework-template.test.ts +15 -0
|
@@ -8,48 +8,42 @@ export const Route = createFileRoute('/demo/guitars/')({
|
|
|
8
8
|
|
|
9
9
|
function GuitarsIndex() {
|
|
10
10
|
return (
|
|
11
|
-
<
|
|
12
|
-
<h1 className="
|
|
13
|
-
<div className="
|
|
11
|
+
<main className="demo-page demo-page-wide">
|
|
12
|
+
<h1 className="demo-title mb-8 text-center">Featured Guitars</h1>
|
|
13
|
+
<div className="grid gap-6 md:grid-cols-2 xl:grid-cols-3">
|
|
14
14
|
{guitars.map((guitar) => (
|
|
15
|
-
<div
|
|
16
|
-
key={guitar.id}
|
|
17
|
-
className="w-full md:w-[calc(50%-1.5rem)] xl:w-[calc(33.333%-2rem)] relative mb-24"
|
|
18
|
-
>
|
|
15
|
+
<div key={guitar.id}>
|
|
19
16
|
<Link
|
|
20
|
-
to="/
|
|
17
|
+
to="/demo/guitars/$guitarId"
|
|
21
18
|
params={{
|
|
22
19
|
guitarId: guitar.id.toString(),
|
|
23
20
|
}}
|
|
21
|
+
className="block no-underline"
|
|
24
22
|
>
|
|
25
|
-
<
|
|
26
|
-
<div className="
|
|
23
|
+
<article className="demo-card h-full overflow-hidden p-0 transition hover:-translate-y-0.5">
|
|
24
|
+
<div className="aspect-square overflow-hidden">
|
|
27
25
|
<img
|
|
28
26
|
src={guitar.image}
|
|
29
27
|
alt={guitar.name}
|
|
30
|
-
className="
|
|
28
|
+
className="guitar-image h-full w-full object-cover transition-transform duration-500 hover:scale-105"
|
|
31
29
|
/>
|
|
32
|
-
<div className="absolute inset-0 bg-gradient-to-t from-black/40 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
|
|
33
30
|
</div>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
</p>
|
|
45
|
-
<div className="text-xl font-bold text-emerald-400">
|
|
46
|
-
${guitar.price}
|
|
31
|
+
<div className="p-5">
|
|
32
|
+
<h2 className="mb-2 text-xl font-bold text-[var(--sea-ink)]">
|
|
33
|
+
{guitar.name}
|
|
34
|
+
</h2>
|
|
35
|
+
<p className="demo-muted mb-3 line-clamp-2">
|
|
36
|
+
{guitar.shortDescription}
|
|
37
|
+
</p>
|
|
38
|
+
<div className="text-xl font-bold text-[var(--lagoon-deep)]">
|
|
39
|
+
${guitar.price}
|
|
40
|
+
</div>
|
|
47
41
|
</div>
|
|
48
|
-
</
|
|
42
|
+
</article>
|
|
49
43
|
</Link>
|
|
50
44
|
</div>
|
|
51
45
|
))}
|
|
52
46
|
</div>
|
|
53
|
-
</
|
|
47
|
+
</main>
|
|
54
48
|
)
|
|
55
49
|
}
|
|
@@ -33,43 +33,40 @@ function RouteComponent() {
|
|
|
33
33
|
const { data } = useReadQuery(queryRef)
|
|
34
34
|
|
|
35
35
|
return (
|
|
36
|
-
<
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
<
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
</ul>
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
36
|
+
<main className="demo-page">
|
|
37
|
+
<section className="demo-panel">
|
|
38
|
+
<p className="island-kicker mb-2">GraphQL</p>
|
|
39
|
+
<h1 className="demo-title mb-6">Apollo Client Demo</h1>
|
|
40
|
+
<div className="demo-alert mb-4">
|
|
41
|
+
<p className="font-bold">Apollo Client is configured!</p>
|
|
42
|
+
<p className="text-sm mt-2">
|
|
43
|
+
This demo uses <code>preloadQuery</code> in the loader and{' '}
|
|
44
|
+
<code>useReadQuery</code> in the component for optimal streaming SSR
|
|
45
|
+
performance.
|
|
46
|
+
</p>
|
|
47
|
+
</div>
|
|
48
|
+
<div className="demo-code-block">
|
|
49
|
+
<h3 className="font-bold mb-2">Query Result:</h3>
|
|
50
|
+
<pre className="text-sm overflow-x-auto">
|
|
51
|
+
{JSON.stringify(data, null, 2)}
|
|
52
|
+
</pre>
|
|
53
|
+
</div>
|
|
54
|
+
<div className="demo-muted mt-4 text-sm">
|
|
55
|
+
<p className="font-medium text-[var(--sea-ink)]">Next steps:</p>
|
|
56
|
+
<ul className="list-disc ml-6 mt-2">
|
|
57
|
+
<li>
|
|
58
|
+
Configure your GraphQL endpoint in <code>src/router.tsx</code>
|
|
59
|
+
</li>
|
|
60
|
+
<li>Replace the example query with your actual GraphQL schema</li>
|
|
61
|
+
<li>
|
|
62
|
+
Learn more:{' '}
|
|
63
|
+
<a href="https://www.apollographql.com/docs/react">
|
|
64
|
+
Apollo Client Docs
|
|
65
|
+
</a>
|
|
66
|
+
</li>
|
|
67
|
+
</ul>
|
|
68
|
+
</div>
|
|
69
|
+
</section>
|
|
70
|
+
</main>
|
|
74
71
|
)
|
|
75
72
|
}
|
|
@@ -1,37 +1,36 @@
|
|
|
1
|
-
import { createFileRoute } from
|
|
2
|
-
import { useState } from
|
|
3
|
-
import { authClient } from
|
|
1
|
+
import { createFileRoute } from '@tanstack/react-router'
|
|
2
|
+
import { useState } from 'react'
|
|
3
|
+
import { authClient } from '#/lib/auth-client'
|
|
4
4
|
|
|
5
|
-
export const Route = createFileRoute(
|
|
5
|
+
export const Route = createFileRoute('/demo/better-auth')({
|
|
6
6
|
component: BetterAuthDemo,
|
|
7
|
-
})
|
|
7
|
+
})
|
|
8
8
|
|
|
9
9
|
function BetterAuthDemo() {
|
|
10
|
-
const { data: session, isPending } = authClient.useSession()
|
|
11
|
-
const [isSignUp, setIsSignUp] = useState(false)
|
|
12
|
-
const [email, setEmail] = useState(
|
|
13
|
-
const [password, setPassword] = useState(
|
|
14
|
-
const [name, setName] = useState(
|
|
15
|
-
const [error, setError] = useState(
|
|
16
|
-
const [loading, setLoading] = useState(false)
|
|
10
|
+
const { data: session, isPending } = authClient.useSession()
|
|
11
|
+
const [isSignUp, setIsSignUp] = useState(false)
|
|
12
|
+
const [email, setEmail] = useState('')
|
|
13
|
+
const [password, setPassword] = useState('')
|
|
14
|
+
const [name, setName] = useState('')
|
|
15
|
+
const [error, setError] = useState('')
|
|
16
|
+
const [loading, setLoading] = useState(false)
|
|
17
17
|
|
|
18
18
|
if (isPending) {
|
|
19
19
|
return (
|
|
20
|
-
<
|
|
20
|
+
<main className="demo-page demo-center">
|
|
21
21
|
<div className="h-5 w-5 animate-spin rounded-full border-2 border-neutral-200 border-t-neutral-900 dark:border-neutral-800 dark:border-t-neutral-100" />
|
|
22
|
-
</
|
|
23
|
-
)
|
|
22
|
+
</main>
|
|
23
|
+
)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
if (session?.user) {
|
|
27
27
|
return (
|
|
28
|
-
<
|
|
29
|
-
<
|
|
28
|
+
<main className="demo-page demo-center">
|
|
29
|
+
<section className="demo-panel w-full max-w-md space-y-6">
|
|
30
30
|
<div className="space-y-1.5">
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<p className="text-sm text-neutral-500 dark:text-neutral-400">
|
|
31
|
+
<p className="island-kicker mb-2">Better Auth</p>
|
|
32
|
+
<h1 className="demo-title">Welcome back</h1>
|
|
33
|
+
<p className="demo-muted text-sm">
|
|
35
34
|
You're signed in as {session.user.email}
|
|
36
35
|
</p>
|
|
37
36
|
</div>
|
|
@@ -42,7 +41,7 @@ function BetterAuthDemo() {
|
|
|
42
41
|
) : (
|
|
43
42
|
<div className="h-10 w-10 bg-neutral-200 dark:bg-neutral-800 flex items-center justify-center">
|
|
44
43
|
<span className="text-sm font-medium text-neutral-600 dark:text-neutral-400">
|
|
45
|
-
{session.user.name?.charAt(0).toUpperCase() ||
|
|
44
|
+
{session.user.name?.charAt(0).toUpperCase() || 'U'}
|
|
46
45
|
</span>
|
|
47
46
|
</div>
|
|
48
47
|
)}
|
|
@@ -60,32 +59,32 @@ function BetterAuthDemo() {
|
|
|
60
59
|
onClick={() => {
|
|
61
60
|
void authClient.signOut()
|
|
62
61
|
}}
|
|
63
|
-
className="
|
|
62
|
+
className="demo-button demo-button-secondary w-full"
|
|
64
63
|
>
|
|
65
64
|
Sign out
|
|
66
65
|
</button>
|
|
67
66
|
|
|
68
|
-
<p className="
|
|
69
|
-
Built with{
|
|
67
|
+
<p className="demo-muted text-center text-xs">
|
|
68
|
+
Built with{' '}
|
|
70
69
|
<a
|
|
71
70
|
href="https://better-auth.com"
|
|
72
71
|
target="_blank"
|
|
73
72
|
rel="noopener noreferrer"
|
|
74
|
-
className="font-medium
|
|
73
|
+
className="font-medium"
|
|
75
74
|
>
|
|
76
75
|
BETTER-AUTH
|
|
77
76
|
</a>
|
|
78
77
|
.
|
|
79
78
|
</p>
|
|
80
|
-
</
|
|
81
|
-
</
|
|
82
|
-
)
|
|
79
|
+
</section>
|
|
80
|
+
</main>
|
|
81
|
+
)
|
|
83
82
|
}
|
|
84
83
|
|
|
85
84
|
const handleSubmit = async (e: React.FormEvent) => {
|
|
86
|
-
e.preventDefault()
|
|
87
|
-
setError(
|
|
88
|
-
setLoading(true)
|
|
85
|
+
e.preventDefault()
|
|
86
|
+
setError('')
|
|
87
|
+
setLoading(true)
|
|
89
88
|
|
|
90
89
|
try {
|
|
91
90
|
if (isSignUp) {
|
|
@@ -93,36 +92,37 @@ function BetterAuthDemo() {
|
|
|
93
92
|
email,
|
|
94
93
|
password,
|
|
95
94
|
name,
|
|
96
|
-
})
|
|
95
|
+
})
|
|
97
96
|
if (result.error) {
|
|
98
|
-
setError(result.error.message ||
|
|
97
|
+
setError(result.error.message || 'Sign up failed')
|
|
99
98
|
}
|
|
100
99
|
} else {
|
|
101
100
|
const result = await authClient.signIn.email({
|
|
102
101
|
email,
|
|
103
102
|
password,
|
|
104
|
-
})
|
|
103
|
+
})
|
|
105
104
|
if (result.error) {
|
|
106
|
-
setError(result.error.message ||
|
|
105
|
+
setError(result.error.message || 'Sign in failed')
|
|
107
106
|
}
|
|
108
107
|
}
|
|
109
108
|
} catch (err) {
|
|
110
|
-
setError(
|
|
109
|
+
setError('An unexpected error occurred')
|
|
111
110
|
} finally {
|
|
112
|
-
setLoading(false)
|
|
111
|
+
setLoading(false)
|
|
113
112
|
}
|
|
114
|
-
}
|
|
113
|
+
}
|
|
115
114
|
|
|
116
115
|
return (
|
|
117
|
-
<
|
|
118
|
-
<
|
|
119
|
-
<
|
|
120
|
-
|
|
116
|
+
<main className="demo-page demo-center">
|
|
117
|
+
<section className="demo-panel w-full max-w-md">
|
|
118
|
+
<p className="island-kicker mb-2">Better Auth</p>
|
|
119
|
+
<h1 className="demo-title">
|
|
120
|
+
{isSignUp ? 'Create an account' : 'Sign in'}
|
|
121
121
|
</h1>
|
|
122
|
-
<p className="
|
|
122
|
+
<p className="demo-muted mt-2 mb-6 text-sm">
|
|
123
123
|
{isSignUp
|
|
124
|
-
?
|
|
125
|
-
:
|
|
124
|
+
? 'Enter your information to create an account'
|
|
125
|
+
: 'Enter your email below to login to your account'}
|
|
126
126
|
</p>
|
|
127
127
|
|
|
128
128
|
<form onSubmit={handleSubmit} className="grid gap-4">
|
|
@@ -139,7 +139,7 @@ function BetterAuthDemo() {
|
|
|
139
139
|
type="text"
|
|
140
140
|
value={name}
|
|
141
141
|
onChange={(e) => setName(e.target.value)}
|
|
142
|
-
className="
|
|
142
|
+
className="demo-input"
|
|
143
143
|
required
|
|
144
144
|
/>
|
|
145
145
|
</div>
|
|
@@ -154,7 +154,7 @@ function BetterAuthDemo() {
|
|
|
154
154
|
type="email"
|
|
155
155
|
value={email}
|
|
156
156
|
onChange={(e) => setEmail(e.target.value)}
|
|
157
|
-
className="
|
|
157
|
+
className="demo-input"
|
|
158
158
|
required
|
|
159
159
|
/>
|
|
160
160
|
</div>
|
|
@@ -171,22 +171,22 @@ function BetterAuthDemo() {
|
|
|
171
171
|
type="password"
|
|
172
172
|
value={password}
|
|
173
173
|
onChange={(e) => setPassword(e.target.value)}
|
|
174
|
-
className="
|
|
174
|
+
className="demo-input"
|
|
175
175
|
required
|
|
176
176
|
minLength={8}
|
|
177
177
|
/>
|
|
178
178
|
</div>
|
|
179
179
|
|
|
180
180
|
{error && (
|
|
181
|
-
<div className="
|
|
182
|
-
<p className="text-sm text-red-600
|
|
181
|
+
<div className="demo-alert demo-alert-danger">
|
|
182
|
+
<p className="text-sm text-red-600">{error}</p>
|
|
183
183
|
</div>
|
|
184
184
|
)}
|
|
185
185
|
|
|
186
186
|
<button
|
|
187
187
|
type="submit"
|
|
188
188
|
disabled={loading}
|
|
189
|
-
className="w-full
|
|
189
|
+
className="demo-button w-full"
|
|
190
190
|
>
|
|
191
191
|
{loading ? (
|
|
192
192
|
<span className="flex items-center justify-center gap-2">
|
|
@@ -194,9 +194,9 @@ function BetterAuthDemo() {
|
|
|
194
194
|
<span>Please wait</span>
|
|
195
195
|
</span>
|
|
196
196
|
) : isSignUp ? (
|
|
197
|
-
|
|
197
|
+
'Create account'
|
|
198
198
|
) : (
|
|
199
|
-
|
|
199
|
+
'Sign in'
|
|
200
200
|
)}
|
|
201
201
|
</button>
|
|
202
202
|
</form>
|
|
@@ -205,30 +205,30 @@ function BetterAuthDemo() {
|
|
|
205
205
|
<button
|
|
206
206
|
type="button"
|
|
207
207
|
onClick={() => {
|
|
208
|
-
setIsSignUp(!isSignUp)
|
|
209
|
-
setError(
|
|
208
|
+
setIsSignUp(!isSignUp)
|
|
209
|
+
setError('')
|
|
210
210
|
}}
|
|
211
|
-
className="
|
|
211
|
+
className="demo-muted text-sm transition-colors hover:text-[var(--sea-ink)]"
|
|
212
212
|
>
|
|
213
213
|
{isSignUp
|
|
214
|
-
?
|
|
214
|
+
? 'Already have an account? Sign in'
|
|
215
215
|
: "Don't have an account? Sign up"}
|
|
216
216
|
</button>
|
|
217
217
|
</div>
|
|
218
218
|
|
|
219
|
-
<p className="mt-6 text-
|
|
220
|
-
Built with{
|
|
219
|
+
<p className="demo-muted mt-6 text-center text-xs">
|
|
220
|
+
Built with{' '}
|
|
221
221
|
<a
|
|
222
222
|
href="https://better-auth.com"
|
|
223
223
|
target="_blank"
|
|
224
224
|
rel="noopener noreferrer"
|
|
225
|
-
className="font-medium
|
|
225
|
+
className="font-medium"
|
|
226
226
|
>
|
|
227
227
|
BETTER-AUTH
|
|
228
228
|
</a>
|
|
229
229
|
.
|
|
230
230
|
</p>
|
|
231
|
-
</
|
|
232
|
-
</
|
|
233
|
-
)
|
|
231
|
+
</section>
|
|
232
|
+
</main>
|
|
233
|
+
)
|
|
234
234
|
}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { createFileRoute } from '@tanstack/react-router'
|
|
2
|
-
import {
|
|
3
|
-
SignIn,
|
|
4
|
-
SignedIn,
|
|
5
|
-
SignedOut,
|
|
6
|
-
useUser,
|
|
7
|
-
} from '@clerk/clerk-react'
|
|
2
|
+
import { SignIn, SignedIn, SignedOut, useUser } from '@clerk/clerk-react'
|
|
8
3
|
|
|
9
4
|
export const Route = createFileRoute('/demo/clerk')({
|
|
10
5
|
component: ClerkDemo,
|
|
@@ -12,27 +7,27 @@ export const Route = createFileRoute('/demo/clerk')({
|
|
|
12
7
|
|
|
13
8
|
function ClerkDemo() {
|
|
14
9
|
return (
|
|
15
|
-
<
|
|
16
|
-
<
|
|
10
|
+
<main className="demo-page demo-center">
|
|
11
|
+
<section className="demo-panel w-full max-w-md space-y-6">
|
|
17
12
|
<SignedOut>
|
|
18
13
|
<div className="space-y-1.5">
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
<p className="island-kicker mb-2">Clerk</p>
|
|
15
|
+
<h1 className="demo-title">Sign in to continue</h1>
|
|
16
|
+
<p className="demo-muted text-sm">
|
|
17
|
+
Clerk renders the sign-in UI, manages sessions, and handles social
|
|
18
|
+
providers for you.
|
|
24
19
|
</p>
|
|
25
20
|
</div>
|
|
26
21
|
<div className="flex justify-center pt-2">
|
|
27
22
|
<SignIn routing="hash" />
|
|
28
23
|
</div>
|
|
29
|
-
<p className="
|
|
24
|
+
<p className="demo-muted text-center text-xs">
|
|
30
25
|
Built with{' '}
|
|
31
26
|
<a
|
|
32
27
|
href="https://clerk.com"
|
|
33
28
|
target="_blank"
|
|
34
29
|
rel="noopener noreferrer"
|
|
35
|
-
className="font-medium
|
|
30
|
+
className="font-medium"
|
|
36
31
|
>
|
|
37
32
|
CLERK
|
|
38
33
|
</a>
|
|
@@ -43,8 +38,8 @@ function ClerkDemo() {
|
|
|
43
38
|
<SignedIn>
|
|
44
39
|
<SignedInGreeting />
|
|
45
40
|
</SignedIn>
|
|
46
|
-
</
|
|
47
|
-
</
|
|
41
|
+
</section>
|
|
42
|
+
</main>
|
|
48
43
|
)
|
|
49
44
|
}
|
|
50
45
|
|
|
@@ -58,12 +53,9 @@ function SignedInGreeting() {
|
|
|
58
53
|
return (
|
|
59
54
|
<div className="space-y-6">
|
|
60
55
|
<div className="space-y-1.5">
|
|
61
|
-
<
|
|
62
|
-
|
|
63
|
-
</
|
|
64
|
-
<p className="text-sm text-neutral-500 dark:text-neutral-400">
|
|
65
|
-
You're signed in as {email}
|
|
66
|
-
</p>
|
|
56
|
+
<p className="island-kicker mb-2">Clerk</p>
|
|
57
|
+
<h1 className="demo-title">Welcome back</h1>
|
|
58
|
+
<p className="demo-muted text-sm">You're signed in as {email}</p>
|
|
67
59
|
</div>
|
|
68
60
|
|
|
69
61
|
<div className="flex items-center gap-3">
|
|
@@ -86,13 +78,13 @@ function SignedInGreeting() {
|
|
|
86
78
|
</div>
|
|
87
79
|
</div>
|
|
88
80
|
|
|
89
|
-
<p className="
|
|
81
|
+
<p className="demo-muted text-center text-xs">
|
|
90
82
|
Manage your account from the avatar in the header. Built with{' '}
|
|
91
83
|
<a
|
|
92
84
|
href="https://clerk.com"
|
|
93
85
|
target="_blank"
|
|
94
86
|
rel="noopener noreferrer"
|
|
95
|
-
className="font-medium
|
|
87
|
+
className="font-medium"
|
|
96
88
|
>
|
|
97
89
|
CLERK
|
|
98
90
|
</a>
|