@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.
Files changed (132) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/create-app.js +22 -0
  3. package/dist/frameworks/react/add-ons/ai/assets/src/components/demo-AIAssistant.tsx +15 -15
  4. package/dist/frameworks/react/add-ons/ai/assets/src/components/demo-GuitarRecommendation.tsx +8 -6
  5. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.css +21 -21
  6. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.tsx +14 -18
  7. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-image.tsx +20 -26
  8. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-structured.tsx +56 -67
  9. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/$guitarId.tsx +17 -22
  10. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/index.tsx +21 -27
  11. package/dist/frameworks/react/add-ons/apollo-client/assets/src/routes/demo.apollo-client.tsx +35 -38
  12. package/dist/frameworks/react/add-ons/better-auth/assets/src/routes/demo/better-auth.tsx +64 -64
  13. package/dist/frameworks/react/add-ons/clerk/assets/src/routes/demo/clerk.tsx +17 -25
  14. package/dist/frameworks/react/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -45
  15. package/dist/frameworks/react/add-ons/db/assets/src/components/demo.chat-area.tsx +5 -5
  16. package/dist/frameworks/react/add-ons/db/assets/src/components/demo.messages.tsx +7 -11
  17. package/dist/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat.tsx +5 -3
  18. package/dist/frameworks/react/add-ons/drizzle/assets/src/routes/demo/drizzle.tsx.ejs +29 -79
  19. package/dist/frameworks/react/add-ons/form/assets/src/components/demo.FormComponents.tsx.ejs +12 -12
  20. package/dist/frameworks/react/add-ons/form/assets/src/routes/demo/form.address.tsx.ejs +11 -10
  21. package/dist/frameworks/react/add-ons/form/assets/src/routes/demo/form.simple.tsx.ejs +11 -10
  22. package/dist/frameworks/react/add-ons/mcp/assets/src/routes/demo/mcp-todos.tsx +10 -18
  23. package/dist/frameworks/react/add-ons/neon/assets/src/routes/demo/neon.tsx +38 -57
  24. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/demo/orpc-todo.tsx +10 -18
  25. package/dist/frameworks/react/add-ons/paraglide/assets/src/routes/demo.i18n.tsx.ejs +6 -7
  26. package/dist/frameworks/react/add-ons/posthog/assets/src/routes/demo/posthog.tsx +19 -22
  27. package/dist/frameworks/react/add-ons/powersync/assets/src/routes/demo/powersync.tsx +19 -18
  28. package/dist/frameworks/react/add-ons/prisma/assets/src/routes/demo/prisma.tsx.ejs +29 -79
  29. package/dist/frameworks/react/add-ons/sentry/assets/src/routes/demo/sentry.testing.tsx +71 -102
  30. package/dist/frameworks/react/add-ons/store/assets/src/lib/demo-store-devtools.tsx +3 -3
  31. package/dist/frameworks/react/add-ons/store/assets/src/routes/demo/store.tsx.ejs +9 -14
  32. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.tsx +23 -26
  33. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/dialog.tsx +12 -16
  34. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.tsx +14 -17
  35. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.tsx +15 -15
  36. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.tsx +17 -17
  37. package/dist/frameworks/react/add-ons/storybook/assets/src/routes/demo/storybook.tsx +25 -25
  38. package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/media.tsx +9 -9
  39. package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/quote.tsx +8 -8
  40. package/dist/frameworks/react/add-ons/strapi/assets/src/components/markdown-content.tsx +52 -35
  41. package/dist/frameworks/react/add-ons/strapi/assets/src/components/pagination.tsx +8 -14
  42. package/dist/frameworks/react/add-ons/strapi/assets/src/components/search.tsx +12 -12
  43. package/dist/frameworks/react/add-ons/strapi/assets/src/components/strapi-image.tsx +15 -15
  44. package/dist/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.$articleId.tsx +52 -63
  45. package/dist/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.tsx +46 -61
  46. package/dist/frameworks/react/add-ons/tRPC/assets/src/routes/demo/trpc-todo.tsx +10 -18
  47. package/dist/frameworks/react/add-ons/table/assets/src/routes/demo/table.tsx.ejs +23 -22
  48. package/dist/frameworks/react/add-ons/tanstack-query/assets/src/routes/demo/tanstack-query.tsx.ejs +21 -35
  49. package/dist/frameworks/react/add-ons/workos/assets/src/components/workos-user.tsx +1 -1
  50. package/dist/frameworks/react/add-ons/workos/assets/src/routes/demo/workos.tsx +33 -43
  51. package/dist/frameworks/react/project/base/package.json +1 -0
  52. package/dist/frameworks/react/project/base/src/styles.css.ejs +203 -0
  53. package/dist/frameworks/react/project/base/tsr.config.json +3 -0
  54. package/dist/frameworks/react/project/packages.json +3 -0
  55. package/dist/frameworks/solid/add-ons/better-auth/assets/src/routes/demo.better-auth.tsx +62 -64
  56. package/dist/frameworks/solid/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -43
  57. package/dist/frameworks/solid/add-ons/form/assets/src/routes/demo.form.tsx.ejs +22 -22
  58. package/dist/frameworks/solid/add-ons/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +15 -10
  59. package/dist/frameworks/solid/add-ons/store/assets/src/routes/demo.store.tsx.ejs +9 -14
  60. package/dist/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi.tsx +11 -15
  61. package/dist/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi_.$articleId.tsx +11 -18
  62. package/dist/frameworks/solid/project/base/package.json +1 -0
  63. package/dist/frameworks/solid/project/base/src/styles.css.ejs +203 -0
  64. package/dist/frameworks/solid/project/base/tsr.config.json +3 -0
  65. package/dist/frameworks/solid/project/packages.json +3 -0
  66. package/package.json +1 -1
  67. package/src/create-app.ts +32 -1
  68. package/src/frameworks/react/add-ons/ai/assets/src/components/demo-AIAssistant.tsx +15 -15
  69. package/src/frameworks/react/add-ons/ai/assets/src/components/demo-GuitarRecommendation.tsx +8 -6
  70. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.css +21 -21
  71. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-chat.tsx +14 -18
  72. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-image.tsx +20 -26
  73. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/ai-structured.tsx +56 -67
  74. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/$guitarId.tsx +17 -22
  75. package/src/frameworks/react/add-ons/ai/assets/src/routes/demo/guitars/index.tsx +21 -27
  76. package/src/frameworks/react/add-ons/apollo-client/assets/src/routes/demo.apollo-client.tsx +35 -38
  77. package/src/frameworks/react/add-ons/better-auth/assets/src/routes/demo/better-auth.tsx +64 -64
  78. package/src/frameworks/react/add-ons/clerk/assets/src/routes/demo/clerk.tsx +17 -25
  79. package/src/frameworks/react/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -45
  80. package/src/frameworks/react/add-ons/db/assets/src/components/demo.chat-area.tsx +5 -5
  81. package/src/frameworks/react/add-ons/db/assets/src/components/demo.messages.tsx +7 -11
  82. package/src/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat.tsx +5 -3
  83. package/src/frameworks/react/add-ons/drizzle/assets/src/routes/demo/drizzle.tsx.ejs +29 -79
  84. package/src/frameworks/react/add-ons/form/assets/src/components/demo.FormComponents.tsx.ejs +12 -12
  85. package/src/frameworks/react/add-ons/form/assets/src/routes/demo/form.address.tsx.ejs +11 -10
  86. package/src/frameworks/react/add-ons/form/assets/src/routes/demo/form.simple.tsx.ejs +11 -10
  87. package/src/frameworks/react/add-ons/mcp/assets/src/routes/demo/mcp-todos.tsx +10 -18
  88. package/src/frameworks/react/add-ons/neon/assets/src/routes/demo/neon.tsx +38 -57
  89. package/src/frameworks/react/add-ons/oRPC/assets/src/routes/demo/orpc-todo.tsx +10 -18
  90. package/src/frameworks/react/add-ons/paraglide/assets/src/routes/demo.i18n.tsx.ejs +6 -7
  91. package/src/frameworks/react/add-ons/posthog/assets/src/routes/demo/posthog.tsx +19 -22
  92. package/src/frameworks/react/add-ons/powersync/assets/src/routes/demo/powersync.tsx +19 -18
  93. package/src/frameworks/react/add-ons/prisma/assets/src/routes/demo/prisma.tsx.ejs +29 -79
  94. package/src/frameworks/react/add-ons/sentry/assets/src/routes/demo/sentry.testing.tsx +71 -102
  95. package/src/frameworks/react/add-ons/store/assets/src/lib/demo-store-devtools.tsx +3 -3
  96. package/src/frameworks/react/add-ons/store/assets/src/routes/demo/store.tsx.ejs +9 -14
  97. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.tsx +23 -26
  98. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/dialog.tsx +12 -16
  99. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.tsx +14 -17
  100. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.tsx +15 -15
  101. package/src/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.tsx +17 -17
  102. package/src/frameworks/react/add-ons/storybook/assets/src/routes/demo/storybook.tsx +25 -25
  103. package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/media.tsx +9 -9
  104. package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/quote.tsx +8 -8
  105. package/src/frameworks/react/add-ons/strapi/assets/src/components/markdown-content.tsx +52 -35
  106. package/src/frameworks/react/add-ons/strapi/assets/src/components/pagination.tsx +8 -14
  107. package/src/frameworks/react/add-ons/strapi/assets/src/components/search.tsx +12 -12
  108. package/src/frameworks/react/add-ons/strapi/assets/src/components/strapi-image.tsx +15 -15
  109. package/src/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.$articleId.tsx +52 -63
  110. package/src/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.tsx +46 -61
  111. package/src/frameworks/react/add-ons/tRPC/assets/src/routes/demo/trpc-todo.tsx +10 -18
  112. package/src/frameworks/react/add-ons/table/assets/src/routes/demo/table.tsx.ejs +23 -22
  113. package/src/frameworks/react/add-ons/tanstack-query/assets/src/routes/demo/tanstack-query.tsx.ejs +21 -35
  114. package/src/frameworks/react/add-ons/workos/assets/src/components/workos-user.tsx +1 -1
  115. package/src/frameworks/react/add-ons/workos/assets/src/routes/demo/workos.tsx +33 -43
  116. package/src/frameworks/react/project/base/package.json +1 -0
  117. package/src/frameworks/react/project/base/src/styles.css.ejs +203 -0
  118. package/src/frameworks/react/project/base/tsr.config.json +3 -0
  119. package/src/frameworks/react/project/packages.json +3 -0
  120. package/src/frameworks/solid/add-ons/better-auth/assets/src/routes/demo.better-auth.tsx +62 -64
  121. package/src/frameworks/solid/add-ons/convex/assets/src/routes/demo/convex.tsx +30 -43
  122. package/src/frameworks/solid/add-ons/form/assets/src/routes/demo.form.tsx.ejs +22 -22
  123. package/src/frameworks/solid/add-ons/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +15 -10
  124. package/src/frameworks/solid/add-ons/store/assets/src/routes/demo.store.tsx.ejs +9 -14
  125. package/src/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi.tsx +11 -15
  126. package/src/frameworks/solid/add-ons/strapi/assets/src/routes/demo/strapi_.$articleId.tsx +11 -18
  127. package/src/frameworks/solid/project/base/package.json +1 -0
  128. package/src/frameworks/solid/project/base/src/styles.css.ejs +203 -0
  129. package/src/frameworks/solid/project/base/tsr.config.json +3 -0
  130. package/src/frameworks/solid/project/packages.json +3 -0
  131. package/tests/create-app.test.ts +39 -3
  132. package/tests/framework-template.test.ts +34 -0
