@stackframe/stack 2.2.2 → 2.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/components/{email-verification.d.ts → EmailVerification.d.ts} +2 -1
  2. package/dist/components/EmailVerification.d.ts.map +1 -0
  3. package/dist/components/{email-verification.js → EmailVerification.js} +2 -2
  4. package/dist/components/ForgotPassword.d.ts +4 -0
  5. package/dist/components/ForgotPassword.d.ts.map +1 -0
  6. package/dist/components/ForgotPassword.js +22 -0
  7. package/dist/components/{oauth-callback.d.ts → OAuthCallback.d.ts} +1 -1
  8. package/dist/components/OAuthCallback.d.ts.map +1 -0
  9. package/dist/components/{oauth-callback.js → OAuthCallback.js} +4 -1
  10. package/dist/components/{password-reset.d.ts → PasswordReset.d.ts} +2 -2
  11. package/dist/components/PasswordReset.d.ts.map +1 -0
  12. package/dist/components/{password-reset.js → PasswordReset.js} +5 -6
  13. package/dist/components/SignIn.d.ts +5 -0
  14. package/dist/components/SignIn.d.ts.map +1 -0
  15. package/dist/components/SignIn.js +20 -0
  16. package/dist/components/SignOut.d.ts +4 -0
  17. package/dist/components/SignOut.d.ts.map +1 -0
  18. package/dist/components/{sign-out.js → SignOut.js} +4 -5
  19. package/dist/components/SignUp.d.ts +5 -0
  20. package/dist/components/SignUp.d.ts.map +1 -0
  21. package/dist/components/SignUp.js +19 -0
  22. package/dist/components/{stack-handler.d.ts → StackHandler.d.ts} +1 -1
  23. package/dist/components/StackHandler.d.ts.map +1 -0
  24. package/dist/components/{stack-handler.js → StackHandler.js} +11 -11
  25. package/dist/components/card-frame.js +2 -2
  26. package/dist/components/user-button.d.ts.map +1 -1
  27. package/dist/components/user-button.js +3 -1
  28. package/dist/components-page/account-settings.js +3 -3
  29. package/dist/elements/Button.d.ts +11 -0
  30. package/dist/elements/Button.d.ts.map +1 -0
  31. package/dist/elements/Button.js +18 -0
  32. package/dist/elements/CardFrame.d.ts +6 -0
  33. package/dist/elements/CardFrame.d.ts.map +1 -0
  34. package/dist/elements/CardFrame.js +10 -0
  35. package/dist/{components/card-header.d.ts → elements/CardHeader.d.ts} +1 -1
  36. package/dist/elements/CardHeader.d.ts.map +1 -0
  37. package/dist/elements/CardHeader.js +4 -0
  38. package/dist/elements/CredentialSignIn.d.ts +4 -0
  39. package/dist/elements/CredentialSignIn.d.ts.map +1 -0
  40. package/dist/elements/CredentialSignIn.js +57 -0
  41. package/dist/elements/CredentialSignUp.d.ts +4 -0
  42. package/dist/elements/CredentialSignUp.d.ts.map +1 -0
  43. package/dist/elements/CredentialSignUp.js +73 -0
  44. package/dist/elements/{divider-with-text.d.ts → DividerWithText.d.ts} +1 -1
  45. package/dist/elements/DividerWithText.d.ts.map +1 -0
  46. package/dist/elements/DividerWithText.js +5 -0
  47. package/dist/elements/{forgot-password.d.ts → ForgotPassword.d.ts} +1 -1
  48. package/dist/elements/ForgotPassword.d.ts.map +1 -0
  49. package/dist/elements/ForgotPassword.js +32 -0
  50. package/dist/elements/{form-warning.d.ts → FormWarning.d.ts} +1 -1
  51. package/dist/elements/FormWarning.d.ts.map +1 -0
  52. package/dist/elements/{form-warning.js → FormWarning.js} +1 -2
  53. package/dist/elements/{message-card.d.ts → MessageCard.d.ts} +1 -1
  54. package/dist/elements/MessageCard.d.ts.map +1 -0
  55. package/dist/elements/MessageCard.js +5 -0
  56. package/dist/elements/OAuthButton.d.ts +6 -0
  57. package/dist/elements/OAuthButton.d.ts.map +1 -0
  58. package/dist/elements/{oauth-button.js → OAuthButton.js} +10 -8
  59. package/dist/elements/OAuthGroup.d.ts +5 -0
  60. package/dist/elements/OAuthGroup.d.ts.map +1 -0
  61. package/dist/elements/OAuthGroup.js +8 -0
  62. package/dist/elements/{password-field.d.ts → PasswordField.d.ts} +1 -1
  63. package/dist/elements/PasswordField.d.ts.map +1 -0
  64. package/dist/elements/PasswordField.js +27 -0
  65. package/dist/elements/{password-reset-inner.d.ts → PasswordResetInner.d.ts} +1 -1
  66. package/dist/elements/PasswordResetInner.d.ts.map +1 -0
  67. package/dist/elements/{password-reset-inner.js → PasswordResetInner.js} +16 -18
  68. package/dist/elements/{redirect-message-card.d.ts → RedirectMessageCard.d.ts} +1 -1
  69. package/dist/elements/RedirectMessageCard.d.ts.map +1 -0
  70. package/dist/elements/{redirect-message-card.js → RedirectMessageCard.js} +5 -4
  71. package/dist/index.d.ts +1 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/lib/hooks.d.ts +13 -5
  74. package/dist/lib/hooks.d.ts.map +1 -1
  75. package/dist/lib/hooks.js +11 -2
  76. package/dist/lib/stack-app.d.ts +16 -9
  77. package/dist/lib/stack-app.d.ts.map +1 -1
  78. package/dist/lib/stack-app.js +57 -14
  79. package/dist/providers/StackProvider.d.ts +7 -0
  80. package/dist/providers/StackProvider.d.ts.map +1 -0
  81. package/dist/providers/StackProvider.js +6 -0
  82. package/dist/providers/StackProviderClient.d.ts +10 -0
  83. package/dist/providers/StackProviderClient.d.ts.map +1 -0
  84. package/dist/providers/StackProviderClient.js +14 -0
  85. package/dist/utils/react.d.ts.map +1 -1
  86. package/dist/utils/results.d.ts.map +1 -1
  87. package/package.json +3 -3
  88. package/dist/components/avatar.d.ts +0 -1
  89. package/dist/components/avatar.d.ts.map +0 -1
  90. package/dist/components/avatar.js +0 -1
  91. package/dist/components/card-header.d.ts.map +0 -1
  92. package/dist/components/card-header.js +0 -5
  93. package/dist/components/centered-card-header.d.ts +0 -6
  94. package/dist/components/centered-card-header.d.ts.map +0 -1
  95. package/dist/components/centered-card-header.js +0 -5
  96. package/dist/components/dashboard-frame.d.ts +0 -23
  97. package/dist/components/dashboard-frame.d.ts.map +0 -1
  98. package/dist/components/dashboard-frame.js +0 -20
  99. package/dist/components/divider-with-text.d.ts +0 -4
  100. package/dist/components/divider-with-text.d.ts.map +0 -1
  101. package/dist/components/divider-with-text.js +0 -6
  102. package/dist/components/email-verification.d.ts.map +0 -1
  103. package/dist/components/logo.d.ts +0 -7
  104. package/dist/components/logo.d.ts.map +0 -1
  105. package/dist/components/logo.js +0 -7
  106. package/dist/components/oauth-callback.d.ts.map +0 -1
  107. package/dist/components/password-reset.d.ts.map +0 -1
  108. package/dist/components/sign-in.d.ts +0 -4
  109. package/dist/components/sign-in.d.ts.map +0 -1
  110. package/dist/components/sign-in.js +0 -20
  111. package/dist/components/sign-out.d.ts +0 -2
  112. package/dist/components/sign-out.d.ts.map +0 -1
  113. package/dist/components/sign-up.d.ts +0 -4
  114. package/dist/components/sign-up.d.ts.map +0 -1
  115. package/dist/components/sign-up.js +0 -20
  116. package/dist/components/stack-handler.d.ts.map +0 -1
  117. package/dist/components-core/collapsble.d.ts +0 -5
  118. package/dist/components-core/collapsble.d.ts.map +0 -1
  119. package/dist/components-core/collapsble.js +0 -6
  120. package/dist/components-core/divider.d.ts +0 -5
  121. package/dist/components-core/divider.d.ts.map +0 -1
  122. package/dist/components-core/divider.js +0 -20
  123. package/dist/components-core-joy/card.d.ts +0 -3
  124. package/dist/components-core-joy/card.d.ts.map +0 -1
  125. package/dist/components-core-joy/card.js +0 -7
  126. package/dist/components-core-joy/divider.d.ts +0 -3
  127. package/dist/components-core-joy/divider.d.ts.map +0 -1
  128. package/dist/components-core-joy/divider.js +0 -7
  129. package/dist/elements/card-frame.d.ts +0 -7
  130. package/dist/elements/card-frame.d.ts.map +0 -1
  131. package/dist/elements/card-frame.js +0 -24
  132. package/dist/elements/card-header.d.ts +0 -6
  133. package/dist/elements/card-header.d.ts.map +0 -1
  134. package/dist/elements/card-header.js +0 -5
  135. package/dist/elements/credential-sign-in.d.ts +0 -2
  136. package/dist/elements/credential-sign-in.d.ts.map +0 -1
  137. package/dist/elements/credential-sign-in.js +0 -56
  138. package/dist/elements/credential-sign-up.d.ts +0 -2
  139. package/dist/elements/credential-sign-up.d.ts.map +0 -1
  140. package/dist/elements/credential-sign-up.js +0 -73
  141. package/dist/elements/divider-with-text.d.ts.map +0 -1
  142. package/dist/elements/divider-with-text.js +0 -6
  143. package/dist/elements/forgot-password.d.ts.map +0 -1
  144. package/dist/elements/forgot-password.js +0 -32
  145. package/dist/elements/form-warning.d.ts.map +0 -1
  146. package/dist/elements/message-card.d.ts.map +0 -1
  147. package/dist/elements/message-card.js +0 -7
  148. package/dist/elements/oauth-button.d.ts +0 -5
  149. package/dist/elements/oauth-button.d.ts.map +0 -1
  150. package/dist/elements/oauth-group.d.ts +0 -4
  151. package/dist/elements/oauth-group.d.ts.map +0 -1
  152. package/dist/elements/oauth-group.js +0 -8
  153. package/dist/elements/password-field.d.ts.map +0 -1
  154. package/dist/elements/password-field.js +0 -38
  155. package/dist/elements/password-reset-inner.d.ts.map +0 -1
  156. package/dist/elements/redirect-message-card.d.ts.map +0 -1
  157. package/dist/icons/logo.d.ts +0 -3
  158. package/dist/icons/logo.d.ts.map +0 -1
  159. package/dist/icons/logo.js +0 -7
  160. package/dist/providers/ui-provider.d.ts +0 -10
  161. package/dist/providers/ui-provider.js +0 -20
