@stackframe/stack 2.5.32 → 2.5.35

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 (126) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/components/credential-sign-in.js +14 -12
  3. package/dist/components/credential-sign-in.js.map +1 -1
  4. package/dist/components/credential-sign-up.js +17 -15
  5. package/dist/components/credential-sign-up.js.map +1 -1
  6. package/dist/components/elements/maybe-full-page.d.mts +2 -2
  7. package/dist/components/elements/maybe-full-page.d.ts +2 -2
  8. package/dist/components/elements/sidebar-layout.d.mts +5 -5
  9. package/dist/components/elements/sidebar-layout.d.ts +5 -5
  10. package/dist/components/magic-link-sign-in.js +11 -9
  11. package/dist/components/magic-link-sign-in.js.map +1 -1
  12. package/dist/components/message-cards/message-card.d.mts +2 -2
  13. package/dist/components/message-cards/message-card.d.ts +2 -2
  14. package/dist/components/oauth-button-group.js.map +1 -1
  15. package/dist/components/oauth-button.js +48 -2
  16. package/dist/components/oauth-button.js.map +1 -1
  17. package/dist/components/profile-image-editor.js +5 -3
  18. package/dist/components/profile-image-editor.js.map +1 -1
  19. package/dist/components/selected-team-switcher.js +8 -5
  20. package/dist/components/selected-team-switcher.js.map +1 -1
  21. package/dist/components/team-icon.js.map +1 -1
  22. package/dist/components/user-button.d.mts +2 -2
  23. package/dist/components/user-button.d.ts +2 -2
  24. package/dist/components/user-button.js +11 -11
  25. package/dist/components/user-button.js.map +1 -1
  26. package/dist/components-page/account-settings.js +79 -66
  27. package/dist/components-page/account-settings.js.map +1 -1
  28. package/dist/components-page/auth-page.js +11 -7
  29. package/dist/components-page/auth-page.js.map +1 -1
  30. package/dist/components-page/email-verification.js +4 -2
  31. package/dist/components-page/email-verification.js.map +1 -1
  32. package/dist/components-page/error-page.js +6 -4
  33. package/dist/components-page/error-page.js.map +1 -1
  34. package/dist/components-page/forgot-password.js +12 -8
  35. package/dist/components-page/forgot-password.js.map +1 -1
  36. package/dist/components-page/magic-link-callback.js +5 -3
  37. package/dist/components-page/magic-link-callback.js.map +1 -1
  38. package/dist/components-page/oauth-callback.js +6 -5
  39. package/dist/components-page/oauth-callback.js.map +1 -1
  40. package/dist/components-page/password-reset.js +25 -22
  41. package/dist/components-page/password-reset.js.map +1 -1
  42. package/dist/components-page/team-creation.js +9 -7
  43. package/dist/components-page/team-creation.js.map +1 -1
  44. package/dist/components-page/team-invitation.js +14 -11
  45. package/dist/components-page/team-invitation.js.map +1 -1
  46. package/dist/esm/components/credential-sign-in.js +14 -12
  47. package/dist/esm/components/credential-sign-in.js.map +1 -1
  48. package/dist/esm/components/credential-sign-up.js +17 -15
  49. package/dist/esm/components/credential-sign-up.js.map +1 -1
  50. package/dist/esm/components/magic-link-sign-in.js +11 -9
  51. package/dist/esm/components/magic-link-sign-in.js.map +1 -1
  52. package/dist/esm/components/oauth-button-group.js.map +1 -1
  53. package/dist/esm/components/oauth-button.js +48 -2
  54. package/dist/esm/components/oauth-button.js.map +1 -1
  55. package/dist/esm/components/profile-image-editor.js +5 -3
  56. package/dist/esm/components/profile-image-editor.js.map +1 -1
  57. package/dist/esm/components/selected-team-switcher.js +8 -5
  58. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  59. package/dist/esm/components/team-icon.js.map +1 -1
  60. package/dist/esm/components/user-button.js +12 -15
  61. package/dist/esm/components/user-button.js.map +1 -1
  62. package/dist/esm/components-page/account-settings.js +79 -66
  63. package/dist/esm/components-page/account-settings.js.map +1 -1
  64. package/dist/esm/components-page/auth-page.js +11 -7
  65. package/dist/esm/components-page/auth-page.js.map +1 -1
  66. package/dist/esm/components-page/email-verification.js +4 -2
  67. package/dist/esm/components-page/email-verification.js.map +1 -1
  68. package/dist/esm/components-page/error-page.js +6 -4
  69. package/dist/esm/components-page/error-page.js.map +1 -1
  70. package/dist/esm/components-page/forgot-password.js +12 -8
  71. package/dist/esm/components-page/forgot-password.js.map +1 -1
  72. package/dist/esm/components-page/magic-link-callback.js +5 -3
  73. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  74. package/dist/esm/components-page/oauth-callback.js +6 -5
  75. package/dist/esm/components-page/oauth-callback.js.map +1 -1
  76. package/dist/esm/components-page/password-reset.js +25 -22
  77. package/dist/esm/components-page/password-reset.js.map +1 -1
  78. package/dist/esm/components-page/team-creation.js +9 -7
  79. package/dist/esm/components-page/team-creation.js.map +1 -1
  80. package/dist/esm/components-page/team-invitation.js +14 -11
  81. package/dist/esm/components-page/team-invitation.js.map +1 -1
  82. package/dist/esm/generated/quetzal-translations.js +1425 -0
  83. package/dist/esm/generated/quetzal-translations.js.map +1 -0
  84. package/dist/esm/lib/stack-app.js +1 -1
  85. package/dist/esm/lib/translations.js +20 -0
  86. package/dist/esm/lib/translations.js.map +1 -0
  87. package/dist/esm/providers/stack-provider.js +4 -2
  88. package/dist/esm/providers/stack-provider.js.map +1 -1
  89. package/dist/esm/providers/theme-provider.js.map +1 -1
  90. package/dist/esm/providers/translation-provider-client.js +18 -0
  91. package/dist/esm/providers/translation-provider-client.js.map +1 -0
  92. package/dist/esm/providers/translation-provider.js +12 -0
  93. package/dist/esm/providers/translation-provider.js.map +1 -0
  94. package/dist/esm/utils/browser-script.js +38 -6
  95. package/dist/esm/utils/browser-script.js.map +1 -1
  96. package/dist/generated/quetzal-translations.d.mts +4 -0
  97. package/dist/generated/quetzal-translations.d.ts +4 -0
  98. package/dist/generated/quetzal-translations.js +1451 -0
  99. package/dist/generated/quetzal-translations.js.map +1 -0
  100. package/dist/index.d.mts +2 -0
  101. package/dist/index.d.ts +2 -0
  102. package/dist/lib/stack-app.js +1 -1
  103. package/dist/lib/translations.d.mts +5 -0
  104. package/dist/lib/translations.d.ts +5 -0
  105. package/dist/lib/translations.js +55 -0
  106. package/dist/lib/translations.js.map +1 -0
  107. package/dist/providers/stack-provider-client.d.mts +3 -3
  108. package/dist/providers/stack-provider-client.d.ts +3 -3
  109. package/dist/providers/stack-provider.d.mts +6 -3
  110. package/dist/providers/stack-provider.d.ts +6 -3
  111. package/dist/providers/stack-provider.js +4 -2
  112. package/dist/providers/stack-provider.js.map +1 -1
  113. package/dist/providers/theme-provider.d.mts +2 -2
  114. package/dist/providers/theme-provider.d.ts +2 -2
  115. package/dist/providers/theme-provider.js.map +1 -1
  116. package/dist/providers/translation-provider-client.d.mts +14 -0
  117. package/dist/providers/translation-provider-client.d.ts +14 -0
  118. package/dist/providers/translation-provider-client.js +43 -0
  119. package/dist/providers/translation-provider-client.js.map +1 -0
  120. package/dist/providers/translation-provider.d.mts +9 -0
  121. package/dist/providers/translation-provider.d.ts +9 -0
  122. package/dist/providers/translation-provider.js +37 -0
  123. package/dist/providers/translation-provider.js.map +1 -0
  124. package/dist/utils/browser-script.js +38 -6
  125. package/dist/utils/browser-script.js.map +1 -1
  126. package/package.json +20 -12
@@ -36,12 +36,14 @@ var import_separator_with_text = require("../components/elements/separator-with-
36
36
  var import_magic_link_sign_in = require("../components/magic-link-sign-in");
37
37
  var import_predefined_message_card = require("../components/message-cards/predefined-message-card");
38
38
  var import_oauth_button_group = require("../components/oauth-button-group");
39
+ var import_translations = require("../lib/translations");
39
40
  var import_jsx_runtime = require("react/jsx-runtime");
40
41
  function AuthPage(props) {
41
42
  const stackApp = (0, import__.useStackApp)();
42
43
  const user = (0, import__.useUser)();
43
44
  const projectFromHook = stackApp.useProject();
44
45
  const project = props.mockProject || projectFromHook;
46
+ const { t } = (0, import_translations.useTranslation)();
45
47
  (0, import_react.useEffect)(() => {
46
48
  if (props.automaticRedirect) {
47
49
  if (user && !props.mockProject) {
@@ -58,27 +60,29 @@ function AuthPage(props) {
58
60
  const enableSeparator = (project.config.credentialEnabled || project.config.magicLinkEnabled) && project.config.oauthProviders.length > 0;
59
61
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_maybe_full_page.MaybeFullPage, { fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "stack-scope flex flex-col items-stretch", style: { width: "380px", padding: props.fullPage ? "1rem" : 0 }, children: [
60
62
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-center mb-6", children: [
61
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: props.type === "sign-in" ? "Sign in to your account" : "Create a new account" }),
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: props.type === "sign-in" ? t("Sign in to your account") : t("Create a new account") }),
62
64
  props.type === "sign-in" ? project.config.signUpEnabled && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_stack_ui.Typography, { children: [
63
- "Don't have an account? ",
65
+ t("Don't have an account?"),
66
+ " ",
64
67
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.StyledLink, { href: stackApp.urls.signUp, onClick: (e) => {
65
68
  (0, import_promises.runAsynchronously)(stackApp.redirectToSignUp());
66
69
  e.preventDefault();
67
- }, children: "Sign up" })
70
+ }, children: t("Sign up") })
68
71
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_stack_ui.Typography, { children: [
69
- "Already have an account? ",
72
+ t("Already have an account?"),
73
+ " ",
70
74
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.StyledLink, { href: stackApp.urls.signIn, onClick: (e) => {
71
75
  (0, import_promises.runAsynchronously)(stackApp.redirectToSignIn());
72
76
  e.preventDefault();
73
- }, children: "Sign in" })
77
+ }, children: t("Sign in") })
74
78
  ] })
