@stackframe/stack 2.5.33 → 2.5.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/dist/components/credential-sign-in.js +14 -12
- package/dist/components/credential-sign-in.js.map +1 -1
- package/dist/components/credential-sign-up.js +17 -15
- package/dist/components/credential-sign-up.js.map +1 -1
- package/dist/components/elements/maybe-full-page.d.mts +2 -2
- package/dist/components/elements/maybe-full-page.d.ts +2 -2
- package/dist/components/elements/sidebar-layout.d.mts +5 -5
- package/dist/components/elements/sidebar-layout.d.ts +5 -5
- package/dist/components/elements/sidebar-layout.js +15 -7
- package/dist/components/elements/sidebar-layout.js.map +1 -1
- package/dist/components/elements/user-avatar.js +1 -1
- package/dist/components/elements/user-avatar.js.map +1 -1
- package/dist/components/magic-link-sign-in.js +11 -9
- package/dist/components/magic-link-sign-in.js.map +1 -1
- package/dist/components/message-cards/message-card.d.mts +2 -2
- package/dist/components/message-cards/message-card.d.ts +2 -2
- package/dist/components/oauth-button-group.js.map +1 -1
- package/dist/components/oauth-button.js +46 -2
- package/dist/components/oauth-button.js.map +1 -1
- package/dist/components/profile-image-editor.js +7 -5
- package/dist/components/profile-image-editor.js.map +1 -1
- package/dist/components/selected-team-switcher.js +7 -4
- package/dist/components/selected-team-switcher.js.map +1 -1
- package/dist/components/team-icon.js.map +1 -1
- package/dist/components/user-button.d.mts +2 -2
- package/dist/components/user-button.d.ts +2 -2
- package/dist/components/user-button.js +11 -11
- package/dist/components/user-button.js.map +1 -1
- package/dist/components-page/account-settings.d.mts +4 -2
- package/dist/components-page/account-settings.d.ts +4 -2
- package/dist/components-page/account-settings.js +406 -221
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.js +11 -7
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/email-verification.js +4 -2
- package/dist/components-page/email-verification.js.map +1 -1
- package/dist/components-page/error-page.js +6 -4
- package/dist/components-page/error-page.js.map +1 -1
- package/dist/components-page/forgot-password.js +12 -8
- package/dist/components-page/forgot-password.js.map +1 -1
- package/dist/components-page/magic-link-callback.js +5 -3
- package/dist/components-page/magic-link-callback.js.map +1 -1
- package/dist/components-page/oauth-callback.js +6 -5
- package/dist/components-page/oauth-callback.js.map +1 -1
- package/dist/components-page/password-reset.js +25 -22
- package/dist/components-page/password-reset.js.map +1 -1
- package/dist/components-page/stack-handler.d.mts +1 -0
- package/dist/components-page/stack-handler.d.ts +1 -0
- package/dist/components-page/team-creation.js +9 -7
- package/dist/components-page/team-creation.js.map +1 -1
- package/dist/components-page/team-invitation.js +14 -11
- package/dist/components-page/team-invitation.js.map +1 -1
- package/dist/esm/components/credential-sign-in.js +14 -12
- package/dist/esm/components/credential-sign-in.js.map +1 -1
- package/dist/esm/components/credential-sign-up.js +17 -15
- package/dist/esm/components/credential-sign-up.js.map +1 -1
- package/dist/esm/components/elements/sidebar-layout.js +15 -7
- package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
- package/dist/esm/components/elements/user-avatar.js +1 -1
- package/dist/esm/components/elements/user-avatar.js.map +1 -1
- package/dist/esm/components/magic-link-sign-in.js +11 -9
- package/dist/esm/components/magic-link-sign-in.js.map +1 -1
- package/dist/esm/components/oauth-button-group.js.map +1 -1
- package/dist/esm/components/oauth-button.js +46 -2
- package/dist/esm/components/oauth-button.js.map +1 -1
- package/dist/esm/components/profile-image-editor.js +7 -5
- package/dist/esm/components/profile-image-editor.js.map +1 -1
- package/dist/esm/components/selected-team-switcher.js +7 -4
- package/dist/esm/components/selected-team-switcher.js.map +1 -1
- package/dist/esm/components/team-icon.js.map +1 -1
- package/dist/esm/components/user-button.js +12 -15
- package/dist/esm/components/user-button.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +406 -222
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js +11 -7
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/email-verification.js +4 -2
- package/dist/esm/components-page/email-verification.js.map +1 -1
- package/dist/esm/components-page/error-page.js +6 -4
- package/dist/esm/components-page/error-page.js.map +1 -1
- package/dist/esm/components-page/forgot-password.js +12 -8
- package/dist/esm/components-page/forgot-password.js.map +1 -1
- package/dist/esm/components-page/magic-link-callback.js +5 -3
- package/dist/esm/components-page/magic-link-callback.js.map +1 -1
- package/dist/esm/components-page/oauth-callback.js +6 -5
- package/dist/esm/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/components-page/password-reset.js +25 -22
- package/dist/esm/components-page/password-reset.js.map +1 -1
- package/dist/esm/components-page/team-creation.js +9 -7
- package/dist/esm/components-page/team-creation.js.map +1 -1
- package/dist/esm/components-page/team-invitation.js +14 -11
- package/dist/esm/components-page/team-invitation.js.map +1 -1
- package/dist/esm/generated/global-css.js +1 -1
- package/dist/esm/generated/global-css.js.map +1 -1
- package/dist/esm/generated/quetzal-translations.js +1629 -0
- package/dist/esm/generated/quetzal-translations.js.map +1 -0
- package/dist/esm/lib/stack-app.js +8 -1
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/lib/translations.js +20 -0
- package/dist/esm/lib/translations.js.map +1 -0
- package/dist/esm/providers/stack-provider.js +4 -2
- package/dist/esm/providers/stack-provider.js.map +1 -1
- package/dist/esm/providers/theme-provider.js.map +1 -1
- package/dist/esm/providers/translation-provider-client.js +18 -0
- package/dist/esm/providers/translation-provider-client.js.map +1 -0
- package/dist/esm/providers/translation-provider.js +12 -0
- package/dist/esm/providers/translation-provider.js.map +1 -0
- package/dist/esm/utils/browser-script.js +43 -8
- package/dist/esm/utils/browser-script.js.map +1 -1
- package/dist/generated/global-css.d.mts +1 -1
- package/dist/generated/global-css.d.ts +1 -1
- package/dist/generated/global-css.js +1 -1
- package/dist/generated/global-css.js.map +1 -1
- package/dist/generated/quetzal-translations.d.mts +4 -0
- package/dist/generated/quetzal-translations.d.ts +4 -0
- package/dist/generated/quetzal-translations.js +1655 -0
- package/dist/generated/quetzal-translations.js.map +1 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/lib/stack-app.d.mts +4 -1
- package/dist/lib/stack-app.d.ts +4 -1
- package/dist/lib/stack-app.js +8 -1
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/lib/translations.d.mts +5 -0
- package/dist/lib/translations.d.ts +5 -0
- package/dist/lib/translations.js +55 -0
- package/dist/lib/translations.js.map +1 -0
- package/dist/providers/stack-provider-client.d.mts +3 -3
- package/dist/providers/stack-provider-client.d.ts +3 -3
- package/dist/providers/stack-provider.d.mts +6 -3
- package/dist/providers/stack-provider.d.ts +6 -3
- package/dist/providers/stack-provider.js +4 -2
- package/dist/providers/stack-provider.js.map +1 -1
- package/dist/providers/theme-provider.d.mts +2 -2
- package/dist/providers/theme-provider.d.ts +2 -2
- package/dist/providers/theme-provider.js.map +1 -1
- package/dist/providers/translation-provider-client.d.mts +14 -0
- package/dist/providers/translation-provider-client.d.ts +14 -0
- package/dist/providers/translation-provider-client.js +43 -0
- package/dist/providers/translation-provider-client.js.map +1 -0
- package/dist/providers/translation-provider.d.mts +9 -0
- package/dist/providers/translation-provider.d.ts +9 -0
- package/dist/providers/translation-provider.js +37 -0
- package/dist/providers/translation-provider.js.map +1 -0
- package/dist/utils/browser-script.js +43 -8
- package/dist/utils/browser-script.js.map +1 -1
- package/package.json +20 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
# @stackframe/stack
|
|
2
2
|
|
|
3
|
+
## 2.5.37
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- client side account deletion; new account setting style;
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @stackframe/stack-shared@2.5.37
|
|
10
|
+
- @stackframe/stack-ui@2.5.37
|
|
11
|
+
- @stackframe/stack-sc@2.5.37
|
|
12
|
+
|
|
13
|
+
## 2.5.36
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- added apple oauth
|
|
18
|
+
- Updated dependencies
|
|
19
|
+
- @stackframe/stack-shared@2.5.36
|
|
20
|
+
- @stackframe/stack-sc@2.5.36
|
|
21
|
+
- @stackframe/stack-ui@2.5.36
|
|
22
|
+
|
|
23
|
+
## 2.5.35
|
|
24
|
+
|
|
25
|
+
### Patch Changes
|
|
26
|
+
|
|
27
|
+
- Doc improvements
|
|
28
|
+
- Updated dependencies
|
|
29
|
+
- @stackframe/stack-shared@2.5.35
|
|
30
|
+
- @stackframe/stack-ui@2.5.35
|
|
31
|
+
- @stackframe/stack-sc@2.5.35
|
|
32
|
+
|
|
33
|
+
## 2.5.34
|
|
34
|
+
|
|
35
|
+
### Patch Changes
|
|
36
|
+
|
|
37
|
+
- Internationalization
|
|
38
|
+
- Updated dependencies
|
|
39
|
+
- @stackframe/stack-shared@2.5.34
|
|
40
|
+
- @stackframe/stack-ui@2.5.34
|
|
41
|
+
- @stackframe/stack-sc@2.5.34
|
|
42
|
+
|
|
3
43
|
## 2.5.33
|
|
4
44
|
|
|
5
45
|
### Patch Changes
|
|
@@ -25,20 +25,22 @@ __export(credential_sign_in_exports, {
|
|
|
25
25
|
CredentialSignIn: () => CredentialSignIn
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(credential_sign_in_exports);
|
|
28
|
-
var import_react_hook_form = require("react-hook-form");
|
|
29
28
|
var import_yup = require("@hookform/resolvers/yup");
|
|
30
|
-
var
|
|
31
|
-
var import__ = require("..");
|
|
29
|
+
var import_schema_fields = require("@stackframe/stack-shared/dist/schema-fields");
|
|
32
30
|
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
33
31
|
var import_stack_ui = require("@stackframe/stack-ui");
|
|
34
32
|
var import_react = require("react");
|
|
35
|
-
var
|
|
33
|
+
var import_react_hook_form = require("react-hook-form");
|
|
34
|
+
var import__ = require("..");
|
|
35
|
+
var import_translations = require("../lib/translations");
|
|
36
|
+
var import_form_warning = require("./elements/form-warning");
|
|
36
37
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
37
|
-
var schema = (0, import_schema_fields.yupObject)({
|
|
38
|
-
email: (0, import_schema_fields.yupString)().email("Please enter a valid email").required("Please enter your email"),
|
|
39
|
-
password: (0, import_schema_fields.yupString)().required("Please enter your password")
|
|
40
|
-
});
|
|
41
38
|
function CredentialSignIn() {
|
|
39
|
+
const { t } = (0, import_translations.useTranslation)();
|
|
40
|
+
const schema = (0, import_schema_fields.yupObject)({
|
|
41
|
+
email: (0, import_schema_fields.yupString)().email(t("Please enter a valid email")).required(t("Please enter your email")),
|
|
42
|
+
password: (0, import_schema_fields.yupString)().required(t("Please enter your password"))
|
|
43
|
+
});
|
|
42
44
|
const { register, handleSubmit, setError, formState: { errors } } = (0, import_react_hook_form.useForm)({
|
|
43
45
|
resolver: (0, import_yup.yupResolver)(schema)
|
|
44
46
|
});
|
|
@@ -64,7 +66,7 @@ function CredentialSignIn() {
|
|
|
64
66
|
onSubmit: (e) => (0, import_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
|
|
65
67
|
noValidate: true,
|
|
66
68
|
children: [
|
|
67
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "email", className: "mb-1", children: "Email" }),
|
|
69
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "email", className: "mb-1", children: t("Email") }),
|
|
68
70
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
69
71
|
import_stack_ui.Input,
|
|
70
72
|
{
|
|
@@ -74,7 +76,7 @@ function CredentialSignIn() {
|
|
|
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.Label, { htmlFor: "password", className: "mt-4 mb-1", children: "Password" }),
|
|
79
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "password", className: "mt-4 mb-1", children: t("Password") }),
|
|
78
80
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
79
81
|
import_stack_ui.PasswordInput,
|
|
80
82
|
{
|
|
@@ -83,8 +85,8 @@ function CredentialSignIn() {
|
|
|
83
85
|
}
|
|
84
86
|
),
|
|
85
87
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.password?.message?.toString() }),
|
|
86
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.StyledLink, { href: app.urls.forgotPassword, className: "mt-1 text-sm", children: "Forgot password?" }),
|
|
87
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: "Sign In" })
|
|
88
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.StyledLink, { href: app.urls.forgotPassword, className: "mt-1 text-sm", children: t("Forgot password?") }),
|
|
89
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: t("Sign In") })
|
|
88
90
|
]
|
|
89
91
|
}
|
|
90
92
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/credential-sign-in.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/components/credential-sign-in.tsx"],"sourcesContent":["'use client';\n\nimport { 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, PasswordInput, StyledLink } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"..\";\nimport { useTranslation } from \"../lib/translations\";\nimport { FormWarningText } from \"./elements/form-warning\";\n\nexport function CredentialSignIn() {\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 password: yupString().required(t('Please enter your password'))\n });\n\n const { register, handleSubmit, setError, formState: { errors } } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n\n try {\n const { email, password } = data;\n const error = await app.signInWithCredential({\n email,\n password,\n });\n setError('email', { type: 'manual', message: error?.message });\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('Email')}</Label>\n <Input\n id=\"email\"\n type=\"email\"\n {...register('email')}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" className=\"mt-4 mb-1\">{t('Password')}</Label>\n <PasswordInput\n id=\"password\"\n {...register('password')}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <StyledLink href={app.urls.forgotPassword} className=\"mt-1 text-sm\">\n {t('Forgot password?')}\n </StyledLink>\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Sign In')}\n </Button>\n </form>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,iBAA4B;AAC5B,2BAAqC;AACrC,sBAA2C;AAC3C,sBAAgE;AAChE,mBAAyB;AACzB,6BAAwB;AAExB,eAA4B;AAC5B,0BAA+B;AAC/B,0BAAgC;AAgC5B;AA9BG,SAAS,mBAAmB;AACjC,QAAM,EAAE,EAAE,QAAI,oCAAe;AAE7B,QAAM,aAAS,gCAAU;AAAA,IACvB,WAAO,gCAAU,EAAE,MAAM,EAAE,4BAA4B,CAAC,EAAE,SAAS,EAAE,yBAAyB,CAAC;AAAA,IAC/F,cAAU,gCAAU,EAAE,SAAS,EAAE,4BAA4B,CAAC;AAAA,EAChE,CAAC;AAED,QAAM,EAAE,UAAU,cAAc,UAAU,WAAW,EAAE,OAAO,EAAE,QAAI,gCAAQ;AAAA,IAC1E,cAAU,wBAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,UAAM,sBAAY;AACxB,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,KAAK;AAE5C,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AAEf,QAAI;AACF,YAAM,EAAE,OAAO,SAAS,IAAI;AAC5B,YAAM,QAAQ,MAAM,IAAI,qBAAqB;AAAA,QAC3C;AAAA,QACA;AAAA,MACF,CAAC;AACD,eAAS,SAAS,EAAE,MAAM,UAAU,SAAS,OAAO,QAAQ,CAAC;AAAA,IAC/D,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,OAAO,GAAE;AAAA,QACpD;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACJ,GAAG,SAAS,OAAO;AAAA;AAAA,QACtB;AAAA,QACA,4CAAC,uCAAgB,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AAAA,QAE1D,4CAAC,yBAAM,SAAQ,YAAW,WAAU,aAAa,YAAE,UAAU,GAAE;AAAA,QAC/D;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACF,GAAG,SAAS,UAAU;AAAA;AAAA,QACzB;AAAA,QACA,4CAAC,uCAAgB,MAAM,OAAO,UAAU,SAAS,SAAS,GAAG;AAAA,QAE7D,4CAAC,8BAAW,MAAM,IAAI,KAAK,gBAAgB,WAAU,gBAClD,YAAE,kBAAkB,GACvB;AAAA,QAEA,4CAAC,0BAAO,MAAK,UAAS,WAAU,QAAO,SACpC,YAAE,SAAS,GACd;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -44,24 +44,26 @@ var import_react = require("react");
|
|
|
44
44
|
var import_react_hook_form = require("react-hook-form");
|
|
45
45
|
var yup = __toESM(require("yup"));
|
|
46
46
|
var import__ = require("..");
|
|
47
|
+
var import_translations = require("../lib/translations");
|
|
47
48
|
var import_form_warning = require("./elements/form-warning");
|
|
48
49
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
49
|
-
var schema = (0, import_schema_fields.yupObject)({
|
|
50
|
-
email: (0, import_schema_fields.yupString)().email("Please enter a valid email").required("Please enter your email"),
|
|
51
|
-
password: (0, import_schema_fields.yupString)().required("Please enter your password").test({
|
|
52
|
-
name: "is-valid-password",
|
|
53
|
-
test: (value, ctx) => {
|
|
54
|
-
const error = (0, import_password.getPasswordError)(value);
|
|
55
|
-
if (error) {
|
|
56
|
-
return ctx.createError({ message: error.message });
|
|
57
|
-
} else {
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}),
|
|
62
|
-
passwordRepeat: (0, import_schema_fields.yupString)().nullable().oneOf([yup.ref("password"), "", null], "Passwords do not match").required("Please repeat your password")
|
|
63
|
-
});
|
|
64
50
|
function CredentialSignUp() {
|
|
51
|
+
const { t } = (0, import_translations.useTranslation)();
|
|
52
|
+
const schema = (0, import_schema_fields.yupObject)({
|
|
53
|
+
email: (0, import_schema_fields.yupString)().email(t("Please enter a valid email")).required(t("Please enter your email")),
|
|
54
|
+
password: (0, import_schema_fields.yupString)().required(t("Please enter your password")).test({
|
|
55
|
+
name: "is-valid-password",
|
|
56
|
+
test: (value, ctx) => {
|
|
57
|
+
const error = (0, import_password.getPasswordError)(value);
|
|
58
|
+
if (error) {
|
|
59
|
+
return ctx.createError({ message: error.message });
|
|
60
|
+
} else {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}),
|
|
65
|
+
passwordRepeat: (0, import_schema_fields.yupString)().nullable().oneOf([yup.ref("password"), "", null], t("Passwords do not match")).required(t("Please repeat your password"))
|
|
66
|
+
});
|
|
65
67
|
const { register, handleSubmit, setError, formState: { errors }, clearErrors } = (0, import_react_hook_form.useForm)({
|
|
66
68
|
resolver: (0, import_yup.yupResolver)(schema)
|
|
67
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/credential-sign-up.tsx"],"sourcesContent":["'use client';\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { yupObject, yupString } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { runAsynchronously, runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label, PasswordInput } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"..\";\nimport { FormWarningText } from \"./elements/form-warning\";\n\
|
|
1
|
+
{"version":3,"sources":["../../src/components/credential-sign-up.tsx"],"sourcesContent":["'use client';\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { yupObject, yupString } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { runAsynchronously, runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label, PasswordInput } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"..\";\nimport { useTranslation } from \"../lib/translations\";\nimport { FormWarningText } from \"./elements/form-warning\";\n\nexport function CredentialSignUp() {\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 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, setError, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const app = 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, password } = data;\n const error = await app.signUpWithCredential({ email, password });\n setError('email', { type: 'manual', message: error?.message });\n } finally {\n setLoading(false);\n }\n };\n\n const registerPassword = register('password');\n const registerPasswordRepeat = register('passwordRepeat');\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\">Email</Label>\n <Input id=\"email\" type=\"email\" {...register('email')}/>\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Label htmlFor=\"password\" className=\"mt-4 mb-1\">Password</Label>\n <PasswordInput\n id=\"password\"\n {...registerPassword}\n onChange={(e) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n runAsynchronously(registerPassword.onChange(e));\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">Repeat Password</Label>\n <PasswordInput\n id=\"repeat-password\"\n {...registerPasswordRepeat}\n onChange={(e) => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n runAsynchronously(registerPasswordRepeat.onChange(e));\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n Sign Up\n </Button>\n </form>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
2
|
+
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
declare function MaybeFullPage({ children, fullPage, }: {
|
|
5
|
-
children:
|
|
5
|
+
children: React__default.ReactNode;
|
|
6
6
|
fullPage: boolean;
|
|
7
7
|
size?: number;
|
|
8
8
|
containerClassName?: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
2
|
+
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
declare function MaybeFullPage({ children, fullPage, }: {
|
|
5
|
-
children:
|
|
5
|
+
children: React__default.ReactNode;
|
|
6
6
|
fullPage: boolean;
|
|
7
7
|
size?: number;
|
|
8
8
|
containerClassName?: string;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { LucideIcon } from 'lucide-react';
|
|
3
|
-
import
|
|
3
|
+
import React__default, { ReactNode } from 'react';
|
|
4
4
|
|
|
5
5
|
type SidebarItem = {
|
|
6
|
-
title:
|
|
6
|
+
title: React__default.ReactNode;
|
|
7
7
|
type: 'item' | 'divider';
|
|
8
|
-
description?:
|
|
8
|
+
description?: React__default.ReactNode;
|
|
9
9
|
subpath?: string;
|
|
10
10
|
icon?: LucideIcon;
|
|
11
|
-
content?:
|
|
12
|
-
contentTitle?:
|
|
11
|
+
content?: React__default.ReactNode;
|
|
12
|
+
contentTitle?: React__default.ReactNode;
|
|
13
13
|
};
|
|
14
14
|
declare function SidebarLayout(props: {
|
|
15
15
|
items: SidebarItem[];
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { LucideIcon } from 'lucide-react';
|
|
3
|
-
import
|
|
3
|
+
import React__default, { ReactNode } from 'react';
|
|
4
4
|
|
|
5
5
|
type SidebarItem = {
|
|
6
|
-
title:
|
|
6
|
+
title: React__default.ReactNode;
|
|
7
7
|
type: 'item' | 'divider';
|
|
8
|
-
description?:
|
|
8
|
+
description?: React__default.ReactNode;
|
|
9
9
|
subpath?: string;
|
|
10
10
|
icon?: LucideIcon;
|
|
11
|
-
content?:
|
|
12
|
-
contentTitle?:
|
|
11
|
+
content?: React__default.ReactNode;
|
|
12
|
+
contentTitle?: React__default.ReactNode;
|
|
13
13
|
};
|
|
14
14
|
declare function SidebarLayout(props: {
|
|
15
15
|
items: SidebarItem[];
|
|
@@ -72,13 +72,13 @@ function DesktopLayout(props) {
|
|
|
72
72
|
props.title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mb-2 ml-2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", className: "text-lg font-semibold text-zinc-800 dark:text-zinc-300", children: props.title }) }),
|
|
73
73
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Items, { items: props.items, basePath: props.basePath, selectedIndex: props.selectedIndex })
|
|
74
74
|
] }),
|
|
75
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
76
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mb-
|
|
77
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h4", children: selectedItem.title }),
|
|
75
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex-1 flex flex-col items-center gap-4 py-2 px-4", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col max-w-[800px] w-[800px]", children: [
|
|
76
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-4 mb-6", children: [
|
|
77
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h4", className: "font-semibold", children: selectedItem.title }),
|
|
78
78
|
selectedItem.description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { variant: "secondary", type: "label", children: selectedItem.description })
|
|
79
79
|
] }),
|
|
80
80
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex-1", children: selectedItem.content })
|
|
81
|
-
] })
|
|
81
|
+
] }) })
|
|
82
82
|
] });
|
|
83
83
|
}
|
|
84
84
|
function MobileLayout(props) {
|
|
@@ -94,9 +94,17 @@ function MobileLayout(props) {
|
|
|
94
94
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col", children: [
|
|
95
95
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex justify-between", children: [
|
|
96
96
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h4", children: selectedItem.title }),
|
|
97
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
98
|
+
import_stack_ui.Button,
|
|
99
|
+
{
|
|
100
|
+
variant: "ghost",
|
|
101
|
+
size: "icon",
|
|
102
|
+
onClick: () => {
|
|
103
|
+
router.push(props.basePath);
|
|
104
|
+
},
|
|
105
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.XIcon, { className: "h-5 w-5" })
|
|
106
|
+
}
|
|
107
|
+
)
|
|
100
108
|
] }),
|
|
101
109
|
selectedItem.description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { variant: "secondary", type: "label", children: selectedItem.description })
|
|
102
110
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/elements/sidebar-layout.tsx"],"sourcesContent":["'use client';\n\nimport { Button, Typography, cn } from '@stackframe/stack-ui';\nimport { LucideIcon, XIcon } from 'lucide-react';\nimport { usePathname, useRouter } from 'next/navigation';\nimport React, { ReactNode } from 'react';\n\nexport type SidebarItem = {\n title: React.ReactNode,\n type: 'item' | 'divider',\n description?: React.ReactNode,\n subpath?: string,\n icon?: LucideIcon,\n content?: React.ReactNode,\n contentTitle?: React.ReactNode,\n}\n\nexport function SidebarLayout(props: { items: SidebarItem[], title?: ReactNode, basePath: string, className?: string }) {\n const pathname = usePathname();\n const selectedIndex = props.items.findIndex(item => item.subpath && (props.basePath + item.subpath === pathname));\n const router = useRouter();\n if (pathname !== props.basePath && selectedIndex === -1) {\n router.push(props.basePath);\n }\n\n return (\n <>\n <div className={cn(\"hidden sm:flex stack-scope h-full\", props.className)}>\n <DesktopLayout items={props.items} title={props.title} selectedIndex={selectedIndex} basePath={props.basePath} />\n </div>\n <div className={cn(\"sm:hidden stack-scope h-full\", props.className)}>\n <MobileLayout items={props.items} title={props.title} selectedIndex={selectedIndex} basePath={props.basePath} />\n </div>\n </>\n );\n}\n\nfunction Items(props: { items: SidebarItem[], basePath: string, selectedIndex: number }) {\n const router = useRouter();\n\n return props.items.map((item, index) => (\n item.type === 'item' ?\n <Button\n key={index}\n variant='ghost'\n size='sm'\n className={cn(\n props.selectedIndex === index && \"bg-muted\",\n \"justify-start text-md text-zinc-800 dark:text-zinc-300 px-2\",\n )}\n onClick={() => {\n if (item.subpath) {\n router.push(props.basePath + item.subpath);\n }\n }}\n >\n {item.icon && <item.icon className=\"mr-2 h-4 w-4\" />}\n {item.title}\n </Button> :\n <Typography key={index}>\n {item.title}\n </Typography>\n ));\n\n}\n\nfunction DesktopLayout(props: { items: SidebarItem[], title?: ReactNode, selectedIndex: number, basePath: string }) {\n const selectedItem = props.items[props.selectedIndex === -1 ? 0 : props.selectedIndex];\n\n return (\n <div className=\"stack-scope flex w-full h-full\">\n <div className=\"flex w-[200px] border-r flex-col items-stretch gap-2 p-2\">\n {props.title && <div className='mb-2 ml-2'>\n <Typography type='h2' className=\"text-lg font-semibold text-zinc-800 dark:text-zinc-300\">{props.title}</Typography>\n </div>}\n\n <Items items={props.items} basePath={props.basePath} selectedIndex={props.selectedIndex} />\n </div>\n <div className=\"flex-1 flex flex-col gap-4 py-2 px-4\">\n <div className='
|
|
1
|
+
{"version":3,"sources":["../../../src/components/elements/sidebar-layout.tsx"],"sourcesContent":["'use client';\n\nimport { Button, Typography, cn } from '@stackframe/stack-ui';\nimport { LucideIcon, XIcon } from 'lucide-react';\nimport { usePathname, useRouter } from 'next/navigation';\nimport React, { ReactNode } from 'react';\n\nexport type SidebarItem = {\n title: React.ReactNode,\n type: 'item' | 'divider',\n description?: React.ReactNode,\n subpath?: string,\n icon?: LucideIcon,\n content?: React.ReactNode,\n contentTitle?: React.ReactNode,\n}\n\nexport function SidebarLayout(props: { items: SidebarItem[], title?: ReactNode, basePath: string, className?: string }) {\n const pathname = usePathname();\n const selectedIndex = props.items.findIndex(item => item.subpath && (props.basePath + item.subpath === pathname));\n const router = useRouter();\n if (pathname !== props.basePath && selectedIndex === -1) {\n router.push(props.basePath);\n }\n\n return (\n <>\n <div className={cn(\"hidden sm:flex stack-scope h-full\", props.className)}>\n <DesktopLayout items={props.items} title={props.title} selectedIndex={selectedIndex} basePath={props.basePath} />\n </div>\n <div className={cn(\"sm:hidden stack-scope h-full\", props.className)}>\n <MobileLayout items={props.items} title={props.title} selectedIndex={selectedIndex} basePath={props.basePath} />\n </div>\n </>\n );\n}\n\nfunction Items(props: { items: SidebarItem[], basePath: string, selectedIndex: number }) {\n const router = useRouter();\n\n return props.items.map((item, index) => (\n item.type === 'item' ?\n <Button\n key={index}\n variant='ghost'\n size='sm'\n className={cn(\n props.selectedIndex === index && \"bg-muted\",\n \"justify-start text-md text-zinc-800 dark:text-zinc-300 px-2\",\n )}\n onClick={() => {\n if (item.subpath) {\n router.push(props.basePath + item.subpath);\n }\n }}\n >\n {item.icon && <item.icon className=\"mr-2 h-4 w-4\" />}\n {item.title}\n </Button> :\n <Typography key={index}>\n {item.title}\n </Typography>\n ));\n\n}\n\nfunction DesktopLayout(props: { items: SidebarItem[], title?: ReactNode, selectedIndex: number, basePath: string }) {\n const selectedItem = props.items[props.selectedIndex === -1 ? 0 : props.selectedIndex];\n\n return (\n <div className=\"stack-scope flex w-full h-full\">\n <div className=\"flex w-[200px] border-r flex-col items-stretch gap-2 p-2\">\n {props.title && <div className='mb-2 ml-2'>\n <Typography type='h2' className=\"text-lg font-semibold text-zinc-800 dark:text-zinc-300\">{props.title}</Typography>\n </div>}\n\n <Items items={props.items} basePath={props.basePath} selectedIndex={props.selectedIndex} />\n </div>\n <div className=\"flex-1 flex flex-col items-center gap-4 py-2 px-4\">\n <div className='flex flex-col max-w-[800px] w-[800px]'>\n <div className='mt-4 mb-6'>\n <Typography type='h4' className='font-semibold'>{selectedItem.title}</Typography>\n {selectedItem.description && <Typography variant='secondary' type='label'>{selectedItem.description}</Typography>}\n </div>\n <div className='flex-1'>\n {selectedItem.content}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction MobileLayout(props: { items: SidebarItem[], title?: ReactNode, selectedIndex: number, basePath: string }) {\n const selectedItem = props.items[props.selectedIndex];\n const router = useRouter();\n\n if (props.selectedIndex === -1) {\n return (\n <div className=\"flex flex-col gap-2 p-2\">\n {props.title && <div className='mb-2 ml-2'>\n <Typography type='h2' className=\"text-lg font-semibold text-zinc-800 dark:text-zinc-300\">{props.title}</Typography>\n </div>}\n\n <Items items={props.items} basePath={props.basePath} selectedIndex={props.selectedIndex} />\n </div>\n );\n } else {\n return (\n <div className=\"flex-1 flex flex-col gap-4 py-2 px-4\">\n <div className='flex flex-col'>\n <div className='flex justify-between'>\n <Typography type='h4'>{selectedItem.title}</Typography>\n <Button\n variant='ghost'\n size='icon'\n onClick={() => { router.push(props.basePath); }}\n >\n <XIcon className='h-5 w-5' />\n </Button>\n </div>\n {selectedItem.description && <Typography variant='secondary' type='label'>{selectedItem.description}</Typography>}\n </div>\n <div className='flex-1'>\n {selectedItem.content}\n </div>\n </div>\n );\n }\n}"],"mappings":"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","names":[]}
|
|
@@ -31,7 +31,7 @@ function UserAvatar(props) {
|
|
|
31
31
|
const user = props.user;
|
|
32
32
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_stack_ui.Avatar, { style: { height: props.size || defaultSize, width: props.size || defaultSize }, className: props.border ? "border" : "", children: [
|
|
33
33
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.AvatarImage, { src: user?.profileImageUrl || "" }),
|
|
34
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.AvatarFallback, { children: user ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "font-medium", style: { fontSize: (props.size || defaultSize) * 0.
|
|
34
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.AvatarFallback, { children: user ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "font-medium", style: { fontSize: (props.size || defaultSize) * 0.4 }, children: (user.displayName || user.primaryEmail)?.slice(0, 2).toUpperCase() }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.UserRound, { className: "text-zinc-500", size: (props.size || defaultSize) * 0.6 }) })
|
|
35
35
|
] });
|
|
36
36
|
}
|
|
37
37
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/elements/user-avatar.tsx"],"sourcesContent":["import { Avatar, AvatarFallback, AvatarImage } from \"@stackframe/stack-ui\";\nimport { UserRound } from \"lucide-react\";\n\nconst defaultSize = 34;\n\nexport function UserAvatar(props: {\n size?: number,\n user?: {\n profileImageUrl?: string | null,\n displayName?: string | null,\n primaryEmail?: string | null,\n } | null,\n border?: boolean,\n}) {\n const user = props.user;\n return (\n <Avatar style={{ height: props.size || defaultSize, width: props.size || defaultSize }} className={props.border ? 'border' : ''}>\n <AvatarImage src={user?.profileImageUrl || ''} />\n <AvatarFallback>\n {user ?\n <div className='font-medium' style={{ fontSize: (props.size || defaultSize) * 0.
|
|
1
|
+
{"version":3,"sources":["../../../src/components/elements/user-avatar.tsx"],"sourcesContent":["import { Avatar, AvatarFallback, AvatarImage } from \"@stackframe/stack-ui\";\nimport { UserRound } from \"lucide-react\";\n\nconst defaultSize = 34;\n\nexport function UserAvatar(props: {\n size?: number,\n user?: {\n profileImageUrl?: string | null,\n displayName?: string | null,\n primaryEmail?: string | null,\n } | null,\n border?: boolean,\n}) {\n const user = props.user;\n return (\n <Avatar style={{ height: props.size || defaultSize, width: props.size || defaultSize }} className={props.border ? 'border' : ''}>\n <AvatarImage src={user?.profileImageUrl || ''} />\n <AvatarFallback>\n {user ?\n <div className='font-medium' style={{ fontSize: (props.size || defaultSize) * 0.4 }}>\n {(user.displayName || user.primaryEmail)?.slice(0, 2).toUpperCase()}\n </div> :\n <UserRound className=\"text-zinc-500\" size={(props.size || defaultSize) * 0.6} />}\n </AvatarFallback>\n </Avatar>\n );\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAoD;AACpD,0BAA0B;AAetB;AAbJ,IAAM,cAAc;AAEb,SAAS,WAAW,OAQxB;AACD,QAAM,OAAO,MAAM;AACnB,SACE,6CAAC,0BAAO,OAAO,EAAE,QAAQ,MAAM,QAAQ,aAAa,OAAO,MAAM,QAAQ,YAAY,GAAG,WAAW,MAAM,SAAS,WAAW,IAC3H;AAAA,gDAAC,+BAAY,KAAK,MAAM,mBAAmB,IAAI;AAAA,IAC/C,4CAAC,kCACE,iBACC,4CAAC,SAAI,WAAU,eAAc,OAAO,EAAE,WAAW,MAAM,QAAQ,eAAe,IAAI,GAC9E,gBAAK,eAAe,KAAK,eAAe,MAAM,GAAG,CAAC,EAAE,YAAY,GACpE,IACA,4CAAC,iCAAU,WAAU,iBAAgB,OAAO,MAAM,QAAQ,eAAe,KAAK,GAClF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -25,19 +25,21 @@ __export(magic_link_sign_in_exports, {
|
|
|
25
25
|
MagicLinkSignIn: () => MagicLinkSignIn
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(magic_link_sign_in_exports);
|
|
28
|
-
var import_react = require("react");
|
|
29
|
-
var import_react_hook_form = require("react-hook-form");
|
|
30
28
|
var import_yup = require("@hookform/resolvers/yup");
|
|
31
|
-
var
|
|
32
|
-
var import__ = require("..");
|
|
29
|
+
var import_schema_fields = require("@stackframe/stack-shared/dist/schema-fields");
|
|
33
30
|
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
34
31
|
var import_stack_ui = require("@stackframe/stack-ui");
|
|
35
|
-
var
|
|
32
|
+
var import_react = require("react");
|
|
33
|
+
var import_react_hook_form = require("react-hook-form");
|
|
34
|
+
var import__ = require("..");
|
|
35
|
+
var import_translations = require("../lib/translations");
|
|
36
|
+
var import_form_warning = require("./elements/form-warning");
|
|
36
37
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
37
|
-
var schema = (0, import_schema_fields.yupObject)({
|
|
38
|
-
email: (0, import_schema_fields.yupString)().email("Please enter a valid email").required("Please enter your email")
|
|
39
|
-
});
|
|
40
38
|
function MagicLinkSignIn() {
|
|
39
|
+
const { t } = (0, import_translations.useTranslation)();
|
|
40
|
+
const schema = (0, import_schema_fields.yupObject)({
|
|
41
|
+
email: (0, import_schema_fields.yupString)().email(t("Please enter a valid email")).required(t("Please enter your email"))
|
|
42
|
+
});
|
|
41
43
|
const { register, handleSubmit, setError, formState: { errors }, clearErrors } = (0, import_react_hook_form.useForm)({
|
|
42
44
|
resolver: (0, import_yup.yupResolver)(schema)
|
|
43
45
|
});
|
|
@@ -76,7 +78,7 @@ function MagicLinkSignIn() {
|
|
|
76
78
|
}
|
|
77
79
|
),
|
|
78
80
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.email?.message?.toString() }),
|
|
79
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { disabled: sent, type: "submit", className: "mt-6", loading, children: sent ? "Email sent!" : "Send magic link" })
|
|
81
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { disabled: sent, type: "submit", className: "mt-6", loading, children: sent ? t("Email sent!") : t("Send magic link") })
|
|
80
82
|
]
|
|
81
83
|
}
|
|
82
84
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/magic-link-sign-in.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/components/magic-link-sign-in.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 } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { useStackApp } from \"..\";\nimport { useTranslation } from \"../lib/translations\";\nimport { FormWarningText } from \"./elements/form-warning\";\n\nexport function MagicLinkSignIn() {\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, setError, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const [sent, setSent] = useState(false);\n const app = 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 const error = await app.sendMagicLinkEmail(email);\n if (error) {\n setError('email', { type: 'manual', message: error.message });\n return;\n }\n setSent(true);\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\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n {...register('email')}\n disabled={sent}\n />\n <FormWarningText text={errors.email?.message?.toString()} />\n\n <Button disabled={sent} type=\"submit\" className=\"mt-6\" loading={loading}>\n {sent ? t('Email sent!') : t('Send magic link')}\n </Button>\n </form>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,iBAA4B;AAC5B,2BAAqC;AACrC,sBAA2C;AAC3C,sBAAqC;AACrC,mBAAyB;AACzB,6BAAwB;AAExB,eAA4B;AAC5B,0BAA+B;AAC/B,0BAAgC;AAgC5B;AA9BG,SAAS,kBAAkB;AAChC,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,UAAU,WAAW,EAAE,OAAO,GAAG,YAAY,QAAI,gCAAQ;AAAA,IACvF,cAAU,wBAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAS,KAAK;AACtC,QAAM,UAAM,sBAAY;AACxB,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,KAAK;AAE5C,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AACf,QAAI;AACF,YAAM,EAAE,MAAM,IAAI;AAClB,YAAM,QAAQ,MAAM,IAAI,mBAAmB,KAAK;AAChD,UAAI,OAAO;AACT,iBAAS,SAAS,EAAE,MAAM,UAAU,SAAS,MAAM,QAAQ,CAAC;AAC5D;AAAA,MACF;AACF,cAAQ,IAAI;AAAA,IACZ,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,mBAAK;AAAA,QAC7C;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACJ,GAAG,SAAS,OAAO;AAAA,YACpB,UAAU;AAAA;AAAA,QACZ;AAAA,QACA,4CAAC,uCAAgB,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AAAA,QAE1D,4CAAC,0BAAO,UAAU,MAAM,MAAK,UAAS,WAAU,QAAO,SACpD,iBAAO,EAAE,aAAa,IAAI,EAAE,iBAAiB,GAChD;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
2
|
+
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
declare function MessageCard({ fullPage, ...props }: {
|
|
5
|
-
children?:
|
|
5
|
+
children?: React__default.ReactNode;
|
|
6
6
|
title: string;
|
|
7
7
|
fullPage?: boolean;
|
|
8
8
|
primaryButtonText?: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
2
|
+
import React__default from 'react';
|
|
3
3
|
|
|
4
4
|
declare function MessageCard({ fullPage, ...props }: {
|
|
5
|
-
children?:
|
|
5
|
+
children?: React__default.ReactNode;
|
|
6
6
|
title: string;
|
|
7
7
|
fullPage?: boolean;
|
|
8
8
|
primaryButtonText?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/oauth-button-group.tsx"],"sourcesContent":["'use client';\n\nimport { useStackApp } from \"../lib/hooks\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/components/oauth-button-group.tsx"],"sourcesContent":["'use client';\n\nimport { useStackApp } from \"../lib/hooks\";\nimport { OAuthButton } from \"./oauth-button\";\n\nexport function OAuthButtonGroup({\n type,\n mockProject,\n}: {\n type: 'sign-in' | 'sign-up',\n mockProject?: {\n config: {\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}) {\n const stackApp = useStackApp();\n const project = mockProject || stackApp.useProject();\n return (\n <div className='gap-4 flex flex-col items-stretch stack-scope'>\n {project.config.oauthProviders.map(p => (\n <OAuthButton key={p.id} provider={p.id} type={type}/>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA4B;AAC5B,0BAA4B;AAoBpB;AAlBD,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,GASG;AACD,QAAM,eAAW,0BAAY;AAC7B,QAAM,UAAU,eAAe,SAAS,WAAW;AACnD,SACE,4CAAC,SAAI,WAAU,iDACZ,kBAAQ,OAAO,eAAe,IAAI,OACjC,4CAAC,mCAAuB,UAAU,EAAE,IAAI,QAAtB,EAAE,EAA+B,CACpD,GACH;AAEJ;","names":[]}
|
|
@@ -36,9 +36,10 @@ __export(oauth_button_exports, {
|
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(oauth_button_exports);
|
|
38
38
|
var import_stack_ui = require("@stackframe/stack-ui");
|
|
39
|
-
var import__ = require("..");
|
|
40
39
|
var import_color = __toESM(require("color"));
|
|
41
40
|
var import_react = require("react");
|
|
41
|
+
var import__ = require("..");
|
|
42
|
+
var import_translations = require("../lib/translations");
|
|
42
43
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
43
44
|
var iconSize = 22;
|
|
44
45
|
function GoogleIcon({ iconSize: iconSize2 }) {
|
|
@@ -126,6 +127,29 @@ function BitbucketIcon({ iconSize: iconSize2 }) {
|
|
|
126
127
|
}
|
|
127
128
|
);
|
|
128
129
|
}
|
|
130
|
+
function LinkedInIcon({ iconSize: iconSize2 }) {
|
|
131
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
132
|
+
"svg",
|
|
133
|
+
{
|
|
134
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
135
|
+
fill: "#fff",
|
|
136
|
+
height: iconSize2,
|
|
137
|
+
width: iconSize2,
|
|
138
|
+
viewBox: "0 0 310 310",
|
|
139
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("g", { id: "XMLID_801_", children: [
|
|
140
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { id: "XMLID_802_", d: "M72.16,99.73H9.927c-2.762,0-5,2.239-5,5v199.928c0,2.762,2.238,5,5,5H72.16c2.762,0,5-2.238,5-5V104.73 C77.16,101.969,74.922,99.73,72.16,99.73z" }),
|
|
141
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { id: "XMLID_803_", d: "M41.066,0.341C18.422,0.341,0,18.743,0,41.362C0,63.991,18.422,82.4,41.066,82.4 c22.626,0,41.033-18.41,41.033-41.038C82.1,18.743,63.692,0.341,41.066,0.341z" }),
|
|
142
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { id: "XMLID_804_", d: "M230.454,94.761c-24.995,0-43.472,10.745-54.679,22.954V104.73c0-2.761-2.238-5-5-5h-59.599 c-2.762,0-5,2.239-5,5v199.928c0,2.762,2.238,5,5,5h62.097c2.762,0,5-2.238,5-5v-98.918c0-33.333,9.054-46.319,32.29-46.319 c25.306,0,27.317,20.818,27.317,48.034v97.204c0,2.762,2.238,5,5,5H305c2.762,0,5-2.238,5-5V194.995 C310,145.43,300.549,94.761,230.454,94.761z" })
|
|
143
|
+
] })
|
|
144
|
+
}
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
function AppleIcon({ iconSize: iconSize2 }) {
|
|
148
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { fill: "#fff", height: iconSize2, width: iconSize2, version: "1.1", id: "Capa_1", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 22.773 22.773", children: [
|
|
149
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M15.769,0c0.053,0,0.106,0,0.162,0c0.13,1.606-0.483,2.806-1.228,3.675c-0.731,0.863-1.732,1.7-3.351,1.573c-0.108-1.583,0.506-2.694,1.25-3.561C13.292,0.879,14.557,0.16,15.769,0z" }),
|
|
150
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M20.67,16.716c0,0.016,0,0.03,0,0.045c-0.455,1.378-1.104,2.559-1.896,3.655c-0.723,0.995-1.609,2.334-3.191,2.334c-1.367,0-2.275-0.879-3.676-0.903c-1.482-0.024-2.297,0.735-3.652,0.926c-0.155,0-0.31,0-0.462,0c-0.995-0.144-1.798-0.932-2.383-1.642c-1.725-2.098-3.058-4.808-3.306-8.276c0-0.34,0-0.679,0-1.019c0.105-2.482,1.311-4.5,2.914-5.478c0.846-0.52,2.009-0.963,3.304-0.765c0.555,0.086,1.122,0.276,1.619,0.464c0.471,0.181,1.06,0.502,1.618,0.485c0.378-0.011,0.754-0.208,1.135-0.347c1.116-0.403,2.21-0.865,3.652-0.648c1.733,0.262,2.963,1.032,3.723,2.22c-1.466,0.933-2.625,2.339-2.427,4.74C17.818,14.688,19.086,15.964,20.67,16.716z" })
|
|
151
|
+
] });
|
|
152
|
+
}
|
|
129
153
|
var changeColor = (c, value) => {
|
|
130
154
|
if (c.isLight()) {
|
|
131
155
|
value = -value;
|
|
@@ -136,6 +160,7 @@ function OAuthButton({
|
|
|
136
160
|
provider,
|
|
137
161
|
type
|
|
138
162
|
}) {
|
|
163
|
+
const { t } = (0, import_translations.useTranslation)();
|
|
139
164
|
const stackApp = (0, import__.useStackApp)();
|
|
140
165
|
const styleId = (0, import_react.useId)().replaceAll(":", "-");
|
|
141
166
|
let style;
|
|
@@ -206,6 +231,16 @@ function OAuthButton({
|
|
|
206
231
|
};
|
|
207
232
|
break;
|
|
208
233
|
}
|
|
234
|
+
case "apple": {
|
|
235
|
+
style = {
|
|
236
|
+
backgroundColor: "#000",
|
|
237
|
+
textColor: "#fff",
|
|
238
|
+
border: "1px solid #333",
|
|
239
|
+
name: "Apple",
|
|
240
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppleIcon, { iconSize })
|
|
241
|
+
};
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
209
244
|
case "bitbucket": {
|
|
210
245
|
style = {
|
|
211
246
|
backgroundColor: "#fff",
|
|
@@ -216,6 +251,15 @@ function OAuthButton({
|
|
|
216
251
|
};
|
|
217
252
|
break;
|
|
218
253
|
}
|
|
254
|
+
case "linkedin": {
|
|
255
|
+
style = {
|
|
256
|
+
backgroundColor: "#0073b1",
|
|
257
|
+
textColor: "#fff",
|
|
258
|
+
name: "LinkedIn",
|
|
259
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LinkedInIcon, { iconSize })
|
|
260
|
+
};
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
219
263
|
default: {
|
|
220
264
|
style = {
|
|
221
265
|
name: provider,
|
|
@@ -243,7 +287,7 @@ function OAuthButton({
|
|
|
243
287
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center w-full gap-4", children: [
|
|
244
288
|
style.icon,
|
|
245
289
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "flex-1", children: [
|
|
246
|
-
type === "sign-up" ? "Sign up with " : "Sign in with ",
|
|
290
|
+
type === "sign-up" ? t("Sign up with ") : t("Sign in with "),
|
|
247
291
|
style.name
|
|
248
292
|
] })
|
|
249
293
|
] })
|