@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
|
@@ -49,68 +49,57 @@ function App() {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
if (!todos) {
|
|
52
|
-
return
|
|
52
|
+
return (
|
|
53
|
+
<main className="demo-page demo-center">
|
|
54
|
+
<section className="demo-panel w-full max-w-2xl">
|
|
55
|
+
<DBConnectionError />
|
|
56
|
+
</section>
|
|
57
|
+
</main>
|
|
58
|
+
)
|
|
53
59
|
}
|
|
54
60
|
|
|
55
61
|
return (
|
|
56
|
-
<
|
|
57
|
-
className="
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
<div className="relative">
|
|
66
|
-
<div className="absolute -inset-1 bg-gradient-to-r from-emerald-400 to-cyan-400 rounded-lg blur opacity-75 group-hover:opacity-100 transition duration-1000"></div>
|
|
67
|
-
<div className="relative">
|
|
68
|
-
<img
|
|
69
|
-
src="/demo-neon.svg"
|
|
70
|
-
alt="Neon Logo"
|
|
71
|
-
className="w-12 h-12 transform hover:scale-110 transition-transform duration-200"
|
|
72
|
-
/>
|
|
73
|
-
</div>
|
|
62
|
+
<main className="demo-page demo-center">
|
|
63
|
+
<section className="demo-panel w-full max-w-2xl">
|
|
64
|
+
<header className="mb-8 flex items-center gap-4">
|
|
65
|
+
<span className="demo-card flex h-14 w-14 items-center justify-center p-3">
|
|
66
|
+
<img src="/demo-neon.svg" alt="Neon Logo" className="h-8 w-8" />
|
|
67
|
+
</span>
|
|
68
|
+
<div>
|
|
69
|
+
<p className="island-kicker mb-2">Database</p>
|
|
70
|
+
<h1 className="demo-title">Neon Demo</h1>
|
|
74
71
|
</div>
|
|
75
|
-
|
|
76
|
-
Neon Database Demo
|
|
77
|
-
</h1>
|
|
78
|
-
</div>
|
|
72
|
+
</header>
|
|
79
73
|
{todos && (
|
|
80
74
|
<>
|
|
81
|
-
<
|
|
75
|
+
<h2 className="demo-section-title mb-4">Todos</h2>
|
|
82
76
|
<ul className="space-y-3 mb-6">
|
|
83
77
|
{todos.map((todo: { id: number; title: string }) => (
|
|
84
|
-
<li
|
|
85
|
-
key={todo.id}
|
|
86
|
-
className="bg-white/10 backdrop-blur-sm rounded-lg p-4 shadow-sm border border-white/20 transition-all hover:bg-white/20 hover:scale-[1.02] cursor-pointer group"
|
|
87
|
-
>
|
|
78
|
+
<li key={todo.id} className="demo-list-item">
|
|
88
79
|
<div className="flex items-center justify-between">
|
|
89
|
-
<span className="
|
|
90
|
-
|
|
91
|
-
</span>
|
|
92
|
-
<span className="text-xs text-white/50">#{todo.id}</span>
|
|
80
|
+
<span className="font-medium">{todo.title}</span>
|
|
81
|
+
<span className="demo-muted text-xs">#{todo.id}</span>
|
|
93
82
|
</div>
|
|
94
83
|
</li>
|
|
95
84
|
))}
|
|
96
85
|
</ul>
|
|
97
|
-
<form
|
|
86
|
+
<form
|
|
87
|
+
onSubmit={handleSubmit}
|
|
88
|
+
className="mt-4 flex flex-col gap-2 sm:flex-row"
|
|
89
|
+
>
|
|
98
90
|
<input
|
|
99
91
|
type="text"
|
|
100
92
|
name="title"
|
|
101
|
-
className="
|
|
93
|
+
className="demo-input min-w-0 flex-1"
|
|
102
94
|
/>
|
|
103
|
-
<button
|
|
104
|
-
type="submit"
|
|
105
|
-
className="px-6 py-2 bg-[#00E0D9] text-black font-medium rounded-md hover:bg-[#00E0D9]/80 focus:outline-none focus:ring-2 focus:ring-[#00E0D9] focus:ring-offset-2 transition-colors disabled:opacity-50 whitespace-nowrap"
|
|
106
|
-
>
|
|
95
|
+
<button type="submit" className="demo-button whitespace-nowrap">
|
|
107
96
|
Add Todo
|
|
108
97
|
</button>
|
|
109
98
|
</form>
|
|
110
99
|
</>
|
|
111
100
|
)}
|
|
112
|
-
</
|
|
113
|
-
</
|
|
101
|
+
</section>
|
|
102
|
+
</main>
|
|
114
103
|
)
|
|
115
104
|
}
|
|
116
105
|
|
|
@@ -134,31 +123,23 @@ function DBConnectionError() {
|
|
|
134
123
|
</svg>
|
|
135
124
|
</div>
|
|
136
125
|
<h2 className="text-2xl font-bold mb-4">Database Connection Issue</h2>
|
|
137
|
-
<div className="text-lg mb-6">
|
|
138
|
-
|
|
126
|
+
<div className="demo-muted text-lg mb-6">
|
|
127
|
+
The Neon database is not connected.
|
|
128
|
+
</div>
|
|
129
|
+
<div className="demo-card max-w-xl mx-auto text-left">
|
|
139
130
|
<h3 className="text-lg font-semibold mb-4">Required Steps to Fix:</h3>
|
|
140
131
|
<ul className="space-y-4 text-left list-none">
|
|
141
132
|
<li className="flex items-start">
|
|
142
|
-
<span className="
|
|
143
|
-
1
|
|
144
|
-
</span>
|
|
133
|
+
<span className="demo-pill mr-3 min-w-8 justify-center">1</span>
|
|
145
134
|
<div>
|
|
146
|
-
Use the
|
|
147
|
-
<code className="bg-black/30 px-2 py-1 rounded">db/init.sql</code>{' '}
|
|
148
|
-
file to create the database
|
|
135
|
+
Use the <code>db/init.sql</code> file to create the database
|
|
149
136
|
</div>
|
|
150
137
|
</li>
|
|
151
138
|
<li className="flex items-start">
|
|
152
|
-
<span className="
|
|
153
|
-
2
|
|
154
|
-
</span>
|
|
139
|
+
<span className="demo-pill mr-3 min-w-8 justify-center">2</span>
|
|
155
140
|
<div>
|
|
156
|
-
Set the
|
|
157
|
-
|
|
158
|
-
DATABASE_URL
|
|
159
|
-
</code>{' '}
|
|
160
|
-
environment variable to the connection string of your Neon
|
|
161
|
-
database
|
|
141
|
+
Set the <code>DATABASE_URL</code> environment variable to the
|
|
142
|
+
connection string of your Neon database
|
|
162
143
|
</div>
|
|
163
144
|
</li>
|
|
164
145
|
</ul>
|
|
@@ -36,22 +36,14 @@ function ORPCTodos() {
|
|
|
36
36
|
}, [addTodo, todo])
|
|
37
37
|
|
|
38
38
|
return (
|
|
39
|
-
<
|
|
40
|
-
className="
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
'radial-gradient(50% 50% at 50% 50%, #D2149D 0%, #8E1066 50%, #2D0A1F 100%)',
|
|
44
|
-
}}
|
|
45
|
-
>
|
|
46
|
-
<div className="w-full max-w-2xl p-8 rounded-xl backdrop-blur-md bg-black/50 shadow-xl border-8 border-black/10">
|
|
47
|
-
<h1 className="text-2xl mb-4">oRPC Todos list</h1>
|
|
39
|
+
<main className="demo-page demo-center">
|
|
40
|
+
<section className="demo-panel w-full max-w-2xl">
|
|
41
|
+
<p className="island-kicker mb-2">oRPC</p>
|
|
42
|
+
<h1 className="demo-title mb-6">Todos</h1>
|
|
48
43
|
<ul className="mb-4 space-y-2">
|
|
49
44
|
{data?.map((t) => (
|
|
50
|
-
<li
|
|
51
|
-
|
|
52
|
-
className="bg-white/10 border border-white/20 rounded-lg p-3 backdrop-blur-sm shadow-md"
|
|
53
|
-
>
|
|
54
|
-
<span className="text-lg text-white">{t.name}</span>
|
|
45
|
+
<li key={t.id} className="demo-list-item">
|
|
46
|
+
<span className="text-base font-medium">{t.name}</span>
|
|
55
47
|
</li>
|
|
56
48
|
))}
|
|
57
49
|
</ul>
|
|
@@ -66,17 +58,17 @@ function ORPCTodos() {
|
|
|
66
58
|
}
|
|
67
59
|
}}
|
|
68
60
|
placeholder="Enter a new todo..."
|
|
69
|
-
className="
|
|
61
|
+
className="demo-input"
|
|
70
62
|
/>
|
|
71
63
|
<button
|
|
72
64
|
disabled={todo.trim().length === 0}
|
|
73
65
|
onClick={submitTodo}
|
|
74
|
-
className="
|
|
66
|
+
className="demo-button"
|
|
75
67
|
>
|
|
76
68
|
Add todo
|
|
77
69
|
</button>
|
|
78
70
|
</div>
|
|
79
|
-
</
|
|
80
|
-
</
|
|
71
|
+
</section>
|
|
72
|
+
</main>
|
|
81
73
|
)
|
|
82
74
|
}
|
|
@@ -9,16 +9,15 @@ export const Route = createFileRoute("/demo/i18n")({
|
|
|
9
9
|
|
|
10
10
|
function App() {
|
|
11
11
|
return (
|
|
12
|
-
<
|
|
13
|
-
<
|
|
12
|
+
<main className="demo-page demo-center text-center">
|
|
13
|
+
<section className="demo-panel flex w-full max-w-2xl flex-col items-center gap-4">
|
|
14
14
|
<img
|
|
15
15
|
src={logo}
|
|
16
|
-
className="
|
|
16
|
+
className="pointer-events-none h-28 animate-[spin_20s_linear_infinite]"
|
|
17
17
|
alt="logo"
|
|
18
18
|
/>
|
|
19
|
-
<p>{m.example_message({ username: "TanStack Router" })}</p>
|
|
19
|
+
<p className="demo-muted text-lg">{m.example_message({ username: "TanStack Router" })}</p>
|
|
20
20
|
<a
|
|
21
|
-
className="text-[#61dafb] hover:underline"
|
|
22
21
|
href="https://inlang.com/m/gerre34r/library-inlang-paraglideJs"
|
|
23
22
|
target="_blank"
|
|
24
23
|
rel="noopener noreferrer"
|
|
@@ -28,7 +27,7 @@ function App() {
|
|
|
28
27
|
<div className="mt-3">
|
|
29
28
|
<LocaleSwitcher />
|
|
30
29
|
</div>
|
|
31
|
-
</
|
|
32
|
-
</
|
|
30
|
+
</section>
|
|
31
|
+
</main>
|
|
33
32
|
);
|
|
34
33
|
}
|
|
@@ -21,61 +21,60 @@ function PostHogDemo() {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
return (
|
|
24
|
-
<
|
|
25
|
-
<
|
|
26
|
-
<
|
|
24
|
+
<main className="demo-page demo-center">
|
|
25
|
+
<section className="demo-panel w-full max-w-md">
|
|
26
|
+
<p className="island-kicker mb-2">Analytics</p>
|
|
27
|
+
<h1 className="demo-title mb-6">PostHog Demo</h1>
|
|
27
28
|
|
|
28
29
|
{!isConfigured && (
|
|
29
|
-
<div className="
|
|
30
|
-
<p className="text-
|
|
30
|
+
<div className="demo-alert mb-4">
|
|
31
|
+
<p className="text-sm">
|
|
31
32
|
<strong>Warning:</strong> VITE_POSTHOG_KEY is not configured.
|
|
32
|
-
Events won't be sent to PostHog. Add it to your{' '}
|
|
33
|
-
|
|
33
|
+
Events won't be sent to PostHog. Add it to your <code>.env</code>{' '}
|
|
34
|
+
file.
|
|
34
35
|
</p>
|
|
35
36
|
</div>
|
|
36
37
|
)}
|
|
37
38
|
|
|
38
|
-
<div className="
|
|
39
|
-
<p className="
|
|
39
|
+
<div className="demo-card">
|
|
40
|
+
<p className="demo-muted mb-4">
|
|
40
41
|
Click the button below to send events to PostHog. Check your PostHog
|
|
41
42
|
dashboard to see them appear in real-time.
|
|
42
43
|
</p>
|
|
43
44
|
|
|
44
45
|
<button
|
|
45
46
|
onClick={() => trackEvent('button_clicked', { button: 'demo' })}
|
|
46
|
-
className="w-full
|
|
47
|
+
className="demo-button w-full"
|
|
47
48
|
>
|
|
48
49
|
Track Click
|
|
49
50
|
</button>
|
|
50
51
|
|
|
51
52
|
{isConfigured && (
|
|
52
|
-
<div className="
|
|
53
|
-
<p className="
|
|
54
|
-
<p className="text-4xl font-bold
|
|
53
|
+
<div className="demo-list-item mt-6">
|
|
54
|
+
<p className="demo-muted text-sm">Events sent this session:</p>
|
|
55
|
+
<p className="text-4xl font-bold">{eventCount}</p>
|
|
55
56
|
</div>
|
|
56
57
|
)}
|
|
57
58
|
</div>
|
|
58
59
|
|
|
59
|
-
<p className="mt-4 text-sm
|
|
60
|
+
<p className="demo-muted mt-4 text-sm">
|
|
60
61
|
Open your{' '}
|
|
61
62
|
<a
|
|
62
63
|
href="https://app.posthog.com/events"
|
|
63
64
|
target="_blank"
|
|
64
65
|
rel="noopener noreferrer"
|
|
65
|
-
className="text-cyan-400 hover:text-cyan-300 underline"
|
|
66
66
|
>
|
|
67
67
|
PostHog Events
|
|
68
68
|
</a>{' '}
|
|
69
69
|
page to see these events appear.
|
|
70
70
|
</p>
|
|
71
71
|
|
|
72
|
-
<p className="mt-2 text-sm
|
|
72
|
+
<p className="demo-muted mt-2 text-sm">
|
|
73
73
|
Learn more in the{' '}
|
|
74
74
|
<a
|
|
75
75
|
href="https://posthog.com/docs/libraries/react"
|
|
76
76
|
target="_blank"
|
|
77
77
|
rel="noopener noreferrer"
|
|
78
|
-
className="text-cyan-400 hover:text-cyan-300 underline"
|
|
79
78
|
>
|
|
80
79
|
PostHog React docs
|
|
81
80
|
</a>
|
|
@@ -83,11 +82,9 @@ function PostHogDemo() {
|
|
|
83
82
|
</p>
|
|
84
83
|
|
|
85
84
|
<div className="mt-8">
|
|
86
|
-
<Link to="/"
|
|
87
|
-
← Back to Home
|
|
88
|
-
</Link>
|
|
85
|
+
<Link to="/">← Back to Home</Link>
|
|
89
86
|
</div>
|
|
90
|
-
</
|
|
91
|
-
</
|
|
87
|
+
</section>
|
|
88
|
+
</main>
|
|
92
89
|
)
|
|
93
90
|
}
|
|
@@ -54,21 +54,22 @@ function PowerSyncDemo() {
|
|
|
54
54
|
</p>
|
|
55
55
|
<h1 className="text-3xl font-semibold tracking-tight">PowerSync</h1>
|
|
56
56
|
<p className="text-sm text-[var(--sea-ink-soft)]">
|
|
57
|
-
This demo writes to the local SQLite database immediately. Replace
|
|
58
|
-
schema and backend connector with your real PowerSync
|
|
57
|
+
This demo writes to the local SQLite database immediately. Replace
|
|
58
|
+
the sample schema and backend connector with your real PowerSync
|
|
59
|
+
configuration.
|
|
59
60
|
</p>
|
|
60
61
|
</header>
|
|
61
62
|
|
|
62
|
-
<section className="
|
|
63
|
+
<section className="demo-card">
|
|
63
64
|
<h2 className="text-sm font-semibold uppercase tracking-[0.16em] text-[var(--sea-ink-soft)]">
|
|
64
65
|
Connection State
|
|
65
66
|
</h2>
|
|
66
|
-
<pre className="mt-3 overflow-auto
|
|
67
|
+
<pre className="demo-code-block mt-3 overflow-auto text-xs leading-6">
|
|
67
68
|
{JSON.stringify(status, null, 2)}
|
|
68
69
|
</pre>
|
|
69
70
|
</section>
|
|
70
71
|
|
|
71
|
-
<section className="
|
|
72
|
+
<section className="demo-card">
|
|
72
73
|
<h2 className="text-sm font-semibold uppercase tracking-[0.16em] text-[var(--sea-ink-soft)]">
|
|
73
74
|
Local Todos
|
|
74
75
|
</h2>
|
|
@@ -77,39 +78,39 @@ function PowerSyncDemo() {
|
|
|
77
78
|
{error}
|
|
78
79
|
</p>
|
|
79
80
|
) : null}
|
|
80
|
-
<form
|
|
81
|
+
<form
|
|
82
|
+
className="mt-4 flex flex-col gap-3 sm:flex-row"
|
|
83
|
+
onSubmit={addTodo}
|
|
84
|
+
>
|
|
81
85
|
<label className="sr-only" htmlFor="powersync-todo-description">
|
|
82
86
|
Todo description
|
|
83
87
|
</label>
|
|
84
88
|
<input
|
|
85
89
|
id="powersync-todo-description"
|
|
86
|
-
className="min-w-0 flex-1
|
|
90
|
+
className="demo-input min-w-0 flex-1"
|
|
87
91
|
onChange={(event) => setDescription(event.target.value)}
|
|
88
92
|
placeholder="Write to the local PowerSync database"
|
|
89
93
|
value={description}
|
|
90
94
|
/>
|
|
91
|
-
<button
|
|
92
|
-
className="rounded-2xl bg-[var(--sea-ink)] px-4 py-3 text-sm font-semibold text-white"
|
|
93
|
-
type="submit"
|
|
94
|
-
>
|
|
95
|
+
<button className="demo-button" type="submit">
|
|
95
96
|
Insert Local Row
|
|
96
97
|
</button>
|
|
97
98
|
</form>
|
|
98
99
|
|
|
99
100
|
<ul className="mt-5 space-y-3">
|
|
100
101
|
{todos.length === 0 ? (
|
|
101
|
-
<li className="
|
|
102
|
-
No rows yet. Insert one locally, then wire `uploadData()` to
|
|
102
|
+
<li className="demo-list-item text-sm text-[var(--sea-ink-soft)]">
|
|
103
|
+
No rows yet. Insert one locally, then wire `uploadData()` to
|
|
104
|
+
send it upstream.
|
|
103
105
|
</li>
|
|
104
106
|
) : (
|
|
105
107
|
todos.map((todo) => (
|
|
106
|
-
<li
|
|
107
|
-
className="rounded-2xl border border-[var(--line)] bg-[var(--chip-bg)] px-4 py-4"
|
|
108
|
-
key={todo.id}
|
|
109
|
-
>
|
|
108
|
+
<li className="demo-list-item" key={todo.id}>
|
|
110
109
|
<div className="flex items-start justify-between gap-4">
|
|
111
110
|
<div>
|
|
112
|
-
<p className="font-medium text-[var(--sea-ink)]">
|
|
111
|
+
<p className="font-medium text-[var(--sea-ink)]">
|
|
112
|
+
{todo.description}
|
|
113
|
+
</p>
|
|
113
114
|
<p className="mt-1 text-xs text-[var(--sea-ink-soft)]">
|
|
114
115
|
{todo.created_at}
|
|
115
116
|
</p>
|
|
@@ -46,141 +46,91 @@ function DemoPrisma() {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
return (
|
|
49
|
-
<
|
|
50
|
-
className="
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
style={{
|
|
59
|
-
background:
|
|
60
|
-
'linear-gradient(135deg, rgba(22, 32, 46, 0.95) 0%, rgba(12, 26, 43, 0.95) 100%)',
|
|
61
|
-
backdropFilter: 'blur(10px)',
|
|
62
|
-
}}
|
|
63
|
-
>
|
|
64
|
-
<div
|
|
65
|
-
className="flex items-center justify-center gap-4 mb-8 p-4 rounded-lg"
|
|
66
|
-
style={{
|
|
67
|
-
background:
|
|
68
|
-
'linear-gradient(90deg, rgba(93, 103, 227, 0.1) 0%, rgba(139, 92, 246, 0.1) 100%)',
|
|
69
|
-
border: '1px solid rgba(93, 103, 227, 0.2)',
|
|
70
|
-
}}
|
|
71
|
-
>
|
|
72
|
-
<div className="relative group">
|
|
73
|
-
<div className="absolute -inset-2 bg-gradient-to-r from-indigo-500 via-purple-500 to-indigo-500 rounded-lg blur-lg opacity-60 group-hover:opacity-100 transition duration-500"></div>
|
|
74
|
-
<div className="relative bg-gradient-to-br from-indigo-600 to-purple-600 p-3 rounded-lg">
|
|
75
|
-
<img
|
|
76
|
-
src="/prisma.svg"
|
|
77
|
-
alt="Prisma Logo"
|
|
78
|
-
className="w-8 h-8 transform group-hover:scale-110 transition-transform duration-300"
|
|
79
|
-
/>
|
|
80
|
-
</div>
|
|
49
|
+
<main className="demo-page demo-center">
|
|
50
|
+
<section className="demo-panel w-full max-w-2xl">
|
|
51
|
+
<header className="mb-8 flex items-center gap-4">
|
|
52
|
+
<span className="demo-card flex h-14 w-14 items-center justify-center p-3">
|
|
53
|
+
<img src="/prisma.svg" alt="Prisma Logo" className="h-8 w-8" />
|
|
54
|
+
</span>
|
|
55
|
+
<div>
|
|
56
|
+
<p className="island-kicker mb-2">Database</p>
|
|
57
|
+
<h1 className="demo-title">Prisma Demo</h1>
|
|
81
58
|
</div>
|
|
82
|
-
|
|
83
|
-
Prisma Database Demo
|
|
84
|
-
</h1>
|
|
85
|
-
</div>
|
|
59
|
+
</header>
|
|
86
60
|
|
|
87
|
-
<h2 className="
|
|
61
|
+
<h2 className="demo-section-title mb-4">Todos</h2>
|
|
88
62
|
|
|
89
63
|
<ul className="space-y-3 mb-6">
|
|
90
64
|
{todos.map((todo) => (
|
|
91
65
|
<li
|
|
92
66
|
key={todo.id}
|
|
93
|
-
className="
|
|
94
|
-
style={{
|
|
95
|
-
background:
|
|
96
|
-
'linear-gradient(135deg, rgba(93, 103, 227, 0.15) 0%, rgba(139, 92, 246, 0.15) 100%)',
|
|
97
|
-
borderColor: 'rgba(93, 103, 227, 0.3)',
|
|
98
|
-
}}
|
|
67
|
+
className="demo-list-item"
|
|
99
68
|
>
|
|
100
69
|
<div className="flex items-center justify-between">
|
|
101
|
-
<span className="
|
|
102
|
-
|
|
103
|
-
</span>
|
|
104
|
-
<span className="text-xs text-indigo-300/70">#{todo.id}</span>
|
|
70
|
+
<span className="font-medium">{todo.title}</span>
|
|
71
|
+
<span className="demo-muted text-xs">#{todo.id}</span>
|
|
105
72
|
</div>
|
|
106
73
|
</li>
|
|
107
74
|
))}
|
|
108
75
|
{todos.length === 0 && (
|
|
109
|
-
<li className="
|
|
76
|
+
<li className="demo-list-item text-center demo-muted">
|
|
110
77
|
No todos yet. Create one below!
|
|
111
78
|
</li>
|
|
112
79
|
)}
|
|
113
80
|
</ul>
|
|
114
81
|
|
|
115
|
-
<form onSubmit={handleSubmit} className="flex gap-2">
|
|
82
|
+
<form onSubmit={handleSubmit} className="flex flex-col gap-2 sm:flex-row">
|
|
116
83
|
<input
|
|
117
84
|
type="text"
|
|
118
85
|
name="title"
|
|
119
86
|
placeholder="Add a new todo..."
|
|
120
|
-
className="
|
|
121
|
-
style={{
|
|
122
|
-
background: 'rgba(93, 103, 227, 0.1)',
|
|
123
|
-
borderColor: 'rgba(93, 103, 227, 0.3)',
|
|
124
|
-
focusRing: 'rgba(93, 103, 227, 0.5)',
|
|
125
|
-
}}
|
|
87
|
+
className="demo-input min-w-0 flex-1"
|
|
126
88
|
/>
|
|
127
89
|
<button
|
|
128
90
|
type="submit"
|
|
129
|
-
className="
|
|
130
|
-
style={{
|
|
131
|
-
background: 'linear-gradient(135deg, #5d67e3 0%, #8b5cf6 100%)',
|
|
132
|
-
color: 'white',
|
|
133
|
-
}}
|
|
91
|
+
className="demo-button whitespace-nowrap"
|
|
134
92
|
>
|
|
135
93
|
Add Todo
|
|
136
94
|
</button>
|
|
137
95
|
</form>
|
|
138
96
|
|
|
139
|
-
<div
|
|
140
|
-
className="
|
|
141
|
-
style={{
|
|
142
|
-
background: 'rgba(93, 103, 227, 0.05)',
|
|
143
|
-
borderColor: 'rgba(93, 103, 227, 0.2)',
|
|
144
|
-
}}
|
|
145
|
-
>
|
|
146
|
-
<h3 className="text-lg font-semibold mb-2 text-indigo-200">
|
|
97
|
+
<div className="demo-card mt-8">
|
|
98
|
+
<h3 className="demo-section-title mb-2">
|
|
147
99
|
Powered by Prisma ORM
|
|
148
100
|
</h3>
|
|
149
|
-
<p className="
|
|
101
|
+
<p className="demo-muted mb-4 text-sm">
|
|
150
102
|
Next-generation ORM for Node.js & TypeScript with PostgreSQL
|
|
151
103
|
</p>
|
|
152
104
|
<div className="space-y-2 text-sm">
|
|
153
|
-
<p className="
|
|
154
|
-
<ol className="
|
|
105
|
+
<p className="font-medium">Setup Instructions:</p>
|
|
106
|
+
<ol className="demo-muted list-inside list-decimal space-y-2">
|
|
155
107
|
<li>
|
|
156
108
|
Configure your{' '}
|
|
157
|
-
<code
|
|
158
|
-
DATABASE_URL
|
|
159
|
-
</code>{' '}
|
|
109
|
+
<code>DATABASE_URL</code>{' '}
|
|
160
110
|
in .env.local
|
|
161
111
|
</li>
|
|
162
112
|
<li>
|
|
163
113
|
Run:{' '}
|
|
164
|
-
<code
|
|
114
|
+
<code>
|
|
165
115
|
<%- getPackageManagerExecuteScript('prisma', ['generate']) %>
|
|
166
116
|
</code>
|
|
167
117
|
</li>
|
|
168
118
|
<li>
|
|
169
119
|
Run:{' '}
|
|
170
|
-
<code
|
|
120
|
+
<code>
|
|
171
121
|
<%- getPackageManagerExecuteScript('prisma', ['db', 'push']) %>
|
|
172
122
|
</code>
|
|
173
123
|
</li>
|
|
174
124
|
<li>
|
|
175
125
|
Optional:{' '}
|
|
176
|
-
<code
|
|
126
|
+
<code>
|
|
177
127
|
<%- getPackageManagerExecuteScript('prisma', ['studio']) %>
|
|
178
128
|
</code>
|
|
179
129
|
</li>
|
|
180
130
|
</ol>
|
|
181
131
|
</div>
|
|
182
132
|
</div>
|
|
183
|
-
</
|
|
184
|
-
</
|
|
133
|
+
</section>
|
|
134
|
+
</main>
|
|
185
135
|
)
|
|
186
136
|
}
|