75
79
  ] }),
76
80
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_oauth_button_group.OAuthButtonGroup, { type: props.type, mockProject: props.mockProject }),
77
81
  enableSeparator && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_separator_with_text.SeparatorWithText, { text: "Or continue with" }),
78
82
  project.config.credentialEnabled && project.config.magicLinkEnabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_stack_ui.Tabs, { defaultValue: "magic-link", children: [
79
83
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_stack_ui.TabsList, { className: "w-full mb-2", children: [
80
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.TabsTrigger, { value: "magic-link", className: "flex-1", children: "Magic Link" }),
81
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.TabsTrigger, { value: "password", className: "flex-1", children: "Password" })
84
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.TabsTrigger, { value: "magic-link", className: "flex-1", children: t("Magic Link") }),
85
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.TabsTrigger, { value: "password", className: "flex-1", children: t("Password") })
82
86
  ] }),
83
87
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.TabsContent, { value: "magic-link", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_magic_link_sign_in.MagicLinkSignIn, {}) }),
84
88
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.TabsContent, { value: "password", children: props.type === "sign-up" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_credential_sign_up.CredentialSignUp, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_credential_sign_in.CredentialSignIn, {}) })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport { runAsynchronously } from '@stackframe/stack-shared/dist/utils/promises';\nimport { StyledLink, Tabs, TabsContent, TabsList, TabsTrigger, Typography } from '@stackframe/stack-ui';\nimport { useEffect } from 'react';\nimport { useStackApp, useUser } from '..';\nimport { CredentialSignIn } from '../components/credential-sign-in';\nimport { CredentialSignUp } from '../components/credential-sign-up';\nimport { MaybeFullPage } from '../components/elements/maybe-full-page';\nimport { SeparatorWithText } from '../components/elements/separator-with-text';\nimport { MagicLinkSignIn } from '../components/magic-link-sign-in';\nimport { PredefinedMessageCard } from '../components/message-cards/predefined-message-card';\nimport { OAuthButtonGroup } from '../components/oauth-button-group';\n\nexport function AuthPage(props: {\n fullPage?: boolean,\n type: 'sign-in' | 'sign-up',\n automaticRedirect?: boolean,\n extraInfo?: React.ReactNode,\n mockProject?: {\n config: {\n signUpEnabled: boolean,\n credentialEnabled: boolean,\n magicLinkEnabled: boolean,\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n const projectFromHook = stackApp.useProject();\n const project = props.mockProject || projectFromHook;\n\n useEffect(() => {\n if (props.automaticRedirect) {\n if (user && !props.mockProject) {\n runAsynchronously(props.type === 'sign-in' ? stackApp.redirectToAfterSignIn() : stackApp.redirectToAfterSignUp());\n }\n }\n }, [user, props.mockProject, stackApp, props.automaticRedirect]);\n\n if (user && !props.mockProject) {\n return <PredefinedMessageCard type='signedIn' fullPage={props.fullPage} />;\n }\n\n if (props.type === 'sign-up' && !project.config.signUpEnabled) {\n return <PredefinedMessageCard type='signUpDisabled' fullPage={props.fullPage} />;\n }\n\n const enableSeparator = (project.config.credentialEnabled || project.config.magicLinkEnabled) && project.config.oauthProviders.length > 0;\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className='stack-scope flex flex-col items-stretch' style={{ width: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n {props.type === 'sign-in' ? 'Sign in to your account' : 'Create a new account'}\n </Typography>\n {props.type === 'sign-in' ? (\n project.config.signUpEnabled && (\n <Typography>\n {\"Don't have an account? \"}\n <StyledLink href={stackApp.urls.signUp} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignUp());\n e.preventDefault();\n }}>\n Sign up\n </StyledLink>\n </Typography>\n )\n ) : (\n <Typography>\n {\"Already have an account? \"}\n <StyledLink href={stackApp.urls.signIn} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignIn());\n e.preventDefault();\n }}>\n Sign in\n </StyledLink>\n </Typography>\n )}\n </div>\n <OAuthButtonGroup type={props.type} mockProject={props.mockProject} />\n {enableSeparator && <SeparatorWithText text={'Or continue with'} />}\n {project.config.credentialEnabled && project.config.magicLinkEnabled ? (\n <Tabs defaultValue='magic-link'>\n <TabsList className='w-full mb-2'>\n <TabsTrigger value='magic-link' className='flex-1'>Magic Link</TabsTrigger>\n <TabsTrigger value='password' className='flex-1'>Password</TabsTrigger>\n </TabsList>\n <TabsContent value='magic-link'>\n <MagicLinkSignIn/>\n </TabsContent>\n <TabsContent value='password'>\n {props.type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>}\n </TabsContent>\n </Tabs>\n ) : project.config.credentialEnabled ? (\n props.type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>\n ) : project.config.magicLinkEnabled ? (\n <MagicLinkSignIn/>\n ) : null}\n {props.extraInfo && (\n <div className='flex flex-col items-center text-center text-sm text-gray-500 mt-2'>\n <p>{props.extraInfo}</p>\n </div>\n )}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,sBAAkC;AAClC,sBAAiF;AACjF,mBAA0B;AAC1B,eAAqC;AACrC,gCAAiC;AACjC,gCAAiC;AACjC,6BAA8B;AAC9B,iCAAkC;AAClC,gCAAgC;AAChC,qCAAsC;AACtC,gCAAiC;AAgCtB;AA9BJ,SAAS,SAAS,OAetB;AACD,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AACrB,QAAM,kBAAkB,SAAS,WAAW;AAC5C,QAAM,UAAU,MAAM,eAAe;AAErC,8BAAU,MAAM;AACd,QAAI,MAAM,mBAAmB;AAC3B,UAAI,QAAQ,CAAC,MAAM,aAAa;AAC9B,+CAAkB,MAAM,SAAS,YAAY,SAAS,sBAAsB,IAAI,SAAS,sBAAsB,CAAC;AAAA,MAClH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,MAAM,aAAa,UAAU,MAAM,iBAAiB,CAAC;AAE/D,MAAI,QAAQ,CAAC,MAAM,aAAa;AAC9B,WAAO,4CAAC,wDAAsB,MAAK,YAAW,UAAU,MAAM,UAAU;AAAA,EAC1E;AAEA,MAAI,MAAM,SAAS,aAAa,CAAC,QAAQ,OAAO,eAAe;AAC7D,WAAO,4CAAC,wDAAsB,MAAK,kBAAiB,UAAU,MAAM,UAAU;AAAA,EAChF;AAEA,QAAM,mBAAmB,QAAQ,OAAO,qBAAqB,QAAQ,OAAO,qBAAqB,QAAQ,OAAO,eAAe,SAAS;AAExI,SACE,4CAAC,wCAAc,UAAU,CAAC,CAAC,MAAM,UAC/B,uDAAC,SAAI,WAAU,2CAA0C,OAAO,EAAE,OAAO,SAAS,SAAS,MAAM,WAAW,SAAS,EAAE,GACrH;AAAA,iDAAC,SAAI,WAAU,oBACb;AAAA,kDAAC,8BAAW,MAAK,MACd,gBAAM,SAAS,YAAY,4BAA4B,wBAC1D;AAAA,MACC,MAAM,SAAS,YACd,QAAQ,OAAO,iBACb,6CAAC,8BACE;AAAA;AAAA,QACD,4CAAC,8BAAW,MAAM,SAAS,KAAK,QAAQ,SAAS,CAAC,MAAM;AACtD,iDAAkB,SAAS,iBAAiB,CAAC;AAC7C,YAAE,eAAe;AAAA,QACnB,GAAG,qBAEH;AAAA,SACF,IAGF,6CAAC,8BACE;AAAA;AAAA,QACD,4CAAC,8BAAW,MAAM,SAAS,KAAK,QAAQ,SAAS,CAAC,MAAM;AACtD,iDAAkB,SAAS,iBAAiB,CAAC;AAC7C,YAAE,eAAe;AAAA,QACnB,GAAG,qBAEH;AAAA,SACF;AAAA,OAEJ;AAAA,IACA,4CAAC,8CAAiB,MAAM,MAAM,MAAM,aAAa,MAAM,aAAa;AAAA,IACnE,mBAAmB,4CAAC,gDAAkB,MAAM,oBAAoB;AAAA,IAChE,QAAQ,OAAO,qBAAqB,QAAQ,OAAO,mBAClD,6CAAC,wBAAK,cAAa,cACjB;AAAA,mDAAC,4BAAS,WAAU,eAClB;AAAA,oDAAC,+BAAY,OAAM,cAAa,WAAU,UAAS,wBAAU;AAAA,QAC7D,4CAAC,+BAAY,OAAM,YAAW,WAAU,UAAS,sBAAQ;AAAA,SAC3D;AAAA,MACA,4CAAC,+BAAY,OAAM,cACjB,sDAAC,6CAAe,GAClB;AAAA,MACA,4CAAC,+BAAY,OAAM,YAChB,gBAAM,SAAS,YAAY,4CAAC,8CAAgB,IAAK,4CAAC,8CAAgB,GACrE;AAAA,OACF,IACE,QAAQ,OAAO,oBACjB,MAAM,SAAS,YAAY,4CAAC,8CAAgB,IAAK,4CAAC,8CAAgB,IAChE,QAAQ,OAAO,mBACjB,4CAAC,6CAAe,IACd;AAAA,IACH,MAAM,aACL,4CAAC,SAAI,WAAU,qEACb,sDAAC,OAAG,gBAAM,WAAU,GACtB;AAAA,KAEJ,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport { runAsynchronously } from '@stackframe/stack-shared/dist/utils/promises';\nimport { StyledLink, Tabs, TabsContent, TabsList, TabsTrigger, Typography } from '@stackframe/stack-ui';\nimport { useEffect } from 'react';\nimport { useStackApp, useUser } from '..';\nimport { CredentialSignIn } from '../components/credential-sign-in';\nimport { CredentialSignUp } from '../components/credential-sign-up';\nimport { MaybeFullPage } from '../components/elements/maybe-full-page';\nimport { SeparatorWithText } from '../components/elements/separator-with-text';\nimport { MagicLinkSignIn } from '../components/magic-link-sign-in';\nimport { PredefinedMessageCard } from '../components/message-cards/predefined-message-card';\nimport { OAuthButtonGroup } from '../components/oauth-button-group';\nimport { useTranslation } from '../lib/translations';\n\nexport function AuthPage(props: {\n fullPage?: boolean,\n type: 'sign-in' | 'sign-up',\n automaticRedirect?: boolean,\n extraInfo?: React.ReactNode,\n mockProject?: {\n config: {\n signUpEnabled: boolean,\n credentialEnabled: boolean,\n magicLinkEnabled: boolean,\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n const projectFromHook = stackApp.useProject();\n const project = props.mockProject || projectFromHook;\n const { t } = useTranslation();\n\n useEffect(() => {\n if (props.automaticRedirect) {\n if (user && !props.mockProject) {\n runAsynchronously(props.type === 'sign-in' ? stackApp.redirectToAfterSignIn() : stackApp.redirectToAfterSignUp());\n }\n }\n }, [user, props.mockProject, stackApp, props.automaticRedirect]);\n\n if (user && !props.mockProject) {\n return <PredefinedMessageCard type='signedIn' fullPage={props.fullPage} />;\n }\n\n if (props.type === 'sign-up' && !project.config.signUpEnabled) {\n return <PredefinedMessageCard type='signUpDisabled' fullPage={props.fullPage} />;\n }\n\n const enableSeparator = (project.config.credentialEnabled || project.config.magicLinkEnabled) && project.config.oauthProviders.length > 0;\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className='stack-scope flex flex-col items-stretch' style={{ width: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n {props.type === 'sign-in' ? t(\"Sign in to your account\") : t(\"Create a new account\")}\n </Typography>\n {props.type === 'sign-in' ? (\n project.config.signUpEnabled && (\n <Typography>\n {t(\"Don't have an account?\")}{\" \"}\n <StyledLink href={stackApp.urls.signUp} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignUp());\n e.preventDefault();\n }}>{t(\"Sign up\")}</StyledLink>\n </Typography>\n )\n ) : (\n <Typography>\n {t(\"Already have an account?\")}{\" \"}\n <StyledLink href={stackApp.urls.signIn} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignIn());\n e.preventDefault();\n }}>{t(\"Sign in\")}</StyledLink>\n </Typography>\n )}\n </div>\n <OAuthButtonGroup type={props.type} mockProject={props.mockProject} />\n {enableSeparator && <SeparatorWithText text={'Or continue with'} />}\n {project.config.credentialEnabled && project.config.magicLinkEnabled ? (\n <Tabs defaultValue='magic-link'>\n <TabsList className='w-full mb-2'>\n <TabsTrigger value='magic-link' className='flex-1'>{t(\"Magic Link\")}</TabsTrigger>\n <TabsTrigger value='password' className='flex-1'>{t(\"Password\")}</TabsTrigger>\n </TabsList>\n <TabsContent value='magic-link'>\n <MagicLinkSignIn/>\n </TabsContent>\n <TabsContent value='password'>\n {props.type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>}\n </TabsContent>\n </Tabs>\n ) : project.config.credentialEnabled ? (\n props.type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>\n ) : project.config.magicLinkEnabled ? (\n <MagicLinkSignIn/>\n ) : null}\n {props.extraInfo && (\n <div className='flex flex-col items-center text-center text-sm text-gray-500 mt-2'>\n <p>{props.extraInfo}</p>\n </div>\n )}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":"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","names":[]}
@@ -41,14 +41,16 @@ var import_message_card = require("../components/message-cards/message-card");
41
41
  var import_predefined_message_card = require("../components/message-cards/predefined-message-card");
42
42
  var import_stack_shared = require("@stackframe/stack-shared");
43
43
  var import_caches = require("@stackframe/stack-shared/dist/utils/caches");
44
+ var import_translations = require("../lib/translations");
44
45
  var import_jsx_runtime = require("react/jsx-runtime");
45
46
  var cacheVerifyEmail = (0, import_caches.cacheFunction)(async (stackApp, code) => {
46
47
  return await stackApp.verifyEmail(code);
47
48
  });
48
49
  function EmailVerification(props) {
50
+ const { t } = (0, import_translations.useTranslation)();
49
51
  const stackApp = (0, import__.useStackApp)();
50
- const invalidJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Invalid Verification Link", fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Please check if you have the correct link. If you continue to have issues, please contact support." }) });
51
- const expiredJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Expired Verification Link", fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Your email verification link has expired. Please request a new verification link from your account settings." }) });
52
+ const invalidJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: t("Invalid Verification Link"), fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: t("Please check if you have the correct link. If you continue to have issues, please contact support.") }) });
53
+ const expiredJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: t("Expired Verification Link"), fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: t("Your email verification link has expired. Please request a new verification link from your account settings.") }) });
52
54
  if (!props.searchParams?.code) {
53
55
  return invalidJsx;
54
56
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/email-verification.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\n\nconst cacheVerifyEmail = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.verifyEmail(code);\n});\n\nexport function EmailVerification(props: {\n searchParams?: Record<string, string>,\n fullPage?: boolean,\n}) {\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Verification Link\" fullPage={!!props.fullPage}>\n <p>Please check if you have the correct link. If you continue to have issues, please contact support.</p>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Verification Link\" fullPage={!!props.fullPage}>\n <p>Your email verification link has expired. Please request a new verification link from your account settings.</p>\n </MessageCard>\n );\n\n if (!props.searchParams?.code) {\n return invalidJsx;\n }\n\n const error = React.use(cacheVerifyEmail(stackApp, props.searchParams.code));\n\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n // everything fine, continue\n } else if (error) {\n throw error;\n }\n\n return <PredefinedMessageCard type='emailVerified' fullPage={!!props.fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAClB,eAA4C;AAC5C,0BAA4B;AAC5B,qCAAsC;AACtC,0BAA4B;AAC5B,oBAA8B;AAcxB;AAZN,IAAM,uBAAmB,6BAAc,OAAO,UAAgC,SAAiB;AAC7F,SAAO,MAAM,SAAS,YAAY,IAAI;AACxC,CAAC;AAEM,SAAS,kBAAkB,OAG/B;AACD,QAAM,eAAW,sBAAY;AAE7B,QAAM,aACJ,4CAAC,mCAAY,OAAM,6BAA4B,UAAU,CAAC,CAAC,MAAM,UAC/D,sDAAC,OAAE,gHAAkG,GACvG;AAGF,QAAM,aACJ,4CAAC,mCAAY,OAAM,6BAA4B,UAAU,CAAC,CAAC,MAAM,UAC/D,sDAAC,OAAE,0HAA4G,GACjH;AAGF,MAAI,CAAC,MAAM,cAAc,MAAM;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,aAAAA,QAAM,IAAI,iBAAiB,UAAU,MAAM,aAAa,IAAI,CAAC;AAE3E,MAAI,iBAAiB,gCAAY,0BAA0B;AACzD,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,yBAAyB;AAC/D,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,6BAA6B;AAAA,EAErE,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,SAAO,4CAAC,wDAAsB,MAAK,iBAAgB,UAAU,CAAC,CAAC,MAAM,UAAU;AACjF;","names":["React"]}
1
+ {"version":3,"sources":["../../src/components-page/email-verification.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { useTranslation } from \"../lib/translations\";\n\nconst cacheVerifyEmail = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.verifyEmail(code);\n});\n\nexport function EmailVerification(props: {\n searchParams?: Record<string, string>,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title={t(\"Invalid Verification Link\")} fullPage={!!props.fullPage}>\n <p>{t(\"Please check if you have the correct link. If you continue to have issues, please contact support.\")}</p>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title={t(\"Expired Verification Link\")} fullPage={!!props.fullPage}>\n <p>{t(\"Your email verification link has expired. Please request a new verification link from your account settings.\")}</p>\n </MessageCard>\n );\n\n if (!props.searchParams?.code) {\n return invalidJsx;\n }\n\n const error = React.use(cacheVerifyEmail(stackApp, props.searchParams.code));\n\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n // everything fine, continue\n } else if (error) {\n throw error;\n }\n\n return <PredefinedMessageCard type='emailVerified' fullPage={!!props.fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAClB,eAA4C;AAC5C,0BAA4B;AAC5B,qCAAsC;AACtC,0BAA4B;AAC5B,oBAA8B;AAC9B,0BAA+B;AAezB;AAbN,IAAM,uBAAmB,6BAAc,OAAO,UAAgC,SAAiB;AAC7F,SAAO,MAAM,SAAS,YAAY,IAAI;AACxC,CAAC;AAEM,SAAS,kBAAkB,OAG/B;AACD,QAAM,EAAE,EAAE,QAAI,oCAAe;AAC7B,QAAM,eAAW,sBAAY;AAE7B,QAAM,aACJ,4CAAC,mCAAY,OAAO,EAAE,2BAA2B,GAAG,UAAU,CAAC,CAAC,MAAM,UACpE,sDAAC,OAAG,YAAE,oGAAoG,GAAE,GAC9G;AAGF,QAAM,aACJ,4CAAC,mCAAY,OAAO,EAAE,2BAA2B,GAAG,UAAU,CAAC,CAAC,MAAM,UACpE,sDAAC,OAAG,YAAE,8GAA8G,GAAE,GACxH;AAGF,MAAI,CAAC,MAAM,cAAc,MAAM;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,aAAAA,QAAM,IAAI,iBAAiB,UAAU,MAAM,aAAa,IAAI,CAAC;AAE3E,MAAI,iBAAiB,gCAAY,0BAA0B;AACzD,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,yBAAyB;AAC/D,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,6BAA6B;AAAA,EAErE,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,SAAO,4CAAC,wDAAsB,MAAK,iBAAgB,UAAU,CAAC,CAAC,MAAM,UAAU;AACjF;","names":["React"]}
@@ -31,8 +31,10 @@ var import_stack_shared = require("@stackframe/stack-shared");
31
31
  var import_known_error_message_card = require("../components/message-cards/known-error-message-card");
32
32
  var import_stack_ui = require("@stackframe/stack-ui");
33
33
  var import_message_card = require("../components/message-cards/message-card");
34
+ var import_translations = require("../lib/translations");
34
35
  var import_jsx_runtime = require("react/jsx-runtime");
35
36
  function ErrorPage(props) {
37
+ const { t } = (0, import_translations.useTranslation)();
36
38
  const stackApp = (0, import__.useStackApp)();
37
39
  const errorCode = props.searchParams.errorCode;
38
40
  const message = props.searchParams.message;
@@ -51,11 +53,11 @@ function ErrorPage(props) {
51
53
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
52
54
  import_message_card.MessageCard,
53
55
  {
54
- title: "Failed to connect account",
56
+ title: t("Failed to connect account"),
55
57
  fullPage: !!props.fullPage,
56
- primaryButtonText: "Go to Home",
58
+ primaryButtonText: t("Go to Home"),
57
59
  primaryAction: () => stackApp.redirectToHome(),
58
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "This account is already connected to another user. Please connect a different account." })
60
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: t("This account is already connected to another user. Please connect a different account.") })
59
61
  }
