@tanstack/create 0.68.0 → 0.68.2
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 +16 -0
- package/dist/create-app.js +22 -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/package.json +1 -0
- package/dist/frameworks/react/project/base/src/styles.css.ejs +203 -0
- package/dist/frameworks/react/project/base/tsr.config.json +3 -0
- package/dist/frameworks/react/project/packages.json +3 -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/package.json +1 -0
- package/dist/frameworks/solid/project/base/src/styles.css.ejs +203 -0
- package/dist/frameworks/solid/project/base/tsr.config.json +3 -0
- package/dist/frameworks/solid/project/packages.json +3 -0
- package/package.json +1 -1
- package/src/create-app.ts +32 -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/package.json +1 -0
- package/src/frameworks/react/project/base/src/styles.css.ejs +203 -0
- package/src/frameworks/react/project/base/tsr.config.json +3 -0
- package/src/frameworks/react/project/packages.json +3 -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/package.json +1 -0
- package/src/frameworks/solid/project/base/src/styles.css.ejs +203 -0
- package/src/frameworks/solid/project/base/tsr.config.json +3 -0
- package/src/frameworks/solid/project/packages.json +3 -0
- package/tests/create-app.test.ts +39 -3
- package/tests/framework-template.test.ts +34 -0
|
@@ -14,18 +14,14 @@ function RouteComponent() {
|
|
|
14
14
|
const strapiArticles = Route.useLoaderData()
|
|
15
15
|
|
|
16
16
|
return (
|
|
17
|
-
<
|
|
18
|
-
<div
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
Strapi
|
|
22
|
-
</span>{' '}
|
|
23
|
-
<span class="text-gray-300">Articles</span>
|
|
24
|
-
</h1>
|
|
17
|
+
<main class="demo-page demo-page-wide">
|
|
18
|
+
<div>
|
|
19
|
+
<p class="island-kicker mb-2">CMS</p>
|
|
20
|
+
<h1 class="demo-title mb-8">Strapi Articles</h1>
|
|
25
21
|
|
|
26
22
|
<Show
|
|
27
23
|
when={strapiArticles() && strapiArticles().length > 0}
|
|
28
|
-
fallback={<p class="
|
|
24
|
+
fallback={<p class="demo-muted">No articles found.</p>}
|
|
29
25
|
>
|
|
30
26
|
<div class="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
|
|
31
27
|
<For each={strapiArticles()}>
|
|
@@ -35,25 +31,25 @@ function RouteComponent() {
|
|
|
35
31
|
params={{ articleId: article.documentId }}
|
|
36
32
|
class="block"
|
|
37
33
|
>
|
|
38
|
-
<article class="
|
|
39
|
-
<h2 class="text-xl font-semibold
|
|
34
|
+
<article class="demo-card h-full cursor-pointer transition hover:-translate-y-0.5">
|
|
35
|
+
<h2 class="mb-3 text-xl font-semibold">
|
|
40
36
|
{article.title || 'Untitled'}
|
|
41
37
|
</h2>
|
|
42
38
|
|
|
43
39
|
{article.description && (
|
|
44
|
-
<p class="
|
|
40
|
+
<p class="demo-muted mb-4 leading-relaxed">
|
|
45
41
|
{article.description}
|
|
46
42
|
</p>
|
|
47
43
|
)}
|
|
48
44
|
|
|
49
45
|
{article.content && (
|
|
50
|
-
<p class="
|
|
46
|
+
<p class="demo-muted line-clamp-3 leading-relaxed">
|
|
51
47
|
{article.content}
|
|
52
48
|
</p>
|
|
53
49
|
)}
|
|
54
50
|
|
|
55
51
|
{article.createdAt && (
|
|
56
|
-
<p class="
|
|
52
|
+
<p class="demo-muted mt-4 text-sm">
|
|
57
53
|
{new Date(article.createdAt).toLocaleDateString()}
|
|
58
54
|
</p>
|
|
59
55
|
)}
|
|
@@ -64,6 +60,6 @@ function RouteComponent() {
|
|
|
64
60
|
</div>
|
|
65
61
|
</Show>
|
|
66
62
|
</div>
|
|
67
|
-
</
|
|
63
|
+
</main>
|
|
68
64
|
)
|
|
69
65
|
}
|
|
@@ -13,12 +13,9 @@ function RouteComponent() {
|
|
|
13
13
|
const article = Route.useLoaderData()
|
|
14
14
|
|
|
15
15
|
return (
|
|
16
|
-
<
|
|
17
|
-
<div class="max-w-4xl
|
|
18
|
-
<Link
|
|
19
|
-
to="/demo/strapi"
|
|
20
|
-
class="inline-flex items-center text-cyan-400 hover:text-cyan-300 mb-6 transition-colors"
|
|
21
|
-
>
|
|
16
|
+
<main class="demo-page">
|
|
17
|
+
<div class="mx-auto max-w-4xl">
|
|
18
|
+
<Link to="/demo/strapi" class="mb-6 inline-flex items-center">
|
|
22
19
|
<svg
|
|
23
20
|
xmlns="http://www.w3.org/2000/svg"
|
|
24
21
|
class="h-5 w-5 mr-2"
|
|
@@ -34,13 +31,11 @@ function RouteComponent() {
|
|
|
34
31
|
Back to Articles
|
|
35
32
|
</Link>
|
|
36
33
|
|
|
37
|
-
<article class="
|
|
38
|
-
<h1 class="
|
|
39
|
-
{article()?.title || 'Untitled'}
|
|
40
|
-
</h1>
|
|
34
|
+
<article class="demo-panel">
|
|
35
|
+
<h1 class="demo-title mb-4">{article()?.title || 'Untitled'}</h1>
|
|
41
36
|
|
|
42
37
|
{article()?.createdAt && (
|
|
43
|
-
<p class="
|
|
38
|
+
<p class="demo-muted mb-6 text-sm">
|
|
44
39
|
Published on{' '}
|
|
45
40
|
{new Date(
|
|
46
41
|
article()?.createdAt || article()?.attributes?.createdAt,
|
|
@@ -54,10 +49,8 @@ function RouteComponent() {
|
|
|
54
49
|
|
|
55
50
|
{article()?.description && (
|
|
56
51
|
<div class="mb-6">
|
|
57
|
-
<h2 class="
|
|
58
|
-
|
|
59
|
-
</h2>
|
|
60
|
-
<p class="text-gray-400 leading-relaxed">
|
|
52
|
+
<h2 class="demo-section-title mb-3">Description</h2>
|
|
53
|
+
<p class="demo-muted leading-relaxed">
|
|
61
54
|
{article()?.description || article()?.attributes?.description}
|
|
62
55
|
</p>
|
|
63
56
|
</div>
|
|
@@ -65,14 +58,14 @@ function RouteComponent() {
|
|
|
65
58
|
|
|
66
59
|
{article()?.content && (
|
|
67
60
|
<div>
|
|
68
|
-
<h2 class="
|
|
69
|
-
<div class="
|
|
61
|
+
<h2 class="demo-section-title mb-3">Content</h2>
|
|
62
|
+
<div class="demo-muted whitespace-pre-wrap leading-relaxed">
|
|
70
63
|
{article()?.content}
|
|
71
64
|
</div>
|
|
72
65
|
</div>
|
|
73
66
|
)}
|
|
74
67
|
</article>
|
|
75
68
|
</div>
|
|
76
|
-
</
|
|
69
|
+
</main>
|
|
77
70
|
)
|
|
78
71
|
}
|
|
@@ -120,6 +120,209 @@ code {
|
|
|
120
120
|
0 4px 14px rgba(23, 58, 64, 0.06);
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
+
.demo-page {
|
|
124
|
+
width: min(1080px, calc(100% - 2rem));
|
|
125
|
+
margin-inline: auto;
|
|
126
|
+
padding-block: clamp(2.25rem, 6vw, 4.5rem);
|
|
127
|
+
color: var(--sea-ink);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.demo-page-wide {
|
|
131
|
+
width: min(1280px, calc(100% - 2rem));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.demo-center {
|
|
135
|
+
min-height: calc(100vh - 13rem);
|
|
136
|
+
display: flex;
|
|
137
|
+
align-items: center;
|
|
138
|
+
justify-content: center;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.demo-panel,
|
|
142
|
+
.demo-card {
|
|
143
|
+
border: 1px solid var(--line);
|
|
144
|
+
background: linear-gradient(165deg, var(--surface-strong), var(--surface));
|
|
145
|
+
box-shadow:
|
|
146
|
+
0 1px 0 var(--inset-glint) inset,
|
|
147
|
+
0 18px 34px rgba(30, 90, 72, 0.1),
|
|
148
|
+
0 4px 14px rgba(23, 58, 64, 0.06);
|
|
149
|
+
backdrop-filter: blur(4px);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.demo-panel {
|
|
153
|
+
border-radius: 1.25rem;
|
|
154
|
+
padding: clamp(1.25rem, 4vw, 2rem);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.demo-card {
|
|
158
|
+
border-radius: 1rem;
|
|
159
|
+
padding: 1rem;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.demo-title {
|
|
163
|
+
margin: 0;
|
|
164
|
+
color: var(--sea-ink);
|
|
165
|
+
font-size: clamp(1.75rem, 4vw, 2.75rem);
|
|
166
|
+
line-height: 1.05;
|
|
167
|
+
font-weight: 800;
|
|
168
|
+
letter-spacing: 0;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.demo-section-title {
|
|
172
|
+
margin: 0;
|
|
173
|
+
color: var(--sea-ink);
|
|
174
|
+
font-size: 1rem;
|
|
175
|
+
font-weight: 700;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.demo-muted {
|
|
179
|
+
color: var(--sea-ink-soft);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.demo-input,
|
|
183
|
+
.demo-select,
|
|
184
|
+
.demo-textarea {
|
|
185
|
+
width: 100%;
|
|
186
|
+
border: 1px solid var(--line);
|
|
187
|
+
border-radius: 0.75rem;
|
|
188
|
+
background: color-mix(in oklab, var(--surface-strong) 88%, white 12%);
|
|
189
|
+
color: var(--sea-ink);
|
|
190
|
+
outline: none;
|
|
191
|
+
transition: border-color 180ms ease, box-shadow 180ms ease, background-color 180ms ease;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.demo-input,
|
|
195
|
+
.demo-select {
|
|
196
|
+
padding: 0.7rem 0.9rem;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.demo-input-fit {
|
|
200
|
+
width: auto;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.demo-textarea {
|
|
204
|
+
min-height: 7rem;
|
|
205
|
+
padding: 0.8rem 0.9rem;
|
|
206
|
+
resize: vertical;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.demo-input:focus,
|
|
210
|
+
.demo-select:focus,
|
|
211
|
+
.demo-textarea:focus {
|
|
212
|
+
border-color: color-mix(in oklab, var(--lagoon-deep) 58%, var(--line));
|
|
213
|
+
box-shadow: 0 0 0 3px color-mix(in oklab, var(--lagoon) 24%, transparent);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.demo-button {
|
|
217
|
+
display: inline-flex;
|
|
218
|
+
align-items: center;
|
|
219
|
+
justify-content: center;
|
|
220
|
+
gap: 0.5rem;
|
|
221
|
+
border: 1px solid color-mix(in oklab, var(--lagoon-deep) 34%, var(--line));
|
|
222
|
+
border-radius: 0.85rem;
|
|
223
|
+
background: color-mix(in oklab, var(--lagoon) 22%, var(--surface-strong));
|
|
224
|
+
color: var(--sea-ink);
|
|
225
|
+
padding: 0.72rem 1rem;
|
|
226
|
+
font-size: 0.9rem;
|
|
227
|
+
font-weight: 700;
|
|
228
|
+
line-height: 1;
|
|
229
|
+
cursor: pointer;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.demo-button:hover {
|
|
233
|
+
transform: translateY(-1px);
|
|
234
|
+
background: color-mix(in oklab, var(--lagoon) 30%, var(--surface-strong));
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.demo-button:disabled {
|
|
238
|
+
cursor: not-allowed;
|
|
239
|
+
opacity: 0.55;
|
|
240
|
+
transform: none;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.demo-button-secondary {
|
|
244
|
+
border-color: var(--line);
|
|
245
|
+
background: color-mix(in oklab, var(--surface-strong) 74%, transparent);
|
|
246
|
+
color: var(--sea-ink-soft);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.demo-button-danger {
|
|
250
|
+
border-color: rgba(196, 71, 71, 0.28);
|
|
251
|
+
background: rgba(196, 71, 71, 0.1);
|
|
252
|
+
color: #9f3030;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.demo-list-item {
|
|
256
|
+
border: 1px solid var(--line);
|
|
257
|
+
border-radius: 0.9rem;
|
|
258
|
+
background: color-mix(in oklab, var(--chip-bg) 82%, transparent);
|
|
259
|
+
padding: 0.9rem 1rem;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.demo-pill {
|
|
263
|
+
display: inline-flex;
|
|
264
|
+
align-items: center;
|
|
265
|
+
gap: 0.35rem;
|
|
266
|
+
border: 1px solid var(--chip-line);
|
|
267
|
+
border-radius: 999px;
|
|
268
|
+
background: var(--chip-bg);
|
|
269
|
+
color: var(--sea-ink-soft);
|
|
270
|
+
padding: 0.35rem 0.65rem;
|
|
271
|
+
font-size: 0.75rem;
|
|
272
|
+
font-weight: 700;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.demo-alert {
|
|
276
|
+
border: 1px solid rgba(193, 126, 42, 0.3);
|
|
277
|
+
border-radius: 1rem;
|
|
278
|
+
background: rgba(193, 126, 42, 0.1);
|
|
279
|
+
color: var(--sea-ink);
|
|
280
|
+
padding: 1rem;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.demo-alert-danger {
|
|
284
|
+
border-color: rgba(196, 71, 71, 0.3);
|
|
285
|
+
background: rgba(196, 71, 71, 0.1);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.demo-code-block {
|
|
289
|
+
border: 1px solid var(--line);
|
|
290
|
+
border-radius: 1rem;
|
|
291
|
+
background: color-mix(in oklab, var(--chip-bg) 88%, transparent);
|
|
292
|
+
color: var(--sea-ink);
|
|
293
|
+
padding: 1rem;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.demo-table-shell {
|
|
297
|
+
overflow-x: auto;
|
|
298
|
+
border: 1px solid var(--line);
|
|
299
|
+
border-radius: 1rem;
|
|
300
|
+
background: color-mix(in oklab, var(--surface-strong) 78%, transparent);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.demo-table {
|
|
304
|
+
width: 100%;
|
|
305
|
+
border-collapse: collapse;
|
|
306
|
+
color: var(--sea-ink);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.demo-table th,
|
|
310
|
+
.demo-table td {
|
|
311
|
+
border-bottom: 1px solid var(--line);
|
|
312
|
+
padding: 0.75rem 1rem;
|
|
313
|
+
text-align: left;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.demo-table th {
|
|
317
|
+
background: color-mix(in oklab, var(--chip-bg) 88%, transparent);
|
|
318
|
+
color: var(--sea-ink);
|
|
319
|
+
font-weight: 700;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.demo-table tr:hover td {
|
|
323
|
+
background: color-mix(in oklab, var(--lagoon) 8%, transparent);
|
|
324
|
+
}
|
|
325
|
+
|
|
123
326
|
.site-header {
|
|
124
327
|
position: sticky;
|
|
125
328
|
top: 0;
|
package/package.json
CHANGED
package/src/create-app.ts
CHANGED
|
@@ -31,7 +31,7 @@ function stripExamplesFromOptions(options: Options): Options {
|
|
|
31
31
|
!isDemoFilePath(route.path) &&
|
|
32
32
|
!(route.url && route.url.startsWith('/demo')),
|
|
33
33
|
)
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
const filteredIntegrations = (addOn.integrations || []).filter(
|
|
36
36
|
(integration) => !isDemoFilePath(integration.path)
|
|
37
37
|
)
|
|
@@ -277,6 +277,37 @@ async function runCommandsAndInstallDependencies(
|
|
|
277
277
|
await installShadcnComponents(environment, options.targetDir, options)
|
|
278
278
|
|
|
279
279
|
await setupIntent(environment, options.targetDir, options)
|
|
280
|
+
|
|
281
|
+
if (shouldGenerateRoutes(options)) {
|
|
282
|
+
s.start(`Generating route tree...`)
|
|
283
|
+
const command = getPackageManagerScriptCommand(options.packageManager, [
|
|
284
|
+
'generate-routes',
|
|
285
|
+
])
|
|
286
|
+
const cmd = formatCommand(command)
|
|
287
|
+
environment.startStep({
|
|
288
|
+
id: 'generate-routes',
|
|
289
|
+
type: 'command',
|
|
290
|
+
message: cmd,
|
|
291
|
+
})
|
|
292
|
+
await environment.execute(
|
|
293
|
+
command.command,
|
|
294
|
+
command.args,
|
|
295
|
+
options.targetDir,
|
|
296
|
+
{
|
|
297
|
+
inherit: true,
|
|
298
|
+
},
|
|
299
|
+
)
|
|
300
|
+
environment.finishStep('generate-routes', 'Route tree generated')
|
|
301
|
+
s.stop(`Route tree generated`)
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
function shouldGenerateRoutes(options: Options) {
|
|
306
|
+
return (
|
|
307
|
+
options.install !== false &&
|
|
308
|
+
options.mode === 'file-router' &&
|
|
309
|
+
(options.framework.id === 'react' || options.framework.id === 'solid')
|
|
310
|
+
)
|
|
280
311
|
}
|
|
281
312
|
|
|
282
313
|
async function seedEnvValues(environment: Environment, options: Options) {
|
|
@@ -24,7 +24,7 @@ function Messages({ messages }: { messages: ChatMessages }) {
|
|
|
24
24
|
|
|
25
25
|
if (!messages.length) {
|
|
26
26
|
return (
|
|
27
|
-
<div className="flex-1
|
|
27
|
+
<div className="demo-muted flex flex-1 items-center justify-center text-sm">
|
|
28
28
|
Ask me anything! I'm here to help.
|
|
29
29
|
</div>
|
|
30
30
|
)
|
|
@@ -36,9 +36,7 @@ function Messages({ messages }: { messages: ChatMessages }) {
|
|
|
36
36
|
<div
|
|
37
37
|
key={id}
|
|
38
38
|
className={`py-3 ${
|
|
39
|
-
role === 'assistant'
|
|
40
|
-
? 'bg-linear-to-r from-orange-500/5 to-red-600/5'
|
|
41
|
-
: 'bg-transparent'
|
|
39
|
+
role === 'assistant' ? 'bg-[var(--chip-bg)]' : 'bg-transparent'
|
|
42
40
|
}`}
|
|
43
41
|
>
|
|
44
42
|
{parts.map((part, index) => {
|
|
@@ -46,15 +44,15 @@ function Messages({ messages }: { messages: ChatMessages }) {
|
|
|
46
44
|
return (
|
|
47
45
|
<div key={index} className="flex items-start gap-2 px-4">
|
|
48
46
|
{role === 'assistant' ? (
|
|
49
|
-
<div className="
|
|
47
|
+
<div className="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--lagoon-deep)] text-xs font-medium text-white">
|
|
50
48
|
AI
|
|
51
49
|
</div>
|
|
52
50
|
) : (
|
|
53
|
-
<div className="
|
|
51
|
+
<div className="flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--sea-ink-soft)] text-xs font-medium text-white">
|
|
54
52
|
Y
|
|
55
53
|
</div>
|
|
56
54
|
)}
|
|
57
|
-
<div className="
|
|
55
|
+
<div className="min-w-0 flex-1 max-w-none text-sm text-[var(--sea-ink)]">
|
|
58
56
|
<Streamdown>{part.content}</Streamdown>
|
|
59
57
|
</div>
|
|
60
58
|
</div>
|
|
@@ -87,7 +85,7 @@ export default function AIAssistant() {
|
|
|
87
85
|
<div className="relative z-50">
|
|
88
86
|
<button
|
|
89
87
|
onClick={() => showAIAssistant.setState((state) => !state)}
|
|
90
|
-
className="w-full
|
|
88
|
+
className="demo-button w-full justify-between px-4 py-2.5"
|
|
91
89
|
>
|
|
92
90
|
<div className="flex items-center gap-2">
|
|
93
91
|
<BotIcon size={24} />
|
|
@@ -97,12 +95,14 @@ export default function AIAssistant() {
|
|
|
97
95
|
</button>
|
|
98
96
|
|
|
99
97
|
{isOpen && (
|
|
100
|
-
<div className="
|
|
101
|
-
<div className="flex items-center justify-between
|
|
102
|
-
<h3 className="font-semibold text-
|
|
98
|
+
<div className="demo-panel fixed inset-x-4 top-20 z-[100] flex h-[calc(100vh-6rem)] max-h-[600px] flex-col overflow-hidden p-0 sm:left-auto sm:w-[min(calc(100vw-2rem),700px)]">
|
|
99
|
+
<div className="flex items-center justify-between border-b border-[var(--line)] p-3">
|
|
100
|
+
<h3 className="font-semibold text-[var(--sea-ink)]">
|
|
101
|
+
AI Assistant
|
|
102
|
+
</h3>
|
|
103
103
|
<button
|
|
104
104
|
onClick={() => showAIAssistant.setState((state) => !state)}
|
|
105
|
-
className="
|
|
105
|
+
className="demo-muted transition-colors hover:text-[var(--sea-ink)]"
|
|
106
106
|
>
|
|
107
107
|
<X className="w-4 h-4" />
|
|
108
108
|
</button>
|
|
@@ -110,7 +110,7 @@ export default function AIAssistant() {
|
|
|
110
110
|
|
|
111
111
|
<Messages messages={messages} />
|
|
112
112
|
|
|
113
|
-
<div className="
|
|
113
|
+
<div className="border-t border-[var(--line)] p-3">
|
|
114
114
|
<form
|
|
115
115
|
onSubmit={(e) => {
|
|
116
116
|
e.preventDefault()
|
|
@@ -125,7 +125,7 @@ export default function AIAssistant() {
|
|
|
125
125
|
value={input}
|
|
126
126
|
onChange={(e) => setInput(e.target.value)}
|
|
127
127
|
placeholder="Type your message..."
|
|
128
|
-
className="
|
|
128
|
+
className="demo-textarea pr-10 text-sm"
|
|
129
129
|
rows={1}
|
|
130
130
|
style={{ minHeight: '36px', maxHeight: '120px' }}
|
|
131
131
|
onInput={(e) => {
|
|
@@ -145,7 +145,7 @@ export default function AIAssistant() {
|
|
|
145
145
|
<button
|
|
146
146
|
type="submit"
|
|
147
147
|
disabled={!input.trim()}
|
|
148
|
-
className="absolute right-2 top-1/2 -translate-y-1/2 p-1.5 text-
|
|
148
|
+
className="absolute right-2 top-1/2 -translate-y-1/2 p-1.5 text-[var(--lagoon-deep)] transition-colors hover:text-[var(--sea-ink)] disabled:text-[var(--sea-ink-soft)]"
|
|
149
149
|
>
|
|
150
150
|
<Send className="w-4 h-4" />
|
|
151
151
|
</button>
|
|
@@ -11,7 +11,7 @@ export default function GuitarRecommendation({ id }: { id: string }) {
|
|
|
11
11
|
return null
|
|
12
12
|
}
|
|
13
13
|
return (
|
|
14
|
-
<div className="my-4
|
|
14
|
+
<div className="demo-card my-4 overflow-hidden p-0">
|
|
15
15
|
<div className="aspect-[4/3] relative overflow-hidden">
|
|
16
16
|
<img
|
|
17
17
|
src={guitar.image}
|
|
@@ -20,23 +20,25 @@ export default function GuitarRecommendation({ id }: { id: string }) {
|
|
|
20
20
|
/>
|
|
21
21
|
</div>
|
|
22
22
|
<div className="p-4">
|
|
23
|
-
<h3 className="text-lg font-semibold text-
|
|
24
|
-
|
|
23
|
+
<h3 className="mb-2 text-lg font-semibold text-[var(--sea-ink)]">
|
|
24
|
+
{guitar.name}
|
|
25
|
+
</h3>
|
|
26
|
+
<p className="demo-muted mb-3 line-clamp-2 text-sm">
|
|
25
27
|
{guitar.shortDescription}
|
|
26
28
|
</p>
|
|
27
29
|
<div className="flex items-center justify-between">
|
|
28
|
-
<div className="text-lg font-bold text-
|
|
30
|
+
<div className="text-lg font-bold text-[var(--lagoon-deep)]">
|
|
29
31
|
${guitar.price}
|
|
30
32
|
</div>
|
|
31
33
|
<button
|
|
32
34
|
onClick={() => {
|
|
33
35
|
navigate({
|
|
34
|
-
to: '/
|
|
36
|
+
to: '/demo/guitars/$guitarId',
|
|
35
37
|
params: { guitarId: guitar.id.toString() },
|
|
36
38
|
})
|
|
37
39
|
showAIAssistant.setState(() => false)
|
|
38
40
|
}}
|
|
39
|
-
className="
|
|
41
|
+
className="demo-button px-4 py-1.5 text-sm"
|
|
40
42
|
>
|
|
41
43
|
View Details
|
|
42
44
|
</button>
|