@stackframe/stack 2.5.17 → 2.5.19
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 +20 -0
- package/dist/components/credential-sign-in.js +4 -1
- package/dist/components/credential-sign-in.js.map +1 -1
- package/dist/components/elements/sidebar-layout.d.mts +21 -0
- package/dist/components/elements/sidebar-layout.d.ts +21 -0
- package/dist/components/elements/sidebar-layout.js +125 -0
- package/dist/components/elements/sidebar-layout.js.map +1 -0
- package/dist/components/elements/user-avatar.d.mts +5 -11
- package/dist/components/elements/user-avatar.d.ts +5 -11
- package/dist/components/elements/user-avatar.js.map +1 -1
- package/dist/components/message-cards/predefined-message-card.d.mts +1 -1
- package/dist/components/message-cards/predefined-message-card.d.ts +1 -1
- package/dist/components/message-cards/predefined-message-card.js +8 -0
- package/dist/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/components/selected-team-switcher.d.mts +1 -0
- package/dist/components/selected-team-switcher.d.ts +1 -0
- package/dist/components/selected-team-switcher.js +35 -5
- package/dist/components/selected-team-switcher.js.map +1 -1
- package/dist/components-page/account-settings.js +123 -31
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.d.mts +1 -0
- package/dist/components-page/auth-page.d.ts +1 -0
- package/dist/components-page/auth-page.js +4 -1
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/forgot-password.d.mts +4 -1
- package/dist/components-page/forgot-password.d.ts +4 -1
- package/dist/components-page/forgot-password.js +55 -7
- package/dist/components-page/forgot-password.js.map +1 -1
- package/dist/components-page/password-reset.d.mts +6 -2
- package/dist/components-page/password-reset.d.ts +6 -2
- package/dist/components-page/password-reset.js +100 -8
- 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/stack-handler.js +32 -6
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/{components/password-reset-form.d.mts → components-page/team-creation.d.mts} +2 -3
- package/dist/{components/password-reset-form.d.ts → components-page/team-creation.d.ts} +2 -3
- package/dist/components-page/team-creation.js +92 -0
- package/dist/components-page/team-creation.js.map +1 -0
- package/dist/components-page/team-invitation.d.mts +8 -0
- package/dist/components-page/team-invitation.d.ts +8 -0
- package/dist/components-page/team-invitation.js +141 -0
- package/dist/components-page/team-invitation.js.map +1 -0
- package/dist/components-page/team-settings.d.mts +8 -0
- package/dist/components-page/team-settings.d.ts +8 -0
- package/dist/components-page/team-settings.js +139 -0
- package/dist/components-page/team-settings.js.map +1 -0
- package/dist/esm/components/credential-sign-in.js +4 -1
- package/dist/esm/components/credential-sign-in.js.map +1 -1
- package/dist/esm/components/elements/sidebar-layout.js +90 -0
- package/dist/esm/components/elements/sidebar-layout.js.map +1 -0
- package/dist/esm/components/elements/user-avatar.js.map +1 -1
- package/dist/esm/components/message-cards/predefined-message-card.js +8 -0
- package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/esm/components/selected-team-switcher.js +39 -7
- package/dist/esm/components/selected-team-switcher.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +114 -32
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js +4 -1
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/forgot-password.js +52 -5
- package/dist/esm/components-page/forgot-password.js.map +1 -1
- package/dist/esm/components-page/password-reset.js +101 -9
- package/dist/esm/components-page/password-reset.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +32 -6
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components-page/team-creation.js +68 -0
- package/dist/esm/components-page/team-creation.js.map +1 -0
- package/dist/esm/components-page/team-invitation.js +107 -0
- package/dist/esm/components-page/team-invitation.js.map +1 -0
- package/dist/esm/components-page/team-settings.js +115 -0
- package/dist/esm/components-page/team-settings.js.map +1 -0
- package/dist/esm/generated/global-css.js +1 -1
- package/dist/esm/generated/global-css.js.map +1 -1
- package/dist/esm/lib/auth.js +5 -1
- package/dist/esm/lib/auth.js.map +1 -1
- package/dist/esm/lib/stack-app.js +272 -25
- package/dist/esm/lib/stack-app.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/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/lib/auth.js +5 -1
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/hooks.d.mts +1 -0
- package/dist/lib/hooks.d.ts +1 -0
- package/dist/lib/stack-app.d.mts +64 -5
- package/dist/lib/stack-app.d.ts +64 -5
- package/dist/lib/stack-app.js +272 -25
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/stack-provider-client.d.mts +1 -0
- package/dist/providers/stack-provider-client.d.ts +1 -0
- package/dist/providers/stack-provider.d.mts +1 -0
- package/dist/providers/stack-provider.d.ts +1 -0
- package/package.json +10 -6
- package/dist/components/forgot-password-form.d.mts +0 -7
- package/dist/components/forgot-password-form.d.ts +0 -7
- package/dist/components/forgot-password-form.js +0 -83
- package/dist/components/forgot-password-form.js.map +0 -1
- package/dist/components/password-reset-form.js +0 -135
- package/dist/components/password-reset-form.js.map +0 -1
- package/dist/esm/components/forgot-password-form.js +0 -59
- package/dist/esm/components/forgot-password-form.js.map +0 -1
- package/dist/esm/components/password-reset-form.js +0 -105
- package/dist/esm/components/password-reset-form.js.map +0 -1
|
@@ -10,6 +10,7 @@ import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
|
|
|
10
10
|
import '@stackframe/stack-shared/dist/sessions';
|
|
11
11
|
import '@stackframe/stack-shared/dist/utils/json';
|
|
12
12
|
import '@stackframe/stack-shared/dist/utils/oauth';
|
|
13
|
+
import '@stackframe/stack-shared/dist/utils/results';
|
|
13
14
|
|
|
14
15
|
declare const StackContext: React.Context<{
|
|
15
16
|
app: StackClientApp<true>;
|
|
@@ -10,6 +10,7 @@ import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
|
|
|
10
10
|
import '@stackframe/stack-shared/dist/sessions';
|
|
11
11
|
import '@stackframe/stack-shared/dist/utils/json';
|
|
12
12
|
import '@stackframe/stack-shared/dist/utils/oauth';
|
|
13
|
+
import '@stackframe/stack-shared/dist/utils/results';
|
|
13
14
|
|
|
14
15
|
declare const StackContext: React.Context<{
|
|
15
16
|
app: StackClientApp<true>;
|
|
@@ -10,6 +10,7 @@ import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
|
|
|
10
10
|
import '@stackframe/stack-shared/dist/sessions';
|
|
11
11
|
import '@stackframe/stack-shared/dist/utils/json';
|
|
12
12
|
import '@stackframe/stack-shared/dist/utils/oauth';
|
|
13
|
+
import '@stackframe/stack-shared/dist/utils/results';
|
|
13
14
|
|
|
14
15
|
declare function StackProvider({ children, app, }: {
|
|
15
16
|
children: React.ReactNode;
|
|
@@ -10,6 +10,7 @@ import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
|
|
|
10
10
|
import '@stackframe/stack-shared/dist/sessions';
|
|
11
11
|
import '@stackframe/stack-shared/dist/utils/json';
|
|
12
12
|
import '@stackframe/stack-shared/dist/utils/oauth';
|
|
13
|
+
import '@stackframe/stack-shared/dist/utils/results';
|
|
13
14
|
|
|
14
15
|
declare function StackProvider({ children, app, }: {
|
|
15
16
|
children: React.ReactNode;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackframe/stack",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.19",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
"js-cookie": "^3.0.5",
|
|
32
32
|
"lucide-react": "^0.378.0",
|
|
33
33
|
"oauth4webapi": "^2.10.3",
|
|
34
|
+
"oslo": "^1.2.1",
|
|
35
|
+
"qrcode": "^1.5.4",
|
|
34
36
|
"react-hook-form": "^7.51.4",
|
|
35
37
|
"rimraf": "^5.0.5",
|
|
36
38
|
"server-only": "^0.0.1",
|
|
@@ -38,9 +40,9 @@
|
|
|
38
40
|
"tailwindcss-animate": "^1.0.7",
|
|
39
41
|
"tsx": "^4.7.2",
|
|
40
42
|
"yup": "^1.4.0",
|
|
41
|
-
"@stackframe/stack-
|
|
42
|
-
"@stackframe/stack-
|
|
43
|
-
"@stackframe/stack-
|
|
43
|
+
"@stackframe/stack-ui": "2.5.19",
|
|
44
|
+
"@stackframe/stack-sc": "2.5.19",
|
|
45
|
+
"@stackframe/stack-shared": "2.5.19"
|
|
44
46
|
},
|
|
45
47
|
"peerDependencies": {
|
|
46
48
|
"next": ">=14.1",
|
|
@@ -50,6 +52,7 @@
|
|
|
50
52
|
"@types/color": "^3.0.6",
|
|
51
53
|
"@types/cookie": "^0.6.0",
|
|
52
54
|
"@types/js-cookie": "^3.0.6",
|
|
55
|
+
"@types/qrcode": "^1.5.5",
|
|
53
56
|
"@types/react": "^18.2.66",
|
|
54
57
|
"autoprefixer": "^10.4.17",
|
|
55
58
|
"esbuild": "^0.20.2",
|
|
@@ -58,14 +61,15 @@
|
|
|
58
61
|
"postcss-nested": "^6.0.1",
|
|
59
62
|
"react": "^18.2.0",
|
|
60
63
|
"tailwindcss": "^3.4.4",
|
|
61
|
-
"tsup": "^8.0.2"
|
|
64
|
+
"tsup": "^8.0.2",
|
|
65
|
+
"chokidar-cli": "^3.0.0"
|
|
62
66
|
},
|
|
63
67
|
"scripts": {
|
|
64
68
|
"typecheck": "tsc --noEmit",
|
|
65
69
|
"build": "rimraf dist && npm run codegen && tsup-node",
|
|
66
70
|
"codegen": "npm run css",
|
|
67
71
|
"clean": "rimraf dist && rimraf node_modules",
|
|
68
|
-
"dev": "rimraf dist && concurrently \"tsup-node --watch\" \"npm run css:tw:watch\" \"npm run css:sc:watch\"",
|
|
72
|
+
"dev": "rimraf dist && concurrently -k \"tsup-node --watch\" \"npm run css:tw:watch\" \"npm run css:sc:watch\"",
|
|
69
73
|
"lint": "eslint --ext .tsx,.ts .",
|
|
70
74
|
"css": "npm run css:tw && npm run css:sc",
|
|
71
75
|
"css:tw:watch": "tailwindcss -i ./src/global.css -o ./src/generated/tailwind.css --watch",
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
"use strict";
|
|
3
|
-
"use client";
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
-
|
|
22
|
-
// src/components/forgot-password-form.tsx
|
|
23
|
-
var forgot_password_form_exports = {};
|
|
24
|
-
__export(forgot_password_form_exports, {
|
|
25
|
-
ForgotPasswordForm: () => ForgotPasswordForm
|
|
26
|
-
});
|
|
27
|
-
module.exports = __toCommonJS(forgot_password_form_exports);
|
|
28
|
-
var import_react_hook_form = require("react-hook-form");
|
|
29
|
-
var import_yup = require("@hookform/resolvers/yup");
|
|
30
|
-
var import_form_warning = require("./elements/form-warning");
|
|
31
|
-
var import__ = require("..");
|
|
32
|
-
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
33
|
-
var import_stack_ui = require("@stackframe/stack-ui");
|
|
34
|
-
var import_react = require("react");
|
|
35
|
-
var import_schema_fields = require("@stackframe/stack-shared/dist/schema-fields");
|
|
36
|
-
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
|
-
function ForgotPasswordForm({ onSent }) {
|
|
41
|
-
const { register, handleSubmit, formState: { errors }, clearErrors } = (0, import_react_hook_form.useForm)({
|
|
42
|
-
resolver: (0, import_yup.yupResolver)(schema)
|
|
43
|
-
});
|
|
44
|
-
const stackApp = (0, import__.useStackApp)();
|
|
45
|
-
const [loading, setLoading] = (0, import_react.useState)(false);
|
|
46
|
-
const onSubmit = async (data) => {
|
|
47
|
-
setLoading(true);
|
|
48
|
-
try {
|
|
49
|
-
const { email } = data;
|
|
50
|
-
await stackApp.sendForgotPasswordEmail(email);
|
|
51
|
-
onSent?.();
|
|
52
|
-
} finally {
|
|
53
|
-
setLoading(false);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
57
|
-
"form",
|
|
58
|
-
{
|
|
59
|
-
className: "flex flex-col items-stretch stack-scope",
|
|
60
|
-
onSubmit: (e) => (0, import_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
|
|
61
|
-
noValidate: true,
|
|
62
|
-
children: [
|
|
63
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "email", className: "mb-1", children: "Your Email" }),
|
|
64
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
65
|
-
import_stack_ui.Input,
|
|
66
|
-
{
|
|
67
|
-
id: "email",
|
|
68
|
-
type: "email",
|
|
69
|
-
...register("email"),
|
|
70
|
-
onChange: () => clearErrors("email")
|
|
71
|
-
}
|
|
72
|
-
),
|
|
73
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.email?.message?.toString() }),
|
|
74
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: "Send Email" })
|
|
75
|
-
]
|
|
76
|
-
}
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
80
|
-
0 && (module.exports = {
|
|
81
|
-
ForgotPasswordForm
|
|
82
|
-
});
|
|
83
|
-
//# sourceMappingURL=forgot-password-form.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/forgot-password-form.tsx"],"sourcesContent":["'use client';\n\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { yupObject, yupString, yupNumber, yupBoolean, yupArray, yupMixed } from \"@stackframe/stack-shared/dist/schema-fields\";\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,6BAAwB;AACxB,iBAA4B;AAE5B,0BAAgC;AAChC,eAA4B;AAC5B,sBAA2C;AAC3C,sBAAqC;AACrC,mBAAyB;AACzB,2BAAgF;AAyB5E;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;","names":[]}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
"use strict";
|
|
3
|
-
"use client";
|
|
4
|
-
var __create = Object.create;
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
-
var __export = (target, all) => {
|
|
11
|
-
for (var name in all)
|
|
12
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
-
};
|
|
14
|
-
var __copyProps = (to, from, except, desc) => {
|
|
15
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
-
for (let key of __getOwnPropNames(from))
|
|
17
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
-
}
|
|
20
|
-
return to;
|
|
21
|
-
};
|
|
22
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
-
mod
|
|
29
|
-
));
|
|
30
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
|
-
|
|
32
|
-
// src/components/password-reset-form.tsx
|
|
33
|
-
var password_reset_form_exports = {};
|
|
34
|
-
__export(password_reset_form_exports, {
|
|
35
|
-
default: () => PasswordResetForm
|
|
36
|
-
});
|
|
37
|
-
module.exports = __toCommonJS(password_reset_form_exports);
|
|
38
|
-
var import_react = require("react");
|
|
39
|
-
var import_react_hook_form = require("react-hook-form");
|
|
40
|
-
var import_yup = require("@hookform/resolvers/yup");
|
|
41
|
-
var yup = __toESM(require("yup"));
|
|
42
|
-
var import_password = require("@stackframe/stack-shared/dist/helpers/password");
|
|
43
|
-
var import__ = require("..");
|
|
44
|
-
var import_form_warning = require("./elements/form-warning");
|
|
45
|
-
var import_predefined_message_card = require("./message-cards/predefined-message-card");
|
|
46
|
-
var import_message_card = require("./message-cards/message-card");
|
|
47
|
-
var import_maybe_full_page = require("./elements/maybe-full-page");
|
|
48
|
-
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
49
|
-
var import_stack_ui = require("@stackframe/stack-ui");
|
|
50
|
-
var import_schema_fields = require("@stackframe/stack-shared/dist/schema-fields");
|
|
51
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
52
|
-
var schema = (0, import_schema_fields.yupObject)({
|
|
53
|
-
password: (0, import_schema_fields.yupString)().required("Please enter your password").test({
|
|
54
|
-
name: "is-valid-password",
|
|
55
|
-
test: (value, ctx) => {
|
|
56
|
-
const error = (0, import_password.getPasswordError)(value);
|
|
57
|
-
if (error) {
|
|
58
|
-
return ctx.createError({ message: error.message });
|
|
59
|
-
} else {
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}),
|
|
64
|
-
passwordRepeat: (0, import_schema_fields.yupString)().nullable().oneOf([yup.ref("password"), null], "Passwords do not match").required("Please repeat your password")
|
|
65
|
-
});
|
|
66
|
-
function PasswordResetForm({ code, fullPage = false }) {
|
|
67
|
-
const { register, handleSubmit, formState: { errors }, clearErrors } = (0, import_react_hook_form.useForm)({
|
|
68
|
-
resolver: (0, import_yup.yupResolver)(schema)
|
|
69
|
-
});
|
|
70
|
-
const stackApp = (0, import__.useStackApp)();
|
|
71
|
-
const [finished, setFinished] = (0, import_react.useState)(false);
|
|
72
|
-
const [resetError, setResetError] = (0, import_react.useState)(false);
|
|
73
|
-
const [loading, setLoading] = (0, import_react.useState)(false);
|
|
74
|
-
const onSubmit = async (data) => {
|
|
75
|
-
setLoading(true);
|
|
76
|
-
try {
|
|
77
|
-
const { password } = data;
|
|
78
|
-
const errorCode = await stackApp.resetPassword({ password, code });
|
|
79
|
-
if (errorCode) {
|
|
80
|
-
setResetError(true);
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
setFinished(true);
|
|
84
|
-
} finally {
|
|
85
|
-
setLoading(false);
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
if (finished) {
|
|
89
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.PredefinedMessageCard, { type: "passwordReset", fullPage });
|
|
90
|
-
}
|
|
91
|
-
if (resetError) {
|
|
92
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Failed to reset password", fullPage, children: "Failed to reset password. Please request a new password reset link" });
|
|
93
|
-
}
|
|
94
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_maybe_full_page.MaybeFullPage, { fullPage, children: [
|
|
95
|
-
/* @__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: "Reset Your Password" }) }),
|
|
96
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
97
|
-
"form",
|
|
98
|
-
{
|
|
99
|
-
style: { display: "flex", flexDirection: "column", alignItems: "stretch" },
|
|
100
|
-
onSubmit: (e) => (0, import_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
|
|
101
|
-
noValidate: true,
|
|
102
|
-
children: [
|
|
103
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "password", className: "mb-1", children: "New Password" }),
|
|
104
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
105
|
-
import_stack_ui.PasswordInput,
|
|
106
|
-
{
|
|
107
|
-
id: "password",
|
|
108
|
-
...register("password"),
|
|
109
|
-
onChange: () => {
|
|
110
|
-
clearErrors("password");
|
|
111
|
-
clearErrors("passwordRepeat");
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
),
|
|
115
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.password?.message?.toString() }),
|
|
116
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "repeat-password", className: "mt-4 mb-1", children: "Repeat New Password" }),
|
|
117
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
118
|
-
import_stack_ui.PasswordInput,
|
|
119
|
-
{
|
|
120
|
-
id: "repeat-password",
|
|
121
|
-
...register("passwordRepeat"),
|
|
122
|
-
onChange: () => {
|
|
123
|
-
clearErrors("password");
|
|
124
|
-
clearErrors("passwordRepeat");
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
),
|
|
128
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.passwordRepeat?.message?.toString() }),
|
|
129
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: "Reset Password" })
|
|
130
|
-
]
|
|
131
|
-
}
|
|
132
|
-
)
|
|
133
|
-
] });
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=password-reset-form.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/password-reset-form.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { useStackApp } from \"..\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { PredefinedMessageCard } from \"./message-cards/predefined-message-card\";\nimport { MessageCard } from \"./message-cards/message-card\";\nimport { MaybeFullPage } from \"./elements/maybe-full-page\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Label, PasswordInput, Typography } from \"@stackframe/stack-ui\";\nimport { yupObject, yupString, yupNumber, yupBoolean, yupArray, yupMixed } from \"@stackframe/stack-shared/dist/schema-fields\";\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(\n { code, fullPage = false }:\n { code: string, 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 });\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={fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title=\"Failed to reset password\" fullPage={fullPage}>\n Failed to reset password. Please request a new password reset link\n </MessageCard>\n );\n }\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div className=\"text-center mb-6\">\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"],"mappings":"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","names":[]}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
"use client";
|
|
3
|
-
|
|
4
|
-
// src/components/forgot-password-form.tsx
|
|
5
|
-
import { useForm } from "react-hook-form";
|
|
6
|
-
import { yupResolver } from "@hookform/resolvers/yup";
|
|
7
|
-
import { FormWarningText } from "./elements/form-warning";
|
|
8
|
-
import { useStackApp } from "..";
|
|
9
|
-
import { runAsynchronouslyWithAlert } from "@stackframe/stack-shared/dist/utils/promises";
|
|
10
|
-
import { Button, Input, Label } from "@stackframe/stack-ui";
|
|
11
|
-
import { useState } from "react";
|
|
12
|
-
import { yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields";
|
|
13
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
-
var schema = yupObject({
|
|
15
|
-
email: yupString().email("Please enter a valid email").required("Please enter your email")
|
|
16
|
-
});
|
|
17
|
-
function ForgotPasswordForm({ onSent }) {
|
|
18
|
-
const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({
|
|
19
|
-
resolver: yupResolver(schema)
|
|
20
|
-
});
|
|
21
|
-
const stackApp = useStackApp();
|
|
22
|
-
const [loading, setLoading] = useState(false);
|
|
23
|
-
const onSubmit = async (data) => {
|
|
24
|
-
setLoading(true);
|
|
25
|
-
try {
|
|
26
|
-
const { email } = data;
|
|
27
|
-
await stackApp.sendForgotPasswordEmail(email);
|
|
28
|
-
onSent?.();
|
|
29
|
-
} finally {
|
|
30
|
-
setLoading(false);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
return /* @__PURE__ */ jsxs(
|
|
34
|
-
"form",
|
|
35
|
-
{
|
|
36
|
-
className: "flex flex-col items-stretch stack-scope",
|
|
37
|
-
onSubmit: (e) => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e)),
|
|
38
|
-
noValidate: true,
|
|
39
|
-
children: [
|
|
40
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "email", className: "mb-1", children: "Your Email" }),
|
|
41
|
-
/* @__PURE__ */ jsx(
|
|
42
|
-
Input,
|
|
43
|
-
{
|
|
44
|
-
id: "email",
|
|
45
|
-
type: "email",
|
|
46
|
-
...register("email"),
|
|
47
|
-
onChange: () => clearErrors("email")
|
|
48
|
-
}
|
|
49
|
-
),
|
|
50
|
-
/* @__PURE__ */ jsx(FormWarningText, { text: errors.email?.message?.toString() }),
|
|
51
|
-
/* @__PURE__ */ jsx(Button, { type: "submit", className: "mt-6", loading, children: "Send Email" })
|
|
52
|
-
]
|
|
53
|
-
}
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
export {
|
|
57
|
-
ForgotPasswordForm
|
|
58
|
-
};
|
|
59
|
-
//# sourceMappingURL=forgot-password-form.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/forgot-password-form.tsx"],"sourcesContent":["'use client';\n\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { yupObject, yupString, yupNumber, yupBoolean, yupArray, yupMixed } from \"@stackframe/stack-shared/dist/schema-fields\";\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"],"mappings":";;;AAEA,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAE5B,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,kCAAkC;AAC3C,SAAS,QAAQ,OAAO,aAAa;AACrC,SAAS,gBAAgB;AACzB,SAAS,WAAW,iBAA4D;AAyB5E,SAKE,KALF;AAvBJ,IAAM,SAAS,UAAU;AAAA,EACvB,OAAO,UAAU,EAAE,MAAM,4BAA4B,EAAE,SAAS,yBAAyB;AAC3F,CAAC;AAEM,SAAS,mBAAmB,EAAE,OAAO,GAA4B;AACtE,QAAM,EAAE,UAAU,cAAc,WAAW,EAAE,OAAO,GAAG,YAAY,IAAI,QAAQ;AAAA,IAC7E,UAAU,YAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,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,OAAK,2BAA2B,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,MACnE,YAAU;AAAA,MAEV;AAAA,4BAAC,SAAM,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,oBAAC,mBAAgB,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AAAA,QAE1D,oBAAC,UAAO,MAAK,UAAS,WAAU,QAAO,SAAkB,wBAEzD;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
"use client";
|
|
3
|
-
|
|
4
|
-
// src/components/password-reset-form.tsx
|
|
5
|
-
import { useState } from "react";
|
|
6
|
-
import { useForm } from "react-hook-form";
|
|
7
|
-
import { yupResolver } from "@hookform/resolvers/yup";
|
|
8
|
-
import * as yup from "yup";
|
|
9
|
-
import { getPasswordError } from "@stackframe/stack-shared/dist/helpers/password";
|
|
10
|
-
import { useStackApp } from "..";
|
|
11
|
-
import { FormWarningText } from "./elements/form-warning";
|
|
12
|
-
import { PredefinedMessageCard } from "./message-cards/predefined-message-card";
|
|
13
|
-
import { MessageCard } from "./message-cards/message-card";
|
|
14
|
-
import { MaybeFullPage } from "./elements/maybe-full-page";
|
|
15
|
-
import { runAsynchronouslyWithAlert } from "@stackframe/stack-shared/dist/utils/promises";
|
|
16
|
-
import { Button, Label, PasswordInput, Typography } from "@stackframe/stack-ui";
|
|
17
|
-
import { yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields";
|
|
18
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
19
|
-
var schema = yupObject({
|
|
20
|
-
password: yupString().required("Please enter your password").test({
|
|
21
|
-
name: "is-valid-password",
|
|
22
|
-
test: (value, ctx) => {
|
|
23
|
-
const error = getPasswordError(value);
|
|
24
|
-
if (error) {
|
|
25
|
-
return ctx.createError({ message: error.message });
|
|
26
|
-
} else {
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}),
|
|
31
|
-
passwordRepeat: yupString().nullable().oneOf([yup.ref("password"), null], "Passwords do not match").required("Please repeat your password")
|
|
32
|
-
});
|
|
33
|
-
function PasswordResetForm({ code, fullPage = false }) {
|
|
34
|
-
const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({
|
|
35
|
-
resolver: yupResolver(schema)
|
|
36
|
-
});
|
|
37
|
-
const stackApp = useStackApp();
|
|
38
|
-
const [finished, setFinished] = useState(false);
|
|
39
|
-
const [resetError, setResetError] = useState(false);
|
|
40
|
-
const [loading, setLoading] = useState(false);
|
|
41
|
-
const onSubmit = async (data) => {
|
|
42
|
-
setLoading(true);
|
|
43
|
-
try {
|
|
44
|
-
const { password } = data;
|
|
45
|
-
const errorCode = await stackApp.resetPassword({ password, code });
|
|
46
|
-
if (errorCode) {
|
|
47
|
-
setResetError(true);
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
setFinished(true);
|
|
51
|
-
} finally {
|
|
52
|
-
setLoading(false);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
if (finished) {
|
|
56
|
-
return /* @__PURE__ */ jsx(PredefinedMessageCard, { type: "passwordReset", fullPage });
|
|
57
|
-
}
|
|
58
|
-
if (resetError) {
|
|
59
|
-
return /* @__PURE__ */ jsx(MessageCard, { title: "Failed to reset password", fullPage, children: "Failed to reset password. Please request a new password reset link" });
|
|
60
|
-
}
|
|
61
|
-
return /* @__PURE__ */ jsxs(MaybeFullPage, { fullPage, children: [
|
|
62
|
-
/* @__PURE__ */ jsx("div", { className: "text-center mb-6", children: /* @__PURE__ */ jsx(Typography, { type: "h2", children: "Reset Your Password" }) }),
|
|
63
|
-
/* @__PURE__ */ jsxs(
|
|
64
|
-
"form",
|
|
65
|
-
{
|
|
66
|
-
style: { display: "flex", flexDirection: "column", alignItems: "stretch" },
|
|
67
|
-
onSubmit: (e) => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e)),
|
|
68
|
-
noValidate: true,
|
|
69
|
-
children: [
|
|
70
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "password", className: "mb-1", children: "New Password" }),
|
|
71
|
-
/* @__PURE__ */ jsx(
|
|
72
|
-
PasswordInput,
|
|
73
|
-
{
|
|
74
|
-
id: "password",
|
|
75
|
-
...register("password"),
|
|
76
|
-
onChange: () => {
|
|
77
|
-
clearErrors("password");
|
|
78
|
-
clearErrors("passwordRepeat");
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
),
|
|
82
|
-
/* @__PURE__ */ jsx(FormWarningText, { text: errors.password?.message?.toString() }),
|
|
83
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "repeat-password", className: "mt-4 mb-1", children: "Repeat New Password" }),
|
|
84
|
-
/* @__PURE__ */ jsx(
|
|
85
|
-
PasswordInput,
|
|
86
|
-
{
|
|
87
|
-
id: "repeat-password",
|
|
88
|
-
...register("passwordRepeat"),
|
|
89
|
-
onChange: () => {
|
|
90
|
-
clearErrors("password");
|
|
91
|
-
clearErrors("passwordRepeat");
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
),
|
|
95
|
-
/* @__PURE__ */ jsx(FormWarningText, { text: errors.passwordRepeat?.message?.toString() }),
|
|
96
|
-
/* @__PURE__ */ jsx(Button, { type: "submit", className: "mt-6", loading, children: "Reset Password" })
|
|
97
|
-
]
|
|
98
|
-
}
|
|
99
|
-
)
|
|
100
|
-
] });
|
|
101
|
-
}
|
|
102
|
-
export {
|
|
103
|
-
PasswordResetForm as default
|
|
104
|
-
};
|
|
105
|
-
//# sourceMappingURL=password-reset-form.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/password-reset-form.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { useStackApp } from \"..\";\nimport { FormWarningText } from \"./elements/form-warning\";\nimport { PredefinedMessageCard } from \"./message-cards/predefined-message-card\";\nimport { MessageCard } from \"./message-cards/message-card\";\nimport { MaybeFullPage } from \"./elements/maybe-full-page\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Label, PasswordInput, Typography } from \"@stackframe/stack-ui\";\nimport { yupObject, yupString, yupNumber, yupBoolean, yupArray, yupMixed } from \"@stackframe/stack-shared/dist/schema-fields\";\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(\n { code, fullPage = false }:\n { code: string, 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 });\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={fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title=\"Failed to reset password\" fullPage={fullPage}>\n Failed to reset password. Please request a new password reset link\n </MessageCard>\n );\n }\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div className=\"text-center mb-6\">\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"],"mappings":";;;AAEA,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,YAAY,SAAS;AACrB,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAChC,SAAS,6BAA6B;AACtC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,kCAAkC;AAC3C,SAAS,QAAQ,OAAO,eAAe,kBAAkB;AACzD,SAAS,WAAW,iBAA4D;AA8CrE,cAiBL,YAjBK;AA5CX,IAAM,SAAS,UAAU;AAAA,EACvB,UAAU,UAAU,EAAE,SAAS,4BAA4B,EAAE,KAAK;AAAA,IAChE,MAAM;AAAA,IACN,MAAM,CAAC,OAAO,QAAQ;AACpB,YAAM,QAAQ,iBAAiB,KAAK;AACpC,UAAI,OAAO;AACT,eAAO,IAAI,YAAY,EAAE,SAAS,MAAM,QAAQ,CAAC;AAAA,MACnD,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,gBAAgB,UAAU,EAAE,SAAS,EAAE,MAAM,CAAK,QAAI,UAAU,GAAG,IAAI,GAAG,wBAAwB,EAAE,SAAS,6BAA6B;AAC5I,CAAC;AAEc,SAAR,kBACL,EAAE,MAAM,WAAW,MAAM,GAEzB;AACA,QAAM,EAAE,UAAU,cAAc,WAAW,EAAE,OAAO,GAAG,YAAY,IAAI,QAAQ;AAAA,IAC7E,UAAU,YAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AACf,QAAI;AACF,YAAM,EAAE,SAAS,IAAI;AACrB,YAAM,YAAY,MAAM,SAAS,cAAc,EAAE,UAAU,KAAK,CAAC;AACjE,UAAI,WAAW;AACb,sBAAc,IAAI;AAClB;AAAA,MACF;AAEA,kBAAY,IAAI;AAAA,IAClB,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,MAAI,UAAU;AACZ,WAAO,oBAAC,yBAAsB,MAAK,iBAAgB,UAAoB;AAAA,EACzE;AAEA,MAAI,YAAY;AACd,WACE,oBAAC,eAAY,OAAM,4BAA2B,UAAoB,gFAElE;AAAA,EAEJ;AAEA,SACE,qBAAC,iBAAc,UACb;AAAA,wBAAC,SAAI,WAAU,oBACb,8BAAC,cAAW,MAAK,MAAK,iCAAmB,GAC3C;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU;AAAA,QACzE,UAAU,OAAK,2BAA2B,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,QACnE,YAAU;AAAA,QAEV;AAAA,8BAAC,SAAM,SAAQ,YAAW,WAAU,QAAO,0BAAY;AAAA,UACvD;AAAA,YAAC;AAAA;AAAA,cACC,IAAG;AAAA,cACF,GAAG,SAAS,UAAU;AAAA,cACvB,UAAU,MAAM;AACd,4BAAY,UAAU;AACtB,4BAAY,gBAAgB;AAAA,cAC9B;AAAA;AAAA,UACF;AAAA,UACA,oBAAC,mBAAgB,MAAM,OAAO,UAAU,SAAS,SAAS,GAAG;AAAA,UAE7D,oBAAC,SAAM,SAAQ,mBAAkB,WAAU,aAAY,iCAAmB;AAAA,UAC1E;AAAA,YAAC;AAAA;AAAA,cACC,IAAG;AAAA,cACF,GAAG,SAAS,gBAAgB;AAAA,cAC7B,UAAU,MAAM;AACd,4BAAY,UAAU;AACtB,4BAAY,gBAAgB;AAAA,cAC9B;AAAA;AAAA,UACF;AAAA,UACA,oBAAC,mBAAgB,MAAM,OAAO,gBAAgB,SAAS,SAAS,GAAG;AAAA,UAEnE,oBAAC,UAAO,MAAK,UAAS,WAAU,QAAO,SAAkB,4BAEzD;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":[]}
|