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.
- package/LICENSE.md +17 -0
- package/dist/authjs/index.d.ts +1 -0
- package/dist/authjs/index.js +3 -0
- package/dist/authjs/index.js.map +1 -0
- package/dist/better-auth/adapter/dev/bin/run.d.ts +1 -0
- package/dist/better-auth/adapter/dev/bin/run.js +64 -0
- package/dist/better-auth/adapter/dev/bin/run.js.map +1 -0
- package/dist/better-auth/adapter/dev/bin/schema.d.ts +22 -0
- package/dist/better-auth/adapter/dev/bin/schema.js +160 -0
- package/dist/better-auth/adapter/dev/bin/schema.js.map +1 -0
- package/dist/better-auth/adapter/dev/collections.d.ts +3 -0
- package/dist/better-auth/adapter/dev/collections.js +212 -0
- package/dist/better-auth/adapter/dev/collections.js.map +1 -0
- package/dist/better-auth/adapter/dev/index.d.ts +3 -0
- package/dist/better-auth/adapter/dev/index.js +168 -0
- package/dist/better-auth/adapter/dev/index.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +23 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +326 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +1 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +23 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/index.d.ts +4 -0
- package/dist/better-auth/adapter/generate-schema/index.js +19 -0
- package/dist/better-auth/adapter/generate-schema/index.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/utils.d.ts +2 -0
- package/dist/better-auth/adapter/generate-schema/utils.js +20 -0
- package/dist/better-auth/adapter/generate-schema/utils.js.map +1 -0
- package/dist/better-auth/adapter/index.d.ts +5 -0
- package/dist/better-auth/adapter/index.js +578 -0
- package/dist/better-auth/adapter/index.js.map +1 -0
- package/dist/better-auth/adapter/test/adapter.test.d.ts +1 -0
- package/dist/better-auth/adapter/test/adapter.test.js +181 -0
- package/dist/better-auth/adapter/test/adapter.test.js.map +1 -0
- package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts +7 -0
- package/dist/better-auth/adapter/test/better-auth-adapter-test.js +425 -0
- package/dist/better-auth/adapter/test/better-auth-adapter-test.js.map +1 -0
- package/dist/better-auth/adapter/test/schema.test.d.ts +1 -0
- package/dist/better-auth/adapter/test/schema.test.js +796 -0
- package/dist/better-auth/adapter/test/schema.test.js.map +1 -0
- package/dist/better-auth/adapter/test/test_payload1/schema.d.ts +23 -0
- package/dist/better-auth/adapter/test/test_payload1/schema.js +177 -0
- package/dist/better-auth/adapter/test/test_payload1/schema.js.map +1 -0
- package/dist/better-auth/adapter/test/test_payload2/schema.d.ts +23 -0
- package/dist/better-auth/adapter/test/test_payload2/schema.js +167 -0
- package/dist/better-auth/adapter/test/test_payload2/schema.js.map +1 -0
- package/dist/better-auth/adapter/test/test_payload3/schema.d.ts +23 -0
- package/dist/better-auth/adapter/test/test_payload3/schema.js +198 -0
- package/dist/better-auth/adapter/test/test_payload3/schema.js.map +1 -0
- package/dist/better-auth/adapter/transform/index.d.ts +16 -0
- package/dist/better-auth/adapter/transform/index.js +252 -0
- package/dist/better-auth/adapter/transform/index.js.map +1 -0
- package/dist/better-auth/adapter/types.d.ts +6 -0
- package/dist/better-auth/adapter/types.js +3 -0
- package/dist/better-auth/adapter/types.js.map +1 -0
- package/dist/better-auth/index.d.ts +6 -0
- package/dist/better-auth/index.js +8 -0
- package/dist/better-auth/index.js.map +1 -0
- package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.d.ts +7 -0
- package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js +47 -0
- package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js.map +1 -0
- package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts +6 -0
- package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js +106 -0
- package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js.map +1 -0
- package/dist/better-auth/plugin/collections/users/hooks/after-login.d.ts +11 -0
- package/dist/better-auth/plugin/collections/users/hooks/after-login.js +71 -0
- package/dist/better-auth/plugin/collections/users/hooks/after-login.js.map +1 -0
- package/dist/better-auth/plugin/collections/users/hooks/after-logout.d.ts +6 -0
- package/dist/better-auth/plugin/collections/users/hooks/after-logout.js +49 -0
- package/dist/better-auth/plugin/collections/users/hooks/after-logout.js.map +1 -0
- package/dist/better-auth/plugin/collections/users/hooks/before-login.d.ts +5 -0
- package/dist/better-auth/plugin/collections/users/hooks/before-login.js +18 -0
- package/dist/better-auth/plugin/collections/users/hooks/before-login.js.map +1 -0
- package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts +5 -0
- package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js +33 -0
- package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js.map +1 -0
- package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts +2 -0
- package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js +14 -0
- package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js.map +1 -0
- package/dist/better-auth/plugin/collections/users/hooks/sync-account.d.ts +7 -0
- package/dist/better-auth/plugin/collections/users/hooks/sync-account.js +82 -0
- package/dist/better-auth/plugin/collections/users/hooks/sync-account.js.map +1 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +29 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +46 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-ip.d.ts +2 -0
- package/dist/better-auth/plugin/helpers/get-ip.js +31 -0
- package/dist/better-auth/plugin/helpers/get-ip.js.map +1 -0
- package/dist/better-auth/plugin/helpers/index.d.ts +1 -0
- package/dist/better-auth/plugin/helpers/index.js +3 -0
- package/dist/better-auth/plugin/helpers/index.js.map +1 -0
- package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +104 -0
- package/dist/better-auth/plugin/helpers/serialize-cookie.js +186 -0
- package/dist/better-auth/plugin/helpers/serialize-cookie.js.map +1 -0
- package/dist/better-auth/plugin/index.d.ts +7 -0
- package/dist/better-auth/plugin/index.js +64 -0
- package/dist/better-auth/plugin/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/auth-strategy.d.ts +8 -0
- package/dist/better-auth/plugin/lib/auth-strategy.js +48 -0
- package/dist/better-auth/plugin/lib/auth-strategy.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collection-configs.d.ts +11 -0
- package/dist/better-auth/plugin/lib/build-collection-configs.js +1558 -0
- package/dist/better-auth/plugin/lib/build-collection-configs.js.map +1 -0
- package/dist/better-auth/plugin/lib/config.d.ts +41 -0
- package/dist/better-auth/plugin/lib/config.js +43 -0
- package/dist/better-auth/plugin/lib/config.js.map +1 -0
- package/dist/better-auth/plugin/lib/ensure-password-set-before-create.d.ts +7 -0
- package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js +24 -0
- package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js.map +1 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +5 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.js +9 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.js.map +1 -0
- package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts +9 -0
- package/dist/better-auth/plugin/lib/get-required-collection-slugs.js +52 -0
- package/dist/better-auth/plugin/lib/get-required-collection-slugs.js.map +1 -0
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts +6 -0
- package/dist/better-auth/plugin/lib/init-better-auth.js +13 -0
- package/dist/better-auth/plugin/lib/init-better-auth.js.map +1 -0
- package/dist/better-auth/plugin/lib/password.d.ts +25 -0
- package/dist/better-auth/plugin/lib/password.js +63 -0
- package/dist/better-auth/plugin/lib/password.js.map +1 -0
- package/dist/better-auth/plugin/lib/payload-access.d.ts +14 -0
- package/dist/better-auth/plugin/lib/payload-access.js +64 -0
- package/dist/better-auth/plugin/lib/payload-access.js.map +1 -0
- package/dist/better-auth/plugin/lib/prepare-session-data.d.ts +21 -0
- package/dist/better-auth/plugin/lib/prepare-session-data.js +42 -0
- package/dist/better-auth/plugin/lib/prepare-session-data.js.map +1 -0
- package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.d.ts +15 -0
- package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js +30 -0
- package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts +5 -0
- package/dist/better-auth/plugin/lib/sanitize-auth-options.js +298 -0
- package/dist/better-auth/plugin/lib/sanitize-auth-options.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts +5 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons.js +222 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/login-redirect.d.ts +1 -0
- package/dist/better-auth/plugin/payload/components/login-redirect.js +6 -0
- package/dist/better-auth/plugin/payload/components/login-redirect.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/logo.d.ts +1 -0
- package/dist/better-auth/plugin/payload/components/logo.js +36 -0
- package/dist/better-auth/plugin/payload/components/logo.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/logout.d.ts +1 -0
- package/dist/better-auth/plugin/payload/components/logout.js +61 -0
- package/dist/better-auth/plugin/payload/components/logout.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/sign-in.d.ts +3 -0
- package/dist/better-auth/plugin/payload/components/sign-in.js +384 -0
- package/dist/better-auth/plugin/payload/components/sign-in.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/sign-up.d.ts +6 -0
- package/dist/better-auth/plugin/payload/components/sign-up.js +502 -0
- package/dist/better-auth/plugin/payload/components/sign-up.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/styles.css +73 -0
- package/dist/better-auth/plugin/payload/components/ui/button.d.ts +10 -0
- package/dist/better-auth/plugin/payload/components/ui/button.js +42 -0
- package/dist/better-auth/plugin/payload/components/ui/button.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/ui/card.d.ts +9 -0
- package/dist/better-auth/plugin/payload/components/ui/card.js +55 -0
- package/dist/better-auth/plugin/payload/components/ui/card.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/ui/checkbox.js +23 -0
- package/dist/better-auth/plugin/payload/components/ui/checkbox.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/ui/cn.d.ts +2 -0
- package/dist/better-auth/plugin/payload/components/ui/cn.js +7 -0
- package/dist/better-auth/plugin/payload/components/ui/cn.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/ui/input.d.ts +3 -0
- package/dist/better-auth/plugin/payload/components/ui/input.js +14 -0
- package/dist/better-auth/plugin/payload/components/ui/input.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/ui/label.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/ui/label.js +15 -0
- package/dist/better-auth/plugin/payload/components/ui/label.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts +2 -0
- package/dist/better-auth/plugin/payload/components/ui/password-input.js +55 -0
- package/dist/better-auth/plugin/payload/components/ui/password-input.js.map +1 -0
- package/dist/better-auth/plugin/payload/exports/client.d.ts +3 -0
- package/dist/better-auth/plugin/payload/exports/client.js +5 -0
- package/dist/better-auth/plugin/payload/exports/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts +5 -0
- package/dist/better-auth/plugin/payload/exports/rsc.js +7 -0
- package/dist/better-auth/plugin/payload/exports/rsc.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts +4 -0
- package/dist/better-auth/plugin/payload/views/create-first-admin/index.js +112 -0
- package/dist/better-auth/plugin/payload/views/create-first-admin/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/login/index.d.ts +4 -0
- package/dist/better-auth/plugin/payload/views/login/index.js +78 -0
- package/dist/better-auth/plugin/payload/views/login/index.js.map +1 -0
- package/dist/better-auth/plugin/types.d.ts +224 -0
- package/dist/better-auth/plugin/types.js +3 -0
- package/dist/better-auth/plugin/types.js.map +1 -0
- package/dist/better-auth/types.d.ts +2 -0
- package/dist/better-auth/types.js +4 -0
- package/dist/better-auth/types.js.map +1 -0
- package/dist/clerk/index.d.ts +1 -0
- package/dist/clerk/index.js +3 -0
- package/dist/clerk/index.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/kinde/index.d.ts +1 -0
- package/dist/kinde/index.js +3 -0
- package/dist/kinde/index.js.map +1 -0
- 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 };
|