@@ -1,5 +1,6 @@
1
1
  export default function EmailVerification({ searchParams: { code, }, fullPage, }: {
2
2
  searchParams?: Record<string, string>;
3
3
  fullPage?: boolean;
4
+ redirectUrl?: string;
4
5
  }): import("react/jsx-runtime").JSX.Element | null;
5
- //# sourceMappingURL=email-verification.d.ts.map
6
+ //# sourceMappingURL=EmailVerification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailVerification.d.ts","sourceRoot":"","sources":["../../src/components/EmailVerification.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,YAAY,EAAE,EACZ,IAAS,GACL,EACN,QAAgB,GACjB,EAAE;IACD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,kDAkCA"}
@@ -2,8 +2,8 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { use } from "react";
4
4
  import { useStackApp } from "..";
5
- import MessageCard from "../elements/message-card";
6
- import RedirectMessageCard from "../elements/redirect-message-card";
5
+ import MessageCard from "../elements/MessageCard";
6
+ import RedirectMessageCard from "../elements/RedirectMessageCard";
7
7
  import { EmailVerificationLinkExpiredErrorCode, EmailVerificationLinkInvalidErrorCode, EmailVerificationLinkUsedErrorCode } from "@stackframe/stack-shared/dist/utils/types";
8
8
  export default function EmailVerification({ searchParams: { code = "", } = {}, fullPage = false, }) {
9
9
  const stackApp = useStackApp();
@@ -0,0 +1,4 @@
1
+ export default function ForgotPassword({ fullPage }: {
2
+ fullPage?: boolean;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=ForgotPassword.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForgotPassword.d.ts","sourceRoot":"","sources":["../../src/components/ForgotPassword.tsx"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,QAAc,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,2CA0BhF"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import ForgotPasswordElement from "../elements/ForgotPassword";
4
+ import CardFrame from "../elements/CardFrame";
5
+ import CardHeader from "../elements/CardHeader";
6
+ import { useUser, useStackApp } from "..";
7
+ import RedirectMessageCard from "../elements/RedirectMessageCard";
8
+ import NextLink from 'next/link';
9
+ import { useState } from "react";
10
+ export default function ForgotPassword({ fullPage = false }) {
11
+ const stackApp = useStackApp();
12
+ const user = useUser();
13
+ const [sent, setSent] = useState(false);
14
+ if (user) {
15
+ return _jsx(RedirectMessageCard, { type: 'signedIn', fullPage: fullPage });
16
+ }
17
+ if (sent) {
18
+ return _jsx(RedirectMessageCard, { type: 'emailSent', fullPage: fullPage });
19
+ }
20
+ return (_jsxs(CardFrame, { fullPage: fullPage, children: [_jsx(CardHeader, { title: "Reset Your Password", children: _jsxs("p", { children: ["Don't need to reset? ", _jsx(NextLink, { href: stackApp.urls['signUp'], passHref: true, className: "wl_text-blue-500", children: "Sign In" })] }) }), _jsx(ForgotPasswordElement, { onSent: () => setSent(true) })] }));
21
+ }
22
+ ;
@@ -1,2 +1,2 @@
1
1
  export default function OAuthCallback(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=oauth-callback.d.ts.map
2
+ //# sourceMappingURL=OAuthCallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthCallback.d.ts","sourceRoot":"","sources":["../../src/components/OAuthCallback.tsx"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,aAAa,4CAapC"}
@@ -3,15 +3,18 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useRef, useEffect } from "react";
4
4
  import { useStackApp } from "..";
5
5
  import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises";
6
- import MessageCard from "../elements/message-card";
6
+ import MessageCard from "../elements/MessageCard";
7
+ import { useRouter } from "next/navigation";
7
8
  export default function OAuthCallback() {
8
9
  const app = useStackApp();
10
+ const router = useRouter();
9
11
  const called = useRef(false);
10
12
  useEffect(() => runAsynchronously(async () => {
11
13
  if (called.current)
12
14
  return;
13
15
  called.current = true;
14
16
  await app.callOAuthCallback();
17
+ router.push(app.urls.userHome);
15
18
  }), []);
16
19
  return _jsx(MessageCard, { title: 'Redirecting...', fullPage: true });
17
20
  }
@@ -1,5 +1,5 @@
1
1
  export default function PasswordReset({ searchParams, fullPage, }: {
2
2
  searchParams?: Record<string, string>;
3
3
  fullPage?: boolean;
4
- }): import("react/jsx-runtime").JSX.Element;
5
- //# sourceMappingURL=password-reset.d.ts.map
4
+ }): import("react/jsx-runtime").JSX.Element | undefined;
5
+ //# sourceMappingURL=PasswordReset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordReset.d.ts","sourceRoot":"","sources":["../../src/components/PasswordReset.tsx"],"names":[],"mappings":"AAaA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,YAAY,EACZ,QAAgB,GACjB,EAAE;IACD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,uDA0CA"}
@@ -1,20 +1,19 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import MessageCard from "../elements/message-card";
3
+ import MessageCard from "../elements/MessageCard";
4
4
  import { useStackApp } from "..";
5
5
  import { use } from "react";
6
- import PasswordResetInner from "../elements/password-reset-inner";
6
+ import PasswordResetInner from "../elements/PasswordResetInner";
7
7
  import { PasswordResetLinkExpiredErrorCode, PasswordResetLinkInvalidErrorCode, PasswordResetLinkUsedErrorCode } from "@stackframe/stack-shared/dist/utils/types";
8
8
  import { cacheFunction } from "@stackframe/stack-shared/dist/utils/caches";
9
- import { Text } from "@stackframe/stack-ui";
10
9
  const cachedVerifyPasswordResetCode = cacheFunction(async (stackApp, code) => {
11
10
  return await stackApp.verifyPasswordResetCode(code);
12
11
  });
13
12
  export default function PasswordReset({ searchParams, fullPage = false, }) {
14
13
  const stackApp = useStackApp();
15
- const invalidJsx = (_jsx(MessageCard, { title: "Invalid Password Reset Link", fullPage: fullPage, children: _jsx(Text, { children: "Please double check if you have the correct password reset link." }) }));
16
- const expiredJsx = (_jsx(MessageCard, { title: "Expired Password Reset Link", fullPage: fullPage, children: _jsx(Text, { children: "Your password reset link has expired. Please request a new password reset link from the login page." }) }));
17
- const usedJsx = (_jsx(MessageCard, { title: "Used Password Reset Link", fullPage: fullPage, children: _jsx(Text, { children: "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." }) }));
14
+ const invalidJsx = (_jsx(MessageCard, { title: "Invalid Password Reset Link", fullPage: fullPage, children: _jsx("p", { children: "Please check if you have the correct password reset link. If you continue to have issues, please contact support." }) }));
15
+ const expiredJsx = (_jsx(MessageCard, { title: "Expired Password Reset Link", fullPage: fullPage, children: _jsx("p", { children: "Your password reset link has expired. Please request a new password reset link from the login page." }) }));
16
+ const usedJsx = (_jsx(MessageCard, { title: "Used Password Reset Link", fullPage: fullPage, children: _jsx("p", { children: "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." }) }));
18
17
  const code = searchParams?.code;
19
18
  if (!code) {
20
19
  return invalidJsx;
@@ -0,0 +1,5 @@
1
+ export default function SignIn({ redirectUrl, fullPage }: {
2
+ redirectUrl?: string;
3
+ fullPage?: boolean;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=SignIn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignIn.d.ts","sourceRoot":"","sources":["../../src/components/SignIn.tsx"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,WAAW,EAAE,QAAc,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,2CA2B3G"}
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import NextLink from 'next/link';
4
+ import CredentialSignIn from '../elements/CredentialSignIn';
5
+ import DividerWithText from '../elements/DividerWithText';
6
+ import OAuthGroup from '../elements/OAuthGroup';
7
+ import CardFrame from '../elements/CardFrame';
8
+ import CardHeader from '../elements/CardHeader';
9
+ import { useUser, useStackApp } from '..';
10
+ import RedirectMessageCard from '../elements/RedirectMessageCard';
11
+ export default function SignIn({ redirectUrl, fullPage = false }) {
12
+ const stackApp = useStackApp();
13
+ const user = useUser();
14
+ const project = stackApp.useProject();
15
+ if (user) {
16
+ return _jsx(RedirectMessageCard, { type: 'signedIn', fullPage: fullPage });
17
+ }
18
+ return (_jsxs(CardFrame, { fullPage: fullPage, children: [_jsx(CardHeader, { title: "Sign In to Your Account", children: _jsxs("p", { children: ["Don't have an account? ", _jsx(NextLink, { href: stackApp.urls['signUp'], passHref: true, className: "wl_text-blue-500", children: "Sign up" })] }) }), _jsx(OAuthGroup, { type: 'signin', redirectUrl: redirectUrl }), project.credentialEnabled &&
19
+ _jsxs(_Fragment, { children: [_jsx(DividerWithText, { text: 'OR' }), _jsx(CredentialSignIn, { redirectUrl: redirectUrl })] })] }));
20
+ }
@@ -0,0 +1,4 @@
1
+ export default function Signout({ redirectUrl }: {
2
+ redirectUrl?: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=SignOut.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignOut.d.ts","sourceRoot":"","sources":["../../src/components/SignOut.tsx"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,2CAQxE"}
@@ -1,13 +1,12 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { use } from "react";
4
- import { useStackApp, useUser } from "..";
5
- import GoHomeMessageCard from "../elements/redirect-message-card";
6
- export default function Signout() {
4
+ import { useUser } from "..";
5
+ import GoHomeMessageCard from "../elements/RedirectMessageCard";
6
+ export default function Signout({ redirectUrl }) {
7
7
  const user = useUser();
8
- const app = useStackApp();
9
8
  if (user) {
10
- use(user.signOut());
9
+ use(user.signOut(redirectUrl));
11
10
  }
12
11
  return _jsx(GoHomeMessageCard, { type: 'signedOut', fullPage: true });
13
12
  }
@@ -0,0 +1,5 @@
1
+ export default function SignUp({ redirectUrl, fullPage }: {
2
+ redirectUrl?: string;
3
+ fullPage?: boolean;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=SignUp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignUp.d.ts","sourceRoot":"","sources":["../../src/components/SignUp.tsx"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,WAAW,EAAE,QAAc,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,2CA0B3G"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import NextLink from 'next/link';
4
+ import DividerWithText from '../elements/DividerWithText';
5
+ import OAuthGroup from '../elements/OAuthGroup';
6
+ import CardFrame from '../elements/CardFrame';
7
+ import CredentialSignUp from '../elements/CredentialSignUp';
8
+ import CardHeader from '../elements/CardHeader';
9
+ import { useUser, useStackApp } from '..';
10
+ import RedirectMessageCard from '../elements/RedirectMessageCard';
11
+ export default function SignUp({ redirectUrl, fullPage = false }) {
12
+ const stackApp = useStackApp();
13
+ const user = useUser();
14
+ const project = stackApp.useProject();
15
+ if (user) {
16
+ return _jsx(RedirectMessageCard, { type: 'signedIn', fullPage: fullPage });
17
+ }
18
+ return (_jsxs(CardFrame, { fullPage: fullPage, children: [_jsx(CardHeader, { title: "Create a New Account", children: _jsxs("p", { children: ["Already have an account? ", _jsx(NextLink, { href: stackApp.urls['signIn'], passHref: true, className: "wl_text-blue-500", children: "Sign in" })] }) }), _jsx(OAuthGroup, { type: 'signup', redirectUrl: redirectUrl }), project.credentialEnabled && _jsxs(_Fragment, { children: [_jsx(DividerWithText, { text: 'OR' }), _jsx(CredentialSignUp, { redirectUrl: redirectUrl })] })] }));
19
+ }
@@ -6,4 +6,4 @@ export default function StackHandler<HasTokenStore extends boolean>({ app, param
6
6
  };
7
7
  searchParams?: Record<string, string>;
8
8
  }): Promise<import("react/jsx-runtime").JSX.Element>;
9
- //# sourceMappingURL=stack-handler.d.ts.map
9
+ //# sourceMappingURL=StackHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackHandler.d.ts","sourceRoot":"","sources":["../../src/components/StackHandler.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAiB,cAAc,EAAE,MAAM,IAAI,CAAC;AAOnD,wBAA8B,YAAY,CAAC,aAAa,SAAS,OAAO,EAAE,EACxE,GAAG,EACH,MAAM,EAAE,EAAE,KAAK,EAAO,EACtB,YAAiB,GAClB,EAAE;IACD,GAAG,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,oDAuDA"}
@@ -1,13 +1,13 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import SignUp from "./sign-up";
3
- import SignIn from "./sign-in";
2
+ import SignUp from "./SignUp";
3
+ import SignIn from "./SignIn";
4
4
  import { RedirectType, notFound, redirect } from 'next/navigation';
5
- import EmailVerification from "./email-verification";
5
+ import EmailVerification from "./EmailVerification";
6
6
  import { PasswordReset } from "..";
7
- import MessageCard from "../elements/message-card";
8
- import Signout from "./sign-out";
9
- import ForgotPassword from "./forgot-password";
10
- import OAuthCallback from "./oauth-callback";
7
+ import MessageCard from "../elements/MessageCard";
8
+ import Signout from "./SignOut";
9
+ import ForgotPassword from "./ForgotPassword";
10
+ import OAuthCallback from "./OAuthCallback";
11
11
  export default async function StackHandler({ app, params: { stack } = {}, searchParams = {}, }) {
12
12
  if (!stack) {
13
13
  return (_jsx(MessageCard, { title: "Invalid Stack Handler Setup", fullPage: true, children: _jsx("p", { children: "Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack]." }) }));
@@ -25,15 +25,15 @@ export default async function StackHandler({ app, params: { stack } = {}, search
25
25
  switch (path) {
26
26
  case 'signin': {
27
27
  redirectIfNotHandler('signIn');
28
- return _jsx(SignIn, { fullPage: true });
28
+ return _jsx(SignIn, { fullPage: true, redirectUrl: app.urls.userHome });
29
29
  }
30
30
  case 'signup': {
31
31
  redirectIfNotHandler('signUp');
32
- return _jsx(SignUp, { fullPage: true });
32
+ return _jsx(SignUp, { fullPage: true, redirectUrl: app.urls.userHome });
33
33
  }
34
34
  case 'email-verification': {
35
35
  redirectIfNotHandler('emailVerification');
36
- return _jsx(EmailVerification, { searchParams: searchParams, fullPage: true });
36
+ return _jsx(EmailVerification, { searchParams: searchParams, fullPage: true, redirectUrl: app.urls.signIn });
37
37
  }
38
38
  case 'password-reset': {
39
39
  redirectIfNotHandler('passwordReset');
@@ -45,7 +45,7 @@ export default async function StackHandler({ app, params: { stack } = {}, search
45
45
  }
46
46
  case 'signout': {
47
47
  redirectIfNotHandler('signOut');
48
- return _jsx(Signout, {});
48
+ return _jsx(Signout, { redirectUrl: app.urls.home });
49
49
  }
50
50
  case 'oauth-callback': {
51
51
  redirectIfNotHandler('oauthCallback');
@@ -15,8 +15,8 @@ export default function CardFrame({ children, fullPage = true }) {
15
15
  height: hasNoParent ? '100vh' : '100%',
16
16
  display: 'flex',
17
17
  alignItems: 'center',
18
- justifyContent: 'center'
19
- }, children: _jsx(Container, { size: 350, children: children }) }));
18
+ justifyContent: 'center',
19
+ }, children: _jsx(Container, { size: 380, style: { padding: '1rem 1rem' }, children: children }) }));
20
20
  }
21
21
  else {
22
22
  return children;
@@ -1 +1 @@
1
- {"version":3,"file":"user-button.d.ts","sourceRoot":"","sources":["../../src/components/user-button.tsx"],"names":[],"mappings":"AAoBA,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,YAAoB,EACpB,aAAoB,GACrB,EAAE;IACD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,kDAyDA"}
1
+ {"version":3,"file":"user-button.d.ts","sourceRoot":"","sources":["../../src/components/user-button.tsx"],"names":[],"mappings":"AAqBA,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,YAAoB,EACpB,aAAoB,GACrB,EAAE;IACD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,kDA0DA"}
@@ -5,6 +5,7 @@ import { RxPerson, RxEnter, RxSun, RxShadow } from "react-icons/rx";
5
5
  import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises";
6
6
  import { SECONDARY_FONT_COLORS } from "../utils/constants";
7
7
  import UserAvatar from "./user-avatar";
8
+ import { useRouter } from "next/navigation";
8
9
  function Item(props) {
9
10
  return (_jsxs(DropdownMenuItem, { onClick: () => runAsynchronously(props.onClick), style: { display: 'flex', gap: '0.5rem', alignItems: 'center' }, children: [props.icon, _jsx(Text, { children: props.text })] }));
10
11
  }
@@ -12,6 +13,7 @@ export default function UserButton({ showUserInfo = false, showColorMode = true,
12
13
  const { colorMode, setColorMode } = useDesign();
13
14
  const user = useUser();
14
15
  const app = useStackApp();
16
+ const router = useRouter();
15
17
  const textStyles = {
16
18
  textOverflow: 'ellipsis',
17
19
  whiteSpace: 'nowrap',
@@ -19,7 +21,7 @@ export default function UserButton({ showUserInfo = false, showColorMode = true,
19
21
  };
20
22
  if (!user)
21
23
  return null;
22
- return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { children: _jsxs("div", { style: { display: 'flex', gap: '0.5rem', alignItems: 'center' }, children: [_jsx(UserAvatar, {}), showUserInfo && _jsxs("div", { style: { display: 'flex', flexDirection: 'column', justifyContent: 'center' }, children: [_jsx(Text, { style: textStyles, children: user.displayName }), _jsx(Text, { style: { ...textStyles, fontWeight: 400 }, variant: "secondary", size: "sm", children: user.primaryEmail })] })] }) }), _jsxs(DropdownMenuContent, { children: [_jsx(DropdownMenuLabel, { children: _jsxs("div", { style: { display: 'flex', gap: '0.5rem', alignItems: 'center' }, children: [_jsx(UserAvatar, {}), _jsxs("div", { children: [_jsx(Text, { children: user.displayName }), _jsx(Text, { variant: "secondary", size: "sm", style: { fontWeight: 400 }, children: user.primaryEmail })] })] }) }), _jsx(DropdownMenuSeparator, {}), _jsx(Item, { text: "Account settings", onClick: () => app.redirectToAccountSettings(), icon: _jsx(RxPerson, { size: 22, color: SECONDARY_FONT_COLORS[colorMode] }) }), showColorMode && _jsx(Item, { text: colorMode === 'dark' ? 'Light theme' : 'Dark theme', onClick: () => setColorMode(colorMode === 'dark' ? 'light' : 'dark'), icon: colorMode === 'dark' ?
24
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { children: _jsxs("div", { style: { display: 'flex', gap: '0.5rem', alignItems: 'center' }, children: [_jsx(UserAvatar, {}), showUserInfo && _jsxs("div", { style: { display: 'flex', flexDirection: 'column', justifyContent: 'center' }, children: [_jsx(Text, { style: textStyles, children: user.displayName }), _jsx(Text, { style: { ...textStyles, fontWeight: 400 }, variant: "secondary", size: "sm", children: user.primaryEmail })] })] }) }), _jsxs(DropdownMenuContent, { style: { zIndex: 1500 }, children: [_jsx(DropdownMenuLabel, { children: _jsxs("div", { style: { display: 'flex', gap: '0.5rem', alignItems: 'center' }, children: [_jsx(UserAvatar, {}), _jsxs("div", { children: [_jsx(Text, { children: user.displayName }), _jsx(Text, { variant: "secondary", size: "sm", style: { fontWeight: 400 }, children: user.primaryEmail })] })] }) }), _jsx(DropdownMenuSeparator, {}), _jsx(Item, { text: "Account settings", onClick: () => runAsynchronously(router.push(app.urls.accountSettings)), icon: _jsx(RxPerson, { size: 22, color: SECONDARY_FONT_COLORS[colorMode] }) }), showColorMode && _jsx(Item, { text: colorMode === 'dark' ? 'Light theme' : 'Dark theme', onClick: () => setColorMode(colorMode === 'dark' ? 'light' : 'dark'), icon: colorMode === 'dark' ?
23
25
  _jsx(RxSun, { size: 22, color: SECONDARY_FONT_COLORS[colorMode] }) :
24
26
  _jsx(RxShadow, { size: 22, color: SECONDARY_FONT_COLORS[colorMode] }) }), _jsx(Item, { text: "Sign out", onClick: () => user.signOut(), icon: _jsx(RxEnter, { size: 22, color: SECONDARY_FONT_COLORS[colorMode] }) })] })] }));
25
27
  }
@@ -25,7 +25,7 @@ function ProfileSection() {
25
25
  function EmailVerificationSection() {
26
26
  const user = useUser();
27
27
  const [emailSent, setEmailSent] = useState(false);
28
- return (_jsx(SettingSection, { title: 'Email Verification', desc: 'We want to make sure that you own the email address', buttonDisabled: emailSent, buttonText: !user?.primaryEmailVerified ?
28
+ return (_jsx(SettingSection, { title: 'Email Verification', desc: 'We want to make sure that you own the email address.', buttonDisabled: emailSent, buttonText: !user?.primaryEmailVerified ?
29
29
  emailSent ?
30
30
  'Email sent!' :
31
31
  'Send Email'
@@ -45,7 +45,7 @@ function PasswordSection() {
45
45
  if (user?.authMethod !== 'credential') {
46
46
  return null;
47
47
  }
48
- return (_jsxs(SettingSection, { title: 'Password', desc: 'Change your password', buttonDisabled: !oldPassword || !newPassword, buttonText: 'Save', onButtonClick: async () => {
48
+ return (_jsxs(SettingSection, { title: 'Password', desc: 'Change your password here.', buttonDisabled: !oldPassword || !newPassword, buttonText: 'Save', onButtonClick: async () => {
49
49
  if (oldPassword && newPassword) {
50
50
  const errorMessage = getPasswordError(newPassword);
51
51
  if (errorMessage) {
@@ -78,7 +78,7 @@ function PasswordSection() {
78
78
  }
79
79
  function SignOutSection() {
80
80
  const user = useUser();
81
- return (_jsx(SettingSection, { title: 'Sign out', desc: 'Sign out of your account on this device', buttonVariant: 'secondary', buttonText: 'Sign Out', onButtonClick: () => user?.signOut() }));
81
+ return (_jsx(SettingSection, { title: 'Sign out', desc: 'Sign out of your account on this device.', buttonVariant: 'secondary', buttonText: 'Sign Out', onButtonClick: () => user?.signOut() }));
82
82
  }
83
83
  export default function AccountSettings({ fullPage = false }) {
84
84
  const user = useUser();
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ export default function Button(props: {
3
+ children: React.ReactNode;
4
+ style?: any;
5
+ className?: string;
6
+ onClick?: () => void;
7
+ loading?: boolean;
8
+ leftIcon?: React.ReactNode;
9
+ rightIcon?: React.ReactNode;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/elements/Button.tsx"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,2CAgCA"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export default function Button(props) {
3
+ let leftIconJsx;
4
+ if (props.leftIcon) {
5
+ leftIconJsx = _jsx("div", { children: props.leftIcon });
6
+ }
7
+ else if (props.rightIcon) {
8
+ leftIconJsx = _jsx("div", { className: "wl_invisible", children: props.rightIcon });
9
+ }
10
+ let rightIconJsx;
11
+ if (props.rightIcon) {
12
+ rightIconJsx = _jsx("div", { children: props.rightIcon });
13
+ }
14
+ else if (props.leftIcon) {
15
+ rightIconJsx = _jsx("div", { className: "wl_invisible", children: props.leftIcon });
16
+ }
17
+ return (_jsxs("button", { className: "wl_btn wl_items-center " + (props.className || ""), style: props.style, onClick: props.onClick, disabled: props.loading, children: [leftIconJsx, _jsxs("div", { className: "wl_flex-grow wl_flex wl_items-center wl_justify-center", children: [_jsx("span", { className: `wl_loading wl_loading-spinner wl_mr-2 ${props.loading ? "" : "wl_invisible"}` }), props.children, _jsx("span", { className: "wl_loading wl_loading-spinner wl_ml-2 wl_invisible" })] }), rightIconJsx] }));
18
+ }
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ export default function CardFrame({ children, fullPage }: {
3
+ children: React.ReactNode;
4
+ fullPage?: boolean;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=CardFrame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardFrame.d.ts","sourceRoot":"","sources":["../../src/elements/CardFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,QAAQ,EACR,QAAa,EACd,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,2CAkBA"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export default function CardFrame({ children, fullPage = true }) {
3
+ const inner = (_jsx("div", { className: "stack-scope wl_container wl_mx-auto wl_max-w-md wl_font-sans", children: _jsx("div", { className: `wl_py-8 wl_px-4 wl_bg-transparent wl_rounded-xl sm:wl_px-10 sm:wl_bg-base-200 sm:wl_shadow-xl`, children: children }) }));
4
+ if (fullPage) {
5
+ return (_jsx("div", { className: "wl_min-h-screen wl_flex wl_items-center wl_justify-center", children: inner }));
6
+ }
7
+ else {
8
+ return inner;
9
+ }
10
+ }
@@ -3,4 +3,4 @@ export default function CardHeader({ children, title }: {
3
3
  children?: React.ReactNode;
4
4
  title: string;
5
5
  }): import("react/jsx-runtime").JSX.Element;
6
- //# sourceMappingURL=card-header.d.ts.map
6
+ //# sourceMappingURL=CardHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardHeader.d.ts","sourceRoot":"","sources":["../../src/elements/CardHeader.tsx"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,EAAE,QAAQ,EAAE,KAAK,EAAE,EACnB;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,2CAQ9C"}
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export default function CardHeader({ children, title }) {
3
+ return (_jsxs("div", { className: "wl_text-center wl_mb-6 wl_space-y-2 md:wl_space-y-3", children: [_jsx("h2", { className: "wl_text-2xl", children: title }), children] }));
4
+ }
@@ -0,0 +1,4 @@
1
+ export default function CredentialSignIn({ redirectUrl }: {
2
+ redirectUrl?: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=CredentialSignIn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialSignIn.d.ts","sourceRoot":"","sources":["../../src/elements/CredentialSignIn.tsx"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,2CAkGjF"}
@@ -0,0 +1,57 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { FormWarningText } from "./FormWarning";
4
+ import { PasswordField } from "./PasswordField";
5
+ import { validateEmail } from "../utils/email";
6
+ import NextLink from "next/link";
7
+ import { useStackApp } from "..";
8
+ import Button from "./Button";
9
+ import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises";
10
+ import { EmailPasswordMissMatchErrorCode, UserNotExistErrorCode } from "@stackframe/stack-shared/dist/utils/types";
11
+ // Import or define the PasswordField, FormWarningText, and validateEmail utilities if they're custom components or functions.
12
+ export default function CredentialSignIn({ redirectUrl }) {
13
+ const [email, setEmail] = useState('');
14
+ const [emailError, setEmailError] = useState('');
15
+ const [password, setPassword] = useState('');
16
+ const [passwordError, setPasswordError] = useState('');
17
+ const [loading, setLoading] = useState(false);
18
+ const stackApp = useStackApp();
19
+ const onSubmit = async () => {
20
+ if (!email) {
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
+ }
32
+ setLoading(true);
33
+ const errorCode = await stackApp.signInWithCredential({ email, password, redirectUrl });
34
+ setLoading(false);
35
+ switch (errorCode) {
36
+ case UserNotExistErrorCode: {
37
+ setEmailError('User does not exist');
38
+ break;
39
+ }
40
+ case EmailPasswordMissMatchErrorCode: {
41
+ setPasswordError('Wrong email or password');
42
+ break;
43
+ }
44
+ case undefined: {
45
+ // success
46
+ break;
47
+ }
48
+ }
49
+ };
50
+ return (_jsxs("div", { className: "wl_flex wl_flex-col wl_space-y-2 wl_items-stretch", children: [_jsxs("div", { className: "wl_form-control", children: [_jsx("label", { className: "wl_label", htmlFor: "email", children: _jsx("span", { className: "wl_label-text", children: "Email" }) }), _jsx("input", { id: "email", type: "email", name: "email", className: "wl_input wl_input-bordered", value: email, onChange: (e) => {
51
+ setEmail(e.target.value);
52
+ setEmailError('');
53
+ } }), _jsx(FormWarningText, { text: emailError })] }), _jsxs("div", { className: "wl_form-control", children: [_jsx("label", { className: "wl_label", htmlFor: "password", children: _jsx("span", { className: "wl_label-text", children: "Password" }) }), _jsx(PasswordField, { id: "password", name: "password", value: password, onChange: (e) => {
54
+ setPassword(e.target.value);
55
+ setPasswordError('');
56
+ } }), _jsx(FormWarningText, { text: passwordError })] }), _jsx("div", { className: "wl_flex wl_items-center wl_justify-between", children: _jsx(NextLink, { href: stackApp.urls.forgotPassword, className: "wl_text-sm wl_text-blue-500 wl_no-underline wl_hover:wl_underline", children: "Forgot password?" }) }), _jsx("div", { className: "wl_flex wl_flex-col wl_items-stretch", children: _jsx(Button, { className: "wl_btn-primary wl_mt-6", onClick: () => runAsynchronously(onSubmit), loading: loading, children: "Sign In" }) })] }));
57
+ }
@@ -0,0 +1,4 @@
1
+ export default function CredentialSignUp({ redirectUrl }: {
2
+ redirectUrl?: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=CredentialSignUp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialSignUp.d.ts","sourceRoot":"","sources":["../../src/elements/CredentialSignUp.tsx"],"names":[],"mappings":"AAYA,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,2CAuHjF"}
@@ -0,0 +1,73 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { PasswordField } from "./PasswordField";
5
+ import { FormWarningText } from "./FormWarning";
6
+ import { validateEmail } from "../utils/email";
7
+ import { getPasswordError } from "@stackframe/stack-shared/dist/helpers/password";
8
+ import { useStackApp } from "..";
9
+ import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises";
10
+ import Button from "./Button";
11
+ import { UserAlreadyExistErrorCode } from "@stackframe/stack-shared/dist/utils/types";
12
+ export default function CredentialSignUp({ redirectUrl }) {
13
+ const [email, setEmail] = useState('');
14
+ const [emailError, setEmailError] = useState('');
15
+ const [password, setPassword] = useState('');
16
+ const [passwordError, setPasswordError] = useState('');
17
+ const [passwordRepeat, setPasswordRepeat] = useState('');
18
+ const [passwordRepeatError, setPasswordRepeatError] = useState('');
19
+ const [loading, setLoading] = useState(false);
20
+ const stackApp = useStackApp();
21
+ const onSubmit = async () => {
22
+ if (!email) {
23
+ setEmailError('Please enter your email');
24
+ return;
25
+ }
26
+ if (!validateEmail(email)) {
27
+ setEmailError('Please enter a valid email');
28
+ return;
29
+ }
30
+ if (!password) {
31
+ setPasswordError('Please enter your password');
32
+ return;
33
+ }
34
+ if (!passwordRepeat) {
35
+ setPasswordRepeatError('Please repeat your password');
36
+ return;
37
+ }
38
+ if (password !== passwordRepeat) {
39
+ setPasswordRepeatError('Passwords do not match');
40
+ return;
41
+ }
42
+ const errorMessage = getPasswordError(password);
43
+ if (errorMessage) {
44
+ setPasswordError(errorMessage);
45
+ return;
46
+ }
47
+ setLoading(true);
48
+ const errorCode = await stackApp.signUpWithCredential({ email, password, redirectUrl });
49
+ setLoading(false);
50
+ switch (errorCode) {
51
+ case UserAlreadyExistErrorCode: {
52
+ setEmailError('User already exists');
53
+ break;
54
+ }
55
+ case undefined: {
56
+ // success
57
+ break;
58
+ }
59
+ }
60
+ };
61
+ return (_jsxs("div", { className: "wl_flex wl_flex-col wl_space-y-2 wl_items-stretch", children: [_jsxs("div", { className: "wl_form-control", children: [_jsx("label", { className: "wl_label", htmlFor: "email", children: "Email" }), _jsx("input", { className: "wl_input wl_input-bordered", id: "email", type: "email", name: "email", value: email, onChange: (e) => {
62
+ setEmail(e.target.value);
63
+ setEmailError('');
64
+ } }), _jsx(FormWarningText, { text: emailError })] }), _jsxs("div", { className: "wl_form-control", children: [_jsx("label", { className: "wl_label", htmlFor: "password", children: "Password" }), _jsx(PasswordField, { id: "password", name: "password", value: password, onChange: (e) => {
65
+ setPassword(e.target.value);
66
+ setPasswordError('');
67
+ setPasswordRepeatError('');
68
+ } }), _jsx(FormWarningText, { text: passwordError })] }), _jsxs("div", { className: "wl_form-control", children: [_jsx("label", { className: "wl_label", htmlFor: "repeat-password", children: "Repeat Password" }), _jsx(PasswordField, { id: "repeat-password", name: "repeat-password", value: passwordRepeat, onChange: (e) => {
69
+ setPasswordRepeat(e.target.value);
70
+ setPasswordError('');
71
+ setPasswordRepeatError('');
72
+ } }), _jsx(FormWarningText, { text: passwordRepeatError })] }), _jsx("div", { className: "wl_flex wl_flex-col wl_items-stretch", children: _jsx(Button, { className: "wl_btn-primary wl_mt-6", onClick: () => runAsynchronously(onSubmit), loading: loading, children: "Sign Up" }) })] }));
73
+ }
@@ -1,4 +1,4 @@
1
1
  export default function DividerWithText({ text }: {
2
2
  text: string;
3
3
  }): import("react/jsx-runtime").JSX.Element;
4
- //# sourceMappingURL=divider-with-text.d.ts.map
4
+ //# sourceMappingURL=DividerWithText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DividerWithText.d.ts","sourceRoot":"","sources":["../../src/elements/DividerWithText.tsx"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,2CASjE"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export default function DividerWithText({ text }) {
3
+ const lineStyle = "wl_flex-grow wl_bg-neutral wl_h-px";
4
+ return (_jsxs("div", { className: "wl_flex wl_items-center wl_my-4", children: [_jsx("div", { className: lineStyle }), _jsx("span", { className: "wl_px-4 wl_text-sm wl_text-neutral", children: text }), _jsx("div", { className: lineStyle })] }));
5
+ }