60
62
  );
61
63
  }
@@ -67,7 +69,7 @@ function ErrorPage(props) {
67
69
  fullPage: !!props.fullPage,
68
70
  primaryButtonText: "Go to Home",
69
71
  primaryAction: () => stackApp.redirectToHome(),
70
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "The user is already connected to another OAuth account. Did you maybe selected the wrong account on the OAuth provider page?" })
72
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: t("The user is already connected to another OAuth account. Did you maybe selected the wrong account on the OAuth provider page?") })
71
73
  }
72
74
  );
73
75
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/error-page.tsx"],"sourcesContent":["'use client';\n\nimport { useStackApp } from \"..\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { KnownError, KnownErrors } from \"@stackframe/stack-shared\";\nimport { KnownErrorMessageCard } from \"../components/message-cards/known-error-message-card\";\nimport { Typography } from \"@stackframe/stack-ui\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\n\n\nexport function ErrorPage(props: { fullPage?: boolean, searchParams: Record<string, string> }) {\n const stackApp = useStackApp();\n const errorCode = props.searchParams.errorCode;\n const message = props.searchParams.message;\n const details = props.searchParams.details;\n\n const unknownErrorCard = <PredefinedMessageCard type='unknownError' fullPage={!!props.fullPage} />;\n\n if (!errorCode || !message || !details) {\n return unknownErrorCard;\n }\n\n let error;\n try {\n error = KnownError.fromJson({ code: errorCode, message, details });\n } catch (e) {\n return unknownErrorCard;\n }\n\n if (error instanceof KnownErrors.OAuthConnectionAlreadyConnectedToAnotherUser) {\n // TODO: add \"Connect a different account\" button\n return (\n <MessageCard\n title=\"Failed to connect account\"\n fullPage={!!props.fullPage}\n primaryButtonText=\"Go to Home\"\n primaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>\n This account is already connected to another user. Please connect a different account.\n </Typography>\n </MessageCard>\n );\n }\n\n if (error instanceof KnownErrors.UserAlreadyConnectedToAnotherOAuthConnection) {\n // TODO: add \"Connect again\" button\n return (\n <MessageCard\n title=\"Failed to connect account\"\n fullPage={!!props.fullPage}\n primaryButtonText=\"Go to Home\"\n primaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>\n The user is already connected to another OAuth account. Did you maybe selected the wrong account on the OAuth provider page?\n </Typography>\n </MessageCard>\n );\n }\n\n return <KnownErrorMessageCard error={error} fullPage={!!props.fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,eAA4B;AAC5B,qCAAsC;AACtC,0BAAwC;AACxC,sCAAsC;AACtC,sBAA2B;AAC3B,0BAA4B;AASD;AANpB,SAAS,UAAU,OAAqE;AAC7F,QAAM,eAAW,sBAAY;AAC7B,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,UAAU,MAAM,aAAa;AACnC,QAAM,UAAU,MAAM,aAAa;AAEnC,QAAM,mBAAmB,4CAAC,wDAAsB,MAAK,gBAAe,UAAU,CAAC,CAAC,MAAM,UAAU;AAEhG,MAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS;AACtC,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI;AACF,YAAQ,+BAAW,SAAS,EAAE,MAAM,WAAW,SAAS,QAAQ,CAAC;AAAA,EACnE,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,gCAAY,8CAA8C;AAE7E,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,UAAU,CAAC,CAAC,MAAM;AAAA,QAClB,mBAAkB;AAAA,QAClB,eAAe,MAAM,SAAS,eAAe;AAAA,QAE7C,sDAAC,8BAAW,oGAEZ;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,iBAAiB,gCAAY,8CAA8C;AAE7E,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,UAAU,CAAC,CAAC,MAAM;AAAA,QAClB,mBAAkB;AAAA,QAClB,eAAe,MAAM,SAAS,eAAe;AAAA,QAE7C,sDAAC,8BAAW,0IAEZ;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SAAO,4CAAC,yDAAsB,OAAc,UAAU,CAAC,CAAC,MAAM,UAAU;AAC1E;","names":[]}
1
+ {"version":3,"sources":["../../src/components-page/error-page.tsx"],"sourcesContent":["'use client';\n\nimport { useStackApp } from \"..\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { KnownError, KnownErrors } from \"@stackframe/stack-shared\";\nimport { KnownErrorMessageCard } from \"../components/message-cards/known-error-message-card\";\nimport { Typography } from \"@stackframe/stack-ui\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { useTranslation } from \"../lib/translations\";\n\n\nexport function ErrorPage(props: { fullPage?: boolean, searchParams: Record<string, string> }) {\n const { t } = useTranslation();\n const stackApp = useStackApp();\n const errorCode = props.searchParams.errorCode;\n const message = props.searchParams.message;\n const details = props.searchParams.details;\n\n const unknownErrorCard = <PredefinedMessageCard type='unknownError' fullPage={!!props.fullPage} />;\n\n if (!errorCode || !message || !details) {\n return unknownErrorCard;\n }\n\n let error;\n try {\n error = KnownError.fromJson({ code: errorCode, message, details });\n } catch (e) {\n return unknownErrorCard;\n }\n\n if (error instanceof KnownErrors.OAuthConnectionAlreadyConnectedToAnotherUser) {\n // TODO: add \"Connect a different account\" button\n return (\n <MessageCard\n title={t(\"Failed to connect account\")}\n fullPage={!!props.fullPage}\n primaryButtonText={t(\"Go to Home\")}\n primaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>\n {t(\"This account is already connected to another user. Please connect a different account.\")}\n </Typography>\n </MessageCard>\n );\n }\n\n if (error instanceof KnownErrors.UserAlreadyConnectedToAnotherOAuthConnection) {\n // TODO: add \"Connect again\" button\n return (\n <MessageCard\n title=\"Failed to connect account\"\n fullPage={!!props.fullPage}\n primaryButtonText=\"Go to Home\"\n primaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>\n {t(\"The user is already connected to another OAuth account. Did you maybe selected the wrong account on the OAuth provider page?\")}\n </Typography>\n </MessageCard>\n );\n }\n\n return <KnownErrorMessageCard error={error} fullPage={!!props.fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,eAA4B;AAC5B,qCAAsC;AACtC,0BAAwC;AACxC,sCAAsC;AACtC,sBAA2B;AAC3B,0BAA4B;AAC5B,0BAA+B;AAUJ;AAPpB,SAAS,UAAU,OAAqE;AAC7F,QAAM,EAAE,EAAE,QAAI,oCAAe;AAC7B,QAAM,eAAW,sBAAY;AAC7B,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,UAAU,MAAM,aAAa;AACnC,QAAM,UAAU,MAAM,aAAa;AAEnC,QAAM,mBAAmB,4CAAC,wDAAsB,MAAK,gBAAe,UAAU,CAAC,CAAC,MAAM,UAAU;AAEhG,MAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS;AACtC,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI;AACF,YAAQ,+BAAW,SAAS,EAAE,MAAM,WAAW,SAAS,QAAQ,CAAC;AAAA,EACnE,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,gCAAY,8CAA8C;AAE7E,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,2BAA2B;AAAA,QACpC,UAAU,CAAC,CAAC,MAAM;AAAA,QAClB,mBAAmB,EAAE,YAAY;AAAA,QACjC,eAAe,MAAM,SAAS,eAAe;AAAA,QAE7C,sDAAC,8BACE,YAAE,wFAAwF,GAC7F;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,iBAAiB,gCAAY,8CAA8C;AAE7E,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,UAAU,CAAC,CAAC,MAAM;AAAA,QAClB,mBAAkB;AAAA,QAClB,eAAe,MAAM,SAAS,eAAe;AAAA,QAE7C,sDAAC,8BACE,YAAE,8HAA8H,GACnI;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SAAO,4CAAC,yDAAsB,OAAc,UAAU,CAAC,CAAC,MAAM,UAAU;AAC1E;","names":[]}
@@ -36,11 +36,13 @@ var import__ = require("..");
36
36
  var import_form_warning = require("../components/elements/form-warning");
37
37
  var import_maybe_full_page = require("../components/elements/maybe-full-page");
38
38
  var import_predefined_message_card = require("../components/message-cards/predefined-message-card");
39
+ var import_translations = require("../lib/translations");
39
40
  var import_jsx_runtime = require("react/jsx-runtime");
40
- var schema = (0, import_schema_fields.yupObject)({
41
- email: (0, import_schema_fields.yupString)().email("Please enter a valid email").required("Please enter your email")
42
- });
43
41
  function ForgotPasswordForm({ onSent }) {
42
+ const { t } = (0, import_translations.useTranslation)();
43
+ const schema = (0, import_schema_fields.yupObject)({
44
+ email: (0, import_schema_fields.yupString)().email(t("Please enter a valid email")).required(t("Please enter your email"))
45
+ });
44
46
  const { register, handleSubmit, formState: { errors }, clearErrors } = (0, import_react_hook_form.useForm)({
45
47
  resolver: (0, import_yup.yupResolver)(schema)
46
48
  });
@@ -63,7 +65,7 @@ function ForgotPasswordForm({ onSent }) {
63
65
  onSubmit: (e) => (0, import_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
64
66
  noValidate: true,
65
67
  children: [
66
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "email", className: "mb-1", children: "Your Email" }),
68
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "email", className: "mb-1", children: t("Your Email") }),
67
69
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
68
70
  import_stack_ui.Input,
69
71
  {
@@ -74,12 +76,13 @@ function ForgotPasswordForm({ onSent }) {
74
76
  }
75
77
  ),
76
78
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.email?.message?.toString() }),
77
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: "Send Email" })
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: t("Send Email") })
78
80
  ]
