@stackframe/stack 2.4.20 → 2.4.22
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 +18 -0
- package/dist/components/message-cards/known-error-message-card.d.mts +9 -0
- package/dist/components/message-cards/known-error-message-card.d.ts +9 -0
- package/dist/components/message-cards/known-error-message-card.js +67 -0
- package/dist/components/message-cards/known-error-message-card.js.map +1 -0
- package/dist/components/{message-card.d.mts → message-cards/message-card.d.mts} +5 -1
- package/dist/components/{message-card.d.ts → message-cards/message-card.d.ts} +5 -1
- package/dist/components/{message-card.js → message-cards/message-card.js} +10 -6
- package/dist/components/message-cards/message-card.js.map +1 -0
- package/dist/components/{redirect-message-card.d.mts → message-cards/predefined-message-card.d.mts} +3 -3
- package/dist/components/{redirect-message-card.d.ts → message-cards/predefined-message-card.d.ts} +3 -3
- package/dist/components/{redirect-message-card.js → message-cards/predefined-message-card.js} +32 -29
- package/dist/components/message-cards/predefined-message-card.js.map +1 -0
- package/dist/components/password-reset-inner.js +3 -3
- package/dist/components/password-reset-inner.js.map +1 -1
- package/dist/components-core/index.d.mts +4 -4
- package/dist/components-core/index.d.ts +4 -4
- package/dist/components-core-joy/text.d.mts +2 -2
- package/dist/components-core-joy/text.d.ts +2 -2
- package/dist/components-page/account-settings.js +2 -2
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.js +2 -2
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/email-verification.js +3 -3
- package/dist/components-page/email-verification.js.map +1 -1
- package/dist/components-page/error-page.d.mts +8 -0
- package/dist/components-page/error-page.d.ts +8 -0
- package/dist/components-page/error-page.js +85 -0
- package/dist/components-page/error-page.js.map +1 -0
- package/dist/components-page/forgot-password.js +3 -3
- package/dist/components-page/forgot-password.js.map +1 -1
- package/dist/components-page/magic-link-callback.js +3 -3
- package/dist/components-page/magic-link-callback.js.map +1 -1
- package/dist/components-page/oauth-callback.js +4 -3
- package/dist/components-page/oauth-callback.js.map +1 -1
- package/dist/components-page/password-reset.js +1 -1
- package/dist/components-page/password-reset.js.map +1 -1
- package/dist/components-page/sign-out.js +2 -2
- package/dist/components-page/sign-out.js.map +1 -1
- package/dist/components-page/stack-handler.js +5 -1
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components/message-cards/known-error-message-card.js +37 -0
- package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -0
- package/dist/esm/components/message-cards/message-card.js +21 -0
- package/dist/esm/components/message-cards/message-card.js.map +1 -0
- package/dist/esm/components/{redirect-message-card.js → message-cards/predefined-message-card.js} +30 -27
- package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -0
- package/dist/esm/components/password-reset-inner.js +3 -3
- package/dist/esm/components/password-reset-inner.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +2 -2
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js +2 -2
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/email-verification.js +3 -3
- package/dist/esm/components-page/email-verification.js.map +1 -1
- package/dist/esm/components-page/error-page.js +55 -0
- package/dist/esm/components-page/error-page.js.map +1 -0
- package/dist/esm/components-page/forgot-password.js +3 -3
- package/dist/esm/components-page/forgot-password.js.map +1 -1
- package/dist/esm/components-page/magic-link-callback.js +3 -3
- package/dist/esm/components-page/magic-link-callback.js.map +1 -1
- package/dist/esm/components-page/oauth-callback.js +4 -3
- package/dist/esm/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/components-page/password-reset.js +1 -1
- package/dist/esm/components-page/password-reset.js.map +1 -1
- package/dist/esm/components-page/sign-out.js +1 -1
- package/dist/esm/components-page/sign-out.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +5 -1
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/auth.js +30 -14
- package/dist/esm/lib/auth.js.map +1 -1
- package/dist/esm/lib/stack-app.js +142 -68
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/providers/stack-provider-client.js +1 -1
- package/dist/esm/providers/stack-provider-client.js.map +1 -1
- package/dist/esm/providers/styled-components-registry.js +1 -1
- package/dist/esm/providers/styled-components-registry.js.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/auth.d.mts +13 -3
- package/dist/lib/auth.d.ts +13 -3
- package/dist/lib/auth.js +31 -14
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/stack-app.d.mts +111 -65
- package/dist/lib/stack-app.d.ts +111 -65
- package/dist/lib/stack-app.js +139 -65
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/component-provider.d.mts +6 -6
- package/dist/providers/component-provider.d.ts +6 -6
- package/dist/providers/joy-provider.d.mts +2 -2
- package/dist/providers/joy-provider.d.ts +2 -2
- package/dist/providers/stack-provider-client.js +1 -1
- package/dist/providers/stack-provider-client.js.map +1 -1
- package/dist/providers/styled-components-registry.js +1 -1
- package/dist/providers/styled-components-registry.js.map +1 -1
- package/package.json +3 -3
- package/dist/components/message-card.js.map +0 -1
- package/dist/components/redirect-message-card.js.map +0 -1
- package/dist/esm/components/message-card.js +0 -17
- package/dist/esm/components/message-card.js.map +0 -1
- package/dist/esm/components/redirect-message-card.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @stackframe/stack
|
|
2
2
|
|
|
3
|
+
## 2.4.22
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- OAuth scopes
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @stackframe/stack-shared@2.4.22
|
|
10
|
+
- @stackframe/stack-sc@2.4.22
|
|
11
|
+
|
|
12
|
+
## 2.4.21
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Bugfixes
|
|
17
|
+
- Updated dependencies
|
|
18
|
+
- @stackframe/stack-sc@2.4.21
|
|
19
|
+
- @stackframe/stack-shared@2.4.21
|
|
20
|
+
|
|
3
21
|
## 2.4.20
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { KnownError } from '@stackframe/stack-shared';
|
|
3
|
+
|
|
4
|
+
declare function KnownErrorMessageCard({ error, fullPage, }: {
|
|
5
|
+
error: KnownError;
|
|
6
|
+
fullPage?: boolean;
|
|
7
|
+
}): react_jsx_runtime.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { KnownErrorMessageCard as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { KnownError } from '@stackframe/stack-shared';
|
|
3
|
+
|
|
4
|
+
declare function KnownErrorMessageCard({ error, fullPage, }: {
|
|
5
|
+
error: KnownError;
|
|
6
|
+
fullPage?: boolean;
|
|
7
|
+
}): react_jsx_runtime.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { KnownErrorMessageCard as default };
|
|
@@ -0,0 +1,67 @@
|
|
|
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/message-cards/known-error-message-card.tsx
|
|
33
|
+
var known_error_message_card_exports = {};
|
|
34
|
+
__export(known_error_message_card_exports, {
|
|
35
|
+
default: () => KnownErrorMessageCard
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(known_error_message_card_exports);
|
|
38
|
+
var import__ = require("../..");
|
|
39
|
+
var import_message_card = __toESM(require("./message-card"));
|
|
40
|
+
var import_components_core = require("../../components-core");
|
|
41
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
42
|
+
function KnownErrorMessageCard({
|
|
43
|
+
error,
|
|
44
|
+
fullPage = false
|
|
45
|
+
}) {
|
|
46
|
+
const stackApp = (0, import__.useStackApp)();
|
|
47
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
48
|
+
import_message_card.default,
|
|
49
|
+
{
|
|
50
|
+
title: "An error occurred",
|
|
51
|
+
fullPage,
|
|
52
|
+
primaryButtonText: "Go to Home",
|
|
53
|
+
primaryAction: () => stackApp.redirectToHome(),
|
|
54
|
+
children: [
|
|
55
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components_core.Text, { children: [
|
|
56
|
+
"Error Code: ",
|
|
57
|
+
error.errorCode
|
|
58
|
+
] }),
|
|
59
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_components_core.Text, { children: [
|
|
60
|
+
"Error Message: ",
|
|
61
|
+
error.message
|
|
62
|
+
] })
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=known-error-message-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/message-cards/known-error-message-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { useStackApp } from \"../..\";\nimport MessageCard from \"./message-card\";\nimport { Text } from \"../../components-core\";\nimport { KnownError } from \"@stackframe/stack-shared\";\n\nexport default function KnownErrorMessageCard({ \n error,\n fullPage=false,\n}: { \n error: KnownError,\n fullPage?: boolean, \n}) {\n const stackApp = useStackApp();\n\n return (\n <MessageCard \n title={\"An error occurred\"}\n fullPage={fullPage} \n primaryButtonText={\"Go to Home\"}\n primaryAction={() => stackApp.redirectToHome()}\n >\n {<Text>Error Code: {error.errorCode}</Text>}\n {<Text>Error Message: {error.message}</Text>}\n </MessageCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,eAA4B;AAC5B,0BAAwB;AACxB,6BAAqB;AAmBd;AAhBQ,SAAR,sBAAuC;AAAA,EAC5C;AAAA,EACA,WAAS;AACX,GAGG;AACD,QAAM,eAAW,sBAAY;AAE7B,SACE;AAAA,IAAC,oBAAAA;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA,mBAAmB;AAAA,MACnB,eAAe,MAAM,SAAS,eAAe;AAAA,MAE5C;AAAA,qDAAC,+BAAK;AAAA;AAAA,UAAa,MAAM;AAAA,WAAU;AAAA,QACnC,6CAAC,+BAAK;AAAA;AAAA,UAAgB,MAAM;AAAA,WAAQ;AAAA;AAAA;AAAA,EACvC;AAEJ;","names":["MessageCard"]}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
|
-
declare function MessageCard({
|
|
4
|
+
declare function MessageCard({ fullPage, ...props }: {
|
|
5
5
|
children?: React__default.ReactNode;
|
|
6
6
|
title: string;
|
|
7
7
|
fullPage?: boolean;
|
|
8
|
+
primaryButtonText?: string;
|
|
9
|
+
primaryAction?: () => Promise<void> | void;
|
|
10
|
+
secondaryButtonText?: string;
|
|
11
|
+
secondaryAction?: () => Promise<void> | void;
|
|
8
12
|
}): react_jsx_runtime.JSX.Element;
|
|
9
13
|
|
|
10
14
|
export { MessageCard as default };
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
|
|
4
|
-
declare function MessageCard({
|
|
4
|
+
declare function MessageCard({ fullPage, ...props }: {
|
|
5
5
|
children?: React__default.ReactNode;
|
|
6
6
|
title: string;
|
|
7
7
|
fullPage?: boolean;
|
|
8
|
+
primaryButtonText?: string;
|
|
9
|
+
primaryAction?: () => Promise<void> | void;
|
|
10
|
+
secondaryButtonText?: string;
|
|
11
|
+
secondaryAction?: () => Promise<void> | void;
|
|
8
12
|
}): react_jsx_runtime.JSX.Element;
|
|
9
13
|
|
|
10
14
|
export { MessageCard as default };
|
|
@@ -29,19 +29,23 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
29
29
|
));
|
|
30
30
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
31
|
|
|
32
|
-
// src/components/message-card.tsx
|
|
32
|
+
// src/components/message-cards/message-card.tsx
|
|
33
33
|
var message_card_exports = {};
|
|
34
34
|
__export(message_card_exports, {
|
|
35
35
|
default: () => MessageCard
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(message_card_exports);
|
|
38
|
-
var import_maybe_full_page = __toESM(require("
|
|
39
|
-
var import_components_core = require("
|
|
38
|
+
var import_maybe_full_page = __toESM(require("../maybe-full-page"));
|
|
39
|
+
var import_components_core = require("../../components-core");
|
|
40
40
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
41
|
-
function MessageCard({
|
|
41
|
+
function MessageCard({ fullPage = false, ...props }) {
|
|
42
42
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_maybe_full_page.default, { fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { textAlign: "center" }, children: [
|
|
43
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Text, { size: "xl", as: "h2", style: { marginBottom: "24px" }, children: title }),
|
|
44
|
-
children
|
|
43
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Text, { size: "xl", as: "h2", style: { marginBottom: "24px" }, children: props.title }),
|
|
44
|
+
props.children,
|
|
45
|
+
(props.primaryButtonText || props.secondaryButtonText) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { display: "flex", flexDirection: "row", alignItems: "center", justifyContent: "center", gap: "16px", marginTop: 20 }, children: [
|
|
46
|
+
props.secondaryButtonText && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Button, { variant: "secondary", onClick: props.secondaryAction, children: props.secondaryButtonText }),
|
|
47
|
+
props.primaryButtonText && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Button, { onClick: props.primaryAction, children: props.primaryButtonText })
|
|
48
|
+
] })
|
|
45
49
|
] }) });
|
|
46
50
|
}
|
|
47
51
|
//# sourceMappingURL=message-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/message-cards/message-card.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport MaybeFullPage from \"../maybe-full-page\";\nimport { Button, Text } from \"../../components-core\";\n\nexport default function MessageCard(\n { fullPage=false, ...props }: \n { \n children?: React.ReactNode, \n title: string, \n fullPage?: boolean,\n primaryButtonText?: string,\n primaryAction?: () => Promise<void> | void,\n secondaryButtonText?: string,\n secondaryAction?: () => Promise<void> | void,\n }\n) {\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div style={{ textAlign: 'center' }}>\n <Text size=\"xl\" as='h2' style={{ marginBottom: '24px' }}>{props.title}</Text>\n {props.children}\n {(props.primaryButtonText || props.secondaryButtonText) && (\n <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'center', gap: '16px', marginTop: 20 }}>\n {props.secondaryButtonText && (\n <Button variant=\"secondary\" onClick={props.secondaryAction}>\n {props.secondaryButtonText}\n </Button>\n )}\n {props.primaryButtonText && (\n <Button onClick={props.primaryAction}>\n {props.primaryButtonText}\n </Button>\n )}\n </div>\n )}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,6BAA0B;AAC1B,6BAA6B;AAiBrB;AAfO,SAAR,YACL,EAAE,WAAS,OAAO,GAAG,MAAM,GAU3B;AACA,SACE,4CAAC,uBAAAA,SAAA,EAAc,UACb,uDAAC,SAAI,OAAO,EAAE,WAAW,SAAS,GAChC;AAAA,gDAAC,+BAAK,MAAK,MAAK,IAAG,MAAK,OAAO,EAAE,cAAc,OAAO,GAAI,gBAAM,OAAM;AAAA,IACrE,MAAM;AAAA,KACL,MAAM,qBAAqB,MAAM,wBACjC,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,OAAO,YAAY,UAAU,gBAAgB,UAAU,KAAK,QAAQ,WAAW,GAAG,GAC7H;AAAA,YAAM,uBACL,4CAAC,iCAAO,SAAQ,aAAY,SAAS,MAAM,iBACxC,gBAAM,qBACT;AAAA,MAED,MAAM,qBACL,4CAAC,iCAAO,SAAS,MAAM,eACpB,gBAAM,mBACT;AAAA,OAEJ;AAAA,KAEJ,GACF;AAEJ;","names":["MaybeFullPage"]}
|
package/dist/components/{redirect-message-card.d.mts → message-cards/predefined-message-card.d.mts}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
declare function
|
|
4
|
-
type: 'signedIn' | 'signedOut' | 'emailSent' | 'passwordReset' | 'emailVerified';
|
|
3
|
+
declare function PredefinedMessageCard({ type, fullPage, }: {
|
|
4
|
+
type: 'signedIn' | 'signedOut' | 'emailSent' | 'passwordReset' | 'emailVerified' | 'unknownError';
|
|
5
5
|
fullPage?: boolean;
|
|
6
6
|
}): react_jsx_runtime.JSX.Element;
|
|
7
7
|
|
|
8
|
-
export {
|
|
8
|
+
export { PredefinedMessageCard as default };
|
package/dist/components/{redirect-message-card.d.ts → message-cards/predefined-message-card.d.ts}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
declare function
|
|
4
|
-
type: 'signedIn' | 'signedOut' | 'emailSent' | 'passwordReset' | 'emailVerified';
|
|
3
|
+
declare function PredefinedMessageCard({ type, fullPage, }: {
|
|
4
|
+
type: 'signedIn' | 'signedOut' | 'emailSent' | 'passwordReset' | 'emailVerified' | 'unknownError';
|
|
5
5
|
fullPage?: boolean;
|
|
6
6
|
}): react_jsx_runtime.JSX.Element;
|
|
7
7
|
|
|
8
|
-
export {
|
|
8
|
+
export { PredefinedMessageCard as default };
|
package/dist/components/{redirect-message-card.js → message-cards/predefined-message-card.js}
RENAMED
|
@@ -29,32 +29,32 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
29
29
|
));
|
|
30
30
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
31
|
|
|
32
|
-
// src/components/
|
|
33
|
-
var
|
|
34
|
-
__export(
|
|
35
|
-
default: () =>
|
|
32
|
+
// src/components/message-cards/predefined-message-card.tsx
|
|
33
|
+
var predefined_message_card_exports = {};
|
|
34
|
+
__export(predefined_message_card_exports, {
|
|
35
|
+
default: () => PredefinedMessageCard
|
|
36
36
|
});
|
|
37
|
-
module.exports = __toCommonJS(
|
|
38
|
-
var
|
|
39
|
-
var import__ = require("..");
|
|
37
|
+
module.exports = __toCommonJS(predefined_message_card_exports);
|
|
38
|
+
var import__ = require("../..");
|
|
40
39
|
var import_message_card = __toESM(require("./message-card"));
|
|
41
|
-
var import_components_core = require("
|
|
40
|
+
var import_components_core = require("../../components-core");
|
|
42
41
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
43
|
-
function
|
|
42
|
+
function PredefinedMessageCard({
|
|
44
43
|
type,
|
|
45
44
|
fullPage = false
|
|
46
45
|
}) {
|
|
47
46
|
const stackApp = (0, import__.useStackApp)();
|
|
48
|
-
const router = (0, import_navigation.useRouter)();
|
|
49
47
|
let title;
|
|
50
|
-
let primaryAction;
|
|
51
48
|
let message = null;
|
|
52
|
-
let primaryButton;
|
|
49
|
+
let primaryButton = null;
|
|
53
50
|
let secondaryButton = null;
|
|
51
|
+
let primaryAction = null;
|
|
52
|
+
let secondaryAction = null;
|
|
54
53
|
switch (type) {
|
|
55
54
|
case "signedIn": {
|
|
56
55
|
title = "You are already signed in";
|
|
57
56
|
primaryAction = () => stackApp.redirectToAfterSignOut();
|
|
57
|
+
secondaryAction = () => stackApp.redirectToSignOut();
|
|
58
58
|
primaryButton = "Go to Home";
|
|
59
59
|
secondaryButton = "Sign Out";
|
|
60
60
|
break;
|
|
@@ -86,22 +86,25 @@ function RedirectMessageCard({
|
|
|
86
86
|
primaryButton = "Go to Home";
|
|
87
87
|
break;
|
|
88
88
|
}
|
|
89
|
+
case "unknownError": {
|
|
90
|
+
title = "An unknown error occurred";
|
|
91
|
+
message = "Please try again and if the problem persists, contact support.";
|
|
92
|
+
primaryAction = () => stackApp.redirectToHome();
|
|
93
|
+
primaryButton = "Go to Home";
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
89
96
|
}
|
|
90
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
),
|
|
103
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Button, { onClick: primaryAction, children: primaryButton })
|
|
104
|
-
] })
|
|
105
|
-
] });
|
|
97
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
98
|
+
import_message_card.default,
|
|
99
|
+
{
|
|
100
|
+
title,
|
|
101
|
+
fullPage,
|
|
102
|
+
primaryButtonText: primaryButton,
|
|
103
|
+
primaryAction,
|
|
104
|
+
secondaryButtonText: secondaryButton || void 0,
|
|
105
|
+
secondaryAction: secondaryAction || void 0,
|
|
106
|
+
children: message && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Text, { children: message })
|
|
107
|
+
}
|
|
108
|
+
);
|
|
106
109
|
}
|
|
107
|
-
//# sourceMappingURL=
|
|
110
|
+
//# sourceMappingURL=predefined-message-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/message-cards/predefined-message-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { useStackApp } from \"../..\";\nimport MessageCard from \"./message-card\";\nimport { Text } from \"../../components-core\";\n\nexport default function PredefinedMessageCard({ \n type,\n fullPage=false,\n}: { \n type: 'signedIn' | 'signedOut' | 'emailSent' | 'passwordReset' | 'emailVerified' | 'unknownError',\n fullPage?: boolean, \n}) {\n const stackApp = useStackApp();\n\n let title: string;\n let message: string | null = null;\n let primaryButton: string | null = null;\n let secondaryButton: string | null = null;\n let primaryAction: (() => Promise<void> | void) | null = null;\n let secondaryAction: (() => Promise<void> | void) | null = null;\n\n switch (type) {\n case 'signedIn': {\n title = \"You are already signed in\";\n primaryAction = () => stackApp.redirectToAfterSignOut();\n secondaryAction = () => stackApp.redirectToSignOut();\n primaryButton = \"Go to Home\";\n secondaryButton = \"Sign Out\";\n break;\n }\n case 'signedOut': {\n title = \"You are not currently signed in.\";\n primaryAction = () => stackApp.redirectToSignIn();\n primaryButton = \"Go to Home\";\n break;\n }\n case 'emailSent': {\n title = \"Email sent!\";\n message = 'Please check your inbox. Make sure to check your spam folder.';\n primaryAction = () => stackApp.redirectToHome();\n primaryButton = \"Go to Home\";\n break;\n }\n case 'passwordReset': {\n title = \"Password reset successfully!\";\n message = 'Your password has been reset. You can now sign in with your new password.';\n primaryAction = () => stackApp.redirectToSignIn();\n primaryButton = \"Go to Sign In\";\n break;\n }\n case 'emailVerified': {\n title = \"Email verified!\";\n message = 'Your have successfully verified your email.';\n primaryAction = () => stackApp.redirectToSignIn();\n primaryButton = \"Go to Home\";\n break;\n }\n case 'unknownError': {\n title = \"An unknown error occurred\";\n message = 'Please try again and if the problem persists, contact support.';\n primaryAction = () => stackApp.redirectToHome();\n primaryButton = \"Go to Home\";\n break;\n }\n }\n\n return (\n <MessageCard \n title={title} \n fullPage={fullPage} \n primaryButtonText={primaryButton} \n primaryAction={primaryAction} \n secondaryButtonText={secondaryButton || undefined} \n secondaryAction={secondaryAction || undefined}\n >\n {message && <Text>{message}</Text>}\n </MessageCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,eAA4B;AAC5B,0BAAwB;AACxB,6BAAqB;AAwEH;AAtEH,SAAR,sBAAuC;AAAA,EAC5C;AAAA,EACA,WAAS;AACX,GAGG;AACD,QAAM,eAAW,sBAAY;AAE7B,MAAI;AACJ,MAAI,UAAyB;AAC7B,MAAI,gBAA+B;AACnC,MAAI,kBAAiC;AACrC,MAAI,gBAAqD;AACzD,MAAI,kBAAuD;AAE3D,UAAQ,MAAM;AAAA,IACZ,KAAK,YAAY;AACf,cAAQ;AACR,sBAAgB,MAAM,SAAS,uBAAuB;AACtD,wBAAkB,MAAM,SAAS,kBAAkB;AACnD,sBAAgB;AAChB,wBAAkB;AAClB;AAAA,IACF;AAAA,IACA,KAAK,aAAa;AAChB,cAAQ;AACR,sBAAgB,MAAM,SAAS,iBAAiB;AAChD,sBAAgB;AAChB;AAAA,IACF;AAAA,IACA,KAAK,aAAa;AAChB,cAAQ;AACR,gBAAU;AACV,sBAAgB,MAAM,SAAS,eAAe;AAC9C,sBAAgB;AAChB;AAAA,IACF;AAAA,IACA,KAAK,iBAAiB;AACpB,cAAQ;AACR,gBAAU;AACV,sBAAgB,MAAM,SAAS,iBAAiB;AAChD,sBAAgB;AAChB;AAAA,IACF;AAAA,IACA,KAAK,iBAAiB;AACpB,cAAQ;AACR,gBAAU;AACV,sBAAgB,MAAM,SAAS,iBAAiB;AAChD,sBAAgB;AAChB;AAAA,IACF;AAAA,IACA,KAAK,gBAAgB;AACnB,cAAQ;AACR,gBAAU;AACV,sBAAgB,MAAM,SAAS,eAAe;AAC9C,sBAAgB;AAChB;AAAA,IACF;AAAA,EACF;AAEA,SACE;AAAA,IAAC,oBAAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA,qBAAqB,mBAAmB;AAAA,MACxC,iBAAiB,mBAAmB;AAAA,MAEnC,qBAAW,4CAAC,+BAAM,mBAAQ;AAAA;AAAA,EAC7B;AAEJ;","names":["MessageCard"]}
|
|
@@ -43,8 +43,8 @@ var import_password = require("@stackframe/stack-shared/dist/helpers/password");
|
|
|
43
43
|
var import__ = require("..");
|
|
44
44
|
var import_password_field = __toESM(require("./password-field"));
|
|
45
45
|
var import_form_warning = __toESM(require("./form-warning"));
|
|
46
|
-
var
|
|
47
|
-
var import_message_card = __toESM(require("./message-card"));
|
|
46
|
+
var import_predefined_message_card = __toESM(require("./message-cards/predefined-message-card"));
|
|
47
|
+
var import_message_card = __toESM(require("./message-cards/message-card"));
|
|
48
48
|
var import_maybe_full_page = __toESM(require("./maybe-full-page"));
|
|
49
49
|
var import_components_core = require("../components-core");
|
|
50
50
|
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
@@ -80,7 +80,7 @@ function PasswordResetInner({ code, fullPage = false }) {
|
|
|
80
80
|
setFinished(true);
|
|
81
81
|
};
|
|
82
82
|
if (finished) {
|
|
83
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
83
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.default, { type: "passwordReset", fullPage });
|
|
84
84
|
}
|
|
85
85
|
if (resetError) {
|
|
86
86
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.default, { title: "Failed to reset password", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components_core.Text, { children: "Failed to reset password. Please request a new password reset link" }) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/password-reset-inner.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 PasswordField from \"./password-field\";\nimport FormWarningText from \"./form-warning\";\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/components/password-reset-inner.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 PasswordField from \"./password-field\";\nimport FormWarningText from \"./form-warning\";\nimport PredefinedMessageCard from \"./message-cards/predefined-message-card\";\nimport MessageCard from \"./message-cards/message-card\";\nimport MaybeFullPage from \"./maybe-full-page\";\nimport { Button, Label, Text } from \"../components-core\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\n\nconst schema = yup.object().shape({\n password: yup.string().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: yup.string().nullable().oneOf([yup.ref('password'), null], 'Passwords do not match').required('Please repeat your password')\n});\n\nexport default function PasswordResetInner(\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\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\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 };\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 <Text>Failed to reset password. Please request a new password reset link</Text>\n </MessageCard>\n );\n }\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n <Text size=\"xl\" as='h2'>Reset Your Password</Text>\n </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\">New Password</Label>\n <PasswordField\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\" style={{ marginTop: \"1rem\" }}>Repeat New Password</Label>\n <PasswordField\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 style={{ marginTop: '1.5rem' }} type=\"submit\">\n Reset Password\n </Button>\n </form>\n </MaybeFullPage>\n ); \n}\n"],"mappings":"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","names":["PredefinedMessageCard","MessageCard","MaybeFullPage","PasswordField","FormWarningText"]}
|
|
@@ -12,18 +12,18 @@ import React__default from 'react';
|
|
|
12
12
|
declare const Button: React__default.ForwardRefExoticComponent<Omit<Omit<ButtonProps, "ref"> & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
|
|
13
13
|
declare const Input: React__default.ForwardRefExoticComponent<Omit<Omit<React__default.InputHTMLAttributes<HTMLInputElement> & Pick<React__default.HTMLProps<HTMLInputElement>, "ref">, "ref"> & React__default.RefAttributes<HTMLInputElement>, "ref"> & React__default.RefAttributes<HTMLInputElement>>;
|
|
14
14
|
declare const Container: React__default.ForwardRefExoticComponent<Omit<{
|
|
15
|
-
size?: number | "
|
|
15
|
+
size?: number | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
16
16
|
} & Omit<React__default.HTMLProps<HTMLDivElement>, "size">, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
|
|
17
17
|
declare const Separator: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_separator.SeparatorProps & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
|
|
18
18
|
declare const Label: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_label.LabelProps & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>>;
|
|
19
19
|
declare const Link: React__default.ForwardRefExoticComponent<Omit<Omit<{
|
|
20
|
-
size?: "
|
|
20
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
21
21
|
href: string | url.Url;
|
|
22
22
|
} & Omit<React__default.HTMLProps<HTMLLinkElement>, "size" | "href">, "ref"> & React__default.RefAttributes<HTMLAnchorElement>, "ref"> & React__default.RefAttributes<HTMLAnchorElement>>;
|
|
23
23
|
declare const Text: React__default.ForwardRefExoticComponent<Omit<Omit<{
|
|
24
24
|
variant?: "primary" | "secondary" | "warning" | "success" | undefined;
|
|
25
|
-
as?: "
|
|
26
|
-
size?: "
|
|
25
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | undefined;
|
|
26
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
27
27
|
} & Omit<React__default.HTMLProps<HTMLParagraphElement>, "size">, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>>;
|
|
28
28
|
declare const Popover: React__default.ForwardRefExoticComponent<_radix_ui_react_popover.PopoverProps & React__default.RefAttributes<never>>;
|
|
29
29
|
declare const PopoverTrigger: React__default.ForwardRefExoticComponent<Omit<_radix_ui_react_popover.PopoverTriggerProps & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
|
|
@@ -12,18 +12,18 @@ import React__default from 'react';
|
|
|
12
12
|
declare const Button: React__default.ForwardRefExoticComponent<Omit<Omit<ButtonProps, "ref"> & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
|
|
13
13
|
declare const Input: React__default.ForwardRefExoticComponent<Omit<Omit<React__default.InputHTMLAttributes<HTMLInputElement> & Pick<React__default.HTMLProps<HTMLInputElement>, "ref">, "ref"> & React__default.RefAttributes<HTMLInputElement>, "ref"> & React__default.RefAttributes<HTMLInputElement>>;
|
|
14
14
|
declare const Container: React__default.ForwardRefExoticComponent<Omit<{
|
|
15
|
-
size?: number | "
|
|
15
|
+
size?: number | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
16
16
|
} & Omit<React__default.HTMLProps<HTMLDivElement>, "size">, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
|
|
17
17
|
declare const Separator: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_separator.SeparatorProps & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
|
|
18
18
|
declare const Label: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_label.LabelProps & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>>;
|
|
19
19
|
declare const Link: React__default.ForwardRefExoticComponent<Omit<Omit<{
|
|
20
|
-
size?: "
|
|
20
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
21
21
|
href: string | url.Url;
|
|
22
22
|
} & Omit<React__default.HTMLProps<HTMLLinkElement>, "size" | "href">, "ref"> & React__default.RefAttributes<HTMLAnchorElement>, "ref"> & React__default.RefAttributes<HTMLAnchorElement>>;
|
|
23
23
|
declare const Text: React__default.ForwardRefExoticComponent<Omit<Omit<{
|
|
24
24
|
variant?: "primary" | "secondary" | "warning" | "success" | undefined;
|
|
25
|
-
as?: "
|
|
26
|
-
size?: "
|
|
25
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | undefined;
|
|
26
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
27
27
|
} & Omit<React__default.HTMLProps<HTMLParagraphElement>, "size">, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>>;
|
|
28
28
|
declare const Popover: React__default.ForwardRefExoticComponent<_radix_ui_react_popover.PopoverProps & React__default.RefAttributes<never>>;
|
|
29
29
|
declare const PopoverTrigger: React__default.ForwardRefExoticComponent<Omit<_radix_ui_react_popover.PopoverTriggerProps & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
|
|
@@ -2,8 +2,8 @@ import React__default from 'react';
|
|
|
2
2
|
|
|
3
3
|
declare const Text: React__default.ForwardRefExoticComponent<Omit<Omit<Omit<{
|
|
4
4
|
variant?: "primary" | "secondary" | "warning" | "success" | undefined;
|
|
5
|
-
as?: "
|
|
6
|
-
size?: "
|
|
5
|
+
as?: "h2" | "h3" | "p" | "h1" | "h4" | "h5" | "h6" | undefined;
|
|
6
|
+
size?: "sm" | "md" | "lg" | "xs" | "xl" | undefined;
|
|
7
7
|
} & Omit<React__default.HTMLProps<HTMLParagraphElement>, "size">, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>>;
|
|
8
8
|
|
|
9
9
|
export { Text };
|
|
@@ -2,8 +2,8 @@ import React__default from 'react';
|
|
|
2
2
|
|
|
3
3
|
declare const Text: React__default.ForwardRefExoticComponent<Omit<Omit<Omit<{
|
|
4
4
|
variant?: "primary" | "secondary" | "warning" | "success" | undefined;
|
|
5
|
-
as?: "
|
|
6
|
-
size?: "
|
|
5
|
+
as?: "h2" | "h3" | "p" | "h1" | "h4" | "h5" | "h6" | undefined;
|
|
6
|
+
size?: "sm" | "md" | "lg" | "xs" | "xl" | undefined;
|
|
7
7
|
} & Omit<React__default.HTMLProps<HTMLParagraphElement>, "size">, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>>;
|
|
8
8
|
|
|
9
9
|
export { Text };
|
|
@@ -36,7 +36,7 @@ __export(account_settings_exports, {
|
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(account_settings_exports);
|
|
38
38
|
var import__ = require("..");
|
|
39
|
-
var
|
|
39
|
+
var import_predefined_message_card = __toESM(require("../components/message-cards/predefined-message-card"));
|
|
40
40
|
var import_components_core = require("../components-core");
|
|
41
41
|
var import_user_avatar = __toESM(require("../components/user-avatar"));
|
|
42
42
|
var import_react = require("react");
|
|
@@ -207,7 +207,7 @@ function SignOutSection() {
|
|
|
207
207
|
function AccountSettings({ fullPage = false }) {
|
|
208
208
|
const user = (0, import__.useUser)();
|
|
209
209
|
if (!user) {
|
|
210
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
210
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.default, { type: "signedOut", fullPage });
|
|
211
211
|
}
|
|
212
212
|
const inner = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { padding: fullPage ? "1rem" : 0, display: "flex", flexDirection: "column", gap: "1rem" }, children: [
|
|
213
213
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/account-settings.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { PasswordField, useUser } from '..';\nimport RedirectMessageCard from '../components/redirect-message-card';\nimport { Text, Label, Input, Button, Card, CardHeader, CardContent, CardFooter, Container } from \"../components-core\";\nimport UserAvatar from '../components/user-avatar';\nimport { useState } from 'react';\nimport FormWarningText from '../components/form-warning';\nimport { getPasswordError } from '@stackframe/stack-shared/dist/helpers/password';\n\nfunction SettingSection(props: {\n title: string, \n desc: string, \n buttonText?: string, \n buttonDisabled?: boolean,\n onButtonClick?: React.ComponentProps<typeof Button>[\"onClick\"],\n buttonVariant?: 'primary' | 'secondary',\n children?: React.ReactNode, \n}) {\n return (\n <Card>\n <CardHeader>\n <Text as='h3' style={{ fontWeight: 500 }}>{props.title}</Text>\n <Text variant='secondary' size='sm'>{props.desc}</Text>\n </CardHeader>\n {props.children && <CardContent>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {props.children}\n </div>\n </CardContent>}\n {props.buttonText && <CardFooter>\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n <Button\n disabled={props.buttonDisabled}\n onClick={props.onButtonClick}\n variant={props.buttonVariant}\n >\n {props.buttonText}\n </Button>\n </div>\n </CardFooter>}\n </Card>\n );\n}\n\nfunction ProfileSection() {\n const user = useUser();\n const [userInfo, setUserInfo] = useState<{ displayName: string }>({ displayName: user?.displayName || '' });\n const [changed, setChanged] = useState(false);\n\n return (\n <SettingSection\n title='Profile'\n desc='Your profile information'\n buttonDisabled={!changed}\n buttonText='Save'\n onButtonClick={async () => {\n await user?.update(userInfo);\n setChanged(false);\n }}\n >\n <div style={{ display: 'flex', gap: '1rem', alignItems: 'center' }}>\n <UserAvatar user={user} size={50}/>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Text>{user?.displayName}</Text>\n <Text variant='secondary' size='sm'>{user?.primaryEmail}</Text>\n </div>\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='display-name'>Display Name</Label>\n <Input\n id='display-name'\n value={userInfo.displayName}\n onChange={(e) => {\n setUserInfo((i) => ({...i, displayName: e.target.value }));\n setChanged(true);\n }}\n />\n </div>\n </SettingSection>\n );\n}\n\nfunction EmailVerificationSection() {\n const user = useUser();\n const [emailSent, setEmailSent] = useState(false);\n\n return (\n <SettingSection\n title='Email Verification'\n desc='We want to make sure that you own the email address.'\n buttonDisabled={emailSent}\n buttonText={\n !user?.primaryEmailVerified ? \n emailSent ? \n 'Email sent!' : \n 'Send Email'\n : undefined\n }\n onButtonClick={async () => {\n await user?.sendVerificationEmail();\n setEmailSent(true);\n }}\n >\n {user?.primaryEmailVerified ? \n <Text variant='success'>Your email has been verified</Text> : \n <Text variant='warning'>Your email has not been verified</Text>}\n </SettingSection>\n );\n}\n\nfunction PasswordSection() {\n const user = useUser();\n const [oldPassword, setOldPassword] = useState<string>('');\n const [oldPasswordError, setOldPasswordError] = useState<string>('');\n const [newPassword, setNewPassword] = useState<string>('');\n const [newPasswordError, setNewPasswordError] = useState<string>('');\n\n if (!user?.hasPassword) {\n return null;\n }\n\n return (\n <SettingSection\n title='Password'\n desc='Change your password here.'\n buttonDisabled={!oldPassword || !newPassword}\n buttonText='Save'\n onButtonClick={async () => {\n if (oldPassword && newPassword) {\n const errorMessage = getPasswordError(newPassword);\n if (errorMessage) {\n setNewPasswordError(errorMessage.message);\n } else {\n const errorCode = await user.updatePassword({ oldPassword, newPassword });\n if (errorCode) {\n setOldPasswordError('Incorrect password');\n } else {\n setOldPassword('');\n setNewPassword('');\n }\n }\n } else if (oldPassword && !newPassword) {\n setNewPasswordError('Please enter a new password');\n } else if (newPassword && !oldPassword) {\n setOldPasswordError('Please enter your old password');\n }\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='old-password'>Old Password</Label>\n <PasswordField\n id='old-password' \n value={oldPassword} \n onChange={(e) => {\n setOldPassword(e.target.value);\n setOldPasswordError('');\n }}\n />\n <FormWarningText text={oldPasswordError} />\n </div>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='new-password'>New Password</Label>\n <PasswordField\n id='new-password' \n value={newPassword} \n onChange={(e) => {\n setNewPassword(e.target.value);\n setNewPasswordError('');\n }}\n />\n <FormWarningText text={newPasswordError} />\n </div>\n </SettingSection>\n );\n}\n\nfunction SignOutSection() {\n const user = useUser();\n return (\n <SettingSection\n title='Sign out'\n desc='Sign out of your account on this device.'\n buttonVariant='secondary'\n buttonText='Sign Out'\n onButtonClick={() => user?.signOut()}\n >\n </SettingSection>\n );\n}\n\nexport default function AccountSettings({ fullPage=false }: { fullPage?: boolean }) {\n const user = useUser();\n if (!user) {\n return <RedirectMessageCard type='signedOut' fullPage={fullPage} />;\n }\n\n const inner = (\n <div style={{ padding: fullPage ? '1rem' : 0, display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <Text size=\"xl\" as='h1' style={{ fontWeight: '600' }}>Account Settings</Text>\n <Text variant='secondary' size='sm'>Manage your account</Text>\n </div>\n \n <ProfileSection />\n <EmailVerificationSection />\n <PasswordSection />\n <SignOutSection />\n </div>\n );\n\n if (fullPage) {\n return (\n <Container size='sm'>\n {inner}\n </Container>\n );\n } else {\n return inner;\n }\n}\n"],"mappings":"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","names":["UserAvatar","FormWarningText","RedirectMessageCard"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/account-settings.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { PasswordField, useUser } from '..';\nimport PredefinedMessageCard from '../components/message-cards/predefined-message-card';\nimport { Text, Label, Input, Button, Card, CardHeader, CardContent, CardFooter, Container } from \"../components-core\";\nimport UserAvatar from '../components/user-avatar';\nimport { useState } from 'react';\nimport FormWarningText from '../components/form-warning';\nimport { getPasswordError } from '@stackframe/stack-shared/dist/helpers/password';\n\nfunction SettingSection(props: {\n title: string, \n desc: string, \n buttonText?: string, \n buttonDisabled?: boolean,\n onButtonClick?: React.ComponentProps<typeof Button>[\"onClick\"],\n buttonVariant?: 'primary' | 'secondary',\n children?: React.ReactNode, \n}) {\n return (\n <Card>\n <CardHeader>\n <Text as='h3' style={{ fontWeight: 500 }}>{props.title}</Text>\n <Text variant='secondary' size='sm'>{props.desc}</Text>\n </CardHeader>\n {props.children && <CardContent>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {props.children}\n </div>\n </CardContent>}\n {props.buttonText && <CardFooter>\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n <Button\n disabled={props.buttonDisabled}\n onClick={props.onButtonClick}\n variant={props.buttonVariant}\n >\n {props.buttonText}\n </Button>\n </div>\n </CardFooter>}\n </Card>\n );\n}\n\nfunction ProfileSection() {\n const user = useUser();\n const [userInfo, setUserInfo] = useState<{ displayName: string }>({ displayName: user?.displayName || '' });\n const [changed, setChanged] = useState(false);\n\n return (\n <SettingSection\n title='Profile'\n desc='Your profile information'\n buttonDisabled={!changed}\n buttonText='Save'\n onButtonClick={async () => {\n await user?.update(userInfo);\n setChanged(false);\n }}\n >\n <div style={{ display: 'flex', gap: '1rem', alignItems: 'center' }}>\n <UserAvatar user={user} size={50}/>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Text>{user?.displayName}</Text>\n <Text variant='secondary' size='sm'>{user?.primaryEmail}</Text>\n </div>\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='display-name'>Display Name</Label>\n <Input\n id='display-name'\n value={userInfo.displayName}\n onChange={(e) => {\n setUserInfo((i) => ({...i, displayName: e.target.value }));\n setChanged(true);\n }}\n />\n </div>\n </SettingSection>\n );\n}\n\nfunction EmailVerificationSection() {\n const user = useUser();\n const [emailSent, setEmailSent] = useState(false);\n\n return (\n <SettingSection\n title='Email Verification'\n desc='We want to make sure that you own the email address.'\n buttonDisabled={emailSent}\n buttonText={\n !user?.primaryEmailVerified ? \n emailSent ? \n 'Email sent!' : \n 'Send Email'\n : undefined\n }\n onButtonClick={async () => {\n await user?.sendVerificationEmail();\n setEmailSent(true);\n }}\n >\n {user?.primaryEmailVerified ? \n <Text variant='success'>Your email has been verified</Text> : \n <Text variant='warning'>Your email has not been verified</Text>}\n </SettingSection>\n );\n}\n\nfunction PasswordSection() {\n const user = useUser();\n const [oldPassword, setOldPassword] = useState<string>('');\n const [oldPasswordError, setOldPasswordError] = useState<string>('');\n const [newPassword, setNewPassword] = useState<string>('');\n const [newPasswordError, setNewPasswordError] = useState<string>('');\n\n if (!user?.hasPassword) {\n return null;\n }\n\n return (\n <SettingSection\n title='Password'\n desc='Change your password here.'\n buttonDisabled={!oldPassword || !newPassword}\n buttonText='Save'\n onButtonClick={async () => {\n if (oldPassword && newPassword) {\n const errorMessage = getPasswordError(newPassword);\n if (errorMessage) {\n setNewPasswordError(errorMessage.message);\n } else {\n const errorCode = await user.updatePassword({ oldPassword, newPassword });\n if (errorCode) {\n setOldPasswordError('Incorrect password');\n } else {\n setOldPassword('');\n setNewPassword('');\n }\n }\n } else if (oldPassword && !newPassword) {\n setNewPasswordError('Please enter a new password');\n } else if (newPassword && !oldPassword) {\n setOldPasswordError('Please enter your old password');\n }\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='old-password'>Old Password</Label>\n <PasswordField\n id='old-password' \n value={oldPassword} \n onChange={(e) => {\n setOldPassword(e.target.value);\n setOldPasswordError('');\n }}\n />\n <FormWarningText text={oldPasswordError} />\n </div>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='new-password'>New Password</Label>\n <PasswordField\n id='new-password' \n value={newPassword} \n onChange={(e) => {\n setNewPassword(e.target.value);\n setNewPasswordError('');\n }}\n />\n <FormWarningText text={newPasswordError} />\n </div>\n </SettingSection>\n );\n}\n\nfunction SignOutSection() {\n const user = useUser();\n return (\n <SettingSection\n title='Sign out'\n desc='Sign out of your account on this device.'\n buttonVariant='secondary'\n buttonText='Sign Out'\n onButtonClick={() => user?.signOut()}\n >\n </SettingSection>\n );\n}\n\nexport default function AccountSettings({ fullPage=false }: { fullPage?: boolean }) {\n const user = useUser();\n if (!user) {\n return <PredefinedMessageCard type='signedOut' fullPage={fullPage} />;\n }\n\n const inner = (\n <div style={{ padding: fullPage ? '1rem' : 0, display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <Text size=\"xl\" as='h1' style={{ fontWeight: '600' }}>Account Settings</Text>\n <Text variant='secondary' size='sm'>Manage your account</Text>\n </div>\n \n <ProfileSection />\n <EmailVerificationSection />\n <PasswordSection />\n <SignOutSection />\n </div>\n );\n\n if (fullPage) {\n return (\n <Container size='sm'>\n {inner}\n </Container>\n );\n } else {\n return inner;\n }\n}\n"],"mappings":"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","names":["UserAvatar","FormWarningText","PredefinedMessageCard"]}
|
|
@@ -40,7 +40,7 @@ var import_separator_with_text = __toESM(require("../components/separator-with-t
|
|
|
40
40
|
var import_oauth_group = __toESM(require("../components/oauth-group"));
|
|
41
41
|
var import_maybe_full_page = __toESM(require("../components/maybe-full-page"));
|
|
42
42
|
var import__ = require("..");
|
|
43
|
-
var
|
|
43
|
+
var import_predefined_message_card = __toESM(require("../components/message-cards/predefined-message-card"));
|
|
44
44
|
var import_components_core = require("../components-core");
|
|
45
45
|
var import_magic_link_sign_in = __toESM(require("../components/magic-link-sign-in"));
|
|
46
46
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -54,7 +54,7 @@ function AuthPage({
|
|
|
54
54
|
const projectFromHook = stackApp.useProject();
|
|
55
55
|
const project = mockProject || projectFromHook;
|
|
56
56
|
if (user && !mockProject) {
|
|
57
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
57
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.default, { type: "signedIn", fullPage });
|
|
58
58
|
}
|
|
59
59
|
const enableSeparator = (project.credentialEnabled || project.magicLinkEnabled) && project.oauthProviders.filter((p) => p.enabled).length > 0;
|
|
60
60
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_maybe_full_page.default, { fullPage, children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport CredentialSignIn from '../components/credential-sign-in';\nimport SeparatorWithText from '../components/separator-with-text';\nimport OAuthGroup from '../components/oauth-group';\nimport MaybeFullPage from '../components/maybe-full-page';\nimport { useUser, useStackApp, CredentialSignUp } from '..';\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport CredentialSignIn from '../components/credential-sign-in';\nimport SeparatorWithText from '../components/separator-with-text';\nimport OAuthGroup from '../components/oauth-group';\nimport MaybeFullPage from '../components/maybe-full-page';\nimport { useUser, useStackApp, CredentialSignUp } from '..';\nimport PredefinedMessageCard from '../components/message-cards/predefined-message-card';\nimport { Link, Tabs, TabsContent, TabsList, TabsTrigger, Text } from \"../components-core\";\nimport MagicLinkSignIn from '../components/magic-link-sign-in';\nimport { ClientProjectJson } from \"@stackframe/stack-shared\";\n\nexport default function AuthPage({ \n fullPage=false,\n type,\n mockProject,\n}: { \n fullPage?: boolean, \n type: 'sign-in' | 'sign-up',\n mockProject?: ClientProjectJson,\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n const projectFromHook = stackApp.useProject();\n const project = mockProject || projectFromHook;\n\n if (user && !mockProject) {\n return <PredefinedMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n const enableSeparator = (project.credentialEnabled || project.magicLinkEnabled) && project.oauthProviders.filter(p => p.enabled).length > 0;\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n <Text size=\"xl\" as='h2' style={{ fontWeight: 500 }}>\n {type === 'sign-in' ? 'Sign in to your account' : 'Create a new account'}\n </Text>\n {type === 'sign-in' ? (\n <Text>\n {\"Don't have an account? \"}\n <Link href={stackApp.urls.signUp}>\n Sign up\n </Link>\n </Text>\n ) : (\n <Text>\n {\"Already have an account? \"}\n <Link href={stackApp.urls.signIn}>\n Sign in\n </Link>\n </Text>\n )}\n </div>\n <OAuthGroup type={type} mockProject={mockProject} />\n {enableSeparator && <SeparatorWithText text={'Or continue with'} />}\n {project.credentialEnabled && project.magicLinkEnabled ? (\n <Tabs defaultValue='magic-link'>\n <TabsList>\n <TabsTrigger value='magic-link'>Magic Link</TabsTrigger>\n <TabsTrigger value='password'>Password</TabsTrigger>\n </TabsList>\n <TabsContent value='magic-link'>\n <MagicLinkSignIn/>\n </TabsContent>\n <TabsContent value='password'>\n {type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>}\n </TabsContent>\n </Tabs>\n ) : project.credentialEnabled ? (\n type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>\n ) : project.magicLinkEnabled ? (\n <MagicLinkSignIn/>\n ) : null}\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,gCAA6B;AAC7B,iCAA8B;AAC9B,yBAAuB;AACvB,6BAA0B;AAC1B,eAAuD;AACvD,qCAAkC;AAClC,6BAAqE;AACrE,gCAA4B;AAkBjB;AAfI,SAAR,SAA0B;AAAA,EAC/B,WAAS;AAAA,EACT;AAAA,EACA;AACF,GAIG;AACD,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AACrB,QAAM,kBAAkB,SAAS,WAAW;AAC5C,QAAM,UAAU,eAAe;AAE/B,MAAI,QAAQ,CAAC,aAAa;AACxB,WAAO,4CAAC,+BAAAA,SAAA,EAAsB,MAAK,YAAW,UAAoB;AAAA,EACpE;AAEA,QAAM,mBAAmB,QAAQ,qBAAqB,QAAQ,qBAAqB,QAAQ,eAAe,OAAO,OAAK,EAAE,OAAO,EAAE,SAAS;AAE1I,SACE,6CAAC,uBAAAC,SAAA,EAAc,UACb;AAAA,iDAAC,SAAI,OAAO,EAAE,WAAW,UAAU,cAAc,SAAS,GACxD;AAAA,kDAAC,+BAAK,MAAK,MAAK,IAAG,MAAK,OAAO,EAAE,YAAY,IAAI,GAC9C,mBAAS,YAAY,4BAA4B,wBACpD;AAAA,MACC,SAAS,YACR,6CAAC,+BACE;AAAA;AAAA,QACD,4CAAC,+BAAK,MAAM,SAAS,KAAK,QAAQ,qBAElC;AAAA,SACF,IAEA,6CAAC,+BACE;AAAA;AAAA,QACD,4CAAC,+BAAK,MAAM,SAAS,KAAK,QAAQ,qBAElC;AAAA,SACF;AAAA,OAEJ;AAAA,IACA,4CAAC,mBAAAC,SAAA,EAAW,MAAY,aAA0B;AAAA,IACjD,mBAAmB,4CAAC,2BAAAC,SAAA,EAAkB,MAAM,oBAAoB;AAAA,IAChE,QAAQ,qBAAqB,QAAQ,mBACpC,6CAAC,+BAAK,cAAa,cACjB;AAAA,mDAAC,mCACC;AAAA,oDAAC,sCAAY,OAAM,cAAa,wBAAU;AAAA,QAC1C,4CAAC,sCAAY,OAAM,YAAW,sBAAQ;AAAA,SACxC;AAAA,MACA,4CAAC,sCAAY,OAAM,cACjB,sDAAC,0BAAAC,SAAA,EAAe,GAClB;AAAA,MACA,4CAAC,sCAAY,OAAM,YAChB,mBAAS,YAAY,4CAAC,6BAAgB,IAAK,4CAAC,0BAAAC,SAAA,EAAgB,GAC/D;AAAA,OACF,IACE,QAAQ,oBACV,SAAS,YAAY,4CAAC,6BAAgB,IAAK,4CAAC,0BAAAA,SAAA,EAAgB,IAC1D,QAAQ,mBACV,4CAAC,0BAAAD,SAAA,EAAe,IACd;AAAA,KACN;AAEJ;","names":["PredefinedMessageCard","MaybeFullPage","OAuthGroup","SeparatorWithText","MagicLinkSignIn","CredentialSignIn"]}
|
|
@@ -37,8 +37,8 @@ __export(email_verification_exports, {
|
|
|
37
37
|
module.exports = __toCommonJS(email_verification_exports);
|
|
38
38
|
var import_react = require("react");
|
|
39
39
|
var import__ = require("..");
|
|
40
|
-
var import_message_card = __toESM(require("../components/message-card"));
|
|
41
|
-
var
|
|
40
|
+
var import_message_card = __toESM(require("../components/message-cards/message-card"));
|
|
41
|
+
var import_predefined_message_card = __toESM(require("../components/message-cards/predefined-message-card"));
|
|
42
42
|
var import_stack_shared = require("@stackframe/stack-shared");
|
|
43
43
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
44
44
|
function EmailVerification({
|
|
@@ -62,6 +62,6 @@ function EmailVerification({
|
|
|
62
62
|
} else if (error) {
|
|
63
63
|
throw error;
|
|
64
64
|
}
|
|
65
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
65
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.default, { type: "emailVerified", fullPage });
|
|
66
66
|
}
|
|
67
67
|
//# sourceMappingURL=email-verification.js.map
|