payload-auth 1.0.0

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 (200) hide show
  1. package/LICENSE.md +17 -0
  2. package/dist/authjs/index.d.ts +1 -0
  3. package/dist/authjs/index.js +3 -0
  4. package/dist/authjs/index.js.map +1 -0
  5. package/dist/better-auth/adapter/dev/bin/run.d.ts +1 -0
  6. package/dist/better-auth/adapter/dev/bin/run.js +64 -0
  7. package/dist/better-auth/adapter/dev/bin/run.js.map +1 -0
  8. package/dist/better-auth/adapter/dev/bin/schema.d.ts +22 -0
  9. package/dist/better-auth/adapter/dev/bin/schema.js +160 -0
  10. package/dist/better-auth/adapter/dev/bin/schema.js.map +1 -0
  11. package/dist/better-auth/adapter/dev/collections.d.ts +3 -0
  12. package/dist/better-auth/adapter/dev/collections.js +212 -0
  13. package/dist/better-auth/adapter/dev/collections.js.map +1 -0
  14. package/dist/better-auth/adapter/dev/index.d.ts +3 -0
  15. package/dist/better-auth/adapter/dev/index.js +168 -0
  16. package/dist/better-auth/adapter/dev/index.js.map +1 -0
  17. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +23 -0
  18. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +326 -0
  19. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +1 -0
  20. package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +1 -0
  21. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +23 -0
  22. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +1 -0
  23. package/dist/better-auth/adapter/generate-schema/index.d.ts +4 -0
  24. package/dist/better-auth/adapter/generate-schema/index.js +19 -0
  25. package/dist/better-auth/adapter/generate-schema/index.js.map +1 -0
  26. package/dist/better-auth/adapter/generate-schema/utils.d.ts +2 -0
  27. package/dist/better-auth/adapter/generate-schema/utils.js +20 -0
  28. package/dist/better-auth/adapter/generate-schema/utils.js.map +1 -0
  29. package/dist/better-auth/adapter/index.d.ts +5 -0
  30. package/dist/better-auth/adapter/index.js +578 -0
  31. package/dist/better-auth/adapter/index.js.map +1 -0
  32. package/dist/better-auth/adapter/test/adapter.test.d.ts +1 -0
  33. package/dist/better-auth/adapter/test/adapter.test.js +181 -0
  34. package/dist/better-auth/adapter/test/adapter.test.js.map +1 -0
  35. package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts +7 -0
  36. package/dist/better-auth/adapter/test/better-auth-adapter-test.js +425 -0
  37. package/dist/better-auth/adapter/test/better-auth-adapter-test.js.map +1 -0
  38. package/dist/better-auth/adapter/test/schema.test.d.ts +1 -0
  39. package/dist/better-auth/adapter/test/schema.test.js +796 -0
  40. package/dist/better-auth/adapter/test/schema.test.js.map +1 -0
  41. package/dist/better-auth/adapter/test/test_payload1/schema.d.ts +23 -0
  42. package/dist/better-auth/adapter/test/test_payload1/schema.js +177 -0
  43. package/dist/better-auth/adapter/test/test_payload1/schema.js.map +1 -0
  44. package/dist/better-auth/adapter/test/test_payload2/schema.d.ts +23 -0
  45. package/dist/better-auth/adapter/test/test_payload2/schema.js +167 -0
  46. package/dist/better-auth/adapter/test/test_payload2/schema.js.map +1 -0
  47. package/dist/better-auth/adapter/test/test_payload3/schema.d.ts +23 -0
  48. package/dist/better-auth/adapter/test/test_payload3/schema.js +198 -0
  49. package/dist/better-auth/adapter/test/test_payload3/schema.js.map +1 -0
  50. package/dist/better-auth/adapter/transform/index.d.ts +16 -0
  51. package/dist/better-auth/adapter/transform/index.js +252 -0
  52. package/dist/better-auth/adapter/transform/index.js.map +1 -0
  53. package/dist/better-auth/adapter/types.d.ts +6 -0
  54. package/dist/better-auth/adapter/types.js +3 -0
  55. package/dist/better-auth/adapter/types.js.map +1 -0
  56. package/dist/better-auth/index.d.ts +6 -0
  57. package/dist/better-auth/index.js +8 -0
  58. package/dist/better-auth/index.js.map +1 -0
  59. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.d.ts +7 -0
  60. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js +47 -0
  61. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js.map +1 -0
  62. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts +6 -0
  63. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js +106 -0
  64. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js.map +1 -0
  65. package/dist/better-auth/plugin/collections/users/hooks/after-login.d.ts +11 -0
  66. package/dist/better-auth/plugin/collections/users/hooks/after-login.js +71 -0
  67. package/dist/better-auth/plugin/collections/users/hooks/after-login.js.map +1 -0
  68. package/dist/better-auth/plugin/collections/users/hooks/after-logout.d.ts +6 -0
  69. package/dist/better-auth/plugin/collections/users/hooks/after-logout.js +49 -0
  70. package/dist/better-auth/plugin/collections/users/hooks/after-logout.js.map +1 -0
  71. package/dist/better-auth/plugin/collections/users/hooks/before-login.d.ts +5 -0
  72. package/dist/better-auth/plugin/collections/users/hooks/before-login.js +18 -0
  73. package/dist/better-auth/plugin/collections/users/hooks/before-login.js.map +1 -0
  74. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts +5 -0
  75. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js +33 -0
  76. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js.map +1 -0
  77. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts +2 -0
  78. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js +14 -0
  79. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js.map +1 -0
  80. package/dist/better-auth/plugin/collections/users/hooks/sync-account.d.ts +7 -0
  81. package/dist/better-auth/plugin/collections/users/hooks/sync-account.js +82 -0
  82. package/dist/better-auth/plugin/collections/users/hooks/sync-account.js.map +1 -0
  83. package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +29 -0
  84. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +46 -0
  85. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +1 -0
  86. package/dist/better-auth/plugin/helpers/get-ip.d.ts +2 -0
  87. package/dist/better-auth/plugin/helpers/get-ip.js +31 -0
  88. package/dist/better-auth/plugin/helpers/get-ip.js.map +1 -0
  89. package/dist/better-auth/plugin/helpers/index.d.ts +1 -0
  90. package/dist/better-auth/plugin/helpers/index.js +3 -0
  91. package/dist/better-auth/plugin/helpers/index.js.map +1 -0
  92. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +104 -0
  93. package/dist/better-auth/plugin/helpers/serialize-cookie.js +186 -0
  94. package/dist/better-auth/plugin/helpers/serialize-cookie.js.map +1 -0
  95. package/dist/better-auth/plugin/index.d.ts +7 -0
  96. package/dist/better-auth/plugin/index.js +64 -0
  97. package/dist/better-auth/plugin/index.js.map +1 -0
  98. package/dist/better-auth/plugin/lib/auth-strategy.d.ts +8 -0
  99. package/dist/better-auth/plugin/lib/auth-strategy.js +48 -0
  100. package/dist/better-auth/plugin/lib/auth-strategy.js.map +1 -0
  101. package/dist/better-auth/plugin/lib/build-collection-configs.d.ts +11 -0
  102. package/dist/better-auth/plugin/lib/build-collection-configs.js +1558 -0
  103. package/dist/better-auth/plugin/lib/build-collection-configs.js.map +1 -0
  104. package/dist/better-auth/plugin/lib/config.d.ts +41 -0
  105. package/dist/better-auth/plugin/lib/config.js +43 -0
  106. package/dist/better-auth/plugin/lib/config.js.map +1 -0
  107. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.d.ts +7 -0
  108. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js +24 -0
  109. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js.map +1 -0
  110. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +5 -0
  111. package/dist/better-auth/plugin/lib/get-payload-auth.js +9 -0
  112. package/dist/better-auth/plugin/lib/get-payload-auth.js.map +1 -0
  113. package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts +9 -0
  114. package/dist/better-auth/plugin/lib/get-required-collection-slugs.js +52 -0
  115. package/dist/better-auth/plugin/lib/get-required-collection-slugs.js.map +1 -0
  116. package/dist/better-auth/plugin/lib/init-better-auth.d.ts +6 -0
  117. package/dist/better-auth/plugin/lib/init-better-auth.js +13 -0
  118. package/dist/better-auth/plugin/lib/init-better-auth.js.map +1 -0
  119. package/dist/better-auth/plugin/lib/password.d.ts +25 -0
  120. package/dist/better-auth/plugin/lib/password.js +63 -0
  121. package/dist/better-auth/plugin/lib/password.js.map +1 -0
  122. package/dist/better-auth/plugin/lib/payload-access.d.ts +14 -0
  123. package/dist/better-auth/plugin/lib/payload-access.js +64 -0
  124. package/dist/better-auth/plugin/lib/payload-access.js.map +1 -0
  125. package/dist/better-auth/plugin/lib/prepare-session-data.d.ts +21 -0
  126. package/dist/better-auth/plugin/lib/prepare-session-data.js +42 -0
  127. package/dist/better-auth/plugin/lib/prepare-session-data.js.map +1 -0
  128. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.d.ts +15 -0
  129. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js +30 -0
  130. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js.map +1 -0
  131. package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts +5 -0
  132. package/dist/better-auth/plugin/lib/sanitize-auth-options.js +298 -0
  133. package/dist/better-auth/plugin/lib/sanitize-auth-options.js.map +1 -0
  134. package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts +5 -0
  135. package/dist/better-auth/plugin/payload/components/admin-buttons.js +222 -0
  136. package/dist/better-auth/plugin/payload/components/admin-buttons.js.map +1 -0
  137. package/dist/better-auth/plugin/payload/components/login-redirect.d.ts +1 -0
  138. package/dist/better-auth/plugin/payload/components/login-redirect.js +6 -0
  139. package/dist/better-auth/plugin/payload/components/login-redirect.js.map +1 -0
  140. package/dist/better-auth/plugin/payload/components/logo.d.ts +1 -0
  141. package/dist/better-auth/plugin/payload/components/logo.js +36 -0
  142. package/dist/better-auth/plugin/payload/components/logo.js.map +1 -0
  143. package/dist/better-auth/plugin/payload/components/logout.d.ts +1 -0
  144. package/dist/better-auth/plugin/payload/components/logout.js +61 -0
  145. package/dist/better-auth/plugin/payload/components/logout.js.map +1 -0
  146. package/dist/better-auth/plugin/payload/components/sign-in.d.ts +3 -0
  147. package/dist/better-auth/plugin/payload/components/sign-in.js +384 -0
  148. package/dist/better-auth/plugin/payload/components/sign-in.js.map +1 -0
  149. package/dist/better-auth/plugin/payload/components/sign-up.d.ts +6 -0
  150. package/dist/better-auth/plugin/payload/components/sign-up.js +502 -0
  151. package/dist/better-auth/plugin/payload/components/sign-up.js.map +1 -0
  152. package/dist/better-auth/plugin/payload/components/styles.css +73 -0
  153. package/dist/better-auth/plugin/payload/components/ui/button.d.ts +10 -0
  154. package/dist/better-auth/plugin/payload/components/ui/button.js +42 -0
  155. package/dist/better-auth/plugin/payload/components/ui/button.js.map +1 -0
  156. package/dist/better-auth/plugin/payload/components/ui/card.d.ts +9 -0
  157. package/dist/better-auth/plugin/payload/components/ui/card.js +55 -0
  158. package/dist/better-auth/plugin/payload/components/ui/card.js.map +1 -0
  159. package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts +4 -0
  160. package/dist/better-auth/plugin/payload/components/ui/checkbox.js +23 -0
  161. package/dist/better-auth/plugin/payload/components/ui/checkbox.js.map +1 -0
  162. package/dist/better-auth/plugin/payload/components/ui/cn.d.ts +2 -0
  163. package/dist/better-auth/plugin/payload/components/ui/cn.js +7 -0
  164. package/dist/better-auth/plugin/payload/components/ui/cn.js.map +1 -0
  165. package/dist/better-auth/plugin/payload/components/ui/input.d.ts +3 -0
  166. package/dist/better-auth/plugin/payload/components/ui/input.js +14 -0
  167. package/dist/better-auth/plugin/payload/components/ui/input.js.map +1 -0
  168. package/dist/better-auth/plugin/payload/components/ui/label.d.ts +4 -0
  169. package/dist/better-auth/plugin/payload/components/ui/label.js +15 -0
  170. package/dist/better-auth/plugin/payload/components/ui/label.js.map +1 -0
  171. package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts +2 -0
  172. package/dist/better-auth/plugin/payload/components/ui/password-input.js +55 -0
  173. package/dist/better-auth/plugin/payload/components/ui/password-input.js.map +1 -0
  174. package/dist/better-auth/plugin/payload/exports/client.d.ts +3 -0
  175. package/dist/better-auth/plugin/payload/exports/client.js +5 -0
  176. package/dist/better-auth/plugin/payload/exports/client.js.map +1 -0
  177. package/dist/better-auth/plugin/payload/exports/rsc.d.ts +5 -0
  178. package/dist/better-auth/plugin/payload/exports/rsc.js +7 -0
  179. package/dist/better-auth/plugin/payload/exports/rsc.js.map +1 -0
  180. package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts +4 -0
  181. package/dist/better-auth/plugin/payload/views/create-first-admin/index.js +112 -0
  182. package/dist/better-auth/plugin/payload/views/create-first-admin/index.js.map +1 -0
  183. package/dist/better-auth/plugin/payload/views/login/index.d.ts +4 -0
  184. package/dist/better-auth/plugin/payload/views/login/index.js +78 -0
  185. package/dist/better-auth/plugin/payload/views/login/index.js.map +1 -0
  186. package/dist/better-auth/plugin/types.d.ts +224 -0
  187. package/dist/better-auth/plugin/types.js +3 -0
  188. package/dist/better-auth/plugin/types.js.map +1 -0
  189. package/dist/better-auth/types.d.ts +2 -0
  190. package/dist/better-auth/types.js +4 -0
  191. package/dist/better-auth/types.js.map +1 -0
  192. package/dist/clerk/index.d.ts +1 -0
  193. package/dist/clerk/index.js +3 -0
  194. package/dist/clerk/index.js.map +1 -0
  195. package/dist/index.js +7 -0
  196. package/dist/index.js.map +1 -0
  197. package/dist/kinde/index.d.ts +1 -0
  198. package/dist/kinde/index.js +3 -0
  199. package/dist/kinde/index.js.map +1 -0
  200. package/package.json +87 -0