79
81
  }
80
82
  );
81
83
  }
82
84
  function ForgotPassword(props) {
85
+ const { t } = (0, import_translations.useTranslation)();
83
86
  const stackApp = (0, import__.useStackApp)();
84
87
  const user = (0, import__.useUser)();
85
88
  const [sent, setSent] = (0, import_react.useState)(false);
@@ -91,10 +94,11 @@ function ForgotPassword(props) {
91
94
  }
92
95
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_maybe_full_page.MaybeFullPage, { fullPage: !!props.fullPage, children: [
93
96
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-center mb-6 stack-scope", style: { width: "380px", padding: props.fullPage ? "1rem" : 0 }, children: [
94
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: "Reset Your Password" }),
97
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: t("Reset Your Password") }),
95
98
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_stack_ui.Typography, { children: [
96
- "Don't need to reset? ",
97
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.StyledLink, { href: stackApp.urls["signUp"], children: "Sign in" })
99
+ t("Don't need to reset?"),
100
+ " ",
101
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.StyledLink, { href: stackApp.urls["signUp"], children: t("Sign in") })
98
102
  ] })
99
103
  ] }),
100
104
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ForgotPasswordForm, { onSent: () => setSent(true) })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/forgot-password.tsx"],"sourcesContent":["'use client';\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label, StyledLink, Typography } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp, useUser } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\n\nconst schema = yupObject({\n email: yupString().email('Please enter a valid email').required('Please enter your email')\n});\n\nexport function ForgotPasswordForm({ onSent }: { onSent?: () => void }) {\n const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const stackApp = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { email } = data;\n await stackApp.sendForgotPasswordEmail(email);\n onSent?.();\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"email\" className=\"mb-1\">Your Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n {...register('email')}\n onChange={() => clearErrors('email')}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n Send Email\n </Button>\n </form>\n );\n}\n\n\nexport function ForgotPassword(props: { fullPage?: boolean }) {\n const stackApp = useStackApp();\n const user = useUser();\n const [sent, setSent] = useState(false);\n\n if (user) {\n return <PredefinedMessageCard type='signedIn' fullPage={!!props.fullPage} />;\n }\n\n if (sent) {\n return <PredefinedMessageCard type='emailSent' fullPage={!!props.fullPage} />;\n }\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className=\"text-center mb-6 stack-scope\" style={{ width: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <Typography type='h2'>Reset Your Password</Typography>\n <Typography>\n {\"Don't need to reset? \"}\n <StyledLink href={stackApp.urls['signUp']}>\n Sign in\n </StyledLink>\n </Typography>\n </div>\n <ForgotPasswordForm onSent={() => setSent(true)} />\n </MaybeFullPage>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,iBAA4B;AAC5B,2BAAqC;AACrC,sBAA2C;AAC3C,sBAA6D;AAC7D,mBAAyB;AACzB,6BAAwB;AAExB,eAAqC;AACrC,0BAAgC;AAChC,6BAA8B;AAC9B,qCAAsC;AAyBlC;AAvBJ,IAAM,aAAS,gCAAU;AAAA,EACvB,WAAO,gCAAU,EAAE,MAAM,4BAA4B,EAAE,SAAS,yBAAyB;AAC3F,CAAC;AAEM,SAAS,mBAAmB,EAAE,OAAO,GAA4B;AACtE,QAAM,EAAE,UAAU,cAAc,WAAW,EAAE,OAAO,GAAG,YAAY,QAAI,gCAAQ;AAAA,IAC7E,cAAU,wBAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,eAAW,sBAAY;AAC7B,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,KAAK;AAE5C,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AACf,QAAI;AACF,YAAM,EAAE,MAAM,IAAI;AAClB,YAAM,SAAS,wBAAwB,KAAK;AAC9C,eAAS;AAAA,IACT,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,WAAK,4CAA2B,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,MACnE,YAAU;AAAA,MAEV;AAAA,oDAAC,yBAAM,SAAQ,SAAQ,WAAU,QAAO,wBAAU;AAAA,QAClD;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACJ,GAAG,SAAS,OAAO;AAAA,YACpB,UAAU,MAAM,YAAY,OAAO;AAAA;AAAA,QACrC;AAAA,QACA,4CAAC,uCAAgB,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AAAA,QAE1D,4CAAC,0BAAO,MAAK,UAAS,WAAU,QAAO,SAAkB,wBAEzD;AAAA;AAAA;AAAA,EACF;AAEJ;AAGO,SAAS,eAAe,OAA+B;AAC5D,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AACrB,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAS,KAAK;AAEtC,MAAI,MAAM;AACR,WAAO,4CAAC,wDAAsB,MAAK,YAAW,UAAU,CAAC,CAAC,MAAM,UAAU;AAAA,EAC5E;AAEA,MAAI,MAAM;AACR,WAAO,4CAAC,wDAAsB,MAAK,aAAY,UAAU,CAAC,CAAC,MAAM,UAAU;AAAA,EAC7E;AAEA,SACE,6CAAC,wCAAc,UAAU,CAAC,CAAC,MAAM,UAC/B;AAAA,iDAAC,SAAI,WAAU,gCAA+B,OAAO,EAAE,OAAO,SAAS,SAAS,MAAM,WAAW,SAAS,EAAE,GAC1G;AAAA,kDAAC,8BAAW,MAAK,MAAK,iCAAmB;AAAA,MACzC,6CAAC,8BACE;AAAA;AAAA,QACD,4CAAC,8BAAW,MAAM,SAAS,KAAK,QAAQ,GAAG,qBAE3C;AAAA,SACF;AAAA,OACF;AAAA,IACA,4CAAC,sBAAmB,QAAQ,MAAM,QAAQ,IAAI,GAAG;AAAA,KACnD;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components-page/forgot-password.tsx"],"sourcesContent":["'use client';\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label, StyledLink, Typography } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp, useUser } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function ForgotPasswordForm({ onSent }: { onSent?: () => void }) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n email: yupString().email(t(\"Please enter a valid email\")).required(t(\"Please enter your email\"))\n });\n\n const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const stackApp = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { email } = data;\n await stackApp.sendForgotPasswordEmail(email);\n onSent?.();\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"email\" className=\"mb-1\">{t(\"Your Email\")}</Label>\n <Input\n id=\"email\"\n type=\"email\"\n {...register('email')}\n onChange={() => clearErrors('email')}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t(\"Send Email\")}\n </Button>\n </form>\n );\n}\n\n\nexport function ForgotPassword(props: { fullPage?: boolean }) {\n const { t } = useTranslation();\n const stackApp = useStackApp();\n const user = useUser();\n const [sent, setSent] = useState(false);\n\n if (user) {\n return <PredefinedMessageCard type='signedIn' fullPage={!!props.fullPage} />;\n }\n\n if (sent) {\n return <PredefinedMessageCard type='emailSent' fullPage={!!props.fullPage} />;\n }\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className=\"text-center mb-6 stack-scope\" style={{ width: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <Typography type='h2'>{t(\"Reset Your Password\")}</Typography>\n <Typography>\n {t(\"Don't need to reset?\")}{\" \"}\n <StyledLink href={stackApp.urls['signUp']}>\n {t(\"Sign in\")}\n </StyledLink>\n </Typography>\n </div>\n <ForgotPasswordForm onSent={() => setSent(true)} />\n </MaybeFullPage>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,iBAA4B;AAC5B,2BAAqC;AACrC,sBAA2C;AAC3C,sBAA6D;AAC7D,mBAAyB;AACzB,6BAAwB;AAExB,eAAqC;AACrC,0BAAgC;AAChC,6BAA8B;AAC9B,qCAAsC;AACtC,0BAA+B;AA2B3B;AAzBG,SAAS,mBAAmB,EAAE,OAAO,GAA4B;AACtE,QAAM,EAAE,EAAE,QAAI,oCAAe;AAE7B,QAAM,aAAS,gCAAU;AAAA,IACvB,WAAO,gCAAU,EAAE,MAAM,EAAE,4BAA4B,CAAC,EAAE,SAAS,EAAE,yBAAyB,CAAC;AAAA,EACjG,CAAC;AAED,QAAM,EAAE,UAAU,cAAc,WAAW,EAAE,OAAO,GAAG,YAAY,QAAI,gCAAQ;AAAA,IAC7E,cAAU,wBAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,eAAW,sBAAY;AAC7B,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,KAAK;AAE5C,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AACf,QAAI;AACF,YAAM,EAAE,MAAM,IAAI;AAClB,YAAM,SAAS,wBAAwB,KAAK;AAC9C,eAAS;AAAA,IACT,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,WAAK,4CAA2B,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,MACnE,YAAU;AAAA,MAEV;AAAA,oDAAC,yBAAM,SAAQ,SAAQ,WAAU,QAAQ,YAAE,YAAY,GAAE;AAAA,QACzD;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACJ,GAAG,SAAS,OAAO;AAAA,YACpB,UAAU,MAAM,YAAY,OAAO;AAAA;AAAA,QACrC;AAAA,QACA,4CAAC,uCAAgB,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AAAA,QAE1D,4CAAC,0BAAO,MAAK,UAAS,WAAU,QAAO,SACpC,YAAE,YAAY,GACjB;AAAA;AAAA;AAAA,EACF;AAEJ;AAGO,SAAS,eAAe,OAA+B;AAC5D,QAAM,EAAE,EAAE,QAAI,oCAAe;AAC7B,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AACrB,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAS,KAAK;AAEtC,MAAI,MAAM;AACR,WAAO,4CAAC,wDAAsB,MAAK,YAAW,UAAU,CAAC,CAAC,MAAM,UAAU;AAAA,EAC5E;AAEA,MAAI,MAAM;AACR,WAAO,4CAAC,wDAAsB,MAAK,aAAY,UAAU,CAAC,CAAC,MAAM,UAAU;AAAA,EAC7E;AAEA,SACE,6CAAC,wCAAc,UAAU,CAAC,CAAC,MAAM,UAC/B;AAAA,iDAAC,SAAI,WAAU,gCAA+B,OAAO,EAAE,OAAO,SAAS,SAAS,MAAM,WAAW,SAAS,EAAE,GAC1G;AAAA,kDAAC,8BAAW,MAAK,MAAM,YAAE,qBAAqB,GAAE;AAAA,MAChD,6CAAC,8BACE;AAAA,UAAE,sBAAsB;AAAA,QAAG;AAAA,QAC5B,4CAAC,8BAAW,MAAM,SAAS,KAAK,QAAQ,GACrC,YAAE,SAAS,GACd;AAAA,SACF;AAAA,OACF;AAAA,IACA,4CAAC,sBAAmB,QAAQ,MAAM,QAAQ,IAAI,GAAG;AAAA,KACnD;AAEJ;","names":[]}
@@ -42,19 +42,21 @@ var import_predefined_message_card = require("../components/message-cards/predef
42
42
  var import_stack_shared = require("@stackframe/stack-shared");
43
43
  var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
44
44
  var import_caches = require("@stackframe/stack-shared/dist/utils/caches");
45
+ var import_translations = require("../lib/translations");
45
46
  var import_jsx_runtime = require("react/jsx-runtime");
46
47
  var cacheSignInWithMagicLink = (0, import_caches.cacheFunction)(async (stackApp, code) => {
47
48
  return await stackApp.signInWithMagicLink(code);
48
49
  });
49
50
  function MagicLinkCallback(props) {
51
+ const { t } = (0, import_translations.useTranslation)();
50
52
  const stackApp = (0, import__.useStackApp)();
51
53
  const user = (0, import__.useUser)();
52
54
  if (user) {
53
55
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.PredefinedMessageCard, { type: "signedIn", fullPage: !!props.fullPage });
54
56
  }
55
- const invalidJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Invalid Magic Link", fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Please check if you have the correct link. If you continue to have issues, please contact support." }) });
56
- const expiredJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Expired Magic Link", fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Your magic link has expired. Please request a new magic link if you need to sign-in." }) });
57
- const alreadyUsedJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Magic Link Already Used", fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "The magic link has already been used. The link can only be used once. Please request a new magic link if you need to sign-in again." }) });
57
+ const invalidJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: t("Invalid Magic Link"), fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: t("Please check if you have the correct link. If you continue to have issues, please contact support.") }) });
58
+ const expiredJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: t("Expired Magic Link"), fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: t("Your magic link has expired. Please request a new magic link if you need to sign-in.") }) });
59
+ const alreadyUsedJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: t("Magic Link Already Used"), fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: t("The magic link has already been used. The link can only be used once. Please request a new magic link if you need to sign-in again.") }) });
58
60
  if (!props.searchParams?.code) {
59
61
  return invalidJsx;
60
62
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/magic-link-callback.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport { StackClientApp, useStackApp, useUser } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\n\nconst cacheSignInWithMagicLink = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.signInWithMagicLink(code);\n});\n\nexport function MagicLinkCallback(props: {\n searchParams?: Record<string, string>,\n fullPage?: boolean,\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n\n if (user) {\n return <PredefinedMessageCard type='signedIn' fullPage={!!props.fullPage} />;\n }\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Magic Link\" fullPage={!!props.fullPage}>\n <p>Please check if you have the correct link. If you continue to have issues, please contact support.</p>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Magic Link\" fullPage={!!props.fullPage}>\n <p>Your magic link has expired. Please request a new magic link if you need to sign-in.</p>\n </MessageCard>\n );\n\n const alreadyUsedJsx = (\n <MessageCard title=\"Magic Link Already Used\" fullPage={!!props.fullPage}>\n <p>The magic link has already been used. The link can only be used once. Please request a new magic link if you need to sign-in again.</p>\n </MessageCard>\n );\n\n if (!props.searchParams?.code) {\n return invalidJsx;\n }\n\n const error = React.use(cacheSignInWithMagicLink(stackApp, props.searchParams.code));\n\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n return alreadyUsedJsx;\n } else if (error) {\n throw error;\n }\n\n React.use(neverResolve());\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAClB,eAAqD;AACrD,0BAA4B;AAC5B,qCAAsC;AACtC,0BAA4B;AAC5B,sBAA6B;AAC7B,oBAA8B;AAcnB;AAZX,IAAM,+BAA2B,6BAAc,OAAO,UAAgC,SAAiB;AACrG,SAAO,MAAM,SAAS,oBAAoB,IAAI;AAChD,CAAC;AAEM,SAAS,kBAAkB,OAG/B;AACD,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AAErB,MAAI,MAAM;AACR,WAAO,4CAAC,wDAAsB,MAAK,YAAW,UAAU,CAAC,CAAC,MAAM,UAAU;AAAA,EAC5E;AAEA,QAAM,aACJ,4CAAC,mCAAY,OAAM,sBAAqB,UAAU,CAAC,CAAC,MAAM,UACxD,sDAAC,OAAE,gHAAkG,GACvG;AAGF,QAAM,aACJ,4CAAC,mCAAY,OAAM,sBAAqB,UAAU,CAAC,CAAC,MAAM,UACxD,sDAAC,OAAE,kGAAoF,GACzF;AAGF,QAAM,iBACJ,4CAAC,mCAAY,OAAM,2BAA0B,UAAU,CAAC,CAAC,MAAM,UAC7D,sDAAC,OAAE,iJAAmI,GACxI;AAGF,MAAI,CAAC,MAAM,cAAc,MAAM;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,aAAAA,QAAM,IAAI,yBAAyB,UAAU,MAAM,aAAa,IAAI,CAAC;AAEnF,MAAI,iBAAiB,gCAAY,0BAA0B;AACzD,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,yBAAyB;AAC/D,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,6BAA6B;AACnE,WAAO;AAAA,EACT,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,eAAAA,QAAM,QAAI,8BAAa,CAAC;AAC1B;","names":["React"]}
1
+ {"version":3,"sources":["../../src/components-page/magic-link-callback.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport { StackClientApp, useStackApp, useUser } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { useTranslation } from \"../lib/translations\";\n\nconst cacheSignInWithMagicLink = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.signInWithMagicLink(code);\n});\n\nexport function MagicLinkCallback(props: {\n searchParams?: Record<string, string>,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n const stackApp = useStackApp();\n const user = useUser();\n\n if (user) {\n return <PredefinedMessageCard type='signedIn' fullPage={!!props.fullPage} />;\n }\n\n const invalidJsx = (\n <MessageCard title={t(\"Invalid Magic Link\")} fullPage={!!props.fullPage}>\n <p>{t(\"Please check if you have the correct link. If you continue to have issues, please contact support.\")}</p>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title={t(\"Expired Magic Link\")} fullPage={!!props.fullPage}>\n <p>{t(\"Your magic link has expired. Please request a new magic link if you need to sign-in.\")}</p>\n </MessageCard>\n );\n\n const alreadyUsedJsx = (\n <MessageCard title={t(\"Magic Link Already Used\")} fullPage={!!props.fullPage}>\n <p>{t(\"The magic link has already been used. The link can only be used once. Please request a new magic link if you need to sign-in again.\")}</p>\n </MessageCard>\n );\n\n if (!props.searchParams?.code) {\n return invalidJsx;\n }\n\n const error = React.use(cacheSignInWithMagicLink(stackApp, props.searchParams.code));\n\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n return alreadyUsedJsx;\n } else if (error) {\n throw error;\n }\n\n React.use(neverResolve());\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAClB,eAAqD;AACrD,0BAA4B;AAC5B,qCAAsC;AACtC,0BAA4B;AAC5B,sBAA6B;AAC7B,oBAA8B;AAC9B,0BAA+B;AAepB;AAbX,IAAM,+BAA2B,6BAAc,OAAO,UAAgC,SAAiB;AACrG,SAAO,MAAM,SAAS,oBAAoB,IAAI;AAChD,CAAC;AAEM,SAAS,kBAAkB,OAG/B;AACD,QAAM,EAAE,EAAE,QAAI,oCAAe;AAC7B,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AAErB,MAAI,MAAM;AACR,WAAO,4CAAC,wDAAsB,MAAK,YAAW,UAAU,CAAC,CAAC,MAAM,UAAU;AAAA,EAC5E;AAEA,QAAM,aACJ,4CAAC,mCAAY,OAAO,EAAE,oBAAoB,GAAG,UAAU,CAAC,CAAC,MAAM,UAC7D,sDAAC,OAAG,YAAE,oGAAoG,GAAE,GAC9G;AAGF,QAAM,aACJ,4CAAC,mCAAY,OAAO,EAAE,oBAAoB,GAAG,UAAU,CAAC,CAAC,MAAM,UAC7D,sDAAC,OAAG,YAAE,sFAAsF,GAAE,GAChG;AAGF,QAAM,iBACJ,4CAAC,mCAAY,OAAO,EAAE,yBAAyB,GAAG,UAAU,CAAC,CAAC,MAAM,UAClE,sDAAC,OAAG,YAAE,qIAAqI,GAAE,GAC/I;AAGF,MAAI,CAAC,MAAM,cAAc,MAAM;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,aAAAA,QAAM,IAAI,yBAAyB,UAAU,MAAM,aAAa,IAAI,CAAC;AAEnF,MAAI,iBAAiB,gCAAY,0BAA0B;AACzD,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,yBAAyB;AAC/D,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,6BAA6B;AACnE,WAAO;AAAA,EACT,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,eAAAA,QAAM,QAAI,8BAAa,CAAC;AAC1B;","names":["React"]}
@@ -31,8 +31,10 @@ var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
31
31
  var import_message_card = require("../components/message-cards/message-card");
32
32
  var import_stack_ui = require("@stackframe/stack-ui");
33
33
  var import_errors = require("@stackframe/stack-shared/dist/utils/errors");
34
+ var import_translations = require("../lib/translations");
34
35
  var import_jsx_runtime = require("react/jsx-runtime");
35
36
  function OAuthCallback(props) {
37
+ const { t } = (0, import_translations.useTranslation)();
36
38
  const app = (0, import__.useStackApp)();
37
39
  const called = (0, import_react.useRef)(false);
38
40
  const [error, setError] = (0, import_react.useState)(null);
@@ -56,14 +58,13 @@ function OAuthCallback(props) {
56
58
  }, []);
57
59
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_message_card.MessageCard, { title: "Redirecting...", fullPage: props.fullPage, children: [
58
60
  showRedirectLink ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { children: [
59
- "If you are not redirected automatically, ",
60
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.StyledLink, { href: app.urls.home, children: "click here" }),
61
- "."
61
+ t("If you are not redirected automatically, "),
62
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.StyledLink, { href: app.urls.home, children: "t('click here')" })
62
63
  ] }) : null,
63
64
  error ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
64
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Something went wrong while processing the OAuth callback:" }),
65
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: t("Something went wrong while processing the OAuth callback:") }),
65
66
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", { children: JSON.stringify(error, null, 2) }),
66
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "This is most likely an error in Stack. Please report it." })
67
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: t("This is most likely an error in Stack. Please report it.") })
67
68
  ] }) : null
