@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.
Files changed (121) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/frameworks/react/add-ons/ai/assets/src/components/demo-AIAssistant.tsx +15 -15
  3. package/dist/frameworks/react/add-ons/ai/assets/src/components/demo-GuitarRecommendation.tsx +8 -6
  4. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.css +21 -21
  5. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.tsx +14 -18
  6. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-image.tsx +20 -26
  7. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-structured.tsx +56 -67
  8. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/$guitarId.tsx +17 -22
  9. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/index.tsx +21 -27
  10. package/dist/frameworks/react/add-ons/apollo-client/assets/src/routes/demo.apollo-client.tsx +35 -38
  11. package/dist/frameworks/react/add-ons/better-auth/assets/src/routes/demo/better-auth.tsx +64 -64
  12. package/dist/frameworks/react/add-ons/clerk/assets/src/routes/demo/clerk.tsx +17 -25
  13. package/dist/frameworks/react/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -45
  14. package/dist/frameworks/react/add-ons/db/assets/src/components/demo.chat-area.tsx +5 -5
  15. package/dist/frameworks/react/add-ons/db/assets/src/components/demo.messages.tsx +7 -11
  16. package/dist/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat.tsx +5 -3
  17. package/dist/frameworks/react/add-ons/drizzle/assets/src/routes/demo/drizzle.tsx.ejs +29 -79
  18. package/dist/frameworks/react/add-ons/form/assets/src/components/demo.FormComponents.tsx.ejs +12 -12
  19. package/dist/frameworks/react/add-ons/form/assets/src/routes/demo/form.address.tsx.ejs +11 -10
  20. package/dist/frameworks/react/add-ons/form/assets/src/routes/demo/form.simple.tsx.ejs +11 -10
  21. package/dist/frameworks/react/add-ons/mcp/assets/src/routes/demo/mcp-todos.tsx +10 -18
  22. package/dist/frameworks/react/add-ons/neon/assets/src/routes/demo/neon.tsx +38 -57
  23. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/demo/orpc-todo.tsx +10 -18
  24. package/dist/frameworks/react/add-ons/paraglide/assets/src/routes/demo.i18n.tsx.ejs +6 -7
  25. package/dist/frameworks/react/add-ons/posthog/assets/src/routes/demo/posthog.tsx +19 -22
  26. package/dist/frameworks/react/add-ons/powersync/assets/src/routes/demo/powersync.tsx +19 -18
  27. package/dist/frameworks/react/add-ons/prisma/assets/src/routes/demo/prisma.tsx.ejs +29 -79
  28. package/dist/frameworks/react/add-ons/sentry/assets/src/routes/demo/sentry.testing.tsx +71 -102
  29. package/dist/frameworks/react/add-ons/store/assets/src/lib/demo-store-devtools.tsx +3 -3
  30. package/dist/frameworks/react/add-ons/store/assets/src/routes/demo/store.tsx.ejs +9 -14
  31. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.tsx +23 -26
  32. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/dialog.tsx +12 -16
  33. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.tsx +14 -17
  34. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.tsx +15 -15
  35. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.tsx +17 -17
  36. package/dist/frameworks/react/add-ons/storybook/assets/src/routes/demo/storybook.tsx +25 -25
  37. package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/media.tsx +9 -9
  38. package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/quote.tsx +8 -8
  39. package/dist/frameworks/react/add-ons/strapi/assets/src/components/markdown-content.tsx +52 -35
  40. package/dist/frameworks/react/add-ons/strapi/assets/src/components/pagination.tsx +8 -14
  41. package/dist/frameworks/react/add-ons/strapi/assets/src/components/search.tsx +12 -12
  42. package/dist/frameworks/react/add-ons/strapi/assets/src/components/strapi-image.tsx +15 -15
  43. package/dist/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.$articleId.tsx +52 -63
  44. package/dist/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.tsx +46 -61
  45. package/dist/frameworks/react/add-ons/tRPC/assets/src/routes/demo/trpc-todo.tsx +10 -18
  46. package/dist/frameworks/react/add-ons/table/assets/src/routes/demo/table.tsx.ejs +23 -22
  47. package/dist/frameworks/react/add-ons/tanstack-query/assets/src/routes/demo/tanstack-query.tsx.ejs +21 -35
  48. package/dist/frameworks/react/add-ons/workos/assets/src/components/workos-user.tsx +1 -1
  49. package/dist/frameworks/react/add-ons/workos/assets/src/routes/demo/workos.tsx +33 -43
  50. package/dist/frameworks/react/project/base/_dot_gitignore +1 -0
  51. package/dist/frameworks/react/project/base/src/styles.css.ejs +203 -0
  52. package/dist/frameworks/solid/add-ons/better-auth/assets/src/routes/demo.better-auth.tsx +62 -64
  53. package/dist/frameworks/solid/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -43
  54. package/dist/frameworks/solid/add-ons/form/assets/src/routes/demo.form.tsx.ejs +22 -22
  55. package/dist/frameworks/solid/add-ons/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +15 -10
  56. package/dist/frameworks/solid/add-ons/store/assets/src/routes/demo.store.tsx.ejs +9 -14
  57. package/dist/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi.tsx +11 -15
  58. package/dist/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi_.$articleId.tsx +11 -18
  59. package/dist/frameworks/solid/project/base/_dot_gitignore +1 -0
  60. package/dist/frameworks/solid/project/base/src/styles.css.ejs +203 -0
  61. package/package.json +1 -1
  62. package/src/frameworks/react/add-ons/ai/assets/src/components/demo-AIAssistant.tsx +15 -15
  63. package/src/frameworks/react/add-ons/ai/assets/src/components/demo-GuitarRecommendation.tsx +8 -6
  64. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.css +21 -21
  65. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.tsx +14 -18
  66. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-image.tsx +20 -26
  67. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-structured.tsx +56 -67
  68. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/$guitarId.tsx +17 -22
  69. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/index.tsx +21 -27
  70. package/src/frameworks/react/add-ons/apollo-client/assets/src/routes/demo.apollo-client.tsx +35 -38
  71. package/src/frameworks/react/add-ons/better-auth/assets/src/routes/demo/better-auth.tsx +64 -64
  72. package/src/frameworks/react/add-ons/clerk/assets/src/routes/demo/clerk.tsx +17 -25
  73. package/src/frameworks/react/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -45
  74. package/src/frameworks/react/add-ons/db/assets/src/components/demo.chat-area.tsx +5 -5
  75. package/src/frameworks/react/add-ons/db/assets/src/components/demo.messages.tsx +7 -11
  76. package/src/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat.tsx +5 -3
  77. package/src/frameworks/react/add-ons/drizzle/assets/src/routes/demo/drizzle.tsx.ejs +29 -79
  78. package/src/frameworks/react/add-ons/form/assets/src/components/demo.FormComponents.tsx.ejs +12 -12
  79. package/src/frameworks/react/add-ons/form/assets/src/routes/demo/form.address.tsx.ejs +11 -10
  80. package/src/frameworks/react/add-ons/form/assets/src/routes/demo/form.simple.tsx.ejs +11 -10
  81. package/src/frameworks/react/add-ons/mcp/assets/src/routes/demo/mcp-todos.tsx +10 -18
  82. package/src/frameworks/react/add-ons/neon/assets/src/routes/demo/neon.tsx +38 -57
  83. package/src/frameworks/react/add-ons/oRPC/assets/src/routes/demo/orpc-todo.tsx +10 -18
  84. package/src/frameworks/react/add-ons/paraglide/assets/src/routes/demo.i18n.tsx.ejs +6 -7
  85. package/src/frameworks/react/add-ons/posthog/assets/src/routes/demo/posthog.tsx +19 -22
  86. package/src/frameworks/react/add-ons/powersync/assets/src/routes/demo/powersync.tsx +19 -18
  87. package/src/frameworks/react/add-ons/prisma/assets/src/routes/demo/prisma.tsx.ejs +29 -79
  88. package/src/frameworks/react/add-ons/sentry/assets/src/routes/demo/sentry.testing.tsx +71 -102
  89. package/src/frameworks/react/add-ons/store/assets/src/lib/demo-store-devtools.tsx +3 -3
  90. package/src/frameworks/react/add-ons/store/assets/src/routes/demo/store.tsx.ejs +9 -14
  91. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.tsx +23 -26
  92. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/dialog.tsx +12 -16
  93. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.tsx +14 -17
  94. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.tsx +15 -15
  95. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.tsx +17 -17
  96. package/src/frameworks/react/add-ons/storybook/assets/src/routes/demo/storybook.tsx +25 -25
  97. package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/media.tsx +9 -9
  98. package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/quote.tsx +8 -8
  99. package/src/frameworks/react/add-ons/strapi/assets/src/components/markdown-content.tsx +52 -35
  100. package/src/frameworks/react/add-ons/strapi/assets/src/components/pagination.tsx +8 -14
  101. package/src/frameworks/react/add-ons/strapi/assets/src/components/search.tsx +12 -12
  102. package/src/frameworks/react/add-ons/strapi/assets/src/components/strapi-image.tsx +15 -15
  103. package/src/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.$articleId.tsx +52 -63
  104. package/src/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.tsx +46 -61
  105. package/src/frameworks/react/add-ons/tRPC/assets/src/routes/demo/trpc-todo.tsx +10 -18
  106. package/src/frameworks/react/add-ons/table/assets/src/routes/demo/table.tsx.ejs +23 -22
  107. package/src/frameworks/react/add-ons/tanstack-query/assets/src/routes/demo/tanstack-query.tsx.ejs +21 -35
  108. package/src/frameworks/react/add-ons/workos/assets/src/components/workos-user.tsx +1 -1
  109. package/src/frameworks/react/add-ons/workos/assets/src/routes/demo/workos.tsx +33 -43
  110. package/src/frameworks/react/project/base/_dot_gitignore +1 -0
  111. package/src/frameworks/react/project/base/src/styles.css.ejs +203 -0
  112. package/src/frameworks/solid/add-ons/better-auth/assets/src/routes/demo.better-auth.tsx +62 -64
  113. package/src/frameworks/solid/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -43
  114. package/src/frameworks/solid/add-ons/form/assets/src/routes/demo.form.tsx.ejs +22 -22
  115. package/src/frameworks/solid/add-ons/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +15 -10
  116. package/src/frameworks/solid/add-ons/store/assets/src/routes/demo.store.tsx.ejs +9 -14
  117. package/src/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi.tsx +11 -15
  118. package/src/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi_.$articleId.tsx +11 -18
  119. package/src/frameworks/solid/project/base/_dot_gitignore +1 -0
  120. package/src/frameworks/solid/project/base/src/styles.css.ejs +203 -0
  121. 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
