@stackframe/stack 2.4.13 → 2.4.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/dist/components/credential-sign-in.js +45 -65
- package/dist/components/credential-sign-in.js.map +1 -1
- package/dist/components/credential-sign-up.js +74 -98
- package/dist/components/credential-sign-up.js.map +1 -1
- package/dist/components/forgot-password.js +41 -38
- package/dist/components/forgot-password.js.map +1 -1
- package/dist/components/magic-link-sign-in.js +37 -41
- package/dist/components/magic-link-sign-in.js.map +1 -1
- package/dist/components/maybe-full-page.d.mts +9 -0
- package/dist/components/maybe-full-page.d.ts +9 -0
- package/dist/components/maybe-full-page.js +70 -0
- package/dist/components/maybe-full-page.js.map +1 -0
- package/dist/components/message-card.js +2 -2
- package/dist/components/message-card.js.map +1 -1
- package/dist/components/oauth-button.js +47 -53
- package/dist/components/oauth-button.js.map +1 -1
- package/dist/components/password-field.js +6 -8
- package/dist/components/password-field.js.map +1 -1
- package/dist/components/password-reset-inner.js +63 -58
- package/dist/components/password-reset-inner.js.map +1 -1
- package/dist/components/redirect-message-card.js +1 -2
- package/dist/components/redirect-message-card.js.map +1 -1
- package/dist/components/user-avatar.d.mts +1 -0
- package/dist/components/user-avatar.d.ts +1 -0
- package/dist/components/user-avatar.js +7 -5
- package/dist/components/user-avatar.js.map +1 -1
- package/dist/components/user-button.js +14 -18
- package/dist/components/user-button.js.map +1 -1
- package/dist/components-core/button.d.mts +1 -0
- package/dist/components-core/button.d.ts +1 -0
- package/dist/components-core/button.js +31 -14
- package/dist/components-core/button.js.map +1 -1
- package/dist/components-core/card.js +3 -3
- package/dist/components-core/card.js.map +1 -1
- package/dist/components-core/input.js +10 -6
- package/dist/components-core/input.js.map +1 -1
- package/dist/components-core/label.js +2 -3
- package/dist/components-core/label.js.map +1 -1
- package/dist/components-core/tabs.js +9 -5
- package/dist/components-core/tabs.js.map +1 -1
- package/dist/components-page/account-settings.js +8 -8
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.js +5 -4
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/forgot-password.js +2 -2
- package/dist/components-page/forgot-password.js.map +1 -1
- package/dist/components-page/oauth-callback.d.mts +3 -1
- package/dist/components-page/oauth-callback.d.ts +3 -1
- package/dist/components-page/oauth-callback.js +2 -2
- package/dist/components-page/oauth-callback.js.map +1 -1
- package/dist/components-page/password-reset.js.map +1 -1
- package/dist/components-page/sign-in.js +0 -2
- package/dist/components-page/sign-in.js.map +1 -1
- package/dist/components-page/sign-out.d.mts +4 -2
- package/dist/components-page/sign-out.d.ts +4 -2
- package/dist/components-page/sign-out.js +3 -3
- package/dist/components-page/sign-out.js.map +1 -1
- package/dist/components-page/stack-handler.d.mts +3 -1
- package/dist/components-page/stack-handler.d.ts +3 -1
- package/dist/components-page/stack-handler.js +17 -11
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components/credential-sign-in.js +45 -65
- package/dist/esm/components/credential-sign-in.js.map +1 -1
- package/dist/esm/components/credential-sign-up.js +74 -98
- package/dist/esm/components/credential-sign-up.js.map +1 -1
- package/dist/esm/components/forgot-password.js +41 -38
- package/dist/esm/components/forgot-password.js.map +1 -1
- package/dist/esm/components/magic-link-sign-in.js +37 -41
- package/dist/esm/components/magic-link-sign-in.js.map +1 -1
- package/dist/esm/components/maybe-full-page.js +50 -0
- package/dist/esm/components/maybe-full-page.js.map +1 -0
- package/dist/esm/components/message-card.js +2 -2
- package/dist/esm/components/message-card.js.map +1 -1
- package/dist/esm/components/oauth-button.js +47 -53
- package/dist/esm/components/oauth-button.js.map +1 -1
- package/dist/esm/components/password-field.js +6 -8
- package/dist/esm/components/password-field.js.map +1 -1
- package/dist/esm/components/password-reset-inner.js +63 -58
- package/dist/esm/components/password-reset-inner.js.map +1 -1
- package/dist/esm/components/redirect-message-card.js +1 -2
- package/dist/esm/components/redirect-message-card.js.map +1 -1
- package/dist/esm/components/user-avatar.js +7 -5
- package/dist/esm/components/user-avatar.js.map +1 -1
- package/dist/esm/components/user-button.js +26 -19
- package/dist/esm/components/user-button.js.map +1 -1
- package/dist/esm/components-core/button.js +33 -16
- package/dist/esm/components-core/button.js.map +1 -1
- package/dist/esm/components-core/card.js +3 -3
- package/dist/esm/components-core/card.js.map +1 -1
- package/dist/esm/components-core/input.js +11 -7
- package/dist/esm/components-core/input.js.map +1 -1
- package/dist/esm/components-core/label.js +2 -3
- package/dist/esm/components-core/label.js.map +1 -1
- package/dist/esm/components-core/tabs.js +10 -6
- package/dist/esm/components-core/tabs.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +8 -8
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js +5 -4
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/forgot-password.js +2 -2
- package/dist/esm/components-page/forgot-password.js.map +1 -1
- package/dist/esm/components-page/oauth-callback.js +2 -2
- package/dist/esm/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/components-page/password-reset.js.map +1 -1
- package/dist/esm/components-page/sign-in.js +0 -3
- package/dist/esm/components-page/sign-in.js.map +1 -1
- package/dist/esm/components-page/sign-out.js +3 -3
- package/dist/esm/components-page/sign-out.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +17 -11
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/lib/stack-app.js +18 -1
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/utils/constants.js +10 -10
- package/dist/esm/utils/constants.js.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/lib/hooks.d.mts +1 -0
- package/dist/lib/hooks.d.ts +1 -0
- package/dist/lib/stack-app.d.mts +6 -1
- package/dist/lib/stack-app.d.ts +6 -1
- package/dist/lib/stack-app.js +18 -1
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/stack-provider-client.d.mts +1 -0
- package/dist/providers/stack-provider-client.d.ts +1 -0
- package/dist/providers/stack-provider.d.mts +1 -0
- package/dist/providers/stack-provider.d.ts +1 -0
- package/dist/utils/constants.d.mts +26 -26
- package/dist/utils/constants.d.ts +26 -26
- package/dist/utils/constants.js +12 -12
- package/dist/utils/constants.js.map +1 -1
- package/package.json +10 -6
- package/dist/components/card-frame.d.mts +0 -9
- package/dist/components/card-frame.d.ts +0 -9
- package/dist/components/card-frame.js +0 -60
- package/dist/components/card-frame.js.map +0 -1
- package/dist/components-core/loading-indicator.d.mts +0 -11
- package/dist/components-core/loading-indicator.d.ts +0 -11
- package/dist/components-core/loading-indicator.js +0 -62
- package/dist/components-core/loading-indicator.js.map +0 -1
- package/dist/esm/components/card-frame.js +0 -40
- package/dist/esm/components/card-frame.js.map +0 -1
- package/dist/esm/components-core/loading-indicator.js +0 -31
- package/dist/esm/components-core/loading-indicator.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/account-settings.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { PasswordField, useUser } from '..';\nimport RedirectMessageCard from '../components/redirect-message-card';\nimport { Text, Label, Input, Button, Card, CardHeader, CardContent, CardFooter, Container } from \"../components-core\";\nimport UserAvatar from '../components/user-avatar';\nimport { useState } from 'react';\nimport FormWarningText from '../components/form-warning';\nimport { getPasswordError } from '@stackframe/stack-shared/dist/helpers/password';\n\nfunction SettingSection(props: {\n title: string, \n desc: string, \n buttonText?: string, \n buttonDisabled?: boolean,\n onButtonClick?: React.ComponentProps<typeof Button>[\"onClick\"],\n buttonVariant?: 'primary' | 'secondary',\n children?: React.ReactNode, \n}) {\n return (\n <Card>\n <CardHeader>\n <Text size='xl' as='h2'>{props.title}</Text>\n <Text variant='secondary'>{props.desc}</Text>\n </CardHeader>\n {props.children && <CardContent>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1.5rem' }}>\n {props.children}\n </div>\n </CardContent>}\n {props.buttonText && <CardFooter>\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n <Button\n disabled={props.buttonDisabled}\n onClick={props.onButtonClick}\n variant={props.buttonVariant}\n >\n {props.buttonText}\n </Button>\n </div>\n </CardFooter>}\n </Card>\n );\n}\n\nfunction ProfileSection() {\n const user = useUser();\n const [userInfo, setUserInfo] = useState<{ displayName: string }>({ displayName: user?.displayName || '' });\n const [changed, setChanged] = useState(false);\n\n return (\n <SettingSection\n title='Profile'\n desc='Your profile information'\n buttonDisabled={!changed}\n buttonText='Save'\n onButtonClick={async () => {\n await user?.update(userInfo);\n setChanged(false);\n }}\n >\n <div style={{ display: 'flex', gap: '1rem', alignItems: 'center' }}>\n <UserAvatar user={user} size={60}/>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Text size='lg'>{user?.displayName}</Text>\n <Text variant='secondary' size='sm'>{user?.primaryEmail}</Text>\n </div>\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='display-name'>Display Name</Label>\n <Input\n id='display-name'\n value={userInfo.displayName}\n onChange={(e) => {\n setUserInfo((i) => ({...i, displayName: e.target.value }));\n setChanged(true);\n }}\n />\n </div>\n </SettingSection>\n );\n}\n\nfunction EmailVerificationSection() {\n const user = useUser();\n const [emailSent, setEmailSent] = useState(false);\n\n return (\n <SettingSection\n title='Email Verification'\n desc='We want to make sure that you own the email address.'\n buttonDisabled={emailSent}\n buttonText={\n !user?.primaryEmailVerified ? \n emailSent ? \n 'Email sent!' : \n 'Send Email'\n : undefined\n }\n onButtonClick={async () => {\n await user?.sendVerificationEmail();\n setEmailSent(true);\n }}\n >\n {user?.primaryEmailVerified ? \n <Text variant='success'>Your email has been verified</Text> : \n <Text variant='warning'>Your email has not been verified</Text>}\n </SettingSection>\n );\n}\n\nfunction PasswordSection() {\n const user = useUser();\n const [oldPassword, setOldPassword] = useState<string>('');\n const [oldPasswordError, setOldPasswordError] = useState<string>('');\n const [newPassword, setNewPassword] = useState<string>('');\n const [newPasswordError, setNewPasswordError] = useState<string>('');\n\n if (!user?.hasPassword) {\n return null;\n }\n\n return (\n <SettingSection\n title='Password'\n desc='Change your password here.'\n buttonDisabled={!oldPassword || !newPassword}\n buttonText='Save'\n onButtonClick={async () => {\n if (oldPassword && newPassword) {\n const errorMessage = getPasswordError(newPassword);\n if (errorMessage) {\n setNewPasswordError(errorMessage.message);\n } else {\n const errorCode = await user?.updatePassword({ oldPassword, newPassword });\n if (errorCode) {\n setOldPasswordError('Incorrect password');\n } else {\n setOldPassword('');\n setNewPassword('');\n }\n }\n } else if (oldPassword && !newPassword) {\n setNewPasswordError('Please enter a new password');\n } else if (newPassword && !oldPassword) {\n setOldPasswordError('Please enter your old password');\n }\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='old-password'>Old Password</Label>\n <PasswordField\n id='old-password' \n value={oldPassword} \n onChange={(e) => {\n setOldPassword(e.target.value);\n setOldPasswordError('');\n }}\n />\n <FormWarningText text={oldPasswordError} />\n </div>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='new-password'>New Password</Label>\n <PasswordField\n id='new-password' \n value={newPassword} \n onChange={(e) => {\n setNewPassword(e.target.value);\n setNewPasswordError('');\n }}\n />\n <FormWarningText text={newPasswordError} />\n </div>\n </SettingSection>\n );\n}\n\nfunction SignOutSection() {\n const user = useUser();\n return (\n <SettingSection\n title='Sign out'\n desc='Sign out of your account on this device.'\n buttonVariant='secondary'\n buttonText='Sign Out'\n onButtonClick={() => user?.signOut()}\n >\n </SettingSection>\n );\n}\n\nexport default function AccountSettings({ fullPage=false }: { fullPage?: boolean }) {\n const user = useUser();\n if (!user) {\n return <RedirectMessageCard type='signedOut' fullPage={fullPage} />;\n }\n\n const inner = (\n <div style={{ padding: fullPage ? '1rem' : 0, display: 'flex', flexDirection: 'column', gap: '1.5rem' }}>\n <div>\n <Text size=\"xl\" as='h2' style={{ marginBottom: '0.5rem', fontWeight: '700' }}>Account Settings</Text>\n <Text variant='secondary'>Manage your account</Text>\n </div>\n \n <ProfileSection />\n <EmailVerificationSection />\n <PasswordSection />\n <SignOutSection />\n </div>\n );\n\n if (fullPage) {\n return (\n <Container size='sm'>\n {inner}\n </Container>\n );\n } else {\n return inner;\n }\n}\n"],"mappings":"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","names":["UserAvatar","FormWarningText","RedirectMessageCard"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/account-settings.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { PasswordField, useUser } from '..';\nimport RedirectMessageCard from '../components/redirect-message-card';\nimport { Text, Label, Input, Button, Card, CardHeader, CardContent, CardFooter, Container } from \"../components-core\";\nimport UserAvatar from '../components/user-avatar';\nimport { useState } from 'react';\nimport FormWarningText from '../components/form-warning';\nimport { getPasswordError } from '@stackframe/stack-shared/dist/helpers/password';\n\nfunction SettingSection(props: {\n title: string, \n desc: string, \n buttonText?: string, \n buttonDisabled?: boolean,\n onButtonClick?: React.ComponentProps<typeof Button>[\"onClick\"],\n buttonVariant?: 'primary' | 'secondary',\n children?: React.ReactNode, \n}) {\n return (\n <Card>\n <CardHeader>\n <Text as='h3' style={{ fontWeight: 500 }}>{props.title}</Text>\n <Text variant='secondary' size='sm'>{props.desc}</Text>\n </CardHeader>\n {props.children && <CardContent>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {props.children}\n </div>\n </CardContent>}\n {props.buttonText && <CardFooter>\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n <Button\n disabled={props.buttonDisabled}\n onClick={props.onButtonClick}\n variant={props.buttonVariant}\n >\n {props.buttonText}\n </Button>\n </div>\n </CardFooter>}\n </Card>\n );\n}\n\nfunction ProfileSection() {\n const user = useUser();\n const [userInfo, setUserInfo] = useState<{ displayName: string }>({ displayName: user?.displayName || '' });\n const [changed, setChanged] = useState(false);\n\n return (\n <SettingSection\n title='Profile'\n desc='Your profile information'\n buttonDisabled={!changed}\n buttonText='Save'\n onButtonClick={async () => {\n await user?.update(userInfo);\n setChanged(false);\n }}\n >\n <div style={{ display: 'flex', gap: '1rem', alignItems: 'center' }}>\n <UserAvatar user={user} size={50}/>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Text>{user?.displayName}</Text>\n <Text variant='secondary' size='sm'>{user?.primaryEmail}</Text>\n </div>\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='display-name'>Display Name</Label>\n <Input\n id='display-name'\n value={userInfo.displayName}\n onChange={(e) => {\n setUserInfo((i) => ({...i, displayName: e.target.value }));\n setChanged(true);\n }}\n />\n </div>\n </SettingSection>\n );\n}\n\nfunction EmailVerificationSection() {\n const user = useUser();\n const [emailSent, setEmailSent] = useState(false);\n\n return (\n <SettingSection\n title='Email Verification'\n desc='We want to make sure that you own the email address.'\n buttonDisabled={emailSent}\n buttonText={\n !user?.primaryEmailVerified ? \n emailSent ? \n 'Email sent!' : \n 'Send Email'\n : undefined\n }\n onButtonClick={async () => {\n await user?.sendVerificationEmail();\n setEmailSent(true);\n }}\n >\n {user?.primaryEmailVerified ? \n <Text variant='success'>Your email has been verified</Text> : \n <Text variant='warning'>Your email has not been verified</Text>}\n </SettingSection>\n );\n}\n\nfunction PasswordSection() {\n const user = useUser();\n const [oldPassword, setOldPassword] = useState<string>('');\n const [oldPasswordError, setOldPasswordError] = useState<string>('');\n const [newPassword, setNewPassword] = useState<string>('');\n const [newPasswordError, setNewPasswordError] = useState<string>('');\n\n if (!user?.hasPassword) {\n return null;\n }\n\n return (\n <SettingSection\n title='Password'\n desc='Change your password here.'\n buttonDisabled={!oldPassword || !newPassword}\n buttonText='Save'\n onButtonClick={async () => {\n if (oldPassword && newPassword) {\n const errorMessage = getPasswordError(newPassword);\n if (errorMessage) {\n setNewPasswordError(errorMessage.message);\n } else {\n const errorCode = await user?.updatePassword({ oldPassword, newPassword });\n if (errorCode) {\n setOldPasswordError('Incorrect password');\n } else {\n setOldPassword('');\n setNewPassword('');\n }\n }\n } else if (oldPassword && !newPassword) {\n setNewPasswordError('Please enter a new password');\n } else if (newPassword && !oldPassword) {\n setOldPasswordError('Please enter your old password');\n }\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='old-password'>Old Password</Label>\n <PasswordField\n id='old-password' \n value={oldPassword} \n onChange={(e) => {\n setOldPassword(e.target.value);\n setOldPasswordError('');\n }}\n />\n <FormWarningText text={oldPasswordError} />\n </div>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='new-password'>New Password</Label>\n <PasswordField\n id='new-password' \n value={newPassword} \n onChange={(e) => {\n setNewPassword(e.target.value);\n setNewPasswordError('');\n }}\n />\n <FormWarningText text={newPasswordError} />\n </div>\n </SettingSection>\n );\n}\n\nfunction SignOutSection() {\n const user = useUser();\n return (\n <SettingSection\n title='Sign out'\n desc='Sign out of your account on this device.'\n buttonVariant='secondary'\n buttonText='Sign Out'\n onButtonClick={() => user?.signOut()}\n >\n </SettingSection>\n );\n}\n\nexport default function AccountSettings({ fullPage=false }: { fullPage?: boolean }) {\n const user = useUser();\n if (!user) {\n return <RedirectMessageCard type='signedOut' fullPage={fullPage} />;\n }\n\n const inner = (\n <div style={{ padding: fullPage ? '1rem' : 0, display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <Text size=\"xl\" as='h1' style={{ fontWeight: '600' }}>Account Settings</Text>\n <Text variant='secondary' size='sm'>Manage your account</Text>\n </div>\n \n <ProfileSection />\n <EmailVerificationSection />\n <PasswordSection />\n <SignOutSection />\n </div>\n );\n\n if (fullPage) {\n return (\n <Container size='sm'>\n {inner}\n </Container>\n );\n } else {\n return inner;\n }\n}\n"],"mappings":"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","names":["UserAvatar","FormWarningText","RedirectMessageCard"]}
|
|
@@ -38,7 +38,7 @@ module.exports = __toCommonJS(auth_page_exports);
|
|
|
38
38
|
var import_credential_sign_in = __toESM(require("../components/credential-sign-in"));
|
|
39
39
|
var import_separator_with_text = __toESM(require("../components/separator-with-text"));
|
|
40
40
|
var import_oauth_group = __toESM(require("../components/oauth-group"));
|
|
41
|
-
var
|
|
41
|
+
var import_maybe_full_page = __toESM(require("../components/maybe-full-page"));
|
|
42
42
|
var import__ = require("..");
|
|
43
43
|
var import_redirect_message_card = __toESM(require("../components/redirect-message-card"));
|
|
44
44
|
var import_components_core = require("../components-core");
|
|
@@ -51,14 +51,15 @@ function AuthPage({
|
|
|
51
51
|
}) {
|
|
52
52
|
const stackApp = (0, import__.useStackApp)();
|
|
53
53
|
const user = (0, import__.useUser)();
|
|
54
|
-
const
|
|
54
|
+
const projectFromHook = stackApp.useProject();
|
|
55
|
+
const project = mockProject || projectFromHook;
|
|
55
56
|
if (user && !mockProject) {
|
|
56
57
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_redirect_message_card.default, { type: "signedIn", fullPage });
|
|
57
58
|
}
|
|
58
59
|
const enableSeparator = (project.credentialEnabled || project.magicLinkEnabled) && project.oauthProviders.filter((p) => p.enabled).length > 0;
|
|
59
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
60
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_maybe_full_page.default, { fullPage, children: [
|
|
60
61
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { textAlign: "center", marginBottom: "1.5rem" }, children: [
|
|
61
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Text, { size: "xl", as: "h2", children: type === "sign-in" ? "Sign in to your account" : "Create a new account" }),
|
|
62
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Text, { size: "xl", as: "h2", style: { fontWeight: 500 }, children: type === "sign-in" ? "Sign in to your account" : "Create a new account" }),
|
|
62
63
|
type === "sign-in" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components_core.Text, { children: [
|
|
63
64
|
"Don't have an account? ",
|
|
64
65
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Link, { href: stackApp.urls.signUp, children: "Sign up" })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport CredentialSignIn from '../components/credential-sign-in';\nimport SeparatorWithText from '../components/separator-with-text';\nimport OAuthGroup from '../components/oauth-group';\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport CredentialSignIn from '../components/credential-sign-in';\nimport SeparatorWithText from '../components/separator-with-text';\nimport OAuthGroup from '../components/oauth-group';\nimport MaybeFullPage from '../components/maybe-full-page';\nimport { useUser, useStackApp, CredentialSignUp } from '..';\nimport RedirectMessageCard from '../components/redirect-message-card';\nimport { Link, Tabs, TabsContent, TabsList, TabsTrigger, Text } from \"../components-core\";\nimport MagicLinkSignIn from '../components/magic-link-sign-in';\nimport { ClientProjectJson } from \"@stackframe/stack-shared\";\n\nexport default function AuthPage({ \n fullPage=false,\n type,\n mockProject,\n}: { \n fullPage?: boolean, \n type: 'sign-in' | 'sign-up',\n mockProject?: ClientProjectJson,\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n const projectFromHook = stackApp.useProject();\n const project = mockProject || projectFromHook;\n\n if (user && !mockProject) {\n return <RedirectMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n const enableSeparator = (project.credentialEnabled || project.magicLinkEnabled) && project.oauthProviders.filter(p => p.enabled).length > 0;\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n <Text size=\"xl\" as='h2' style={{ fontWeight: 500 }}>\n {type === 'sign-in' ? 'Sign in to your account' : 'Create a new account'}\n </Text>\n {type === 'sign-in' ? (\n <Text>\n {\"Don't have an account? \"}\n <Link href={stackApp.urls.signUp}>\n Sign up\n </Link>\n </Text>\n ) : (\n <Text>\n {\"Already have an account? \"}\n <Link href={stackApp.urls.signIn}>\n Sign in\n </Link>\n </Text>\n )}\n </div>\n <OAuthGroup type={type} mockProject={mockProject} />\n {enableSeparator && <SeparatorWithText text={'Or continue with'} />}\n {project.credentialEnabled && project.magicLinkEnabled ? (\n <Tabs defaultValue='magic-link'>\n <TabsList>\n <TabsTrigger value='magic-link'>Magic Link</TabsTrigger>\n <TabsTrigger value='password'>Password</TabsTrigger>\n </TabsList>\n <TabsContent value='magic-link'>\n <MagicLinkSignIn/>\n </TabsContent>\n <TabsContent value='password'>\n {type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>}\n </TabsContent>\n </Tabs>\n ) : project.credentialEnabled ? (\n type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>\n ) : project.magicLinkEnabled ? (\n <MagicLinkSignIn/>\n ) : null}\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,gCAA6B;AAC7B,iCAA8B;AAC9B,yBAAuB;AACvB,6BAA0B;AAC1B,eAAuD;AACvD,mCAAgC;AAChC,6BAAqE;AACrE,gCAA4B;AAkBjB;AAfI,SAAR,SAA0B;AAAA,EAC/B,WAAS;AAAA,EACT;AAAA,EACA;AACF,GAIG;AACD,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AACrB,QAAM,kBAAkB,SAAS,WAAW;AAC5C,QAAM,UAAU,eAAe;AAE/B,MAAI,QAAQ,CAAC,aAAa;AACxB,WAAO,4CAAC,6BAAAA,SAAA,EAAoB,MAAK,YAAW,UAAoB;AAAA,EAClE;AAEA,QAAM,mBAAmB,QAAQ,qBAAqB,QAAQ,qBAAqB,QAAQ,eAAe,OAAO,OAAK,EAAE,OAAO,EAAE,SAAS;AAE1I,SACE,6CAAC,uBAAAC,SAAA,EAAc,UACb;AAAA,iDAAC,SAAI,OAAO,EAAE,WAAW,UAAU,cAAc,SAAS,GACxD;AAAA,kDAAC,+BAAK,MAAK,MAAK,IAAG,MAAK,OAAO,EAAE,YAAY,IAAI,GAC9C,mBAAS,YAAY,4BAA4B,wBACpD;AAAA,MACC,SAAS,YACR,6CAAC,+BACE;AAAA;AAAA,QACD,4CAAC,+BAAK,MAAM,SAAS,KAAK,QAAQ,qBAElC;AAAA,SACF,IAEA,6CAAC,+BACE;AAAA;AAAA,QACD,4CAAC,+BAAK,MAAM,SAAS,KAAK,QAAQ,qBAElC;AAAA,SACF;AAAA,OAEJ;AAAA,IACA,4CAAC,mBAAAC,SAAA,EAAW,MAAY,aAA0B;AAAA,IACjD,mBAAmB,4CAAC,2BAAAC,SAAA,EAAkB,MAAM,oBAAoB;AAAA,IAChE,QAAQ,qBAAqB,QAAQ,mBACpC,6CAAC,+BAAK,cAAa,cACjB;AAAA,mDAAC,mCACC;AAAA,oDAAC,sCAAY,OAAM,cAAa,wBAAU;AAAA,QAC1C,4CAAC,sCAAY,OAAM,YAAW,sBAAQ;AAAA,SACxC;AAAA,MACA,4CAAC,sCAAY,OAAM,cACjB,sDAAC,0BAAAC,SAAA,EAAe,GAClB;AAAA,MACA,4CAAC,sCAAY,OAAM,YAChB,mBAAS,YAAY,4CAAC,6BAAgB,IAAK,4CAAC,0BAAAC,SAAA,EAAgB,GAC/D;AAAA,OACF,IACE,QAAQ,oBACV,SAAS,YAAY,4CAAC,6BAAgB,IAAK,4CAAC,0BAAAA,SAAA,EAAgB,IAC1D,QAAQ,mBACV,4CAAC,0BAAAD,SAAA,EAAe,IACd;AAAA,KACN;AAEJ;","names":["RedirectMessageCard","MaybeFullPage","OAuthGroup","SeparatorWithText","MagicLinkSignIn","CredentialSignIn"]}
|
|
@@ -36,7 +36,7 @@ __export(forgot_password_exports, {
|
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(forgot_password_exports);
|
|
38
38
|
var import_forgot_password = __toESM(require("../components/forgot-password"));
|
|
39
|
-
var
|
|
39
|
+
var import_maybe_full_page = __toESM(require("../components/maybe-full-page"));
|
|
40
40
|
var import__ = require("..");
|
|
41
41
|
var import_redirect_message_card = __toESM(require("../components/redirect-message-card"));
|
|
42
42
|
var import_react = require("react");
|
|
@@ -52,7 +52,7 @@ function ForgotPassword({ fullPage = false }) {
|
|
|
52
52
|
if (sent) {
|
|
53
53
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_redirect_message_card.default, { type: "emailSent", fullPage });
|
|
54
54
|
}
|
|
55
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
55
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_maybe_full_page.default, { fullPage, children: [
|
|
56
56
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { textAlign: "center", marginBottom: "1.5rem" }, children: [
|
|
57
57
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Text, { size: "xl", as: "h2", children: "Reset Your Password" }),
|
|
58
58
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components_core.Text, { children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/forgot-password.tsx"],"sourcesContent":["'use client';\n\nimport ForgotPasswordElement from \"../components/forgot-password\";\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/forgot-password.tsx"],"sourcesContent":["'use client';\n\nimport ForgotPasswordElement from \"../components/forgot-password\";\nimport MaybeFullPage from \"../components/maybe-full-page\";\nimport { useUser, useStackApp } from \"..\";\nimport RedirectMessageCard from \"../components/redirect-message-card\";\nimport { useState } from \"react\";\nimport { Link, Text } from \"../components-core\";\n\n\nexport default function ForgotPassword({ fullPage=false }: { fullPage?: boolean }) {\n const stackApp = useStackApp();\n const user = useUser();\n const [sent, setSent] = useState(false);\n\n if (user) {\n return <RedirectMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n if (sent) {\n return <RedirectMessageCard type='emailSent' fullPage={fullPage} />;\n }\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n <Text size=\"xl\" as='h2'>Reset Your Password</Text>\n <Text>\n {\"Don't need to reset? \"}\n <Link href={stackApp.urls['signUp']}>\n Sign In\n </Link>\n </Text>\n </div>\n <ForgotPasswordElement onSent={() => setSent(true)} />\n </MaybeFullPage>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,6BAAkC;AAClC,6BAA0B;AAC1B,eAAqC;AACrC,mCAAgC;AAChC,mBAAyB;AACzB,6BAA2B;AAShB;AANI,SAAR,eAAgC,EAAE,WAAS,MAAM,GAA2B;AACjF,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AACrB,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAS,KAAK;AAEtC,MAAI,MAAM;AACR,WAAO,4CAAC,6BAAAA,SAAA,EAAoB,MAAK,YAAW,UAAoB;AAAA,EAClE;AAEA,MAAI,MAAM;AACR,WAAO,4CAAC,6BAAAA,SAAA,EAAoB,MAAK,aAAY,UAAoB;AAAA,EACnE;AAEA,SACE,6CAAC,uBAAAC,SAAA,EAAc,UACb;AAAA,iDAAC,SAAI,OAAO,EAAE,WAAW,UAAU,cAAc,SAAS,GACxD;AAAA,kDAAC,+BAAK,MAAK,MAAK,IAAG,MAAK,iCAAmB;AAAA,MAC3C,6CAAC,+BACE;AAAA;AAAA,QACD,4CAAC,+BAAK,MAAM,SAAS,KAAK,QAAQ,GAAG,qBAErC;AAAA,SACF;AAAA,OACF;AAAA,IACA,4CAAC,uBAAAC,SAAA,EAAsB,QAAQ,MAAM,QAAQ,IAAI,GAAG;AAAA,KACtD;AAEJ;","names":["RedirectMessageCard","MaybeFullPage","ForgotPasswordElement"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
declare function OAuthCallback(
|
|
3
|
+
declare function OAuthCallback(props: {
|
|
4
|
+
fullPage?: boolean;
|
|
5
|
+
}): react_jsx_runtime.JSX.Element;
|
|
4
6
|
|
|
5
7
|
export { OAuthCallback as default };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
declare function OAuthCallback(
|
|
3
|
+
declare function OAuthCallback(props: {
|
|
4
|
+
fullPage?: boolean;
|
|
5
|
+
}): react_jsx_runtime.JSX.Element;
|
|
4
6
|
|
|
5
7
|
export { OAuthCallback as default };
|
|
@@ -40,7 +40,7 @@ var import__ = require("..");
|
|
|
40
40
|
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
41
41
|
var import_message_card = __toESM(require("../components/message-card"));
|
|
42
42
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
43
|
-
function OAuthCallback() {
|
|
43
|
+
function OAuthCallback(props) {
|
|
44
44
|
const app = (0, import__.useStackApp)();
|
|
45
45
|
const called = (0, import_react.useRef)(false);
|
|
46
46
|
const [error, setError] = (0, import_react.useState)(null);
|
|
@@ -62,7 +62,7 @@ function OAuthCallback() {
|
|
|
62
62
|
(0, import_react.useEffect)(() => {
|
|
63
63
|
setTimeout(() => setShowRedirectLink(true), 3e3);
|
|
64
64
|
}, []);
|
|
65
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_message_card.default, { title: "Redirecting...", fullPage:
|
|
65
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_message_card.default, { title: "Redirecting...", fullPage: props.fullPage, children: [
|
|
66
66
|
showRedirectLink ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { children: [
|
|
67
67
|
"If you are not redirected automatically, ",
|
|
68
68
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: app.urls.home, children: "click here" }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useEffect, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport MessageCard from \"../components/message-card\";\n\nexport default function OAuthCallback
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useEffect, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport MessageCard from \"../components/message-card\";\n\nexport default function OAuthCallback(props: { fullPage?: boolean }) {\n const app = useStackApp();\n const called = useRef(false);\n const [error, setError] = useState<unknown>(null);\n const [showRedirectLink, setShowRedirectLink] = useState(false);\n\n useEffect(() => runAsynchronously(async () => {\n if (called.current) return;\n called.current = true;\n let hasRedirected = false;\n try {\n hasRedirected = await app.callOAuthCallback();\n } catch (e: any) {\n setError(e);\n }\n if (!hasRedirected) {\n await app.redirectToSignIn();\n }\n }), []);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return <MessageCard title='Redirecting...' fullPage={props.fullPage}>\n {showRedirectLink ? <p>If you are not redirected automatically, <a href={app.urls.home}>click here</a>.</p> : null}\n {error ? <div>\n <p>Something went wrong while processing the OAuth callback:</p>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n <p>This is most likely an error in Stack. Please report it.</p>\n </div> : null}\n </MessageCard>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA4C;AAC5C,eAA4B;AAC5B,sBAAkC;AAClC,0BAAwB;AA2BA;AAzBT,SAAR,cAA+B,OAA+B;AACnE,QAAM,UAAM,sBAAY;AACxB,QAAM,aAAS,qBAAO,KAAK;AAC3B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAkB,IAAI;AAChD,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,uBAAS,KAAK;AAE9D,8BAAU,UAAM,mCAAkB,YAAY;AAC5C,QAAI,OAAO;AAAS;AACpB,WAAO,UAAU;AACjB,QAAI,gBAAgB;AACpB,QAAI;AACF,sBAAgB,MAAM,IAAI,kBAAkB;AAAA,IAC9C,SAAS,GAAQ;AACf,eAAS,CAAC;AAAA,IACZ;AACA,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,iBAAiB;AAAA,IAC7B;AAAA,EACF,CAAC,GAAG,CAAC,CAAC;AAEN,8BAAU,MAAM;AACd,eAAW,MAAM,oBAAoB,IAAI,GAAG,GAAI;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,SAAO,6CAAC,oBAAAA,SAAA,EAAY,OAAM,kBAAiB,UAAU,MAAM,UACxD;AAAA,uBAAmB,6CAAC,OAAE;AAAA;AAAA,MAAyC,4CAAC,OAAE,MAAM,IAAI,KAAK,MAAM,wBAAU;AAAA,MAAI;AAAA,OAAC,IAAO;AAAA,IAC7G,QAAQ,6CAAC,SACR;AAAA,kDAAC,OAAE,uEAAyD;AAAA,MAC5D,4CAAC,SAAK,eAAK,UAAU,OAAO,MAAM,CAAC,GAAE;AAAA,MACrC,4CAAC,OAAE,sEAAwD;AAAA,OAC7D,IAAS;AAAA,KACX;AACF;","names":["MessageCard"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\nimport MessageCard from \"../components/message-card\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { use } from \"react\";\nimport PasswordResetInner from \"../components/password-reset-inner\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { Text } from \"../components-core\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\nimport MessageCard from \"../components/message-card\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { use } from \"react\";\nimport PasswordResetInner from \"../components/password-reset-inner\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { Text } from \"../components-core\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\n\nconst cachedVerifyPasswordResetCode = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.verifyPasswordResetCode(code);\n});\n\nexport default function PasswordReset({\n searchParams,\n fullPage = false,\n}: { \n searchParams?: Record<string, string>,\n fullPage?: boolean, \n}) {\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Password Reset Link\" fullPage={fullPage}>\n <Text>Please double check if you have the correct password reset link.</Text>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Password Reset Link\" fullPage={fullPage}>\n <Text>Your password reset link has expired. Please request a new password reset link from the login page.</Text>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title=\"Used Password Reset Link\" fullPage={fullPage}>\n <Text>This password reset link has already been used. If you need to reset your password again, please request a new password reset link from the login page.</Text>\n </MessageCard>\n );\n\n const code = searchParams?.code;\n if (!code) {\n return invalidJsx;\n }\n\n const error = use(cachedVerifyPasswordResetCode(stackApp, code));\n \n if (error instanceof KnownErrors.PasswordResetCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.PasswordResetCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.PasswordResetCodeAlreadyUsed) {\n return usedJsx;\n } else if (error) {\n throw error;\n }\n\n return <PasswordResetInner code={code} fullPage={fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,0BAAwB;AACxB,eAA4C;AAC5C,mBAAoB;AACpB,kCAA+B;AAC/B,oBAA8B;AAC9B,6BAAqB;AACrB,0BAA4B;AAiBtB;AAfN,IAAM,oCAAgC,6BAAc,OAAO,UAAgC,SAAiB;AAC1G,SAAO,MAAM,SAAS,wBAAwB,IAAI;AACpD,CAAC;AAEc,SAAR,cAA+B;AAAA,EACpC;AAAA,EACA,WAAW;AACb,GAGG;AACD,QAAM,eAAW,sBAAY;AAE7B,QAAM,aACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,+BAA8B,UAC/C,sDAAC,+BAAK,8EAAgE,GACxE;AAGF,QAAM,aACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,+BAA8B,UAC/C,sDAAC,+BAAK,iHAAmG,GAC3G;AAGF,QAAM,UACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,4BAA2B,UAC5C,sDAAC,+BAAK,qKAAuJ,GAC/J;AAGF,QAAM,OAAO,cAAc;AAC3B,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,YAAQ,kBAAI,8BAA8B,UAAU,IAAI,CAAC;AAE/D,MAAI,iBAAiB,gCAAY,2BAA2B;AAC1D,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,0BAA0B;AAChE,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,8BAA8B;AACpE,WAAO;AAAA,EACT,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,SAAO,4CAAC,4BAAAC,SAAA,EAAmB,MAAY,UAAoB;AAC7D;","names":["MessageCard","PasswordResetInner"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/sign-in.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/sign-in.tsx"],"sourcesContent":["import AuthPage from './auth-page';\n\nexport default function SignIn({ fullPage=false }: { fullPage?: boolean }) {\n return <AuthPage fullPage={fullPage} type='sign-in' />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAqB;AAGZ;AADM,SAAR,OAAwB,EAAE,WAAS,MAAM,GAA2B;AACzE,SAAO,4CAAC,iBAAAA,SAAA,EAAS,UAAoB,MAAK,WAAU;AACtD;","names":["AuthPage"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
declare function
|
|
3
|
+
declare function SignOut(props: {
|
|
4
|
+
fullPage?: boolean;
|
|
5
|
+
}): react_jsx_runtime.JSX.Element;
|
|
4
6
|
|
|
5
|
-
export {
|
|
7
|
+
export { SignOut as default };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
declare function
|
|
3
|
+
declare function SignOut(props: {
|
|
4
|
+
fullPage?: boolean;
|
|
5
|
+
}): react_jsx_runtime.JSX.Element;
|
|
4
6
|
|
|
5
|
-
export {
|
|
7
|
+
export { SignOut as default };
|
|
@@ -32,18 +32,18 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
32
32
|
// src/components-page/sign-out.tsx
|
|
33
33
|
var sign_out_exports = {};
|
|
34
34
|
__export(sign_out_exports, {
|
|
35
|
-
default: () =>
|
|
35
|
+
default: () => SignOut
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(sign_out_exports);
|
|
38
38
|
var import_react = require("react");
|
|
39
39
|
var import__ = require("..");
|
|
40
40
|
var import_redirect_message_card = __toESM(require("../components/redirect-message-card"));
|
|
41
41
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
42
|
-
function
|
|
42
|
+
function SignOut(props) {
|
|
43
43
|
const user = (0, import__.useUser)();
|
|
44
44
|
if (user) {
|
|
45
45
|
(0, import_react.use)(user.signOut());
|
|
46
46
|
}
|
|
47
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_redirect_message_card.default, { type: "signedOut", fullPage:
|
|
47
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_redirect_message_card.default, { type: "signedOut", fullPage: props.fullPage });
|
|
48
48
|
}
|
|
49
49
|
//# sourceMappingURL=sign-out.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/sign-out.tsx"],"sourcesContent":["'use client';\n\nimport { use } from \"react\";\nimport { useUser } from \"..\";\nimport GoHomeMessageCard from \"../components/redirect-message-card\";\n\nexport default function
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/sign-out.tsx"],"sourcesContent":["'use client';\n\nimport { use } from \"react\";\nimport { useUser } from \"..\";\nimport GoHomeMessageCard from \"../components/redirect-message-card\";\n\nexport default function SignOut(props: { fullPage?: boolean }) {\n const user = useUser();\n \n if (user) {\n use(user.signOut());\n }\n \n return <GoHomeMessageCard type='signedOut' fullPage={props.fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAoB;AACpB,eAAwB;AACxB,mCAA8B;AASrB;AAPM,SAAR,QAAyB,OAA+B;AAC7D,QAAM,WAAO,kBAAQ;AAErB,MAAI,MAAM;AACR,0BAAI,KAAK,QAAQ,CAAC;AAAA,EACpB;AAEA,SAAO,4CAAC,6BAAAA,SAAA,EAAkB,MAAK,aAAY,UAAU,MAAM,UAAU;AACvE;","names":["GoHomeMessageCard"]}
|
|
@@ -5,13 +5,15 @@ import '@stackframe/stack-shared/dist/interface/clientInterface';
|
|
|
5
5
|
import '@stackframe/stack-shared/dist/utils/json';
|
|
6
6
|
import '@stackframe/stack-shared/dist/interface/adminInterface';
|
|
7
7
|
import '@stackframe/stack-shared/dist/interface/serverInterface';
|
|
8
|
+
import '@stackframe/stack-shared/dist/interface/crud/email-templates';
|
|
8
9
|
|
|
9
|
-
declare function StackHandler<HasTokenStore extends boolean>({ app, params: { stack }, searchParams, }: {
|
|
10
|
+
declare function StackHandler<HasTokenStore extends boolean>({ app, params: { stack }, searchParams, fullPage, }: {
|
|
10
11
|
app: StackServerApp<HasTokenStore>;
|
|
11
12
|
params?: {
|
|
12
13
|
stack?: string[];
|
|
13
14
|
};
|
|
14
15
|
searchParams?: Record<string, string>;
|
|
16
|
+
fullPage?: boolean | "deprecated-unset";
|
|
15
17
|
}): Promise<react_jsx_runtime.JSX.Element>;
|
|
16
18
|
|
|
17
19
|
export { StackHandler as default };
|
|
@@ -5,13 +5,15 @@ import '@stackframe/stack-shared/dist/interface/clientInterface';
|
|
|
5
5
|
import '@stackframe/stack-shared/dist/utils/json';
|
|
6
6
|
import '@stackframe/stack-shared/dist/interface/adminInterface';
|
|
7
7
|
import '@stackframe/stack-shared/dist/interface/serverInterface';
|
|
8
|
+
import '@stackframe/stack-shared/dist/interface/crud/email-templates';
|
|
8
9
|
|
|
9
|
-
declare function StackHandler<HasTokenStore extends boolean>({ app, params: { stack }, searchParams, }: {
|
|
10
|
+
declare function StackHandler<HasTokenStore extends boolean>({ app, params: { stack }, searchParams, fullPage, }: {
|
|
10
11
|
app: StackServerApp<HasTokenStore>;
|
|
11
12
|
params?: {
|
|
12
13
|
stack?: string[];
|
|
13
14
|
};
|
|
14
15
|
searchParams?: Record<string, string>;
|
|
16
|
+
fullPage?: boolean | "deprecated-unset";
|
|
15
17
|
}): Promise<react_jsx_runtime.JSX.Element>;
|
|
16
18
|
|
|
17
19
|
export { StackHandler as default };
|
|
@@ -48,10 +48,16 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
48
48
|
async function StackHandler({
|
|
49
49
|
app,
|
|
50
50
|
params: { stack } = {},
|
|
51
|
-
searchParams = {}
|
|
51
|
+
searchParams = {},
|
|
52
|
+
// TODO set default to false like on the other components (may break old code)
|
|
53
|
+
fullPage = "deprecated-unset"
|
|
52
54
|
}) {
|
|
55
|
+
if (fullPage === "deprecated-unset") {
|
|
56
|
+
console.warn("You are not passing `fullPage` to Stack's Handler. The default behaviour will soon change from `true` to `false`. Please update your Handler component in handler/[...stack]/page.tsx by adding the `fullPage` prop.");
|
|
57
|
+
fullPage = true;
|
|
58
|
+
}
|
|
53
59
|
if (!stack) {
|
|
54
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.default, { title: "Invalid Stack Handler Setup", fullPage
|
|
60
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.default, { title: "Invalid Stack Handler Setup", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack]." }) });
|
|
55
61
|
}
|
|
56
62
|
function redirectIfNotHandler(name) {
|
|
57
63
|
const url = app.urls[name];
|
|
@@ -72,40 +78,40 @@ async function StackHandler({
|
|
|
72
78
|
case "signin": {
|
|
73
79
|
redirectIfNotHandler("signIn");
|
|
74
80
|
await redirectIfHasUser();
|
|
75
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_sign_in.default, { fullPage
|
|
81
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_sign_in.default, { fullPage });
|
|
76
82
|
}
|
|
77
83
|
case "signup": {
|
|
78
84
|
redirectIfNotHandler("signUp");
|
|
79
85
|
await redirectIfHasUser();
|
|
80
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_sign_up.default, { fullPage
|
|
86
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_sign_up.default, { fullPage });
|
|
81
87
|
}
|
|
82
88
|
case "email-verification": {
|
|
83
89
|
redirectIfNotHandler("emailVerification");
|
|
84
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_email_verification.default, { searchParams, fullPage
|
|
90
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_email_verification.default, { searchParams, fullPage });
|
|
85
91
|
}
|
|
86
92
|
case "password-reset": {
|
|
87
93
|
redirectIfNotHandler("passwordReset");
|
|
88
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.PasswordReset, { searchParams, fullPage
|
|
94
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.PasswordReset, { searchParams, fullPage });
|
|
89
95
|
}
|
|
90
96
|
case "forgot-password": {
|
|
91
97
|
redirectIfNotHandler("forgotPassword");
|
|
92
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_forgot_password.default, { fullPage
|
|
98
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_forgot_password.default, { fullPage });
|
|
93
99
|
}
|
|
94
100
|
case "signout": {
|
|
95
101
|
redirectIfNotHandler("signOut");
|
|
96
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_sign_out.default, {});
|
|
102
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_sign_out.default, { fullPage });
|
|
97
103
|
}
|
|
98
104
|
case "oauth-callback": {
|
|
99
105
|
redirectIfNotHandler("oauthCallback");
|
|
100
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_oauth_callback.default, {});
|
|
106
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_oauth_callback.default, { fullPage });
|
|
101
107
|
}
|
|
102
108
|
case "account-settings": {
|
|
103
109
|
redirectIfNotHandler("accountSettings");
|
|
104
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_account_settings.default, { fullPage
|
|
110
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_account_settings.default, { fullPage });
|
|
105
111
|
}
|
|
106
112
|
case "magic-link-callback": {
|
|
107
113
|
redirectIfNotHandler("magicLinkCallback");
|
|
108
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_magic_link_callback.default, { searchParams, fullPage
|
|
114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_magic_link_callback.default, { searchParams, fullPage });
|
|
109
115
|
}
|
|
110
116
|
default: {
|
|
111
117
|
return (0, import_navigation.notFound)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/stack-handler.tsx"],"sourcesContent":["import SignUp from \"./sign-up\";\nimport SignIn from \"./sign-in\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport EmailVerification from \"./email-verification\";\nimport { PasswordReset, StackServerApp } from \"..\";\nimport MessageCard from \"../components/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport SignOut from \"./sign-out\";\nimport ForgotPassword from \"./forgot-password\";\nimport OAuthCallback from \"./oauth-callback\";\nimport AccountSettings from \"./account-settings\";\nimport MagicLinkCallback from \"./magic-link-callback\";\n\nexport default async function StackHandler<HasTokenStore extends boolean>({\n app,\n params: { stack } = {},\n searchParams = {},\n}: { \n app: StackServerApp<HasTokenStore>,\n params?: { stack?: string[] }, \n searchParams?: Record<string, string>,\n}) {\n if (!stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage>\n <p>Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack].</p>\n </MessageCard>\n );\n }\n\n function redirectIfNotHandler(name: keyof HandlerUrls) {\n const url = app.urls[name];\n const handlerUrl = app.urls.handler;\n\n if (url.startsWith(handlerUrl)) {\n // don't redirect if the url is a handler url\n return;\n }\n\n redirect(url, RedirectType.replace);\n }\n\n async function redirectIfHasUser() {\n const user = await app.getServerUser();\n if (user) {\n redirect(app.urls.afterSignIn);\n }\n }\n\n const path = stack.join('/');\n switch (path) {\n case 'signin': {\n redirectIfNotHandler('signIn');\n await redirectIfHasUser();\n return <SignIn fullPage/>;\n }\n case 'signup': {\n redirectIfNotHandler('signUp');\n await redirectIfHasUser();\n return <SignUp fullPage/>;\n }\n case 'email-verification': {\n redirectIfNotHandler('emailVerification');\n return <EmailVerification searchParams={searchParams} fullPage/>;\n }\n case 'password-reset': {\n redirectIfNotHandler('passwordReset');\n return <PasswordReset searchParams={searchParams} fullPage />;\n }\n case 'forgot-password': {\n redirectIfNotHandler('forgotPassword');\n return <ForgotPassword fullPage />;\n }\n case 'signout': {\n redirectIfNotHandler('signOut');\n return <SignOut/>;\n }\n case 'oauth-callback': {\n redirectIfNotHandler('oauthCallback');\n return <OAuthCallback />;\n }\n case 'account-settings': {\n redirectIfNotHandler('accountSettings');\n return <AccountSettings fullPage />;\n }\n case 'magic-link-callback': {\n redirectIfNotHandler('magicLinkCallback');\n return <MagicLinkCallback searchParams={searchParams} fullPage />;\n }\n default: {\n return notFound();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmB;AACnB,qBAAmB;AACnB,wBAAiD;AACjD,gCAA8B;AAC9B,eAA8C;AAC9C,0BAAwB;AAExB,sBAAoB;AACpB,6BAA2B;AAC3B,4BAA0B;AAC1B,8BAA4B;AAC5B,iCAA8B;
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/stack-handler.tsx"],"sourcesContent":["import SignUp from \"./sign-up\";\nimport SignIn from \"./sign-in\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport EmailVerification from \"./email-verification\";\nimport { PasswordReset, StackServerApp } from \"..\";\nimport MessageCard from \"../components/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport SignOut from \"./sign-out\";\nimport ForgotPassword from \"./forgot-password\";\nimport OAuthCallback from \"./oauth-callback\";\nimport AccountSettings from \"./account-settings\";\nimport MagicLinkCallback from \"./magic-link-callback\";\n\nexport default async function StackHandler<HasTokenStore extends boolean>({\n app,\n params: { stack } = {},\n searchParams = {},\n // TODO set default to false like on the other components (may break old code)\n fullPage = \"deprecated-unset\",\n}: { \n app: StackServerApp<HasTokenStore>,\n params?: { stack?: string[] }, \n searchParams?: Record<string, string>,\n fullPage?: boolean | \"deprecated-unset\",\n}) {\n if (fullPage === \"deprecated-unset\") {\n console.warn(\"You are not passing `fullPage` to Stack's Handler. The default behaviour will soon change from `true` to `false`. Please update your Handler component in handler/[...stack]/page.tsx by adding the `fullPage` prop.\");\n fullPage = true;\n }\n\n if (!stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage={fullPage}>\n <p>Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack].</p>\n </MessageCard>\n );\n }\n\n function redirectIfNotHandler(name: keyof HandlerUrls) {\n const url = app.urls[name];\n const handlerUrl = app.urls.handler;\n\n if (url.startsWith(handlerUrl)) {\n // don't redirect if the url is a handler url\n return;\n }\n\n redirect(url, RedirectType.replace);\n }\n\n async function redirectIfHasUser() {\n const user = await app.getServerUser();\n if (user) {\n redirect(app.urls.afterSignIn);\n }\n }\n\n const path = stack.join('/');\n switch (path) {\n case 'signin': {\n redirectIfNotHandler('signIn');\n await redirectIfHasUser();\n return <SignIn fullPage={fullPage} />;\n }\n case 'signup': {\n redirectIfNotHandler('signUp');\n await redirectIfHasUser();\n return <SignUp fullPage={fullPage} />;\n }\n case 'email-verification': {\n redirectIfNotHandler('emailVerification');\n return <EmailVerification searchParams={searchParams} fullPage={fullPage} />;\n }\n case 'password-reset': {\n redirectIfNotHandler('passwordReset');\n return <PasswordReset searchParams={searchParams} fullPage={fullPage} />;\n }\n case 'forgot-password': {\n redirectIfNotHandler('forgotPassword');\n return <ForgotPassword fullPage={fullPage} />;\n }\n case 'signout': {\n redirectIfNotHandler('signOut');\n return <SignOut fullPage={fullPage} />;\n }\n case 'oauth-callback': {\n redirectIfNotHandler('oauthCallback');\n return <OAuthCallback fullPage={fullPage} />;\n }\n case 'account-settings': {\n redirectIfNotHandler('accountSettings');\n return <AccountSettings fullPage={fullPage} />;\n }\n case 'magic-link-callback': {\n redirectIfNotHandler('magicLinkCallback');\n return <MagicLinkCallback searchParams={searchParams} fullPage={fullPage} />;\n }\n default: {\n return notFound();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmB;AACnB,qBAAmB;AACnB,wBAAiD;AACjD,gCAA8B;AAC9B,eAA8C;AAC9C,0BAAwB;AAExB,sBAAoB;AACpB,6BAA2B;AAC3B,4BAA0B;AAC1B,8BAA4B;AAC5B,iCAA8B;AAsBtB;AApBR,eAAO,aAAmE;AAAA,EACxE;AAAA,EACA,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EACrB,eAAe,CAAC;AAAA;AAAA,EAEhB,WAAW;AACb,GAKG;AACD,MAAI,aAAa,oBAAoB;AACnC,YAAQ,KAAK,sNAAsN;AACnO,eAAW;AAAA,EACb;AAEA,MAAI,CAAC,OAAO;AACV,WACE,4CAAC,oBAAAA,SAAA,EAAY,OAAM,+BAA8B,UAC/C,sDAAC,OAAE,iHAAmG,GACxG;AAAA,EAEJ;AAEA,WAAS,qBAAqB,MAAyB;AACrD,UAAM,MAAM,IAAI,KAAK,IAAI;AACzB,UAAM,aAAa,IAAI,KAAK;AAE5B,QAAI,IAAI,WAAW,UAAU,GAAG;AAE9B;AAAA,IACF;AAEA,oCAAS,KAAK,+BAAa,OAAO;AAAA,EACpC;AAEA,iBAAe,oBAAoB;AACjC,UAAM,OAAO,MAAM,IAAI,cAAc;AACrC,QAAI,MAAM;AACR,sCAAS,IAAI,KAAK,WAAW;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,OAAO,MAAM,KAAK,GAAG;AAC3B,UAAQ,MAAM;AAAA,IACZ,KAAK,UAAU;AACb,2BAAqB,QAAQ;AAC7B,YAAM,kBAAkB;AACxB,aAAO,4CAAC,eAAAC,SAAA,EAAO,UAAoB;AAAA,IACrC;AAAA,IACA,KAAK,UAAU;AACb,2BAAqB,QAAQ;AAC7B,YAAM,kBAAkB;AACxB,aAAO,4CAAC,eAAAC,SAAA,EAAO,UAAoB;AAAA,IACrC;AAAA,IACA,KAAK,sBAAsB;AACzB,2BAAqB,mBAAmB;AACxC,aAAO,4CAAC,0BAAAC,SAAA,EAAkB,cAA4B,UAAoB;AAAA,IAC5E;AAAA,IACA,KAAK,kBAAkB;AACrB,2BAAqB,eAAe;AACpC,aAAO,4CAAC,0BAAc,cAA4B,UAAoB;AAAA,IACxE;AAAA,IACA,KAAK,mBAAmB;AACtB,2BAAqB,gBAAgB;AACrC,aAAO,4CAAC,uBAAAC,SAAA,EAAe,UAAoB;AAAA,IAC7C;AAAA,IACA,KAAK,WAAW;AACd,2BAAqB,SAAS;AAC9B,aAAO,4CAAC,gBAAAC,SAAA,EAAQ,UAAoB;AAAA,IACtC;AAAA,IACA,KAAK,kBAAkB;AACrB,2BAAqB,eAAe;AACpC,aAAO,4CAAC,sBAAAC,SAAA,EAAc,UAAoB;AAAA,IAC5C;AAAA,IACA,KAAK,oBAAoB;AACvB,2BAAqB,iBAAiB;AACtC,aAAO,4CAAC,wBAAAC,SAAA,EAAgB,UAAoB;AAAA,IAC9C;AAAA,IACA,KAAK,uBAAuB;AAC1B,2BAAqB,mBAAmB;AACxC,aAAO,4CAAC,2BAAAC,SAAA,EAAkB,cAA4B,UAAoB;AAAA,IAC5E;AAAA,IACA,SAAS;AACP,iBAAO,4BAAS;AAAA,IAClB;AAAA,EACF;AACF;","names":["MessageCard","SignIn","SignUp","EmailVerification","ForgotPassword","SignOut","OAuthCallback","AccountSettings","MagicLinkCallback"]}
|
|
@@ -2,80 +2,60 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
// src/components/credential-sign-in.tsx
|
|
5
|
-
import {
|
|
5
|
+
import { useForm } from "react-hook-form";
|
|
6
|
+
import { yupResolver } from "@hookform/resolvers/yup";
|
|
7
|
+
import * as yup from "yup";
|
|
6
8
|
import FormWarningText from "./form-warning";
|
|
7
9
|
import PasswordField from "./password-field";
|
|
8
|
-
import { validateEmail } from "../utils/email";
|
|
9
10
|
import { useStackApp } from "..";
|
|
10
11
|
import { Button, Input, Label, Link } from "../components-core";
|
|
11
|
-
import {
|
|
12
|
+
import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises";
|
|
12
13
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
var schema = yup.object().shape({
|
|
15
|
+
email: yup.string().email("Please enter a valid email").required("Please enter your email"),
|
|
16
|
+
password: yup.string().required("Please enter your password")
|
|
17
|
+
});
|
|
13
18
|
function CredentialSignIn() {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const [passwordError, setPasswordError] = useState("");
|
|
19
|
+
const { register, handleSubmit, setError, formState: { errors }, clearErrors } = useForm({
|
|
20
|
+
resolver: yupResolver(schema)
|
|
21
|
+
});
|
|
18
22
|
const app = useStackApp();
|
|
19
|
-
const onSubmit = async () => {
|
|
20
|
-
|
|
21
|
-
setEmailError("Please enter your email");
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
if (!validateEmail(email)) {
|
|
25
|
-
setEmailError("Please enter a valid email");
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
if (!password) {
|
|
29
|
-
setPasswordError("Please enter your password");
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
23
|
+
const onSubmit = async (data) => {
|
|
24
|
+
const { email, password } = data;
|
|
32
25
|
const error = await app.signInWithCredential({ email, password });
|
|
33
|
-
|
|
34
|
-
setPasswordError("Wrong email or password");
|
|
35
|
-
} else if (error) {
|
|
36
|
-
setEmailError(`An error occurred. ${error.message}`);
|
|
37
|
-
}
|
|
26
|
+
setError("email", { type: "manual", message: error?.message });
|
|
38
27
|
};
|
|
39
|
-
return /* @__PURE__ */ jsxs(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
/* @__PURE__ */ jsx(
|
|
71
|
-
Button,
|
|
72
|
-
{
|
|
73
|
-
style: { marginTop: "1.5rem" },
|
|
74
|
-
onClick: onSubmit,
|
|
75
|
-
children: "Sign In"
|
|
76
|
-
}
|
|
77
|
-
)
|
|
78
|
-
] });
|
|
28
|
+
return /* @__PURE__ */ jsxs(
|
|
29
|
+
"form",
|
|
30
|
+
{
|
|
31
|
+
style: { display: "flex", flexDirection: "column", alignItems: "stretch" },
|
|
32
|
+
onSubmit: (e) => runAsynchronously(handleSubmit(onSubmit)(e)),
|
|
33
|
+
noValidate: true,
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "email", children: "Email" }),
|
|
36
|
+
/* @__PURE__ */ jsx(
|
|
37
|
+
Input,
|
|
38
|
+
{
|
|
39
|
+
id: "email",
|
|
40
|
+
type: "email",
|
|
41
|
+
...register("email")
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
/* @__PURE__ */ jsx(FormWarningText, { text: errors.email?.message?.toString() }),
|
|
45
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "password", style: { marginTop: "1rem" }, children: "Password" }),
|
|
46
|
+
/* @__PURE__ */ jsx(
|
|
47
|
+
PasswordField,
|
|
48
|
+
{
|
|
49
|
+
id: "password",
|
|
50
|
+
...register("password")
|
|
51
|
+
}
|
|
52
|
+
),
|
|
53
|
+
/* @__PURE__ */ jsx(FormWarningText, { text: errors.password?.message?.toString() }),
|
|
54
|
+
/* @__PURE__ */ jsx(Link, { href: app.urls.forgotPassword, size: "sm", style: { marginTop: "0.5rem" }, children: "Forgot password?" }),
|
|
55
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", style: { marginTop: "1.5rem" }, children: "Sign In" })
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
);
|
|
79
59
|
}
|
|
80
60
|
export {
|
|
81
61
|
CredentialSignIn as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/credential-sign-in.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/credential-sign-in.tsx"],"sourcesContent":["'use client';\n\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport FormWarningText from \"./form-warning\";\nimport PasswordField from \"./password-field\";\nimport { useStackApp } from \"..\";\nimport { Button, Input, Label, Link } from \"../components-core\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\n\nconst schema = yup.object().shape({\n email: yup.string().email('Please enter a valid email').required('Please enter your email'),\n password: yup.string().required('Please enter your password')\n});\n\nexport default function CredentialSignIn() {\n const { register, handleSubmit, setError, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n const { email, password } = data;\n\n const error = await app.signInWithCredential({ email, password });\n setError('email', { type: 'manual', message: error?.message });\n };\n\n return (\n <form \n style={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }} \n onSubmit={e => runAsynchronously(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"email\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n {...register('email')}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" style={{ marginTop: '1rem' }}>Password</Label>\n <PasswordField\n id=\"password\"\n {...register('password')}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <Link href={app.urls.forgotPassword} size='sm' style={{ marginTop: '0.5rem' }}>\n Forgot password?\n </Link>\n\n <Button type=\"submit\" style={{ marginTop: '1.5rem' }}>\n Sign In\n </Button>\n </form>\n );\n}\n"],"mappings":";;;AAEA,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,YAAY,SAAS;AACrB,OAAO,qBAAqB;AAC5B,OAAO,mBAAmB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,QAAQ,OAAO,OAAO,YAAY;AAC3C,SAAS,yBAAyB;AAqB9B,SAKE,KALF;AAnBJ,IAAM,SAAa,WAAO,EAAE,MAAM;AAAA,EAChC,OAAW,WAAO,EAAE,MAAM,4BAA4B,EAAE,SAAS,yBAAyB;AAAA,EAC1F,UAAc,WAAO,EAAE,SAAS,4BAA4B;AAC9D,CAAC;AAEc,SAAR,mBAAoC;AACzC,QAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,OAAO,GAAG,YAAY,IAAI,QAAQ;AAAA,IACvF,UAAU,YAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,MAAM,YAAY;AAExB,QAAM,WAAW,OAAO,SAAuC;AAC7D,UAAM,EAAE,OAAO,SAAS,IAAI;AAE5B,UAAM,QAAQ,MAAM,IAAI,qBAAqB,EAAE,OAAO,SAAS,CAAC;AAChE,aAAS,SAAS,EAAE,MAAM,UAAU,SAAS,OAAO,QAAQ,CAAC;AAAA,EAC/D;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU;AAAA,MACzE,UAAU,OAAK,kBAAkB,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,MAC1D,YAAU;AAAA,MAEV;AAAA,4BAAC,SAAM,SAAQ,SAAQ,mBAAK;AAAA,QAC5B;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACJ,GAAG,SAAS,OAAO;AAAA;AAAA,QACtB;AAAA,QACA,oBAAC,mBAAgB,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AAAA,QAE1D,oBAAC,SAAM,SAAQ,YAAW,OAAO,EAAE,WAAW,OAAO,GAAG,sBAAQ;AAAA,QAChE;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACF,GAAG,SAAS,UAAU;AAAA;AAAA,QACzB;AAAA,QACA,oBAAC,mBAAgB,MAAM,OAAO,UAAU,SAAS,SAAS,GAAG;AAAA,QAE7D,oBAAC,QAAK,MAAM,IAAI,KAAK,gBAAgB,MAAK,MAAK,OAAO,EAAE,WAAW,SAAS,GAAG,8BAE/E;AAAA,QAEA,oBAAC,UAAO,MAAK,UAAS,OAAO,EAAE,WAAW,SAAS,GAAG,qBAEtD;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|