@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
|
@@ -20,35 +20,37 @@ const SAMPLE_RECIPES = [
|
|
|
20
20
|
|
|
21
21
|
function RecipeCard({ recipe }: { recipe: Recipe }) {
|
|
22
22
|
const difficultyColors = {
|
|
23
|
-
easy: '
|
|
24
|
-
medium: '
|
|
25
|
-
hard: '
|
|
23
|
+
easy: 'demo-pill',
|
|
24
|
+
medium: 'demo-pill',
|
|
25
|
+
hard: 'demo-pill',
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
return (
|
|
29
29
|
<div className="space-y-6">
|
|
30
30
|
{/* Header */}
|
|
31
31
|
<div>
|
|
32
|
-
<h3 className="text-2xl font-bold text-
|
|
33
|
-
|
|
32
|
+
<h3 className="text-2xl font-bold text-[var(--sea-ink)] mb-2">
|
|
33
|
+
{recipe.name}
|
|
34
|
+
</h3>
|
|
35
|
+
<p className="demo-muted">{recipe.description}</p>
|
|
34
36
|
</div>
|
|
35
37
|
|
|
36
38
|
{/* Meta info */}
|
|
37
39
|
<div className="flex flex-wrap gap-4">
|
|
38
|
-
<div className="flex items-center gap-2
|
|
39
|
-
<Clock className="w-4 h-4 text-
|
|
40
|
+
<div className="demo-muted flex items-center gap-2">
|
|
41
|
+
<Clock className="w-4 h-4 text-[var(--lagoon-deep)]" />
|
|
40
42
|
<span className="text-sm">Prep: {recipe.prepTime}</span>
|
|
41
43
|
</div>
|
|
42
|
-
<div className="flex items-center gap-2
|
|
43
|
-
<Clock className="w-4 h-4 text-
|
|
44
|
+
<div className="demo-muted flex items-center gap-2">
|
|
45
|
+
<Clock className="w-4 h-4 text-[var(--lagoon-deep)]" />
|
|
44
46
|
<span className="text-sm">Cook: {recipe.cookTime}</span>
|
|
45
47
|
</div>
|
|
46
|
-
<div className="flex items-center gap-2
|
|
47
|
-
<Users className="w-4 h-4 text-
|
|
48
|
+
<div className="demo-muted flex items-center gap-2">
|
|
49
|
+
<Users className="w-4 h-4 text-[var(--lagoon-deep)]" />
|
|
48
50
|
<span className="text-sm">{recipe.servings} servings</span>
|
|
49
51
|
</div>
|
|
50
52
|
<div
|
|
51
|
-
className={`flex items-center gap-2
|
|
53
|
+
className={`flex items-center gap-2 ${
|
|
52
54
|
difficultyColors[recipe.difficulty]
|
|
53
55
|
}`}
|
|
54
56
|
>
|
|
@@ -59,16 +61,16 @@ function RecipeCard({ recipe }: { recipe: Recipe }) {
|
|
|
59
61
|
|
|
60
62
|
{/* Ingredients */}
|
|
61
63
|
<div>
|
|
62
|
-
<h4 className="text-lg font-semibold text-
|
|
64
|
+
<h4 className="text-lg font-semibold text-[var(--sea-ink)] mb-3">
|
|
65
|
+
Ingredients
|
|
66
|
+
</h4>
|
|
63
67
|
<ul className="grid grid-cols-1 md:grid-cols-2 gap-2">
|
|
64
68
|
{recipe.ingredients.map((ing, idx) => (
|
|
65
|
-
<li key={idx} className="flex items-start gap-2
|
|
66
|
-
<span className="text-
|
|
69
|
+
<li key={idx} className="demo-muted flex items-start gap-2">
|
|
70
|
+
<span className="text-[var(--lagoon-deep)]">•</span>
|
|
67
71
|
<span>
|
|
68
72
|
<span className="font-medium">{ing.amount}</span> {ing.item}
|
|
69
|
-
{ing.notes && (
|
|
70
|
-
<span className="text-gray-500 text-sm"> ({ing.notes})</span>
|
|
71
|
-
)}
|
|
73
|
+
{ing.notes && <span className="text-sm"> ({ing.notes})</span>}
|
|
72
74
|
</span>
|
|
73
75
|
</li>
|
|
74
76
|
))}
|
|
@@ -77,11 +79,13 @@ function RecipeCard({ recipe }: { recipe: Recipe }) {
|
|
|
77
79
|
|
|
78
80
|
{/* Instructions */}
|
|
79
81
|
<div>
|
|
80
|
-
<h4 className="text-lg font-semibold text-
|
|
82
|
+
<h4 className="text-lg font-semibold text-[var(--sea-ink)] mb-3">
|
|
83
|
+
Instructions
|
|
84
|
+
</h4>
|
|
81
85
|
<ol className="space-y-3">
|
|
82
86
|
{recipe.instructions.map((step, idx) => (
|
|
83
|
-
<li key={idx} className="flex gap-3
|
|
84
|
-
<span className="flex-shrink-0 w-6 h-6 bg-
|
|
87
|
+
<li key={idx} className="demo-muted flex gap-3">
|
|
88
|
+
<span className="flex-shrink-0 w-6 h-6 rounded-full border border-[var(--line)] bg-[var(--chip-bg)] text-[var(--sea-ink)] flex items-center justify-center text-sm font-medium">
|
|
85
89
|
{idx + 1}
|
|
86
90
|
</span>
|
|
87
91
|
<span>{step}</span>
|
|
@@ -93,11 +97,13 @@ function RecipeCard({ recipe }: { recipe: Recipe }) {
|
|
|
93
97
|
{/* Tips */}
|
|
94
98
|
{recipe.tips && recipe.tips.length > 0 && (
|
|
95
99
|
<div>
|
|
96
|
-
<h4 className="text-lg font-semibold text-
|
|
100
|
+
<h4 className="text-lg font-semibold text-[var(--sea-ink)] mb-3">
|
|
101
|
+
Tips
|
|
102
|
+
</h4>
|
|
97
103
|
<ul className="space-y-2">
|
|
98
104
|
{recipe.tips.map((tip, idx) => (
|
|
99
|
-
<li key={idx} className="flex items-start gap-2
|
|
100
|
-
<span className="text-
|
|
105
|
+
<li key={idx} className="demo-muted flex items-start gap-2">
|
|
106
|
+
<span className="text-[var(--lagoon-deep)]">*</span>
|
|
101
107
|
<span>{tip}</span>
|
|
102
108
|
</li>
|
|
103
109
|
))}
|
|
@@ -108,27 +114,27 @@ function RecipeCard({ recipe }: { recipe: Recipe }) {
|
|
|
108
114
|
{/* Nutrition */}
|
|
109
115
|
{recipe.nutritionPerServing && (
|
|
110
116
|
<div>
|
|
111
|
-
<h4 className="text-lg font-semibold text-
|
|
117
|
+
<h4 className="text-lg font-semibold text-[var(--sea-ink)] mb-3">
|
|
112
118
|
Nutrition (per serving)
|
|
113
119
|
</h4>
|
|
114
120
|
<div className="flex flex-wrap gap-4 text-sm">
|
|
115
121
|
{recipe.nutritionPerServing.calories && (
|
|
116
|
-
<span className="
|
|
122
|
+
<span className="demo-pill">
|
|
117
123
|
{recipe.nutritionPerServing.calories} cal
|
|
118
124
|
</span>
|
|
119
125
|
)}
|
|
120
126
|
{recipe.nutritionPerServing.protein && (
|
|
121
|
-
<span className="
|
|
127
|
+
<span className="demo-pill">
|
|
122
128
|
Protein: {recipe.nutritionPerServing.protein}
|
|
123
129
|
</span>
|
|
124
130
|
)}
|
|
125
131
|
{recipe.nutritionPerServing.carbs && (
|
|
126
|
-
<span className="
|
|
132
|
+
<span className="demo-pill">
|
|
127
133
|
Carbs: {recipe.nutritionPerServing.carbs}
|
|
128
134
|
</span>
|
|
129
135
|
)}
|
|
130
136
|
{recipe.nutritionPerServing.fat && (
|
|
131
|
-
<span className="
|
|
137
|
+
<span className="demo-pill">
|
|
132
138
|
Fat: {recipe.nutritionPerServing.fat}
|
|
133
139
|
</span>
|
|
134
140
|
)}
|
|
@@ -182,26 +188,24 @@ function StructuredPage() {
|
|
|
182
188
|
const canExecute = !!(!isLoading && recipeName.trim() && !error)
|
|
183
189
|
|
|
184
190
|
return (
|
|
185
|
-
<
|
|
186
|
-
<div
|
|
191
|
+
<main className="demo-page demo-page-wide">
|
|
192
|
+
<div>
|
|
187
193
|
<div className="flex items-center gap-3 mb-6">
|
|
188
|
-
<ChefHat className="w-8 h-8 text-
|
|
189
|
-
<h1 className="
|
|
190
|
-
One-Shot & Structured Output
|
|
191
|
-
</h1>
|
|
194
|
+
<ChefHat className="w-8 h-8 text-[var(--lagoon-deep)]" />
|
|
195
|
+
<h1 className="demo-title">One-Shot & Structured Output</h1>
|
|
192
196
|
</div>
|
|
193
197
|
|
|
194
|
-
<p className="
|
|
198
|
+
<p className="demo-muted mb-6">
|
|
195
199
|
Compare two output modes:{' '}
|
|
196
|
-
<strong className="text-
|
|
197
|
-
markdown, while{' '}
|
|
198
|
-
<strong className="text-
|
|
200
|
+
<strong className="text-[var(--sea-ink)]">One-Shot</strong> returns
|
|
201
|
+
freeform markdown, while{' '}
|
|
202
|
+
<strong className="text-[var(--sea-ink)]">Structured</strong> returns
|
|
199
203
|
validated JSON conforming to a Zod schema.
|
|
200
204
|
</p>
|
|
201
205
|
|
|
202
206
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
|
203
207
|
<div>
|
|
204
|
-
<label className="block text-sm font-medium text-
|
|
208
|
+
<label className="mb-2 block text-sm font-medium text-[var(--sea-ink)]">
|
|
205
209
|
Recipe Name
|
|
206
210
|
</label>
|
|
207
211
|
<input
|
|
@@ -210,11 +214,11 @@ function StructuredPage() {
|
|
|
210
214
|
onChange={(e) => setRecipeName(e.target.value)}
|
|
211
215
|
disabled={isLoading}
|
|
212
216
|
placeholder="e.g., Chocolate Chip Cookies"
|
|
213
|
-
className="
|
|
217
|
+
className="demo-input text-sm"
|
|
214
218
|
/>
|
|
215
219
|
|
|
216
220
|
<div className="mt-2">
|
|
217
|
-
<label className="block text-sm font-medium text-
|
|
221
|
+
<label className="mb-2 block text-sm font-medium text-[var(--sea-ink)]">
|
|
218
222
|
Quick Picks
|
|
219
223
|
</label>
|
|
220
224
|
<div className="flex flex-wrap gap-2">
|
|
@@ -223,7 +227,7 @@ function StructuredPage() {
|
|
|
223
227
|
key={name}
|
|
224
228
|
onClick={() => setRecipeName(name)}
|
|
225
229
|
disabled={isLoading}
|
|
226
|
-
className="px-2 py-1 text-xs
|
|
230
|
+
className="demo-button demo-button-secondary px-2 py-1 text-xs"
|
|
227
231
|
>
|
|
228
232
|
{name}
|
|
229
233
|
</button>
|
|
@@ -237,18 +241,14 @@ function StructuredPage() {
|
|
|
237
241
|
<button
|
|
238
242
|
onClick={() => handleGenerate('oneshot')}
|
|
239
243
|
disabled={!canExecute}
|
|
240
|
-
className=
|
|
241
|
-
!canExecute ? 'bg-gray-600' : 'bg-orange-500'
|
|
242
|
-
}`}
|
|
244
|
+
className="demo-button"
|
|
243
245
|
>
|
|
244
246
|
One-Shot (Markdown)
|
|
245
247
|
</button>
|
|
246
248
|
<button
|
|
247
249
|
onClick={() => handleGenerate('structured')}
|
|
248
250
|
disabled={!canExecute}
|
|
249
|
-
className=
|
|
250
|
-
!canExecute ? 'bg-gray-600' : 'bg-blue-500'
|
|
251
|
-
}`}
|
|
251
|
+
className="demo-button"
|
|
252
252
|
>
|
|
253
253
|
Structured (JSON)
|
|
254
254
|
</button>
|
|
@@ -256,29 +256,18 @@ function StructuredPage() {
|
|
|
256
256
|
</div>
|
|
257
257
|
</div>
|
|
258
258
|
|
|
259
|
-
|
|
260
|
-
<div className="mt-5 lg:col-span-2 bg-gray-800 rounded-lg p-6 border border-orange-500/20">
|
|
259
|
+
<div className="demo-panel mt-5 lg:col-span-2">
|
|
261
260
|
<div className="flex items-center justify-between mb-4">
|
|
262
|
-
<h2 className="
|
|
263
|
-
Generated Recipe
|
|
264
|
-
</h2>
|
|
261
|
+
<h2 className="demo-section-title">Generated Recipe</h2>
|
|
265
262
|
{result && (
|
|
266
|
-
<span
|
|
267
|
-
className={`px-2 py-1 rounded text-xs font-medium ${
|
|
268
|
-
result.mode === 'structured'
|
|
269
|
-
? 'bg-purple-500/20 text-purple-400'
|
|
270
|
-
: 'bg-blue-500/20 text-blue-400'
|
|
271
|
-
}`}
|
|
272
|
-
>
|
|
263
|
+
<span className="demo-pill">
|
|
273
264
|
{result.mode === 'structured' ? 'Structured JSON' : 'Markdown'}
|
|
274
265
|
</span>
|
|
275
266
|
)}
|
|
276
267
|
</div>
|
|
277
268
|
|
|
278
269
|
{error && (
|
|
279
|
-
<div className="
|
|
280
|
-
{error}
|
|
281
|
-
</div>
|
|
270
|
+
<div className="demo-alert demo-alert-danger mb-4">{error}</div>
|
|
282
271
|
)}
|
|
283
272
|
|
|
284
273
|
{result ? (
|
|
@@ -286,13 +275,13 @@ function StructuredPage() {
|
|
|
286
275
|
{result.mode === 'structured' && result.recipe ? (
|
|
287
276
|
<RecipeCard recipe={result.recipe} />
|
|
288
277
|
) : result.markdown ? (
|
|
289
|
-
<div className="
|
|
278
|
+
<div className="max-w-none">
|
|
290
279
|
<Streamdown>{result.markdown}</Streamdown>
|
|
291
280
|
</div>
|
|
292
281
|
) : null}
|
|
293
282
|
</div>
|
|
294
283
|
) : !error && !isLoading ? (
|
|
295
|
-
<div className="flex flex-col items-center justify-center
|
|
284
|
+
<div className="demo-muted flex h-64 flex-col items-center justify-center">
|
|
296
285
|
<ChefHat className="w-16 h-16 mb-4 opacity-50" />
|
|
297
286
|
<p>
|
|
298
287
|
Enter a recipe name and click "Generate Recipe" to get started.
|
|
@@ -301,7 +290,7 @@ function StructuredPage() {
|
|
|
301
290
|
) : null}
|
|
302
291
|
</div>
|
|
303
292
|
</div>
|
|
304
|
-
</
|
|
293
|
+
</main>
|
|
305
294
|
)
|
|
306
295
|
}
|
|
307
296
|
|
|
@@ -17,35 +17,30 @@ function RouteComponent() {
|
|
|
17
17
|
const guitar = Route.useLoaderData()
|
|
18
18
|
|
|
19
19
|
return (
|
|
20
|
-
<
|
|
21
|
-
<div className="
|
|
22
|
-
<
|
|
23
|
-
to="/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
20
|
+
<main className="demo-page">
|
|
21
|
+
<div className="grid gap-8 lg:grid-cols-[minmax(0,1fr)_minmax(20rem,28rem)] lg:items-center">
|
|
22
|
+
<section className="demo-panel">
|
|
23
|
+
<Link to="/demo/guitars/" className="mb-4 inline-block">
|
|
24
|
+
← Back to all guitars
|
|
25
|
+
</Link>
|
|
26
|
+
<h1 className="demo-title mb-4">{guitar.name}</h1>
|
|
27
|
+
<p className="demo-muted mb-6">{guitar.description}</p>
|
|
28
|
+
<div className="flex items-center justify-between">
|
|
29
|
+
<div className="text-2xl font-bold text-[var(--lagoon-deep)]">
|
|
30
|
+
${guitar.price}
|
|
31
|
+
</div>
|
|
32
|
+
<button className="demo-button">Add to Cart</button>
|
|
33
33
|
</div>
|
|
34
|
-
|
|
35
|
-
Add to Cart
|
|
36
|
-
</button>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
34
|
+
</section>
|
|
39
35
|
|
|
40
|
-
|
|
41
|
-
<div className="w-full h-full overflow-hidden rounded-2xl border-4 border-gray-800 shadow-2xl">
|
|
36
|
+
<div className="demo-card overflow-hidden p-0">
|
|
42
37
|
<img
|
|
43
38
|
src={guitar.image}
|
|
44
39
|
alt={guitar.name}
|
|
45
|
-
className="
|
|
40
|
+
className="guitar-image h-full w-full object-cover"
|
|
46
41
|
/>
|
|
47
42
|
</div>
|
|
48
43
|
</div>
|
|
49
|
-
</
|
|
44
|
+
</main>
|
|
50
45
|
)
|
|
51
46
|
}
|
|
@@ -8,48 +8,42 @@ export const Route = createFileRoute('/demo/guitars/')({
|
|
|
8
8
|
|
|
9
9
|
function GuitarsIndex() {
|
|
10
10
|
return (
|
|
11
|
-
<
|
|
12
|
-
<h1 className="
|
|
13
|
-
<div className="
|
|
11
|
+
<main className="demo-page demo-page-wide">
|
|
12
|
+
<h1 className="demo-title mb-8 text-center">Featured Guitars</h1>
|
|
13
|
+
<div className="grid gap-6 md:grid-cols-2 xl:grid-cols-3">
|
|
14
14
|
{guitars.map((guitar) => (
|
|
15
|
-
<div
|
|
16
|
-
key={guitar.id}
|
|
17
|
-
className="w-full md:w-[calc(50%-1.5rem)] xl:w-[calc(33.333%-2rem)] relative mb-24"
|
|
18
|
-
>
|
|
15
|
+
<div key={guitar.id}>
|
|
19
16
|
<Link
|
|
20
|
-
to="/
|
|
17
|
+
to="/demo/guitars/$guitarId"
|
|
21
18
|
params={{
|
|
22
19
|
guitarId: guitar.id.toString(),
|
|
23
20
|
}}
|
|
21
|
+
className="block no-underline"
|
|
24
22
|
>
|
|
25
|
-
<
|
|
26
|
-
<div className="
|
|
23
|
+
<article className="demo-card h-full overflow-hidden p-0 transition hover:-translate-y-0.5">
|
|
24
|
+
<div className="aspect-square overflow-hidden">
|
|
27
25
|
<img
|
|
28
26
|
src={guitar.image}
|
|
29
27
|
alt={guitar.name}
|
|
30
|
-
className="
|
|
28
|
+
className="guitar-image h-full w-full object-cover transition-transform duration-500 hover:scale-105"
|
|
31
29
|
/>
|
|
32
|
-
<div className="absolute inset-0 bg-gradient-to-t from-black/40 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
|
|
33
30
|
</div>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
</p>
|
|
45
|
-
<div className="text-xl font-bold text-emerald-400">
|
|
46
|
-
${guitar.price}
|
|
31
|
+
<div className="p-5">
|
|
32
|
+
<h2 className="mb-2 text-xl font-bold text-[var(--sea-ink)]">
|
|
33
|
+
{guitar.name}
|
|
34
|
+
</h2>
|
|
35
|
+
<p className="demo-muted mb-3 line-clamp-2">
|
|
36
|
+
{guitar.shortDescription}
|
|
37
|
+
</p>
|
|
38
|
+
<div className="text-xl font-bold text-[var(--lagoon-deep)]">
|
|
39
|
+
${guitar.price}
|
|
40
|
+
</div>
|
|
47
41
|
</div>
|
|
48
|
-
</
|
|
42
|
+
</article>
|
|
49
43
|
</Link>
|
|
50
44
|
</div>
|
|
51
45
|
))}
|
|
52
46
|
</div>
|
|
53
|
-
</
|
|
47
|
+
</main>
|
|
54
48
|
)
|
|
55
49
|
}
|
package/dist/frameworks/react/add-ons/apollo-client/assets/src/routes/demo.apollo-client.tsx
CHANGED
|
@@ -33,43 +33,40 @@ function RouteComponent() {
|
|
|
33
33
|
const { data } = useReadQuery(queryRef)
|
|
34
34
|
|
|
35
35
|
return (
|
|
36
|
-
<
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
<
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
</ul>
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
36
|
+
<main className="demo-page">
|
|
37
|
+
<section className="demo-panel">
|
|
38
|
+
<p className="island-kicker mb-2">GraphQL</p>
|
|
39
|
+
<h1 className="demo-title mb-6">Apollo Client Demo</h1>
|
|
40
|
+
<div className="demo-alert mb-4">
|
|
41
|
+
<p className="font-bold">Apollo Client is configured!</p>
|
|
42
|
+
<p className="text-sm mt-2">
|
|
43
|
+
This demo uses <code>preloadQuery</code> in the loader and{' '}
|
|
44
|
+
<code>useReadQuery</code> in the component for optimal streaming SSR
|
|
45
|
+
performance.
|
|
46
|
+
</p>
|
|
47
|
+
</div>
|
|
48
|
+
<div className="demo-code-block">
|
|
49
|
+
<h3 className="font-bold mb-2">Query Result:</h3>
|
|
50
|
+
<pre className="text-sm overflow-x-auto">
|
|
51
|
+
{JSON.stringify(data, null, 2)}
|
|
52
|
+
</pre>
|
|
53
|
+
</div>
|
|
54
|
+
<div className="demo-muted mt-4 text-sm">
|
|
55
|
+
<p className="font-medium text-[var(--sea-ink)]">Next steps:</p>
|
|
56
|
+
<ul className="list-disc ml-6 mt-2">
|
|
57
|
+
<li>
|
|
58
|
+
Configure your GraphQL endpoint in <code>src/router.tsx</code>
|
|
59
|
+
</li>
|
|
60
|
+
<li>Replace the example query with your actual GraphQL schema</li>
|
|
61
|
+
<li>
|
|
62
|
+
Learn more:{' '}
|
|
63
|
+
<a href="https://www.apollographql.com/docs/react">
|
|
64
|
+
Apollo Client Docs
|
|
65
|
+
</a>
|
|
66
|
+
</li>
|
|
67
|
+
</ul>
|
|
68
|
+
</div>
|
|
69
|
+
</section>
|
|
70
|
+
</main>
|
|
74
71
|
)
|
|
75
72
|
}
|