68
69
  ] });
69
70
  }
@@ -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-cards/message-card\";\nimport { StyledLink } from \"@stackframe/stack-ui\";\nimport { captureError } from \"@stackframe/stack-shared/dist/utils/errors\";\n\nexport 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 captureError(\"<OAuthCallback />\", e);\n setError(e);\n }\n if (!hasRedirected && (!error || process.env.NODE_ENV === 'production')) {\n await app.redirectToSignIn({ noRedirectBack: true });\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, <StyledLink href={app.urls.home}>click here</StyledLink>.</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,0BAA4B;AAC5B,sBAA2B;AAC3B,oBAA6B;AA4BL;AA1BjB,SAAS,cAAc,OAA+B;AAC3D,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,QAAS;AACpB,WAAO,UAAU;AACjB,QAAI,gBAAgB;AACpB,QAAI;AACF,sBAAgB,MAAM,IAAI,kBAAkB;AAAA,IAC9C,SAAS,GAAQ;AACf,sCAAa,qBAAqB,CAAC;AACnC,eAAS,CAAC;AAAA,IACZ;AACA,QAAI,CAAC,kBAAkB,CAAC,SAAS,QAAQ,IAAI,aAAa,eAAe;AACvE,YAAM,IAAI,iBAAiB,EAAE,gBAAgB,KAAK,CAAC;AAAA,IACrD;AAAA,EACF,CAAC,GAAG,CAAC,CAAC;AAEN,8BAAU,MAAM;AACd,eAAW,MAAM,oBAAoB,IAAI,GAAG,GAAI;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,SAAO,6CAAC,mCAAY,OAAM,kBAAiB,UAAU,MAAM,UACxD;AAAA,uBAAmB,6CAAC,OAAE;AAAA;AAAA,MAAyC,4CAAC,8BAAW,MAAM,IAAI,KAAK,MAAM,wBAAU;AAAA,MAAa;AAAA,OAAC,IAAO;AAAA,IAC/H,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":[]}
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-cards/message-card\";\nimport { StyledLink } from \"@stackframe/stack-ui\";\nimport { captureError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function OAuthCallback(props: { fullPage?: boolean }) {\n const { t } = useTranslation();\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 captureError(\"<OAuthCallback />\", e);\n setError(e);\n }\n if (!hasRedirected && (!error || process.env.NODE_ENV === 'production')) {\n await app.redirectToSignIn({ noRedirectBack: true });\n }\n }), []);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return <MessageCard title='Redirecting...' fullPage={props.fullPage}>\n {showRedirectLink ? <p>{t('If you are not redirected automatically, ')}<StyledLink href={app.urls.home}>t('click here')</StyledLink></p> : null}\n {error ? <div>\n <p>{t(\"Something went wrong while processing the OAuth callback:\")}</p>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n <p>{t(\"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,0BAA4B;AAC5B,sBAA2B;AAC3B,oBAA6B;AAC7B,0BAA+B;AA6BP;AA3BjB,SAAS,cAAc,OAA+B;AAC3D,QAAM,EAAE,EAAE,QAAI,oCAAe;AAC7B,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,QAAS;AACpB,WAAO,UAAU;AACjB,QAAI,gBAAgB;AACpB,QAAI;AACF,sBAAgB,MAAM,IAAI,kBAAkB;AAAA,IAC9C,SAAS,GAAQ;AACf,sCAAa,qBAAqB,CAAC;AACnC,eAAS,CAAC;AAAA,IACZ;AACA,QAAI,CAAC,kBAAkB,CAAC,SAAS,QAAQ,IAAI,aAAa,eAAe;AACvE,YAAM,IAAI,iBAAiB,EAAE,gBAAgB,KAAK,CAAC;AAAA,IACrD;AAAA,EACF,CAAC,GAAG,CAAC,CAAC;AAEN,8BAAU,MAAM;AACd,eAAW,MAAM,oBAAoB,IAAI,GAAG,GAAI;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,SAAO,6CAAC,mCAAY,OAAM,kBAAiB,UAAU,MAAM,UACxD;AAAA,uBAAmB,6CAAC,OAAG;AAAA,QAAE,2CAA2C;AAAA,MAAE,4CAAC,8BAAW,MAAM,IAAI,KAAK,MAAM,6BAAe;AAAA,OAAa,IAAO;AAAA,IAC1I,QAAQ,6CAAC,SACR;AAAA,kDAAC,OAAG,YAAE,2DAA2D,GAAE;AAAA,MACnE,4CAAC,SAAK,eAAK,UAAU,OAAO,MAAM,CAAC,GAAE;AAAA,MACrC,4CAAC,OAAG,YAAE,0DAA0D,GAAE;AAAA,OACpE,IAAS;AAAA,KACX;AACF;","names":[]}
@@ -51,22 +51,24 @@ var import_form_warning = require("../components/elements/form-warning");
51
51
  var import_maybe_full_page = require("../components/elements/maybe-full-page");