- <div class="min-h-screen bg-gradient-to-b from-slate-900 via-slate-800 to-slate-900 p-8">
18
- <div class="max-w-7xl mx-auto">
19
- <h1 class="text-4xl font-bold mb-8 text-white">
20
- <span class="bg-gradient-to-r from-cyan-400 to-blue-400 bg-clip-text text-transparent">
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="text-gray-400">No articles found.</p>}
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="bg-slate-800/50 backdrop-blur-sm border border-slate-700 rounded-xl p-6 hover:border-cyan-500/50 transition-all duration-300 hover:shadow-lg hover:shadow-cyan-500/10 cursor-pointer h-full">
39
- <h2 class="text-xl font-semibold text-white mb-3">
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="text-gray-400 mb-4 leading-relaxed">
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="text-gray-400 line-clamp-3 leading-relaxed">
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="text-sm text-cyan-400/70 mt-4">
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
- </div>
63
+ </main>
68
64
  )
69
65
  }
@@ -13,12 +13,9 @@ function RouteComponent() {
13
13
  const article = Route.useLoaderData()
14
14
 
15
15
  return (
16
- <div class="min-h-screen bg-gradient-to-b from-slate-900 via-slate-800 to-slate-900 p-8">
17
- <div class="max-w-4xl mx-auto">
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="bg-slate-800/50 backdrop-blur-sm border border-slate-700 rounded-xl p-8">
38
- <h1 class="text-4xl font-bold text-white mb-4">
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="text-sm text-cyan-400/70 mb-6">
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="text-xl font-semibold text-gray-300 mb-3">
58
- Description
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="text-xl font-semibold text-gray-300 mb-3">Content</h2>
69
- <div class="text-gray-400 leading-relaxed whitespace-pre-wrap">
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
- </div>
69
+ </main>
77
70
  )
78
71
  }