@@ -37,22 +37,14 @@ function TanStackQueryDemo() {
37
37
  }, [addTodo, todo])
38
38
 
39
39
  return (
40
- <div
41
- className="flex items-center justify-center min-h-screen bg-gradient-to-br from-red-900 via-red-800 to-black p-4 text-white"
42
- style={{
43
- backgroundImage:
44
- 'radial-gradient(50% 50% at 80% 20%, #3B021F 0%, #7B1028 60%, #1A000A 100%)',
45
- }}
46
- >
47
- <div className="w-full max-w-2xl p-8 rounded-xl backdrop-blur-md bg-black/50 shadow-xl border-8 border-black/10">
48
- <h1 className="text-2xl mb-4">TanStack Query Todos list</h1>
40
+ <main className="demo-page demo-center">
41
+ <section className="demo-panel w-full max-w-2xl">
42
+ <p className="island-kicker mb-2">TanStack Query</p>
43
+ <h1 className="demo-title mb-6">TanStack Query Todos</h1>
49
44
  <ul className="mb-4 space-y-2">
50
45
  {data?.map((t) => (
51
- <li
52
- key={t.id}
53
- className="bg-white/10 border border-white/20 rounded-lg p-3 backdrop-blur-sm shadow-md"
54
- >
55
- <span className="text-lg text-white">{t.name}</span>
46
+ <li key={t.id} className="demo-list-item">
47
+ <span className="text-base font-medium">{t.name}</span>
56
48
  </li>
57
49
  ))}
58
50
  </ul>
@@ -67,18 +59,18 @@ function TanStackQueryDemo() {
67
59
  }
68
60
  }}