52
52
  var import_message_card = require("../components/message-cards/message-card");
53
53
  var import_predefined_message_card = require("../components/message-cards/predefined-message-card");
54
+ var import_translations = require("../lib/translations");
54
55
  var import_jsx_runtime = require("react/jsx-runtime");
55
- var schema = (0, import_schema_fields.yupObject)({
56
- password: (0, import_schema_fields.yupString)().required("Please enter your password").test({
57
- name: "is-valid-password",
58
- test: (value, ctx) => {
59
- const error = (0, import_password.getPasswordError)(value);
60
- if (error) {
61
- return ctx.createError({ message: error.message });
62
- } else {
63
- return true;
64
- }
65
- }
66
- }),
67
- passwordRepeat: (0, import_schema_fields.yupString)().nullable().oneOf([yup.ref("password"), null], "Passwords do not match").required("Please repeat your password")
68
- });
69
56
  function PasswordResetForm(props) {
57
+ const { t } = (0, import_translations.useTranslation)();
58
+ const schema = (0, import_schema_fields.yupObject)({
59
+ password: (0, import_schema_fields.yupString)().required(t("Please enter your password")).test({
60
+ name: "is-valid-password",
61
+ test: (value, ctx) => {
62
+ const error = (0, import_password.getPasswordError)(value);
63
+ if (error) {
64
+ return ctx.createError({ message: error.message });
65
+ } else {
66
+ return true;
67
+ }
68
+ }
69
+ }),
70
+ passwordRepeat: (0, import_schema_fields.yupString)().nullable().oneOf([yup.ref("password"), null], t("Passwords do not match")).required(t("Please repeat your password"))
71
+ });
70
72
  const { register, handleSubmit, formState: { errors }, clearErrors } = (0, import_react_hook_form.useForm)({
71
73
  resolver: (0, import_yup.yupResolver)(schema)
72
74
  });
@@ -92,10 +94,10 @@ function PasswordResetForm(props) {
92
94
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.PredefinedMessageCard, { type: "passwordReset", fullPage: !!props.fullPage });
93
95
  }