@@ -6,6 +6,7 @@ dist-ssr
6
6
  .env
7
7
  .nitro
8
8
  .tanstack
9
+ src/routeTree.gen.ts
9
10
  .wrangler
10
11
  .output
11
12
  .vinxi
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/create",
3
- "version": "0.67.0",
3
+ "version": "0.68.1",
4
4
  "description": "TanStack Application Builder Engine",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -24,7 +24,7 @@ function Messages({ messages }: { messages: ChatMessages }) {
24
24
 
25
25
  if (!messages.length) {
26
26
  return (
27
- <div className="flex-1 flex items-center justify-center text-gray-400 text-sm">
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="w-6 h-6 rounded-lg bg-linear-to-r from-orange-500 to-red-600 flex items-center justify-center text-xs font-medium text-white flex-shrink-0">
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="w-6 h-6 rounded-lg bg-gray-700 flex items-center justify-center text-xs font-medium text-white flex-shrink-0">
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="flex-1 min-w-0 text-white prose dark:prose-invert max-w-none prose-sm">
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 flex items-center justify-between px-4 py-2.5 rounded-lg bg-linear-to-r from-green-700 to-green-900 text-white hover:opacity-90 transition-opacity"
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="absolute bottom-0 left-full ml-2 w-[700px] h-[600px] bg-gray-900 rounded-lg shadow-xl border border-orange-500/20 flex flex-col">
101
- <div className="flex items-center justify-between p-3 border-b border-orange-500/20">
102
- <h3 className="font-semibold text-white">AI Assistant</h3>
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="text-gray-400 hover:text-white transition-colors"
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="p-3 border-t border-orange-500/20">
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="w-full rounded-lg border border-orange-500/20 bg-gray-800/50 pl-3 pr-10 py-2 text-sm text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-orange-500/50 focus:border-transparent resize-none overflow-hidden"
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-orange-500 hover:text-orange-400 disabled:text-gray-500 transition-colors focus:outline-none"
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 rounded-lg overflow-hidden border border-orange-500/20 bg-gray-800/50">
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-white mb-2">{guitar.name}</h3>
24
- <p className="text-sm text-gray-300 mb-3 line-clamp-2">
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-emerald-400">
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: '/example/guitars/$guitarId',
36
+ to: '/demo/guitars/$guitarId',
35
37
  params: { guitarId: guitar.id.toString() },
36
38
  })
37
39
  showAIAssistant.setState(() => false)
38
40
  }}