69
61
  placeholder="Enter a new todo..."
70
- className="w-full px-4 py-3 rounded-lg border border-white/20 bg-white/10 backdrop-blur-sm text-white placeholder-white/60 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:border-transparent"
62
+ className="demo-input"
71
63
  />
72
64
  <button
73
65
  disabled={todo.trim().length === 0}
74
66
  onClick={submitTodo}
75
- className="bg-blue-500 hover:bg-blue-600 disabled:bg-blue-500/50 disabled:cursor-not-allowed text-white font-bold py-3 px-4 rounded-lg transition-colors"
67
+ className="demo-button"
76
68
  >
77
69
  Add todo
78
70
  </button>
79
71
  </div>
80
- </div>
81
- </div>
72
+ </section>
73
+ </main>
82
74
  )
83
75
  }
84
76
  <% } else {
@@ -104,27 +96,21 @@ function TanStackQueryDemo() {
104
96
  })
105
97
 
106
98
  return (
107
- <div
108
- className="flex items-center justify-center min-h-screen bg-gradient-to-br from-purple-100 to-blue-100 p-4 text-white"
109
- style={{
110
- backgroundImage:
111
- 'radial-gradient(50% 50% at 95% 5%, #f4a460 0%, #8b4513 70%, #1a0f0a 100%)',
112
- }}
113
- >
114
- <div className="w-full max-w-2xl p-8 rounded-xl backdrop-blur-md bg-black/50 shadow-xl border-8 border-black/10">
115
- <h1 className="text-2xl mb-4">TanStack Query Simple Promise Handling</h1>
99
+ <main className="demo-page demo-center">
100
+ <section className="demo-panel w-full max-w-2xl">
101
+ <p className="island-kicker mb-2">TanStack Query</p>
102
+ <h1 className="demo-title mb-6">
103
+ TanStack Query Simple Promise Handling
104
+ </h1>
116
105
  <ul className="mb-4 space-y-2">
117
106
  {data.map((todo) => (
118
- <li
119
- key={todo.id}
120
- className="bg-white/10 border border-white/20 rounded-lg p-3 backdrop-blur-sm shadow-md"
121
- >
122
- <span className="text-lg text-white">{todo.name}</span>
107
+ <li key={todo.id} className="demo-list-item">
108
+ <span className="text-base font-medium">{todo.name}</span>
123
109
  </li>
124
110
  ))}
125
111
  </ul>
126
- </div>
127
- </div>
112
+ </section>
113
+ </main>
128
114
  )
