@beyondcorp/beyond-ui 1.3.10 → 1.3.12
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/dist/components/Auth/ForgotPasswordForm.d.ts +9 -0
- package/dist/components/Auth/ForgotPasswordForm.example.d.ts +2 -0
- package/dist/components/Auth/ForgotPasswordForm.example.js +20 -0
- package/dist/components/Auth/ForgotPasswordForm.example.js.map +1 -0
- package/dist/components/Auth/ForgotPasswordForm.js +30 -0
- package/dist/components/Auth/ForgotPasswordForm.js.map +1 -0
- package/dist/components/Auth/ResetPasswordForm.d.ts +9 -0
- package/dist/components/Auth/ResetPasswordForm.js +41 -0
- package/dist/components/Auth/ResetPasswordForm.js.map +1 -0
- package/dist/components/Auth/index.d.ts +2 -1
- package/dist/components/Auth/index.js +2 -1
- package/dist/components/Auth/index.js.map +1 -1
- package/dist/components/ComponentShowcase/showcaseRegistry.js +1 -1
- package/dist/components/ComponentShowcase/showcaseRegistry.js.map +1 -1
- package/dist/index.js +2 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface ForgotPasswordFormProps {
|
|
3
|
+
onReset?: (email: string) => Promise<void> | void;
|
|
4
|
+
className?: string;
|
|
5
|
+
isLoading?: boolean;
|
|
6
|
+
successMessage?: string;
|
|
7
|
+
errorMessage?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const ForgotPasswordForm: React.FC<ForgotPasswordFormProps>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { ForgotPasswordForm } from './ForgotPasswordForm.js';
|
|
4
|
+
import { Card, CardHeader, CardTitle, CardContent } from '../Card/Card.js';
|
|
5
|
+
import { toast } from 'react-hot-toast';
|
|
6
|
+
|
|
7
|
+
const PasswordResetFormExample = () => {
|
|
8
|
+
const [loading, setLoading] = React.useState(false);
|
|
9
|
+
// Simulate async reset logic
|
|
10
|
+
const handleReset = async (email) => {
|
|
11
|
+
setLoading(true);
|
|
12
|
+
await new Promise((res) => setTimeout(res, 1300));
|
|
13
|
+
setLoading(false);
|
|
14
|
+
toast.success(`If an account exists for ${email}, a reset link was sent.`);
|
|
15
|
+
};
|
|
16
|
+
return (jsx("div", { className: "flex items-center justify-center min-h-[400px] bg-background", children: jsxs(Card, { className: "w-full max-w-md", children: [jsx(CardHeader, { children: jsx(CardTitle, { children: "Password Reset" }) }), jsx(CardContent, { children: jsx(ForgotPasswordForm, { onReset: handleReset, isLoading: loading }) })] }) }));
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { PasswordResetFormExample };
|
|
20
|
+
//# sourceMappingURL=ForgotPasswordForm.example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgotPasswordForm.example.js","sources":["../../../src/components/Auth/ForgotPasswordForm.example.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ForgotPasswordForm } from \"./ForgotPasswordForm\";\nimport { Card, CardHeader, CardTitle, CardContent } from \"../Card\";\nimport { toast } from \"react-hot-toast\";\n\nexport const PasswordResetFormExample: React.FC = () => {\n const [loading, setLoading] = React.useState(false);\n\n // Simulate async reset logic\n const handleReset = async (email: string) => {\n setLoading(true);\n await new Promise((res) => setTimeout(res, 1300));\n setLoading(false);\n toast.success(`If an account exists for ${email}, a reset link was sent.`);\n };\n\n return (\n <div className=\"flex items-center justify-center min-h-[400px] bg-background\">\n <Card className=\"w-full max-w-md\">\n <CardHeader>\n <CardTitle>Password Reset</CardTitle>\n </CardHeader>\n <CardContent>\n <ForgotPasswordForm\n onReset={handleReset}\n isLoading={loading}\n />\n </CardContent>\n </Card>\n </div>\n );\n};"],"names":["_jsx","_jsxs"],"mappings":";;;;;;AAKO,MAAM,wBAAwB,GAAa,MAAK;AACrD,IAAA,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGnD,IAAA,MAAM,WAAW,GAAG,OAAO,KAAa,KAAI;QAC1C,UAAU,CAAC,IAAI,CAAC;AAChB,QAAA,MAAM,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjD,UAAU,CAAC,KAAK,CAAC;AACjB,QAAA,KAAK,CAAC,OAAO,CAAC,4BAA4B,KAAK,CAAA,wBAAA,CAA0B,CAAC;AAC5E,IAAA,CAAC;AAED,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8DAA8D,YAC3EC,IAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC/BD,IAAC,UAAU,EAAA,EAAA,QAAA,EACTA,IAAC,SAAS,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,CAA2B,EAAA,CAC1B,EACbA,IAAC,WAAW,EAAA,EAAA,QAAA,EACVA,IAAC,kBAAkB,EAAA,EACjB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,OAAO,EAAA,CAClB,GACU,CAAA,EAAA,CACT,EAAA,CACH;AAEV;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useForm } from 'react-hook-form';
|
|
4
|
+
import { zodResolver } from '@hookform/resolvers/zod';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { Input } from '../Input/Input.js';
|
|
7
|
+
import { Button } from '../Button/Button.js';
|
|
8
|
+
import { cn } from '../../utils/cn.js';
|
|
9
|
+
|
|
10
|
+
const schema = z.object({
|
|
11
|
+
email: z.string().min(1, "Email is required").email("Enter a valid email")
|
|
12
|
+
});
|
|
13
|
+
const ForgotPasswordForm = ({ onReset, className, isLoading, successMessage, errorMessage }) => {
|
|
14
|
+
const { register, handleSubmit, formState: { errors, isSubmitting, isSubmitSuccessful } } = useForm({ resolver: zodResolver(schema) });
|
|
15
|
+
const [status, setStatus] = React.useState("idle");
|
|
16
|
+
const onSubmit = async (data) => {
|
|
17
|
+
setStatus("idle");
|
|
18
|
+
try {
|
|
19
|
+
await onReset?.(data.email);
|
|
20
|
+
setStatus("success");
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
setStatus("error");
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
return (jsxs("form", { onSubmit: handleSubmit(onSubmit), className: cn("space-y-6", className), autoComplete: "off", noValidate: true, children: [jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium mb-1", htmlFor: "reset-email", children: "Email Address" }), jsx(Input, { id: "reset-email", type: "email", autoComplete: "email", placeholder: "you@email.com", ...register("email"), disabled: isSubmitting || isLoading, variant: errors.email ? "error" : "default" }), errors.email && (jsx("div", { className: "text-danger mt-1 text-xs", children: errors.email.message }))] }), jsx(Button, { type: "submit", variant: "primary", disabled: isSubmitting || isLoading, className: "w-full", children: "Send Reset Link" }), status === "success" && (jsx("div", { className: "text-success-700 bg-success-50 border border-success-200 p-2 text-sm rounded text-center", children: successMessage || "A reset link was sent if the address exists in our system." })), status === "error" && (jsx("div", { className: "text-danger-700 bg-danger-50 border border-danger-200 p-2 text-sm rounded text-center", children: errorMessage || "There was an error submitting. Please try again." }))] }));
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { ForgotPasswordForm };
|
|
30
|
+
//# sourceMappingURL=ForgotPasswordForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForgotPasswordForm.js","sources":["../../../src/components/Auth/ForgotPasswordForm.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { z } from \"zod\";\nimport { Input } from \"../Input\";\nimport { Button } from \"../Button\";\nimport { cn } from \"../../utils/cn\";\n\nconst schema = z.object({\n email: z.string().min(1, \"Email is required\").email(\"Enter a valid email\")\n});\n\ntype ForgotPasswordFormData = z.infer<typeof schema>;\n\nexport interface ForgotPasswordFormProps {\n onReset?: (email: string) => Promise<void> | void;\n className?: string;\n isLoading?: boolean;\n successMessage?: string;\n errorMessage?: string;\n}\n\nexport const ForgotPasswordForm: React.FC<ForgotPasswordFormProps> = ({\n onReset,\n className,\n isLoading,\n successMessage,\n errorMessage\n}) => {\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting, isSubmitSuccessful }\n } = useForm<ForgotPasswordFormData>({ resolver: zodResolver(schema) });\n\n const [status, setStatus] = React.useState<\"idle\" | \"success\" | \"error\">(\"idle\");\n\n const onSubmit = async (data: ForgotPasswordFormData) => {\n setStatus(\"idle\");\n try {\n await onReset?.(data.email);\n setStatus(\"success\");\n } catch (e) {\n setStatus(\"error\");\n }\n };\n\n return (\n <form\n onSubmit={handleSubmit(onSubmit)}\n className={cn(\"space-y-6\", className)}\n autoComplete=\"off\"\n noValidate\n >\n <div>\n <label className=\"block text-sm font-medium mb-1\" htmlFor=\"reset-email\">\n Email Address\n </label>\n <Input\n id=\"reset-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"you@email.com\"\n {...register(\"email\")}\n disabled={isSubmitting || isLoading}\n variant={errors.email ? \"error\" : \"default\"}\n />\n {errors.email && (\n <div className=\"text-danger mt-1 text-xs\">{errors.email.message}</div>\n )}\n </div>\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={isSubmitting || isLoading}\n className=\"w-full\"\n >\n Send Reset Link\n </Button>\n {status === \"success\" && (\n <div className=\"text-success-700 bg-success-50 border border-success-200 p-2 text-sm rounded text-center\">\n {successMessage || \"A reset link was sent if the address exists in our system.\"}\n </div>\n )}\n {status === \"error\" && (\n <div className=\"text-danger-700 bg-danger-50 border border-danger-200 p-2 text-sm rounded text-center\">\n {errorMessage || \"There was an error submitting. Please try again.\"}\n </div>\n )}\n </form>\n );\n};"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;AAQA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AACtB,IAAA,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC,qBAAqB;AAC1E,CAAA,CAAC;AAYK,MAAM,kBAAkB,GAAsC,CAAC,EACpE,OAAO,EACP,SAAS,EACT,SAAS,EACT,cAAc,EACd,YAAY,EACb,KAAI;IACH,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,SAAS,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,EACxD,GAAG,OAAO,CAAyB,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AAEtE,IAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAA+B,MAAM,CAAC;AAEhF,IAAA,MAAM,QAAQ,GAAG,OAAO,IAA4B,KAAI;QACtD,SAAS,CAAC,MAAM,CAAC;AACjB,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;YAC3B,SAAS,CAAC,SAAS,CAAC;QACtB;QAAE,OAAO,CAAC,EAAE;YACV,SAAS,CAAC,OAAO,CAAC;QACpB;AACF,IAAA,CAAC;AAED,IAAA,QACEA,IAAA,CAAA,MAAA,EAAA,EACE,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,EAChC,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EACrC,YAAY,EAAC,KAAK,EAClB,UAAU,EAAA,IAAA,EAAA,QAAA,EAAA,CAEVA,yBACEC,GAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,gCAAgC,EAAC,OAAO,EAAC,aAAa,EAAA,QAAA,EAAA,eAAA,EAAA,CAE/D,EACRA,GAAA,CAAC,KAAK,EAAA,EACJ,EAAE,EAAC,aAAa,EAChB,IAAI,EAAC,OAAO,EACZ,YAAY,EAAC,OAAO,EACpB,WAAW,EAAC,eAAe,EAAA,GACvB,QAAQ,CAAC,OAAO,CAAC,EACrB,QAAQ,EAAE,YAAY,IAAI,SAAS,EACnC,OAAO,EAAE,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,SAAS,EAAA,CAC3C,EACD,MAAM,CAAC,KAAK,KACXA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAA,CAAO,CACvE,CAAA,EAAA,CACG,EACNA,GAAA,CAAC,MAAM,EAAA,EACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,YAAY,IAAI,SAAS,EACnC,SAAS,EAAC,QAAQ,EAAA,QAAA,EAAA,iBAAA,EAAA,CAGX,EACR,MAAM,KAAK,SAAS,KACnBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0FAA0F,EAAA,QAAA,EACtG,cAAc,IAAI,4DAA4D,EAAA,CAC3E,CACP,EACA,MAAM,KAAK,OAAO,KACjBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uFAAuF,EAAA,QAAA,EACnG,YAAY,IAAI,kDAAkD,EAAA,CAC/D,CACP,CAAA,EAAA,CACI;AAEX;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface ResetPasswordFormProps {
|
|
3
|
+
onSubmit?: (password: string) => Promise<void> | void;
|
|
4
|
+
className?: string;
|
|
5
|
+
isLoading?: boolean;
|
|
6
|
+
successMessage?: string;
|
|
7
|
+
errorMessage?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const ResetPasswordForm: React.FC<ResetPasswordFormProps>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useForm } from 'react-hook-form';
|
|
4
|
+
import { zodResolver } from '@hookform/resolvers/zod';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { Lock, EyeOff, Eye } from 'lucide-react';
|
|
7
|
+
import { Input } from '../Input/Input.js';
|
|
8
|
+
import { Button } from '../Button/Button.js';
|
|
9
|
+
import { cn } from '../../utils/cn.js';
|
|
10
|
+
import { Spinner } from '../Spinner/Spinner.js';
|
|
11
|
+
|
|
12
|
+
const schema = z.object({
|
|
13
|
+
password: z.string().min(8, "Password must be at least 8 characters"),
|
|
14
|
+
confirmPassword: z.string()
|
|
15
|
+
}).refine((data) => data.password === data.confirmPassword, {
|
|
16
|
+
message: "Passwords do not match",
|
|
17
|
+
path: ["confirmPassword"],
|
|
18
|
+
});
|
|
19
|
+
const ResetPasswordForm = ({ onSubmit, className, isLoading, successMessage, errorMessage }) => {
|
|
20
|
+
const [showPassword, setShowPassword] = React.useState(false);
|
|
21
|
+
const [showConfirmPassword, setShowConfirmPassword] = React.useState(false);
|
|
22
|
+
const [status, setStatus] = React.useState("idle");
|
|
23
|
+
const { register, handleSubmit, formState: { errors, isSubmitting } } = useForm({ resolver: zodResolver(schema) });
|
|
24
|
+
const handleFormSubmit = async (data) => {
|
|
25
|
+
setStatus("idle");
|
|
26
|
+
try {
|
|
27
|
+
await onSubmit?.(data.password);
|
|
28
|
+
setStatus("success");
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
setStatus("error");
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
if (status === "success") {
|
|
35
|
+
return (jsx("div", { className: cn("text-success-700 bg-success-50 border border-success-200 p-6 text-sm rounded-lg text-center", className), children: successMessage || "Your password has been successfully reset. You can now log in with your new password." }));
|
|
36
|
+
}
|
|
37
|
+
return (jsxs("form", { onSubmit: handleSubmit(handleFormSubmit), className: cn("space-y-6", className), autoComplete: "off", noValidate: true, children: [jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", htmlFor: "password", children: "New Password" }), jsxs("div", { className: "relative", children: [jsx(Lock, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" }), jsx(Input, { id: "password", type: showPassword ? "text" : "password", placeholder: "Enter new password", className: cn("pl-10 pr-10", errors.password && "border-danger-500 focus:ring-danger-500"), ...register("password"), disabled: isSubmitting || isLoading }), jsx("button", { type: "button", onClick: () => setShowPassword(!showPassword), className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600", children: showPassword ? jsx(EyeOff, { className: "h-5 w-5" }) : jsx(Eye, { className: "h-5 w-5" }) })] }), errors.password && (jsx("p", { className: "mt-1 text-sm text-danger-600", children: errors.password.message }))] }), jsxs("div", { children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", htmlFor: "confirmPassword", children: "Confirm Password" }), jsxs("div", { className: "relative", children: [jsx(Lock, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" }), jsx(Input, { id: "confirmPassword", type: showConfirmPassword ? "text" : "password", placeholder: "Confirm new password", className: cn("pl-10 pr-10", errors.confirmPassword && "border-danger-500 focus:ring-danger-500"), ...register("confirmPassword"), disabled: isSubmitting || isLoading }), jsx("button", { type: "button", onClick: () => setShowConfirmPassword(!showConfirmPassword), className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600", children: showConfirmPassword ? jsx(EyeOff, { className: "h-5 w-5" }) : jsx(Eye, { className: "h-5 w-5" }) })] }), errors.confirmPassword && (jsx("p", { className: "mt-1 text-sm text-danger-600", children: errors.confirmPassword.message }))] }), jsx(Button, { type: "submit", variant: "primary", className: "w-full", disabled: isSubmitting || isLoading, children: (isSubmitting || isLoading) ? (jsxs(Fragment, { children: [jsx(Spinner, { size: "sm", className: "mr-2" }), "Resetting..."] })) : ("Reset Password") }), status === "error" && (jsx("div", { className: "text-danger-700 bg-danger-50 border border-danger-200 p-2 text-sm rounded text-center", children: errorMessage || "There was an error resetting your password. Please try again." }))] }));
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export { ResetPasswordForm };
|
|
41
|
+
//# sourceMappingURL=ResetPasswordForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResetPasswordForm.js","sources":["../../../src/components/Auth/ResetPasswordForm.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { z } from \"zod\";\nimport { Eye, EyeOff, Lock } from \"lucide-react\";\nimport { Input } from \"../Input\";\nimport { Button } from \"../Button\";\nimport { cn } from \"../../utils/cn\";\nimport { Spinner } from \"../Spinner\";\n\nconst schema = z.object({\n password: z.string().min(8, \"Password must be at least 8 characters\"),\n confirmPassword: z.string()\n}).refine((data) => data.password === data.confirmPassword, {\n message: \"Passwords do not match\",\n path: [\"confirmPassword\"],\n});\n\ntype ResetPasswordFormData = z.infer<typeof schema>;\n\nexport interface ResetPasswordFormProps {\n onSubmit?: (password: string) => Promise<void> | void;\n className?: string;\n isLoading?: boolean;\n successMessage?: string;\n errorMessage?: string;\n}\n\nexport const ResetPasswordForm: React.FC<ResetPasswordFormProps> = ({\n onSubmit,\n className,\n isLoading,\n successMessage,\n errorMessage\n}) => {\n const [showPassword, setShowPassword] = React.useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = React.useState(false);\n const [status, setStatus] = React.useState<\"idle\" | \"success\" | \"error\">(\"idle\");\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting }\n } = useForm<ResetPasswordFormData>({ resolver: zodResolver(schema) });\n\n const handleFormSubmit = async (data: ResetPasswordFormData) => {\n setStatus(\"idle\");\n try {\n await onSubmit?.(data.password);\n setStatus(\"success\");\n } catch (e) {\n setStatus(\"error\");\n }\n };\n\n if (status === \"success\") {\n return (\n <div className={cn(\"text-success-700 bg-success-50 border border-success-200 p-6 text-sm rounded-lg text-center\", className)}>\n {successMessage || \"Your password has been successfully reset. You can now log in with your new password.\"}\n </div>\n );\n }\n\n return (\n <form\n onSubmit={handleSubmit(handleFormSubmit)}\n className={cn(\"space-y-6\", className)}\n autoComplete=\"off\"\n noValidate\n >\n {/* Password Field */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\" htmlFor=\"password\">\n New Password\n </label>\n <div className=\"relative\">\n <Lock className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400\" />\n <Input\n id=\"password\"\n type={showPassword ? \"text\" : \"password\"}\n placeholder=\"Enter new password\"\n className={cn(\"pl-10 pr-10\", errors.password && \"border-danger-500 focus:ring-danger-500\")}\n {...register(\"password\")}\n disabled={isSubmitting || isLoading}\n />\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n >\n {showPassword ? <EyeOff className=\"h-5 w-5\" /> : <Eye className=\"h-5 w-5\" />}\n </button>\n </div>\n {errors.password && (\n <p className=\"mt-1 text-sm text-danger-600\">{errors.password.message}</p>\n )}\n </div>\n\n {/* Confirm Password Field */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\" htmlFor=\"confirmPassword\">\n Confirm Password\n </label>\n <div className=\"relative\">\n <Lock className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400\" />\n <Input\n id=\"confirmPassword\"\n type={showConfirmPassword ? \"text\" : \"password\"}\n placeholder=\"Confirm new password\"\n className={cn(\"pl-10 pr-10\", errors.confirmPassword && \"border-danger-500 focus:ring-danger-500\")}\n {...register(\"confirmPassword\")}\n disabled={isSubmitting || isLoading}\n />\n <button\n type=\"button\"\n onClick={() => setShowConfirmPassword(!showConfirmPassword)}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n >\n {showConfirmPassword ? <EyeOff className=\"h-5 w-5\" /> : <Eye className=\"h-5 w-5\" />}\n </button>\n </div>\n {errors.confirmPassword && (\n <p className=\"mt-1 text-sm text-danger-600\">{errors.confirmPassword.message}</p>\n )}\n </div>\n\n <Button\n type=\"submit\"\n variant=\"primary\"\n className=\"w-full\"\n disabled={isSubmitting || isLoading}\n >\n {(isSubmitting || isLoading) ? (\n <>\n <Spinner size=\"sm\" className=\"mr-2\" />\n Resetting...\n </>\n ) : (\n \"Reset Password\"\n )}\n </Button>\n\n {status === \"error\" && (\n <div className=\"text-danger-700 bg-danger-50 border border-danger-200 p-2 text-sm rounded text-center\">\n {errorMessage || \"There was an error resetting your password. Please try again.\"}\n </div>\n )}\n </form>\n );\n};"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { LoginForm } from './LoginForm.js';
|
|
2
2
|
export { SignupForm } from './SignupForm.js';
|
|
3
3
|
export { ProtectedRoute, useRequireRole, withRoleProtection } from './ProtectedRoute.js';
|
|
4
|
-
export {
|
|
4
|
+
export { ForgotPasswordForm } from './ForgotPasswordForm.js';
|
|
5
|
+
export { ResetPasswordForm } from './ResetPasswordForm.js';
|
|
5
6
|
export { AuthShowcase } from './AuthShowcase.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
@@ -23,7 +23,7 @@ import { AuthShowcase } from '../Auth/AuthShowcase.js';
|
|
|
23
23
|
import { LoginFormExample } from '../Auth/LoginForm.example.js';
|
|
24
24
|
import { SignupFormExample } from '../Auth/SignupForm.example.js';
|
|
25
25
|
import { ProtectedRouteExample } from '../Auth/ProtectedRoute.example.js';
|
|
26
|
-
import { PasswordResetFormExample } from '../Auth/
|
|
26
|
+
import { PasswordResetFormExample } from '../Auth/ForgotPasswordForm.example.js';
|
|
27
27
|
import { PageLayoutShowcase } from '../PageLayout/PageLayoutShowcase.js';
|
|
28
28
|
import { ChatWidgetExample } from '../ChatWidget/ChatWidget.example.js';
|
|
29
29
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"showcaseRegistry.js","sources":["../../../src/components/ComponentShowcase/showcaseRegistry.ts"],"sourcesContent":["/**\n * Showcase registry maps component ids to their example/demo modules.\n * Usage: import { showcaseRegistry } from './showcaseRegistry';\n * Then: const Demo = showcaseRegistry['button'];\n */\nimport { ButtonExample } from '../Button/Button.example';\nimport { InputExample } from '../Input/Input.example';\nimport { TextareaExample } from '../Textarea/Textarea.example';\nimport { CheckboxExample } from '../Checkbox/Checkbox.example';\nimport { SwitchExample } from '../Switch/Switch.example';\nimport { CardExample } from '../Card/Card.example';\nimport { BadgeExample } from '../Badge/Badge.example';\nimport { AvatarExample } from '../Avatar/Avatar.example';\nimport { AlertExample } from '../Alert/Alert.example';\nimport { ToastExample } from '../Toast/Toast.example';\nimport { ModalExample } from '../Modal/Modal.example';\nimport { SpinnerExample } from '../Spinner/Spinner.example';\nimport { SkeletonExample } from '../Skeleton/Skeleton.example';\nimport { StatsCardExample } from '../StatsCard/StatsCard.example';\nimport { TabsExample } from '../Tabs/Tabs.example';\nimport { SidebarExample } from '../Sidebar/Sidebar.example';\nimport { NavbarExample } from '../Navbar/Navbar.example';\nimport { DashboardLayoutExample } from '../DashboardLayout/DashboardLayout.example';\nimport { DashboardHeaderExample } from '../DashboardHeader/DashboardHeader.example';\nimport { DashboardGridExample } from '../DashboardGrid/DashboardGrid.example';\nimport { DataTableShowcase } from '../DataTable/DataTableShowcase';\nimport { AuthShowcase } from '../Auth/AuthShowcase';\nimport { LoginFormExample } from \"../Auth/LoginForm.example\";\nimport { SignupFormExample } from \"../Auth/SignupForm.example\";\nimport { ProtectedRouteExample } from \"../Auth/ProtectedRoute.example\";\nimport { PasswordResetFormExample } from \"../Auth/
|
|
1
|
+
{"version":3,"file":"showcaseRegistry.js","sources":["../../../src/components/ComponentShowcase/showcaseRegistry.ts"],"sourcesContent":["/**\n * Showcase registry maps component ids to their example/demo modules.\n * Usage: import { showcaseRegistry } from './showcaseRegistry';\n * Then: const Demo = showcaseRegistry['button'];\n */\nimport { ButtonExample } from '../Button/Button.example';\nimport { InputExample } from '../Input/Input.example';\nimport { TextareaExample } from '../Textarea/Textarea.example';\nimport { CheckboxExample } from '../Checkbox/Checkbox.example';\nimport { SwitchExample } from '../Switch/Switch.example';\nimport { CardExample } from '../Card/Card.example';\nimport { BadgeExample } from '../Badge/Badge.example';\nimport { AvatarExample } from '../Avatar/Avatar.example';\nimport { AlertExample } from '../Alert/Alert.example';\nimport { ToastExample } from '../Toast/Toast.example';\nimport { ModalExample } from '../Modal/Modal.example';\nimport { SpinnerExample } from '../Spinner/Spinner.example';\nimport { SkeletonExample } from '../Skeleton/Skeleton.example';\nimport { StatsCardExample } from '../StatsCard/StatsCard.example';\nimport { TabsExample } from '../Tabs/Tabs.example';\nimport { SidebarExample } from '../Sidebar/Sidebar.example';\nimport { NavbarExample } from '../Navbar/Navbar.example';\nimport { DashboardLayoutExample } from '../DashboardLayout/DashboardLayout.example';\nimport { DashboardHeaderExample } from '../DashboardHeader/DashboardHeader.example';\nimport { DashboardGridExample } from '../DashboardGrid/DashboardGrid.example';\nimport { DataTableShowcase } from '../DataTable/DataTableShowcase';\nimport { AuthShowcase } from '../Auth/AuthShowcase';\nimport { LoginFormExample } from \"../Auth/LoginForm.example\";\nimport { SignupFormExample } from \"../Auth/SignupForm.example\";\nimport { ProtectedRouteExample } from \"../Auth/ProtectedRoute.example\";\nimport { PasswordResetFormExample } from \"../Auth/ForgotPasswordForm.example\";\nimport { PageLayoutShowcase } from '../PageLayout/PageLayoutShowcase';\nimport { ChatWidgetExample } from '../ChatWidget/ChatWidget.example';\n\n\n\nexport const showcaseRegistry: Record<string, React.FC> = {\n button: ButtonExample,\n input: InputExample,\n textarea: TextareaExample,\n checkbox: CheckboxExample,\n switch: SwitchExample,\n card: CardExample,\n badge: BadgeExample,\n avatar: AvatarExample,\n alert: AlertExample,\n toast: ToastExample,\n modal: ModalExample,\n spinner: SpinnerExample,\n skeleton: SkeletonExample,\n statscard: StatsCardExample,\n tabs: TabsExample,\n sidebar: SidebarExample,\n navbar: NavbarExample,\n \"dashboard-layout\": DashboardLayoutExample,\n \"dashboard-header\": DashboardHeaderExample,\n \"dashboard-grid\": DashboardGridExample,\n datatable: DataTableShowcase,\n auth: AuthShowcase,\n login: LoginFormExample,\n signup: SignupFormExample,\n \"password-reset\": PasswordResetFormExample,\n shield: ProtectedRouteExample,\n \"page-layout\": PageLayoutShowcase,\n chatwidget: ChatWidgetExample\n // Extend with other demos as needed\n};"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;AAIG;AAgCI,MAAM,gBAAgB,GAA6B;AACxD,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,QAAQ,EAAE,eAAe;AACzB,IAAA,QAAQ,EAAE,eAAe;AACzB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,QAAQ,EAAE,eAAe;AACzB,IAAA,SAAS,EAAE,gBAAgB;AAC3B,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,kBAAkB,EAAE,sBAAsB;AAC1C,IAAA,kBAAkB,EAAE,sBAAsB;AAC1C,IAAA,gBAAgB,EAAE,oBAAoB;AACtC,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,KAAK,EAAE,gBAAgB;AACvB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,gBAAgB,EAAE,wBAAwB;AAC1C,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,aAAa,EAAE,kBAAkB;AACjC,IAAA,UAAU,EAAE;;;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -23,7 +23,8 @@ export { ComponentShowcase } from './components/ComponentShowcase/ComponentShowc
|
|
|
23
23
|
export { LoginForm } from './components/Auth/LoginForm.js';
|
|
24
24
|
export { SignupForm } from './components/Auth/SignupForm.js';
|
|
25
25
|
export { ProtectedRoute, useRequireRole, withRoleProtection } from './components/Auth/ProtectedRoute.js';
|
|
26
|
-
export {
|
|
26
|
+
export { ForgotPasswordForm } from './components/Auth/ForgotPasswordForm.js';
|
|
27
|
+
export { ResetPasswordForm } from './components/Auth/ResetPasswordForm.js';
|
|
27
28
|
export { AuthShowcase } from './components/Auth/AuthShowcase.js';
|
|
28
29
|
export { PageContent, PageFooter, PageHeader, PageHero, PageLayout, PageLayoutContent, PageSidebar, contentVariants, pageLayoutVariants } from './components/PageLayout/PageLayout.js';
|
|
29
30
|
export { BlogPostExample, LandingPageExample, ProductPageExample } from './components/PageLayout/PageLayoutExamples.js';
|