39
- className="bg-gradient-to-r from-orange-500 to-red-600 text-white px-4 py-1.5 rounded-lg text-sm hover:opacity-90 transition-opacity"
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-dark.css';
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: #e5e7eb; /* text-gray-200 */
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: #e5e7eb;
41
- background-color: rgba(31, 41, 55, 0.5);
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: rgba(31, 41, 55, 0.5);
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: #f9fafb; /* text-gray-50 */
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: #f97316; /* orange-500 */
85
- background-color: rgba(249, 115, 22, 0.1);
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: rgba(249, 115, 22, 0.2);
92
+ border-color: var(--line);
93
93
  margin: 2em 0;
94
94
  }
95
95
 
96
96
  .prose a {
97
- color: #f97316; /* orange-500 */
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: #fb923c; /* orange-400 */
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 rgba(249, 115, 22, 0.2);
116
+ border: 1px solid var(--line);
117
117
  }
118
118
 
119
119
  .prose th {
120
- background-color: rgba(249, 115, 22, 0.1);
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 rgba(249, 115, 22, 0.2);
184
+ border: 1px solid var(--line);
185
185
  padding: 0.5em;
186
186
  }
187
187
 
188
188
  .prose th {
189
- background-color: rgba(249, 115, 22, 0.1);
189
+ background-color: var(--chip-bg);
190
190
  }
191
191
 
192
192
  .prose strong {
193
- color: #f9fafb; /* text-gray-50 */
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 #f97316; /* orange-500 */
202
+ border-left: 4px solid var(--lagoon-deep);
203
203
  padding-left: 1em;
204
204
  margin: 1em 0;
205
- color: #d1d5db; /* text-gray-300 */
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: #e5e7eb;
211
- background-color: rgba(31, 41, 55, 0.5);
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: rgba(31, 41, 55, 0.5);
218
+ background-color: var(--chip-bg);
219
219
  border-radius: 0.5rem;
220
220
  padding: 1rem;
221
221
  margin: 1em 0;