@tanstack/create 0.67.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 +34 -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
|
@@ -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
|
@@ -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>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@import 'tailwindcss';
|
|
2
|
-
@import 'highlight.js/styles/github
|
|
2
|
+
@import 'highlight.js/styles/github.css';
|
|
3
3
|
@source "../../../../node_modules/streamdown/dist/*.js";
|
|
4
4
|
|
|
5
5
|
/* Custom scrollbar styles */
|
|
@@ -28,7 +28,7 @@ html {
|
|
|
28
28
|
/* Markdown content styles */
|
|
29
29
|
.prose {
|
|
30
30
|
max-width: none;
|
|
31
|
-
color:
|
|
31
|
+
color: var(--sea-ink-soft);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/* .prose p {
|
|
@@ -37,15 +37,15 @@ html {
|
|
|
37
37
|
} */
|
|
38
38
|
|
|
39
39
|
.prose code {
|
|
40
|
-
color:
|
|
41
|
-
background-color:
|
|
40
|
+
color: var(--sea-ink);
|
|
41
|
+
background-color: var(--chip-bg);
|
|
42
42
|
padding: 0.2em 0.4em;
|
|
43
43
|
border-radius: 0.375rem;
|
|
44
44
|
font-size: 0.875em;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.prose pre {
|
|
48
|
-
background-color:
|
|
48
|
+
background-color: var(--chip-bg);
|
|
49
49
|
border-radius: 0.5rem;
|
|
50
50
|
padding: 1rem;
|
|
51
51
|
margin: 1.25em 0;
|
|
@@ -63,7 +63,7 @@ html {
|
|
|
63
63
|
.prose h2,
|
|
64
64
|
.prose h3,
|
|
65
65
|
.prose h4 {
|
|
66
|
-
color:
|
|
66
|
+
color: var(--sea-ink);
|
|
67
67
|
/* margin-top: 2em; */
|
|
68
68
|
/* margin-bottom: 1em; */
|
|
69
69
|
}
|
|
@@ -81,27 +81,27 @@ html {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
.prose blockquote {
|
|
84
|
-
border-left-color:
|
|
85
|
-
background-color:
|
|
84
|
+
border-left-color: var(--lagoon-deep);
|
|
85
|
+
background-color: var(--chip-bg);
|
|
86
86
|
padding: 1em;
|
|
87
87
|
margin: 1.25em 0;
|
|
88
88
|
border-radius: 0.5rem;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
.prose hr {
|
|
92
|
-
border-color:
|
|
92
|
+
border-color: var(--line);
|
|
93
93
|
margin: 2em 0;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
.prose a {
|
|
97
|
-
color:
|
|
97
|
+
color: var(--lagoon-deep);
|
|
98
98
|
text-decoration: underline;
|
|
99
99
|
text-decoration-thickness: 0.1em;
|
|
100
100
|
text-underline-offset: 0.2em;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
.prose a:hover {
|
|
104
|
-
color:
|
|
104
|
+
color: var(--sea-ink);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
.prose table {
|
|
@@ -113,11 +113,11 @@ html {
|
|
|
113
113
|
.prose th,
|
|
114
114
|
.prose td {
|
|
115
115
|
padding: 0.75em;
|
|
116
|
-
border: 1px solid
|
|
116
|
+
border: 1px solid var(--line);
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
.prose th {
|
|
120
|
-
background-color:
|
|
120
|
+
background-color: var(--chip-bg);
|
|
121
121
|
font-weight: 600;
|
|
122
122
|
}
|
|
123
123
|
|
|
@@ -181,16 +181,16 @@ html {
|
|
|
181
181
|
|
|
182
182
|
.prose th,
|
|
183
183
|
.prose td {
|
|
184
|
-
border: 1px solid
|
|
184
|
+
border: 1px solid var(--line);
|
|
185
185
|
padding: 0.5em;
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
.prose th {
|
|
189
|
-
background-color:
|
|
189
|
+
background-color: var(--chip-bg);
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
.prose strong {
|
|
193
|
-
color:
|
|
193
|
+
color: var(--sea-ink);
|
|
194
194
|
font-weight: 600;
|
|
195
195
|
}
|
|
196
196
|
|
|
@@ -199,23 +199,23 @@ html {
|
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
.prose blockquote {
|
|
202
|
-
border-left: 4px solid
|
|
202
|
+
border-left: 4px solid var(--lagoon-deep);
|
|
203
203
|
padding-left: 1em;
|
|
204
204
|
margin: 1em 0;
|
|
205
|
-
color:
|
|
205
|
+
color: var(--sea-ink-soft);
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
/* Ensure code blocks match the AI's formatting */
|
|
209
209
|
.prose code {
|
|
210
|
-
color:
|
|
211
|
-
background-color:
|
|
210
|
+
color: var(--sea-ink);
|
|
211
|
+
background-color: var(--chip-bg);
|
|
212
212
|
padding: 0.2em 0.4em;
|
|
213
213
|
border-radius: 0.375rem;
|
|
214
214
|
font-size: 0.875em;
|
|
215
215
|
}
|
|
216
216
|
|
|
217
217
|
.prose pre {
|
|
218
|
-
background-color:
|
|
218
|
+
background-color: var(--chip-bg);
|
|
219
219
|
border-radius: 0.5rem;
|
|
220
220
|
padding: 1rem;
|
|
221
221
|
margin: 1em 0;
|