129
115
  }
130
116
 
@@ -135,4 +121,4 @@ export default (parentRoute: RootRoute) => createRoute({
135
121
  getParentRoute: () => parentRoute,
136
122
  })
137
123
  <% } %>
138
- <% } %>
124
+ <% } %>
@@ -5,7 +5,7 @@ export default function SignInButton({ large }: { large?: boolean }) {
5
5
 
6
6
  const buttonClasses = `${
7
7
  large ? 'px-6 py-3 text-base' : 'px-4 py-2 text-sm'
8
- } bg-blue-600 hover:bg-blue-700 text-white font-medium rounded transition-colors disabled:opacity-50 disabled:cursor-not-allowed`
8
+ } demo-button disabled:opacity-50 disabled:cursor-not-allowed`
9
9
 
10
10
  if (user) {
11
11
  return (
@@ -11,99 +11,89 @@ function App() {
11
11
 
12
12
  if (isLoading) {
13
13
  return (
14
- <div className="min-h-screen bg-gradient-to-br from-gray-900 via-gray-800 to-gray-900 flex items-center justify-center p-4">
15
- <div className="bg-gray-800/50 backdrop-blur-sm rounded-2xl shadow-2xl p-8 w-full max-w-md border border-gray-700/50">
16
- <p className="text-gray-400 text-center">Loading...</p>
17
- </div>
18
- </div>
14
+ <main className="demo-page demo-center">
15
+ <section className="demo-panel w-full max-w-md">
16
+ <p className="demo-muted text-center">Loading...</p>
17
+ </section>
18
+ </main>
19
19
  )
20
20
  }
21
21
 
22
22
  if (user) {
23
23
  return (
24
- <div className="min-h-screen bg-gradient-to-br from-gray-900 via-gray-800 to-gray-900 flex items-center justify-center p-4">
25
- <div className="bg-gray-800/50 backdrop-blur-sm rounded-2xl shadow-2xl p-8 w-full max-w-md border border-gray-700/50">
26
- <h1 className="text-2xl font-bold text-white mb-6 text-center">
27
- User Profile
28
- </h1>
24
+ <main className="demo-page demo-center">
25
+ <section className="demo-panel w-full max-w-md">
26
+ <p className="island-kicker mb-2 text-center">WorkOS</p>
27
+ <h1 className="demo-title mb-6 text-center">User Profile</h1>
29
28
 
30
29
  <div className="space-y-6">
31
- {/* Profile Picture */}
32
30
  {user.profilePictureUrl && (
33
31
  <div className="flex justify-center">
34
32
  <img
35
33
  src={user.profilePictureUrl}
36
34
  alt={`Avatar of ${user.firstName} ${user.lastName}`}
37
- className="w-24 h-24 rounded-full border-4 border-gray-700 shadow-lg"
35
+ className="h-24 w-24 rounded-full border border-[var(--line)] shadow-lg"
38
36
  />
39
37
  </div>
40
38
  )}
41
39
 
42
- {/* User Information */}
43
40
  <div className="space-y-4">
44
- <div className="bg-gray-700/30 rounded-lg p-4 border border-gray-600/30">
45
- <label className="text-gray-400 text-sm font-medium block mb-1">
41
+ <div className="demo-list-item">
42
+ <label className="demo-muted block text-sm font-medium mb-1">
46
43
  First Name
47
44
  </label>
48
- <p className="text-white text-lg">{user.firstName || 'N/A'}</p>
45
+ <p className="text-lg">{user.firstName || 'N/A'}</p>
49
46
  </div>
50
47
 
51
- <div className="bg-gray-700/30 rounded-lg p-4 border border-gray-600/30">
52
- <label className="text-gray-400 text-sm font-medium block mb-1">
48
+ <div className="demo-list-item">
49
+ <label className="demo-muted block text-sm font-medium mb-1">
53
50
  Last Name
54
51
  </label>
55
- <p className="text-white text-lg">{user.lastName || 'N/A'}</p>
52
+ <p className="text-lg">{user.lastName || 'N/A'}</p>
56
53
  </div>
57
54
 
58
- <div className="bg-gray-700/30 rounded-lg p-4 border border-gray-600/30">
59
- <label className="text-gray-400 text-sm font-medium block mb-1">
55
+ <div className="demo-list-item">
56
+ <label className="demo-muted block text-sm font-medium mb-1">
60
57
  Email
61
58
  </label>
62
- <p className="text-white text-lg break-all">
63
- {user.email || 'N/A'}
64
- </p>
59
+ <p className="break-all text-lg">{user.email || 'N/A'}</p>
65
60
  </div>
66
61
 
67
- <div className="bg-gray-700/30 rounded-lg p-4 border border-gray-600/30">
68
- <label className="text-gray-400 text-sm font-medium block mb-1">
62
+ <div className="demo-list-item">
63
+ <label className="demo-muted block text-sm font-medium mb-1">
69
64
  User ID
70
65
  </label>
71
- <p className="text-gray-300 text-sm font-mono break-all">
66
+ <p className="demo-muted break-all font-mono text-sm">
72
67
  {user.id || 'N/A'}
73
68
  </p>
74
69
  </div>
75
70
  </div>
76
71
 
77
- {/* Sign Out Button */}
78
- <button
79
- onClick={() => signOut()}
80
- className="w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-6 rounded-lg transition-colors shadow-lg hover:shadow-xl"
81
- >
72
+ <button onClick={() => signOut()} className="demo-button w-full">
82
73
  Sign Out
83
74
  </button>
84
75
  </div>
85
- </div>
86
- </div>
76
+ </section>
77
+ </main>
87
78
  )
88
79
  }
89
80
 
90
81
  return (
91
- <div className="min-h-screen bg-gradient-to-br from-gray-900 via-gray-800 to-gray-900 flex items-center justify-center p-4">
92
- <div className="bg-gray-800/50 backdrop-blur-sm rounded-2xl shadow-2xl p-8 w-full max-w-md border border-gray-700/50">
93
- <h1 className="text-2xl font-bold text-white mb-6 text-center">
94
- WorkOS Authentication
95
- </h1>
96
- <p className="text-gray-400 text-center mb-6">
82
+ <main className="demo-page demo-center">
83
+ <section className="demo-panel w-full max-w-md">
84
+ <p className="island-kicker mb-2 text-center">WorkOS</p>
85
+ <h1 className="demo-title mb-6 text-center">WorkOS Authentication</h1>
86
+ <p className="demo-muted text-center mb-6">
97
87
  Sign in to view your profile information
98
88
  </p>
99
89
  <button
100
90
  onClick={() => signIn()}
101
91
  disabled={isLoading}
102
- className="w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-6 rounded-lg transition-colors shadow-lg hover:shadow-xl disabled:opacity-50 disabled:cursor-not-allowed"
92
+ className="demo-button w-full"
103
93
  >
104
94
  Sign In with AuthKit
105
95
  </button>
106
- </div>
107
- </div>
96
+ </section>
97
+ </main>
108
98
  )
109
99
  }
@@ -7,6 +7,7 @@
7
7
  },
8
8
  "scripts": {
9
9
  "dev": "vite dev --port 3000",
10
+ "generate-routes": "tsr generate",
10
11
  "build": "vite build",
11
12
  "preview": "vite preview",
12
13
  "test": "vitest run"
@@ -203,6 +203,209 @@ pre code {
203
203
  border-color: color-mix(in oklab, var(--lagoon-deep) 35%, var(--line));
204
204
  }
205
205
 
206
+ .demo-page {
207
+ width: min(1080px, calc(100% - 2rem));
208
+ margin-inline: auto;
209
+ padding-block: clamp(2.25rem, 6vw, 4.5rem);
210
+ color: var(--sea-ink);
211
+ }
212
+
213
+ .demo-page-wide {
214
+ width: min(1280px, calc(100% - 2rem));
215
+ }
216
+
217
+ .demo-center {
218
+ min-height: calc(100vh - 13rem);
219
+ display: flex;
220
+ align-items: center;
221
+ justify-content: center;
222
+ }
223
+
224
+ .demo-panel,
225
+ .demo-card {
226
+ border: 1px solid var(--line);
227
+ background: linear-gradient(165deg, var(--surface-strong), var(--surface));
228
+ box-shadow:
229
+ 0 1px 0 var(--inset-glint) inset,
230
+ 0 18px 34px rgba(30, 90, 72, 0.1),
231
+ 0 4px 14px rgba(23, 58, 64, 0.06);
232
+ backdrop-filter: blur(4px);
233
+ }
234
+
235
+ .demo-panel {
236
+ border-radius: 1.25rem;
237
+ padding: clamp(1.25rem, 4vw, 2rem);
238
+ }
239
+
240
+ .demo-card {
241
+ border-radius: 1rem;
242
+ padding: 1rem;
243
+ }
244
+
245
+ .demo-title {
246
+ margin: 0;
247
+ color: var(--sea-ink);
248
+ font-size: clamp(1.75rem, 4vw, 2.75rem);
249
+ line-height: 1.05;
250
+ font-weight: 800;
251
+ letter-spacing: 0;
252
+ }
253
+
254
+ .demo-section-title {
255
+ margin: 0;
256
+ color: var(--sea-ink);
257
+ font-size: 1rem;
258
+ font-weight: 700;
259
+ }
260
+
261
+ .demo-muted {
262
+ color: var(--sea-ink-soft);
263
+ }
264
+
265
+ .demo-input,
266
+ .demo-select,
267
+ .demo-textarea {
268
+ width: 100%;
269
+ border: 1px solid var(--line);
270
+ border-radius: 0.75rem;
271
+ background: color-mix(in oklab, var(--surface-strong) 88%, white 12%);
272
+ color: var(--sea-ink);
273
+ outline: none;
274
+ transition: border-color 180ms ease, box-shadow 180ms ease, background-color 180ms ease;
275
+ }
276
+
277
+ .demo-input,
278
+ .demo-select {
279
+ padding: 0.7rem 0.9rem;
280
+ }
281
+
282
+ .demo-input-fit {
283
+ width: auto;
284
+ }
285
+
286
+ .demo-textarea {
287
+ min-height: 7rem;
288
+ padding: 0.8rem 0.9rem;
289
+ resize: vertical;
290
+ }
291
+
292
+ .demo-input:focus,
293
+ .demo-select:focus,
294
+ .demo-textarea:focus {
295
+ border-color: color-mix(in oklab, var(--lagoon-deep) 58%, var(--line));
296
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--lagoon) 24%, transparent);
297
+ }
298
+
299
+ .demo-button {
300
+ display: inline-flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ gap: 0.5rem;
304
+ border: 1px solid color-mix(in oklab, var(--lagoon-deep) 34%, var(--line));
305
+ border-radius: 0.85rem;
306
+ background: color-mix(in oklab, var(--lagoon) 22%, var(--surface-strong));
307
+ color: var(--sea-ink);
308
+ padding: 0.72rem 1rem;
309
+ font-size: 0.9rem;
310
+ font-weight: 700;
311
+ line-height: 1;
312
+ cursor: pointer;
313
+ }
314
+
315
+ .demo-button:hover {
316
+ transform: translateY(-1px);
317
+ background: color-mix(in oklab, var(--lagoon) 30%, var(--surface-strong));
318
+ }
319
+
320
+ .demo-button:disabled {
321
+ cursor: not-allowed;
322
+ opacity: 0.55;
323
+ transform: none;
324
+ }
325
+
326
+ .demo-button-secondary {
327
+ border-color: var(--line);
328
+ background: color-mix(in oklab, var(--surface-strong) 74%, transparent);
329
+ color: var(--sea-ink-soft);
330
+ }
331
+
332
+ .demo-button-danger {
333
+ border-color: rgba(196, 71, 71, 0.28);
334
+ background: rgba(196, 71, 71, 0.1);
335
+ color: #9f3030;
336
+ }
337
+
338
+ .demo-list-item {
339
+ border: 1px solid var(--line);
340
+ border-radius: 0.9rem;
341
+ background: color-mix(in oklab, var(--chip-bg) 82%, transparent);
342
+ padding: 0.9rem 1rem;
343
+ }
344
+
345
+ .demo-pill {
346
+ display: inline-flex;
347
+ align-items: center;
348
+ gap: 0.35rem;
349
+ border: 1px solid var(--chip-line);
350
+ border-radius: 999px;
351
+ background: var(--chip-bg);
352
+ color: var(--sea-ink-soft);
353
+ padding: 0.35rem 0.65rem;
354
+ font-size: 0.75rem;
355
+ font-weight: 700;
356
+ }
357
+
358
+ .demo-alert {
359
+ border: 1px solid rgba(193, 126, 42, 0.3);
360
+ border-radius: 1rem;
361
+ background: rgba(193, 126, 42, 0.1);
362
+ color: var(--sea-ink);
363
+ padding: 1rem;
364
+ }
365
+
366
+ .demo-alert-danger {
367
+ border-color: rgba(196, 71, 71, 0.3);
368
+ background: rgba(196, 71, 71, 0.1);
369
+ }
370
+
371
+ .demo-code-block {
372
+ border: 1px solid var(--line);
373
+ border-radius: 1rem;
374
+ background: color-mix(in oklab, var(--chip-bg) 88%, transparent);
375
+ color: var(--sea-ink);
376
+ padding: 1rem;
377
+ }
378
+
379
+ .demo-table-shell {
380
+ overflow-x: auto;
381
+ border: 1px solid var(--line);
382
+ border-radius: 1rem;
383
+ background: color-mix(in oklab, var(--surface-strong) 78%, transparent);
384
+ }
385
+
386
+ .demo-table {
387
+ width: 100%;
388
+ border-collapse: collapse;
389
+ color: var(--sea-ink);
390
+ }
391
+
392
+ .demo-table th,
393
+ .demo-table td {
394
+ border-bottom: 1px solid var(--line);
395
+ padding: 0.75rem 1rem;
396
+ text-align: left;
397
+ }
398
+
399
+ .demo-table th {
400
+ background: color-mix(in oklab, var(--chip-bg) 88%, transparent);
401
+ color: var(--sea-ink);
402
+ font-weight: 700;
403
+ }
404
+
405
+ .demo-table tr:hover td {
406
+ background: color-mix(in oklab, var(--lagoon) 8%, transparent);
407
+ }
408
+
206
409
  button,
207
410
  .island-shell,
208
411
  a {
@@ -0,0 +1,3 @@
1
+ {
2
+ "target": "react"
3
+ }
@@ -15,6 +15,9 @@
15
15
  }
16
16
  },
17
17
  "file-router": {
18
+ "devDependencies": {
19
+ "@tanstack/router-cli": "^1.132.0"
20
+ },
18
21
  "dependencies": {
19
22
  "@tanstack/router-plugin": "^1.132.0"
20
23
  }