94
96
  if (resetError) {
95
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Failed to reset password", fullPage: !!props.fullPage, children: "Failed to reset password. Please request a new password reset link" });
97
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: t("Failed to reset password"), fullPage: !!props.fullPage, children: t("Failed to reset password. Please request a new password reset link") });
96
98
  }
97
99
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_maybe_full_page.MaybeFullPage, { fullPage: !!props.fullPage, children: [
98
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-center mb-6", style: { width: "380px", padding: props.fullPage ? "1rem" : 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: "Reset Your Password" }) }),
100
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-center mb-6", style: { width: "380px", padding: props.fullPage ? "1rem" : 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: t("Reset Your Password") }) }),
99
101
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
100
102
  "form",
101
103
  {
@@ -103,7 +105,7 @@ function PasswordResetForm(props) {
103
105
  onSubmit: (e) => (0, import_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
104
106
  noValidate: true,
105
107
  children: [
106
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "password", className: "mb-1", children: "New Password" }),
108
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "password", className: "mb-1", children: t("New Password") }),
107
109
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
108
110
  import_stack_ui.PasswordInput,
109
111
  {
@@ -116,7 +118,7 @@ function PasswordResetForm(props) {
116
118
  }
117
119
  ),
118
120
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.password?.message?.toString() }),
119
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "repeat-password", className: "mt-4 mb-1", children: "Repeat New Password" }),
121
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "repeat-password", className: "mt-4 mb-1", children: t("Repeat New Password") }),
120
122
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
121
123
  import_stack_ui.PasswordInput,