@@ -0,0 +1,502 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button } from './ui/button';
4
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './ui/card';
5
+ import { Input } from './ui/input';
6
+ import { Label } from './ui/label';
7
+ import { PasswordInput } from './ui/password-input';
8
+ import { DiscordLogoIcon, GitHubLogoIcon } from '@radix-ui/react-icons';
9
+ import { useState } from 'react';
10
+ import Image from 'next/image';
11
+ import { Loader2, X } from 'lucide-react';
12
+ import { toast } from 'sonner';
13
+ import { useRouter } from 'next/navigation';
14
+ import Link from 'next/link';
15
+ import { createAuthClient } from 'better-auth/react';
16
+ import { inferAdditionalFields } from 'better-auth/client/plugins';
17
+ export function SignUp({ admin = false, apiRoute, userSlug, defaultAdminRole }) {
18
+ const [firstName, setFirstName] = useState('');
19
+ const [lastName, setLastName] = useState('');
20
+ const [email, setEmail] = useState('');
21
+ const [password, setPassword] = useState('');
22
+ const [passwordConfirmation, setPasswordConfirmation] = useState('');
23
+ const [image, setImage] = useState(null);
24
+ const [imagePreview, setImagePreview] = useState(null);
25
+ const router = useRouter();
26
+ const authClient = createAuthClient({
27
+ plugins: [
28
+ inferAdditionalFields({
29
+ user: {
30
+ role: {
31
+ type: 'string'
32
+ }
33
+ }
34
+ })
35
+ ]
36
+ });
37
+ const handleImageChange = (e)=>{
38
+ const file = e.target.files?.[0];
39
+ if (file) {
40
+ setImage(file);
41
+ const reader = new FileReader();
42
+ reader.onloadend = ()=>{
43
+ setImagePreview(reader.result);
44
+ };
45
+ reader.readAsDataURL(file);
46
+ }
47
+ };
48
+ const addAdminRole = async (userId)=>{
49
+ try {
50
+ const req = await fetch(`${process.env.NEXT_PUBLIC_SERVER_URL}${apiRoute}/${userSlug}/${userId}`, {
51
+ method: 'PATCH',
52
+ credentials: 'include',
53
+ headers: {
54
+ 'Content-Type': 'application/json'
55
+ },
56
+ body: JSON.stringify({
57
+ role: defaultAdminRole ?? 'admin'
58
+ })
59
+ });
60
+ } catch (err) {
61
+ console.log(err);
62
+ }
63
+ };
64
+ const [loading, setLoading] = useState(false);
65
+ return /*#__PURE__*/ _jsxs(Card, {
66
+ className: "z-50 rounded-md rounded-t-none w-full max-w-md shadow-lg",
67
+ children: [
68
+ /*#__PURE__*/ _jsxs(CardHeader, {
69
+ className: "space-y-1",
70
+ children: [
71
+ /*#__PURE__*/ _jsx(CardTitle, {
72
+ className: "text-xl md:text-2xl font-bold",
73
+ children: "Sign Up"
74
+ }),
75
+ /*#__PURE__*/ _jsx(CardDescription, {
76
+ className: "text-sm text-muted-foreground",
77
+ children: "Enter your information to create an account"
78
+ })
79
+ ]
80
+ }),
81
+ /*#__PURE__*/ _jsx(CardContent, {
82
+ className: "space-y-4",
83
+ children: /*#__PURE__*/ _jsxs("div", {
84
+ className: "space-y-4",
85
+ children: [
86
+ /*#__PURE__*/ _jsxs("div", {
87
+ className: "grid grid-cols-2 gap-4",
88
+ children: [
89
+ /*#__PURE__*/ _jsxs("div", {
90
+ className: "space-y-2",
91
+ children: [
92
+ /*#__PURE__*/ _jsx(Label, {
93
+ htmlFor: "first-name",
94
+ className: "text-sm font-medium",
95
+ children: "First name"
96
+ }),
97
+ /*#__PURE__*/ _jsx(Input, {
98
+ id: "first-name",
99
+ placeholder: "Max",
100
+ required: true,
101
+ onChange: (e)=>{
102
+ setFirstName(e.target.value);
103
+ },
104
+ value: firstName,
105
+ className: "w-full"
106
+ })
107
+ ]
108
+ }),
109
+ /*#__PURE__*/ _jsxs("div", {
110
+ className: "space-y-2",
111
+ children: [
112
+ /*#__PURE__*/ _jsx(Label, {
113
+ htmlFor: "last-name",
114
+ className: "text-sm font-medium",
115
+ children: "Last name"
116
+ }),
117
+ /*#__PURE__*/ _jsx(Input, {
118
+ id: "last-name",
119
+ placeholder: "Robinson",
120
+ required: true,
121
+ onChange: (e)=>{
122
+ setLastName(e.target.value);
123
+ },
124
+ value: lastName,
125
+ className: "w-full"
126
+ })
127
+ ]
128
+ })
129
+ ]
130
+ }),
131
+ /*#__PURE__*/ _jsxs("div", {
132
+ className: "space-y-2",
133
+ children: [
134
+ /*#__PURE__*/ _jsx(Label, {
135
+ htmlFor: "email",
136
+ className: "text-sm font-medium",
137
+ children: "Email"
138
+ }),
139
+ /*#__PURE__*/ _jsx(Input, {
140
+ id: "email",
141
+ type: "email",
142
+ placeholder: "m@example.com",
143
+ required: true,
144
+ onChange: (e)=>{
145
+ setEmail(e.target.value);
146
+ },
147
+ value: email,
148
+ className: "w-full"
149
+ })
150
+ ]
151
+ }),
152
+ /*#__PURE__*/ _jsxs("div", {
153
+ className: "space-y-2",
154
+ children: [
155
+ /*#__PURE__*/ _jsx(Label, {
156
+ htmlFor: "password",
157
+ className: "text-sm font-medium",
158
+ children: "Password"
159
+ }),
160
+ /*#__PURE__*/ _jsx(PasswordInput, {
161
+ id: "password",
162
+ value: password,
163
+ onChange: (e)=>setPassword(e.target.value),
164
+ autoComplete: "new-password",
165
+ placeholder: "Password",
166
+ className: "w-full"
167
+ })
168
+ ]
169
+ }),
170
+ /*#__PURE__*/ _jsxs("div", {
171
+ className: "space-y-2",
172
+ children: [
173
+ /*#__PURE__*/ _jsx(Label, {
174
+ htmlFor: "password_confirmation",
175
+ className: "text-sm font-medium",
176
+ children: "Confirm Password"
177
+ }),
178
+ /*#__PURE__*/ _jsx(PasswordInput, {
179
+ id: "password_confirmation",
180
+ value: passwordConfirmation,
181
+ onChange: (e)=>setPasswordConfirmation(e.target.value),
182
+ autoComplete: "new-password",
183
+ placeholder: "Confirm Password",
184
+ className: "w-full"
185
+ })
186
+ ]
187
+ }),
188
+ !admin && /*#__PURE__*/ _jsxs("div", {
189
+ className: "space-y-2",
190
+ children: [
191
+ /*#__PURE__*/ _jsx(Label, {
192
+ htmlFor: "image",
193
+ className: "text-sm font-medium",
194
+ children: "Profile Image (optional)"
195
+ }),
196
+ /*#__PURE__*/ _jsxs("div", {
197
+ className: "flex items-center gap-3",
198
+ children: [
199
+ imagePreview && /*#__PURE__*/ _jsx("div", {
200
+ className: "relative w-12 h-12 rounded-full overflow-hidden flex-shrink-0",
201
+ children: /*#__PURE__*/ _jsx(Image, {
202
+ src: imagePreview,
203
+ alt: "Profile preview",
204
+ fill: true,
205
+ className: "object-cover"
206
+ })
207
+ }),
208
+ /*#__PURE__*/ _jsxs("div", {
209
+ className: "flex-1 flex items-center gap-2",
210
+ children: [
211
+ /*#__PURE__*/ _jsx(Input, {
212
+ id: "image",
213
+ type: "file",
214
+ accept: "image/*",
215
+ onChange: handleImageChange,
216
+ className: "w-full text-sm"
217
+ }),
218
+ imagePreview && /*#__PURE__*/ _jsx(Button, {
219
+ variant: "ghost",
220
+ size: "icon",
221
+ className: "h-8 w-8 flex-shrink-0",
222
+ onClick: ()=>{
223
+ setImage(null);
224
+ setImagePreview(null);
225
+ },
226
+ children: /*#__PURE__*/ _jsx(X, {
227
+ className: "h-4 w-4"
228
+ })
229
+ })
230
+ ]
231
+ })
232
+ ]
233
+ })
234
+ ]
235
+ }),
236
+ /*#__PURE__*/ _jsxs(Button, {
237
+ type: "submit",
238
+ className: "w-full",
239
+ disabled: loading,
240
+ onClick: async ()=>{
241
+ if (password !== passwordConfirmation) {
242
+ toast.error('Please ensure your password and confirm password match.');
243
+ return;
244
+ }
245
+ const user = await authClient.signUp.email({
246
+ email,
247
+ password,
248
+ role: admin ? 'admin' : 'user',
249
+ name: `${firstName} ${lastName}`,
250
+ callbackURL: admin ? '/admin' : '/dashboard',
251
+ fetchOptions: {
252
+ onResponse: ()=>{
253
+ setLoading(false);
254
+ },
255
+ onRequest: ()=>{
256
+ setLoading(true);
257
+ },
258
+ onError: (ctx)=>{
259
+ toast.error(ctx.error.message);
260
+ },
261
+ onSuccess: async ()=>{
262
+ router.push(admin ? '/admin' : '/dashboard');
263
+ }
264
+ }
265
+ });
266
+ const userId = user.data?.user.id;
267
+ if (userId && admin) {
268
+ await addAdminRole(userId);
269
+ }
270
+ },
271
+ children: [
272
+ loading ? /*#__PURE__*/ _jsx(Loader2, {
273
+ size: 16,
274
+ className: "animate-spin mr-2"
275
+ }) : null,
276
+ loading ? 'Creating account...' : 'Create an account'
277
+ ]
278
+ }),
279
+ !admin && /*#__PURE__*/ _jsxs("div", {
280
+ children: [
281
+ /*#__PURE__*/ _jsx("div", {
282
+ className: "relative my-4",
283
+ children: /*#__PURE__*/ _jsx("div", {
284
+ className: "relative flex justify-center text-xs uppercase border-b border-muted pb-4",
285
+ children: /*#__PURE__*/ _jsx("span", {
286
+ className: "bg-card px-2 text-muted-foreground",
287
+ children: "Or continue with"
288
+ })
289
+ })
290
+ }),
291
+ /*#__PURE__*/ _jsxs("div", {
292
+ className: "grid grid-cols-4 gap-2 sm:grid-cols-7",
293
+ children: [
294
+ /*#__PURE__*/ _jsx(Button, {
295
+ variant: "outline",
296
+ size: "icon",
297
+ className: "h-10 w-10",
298
+ onClick: async ()=>{
299
+ await authClient.signIn.social({
300
+ provider: 'github',
301
+ callbackURL: '/dashboard'
302
+ });
303
+ },
304
+ title: "GitHub",
305
+ children: /*#__PURE__*/ _jsx(GitHubLogoIcon, {
306
+ className: "h-4 w-4"
307
+ })
308
+ }),
309
+ /*#__PURE__*/ _jsx(Button, {
310
+ variant: "outline",
311
+ size: "icon",
312
+ className: "h-10 w-10",
313
+ onClick: async ()=>{
314
+ await authClient.signIn.social({
315
+ provider: 'discord',
316
+ callbackURL: '/dashboard'
317
+ });
318
+ },
319
+ title: "Discord",
320
+ children: /*#__PURE__*/ _jsx(DiscordLogoIcon, {
321
+ className: "h-4 w-4"
322
+ })
323
+ }),
324
+ /*#__PURE__*/ _jsx(Button, {
325
+ variant: "outline",
326
+ size: "icon",
327
+ className: "h-10 w-10",
328
+ onClick: async ()=>{
329
+ await authClient.signIn.social({
330
+ provider: 'google',
331
+ callbackURL: '/dashboard'
332
+ });
333
+ },
334
+ title: "Google",
335
+ children: /*#__PURE__*/ _jsxs("svg", {
336
+ xmlns: "http://www.w3.org/2000/svg",
337
+ width: "16",
338
+ height: "16",
339
+ viewBox: "0 0 256 262",
340
+ children: [
341
+ /*#__PURE__*/ _jsx("path", {
342
+ fill: "#4285F4",
343
+ d: "M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027"
344
+ }),
345
+ /*#__PURE__*/ _jsx("path", {
346
+ fill: "#34A853",
347
+ d: "M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1"
348
+ }),
349
+ /*#__PURE__*/ _jsx("path", {
350
+ fill: "#FBBC05",
351
+ d: "M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z"
352
+ }),
353
+ /*#__PURE__*/ _jsx("path", {
354
+ fill: "#EB4335",
355
+ d: "M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251"
356
+ })
357
+ ]
358
+ })
359
+ }),
360
+ /*#__PURE__*/ _jsx(Button, {
361
+ variant: "outline",
362
+ size: "icon",
363
+ className: "h-10 w-10",
364
+ onClick: async ()=>{
365
+ const { data } = await authClient.signIn.social({
366
+ provider: 'microsoft',
367
+ callbackURL: '/dashboard'
368
+ });
369
+ },
370
+ title: "Microsoft",
371
+ children: /*#__PURE__*/ _jsx("svg", {
372
+ xmlns: "http://www.w3.org/2000/svg",
373
+ width: "16",
374
+ height: "16",
375
+ viewBox: "0 0 24 24",
376
+ children: /*#__PURE__*/ _jsx("path", {
377
+ fill: "currentColor",
378
+ d: "M2 3h9v9H2zm9 19H2v-9h9zM21 3v9h-9V3zm0 19h-9v-9h9z"
379
+ })
380
+ })
381
+ }),
382
+ /*#__PURE__*/ _jsx(Button, {
383
+ variant: "outline",
384
+ size: "icon",
385
+ className: "h-10 w-10",
386
+ onClick: async ()=>{
387
+ await authClient.signIn.social({
388
+ provider: 'twitch',
389
+ callbackURL: '/dashboard'
390
+ });
391
+ },
392
+ title: "Twitch",
393
+ children: /*#__PURE__*/ _jsx("svg", {
394
+ xmlns: "http://www.w3.org/2000/svg",
395
+ width: "16",
396
+ height: "16",
397
+ viewBox: "0 0 24 24",
398
+ children: /*#__PURE__*/ _jsx("path", {
399
+ fill: "currentColor",
400
+ d: "M11.64 5.93h1.43v4.28h-1.43m3.93-4.28H17v4.28h-1.43M7 2L3.43 5.57v12.86h4.28V22l3.58-3.57h2.85L20.57 12V2m-1.43 9.29l-2.85 2.85h-2.86l-2.5 2.5v-2.5H7.71V3.43h11.43Z"
401
+ })
402
+ })
403
+ }),
404
+ /*#__PURE__*/ _jsx(Button, {
405
+ variant: "outline",
406
+ size: "icon",
407
+ className: "h-10 w-10",
408
+ onClick: async ()=>{
409
+ await authClient.signIn.social({
410
+ provider: 'facebook',
411
+ callbackURL: '/dashboard'
412
+ });
413
+ },
414
+ title: "Facebook",
415
+ children: /*#__PURE__*/ _jsx("svg", {
416
+ xmlns: "http://www.w3.org/2000/svg",
417
+ width: "16",
418
+ height: "16",
419
+ viewBox: "0 0 24 24",
420
+ children: /*#__PURE__*/ _jsx("path", {
421
+ fill: "currentColor",
422
+ d: "M22 12c0-5.52-4.48-10-10-10S2 6.48 2 12c0 4.84 3.44 8.87 8 9.8V15H8v-3h2V9.5C10 7.57 11.57 6 13.5 6H16v3h-2c-.55 0-1 .45-1 1v2h3v3h-3v6.95c5.05-.5 9-4.76 9-9.95"
423
+ })
424
+ })
425
+ }),
426
+ /*#__PURE__*/ _jsx(Button, {
427
+ variant: "outline",
428
+ size: "icon",
429
+ className: "h-10 w-10",
430
+ onClick: async ()=>{
431
+ await authClient.signIn.social({
432
+ provider: 'twitter',
433
+ callbackURL: '/dashboard'
434
+ });
435
+ },
436
+ title: "Twitter",
437
+ children: /*#__PURE__*/ _jsx("svg", {
438
+ xmlns: "http://www.w3.org/2000/svg",
439
+ width: "16",
440
+ height: "16",
441
+ viewBox: "0 0 14 14",
442
+ children: /*#__PURE__*/ _jsxs("g", {
443
+ fill: "none",
444
+ children: [
445
+ /*#__PURE__*/ _jsx("g", {
446
+ clipPath: "url(#primeTwitter0)",
447
+ children: /*#__PURE__*/ _jsx("path", {
448
+ fill: "currentColor",
449
+ d: "M11.025.656h2.147L8.482 6.03L14 13.344H9.68L6.294 8.909l-3.87 4.435H.275l5.016-5.75L0 .657h4.43L7.486 4.71zm-.755 11.4h1.19L3.78 1.877H2.504z"
450
+ })
451
+ }),
452
+ /*#__PURE__*/ _jsx("defs", {
453
+ children: /*#__PURE__*/ _jsx("clipPath", {
454
+ id: "primeTwitter0",
455
+ children: /*#__PURE__*/ _jsx("path", {
456
+ fill: "#fff",
457
+ d: "M0 0h14v14H0z"
458
+ })
459
+ })
460
+ })
461
+ ]
462
+ })
463
+ })
464
+ })
465
+ ]
466
+ })
467
+ ]
468
+ })
469
+ ]
470
+ })
471
+ }),
472
+ /*#__PURE__*/ _jsx(CardFooter, {
473
+ className: "flex flex-col",
474
+ children: /*#__PURE__*/ _jsx("div", {
475
+ className: "w-full border-t pt-4",
476
+ children: /*#__PURE__*/ _jsxs("p", {
477
+ className: "text-center text-xs text-muted-foreground",
478
+ children: [
479
+ "Secured by",
480
+ ' ',
481
+ /*#__PURE__*/ _jsx(Link, {
482
+ className: "font-medium text-orange-500",
483
+ href: "https://github.com/forrestdevs/payload-better-auth",
484
+ children: "payload-better-auth"
485
+ })
486
+ ]
487
+ })
488
+ })
489
+ })
490
+ ]
491
+ });
492
+ }
493
+ async function convertImageToBase64(file) {
494
+ return new Promise((resolve, reject)=>{
495
+ const reader = new FileReader();
496
+ reader.onloadend = ()=>resolve(reader.result);
497
+ reader.onerror = reject;
498
+ reader.readAsDataURL(file);
499
+ });
500
+ }
501
+
502
+ //# sourceMappingURL=sign-up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/plugin/payload/components/sign-up.tsx"],"sourcesContent":["'use client'\n\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './ui/card'\nimport { Input } from './ui/input'\nimport { Label } from './ui/label'\nimport { PasswordInput } from './ui/password-input'\nimport { DiscordLogoIcon, GitHubLogoIcon } from '@radix-ui/react-icons'\nimport { useState } from 'react'\nimport Image from 'next/image'\nimport { Loader2, X } from 'lucide-react'\nimport { toast } from 'sonner'\nimport { useRouter } from 'next/navigation'\nimport Link from 'next/link'\nimport { createAuthClient } from 'better-auth/react'\nimport { inferAdditionalFields } from 'better-auth/client/plugins'\n\nexport function SignUp({\n admin = false,\n apiRoute,\n userSlug,\n defaultAdminRole,\n}: {\n admin?: boolean\n apiRoute: string\n userSlug: string\n defaultAdminRole: string\n}) {\n const [firstName, setFirstName] = useState('')\n const [lastName, setLastName] = useState('')\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [passwordConfirmation, setPasswordConfirmation] = useState('')\n const [image, setImage] = useState<File | null>(null)\n const [imagePreview, setImagePreview] = useState<string | null>(null)\n const router = useRouter()\n\n const authClient = createAuthClient({\n plugins: [\n inferAdditionalFields({\n user: {\n role: {\n type: 'string',\n },\n },\n }),\n ],\n })\n\n const handleImageChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (file) {\n setImage(file)\n const reader = new FileReader()\n reader.onloadend = () => {\n setImagePreview(reader.result as string)\n }\n reader.readAsDataURL(file)\n }\n }\n\n const addAdminRole = async (userId: string) => {\n try {\n const req = await fetch(\n `${process.env.NEXT_PUBLIC_SERVER_URL}${apiRoute}/${userSlug}/${userId}`,\n {\n method: 'PATCH',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n role: defaultAdminRole ?? 'admin',\n }),\n },\n )\n } catch (err) {\n console.log(err)\n }\n }\n const [loading, setLoading] = useState(false)\n\n return (\n <Card className=\"z-50 rounded-md rounded-t-none w-full max-w-md shadow-lg\">\n <CardHeader className=\"space-y-1\">\n <CardTitle className=\"text-xl md:text-2xl font-bold\">Sign Up</CardTitle>\n <CardDescription className=\"text-sm text-muted-foreground\">\n Enter your information to create an account\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"first-name\" className=\"text-sm font-medium\">\n First name\n </Label>\n <Input\n id=\"first-name\"\n placeholder=\"Max\"\n required\n onChange={(e) => {\n setFirstName(e.target.value)\n }}\n value={firstName}\n className=\"w-full\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"last-name\" className=\"text-sm font-medium\">\n Last name\n </Label>\n <Input\n id=\"last-name\"\n placeholder=\"Robinson\"\n required\n onChange={(e) => {\n setLastName(e.target.value)\n }}\n value={lastName}\n className=\"w-full\"\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"email\" className=\"text-sm font-medium\">\n Email\n </Label>\n <Input\n id=\"email\"\n type=\"email\"\n placeholder=\"m@example.com\"\n required\n onChange={(e) => {\n setEmail(e.target.value)\n }}\n value={email}\n className=\"w-full\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"password\" className=\"text-sm font-medium\">\n Password\n </Label>\n <PasswordInput\n id=\"password\"\n value={password}\n onChange={(e: any) => setPassword(e.target.value)}\n autoComplete=\"new-password\"\n placeholder=\"Password\"\n className=\"w-full\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"password_confirmation\" className=\"text-sm font-medium\">\n Confirm Password\n </Label>\n <PasswordInput\n id=\"password_confirmation\"\n value={passwordConfirmation}\n onChange={(e: any) => setPasswordConfirmation(e.target.value)}\n autoComplete=\"new-password\"\n placeholder=\"Confirm Password\"\n className=\"w-full\"\n />\n </div>\n\n {!admin && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"image\" className=\"text-sm font-medium\">\n Profile Image (optional)\n </Label>\n <div className=\"flex items-center gap-3\">\n {imagePreview && (\n <div className=\"relative w-12 h-12 rounded-full overflow-hidden flex-shrink-0\">\n <Image src={imagePreview} alt=\"Profile preview\" fill className=\"object-cover\" />\n </div>\n )}\n <div className=\"flex-1 flex items-center gap-2\">\n <Input\n id=\"image\"\n type=\"file\"\n accept=\"image/*\"\n onChange={handleImageChange}\n className=\"w-full text-sm\"\n />\n {imagePreview && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 flex-shrink-0\"\n onClick={() => {\n setImage(null)\n setImagePreview(null)\n }}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n )}\n\n <Button\n type=\"submit\"\n className=\"w-full\"\n disabled={loading}\n onClick={async () => {\n if (password !== passwordConfirmation) {\n toast.error('Please ensure your password and confirm password match.')\n return\n }\n const user = await authClient.signUp.email({\n email,\n password,\n role: admin ? 'admin' : 'user',\n name: `${firstName} ${lastName}`,\n callbackURL: admin ? '/admin' : '/dashboard',\n fetchOptions: {\n onResponse: () => {\n setLoading(false)\n },\n onRequest: () => {\n setLoading(true)\n },\n onError: (ctx) => {\n toast.error(ctx.error.message)\n },\n onSuccess: async () => {\n router.push(admin ? '/admin' : '/dashboard')\n },\n },\n })\n\n const userId = user.data?.user.id\n\n if (userId && admin) {\n await addAdminRole(userId)\n }\n }}\n >\n {loading ? <Loader2 size={16} className=\"animate-spin mr-2\" /> : null}\n {loading ? 'Creating account...' : 'Create an account'}\n </Button>\n\n {!admin && (\n <div>\n <div className=\"relative my-4\">\n <div className=\"relative flex justify-center text-xs uppercase border-b border-muted pb-4\">\n <span className=\"bg-card px-2 text-muted-foreground\">Or continue with</span>\n </div>\n </div>\n <div className=\"grid grid-cols-4 gap-2 sm:grid-cols-7\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-10 w-10\"\n onClick={async () => {\n await authClient.signIn.social({\n provider: 'github',\n callbackURL: '/dashboard',\n })\n }}\n title=\"GitHub\"\n >\n <GitHubLogoIcon className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-10 w-10\"\n onClick={async () => {\n await authClient.signIn.social({\n provider: 'discord',\n callbackURL: '/dashboard',\n })\n }}\n title=\"Discord\"\n >\n <DiscordLogoIcon className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-10 w-10\"\n onClick={async () => {\n await authClient.signIn.social({\n provider: 'google',\n callbackURL: '/dashboard',\n })\n }}\n title=\"Google\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 256 262\"\n >\n <path\n fill=\"#4285F4\"\n d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"\n />\n <path\n fill=\"#34A853\"\n d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z\"\n />\n <path\n fill=\"#EB4335\"\n d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"\n />\n </svg>\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-10 w-10\"\n onClick={async () => {\n const { data } = await authClient.signIn.social({\n provider: 'microsoft',\n callbackURL: '/dashboard',\n })\n }}\n title=\"Microsoft\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M2 3h9v9H2zm9 19H2v-9h9zM21 3v9h-9V3zm0 19h-9v-9h9z\"\n ></path>\n </svg>\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-10 w-10\"\n onClick={async () => {\n await authClient.signIn.social({\n provider: 'twitch',\n callbackURL: '/dashboard',\n })\n }}\n title=\"Twitch\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M11.64 5.93h1.43v4.28h-1.43m3.93-4.28H17v4.28h-1.43M7 2L3.43 5.57v12.86h4.28V22l3.58-3.57h2.85L20.57 12V2m-1.43 9.29l-2.85 2.85h-2.86l-2.5 2.5v-2.5H7.71V3.43h11.43Z\"\n ></path>\n </svg>\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-10 w-10\"\n onClick={async () => {\n await authClient.signIn.social({\n provider: 'facebook',\n callbackURL: '/dashboard',\n })\n }}\n title=\"Facebook\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M22 12c0-5.52-4.48-10-10-10S2 6.48 2 12c0 4.84 3.44 8.87 8 9.8V15H8v-3h2V9.5C10 7.57 11.57 6 13.5 6H16v3h-2c-.55 0-1 .45-1 1v2h3v3h-3v6.95c5.05-.5 9-4.76 9-9.95\"\n ></path>\n </svg>\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-10 w-10\"\n onClick={async () => {\n await authClient.signIn.social({\n provider: 'twitter',\n callbackURL: '/dashboard',\n })\n }}\n title=\"Twitter\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 14 14\"\n >\n <g fill=\"none\">\n <g clipPath=\"url(#primeTwitter0)\">\n <path\n fill=\"currentColor\"\n d=\"M11.025.656h2.147L8.482 6.03L14 13.344H9.68L6.294 8.909l-3.87 4.435H.275l5.016-5.75L0 .657h4.43L7.486 4.71zm-.755 11.4h1.19L3.78 1.877H2.504z\"\n ></path>\n </g>\n <defs>\n <clipPath id=\"primeTwitter0\">\n <path fill=\"#fff\" d=\"M0 0h14v14H0z\"></path>\n </clipPath>\n </defs>\n </g>\n </svg>\n </Button>\n </div>\n </div>\n )}\n </div>\n </CardContent>\n <CardFooter className=\"flex flex-col\">\n <div className=\"w-full border-t pt-4\">\n <p className=\"text-center text-xs text-muted-foreground\">\n Secured by{' '}\n <Link\n className=\"font-medium text-orange-500\"\n href=\"https://github.com/forrestdevs/payload-better-auth\"\n >\n payload-better-auth\n </Link>\n </p>\n </div>\n </CardFooter>\n </Card>\n )\n}\n\nasync function convertImageToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result as string)\n reader.onerror = reject\n reader.readAsDataURL(file)\n })\n}\n"],"names":["Button","Card","CardContent","CardDescription","CardFooter","CardHeader","CardTitle","Input","Label","PasswordInput","DiscordLogoIcon","GitHubLogoIcon","useState","Image","Loader2","X","toast","useRouter","Link","createAuthClient","inferAdditionalFields","SignUp","admin","apiRoute","userSlug","defaultAdminRole","firstName","setFirstName","lastName","setLastName","email","setEmail","password","setPassword","passwordConfirmation","setPasswordConfirmation","image","setImage","imagePreview","setImagePreview","router","authClient","plugins","user","role","type","handleImageChange","e","file","target","files","reader","FileReader","onloadend","result","readAsDataURL","addAdminRole","userId","req","fetch","process","env","NEXT_PUBLIC_SERVER_URL","method","credentials","headers","body","JSON","stringify","err","console","log","loading","setLoading","className","div","htmlFor","id","placeholder","required","onChange","value","autoComplete","src","alt","fill","accept","variant","size","onClick","disabled","error","signUp","name","callbackURL","fetchOptions","onResponse","onRequest","onError","ctx","message","onSuccess","push","data","span","signIn","social","provider","title","svg","xmlns","width","height","viewBox","path","d","g","clipPath","defs","p","href","convertImageToBase64","Promise","resolve","reject","onerror"],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ :root {
2
+ --background-color: #f9fafb;
3
+ --border-color: #e5e7eb;
4
+ --text-color: #374151;
5
+ --heading-color: #1f2937;
6
+ --button-text: white;
7
+
8
+ /* Admin action button colors */
9
+ --impersonate-bg: #6366f1;
10
+ --impersonate-border: #4f46e5;
11
+ --impersonate-hover: #4f46e5;
12
+
13
+ --revoke-bg: #64748b;
14
+ --revoke-border: #4b5563;
15
+ --revoke-hover: #4b5563;
16
+
17
+ --ban-bg: #f43f5e;
18
+ --ban-border: #e11d48;
19
+ --ban-hover: #e11d48;
20
+
21
+ --unban-bg: #10b981;
22
+ --unban-border: #059669;
23
+ --unban-hover: #059669;
24
+ }
25
+
26
+ [data-theme='dark'] {
27
+ --background-color: #111827;
28
+ --border-color: #1f2937;
29
+ --text-color: #e5e7eb;
30
+ --heading-color: #f9fafb;
31
+
32
+ /* Admin action button colors - slightly adjusted for dark theme */
33
+ --impersonate-bg: #4f46e5;
34
+ --impersonate-border: #4338ca;
35
+ --impersonate-hover: #4338ca;
36
+
37
+ --revoke-bg: #4b5563;
38
+ --revoke-border: #374151;
39
+ --revoke-hover: #374151;
40
+
41
+ --ban-bg: #e11d48;
42
+ --ban-border: #be123c;
43
+ --ban-hover: #be123c;
44
+
45
+ --unban-bg: #059669;
46
+ --unban-border: #047857;
47
+ --unban-hover: #047857;
48
+ }
49
+
50
+ @media (prefers-color-scheme: dark) {
51
+ :root:not([data-theme='light']) {
52
+ --background-color: #111827;
53
+ --border-color: #1f2937;
54
+ --text-color: #e5e7eb;
55
+ --heading-color: #f9fafb;
56
+
57
+ --impersonate-bg: #4f46e5;
58
+ --impersonate-border: #4338ca;
59
+ --impersonate-hover: #4338ca;
60
+
61
+ --revoke-bg: #4b5563;
62
+ --revoke-border: #374151;
63
+ --revoke-hover: #374151;
64
+
65
+ --ban-bg: #e11d48;
66
+ --ban-border: #be123c;
67
+ --ban-hover: #be123c;
68
+
69
+ --unban-bg: #059669;
70
+ --unban-border: #047857;
71
+ --unban-hover: #047857;
72
+ }
73
+ }
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "link" | "default" | "outline" | "secondary" | "destructive" | "ghost" | null | undefined;
5
+ size?: "default" | "icon" | "lg" | "sm" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
8
+ asChild?: boolean;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ export { Button, buttonVariants };