122
124
  {
@@ -129,7 +131,7 @@ function PasswordResetForm(props) {
129
131
  }
130
132
  ),
131
133
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.passwordRepeat?.message?.toString() }),
132
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: "Reset Password" })
134
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: t("Reset Password") })
133
135
  ]
134
136
  }
135
137
  )
@@ -142,10 +144,11 @@ function PasswordReset({
142
144
  searchParams,
143
145
  fullPage = false
144
146
  }) {
147
+ const { t } = (0, import_translations.useTranslation)();
145
148
  const stackApp = (0, import__.useStackApp)();
146
- const invalidJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Invalid Password Reset Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "Please double check if you have the correct password reset link." }) });
147
- const expiredJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Expired Password Reset Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "Your password reset link has expired. Please request a new password reset link from the login page." }) });
148
- const usedJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Used Password Reset Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { 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." }) });
149
+ const invalidJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: t("Invalid Password Reset Link"), fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: t("Please double check if you have the correct password reset link.") }) });
150
+ const expiredJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: t("Expired Password Reset Link"), fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: t("Your password reset link has expired. Please request a new password reset link from the login page.") }) });
151
+ const usedJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: t("Used Password Reset Link"), fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: t("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.") }) });
149
152
  const code = searchParams.code;
150
153
  if (!code) {
151
154
  return invalidJsx;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { yupObject, yupString } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Label, PasswordInput, Typography } from \"@stackframe/stack-ui\";\nimport React, { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\n\nconst schema = yupObject({\n password: yupString().required('Please enter your password').test({\n name: 'is-valid-password',\n test: (value, ctx) => {\n const error = getPasswordError(value);\n if (error) {\n return ctx.createError({ message: error.message });\n } else {\n return true;\n }\n }\n }),\n passwordRepeat: yupString().nullable().oneOf([yup.ref('password'), null], 'Passwords do not match').required('Please repeat your password')\n});\n\nexport default function PasswordResetForm(props: {\n code: string,\n fullPage?: boolean,\n}) {\n const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const stackApp = useStackApp();\n const [finished, setFinished] = useState(false);\n const [resetError, setResetError] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { password } = data;\n const errorCode = await stackApp.resetPassword({ password, code: props.code });\n if (errorCode) {\n setResetError(true);\n return;\n }\n\n setFinished(true);\n } finally {\n setLoading(false);\n }\n };\n\n if (finished) {\n return <PredefinedMessageCard type='passwordReset' fullPage={!!props.fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title=\"Failed to reset password\" fullPage={!!props.fullPage}>\n Failed to reset password. Please request a new password reset link\n </MessageCard>\n );\n }\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className=\"text-center mb-6\" style={{ width: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <Typography type='h2'>Reset Your Password</Typography>\n </div>\n\n <form\n style={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"password\" className=\"mb-1\">New Password</Label>\n <PasswordInput\n id=\"password\"\n {...register('password')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">Repeat New Password</Label>\n <PasswordInput\n id=\"repeat-password\"\n {...register('passwordRepeat')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n Reset Password\n </Button>\n </form>\n </MaybeFullPage>\n );\n}\n\n\nconst cachedVerifyPasswordResetCode = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.verifyPasswordResetCode(code);\n});\n\nexport 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 <Typography>Please double check if you have the correct password reset link.</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Password Reset Link\" fullPage={fullPage}>\n <Typography>Your password reset link has expired. Please request a new password reset link from the login page.</Typography>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title=\"Used Password Reset Link\" fullPage={fullPage}>\n <Typography>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.</Typography>\n </MessageCard>\n );\n\n const code = searchParams.code;\n if (!code) {\n return invalidJsx;\n }\n\n const error = React.use(cachedVerifyPasswordResetCode(stackApp, code));\n\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n return usedJsx;\n } else if (error) {\n throw error;\n }\n\n return <PasswordResetForm code={code} fullPage={fullPage} />;\n}\n"],"mappings":"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","names":["React"]}
1
+ {"version":3,"sources":["../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { yupObject, yupString } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Label, PasswordInput, Typography } from \"@stackframe/stack-ui\";\nimport React, { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport default function PasswordResetForm(props: {\n code: string,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n password: yupString().required(t(\"Please enter your password\")).test({\n name: 'is-valid-password',\n test: (value, ctx) => {\n const error = getPasswordError(value);\n if (error) {\n return ctx.createError({ message: error.message });\n } else {\n return true;\n }\n }\n }),\n passwordRepeat: yupString().nullable().oneOf([yup.ref('password'), null], t(\"Passwords do not match\")).required(t(\"Please repeat your password\"))\n });\n\n const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const stackApp = useStackApp();\n const [finished, setFinished] = useState(false);\n const [resetError, setResetError] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { password } = data;\n const errorCode = await stackApp.resetPassword({ password, code: props.code });\n if (errorCode) {\n setResetError(true);\n return;\n }\n\n setFinished(true);\n } finally {\n setLoading(false);\n }\n };\n\n if (finished) {\n return <PredefinedMessageCard type='passwordReset' fullPage={!!props.fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title={t(\"Failed to reset password\")} fullPage={!!props.fullPage}>\n {t(\"Failed to reset password. Please request a new password reset link\")}\n </MessageCard>\n );\n }\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className=\"text-center mb-6\" style={{ width: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <Typography type='h2'>{t(\"Reset Your Password\")}</Typography>\n </div>\n\n <form\n style={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"password\" className=\"mb-1\">{t(\"New Password\")}</Label>\n <PasswordInput\n id=\"password\"\n {...register('password')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">{t(\"Repeat New Password\")}</Label>\n <PasswordInput\n id=\"repeat-password\"\n {...register('passwordRepeat')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t(\"Reset Password\")}\n </Button>\n </form>\n </MaybeFullPage>\n );\n}\n\n\nconst cachedVerifyPasswordResetCode = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.verifyPasswordResetCode(code);\n});\n\nexport function PasswordReset({\n searchParams,\n fullPage = false,\n}: {\n searchParams: Record<string, string>,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title={t(\"Invalid Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"Please double check if you have the correct password reset link.\")}</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title={t(\"Expired Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"Your password reset link has expired. Please request a new password reset link from the login page.\")}</Typography>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title={t(\"Used Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"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.\")}</Typography>\n </MessageCard>\n );\n\n const code = searchParams.code;\n if (!code) {\n return invalidJsx;\n }\n\n const error = React.use(cachedVerifyPasswordResetCode(stackApp, code));\n\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n return usedJsx;\n } else if (error) {\n throw error;\n }\n\n return <PasswordResetForm code={code} fullPage={fullPage} />;\n}\n"],"mappings":"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","names":["React"]}
@@ -35,11 +35,13 @@ var import_react_hook_form = require("react-hook-form");
35
35
  var import__ = require("..");
36
36
  var import_form_warning = require("../components/elements/form-warning");
37
37
  var import_maybe_full_page = require("../components/elements/maybe-full-page");
38
+ var import_translations = require("../lib/translations");
38
39
  var import_jsx_runtime = require("react/jsx-runtime");
39
- var schema = (0, import_schema_fields.yupObject)({
40
- displayName: (0, import_schema_fields.yupString)().required("Please enter a team name")
41
- });
42
40
  function TeamCreation(props) {
41
+ const { t } = (0, import_translations.useTranslation)();
42
+ const schema = (0, import_schema_fields.yupObject)({
43
+ displayName: (0, import_schema_fields.yupString)().required(t("Please enter a team name"))
44
+ });
43
45
  const { register, handleSubmit, formState: { errors } } = (0, import_react_hook_form.useForm)({
44
46
  resolver: (0, import_yup.yupResolver)(schema)
45
47
  });
@@ -49,7 +51,7 @@ function TeamCreation(props) {
49
51
  const [loading, setLoading] = (0, import_react.useState)(false);
50
52
  const router = (0, import_navigation.useRouter)();
51
53
  if (!project.config.clientTeamCreationEnabled) {
52
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.MessageCard, { title: "Team creation is not enabled" });
54
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.MessageCard, { title: t("Team creation is not enabled") });
53
55
  }
54
56
  const onSubmit = async (data) => {
55
57
  setLoading(true);
@@ -61,7 +63,7 @@ function TeamCreation(props) {
61
63
  }
62
64
  };
63
65
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_maybe_full_page.MaybeFullPage, { fullPage: !!props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "stack-scope flex flex-col items-stretch", style: { width: "380px", padding: props.fullPage ? "1rem" : 0 }, children: [
64
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-center mb-6", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: "Create a Team" }) }),
66
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-center mb-6", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: t("Create a Team") }) }),
65
67
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
66
68
  "form",
67
69
  {
@@ -69,7 +71,7 @@ function TeamCreation(props) {
69
71
  onSubmit: (e) => (0, import_promises.runAsynchronously)(handleSubmit(onSubmit)(e)),
70
72
  noValidate: true,
71
73
  children: [
72
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "display-name", className: "mb-1", children: "Display name" }),
74
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "display-name", className: "mb-1", children: t("Display name") }),
73
75
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
74
76
  import_stack_ui.Input,
75
77
  {
@@ -78,7 +80,7 @@ function TeamCreation(props) {
78
80
  }
79
81
  ),
80
82
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.displayName?.message?.toString() }),
81
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: "Create" })
83
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: t("Create") })
82
84
  ]
83
85
  }
84
86
  )