@beyondcorp/beyond-ui 1.4.2 → 1.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/components/Auth/ForgotPasswordForm.js +1 -1
  2. package/dist/components/Auth/ForgotPasswordForm.js.map +1 -1
  3. package/dist/components/Auth/LoginForm.js +1 -1
  4. package/dist/components/Auth/LoginForm.js.map +1 -1
  5. package/dist/components/Auth/ResetPasswordForm.js +1 -1
  6. package/dist/components/Auth/ResetPasswordForm.js.map +1 -1
  7. package/dist/components/Auth/SignupForm.js +2 -2
  8. package/dist/components/Auth/SignupForm.js.map +1 -1
  9. package/dist/components/Email/EmailShowcase.js +1 -0
  10. package/dist/components/Email/EmailShowcase.js.map +1 -1
  11. package/dist/components/Email/components/EmailButton.js +1 -1
  12. package/dist/components/Email/components/EmailDivider.js +1 -1
  13. package/dist/components/Email/components/EmailFooter.js +1 -3
  14. package/dist/components/Email/components/EmailFooter.js.map +1 -1
  15. package/dist/components/Email/components/EmailHeader.js +1 -2
  16. package/dist/components/Email/components/EmailHeader.js.map +1 -1
  17. package/dist/components/Email/components/EmailLayout.js +1 -6
  18. package/dist/components/Email/components/EmailLayout.js.map +1 -1
  19. package/dist/components/Email/components/EmailPreviewer.js +1 -1
  20. package/dist/components/Email/templates/auth/ConfirmEmail.js +2 -2
  21. package/dist/components/Email/templates/auth/EmailChangeVerification.js +2 -2
  22. package/dist/components/Email/templates/auth/MagicLinkEmail.js +2 -2
  23. package/dist/components/Email/templates/auth/ResetPasswordEmail.js +2 -2
  24. package/dist/components/Email/templates/auth/WelcomeEmail.js +2 -2
  25. package/dist/components/Email/templates/billing/CreditCardExpiring.js +2 -2
  26. package/dist/components/Email/templates/billing/InvoiceEmail.js +2 -4
  27. package/dist/components/Email/templates/billing/InvoiceEmail.js.map +1 -1
  28. package/dist/components/Email/templates/billing/OverduePaymentNotice.js +2 -2
  29. package/dist/components/Email/templates/billing/PaymentFailedEmail.js +2 -2
  30. package/dist/components/Email/templates/billing/PaymentReceipt.js +2 -4
  31. package/dist/components/Email/templates/billing/PaymentReceipt.js.map +1 -1
  32. package/dist/components/Email/templates/billing/SubscriptionCancelled.js +2 -2
  33. package/dist/components/Email/templates/billing/SubscriptionConfirmation.js +2 -2
  34. package/dist/components/Email/templates/billing/TrialEndingEmail.js +2 -2
  35. package/dist/components/Email/templates/engagement/FeatureAnnouncement.js +2 -3
  36. package/dist/components/Email/templates/engagement/FeatureAnnouncement.js.map +1 -1
  37. package/dist/components/Email/templates/engagement/FeedbackRequestEmail.js +2 -2
  38. package/dist/components/Email/templates/engagement/InactivityWarning.js +2 -2
  39. package/dist/components/Email/templates/engagement/MilestoneEmail.js +2 -2
  40. package/dist/components/Email/templates/engagement/ProductChangelog.js +2 -2
  41. package/dist/components/Email/templates/engagement/TeamInviteEmail.js +2 -2
  42. package/dist/components/Email/templates/engagement/TipOfWeek.js +2 -2
  43. package/dist/components/Email/templates/engagement/WeeklyDigest.js +2 -4
  44. package/dist/components/Email/templates/engagement/WeeklyDigest.js.map +1 -1
  45. package/dist/components/Email/templates/growth/ReferralConverted.js +2 -2
  46. package/dist/components/Email/templates/growth/ReferralInvite.js +2 -2
  47. package/dist/components/Email/templates/growth/ReferralReward.js +2 -2
  48. package/dist/components/Email/templates/growth/SocialSharePrompt.js +2 -4
  49. package/dist/components/Email/templates/growth/SocialSharePrompt.js.map +1 -1
  50. package/dist/components/Email/templates/growth/WaitlistWelcome.js +2 -2
  51. package/dist/components/Email/templates/internal/comms/CompanyEventsCalendar.js +2 -4
  52. package/dist/components/Email/templates/internal/comms/CompanyEventsCalendar.js.map +1 -1
  53. package/dist/components/Email/templates/internal/comms/LeadershipUpdate.js +2 -1
  54. package/dist/components/Email/templates/internal/comms/LeadershipUpdate.js.map +1 -1
  55. package/dist/components/Email/templates/internal/comms/MeetingRecap.js +2 -4
  56. package/dist/components/Email/templates/internal/comms/MeetingRecap.js.map +1 -1
  57. package/dist/components/Email/templates/internal/hr/BirthdayAnniversary.js +2 -1
  58. package/dist/components/Email/templates/internal/hr/BirthdayAnniversary.js.map +1 -1
  59. package/dist/components/Email/templates/internal/hr/EmployeeFarewell.js +2 -2
  60. package/dist/components/Email/templates/internal/hr/ExitInterviewRequest.js +2 -2
  61. package/dist/components/Email/templates/internal/hr/NewHireAnnouncement.js +2 -2
  62. package/dist/components/Email/templates/internal/hr/PolicyUpdate.js +2 -2
  63. package/dist/components/Email/templates/internal/it/AppAccessGranted.js +2 -2
  64. package/dist/components/Email/templates/internal/it/ITOutageReport.js +2 -2
  65. package/dist/components/Email/templates/internal/it/PasswordRotationReminder.js +2 -2
  66. package/dist/components/Email/templates/legal/DMCANotice.js +2 -2
  67. package/dist/components/Email/templates/legal/DPANotice.js +2 -2
  68. package/dist/components/Email/templates/legal/GDPRCompliance.js +2 -2
  69. package/dist/components/Email/templates/legal/PrivacyPolicyUpdate.js +2 -2
  70. package/dist/components/Email/templates/legal/TermsOfServiceUpdate.js +2 -2
  71. package/dist/components/Email/templates/marketing/affiliate/AffiliateInvite.js +2 -2
  72. package/dist/components/Email/templates/marketing/affiliate/AffiliatePayout.js +2 -2
  73. package/dist/components/Email/templates/marketing/affiliate/AffiliateTopPerformer.js +2 -2
  74. package/dist/components/Email/templates/marketing/affiliate/AffiliateWelcome.js +2 -2
  75. package/dist/components/Email/templates/marketing/affiliate/PartnerComarketing.js +2 -2
  76. package/dist/components/Email/templates/marketing/blog/BestOfRoundup.js +2 -2
  77. package/dist/components/Email/templates/marketing/blog/BlogSeries.js +2 -2
  78. package/dist/components/Email/templates/marketing/blog/NewBlogPost.js +2 -2
  79. package/dist/components/Email/templates/marketing/content/InfographicEmail.js +2 -2
  80. package/dist/components/Email/templates/marketing/content/NewGuideEbook.js +2 -2
  81. package/dist/components/Email/templates/marketing/content/PodcastEpisode.js +2 -2
  82. package/dist/components/Email/templates/marketing/content/ToolTemplateDelivery.js +2 -2
  83. package/dist/components/Email/templates/marketing/content/YouTubeNotification.js +2 -2
  84. package/dist/components/Email/templates/marketing/events/ConferenceSeries.js +2 -2
  85. package/dist/components/Email/templates/marketing/events/EarlyBirdReminder.js +2 -2
  86. package/dist/components/Email/templates/marketing/events/EventAnnouncement.js +2 -2
  87. package/dist/components/Email/templates/marketing/events/PostEventThankYou.js +2 -2
  88. package/dist/components/Email/templates/marketing/events/ScheduleReleased.js +2 -2
  89. package/dist/components/Email/templates/marketing/events/VIPInvite.js +2 -2
  90. package/dist/components/Email/templates/marketing/lead-nurturing/CaseStudyDelivery.js +2 -2
  91. package/dist/components/Email/templates/marketing/lead-nurturing/DripCampaignComplete.js +2 -2
  92. package/dist/components/Email/templates/marketing/lead-nurturing/DripCampaignDay1.js +2 -2
  93. package/dist/components/Email/templates/marketing/lead-nurturing/LeadMagnetDelivery.js +2 -2
  94. package/dist/components/Email/templates/marketing/lead-nurturing/WebinarConfirmation.js +2 -2
  95. package/dist/components/Email/templates/marketing/lead-nurturing/WebinarFollowup.js +2 -2
  96. package/dist/components/Email/templates/marketing/lead-nurturing/WebinarReminder.js +2 -2
  97. package/dist/components/Email/templates/marketing/newsletters/CuratedIndustryNews.js +2 -2
  98. package/dist/components/Email/templates/marketing/newsletters/MonthlyDigest.js +2 -5
  99. package/dist/components/Email/templates/marketing/newsletters/MonthlyDigest.js.map +1 -1
  100. package/dist/components/Email/templates/marketing/newsletters/WeeklyNewsletter.js +2 -4
  101. package/dist/components/Email/templates/marketing/newsletters/WeeklyNewsletter.js.map +1 -1
  102. package/dist/components/Email/templates/marketing/promotional/AbandonedCart.js +2 -5
  103. package/dist/components/Email/templates/marketing/promotional/AbandonedCart.js.map +1 -1
  104. package/dist/components/Email/templates/marketing/promotional/BackInStock.js +2 -2
  105. package/dist/components/Email/templates/marketing/promotional/BirthdayOffer.js +2 -2
  106. package/dist/components/Email/templates/marketing/promotional/BrowseAbandonment.js +2 -2
  107. package/dist/components/Email/templates/marketing/promotional/FlashSale.js +2 -2
  108. package/dist/components/Email/templates/marketing/promotional/MilestoneDiscount.js +2 -2
  109. package/dist/components/Email/templates/marketing/promotional/PriceDropAlert.js +2 -2
  110. package/dist/components/Email/templates/marketing/promotional/SeasonalCampaign.js +2 -2
  111. package/dist/components/Email/templates/marketing/reengagement/ComeBack60Day.js +2 -2
  112. package/dist/components/Email/templates/marketing/reengagement/LastChance90Day.js +2 -2
  113. package/dist/components/Email/templates/marketing/reengagement/ProductUpdateReengagement.js +2 -2
  114. package/dist/components/Email/templates/marketing/reengagement/WeMissYou30Day.js +2 -2
  115. package/dist/components/Email/templates/marketing/social/CommunityMilestone.js +2 -2
  116. package/dist/components/Email/templates/marketing/social/NewFollowerWelcome.js +2 -2
  117. package/dist/components/Email/templates/marketing/social/ShareYourStory.js +2 -2
  118. package/dist/components/Email/templates/marketing/social/SocialProof.js +2 -2
  119. package/dist/components/Email/templates/marketing/social/UserSpotlight.js +2 -2
  120. package/dist/components/Email/templates/marketing/surveys/BetaFeedback.js +2 -2
  121. package/dist/components/Email/templates/marketing/surveys/CSATSurvey.js +2 -2
  122. package/dist/components/Email/templates/marketing/surveys/ExitSurvey.js +2 -3
  123. package/dist/components/Email/templates/marketing/surveys/ExitSurvey.js.map +1 -1
  124. package/dist/components/Email/templates/marketing/surveys/NPSSurvey.js +2 -5
  125. package/dist/components/Email/templates/marketing/surveys/NPSSurvey.js.map +1 -1
  126. package/dist/components/Email/templates/marketing/surveys/ProductFeedback.js +2 -2
  127. package/dist/components/Email/templates/sales/ClientReferenceRequest.js +2 -2
  128. package/dist/components/Email/templates/sales/ClientWinBack.js +2 -2
  129. package/dist/components/Email/templates/sales/ColdOutreach.js +2 -2
  130. package/dist/components/Email/templates/sales/FollowUpEmail.js +2 -2
  131. package/dist/components/Email/templates/sales/ProjectTermination.js +2 -2
  132. package/dist/components/Email/templates/sales/ProposalAccepted.js +2 -2
  133. package/dist/components/Email/templates/sales/ScheduleDemo.js +2 -2
  134. package/dist/components/Email/templates/sales/SendProposal.js +2 -2
  135. package/dist/components/Email/templates/security/AccountDeletedConfirmation.js +2 -2
  136. package/dist/components/Email/templates/security/ApiKeyCreated.js +2 -2
  137. package/dist/components/Email/templates/security/DataExportReady.js +2 -2
  138. package/dist/components/Email/templates/security/NewLoginAlert.js +2 -2
  139. package/dist/components/Email/templates/security/PolicyUpdateEmail.js +2 -2
  140. package/dist/components/Email/templates/security/TwoFactorCode.js +2 -2
  141. package/dist/components/Email/templates/support/SupportFeedbackRequest.js +2 -4
  142. package/dist/components/Email/templates/support/SupportFeedbackRequest.js.map +1 -1
  143. package/dist/components/Email/templates/support/TicketCreatedEmail.js +2 -2
  144. package/dist/components/Email/templates/support/TicketReplyEmail.js +2 -2
  145. package/dist/components/Email/templates/support/TicketResolvedEmail.js +2 -2
  146. package/dist/components/Email/templates/system/IncidentReport.js +2 -2
  147. package/dist/components/Email/templates/system/MaintenanceNotice.js +2 -2
  148. package/dist/components/Email/templates/system/NotificationEmail.js +2 -2
  149. package/dist/components/Email/templates/system/StatusPageUpdate.js +2 -2
  150. package/dist/styles.css +1 -1
  151. package/package.json +1 -1
@@ -23,7 +23,7 @@ const ForgotPasswordForm = ({ onReset, className, isLoading, successMessage, err
23
23
  setStatus("error");
24
24
  }
25
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." }))] }));
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 text-gray-700 dark:text-gray-300 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
27
  };
28
28
 
29
29
  export { ForgotPasswordForm };
@@ -1 +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;;;;"}
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 text-gray-700 dark:text-gray-300 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,iEAAiE,EAAC,OAAO,EAAC,aAAa,EAAA,QAAA,EAAA,eAAA,EAAA,CAEhG,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;;;;"}
@@ -36,7 +36,7 @@ const LoginForm = ({ className, onSubmit, isLoading, error, onForgotPassword, on
36
36
  const togglePasswordVisibility = () => {
37
37
  setShowPassword(prev => !prev);
38
38
  };
39
- return (jsx("div", { className: cn('w-full max-w-md mx-auto', className), children: jsxs("div", { className: "bg-white rounded-lg shadow-lg p-8", children: [jsxs("div", { className: "text-center mb-8", children: [jsx("h1", { className: "text-2xl font-bold text-gray-900 mb-2", children: "Welcome Back" }), jsx("p", { className: "text-gray-600", children: "Sign in to your account to continue" })] }), error && (jsxs(Alert, { variant: "danger", className: "mb-6", children: [jsx(AlertCircle, { className: "h-4 w-4" }), jsx(AlertDescription, { children: error })] })), jsxs("form", { onSubmit: handleSubmit(handleFormSubmit), className: "space-y-6", children: [jsxs("div", { children: [jsx("label", { htmlFor: "email", className: "block text-sm font-medium text-gray-700 mb-2", children: "Email Address" }), jsxs("div", { className: "relative", children: [jsx(Mail, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" }), jsx(Input, { id: "email", type: "email", placeholder: "Enter your email", className: cn('pl-10', errors.email && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.email ? 'true' : 'false', "aria-describedby": errors.email ? 'email-error' : undefined, ...register('email') })] }), errors.email && (jsx("p", { id: "email-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.email.message }))] }), jsxs("div", { children: [jsx("label", { htmlFor: "password", className: "block text-sm font-medium text-gray-700 mb-2", children: "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 your password", className: cn('pl-10 pr-10', errors.password && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.password ? 'true' : 'false', "aria-describedby": errors.password ? 'password-error' : undefined, ...register('password') }), jsx("button", { type: "button", onClick: togglePasswordVisibility, className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600", "aria-label": showPassword ? 'Hide password' : 'Show password', children: showPassword ? (jsx(EyeOff, { className: "h-5 w-5" })) : (jsx(Eye, { className: "h-5 w-5" })) })] }), errors.password && (jsx("p", { id: "password-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.password.message }))] }), jsxs("div", { className: "flex items-center justify-between", children: [jsxs("label", { className: "flex items-center", children: [jsx(Checkbox, { ...register('rememberMe') }), jsx("span", { className: "ml-2 text-sm text-gray-600", children: "Remember me" })] }), jsx("button", { type: "button", onClick: onForgotPassword, className: "text-sm text-primary-600 hover:text-primary-500 font-medium", children: "Forgot password?" })] }), 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" }), "Signing in..."] })) : ('Sign In') })] }), jsxs("div", { className: "mt-6 p-4 bg-gray-50 rounded-lg", children: [jsx("p", { className: "text-sm text-gray-600 mb-2 font-medium", children: "Demo Credentials:" }), jsxs("p", { className: "text-xs text-gray-500", children: ["Email: admin@example.com", jsx("br", {}), "Password: Password123!"] })] }), jsx("div", { className: "mt-6 text-center", children: jsxs("p", { className: "text-sm text-gray-600", children: ["Don't have an account?", ' ', jsx("button", { type: "button", onClick: onSignupClick, className: "text-primary-600 hover:text-primary-500 font-medium", children: "Sign up" })] }) })] }) }));
39
+ return (jsx("div", { className: cn('w-full max-w-md mx-auto', className), children: jsxs("div", { className: "bg-white dark:bg-gray-800 rounded-lg shadow-lg p-8", children: [jsxs("div", { className: "text-center mb-8", children: [jsx("h1", { className: "text-2xl font-bold text-gray-900 dark:text-white mb-2", children: "Welcome Back" }), jsx("p", { className: "text-gray-600 dark:text-gray-400", children: "Sign in to your account to continue" })] }), error && (jsxs(Alert, { variant: "danger", className: "mb-6", children: [jsx(AlertCircle, { className: "h-4 w-4" }), jsx(AlertDescription, { children: error })] })), jsxs("form", { onSubmit: handleSubmit(handleFormSubmit), className: "space-y-6", children: [jsxs("div", { children: [jsx("label", { htmlFor: "email", className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: "Email Address" }), jsxs("div", { className: "relative", children: [jsx(Mail, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" }), jsx(Input, { id: "email", type: "email", placeholder: "Enter your email", className: cn('pl-10', errors.email && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.email ? 'true' : 'false', "aria-describedby": errors.email ? 'email-error' : undefined, ...register('email') })] }), errors.email && (jsx("p", { id: "email-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.email.message }))] }), jsxs("div", { children: [jsx("label", { htmlFor: "password", className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: "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 your password", className: cn('pl-10 pr-10', errors.password && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.password ? 'true' : 'false', "aria-describedby": errors.password ? 'password-error' : undefined, ...register('password') }), jsx("button", { type: "button", onClick: togglePasswordVisibility, className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600", "aria-label": showPassword ? 'Hide password' : 'Show password', children: showPassword ? (jsx(EyeOff, { className: "h-5 w-5" })) : (jsx(Eye, { className: "h-5 w-5" })) })] }), errors.password && (jsx("p", { id: "password-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.password.message }))] }), jsxs("div", { className: "flex items-center justify-between", children: [jsxs("label", { className: "flex items-center", children: [jsx(Checkbox, { ...register('rememberMe') }), jsx("span", { className: "ml-2 text-sm text-gray-600 dark:text-gray-400", children: "Remember me" })] }), jsx("button", { type: "button", onClick: onForgotPassword, className: "text-sm text-primary-600 hover:text-primary-500 font-medium", children: "Forgot password?" })] }), 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" }), "Signing in..."] })) : ('Sign In') })] }), jsxs("div", { className: "mt-6 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg", children: [jsx("p", { className: "text-sm text-gray-600 dark:text-gray-400 mb-2 font-medium", children: "Demo Credentials:" }), jsxs("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Email: admin@example.com", jsx("br", {}), "Password: Password123!"] })] }), jsx("div", { className: "mt-6 text-center", children: jsxs("p", { className: "text-sm text-gray-600 dark:text-gray-400", children: ["Don't have an account?", ' ', jsx("button", { type: "button", onClick: onSignupClick, className: "text-primary-600 hover:text-primary-500 font-medium", children: "Sign up" })] }) })] }) }));
40
40
  };
41
41
 
42
42
  export { LoginForm };
@@ -1 +1 @@
1
- {"version":3,"file":"LoginForm.js","sources":["../../../src/components/Auth/LoginForm.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Eye, EyeOff, Mail, Lock, AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Checkbox } from '../Checkbox';\nimport { Alert, AlertDescription } from '../Alert';\nimport { Spinner } from '../Spinner';\nimport { loginSchema, type LoginFormData } from '../../utils/validation';\n\ninterface LoginFormProps {\n className?: string;\n onSubmit: (data: LoginFormData) => Promise<void>;\n isLoading?: boolean;\n error?: string | null;\n onForgotPassword?: () => void;\n onSignupClick?: () => void;\n}\n\n/**\n * LoginForm component with validation and accessibility features\n */\nexport const LoginForm: React.FC<LoginFormProps> = ({\n className,\n onSubmit,\n isLoading,\n error,\n onForgotPassword,\n onSignupClick,\n}) => {\n const [showPassword, setShowPassword] = useState(false);\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n reset,\n } = useForm<LoginFormData>({\n resolver: zodResolver(loginSchema),\n defaultValues: {\n email: '',\n password: '',\n rememberMe: false,\n },\n });\n\n const handleFormSubmit = async (data: LoginFormData) => {\n try {\n await onSubmit(data);\n reset();\n } catch (err) {\n console.error('Login failed:', err);\n }\n };\n\n const togglePasswordVisibility = () => {\n setShowPassword(prev => !prev);\n };\n\n return (\n <div className={cn('w-full max-w-md mx-auto', className)}>\n <div className=\"bg-white rounded-lg shadow-lg p-8\">\n {/* Header */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2\">\n Welcome Back\n </h1>\n <p className=\"text-gray-600\">\n Sign in to your account to continue\n </p>\n </div>\n\n {/* Error Alert */}\n {error && (\n <Alert variant=\"danger\" className=\"mb-6\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n )}\n\n {/* Login Form */}\n <form onSubmit={handleSubmit(handleFormSubmit)} className=\"space-y-6\">\n {/* Email Field */}\n <div>\n <label\n htmlFor=\"email\"\n className=\"block text-sm font-medium text-gray-700 mb-2\"\n >\n Email Address\n </label>\n <div className=\"relative\">\n <Mail className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400\" />\n <Input\n id=\"email\"\n type=\"email\"\n placeholder=\"Enter your email\"\n className={cn(\n 'pl-10',\n errors.email && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.email ? 'true' : 'false'}\n aria-describedby={errors.email ? 'email-error' : undefined}\n {...register('email')}\n />\n </div>\n {errors.email && (\n <p\n id=\"email-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.email.message}\n </p>\n )}\n </div>\n\n {/* Password Field */}\n <div>\n <label\n htmlFor=\"password\"\n className=\"block text-sm font-medium text-gray-700 mb-2\"\n >\n 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 your password\"\n className={cn(\n 'pl-10 pr-10',\n errors.password && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.password ? 'true' : 'false'}\n aria-describedby={errors.password ? 'password-error' : undefined}\n {...register('password')}\n />\n <button\n type=\"button\"\n onClick={togglePasswordVisibility}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? (\n <EyeOff className=\"h-5 w-5\" />\n ) : (\n <Eye className=\"h-5 w-5\" />\n )}\n </button>\n </div>\n {errors.password && (\n <p\n id=\"password-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.password.message}\n </p>\n )}\n </div>\n\n {/* Remember Me & Forgot Password */}\n <div className=\"flex items-center justify-between\">\n <label className=\"flex items-center\">\n <Checkbox {...register('rememberMe')} />\n <span className=\"ml-2 text-sm text-gray-600\">Remember me</span>\n </label>\n <button\n type=\"button\"\n onClick={onForgotPassword}\n className=\"text-sm text-primary-600 hover:text-primary-500 font-medium\"\n >\n Forgot password?\n </button>\n </div>\n\n {/* Submit Button */}\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 Signing in...\n </>\n ) : (\n 'Sign In'\n )}\n </Button>\n </form>\n\n {/* Demo Credentials */}\n <div className=\"mt-6 p-4 bg-gray-50 rounded-lg\">\n <p className=\"text-sm text-gray-600 mb-2 font-medium\">Demo Credentials:</p>\n <p className=\"text-xs text-gray-500\">\n Email: admin@example.com<br />\n Password: Password123!\n </p>\n </div>\n\n {/* Sign Up Link */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-600\">\n Don't have an account?{' '}\n <button\n type=\"button\"\n onClick={onSignupClick}\n className=\"text-primary-600 hover:text-primary-500 font-medium\"\n >\n Sign up\n </button>\n </p>\n </div>\n </div>\n </div>\n );\n};"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"LoginForm.js","sources":["../../../src/components/Auth/LoginForm.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Eye, EyeOff, Mail, Lock, AlertCircle } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Checkbox } from '../Checkbox';\nimport { Alert, AlertDescription } from '../Alert';\nimport { Spinner } from '../Spinner';\nimport { loginSchema, type LoginFormData } from '../../utils/validation';\n\ninterface LoginFormProps {\n className?: string;\n onSubmit: (data: LoginFormData) => Promise<void>;\n isLoading?: boolean;\n error?: string | null;\n onForgotPassword?: () => void;\n onSignupClick?: () => void;\n}\n\n/**\n * LoginForm component with validation and accessibility features\n */\nexport const LoginForm: React.FC<LoginFormProps> = ({\n className,\n onSubmit,\n isLoading,\n error,\n onForgotPassword,\n onSignupClick,\n}) => {\n const [showPassword, setShowPassword] = useState(false);\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n reset,\n } = useForm<LoginFormData>({\n resolver: zodResolver(loginSchema),\n defaultValues: {\n email: '',\n password: '',\n rememberMe: false,\n },\n });\n\n const handleFormSubmit = async (data: LoginFormData) => {\n try {\n await onSubmit(data);\n reset();\n } catch (err) {\n console.error('Login failed:', err);\n }\n };\n\n const togglePasswordVisibility = () => {\n setShowPassword(prev => !prev);\n };\n\n return (\n <div className={cn('w-full max-w-md mx-auto', className)}>\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow-lg p-8\">\n {/* Header */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white mb-2\">\n Welcome Back\n </h1>\n <p className=\"text-gray-600 dark:text-gray-400\">\n Sign in to your account to continue\n </p>\n </div>\n\n {/* Error Alert */}\n {error && (\n <Alert variant=\"danger\" className=\"mb-6\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n )}\n\n {/* Login Form */}\n <form onSubmit={handleSubmit(handleFormSubmit)} className=\"space-y-6\">\n {/* Email Field */}\n <div>\n <label\n htmlFor=\"email\"\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\"\n >\n Email Address\n </label>\n <div className=\"relative\">\n <Mail className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400\" />\n <Input\n id=\"email\"\n type=\"email\"\n placeholder=\"Enter your email\"\n className={cn(\n 'pl-10',\n errors.email && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.email ? 'true' : 'false'}\n aria-describedby={errors.email ? 'email-error' : undefined}\n {...register('email')}\n />\n </div>\n {errors.email && (\n <p\n id=\"email-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.email.message}\n </p>\n )}\n </div>\n\n {/* Password Field */}\n <div>\n <label\n htmlFor=\"password\"\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\"\n >\n 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 your password\"\n className={cn(\n 'pl-10 pr-10',\n errors.password && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.password ? 'true' : 'false'}\n aria-describedby={errors.password ? 'password-error' : undefined}\n {...register('password')}\n />\n <button\n type=\"button\"\n onClick={togglePasswordVisibility}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? (\n <EyeOff className=\"h-5 w-5\" />\n ) : (\n <Eye className=\"h-5 w-5\" />\n )}\n </button>\n </div>\n {errors.password && (\n <p\n id=\"password-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.password.message}\n </p>\n )}\n </div>\n\n {/* Remember Me & Forgot Password */}\n <div className=\"flex items-center justify-between\">\n <label className=\"flex items-center\">\n <Checkbox {...register('rememberMe')} />\n <span className=\"ml-2 text-sm text-gray-600 dark:text-gray-400\">Remember me</span>\n </label>\n <button\n type=\"button\"\n onClick={onForgotPassword}\n className=\"text-sm text-primary-600 hover:text-primary-500 font-medium\"\n >\n Forgot password?\n </button>\n </div>\n\n {/* Submit Button */}\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 Signing in...\n </>\n ) : (\n 'Sign In'\n )}\n </Button>\n </form>\n\n {/* Demo Credentials */}\n <div className=\"mt-6 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg\">\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mb-2 font-medium\">Demo Credentials:</p>\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n Email: admin@example.com<br />\n Password: Password123!\n </p>\n </div>\n\n {/* Sign Up Link */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n Don't have an account?{' '}\n <button\n type=\"button\"\n onClick={onSignupClick}\n className=\"text-primary-600 hover:text-primary-500 font-medium\"\n >\n Sign up\n </button>\n </p>\n </div>\n </div>\n </div>\n );\n};"],"names":["_jsx","_jsxs","_Fragment"],"mappings":";;;;;;;;;;;;;AAqBA;;AAEG;AACI,MAAM,SAAS,GAA6B,CAAC,EAClD,SAAS,EACT,QAAQ,EACR,SAAS,EACT,KAAK,EACL,gBAAgB,EAChB,aAAa,GACd,KAAI;IACH,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAEvD,IAAA,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,SAAS,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EACnC,KAAK,GACN,GAAG,OAAO,CAAgB;AACzB,QAAA,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC;AAClC,QAAA,aAAa,EAAE;AACb,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,UAAU,EAAE,KAAK;AAClB,SAAA;AACF,KAAA,CAAC;AAEF,IAAA,MAAM,gBAAgB,GAAG,OAAO,IAAmB,KAAI;AACrD,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,CAAC,IAAI,CAAC;AACpB,YAAA,KAAK,EAAE;QACT;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC;QACrC;AACF,IAAA,CAAC;IAED,MAAM,wBAAwB,GAAG,MAAK;QACpC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAChC,IAAA,CAAC;IAED,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,EAAA,QAAA,EACtDC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oDAAoD,EAAA,QAAA,EAAA,CAEjEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CAC/BD,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,uDAAuD,EAAA,QAAA,EAAA,cAAA,EAAA,CAEhE,EACLA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,qCAAA,EAAA,CAE3C,CAAA,EAAA,CACA,EAGL,KAAK,KACJC,IAAA,CAAC,KAAK,EAAA,EAAC,OAAO,EAAC,QAAQ,EAAC,SAAS,EAAC,MAAM,EAAA,QAAA,EAAA,CACtCD,GAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EACnCA,GAAA,CAAC,gBAAgB,EAAA,EAAA,QAAA,EAAE,KAAK,GAAoB,CAAA,EAAA,CACtC,CACT,EAGDC,IAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CAEnEA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACED,GAAA,CAAA,OAAA,EAAA,EACE,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,iEAAiE,EAAA,QAAA,EAAA,eAAA,EAAA,CAGrE,EACRC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CACvBD,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,0EAA0E,EAAA,CAAG,EAC7FA,GAAA,CAAC,KAAK,EAAA,EACJ,EAAE,EAAC,OAAO,EACV,IAAI,EAAC,OAAO,EACZ,WAAW,EAAC,kBAAkB,EAC9B,SAAS,EAAE,EAAE,CACX,OAAO,EACP,MAAM,CAAC,KAAK,IAAI,yCAAyC,CAC1D,EAAA,cAAA,EACa,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO,EAAA,kBAAA,EAC3B,MAAM,CAAC,KAAK,GAAG,aAAa,GAAG,SAAS,EAAA,GACtD,QAAQ,CAAC,OAAO,CAAC,EAAA,CACrB,CAAA,EAAA,CACE,EACL,MAAM,CAAC,KAAK,KACXA,GAAA,CAAA,GAAA,EAAA,EACE,EAAE,EAAC,aAAa,EAChB,SAAS,EAAC,8BAA8B,EACxC,IAAI,EAAC,OAAO,EAAA,QAAA,EAEX,MAAM,CAAC,KAAK,CAAC,OAAO,EAAA,CACnB,CACL,CAAA,EAAA,CACG,EAGNC,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACED,GAAA,CAAA,OAAA,EAAA,EACE,OAAO,EAAC,UAAU,EAClB,SAAS,EAAC,iEAAiE,EAAA,QAAA,EAAA,UAAA,EAAA,CAGrE,EACRC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CACvBD,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,0EAA0E,EAAA,CAAG,EAC7FA,GAAA,CAAC,KAAK,EAAA,EACJ,EAAE,EAAC,UAAU,EACb,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,EACxC,WAAW,EAAC,qBAAqB,EACjC,SAAS,EAAE,EAAE,CACX,aAAa,EACb,MAAM,CAAC,QAAQ,IAAI,yCAAyC,CAC7D,EAAA,cAAA,EACa,MAAM,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,EAAA,kBAAA,EAC9B,MAAM,CAAC,QAAQ,GAAG,gBAAgB,GAAG,SAAS,EAAA,GAC5D,QAAQ,CAAC,UAAU,CAAC,EAAA,CACxB,EACFA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,wBAAwB,EACjC,SAAS,EAAC,uFAAuF,EAAA,YAAA,EACrF,YAAY,GAAG,eAAe,GAAG,eAAe,EAAA,QAAA,EAE3D,YAAY,IACXA,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,KAE9BA,GAAA,CAAC,GAAG,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,CAC5B,EAAA,CACM,CAAA,EAAA,CACL,EACL,MAAM,CAAC,QAAQ,KACdA,GAAA,CAAA,GAAA,EAAA,EACE,EAAE,EAAC,gBAAgB,EACnB,SAAS,EAAC,8BAA8B,EACxC,IAAI,EAAC,OAAO,EAAA,QAAA,EAEX,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAA,CACtB,CACL,CAAA,EAAA,CACG,EAGNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,IAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAClCD,GAAA,CAAC,QAAQ,EAAA,EAAA,GAAK,QAAQ,CAAC,YAAY,CAAC,EAAA,CAAI,EACxCA,cAAM,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,aAAA,EAAA,CAAmB,CAAA,EAAA,CAC5E,EACRA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAC,6DAA6D,EAAA,QAAA,EAAA,kBAAA,EAAA,CAGhE,CAAA,EAAA,CACL,EAGNA,GAAA,CAAC,MAAM,EAAA,EACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,QAAQ,EAClB,QAAQ,EAAE,YAAY,IAAI,SAAS,EAAA,QAAA,EAElC,YAAY,IAAI,SAAS,IACxBC,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CACEF,GAAA,CAAC,OAAO,EAAA,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,MAAM,EAAA,CAAG,qBAErC,KAEH,SAAS,CACV,EAAA,CACM,CAAA,EAAA,CACJ,EAGPC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oDAAoD,EAAA,QAAA,EAAA,CACjED,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,2DAA2D,EAAA,QAAA,EAAA,mBAAA,EAAA,CAAsB,EAC9FC,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,0CAA0C,EAAA,QAAA,EAAA,CAAA,0BAAA,EAC7BD,GAAA,CAAA,IAAA,EAAA,EAAA,CAAM,EAAA,wBAAA,CAAA,EAAA,CAE5B,CAAA,EAAA,CACA,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAC/BC,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,0CAA0C,EAAA,QAAA,EAAA,CAAA,wBAAA,EAC9B,GAAG,EAC1BD,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,aAAa,EACtB,SAAS,EAAC,qDAAqD,EAAA,QAAA,EAAA,SAAA,EAAA,CAGxD,CAAA,EAAA,CACP,EAAA,CACA,CAAA,EAAA,CACF,EAAA,CACF;AAEV;;;;"}
@@ -34,7 +34,7 @@ const ResetPasswordForm = ({ onSubmit, className, isLoading, successMessage, err
34
34
  if (status === "success") {
35
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
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." }))] }));
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 dark:text-gray-300 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 dark:text-gray-300 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
38
  };
39
39
 
40
40
  export { ResetPasswordForm };
@@ -1 +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
+ {"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 dark:text-gray-300 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 dark:text-gray-300 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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"}
@@ -46,8 +46,8 @@ const SignupForm = ({ className, onSubmit, isLoading, error, onLoginClick, }) =>
46
46
  const toggleConfirmPasswordVisibility = () => {
47
47
  setShowConfirmPassword(prev => !prev);
48
48
  };
49
- return (jsx("div", { className: cn('w-full max-w-md mx-auto', className), children: jsxs("div", { className: "bg-white rounded-lg shadow-lg p-8", children: [jsxs("div", { className: "text-center mb-8", children: [jsx("h1", { className: "text-2xl font-bold text-gray-900 mb-2", children: "Create Account" }), jsx("p", { className: "text-gray-600", children: "Join us today and get started" })] }), error && (jsxs(Alert, { variant: "danger", className: "mb-6", children: [jsx(AlertCircle, { className: "h-4 w-4" }), jsx(AlertDescription, { children: error })] })), jsxs("form", { onSubmit: handleSubmit(handleFormSubmit), className: "space-y-6", children: [jsxs("div", { children: [jsx("label", { htmlFor: "name", className: "block text-sm font-medium text-gray-700 mb-2", children: "Full Name" }), jsxs("div", { className: "relative", children: [jsx(User, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" }), jsx(Input, { id: "name", type: "text", placeholder: "Enter your full name", className: cn('pl-10', errors.name && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.name ? 'true' : 'false', "aria-describedby": errors.name ? 'name-error' : undefined, ...register('name') })] }), errors.name && (jsx("p", { id: "name-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.name.message }))] }), jsxs("div", { children: [jsx("label", { htmlFor: "email", className: "block text-sm font-medium text-gray-700 mb-2", children: "Email Address" }), jsxs("div", { className: "relative", children: [jsx(Mail, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" }), jsx(Input, { id: "email", type: "email", placeholder: "Enter your email", className: cn('pl-10', errors.email && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.email ? 'true' : 'false', "aria-describedby": errors.email ? 'email-error' : undefined, ...register('email') })] }), errors.email && (jsx("p", { id: "email-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.email.message }))] }), jsxs("div", { children: [jsx("label", { htmlFor: "password", className: "block text-sm font-medium text-gray-700 mb-2", children: "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: "Create a strong password", className: cn('pl-10 pr-10', errors.password && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.password ? 'true' : 'false', "aria-describedby": errors.password ? 'password-error password-strength' : 'password-strength', ...register('password') }), jsx("button", { type: "button", onClick: togglePasswordVisibility, className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600", "aria-label": showPassword ? 'Hide password' : 'Show password', children: showPassword ? (jsx(EyeOff, { className: "h-5 w-5" })) : (jsx(Eye, { className: "h-5 w-5" })) })] }), password && passwordStrength && (jsxs("div", { id: "password-strength", className: "mt-2", children: [jsxs("div", { className: "flex items-center justify-between mb-1", children: [jsx("span", { className: "text-xs text-gray-600", children: "Password strength:" }), jsx(Badge, { variant: passwordStrength.color === 'success' ? 'success' :
50
- passwordStrength.color === 'warning' ? 'warning' : 'danger', className: "text-xs", children: passwordStrength.label })] }), jsx("div", { className: "w-full bg-gray-200 rounded-full h-2", children: jsx("div", { className: cn('h-2 rounded-full transition-all duration-300', passwordStrength.color === 'success' && 'bg-success-500', passwordStrength.color === 'warning' && 'bg-warning-500', passwordStrength.color === 'danger' && 'bg-danger-500'), style: { width: `${(passwordStrength.score / 6) * 100}%` } }) })] })), errors.password && (jsx("p", { id: "password-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.password.message }))] }), jsxs("div", { children: [jsx("label", { htmlFor: "confirmPassword", className: "block text-sm font-medium text-gray-700 mb-2", 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 your password", className: cn('pl-10 pr-10', errors.confirmPassword && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.confirmPassword ? 'true' : 'false', "aria-describedby": errors.confirmPassword ? 'confirm-password-error' : undefined, ...register('confirmPassword') }), jsx("button", { type: "button", onClick: toggleConfirmPasswordVisibility, className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600", "aria-label": showConfirmPassword ? 'Hide password' : 'Show password', children: showConfirmPassword ? (jsx(EyeOff, { className: "h-5 w-5" })) : (jsx(Eye, { className: "h-5 w-5" })) })] }), errors.confirmPassword && (jsx("p", { id: "confirm-password-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.confirmPassword.message }))] }), jsxs("div", { children: [jsxs("label", { className: "flex items-start", children: [jsx(Checkbox, { className: "mt-1", ...register('acceptTerms'), "aria-invalid": errors.acceptTerms ? 'true' : 'false', "aria-describedby": errors.acceptTerms ? 'terms-error' : undefined }), jsxs("span", { className: "ml-2 text-sm text-gray-600", children: ["I agree to the", ' ', jsx("a", { href: "#", className: "text-primary-600 hover:text-primary-500 font-medium", children: "Terms of Service" }), ' ', "and", ' ', jsx("a", { href: "#", className: "text-primary-600 hover:text-primary-500 font-medium", children: "Privacy Policy" })] })] }), errors.acceptTerms && (jsx("p", { id: "terms-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.acceptTerms.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" }), "Creating account..."] })) : ('Create Account') })] }), jsx("div", { className: "mt-6 text-center", children: jsxs("p", { className: "text-sm text-gray-600", children: ["Already have an account?", ' ', jsx("button", { type: "button", onClick: onLoginClick, className: "text-primary-600 hover:text-primary-500 font-medium", children: "Sign in" })] }) })] }) }));
49
+ return (jsx("div", { className: cn('w-full max-w-md mx-auto', className), children: jsxs("div", { className: "bg-white dark:bg-gray-800 rounded-lg shadow-lg p-8", children: [jsxs("div", { className: "text-center mb-8", children: [jsx("h1", { className: "text-2xl font-bold text-gray-900 dark:text-white mb-2", children: "Create Account" }), jsx("p", { className: "text-gray-600 dark:text-gray-400", children: "Join us today and get started" })] }), error && (jsxs(Alert, { variant: "danger", className: "mb-6", children: [jsx(AlertCircle, { className: "h-4 w-4" }), jsx(AlertDescription, { children: error })] })), jsxs("form", { onSubmit: handleSubmit(handleFormSubmit), className: "space-y-6", children: [jsxs("div", { children: [jsx("label", { htmlFor: "name", className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: "Full Name" }), jsxs("div", { className: "relative", children: [jsx(User, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" }), jsx(Input, { id: "name", type: "text", placeholder: "Enter your full name", className: cn('pl-10', errors.name && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.name ? 'true' : 'false', "aria-describedby": errors.name ? 'name-error' : undefined, ...register('name') })] }), errors.name && (jsx("p", { id: "name-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.name.message }))] }), jsxs("div", { children: [jsx("label", { htmlFor: "email", className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: "Email Address" }), jsxs("div", { className: "relative", children: [jsx(Mail, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" }), jsx(Input, { id: "email", type: "email", placeholder: "Enter your email", className: cn('pl-10', errors.email && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.email ? 'true' : 'false', "aria-describedby": errors.email ? 'email-error' : undefined, ...register('email') })] }), errors.email && (jsx("p", { id: "email-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.email.message }))] }), jsxs("div", { children: [jsx("label", { htmlFor: "password", className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: "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: "Create a strong password", className: cn('pl-10 pr-10', errors.password && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.password ? 'true' : 'false', "aria-describedby": errors.password ? 'password-error password-strength' : 'password-strength', ...register('password') }), jsx("button", { type: "button", onClick: togglePasswordVisibility, className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600", "aria-label": showPassword ? 'Hide password' : 'Show password', children: showPassword ? (jsx(EyeOff, { className: "h-5 w-5" })) : (jsx(Eye, { className: "h-5 w-5" })) })] }), password && passwordStrength && (jsxs("div", { id: "password-strength", className: "mt-2", children: [jsxs("div", { className: "flex items-center justify-between mb-1", children: [jsx("span", { className: "text-xs text-gray-600 dark:text-gray-400", children: "Password strength:" }), jsx(Badge, { variant: passwordStrength.color === 'success' ? 'success' :
50
+ passwordStrength.color === 'warning' ? 'warning' : 'danger', className: "text-xs", children: passwordStrength.label })] }), jsx("div", { className: "w-full bg-gray-200 rounded-full h-2", children: jsx("div", { className: cn('h-2 rounded-full transition-all duration-300', passwordStrength.color === 'success' && 'bg-success-500', passwordStrength.color === 'warning' && 'bg-warning-500', passwordStrength.color === 'danger' && 'bg-danger-500'), style: { width: `${(passwordStrength.score / 6) * 100}%` } }) })] })), errors.password && (jsx("p", { id: "password-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.password.message }))] }), jsxs("div", { children: [jsx("label", { htmlFor: "confirmPassword", className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", 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 your password", className: cn('pl-10 pr-10', errors.confirmPassword && 'border-danger-500 focus:ring-danger-500'), "aria-invalid": errors.confirmPassword ? 'true' : 'false', "aria-describedby": errors.confirmPassword ? 'confirm-password-error' : undefined, ...register('confirmPassword') }), jsx("button", { type: "button", onClick: toggleConfirmPasswordVisibility, className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600", "aria-label": showConfirmPassword ? 'Hide password' : 'Show password', children: showConfirmPassword ? (jsx(EyeOff, { className: "h-5 w-5" })) : (jsx(Eye, { className: "h-5 w-5" })) })] }), errors.confirmPassword && (jsx("p", { id: "confirm-password-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.confirmPassword.message }))] }), jsxs("div", { children: [jsxs("label", { className: "flex items-start", children: [jsx(Checkbox, { className: "mt-1", ...register('acceptTerms'), "aria-invalid": errors.acceptTerms ? 'true' : 'false', "aria-describedby": errors.acceptTerms ? 'terms-error' : undefined }), jsxs("span", { className: "ml-2 text-sm text-gray-600 dark:text-gray-400", children: ["I agree to the", ' ', jsx("a", { href: "#", className: "text-primary-600 hover:text-primary-500 font-medium", children: "Terms of Service" }), ' ', "and", ' ', jsx("a", { href: "#", className: "text-primary-600 hover:text-primary-500 font-medium", children: "Privacy Policy" })] })] }), errors.acceptTerms && (jsx("p", { id: "terms-error", className: "mt-1 text-sm text-danger-600", role: "alert", children: errors.acceptTerms.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" }), "Creating account..."] })) : ('Create Account') })] }), jsx("div", { className: "mt-6 text-center", children: jsxs("p", { className: "text-sm text-gray-600 dark:text-gray-400", children: ["Already have an account?", ' ', jsx("button", { type: "button", onClick: onLoginClick, className: "text-primary-600 hover:text-primary-500 font-medium", children: "Sign in" })] }) })] }) }));
51
51
  };
52
52
 
53
53
  export { SignupForm };
@@ -1 +1 @@
1
- {"version":3,"file":"SignupForm.js","sources":["../../../src/components/Auth/SignupForm.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Eye, EyeOff, Mail, Lock, User, AlertCircle, Check } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Checkbox } from '../Checkbox';\nimport { Alert, AlertDescription } from '../Alert';\nimport { Spinner } from '../Spinner';\nimport { Badge } from '../Badge';\nimport { signupSchema, type SignupFormData, calculatePasswordStrength } from '../../utils/validation';\n\ninterface SignupFormProps {\n className?: string;\n onSubmit: (data: SignupFormData) => Promise<void>;\n isLoading?: boolean;\n error?: string | null;\n onLoginClick?: () => void;\n}\n\n/**\n * SignupForm component with real-time validation and password strength indicator\n */\nexport const SignupForm: React.FC<SignupFormProps> = ({\n className,\n onSubmit,\n isLoading,\n error,\n onLoginClick,\n}) => {\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors, isSubmitting },\n reset,\n } = useForm<SignupFormData>({\n resolver: zodResolver(signupSchema),\n defaultValues: {\n name: '',\n email: '',\n password: '',\n confirmPassword: '',\n acceptTerms: false,\n },\n mode: 'onChange',\n });\n\n const password = watch('password');\n const passwordStrength = password ? calculatePasswordStrength(password) : null;\n\n const handleFormSubmit = async (data: SignupFormData) => {\n try {\n await onSubmit(data);\n reset();\n } catch (err) {\n console.error('Signup failed:', err);\n }\n };\n\n const togglePasswordVisibility = () => {\n setShowPassword(prev => !prev);\n };\n\n const toggleConfirmPasswordVisibility = () => {\n setShowConfirmPassword(prev => !prev);\n };\n\n return (\n <div className={cn('w-full max-w-md mx-auto', className)}>\n <div className=\"bg-white rounded-lg shadow-lg p-8\">\n {/* Header */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2\">\n Create Account\n </h1>\n <p className=\"text-gray-600\">\n Join us today and get started\n </p>\n </div>\n\n {/* Error Alert */}\n {error && (\n <Alert variant=\"danger\" className=\"mb-6\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n )}\n\n {/* Signup Form */}\n <form onSubmit={handleSubmit(handleFormSubmit)} className=\"space-y-6\">\n {/* Name Field */}\n <div>\n <label\n htmlFor=\"name\"\n className=\"block text-sm font-medium text-gray-700 mb-2\"\n >\n Full Name\n </label>\n <div className=\"relative\">\n <User className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400\" />\n <Input\n id=\"name\"\n type=\"text\"\n placeholder=\"Enter your full name\"\n className={cn(\n 'pl-10',\n errors.name && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.name ? 'true' : 'false'}\n aria-describedby={errors.name ? 'name-error' : undefined}\n {...register('name')}\n />\n </div>\n {errors.name && (\n <p\n id=\"name-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.name.message}\n </p>\n )}\n </div>\n\n {/* Email Field */}\n <div>\n <label\n htmlFor=\"email\"\n className=\"block text-sm font-medium text-gray-700 mb-2\"\n >\n Email Address\n </label>\n <div className=\"relative\">\n <Mail className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400\" />\n <Input\n id=\"email\"\n type=\"email\"\n placeholder=\"Enter your email\"\n className={cn(\n 'pl-10',\n errors.email && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.email ? 'true' : 'false'}\n aria-describedby={errors.email ? 'email-error' : undefined}\n {...register('email')}\n />\n </div>\n {errors.email && (\n <p\n id=\"email-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.email.message}\n </p>\n )}\n </div>\n\n {/* Password Field */}\n <div>\n <label\n htmlFor=\"password\"\n className=\"block text-sm font-medium text-gray-700 mb-2\"\n >\n 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=\"Create a strong password\"\n className={cn(\n 'pl-10 pr-10',\n errors.password && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.password ? 'true' : 'false'}\n aria-describedby={errors.password ? 'password-error password-strength' : 'password-strength'}\n {...register('password')}\n />\n <button\n type=\"button\"\n onClick={togglePasswordVisibility}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? (\n <EyeOff className=\"h-5 w-5\" />\n ) : (\n <Eye className=\"h-5 w-5\" />\n )}\n </button>\n </div>\n \n {/* Password Strength Indicator */}\n {password && passwordStrength && (\n <div id=\"password-strength\" className=\"mt-2\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs text-gray-600\">Password strength:</span>\n <Badge\n variant={\n passwordStrength.color === 'success' ? 'success' :\n passwordStrength.color === 'warning' ? 'warning' : 'danger'\n }\n className=\"text-xs\"\n >\n {passwordStrength.label}\n </Badge>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2\">\n <div\n className={cn(\n 'h-2 rounded-full transition-all duration-300',\n passwordStrength.color === 'success' && 'bg-success-500',\n passwordStrength.color === 'warning' && 'bg-warning-500',\n passwordStrength.color === 'danger' && 'bg-danger-500'\n )}\n style={{ width: `${(passwordStrength.score / 6) * 100}%` }}\n />\n </div>\n </div>\n )}\n \n {errors.password && (\n <p\n id=\"password-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.password.message}\n </p>\n )}\n </div>\n\n {/* Confirm Password Field */}\n <div>\n <label\n htmlFor=\"confirmPassword\"\n className=\"block text-sm font-medium text-gray-700 mb-2\"\n >\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 your password\"\n className={cn(\n 'pl-10 pr-10',\n errors.confirmPassword && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.confirmPassword ? 'true' : 'false'}\n aria-describedby={errors.confirmPassword ? 'confirm-password-error' : undefined}\n {...register('confirmPassword')}\n />\n <button\n type=\"button\"\n onClick={toggleConfirmPasswordVisibility}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n aria-label={showConfirmPassword ? 'Hide password' : 'Show password'}\n >\n {showConfirmPassword ? (\n <EyeOff className=\"h-5 w-5\" />\n ) : (\n <Eye className=\"h-5 w-5\" />\n )}\n </button>\n </div>\n {errors.confirmPassword && (\n <p\n id=\"confirm-password-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.confirmPassword.message}\n </p>\n )}\n </div>\n\n {/* Terms of Service */}\n <div>\n <label className=\"flex items-start\">\n <Checkbox\n className=\"mt-1\"\n {...register('acceptTerms')}\n aria-invalid={errors.acceptTerms ? 'true' : 'false'}\n aria-describedby={errors.acceptTerms ? 'terms-error' : undefined}\n />\n <span className=\"ml-2 text-sm text-gray-600\">\n I agree to the{' '}\n <a\n href=\"#\"\n className=\"text-primary-600 hover:text-primary-500 font-medium\"\n >\n Terms of Service\n </a>{' '}\n and{' '}\n <a\n href=\"#\"\n className=\"text-primary-600 hover:text-primary-500 font-medium\"\n >\n Privacy Policy\n </a>\n </span>\n </label>\n {errors.acceptTerms && (\n <p\n id=\"terms-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.acceptTerms.message}\n </p>\n )}\n </div>\n\n {/* Submit Button */}\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 Creating account...\n </>\n ) : (\n 'Create Account'\n )}\n </Button>\n </form>\n\n {/* Login Link */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-600\">\n Already have an account?{' '}\n <button\n type=\"button\"\n onClick={onLoginClick}\n className=\"text-primary-600 hover:text-primary-500 font-medium\"\n >\n Sign in\n </button>\n </p>\n </div>\n </div>\n </div>\n );\n};"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"SignupForm.js","sources":["../../../src/components/Auth/SignupForm.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Eye, EyeOff, Mail, Lock, User, AlertCircle, Check } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Checkbox } from '../Checkbox';\nimport { Alert, AlertDescription } from '../Alert';\nimport { Spinner } from '../Spinner';\nimport { Badge } from '../Badge';\nimport { signupSchema, type SignupFormData, calculatePasswordStrength } from '../../utils/validation';\n\ninterface SignupFormProps {\n className?: string;\n onSubmit: (data: SignupFormData) => Promise<void>;\n isLoading?: boolean;\n error?: string | null;\n onLoginClick?: () => void;\n}\n\n/**\n * SignupForm component with real-time validation and password strength indicator\n */\nexport const SignupForm: React.FC<SignupFormProps> = ({\n className,\n onSubmit,\n isLoading,\n error,\n onLoginClick,\n}) => {\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors, isSubmitting },\n reset,\n } = useForm<SignupFormData>({\n resolver: zodResolver(signupSchema),\n defaultValues: {\n name: '',\n email: '',\n password: '',\n confirmPassword: '',\n acceptTerms: false,\n },\n mode: 'onChange',\n });\n\n const password = watch('password');\n const passwordStrength = password ? calculatePasswordStrength(password) : null;\n\n const handleFormSubmit = async (data: SignupFormData) => {\n try {\n await onSubmit(data);\n reset();\n } catch (err) {\n console.error('Signup failed:', err);\n }\n };\n\n const togglePasswordVisibility = () => {\n setShowPassword(prev => !prev);\n };\n\n const toggleConfirmPasswordVisibility = () => {\n setShowConfirmPassword(prev => !prev);\n };\n\n return (\n <div className={cn('w-full max-w-md mx-auto', className)}>\n <div className=\"bg-white dark:bg-gray-800 rounded-lg shadow-lg p-8\">\n {/* Header */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white mb-2\">\n Create Account\n </h1>\n <p className=\"text-gray-600 dark:text-gray-400\">\n Join us today and get started\n </p>\n </div>\n\n {/* Error Alert */}\n {error && (\n <Alert variant=\"danger\" className=\"mb-6\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n )}\n\n {/* Signup Form */}\n <form onSubmit={handleSubmit(handleFormSubmit)} className=\"space-y-6\">\n {/* Name Field */}\n <div>\n <label\n htmlFor=\"name\"\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\"\n >\n Full Name\n </label>\n <div className=\"relative\">\n <User className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400\" />\n <Input\n id=\"name\"\n type=\"text\"\n placeholder=\"Enter your full name\"\n className={cn(\n 'pl-10',\n errors.name && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.name ? 'true' : 'false'}\n aria-describedby={errors.name ? 'name-error' : undefined}\n {...register('name')}\n />\n </div>\n {errors.name && (\n <p\n id=\"name-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.name.message}\n </p>\n )}\n </div>\n\n {/* Email Field */}\n <div>\n <label\n htmlFor=\"email\"\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\"\n >\n Email Address\n </label>\n <div className=\"relative\">\n <Mail className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400\" />\n <Input\n id=\"email\"\n type=\"email\"\n placeholder=\"Enter your email\"\n className={cn(\n 'pl-10',\n errors.email && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.email ? 'true' : 'false'}\n aria-describedby={errors.email ? 'email-error' : undefined}\n {...register('email')}\n />\n </div>\n {errors.email && (\n <p\n id=\"email-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.email.message}\n </p>\n )}\n </div>\n\n {/* Password Field */}\n <div>\n <label\n htmlFor=\"password\"\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\"\n >\n 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=\"Create a strong password\"\n className={cn(\n 'pl-10 pr-10',\n errors.password && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.password ? 'true' : 'false'}\n aria-describedby={errors.password ? 'password-error password-strength' : 'password-strength'}\n {...register('password')}\n />\n <button\n type=\"button\"\n onClick={togglePasswordVisibility}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? (\n <EyeOff className=\"h-5 w-5\" />\n ) : (\n <Eye className=\"h-5 w-5\" />\n )}\n </button>\n </div>\n \n {/* Password Strength Indicator */}\n {password && passwordStrength && (\n <div id=\"password-strength\" className=\"mt-2\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs text-gray-600 dark:text-gray-400\">Password strength:</span>\n <Badge\n variant={\n passwordStrength.color === 'success' ? 'success' :\n passwordStrength.color === 'warning' ? 'warning' : 'danger'\n }\n className=\"text-xs\"\n >\n {passwordStrength.label}\n </Badge>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2\">\n <div\n className={cn(\n 'h-2 rounded-full transition-all duration-300',\n passwordStrength.color === 'success' && 'bg-success-500',\n passwordStrength.color === 'warning' && 'bg-warning-500',\n passwordStrength.color === 'danger' && 'bg-danger-500'\n )}\n style={{ width: `${(passwordStrength.score / 6) * 100}%` }}\n />\n </div>\n </div>\n )}\n \n {errors.password && (\n <p\n id=\"password-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.password.message}\n </p>\n )}\n </div>\n\n {/* Confirm Password Field */}\n <div>\n <label\n htmlFor=\"confirmPassword\"\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\"\n >\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 your password\"\n className={cn(\n 'pl-10 pr-10',\n errors.confirmPassword && 'border-danger-500 focus:ring-danger-500'\n )}\n aria-invalid={errors.confirmPassword ? 'true' : 'false'}\n aria-describedby={errors.confirmPassword ? 'confirm-password-error' : undefined}\n {...register('confirmPassword')}\n />\n <button\n type=\"button\"\n onClick={toggleConfirmPasswordVisibility}\n className=\"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n aria-label={showConfirmPassword ? 'Hide password' : 'Show password'}\n >\n {showConfirmPassword ? (\n <EyeOff className=\"h-5 w-5\" />\n ) : (\n <Eye className=\"h-5 w-5\" />\n )}\n </button>\n </div>\n {errors.confirmPassword && (\n <p\n id=\"confirm-password-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.confirmPassword.message}\n </p>\n )}\n </div>\n\n {/* Terms of Service */}\n <div>\n <label className=\"flex items-start\">\n <Checkbox\n className=\"mt-1\"\n {...register('acceptTerms')}\n aria-invalid={errors.acceptTerms ? 'true' : 'false'}\n aria-describedby={errors.acceptTerms ? 'terms-error' : undefined}\n />\n <span className=\"ml-2 text-sm text-gray-600 dark:text-gray-400\">\n I agree to the{' '}\n <a\n href=\"#\"\n className=\"text-primary-600 hover:text-primary-500 font-medium\"\n >\n Terms of Service\n </a>{' '}\n and{' '}\n <a\n href=\"#\"\n className=\"text-primary-600 hover:text-primary-500 font-medium\"\n >\n Privacy Policy\n </a>\n </span>\n </label>\n {errors.acceptTerms && (\n <p\n id=\"terms-error\"\n className=\"mt-1 text-sm text-danger-600\"\n role=\"alert\"\n >\n {errors.acceptTerms.message}\n </p>\n )}\n </div>\n\n {/* Submit Button */}\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 Creating account...\n </>\n ) : (\n 'Create Account'\n )}\n </Button>\n </form>\n\n {/* Login Link */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n Already have an account?{' '}\n <button\n type=\"button\"\n onClick={onLoginClick}\n className=\"text-primary-600 hover:text-primary-500 font-medium\"\n >\n Sign in\n </button>\n </p>\n </div>\n </div>\n </div>\n );\n};"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import React__default, { useMemo, useState } from 'react';
3
+ import '@react-email/components';
3
4
  import { EmailPreviewer } from './components/EmailPreviewer.js';
4
5
  import * as index from './templates/index.js';
5
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"EmailShowcase.js","sources":["../../../src/components/Email/EmailShowcase.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { EmailPreviewer } from './components';\nimport * as AllTemplates from './templates';\n\n// We map known template names to explicit categories.\n// Any missed/new exports automatically fall into an \"Uncategorized\" section!\nconst CATEGORY_MAP: Record<string, string[]> = {\n \"Marketing: Newsletters\": [\"WeeklyNewsletter\", \"MonthlyDigest\", \"CuratedIndustryNews\"],\n \"Marketing: Blog\": [\"NewBlogPost\", \"BlogSeries\", \"BestOfRoundup\"],\n \"Marketing: Lead Nurturing\": [\"LeadMagnetDelivery\", \"WebinarConfirmation\", \"WebinarReminder\", \"WebinarFollowup\", \"DripCampaignDay1\", \"DripCampaignComplete\", \"CaseStudyDelivery\"],\n \"Marketing: Promotional\": [\"AbandonedCart\", \"FlashSale\", \"BrowseAbandonment\", \"PriceDropAlert\", \"BackInStock\", \"SeasonalCampaign\", \"BirthdayOffer\", \"MilestoneDiscount\"],\n \"Marketing: Events\": [\"EventAnnouncement\", \"EarlyBirdReminder\", \"ScheduleReleased\", \"VIPInvite\", \"PostEventThankYou\", \"ConferenceSeries\"],\n \"Marketing: Re-engagement\": [\"WeMissYou30Day\", \"ComeBack60Day\", \"LastChance90Day\", \"ProductUpdateReengagement\"],\n \"Marketing: Social\": [\"SocialProof\", \"NewFollowerWelcome\", \"ShareYourStory\", \"UserSpotlight\", \"CommunityMilestone\"],\n \"Marketing: Surveys\": [\"NPSSurvey\", \"ExitSurvey\", \"CSATSurvey\", \"ProductFeedback\", \"BetaFeedback\"],\n \"Marketing: Affiliate\": [\"AffiliateInvite\", \"AffiliateWelcome\", \"AffiliatePayout\", \"AffiliateTopPerformer\", \"PartnerComarketing\"],\n \"Marketing: Content\": [\"NewGuideEbook\", \"ToolTemplateDelivery\", \"InfographicEmail\", \"PodcastEpisode\", \"YouTubeNotification\"],\n \"Sales\": [\"ColdOutreach\", \"FollowUpEmail\", \"ScheduleDemo\", \"SendProposal\", \"ProposalAccepted\", \"ProjectTermination\", \"ClientWinBack\", \"ClientReferenceRequest\"],\n \"Legal\": [\"PrivacyPolicyUpdate\", \"TermsOfServiceUpdate\", \"DPANotice\", \"DMCANotice\", \"GDPRCompliance\"],\n \"Internal: HR\": [\"NewHireAnnouncement\", \"BirthdayAnniversary\", \"EmployeeFarewell\", \"PolicyUpdate\", \"ExitInterviewRequest\"],\n \"Internal: IT\": [\"ITOutageReport\", \"PasswordRotationReminder\", \"AppAccessGranted\"],\n \"Internal: Comms\": [\"LeadershipUpdate\", \"MeetingRecap\", \"CompanyEventsCalendar\"],\n \"Billing\": [\"InvoiceEmail\", \"PaymentFailedEmail\", \"SubscriptionConfirmation\", \"SubscriptionCancelled\", \"TrialEndingEmail\", \"CreditCardExpiring\", \"PaymentReceipt\", \"OverduePaymentNotice\"],\n \"Authentication\": [\"WelcomeEmail\", \"ConfirmEmail\", \"MagicLinkEmail\", \"ResetPasswordEmail\", \"EmailChangeVerification\", \"TwoFactorCodeEmail\"],\n \"Support\": [\"TicketCreatedEmail\", \"TicketReplyEmail\", \"TicketResolvedEmail\", \"SupportFeedbackRequest\"],\n \"Engagement\": [\"WeeklyDigest\", \"FeatureAnnouncement\", \"MilestoneEmail\", \"InactivityWarning\", \"TipOfWeek\", \"ProductChangelog\"],\n \"Growth\": [\"ReferralInvite\", \"ReferralReward\", \"ReferralConverted\", \"WaitlistWelcome\", \"SocialSharePrompt\"],\n \"Security\": [\"NewLoginAlert\", \"PolicyUpdateEmail\", \"AccountDeletedConfirmation\", \"DataExportReady\", \"ApiKeyCreated\"],\n \"System\": [\"MaintenanceNotice\", \"IncidentReport\", \"StatusPageUpdate\"]\n};\n\nexport const EmailShowcase = () => {\n const { categories, flatTemplates, defaultTemplateId } = useMemo(() => {\n const parsedCategories: Record<string, Record<string, { name: string; component: React.ReactElement }>> = {};\n const flat: Record<string, React.ReactElement> = {};\n let firstId = '';\n\n // 1. Process known categories\n Object.entries(CATEGORY_MAP).forEach(([categoryName, componentNames]) => {\n componentNames.forEach(compName => {\n const Component = (AllTemplates as any)[compName];\n if (Component && typeof Component === 'function') {\n if (!parsedCategories[categoryName]) parsedCategories[categoryName] = {};\n \n // Automatically add spaces before Capital letters (e.g., WeeklyNewsletter -> Weekly Newsletter)\n const formattedName = compName.replace(/([A-Z])/g, ' $1').trim();\n const element = <Component />;\n \n parsedCategories[categoryName][compName] = { name: formattedName, component: element };\n flat[compName] = element;\n if (!firstId) firstId = compName;\n }\n });\n });\n\n // 2. Discover any newly added exports (Uncategorized Fallback)\n Object.entries(AllTemplates).forEach(([compName, Component]) => {\n if (\n compName === 'default' || \n flat[compName] || \n typeof Component !== 'function' ||\n /^[a-z]/.test(compName) // Ignore utility functions like renderEmailParams\n ) {\n return;\n }\n \n const categoryName = \"Uncategorized\";\n if (!parsedCategories[categoryName]) parsedCategories[categoryName] = {};\n \n const formattedName = compName.replace(/([A-Z])/g, ' $1').trim();\n const element = <Component />;\n \n parsedCategories[categoryName][compName] = { name: formattedName, component: element };\n flat[compName] = element;\n if (!firstId) firstId = compName;\n });\n\n return { categories: parsedCategories, flatTemplates: flat, defaultTemplateId: firstId };\n }, []);\n\n const [activeTemplate, setActiveTemplate] = useState(defaultTemplateId);\n\n // Keep state in sync if defaultTemplateId changes when component mounts\n React.useEffect(() => {\n if (!activeTemplate && defaultTemplateId) setActiveTemplate(defaultTemplateId);\n }, [defaultTemplateId, activeTemplate]);\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-4 mb-4\">\n <label className=\"font-medium text-gray-700 dark:text-gray-300\">Select Template:</label>\n <select \n className=\"border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-900 rounded-md px-3 py-2 text-sm text-gray-900 dark:text-white min-w-[250px] focus:outline-none focus:ring-2 focus:ring-primary-500\"\n value={activeTemplate}\n onChange={(e) => setActiveTemplate(e.target.value)}\n >\n {Object.entries(categories).map(([categoryName, templates]) => (\n <optgroup key={categoryName} label={categoryName}>\n {Object.entries(templates).map(([id, data]) => (\n <option key={id} value={id}>{data.name}</option>\n ))}\n </optgroup>\n ))}\n </select>\n </div>\n\n <div className=\"w-full bg-white dark:bg-gray-900 rounded-lg shadow-sm border border-gray-200 dark:border-gray-800\">\n <EmailPreviewer component={flatTemplates[activeTemplate] || <div className=\"p-10 text-center text-gray-500\">No template selected</div>} />\n </div>\n </div>\n );\n};"],"names":["AllTemplates","_jsx","React","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"EmailShowcase.js","sources":["../../../src/components/Email/EmailShowcase.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { EmailPreviewer } from './components';\nimport * as AllTemplates from './templates';\n\n// We map known template names to explicit categories.\n// Any missed/new exports automatically fall into an \"Uncategorized\" section!\nconst CATEGORY_MAP: Record<string, string[]> = {\n \"Marketing: Newsletters\": [\"WeeklyNewsletter\", \"MonthlyDigest\", \"CuratedIndustryNews\"],\n \"Marketing: Blog\": [\"NewBlogPost\", \"BlogSeries\", \"BestOfRoundup\"],\n \"Marketing: Lead Nurturing\": [\"LeadMagnetDelivery\", \"WebinarConfirmation\", \"WebinarReminder\", \"WebinarFollowup\", \"DripCampaignDay1\", \"DripCampaignComplete\", \"CaseStudyDelivery\"],\n \"Marketing: Promotional\": [\"AbandonedCart\", \"FlashSale\", \"BrowseAbandonment\", \"PriceDropAlert\", \"BackInStock\", \"SeasonalCampaign\", \"BirthdayOffer\", \"MilestoneDiscount\"],\n \"Marketing: Events\": [\"EventAnnouncement\", \"EarlyBirdReminder\", \"ScheduleReleased\", \"VIPInvite\", \"PostEventThankYou\", \"ConferenceSeries\"],\n \"Marketing: Re-engagement\": [\"WeMissYou30Day\", \"ComeBack60Day\", \"LastChance90Day\", \"ProductUpdateReengagement\"],\n \"Marketing: Social\": [\"SocialProof\", \"NewFollowerWelcome\", \"ShareYourStory\", \"UserSpotlight\", \"CommunityMilestone\"],\n \"Marketing: Surveys\": [\"NPSSurvey\", \"ExitSurvey\", \"CSATSurvey\", \"ProductFeedback\", \"BetaFeedback\"],\n \"Marketing: Affiliate\": [\"AffiliateInvite\", \"AffiliateWelcome\", \"AffiliatePayout\", \"AffiliateTopPerformer\", \"PartnerComarketing\"],\n \"Marketing: Content\": [\"NewGuideEbook\", \"ToolTemplateDelivery\", \"InfographicEmail\", \"PodcastEpisode\", \"YouTubeNotification\"],\n \"Sales\": [\"ColdOutreach\", \"FollowUpEmail\", \"ScheduleDemo\", \"SendProposal\", \"ProposalAccepted\", \"ProjectTermination\", \"ClientWinBack\", \"ClientReferenceRequest\"],\n \"Legal\": [\"PrivacyPolicyUpdate\", \"TermsOfServiceUpdate\", \"DPANotice\", \"DMCANotice\", \"GDPRCompliance\"],\n \"Internal: HR\": [\"NewHireAnnouncement\", \"BirthdayAnniversary\", \"EmployeeFarewell\", \"PolicyUpdate\", \"ExitInterviewRequest\"],\n \"Internal: IT\": [\"ITOutageReport\", \"PasswordRotationReminder\", \"AppAccessGranted\"],\n \"Internal: Comms\": [\"LeadershipUpdate\", \"MeetingRecap\", \"CompanyEventsCalendar\"],\n \"Billing\": [\"InvoiceEmail\", \"PaymentFailedEmail\", \"SubscriptionConfirmation\", \"SubscriptionCancelled\", \"TrialEndingEmail\", \"CreditCardExpiring\", \"PaymentReceipt\", \"OverduePaymentNotice\"],\n \"Authentication\": [\"WelcomeEmail\", \"ConfirmEmail\", \"MagicLinkEmail\", \"ResetPasswordEmail\", \"EmailChangeVerification\", \"TwoFactorCodeEmail\"],\n \"Support\": [\"TicketCreatedEmail\", \"TicketReplyEmail\", \"TicketResolvedEmail\", \"SupportFeedbackRequest\"],\n \"Engagement\": [\"WeeklyDigest\", \"FeatureAnnouncement\", \"MilestoneEmail\", \"InactivityWarning\", \"TipOfWeek\", \"ProductChangelog\"],\n \"Growth\": [\"ReferralInvite\", \"ReferralReward\", \"ReferralConverted\", \"WaitlistWelcome\", \"SocialSharePrompt\"],\n \"Security\": [\"NewLoginAlert\", \"PolicyUpdateEmail\", \"AccountDeletedConfirmation\", \"DataExportReady\", \"ApiKeyCreated\"],\n \"System\": [\"MaintenanceNotice\", \"IncidentReport\", \"StatusPageUpdate\"]\n};\n\nexport const EmailShowcase = () => {\n const { categories, flatTemplates, defaultTemplateId } = useMemo(() => {\n const parsedCategories: Record<string, Record<string, { name: string; component: React.ReactElement }>> = {};\n const flat: Record<string, React.ReactElement> = {};\n let firstId = '';\n\n // 1. Process known categories\n Object.entries(CATEGORY_MAP).forEach(([categoryName, componentNames]) => {\n componentNames.forEach(compName => {\n const Component = (AllTemplates as any)[compName];\n if (Component && typeof Component === 'function') {\n if (!parsedCategories[categoryName]) parsedCategories[categoryName] = {};\n \n // Automatically add spaces before Capital letters (e.g., WeeklyNewsletter -> Weekly Newsletter)\n const formattedName = compName.replace(/([A-Z])/g, ' $1').trim();\n const element = <Component />;\n \n parsedCategories[categoryName][compName] = { name: formattedName, component: element };\n flat[compName] = element;\n if (!firstId) firstId = compName;\n }\n });\n });\n\n // 2. Discover any newly added exports (Uncategorized Fallback)\n Object.entries(AllTemplates).forEach(([compName, Component]) => {\n if (\n compName === 'default' || \n flat[compName] || \n typeof Component !== 'function' ||\n /^[a-z]/.test(compName) // Ignore utility functions like renderEmailParams\n ) {\n return;\n }\n \n const categoryName = \"Uncategorized\";\n if (!parsedCategories[categoryName]) parsedCategories[categoryName] = {};\n \n const formattedName = compName.replace(/([A-Z])/g, ' $1').trim();\n const element = <Component />;\n \n parsedCategories[categoryName][compName] = { name: formattedName, component: element };\n flat[compName] = element;\n if (!firstId) firstId = compName;\n });\n\n return { categories: parsedCategories, flatTemplates: flat, defaultTemplateId: firstId };\n }, []);\n\n const [activeTemplate, setActiveTemplate] = useState(defaultTemplateId);\n\n // Keep state in sync if defaultTemplateId changes when component mounts\n React.useEffect(() => {\n if (!activeTemplate && defaultTemplateId) setActiveTemplate(defaultTemplateId);\n }, [defaultTemplateId, activeTemplate]);\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-4 mb-4\">\n <label className=\"font-medium text-gray-700 dark:text-gray-300\">Select Template:</label>\n <select \n className=\"border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-900 rounded-md px-3 py-2 text-sm text-gray-900 dark:text-white min-w-[250px] focus:outline-none focus:ring-2 focus:ring-primary-500\"\n value={activeTemplate}\n onChange={(e) => setActiveTemplate(e.target.value)}\n >\n {Object.entries(categories).map(([categoryName, templates]) => (\n <optgroup key={categoryName} label={categoryName}>\n {Object.entries(templates).map(([id, data]) => (\n <option key={id} value={id}>{data.name}</option>\n ))}\n </optgroup>\n ))}\n </select>\n </div>\n\n <div className=\"w-full bg-white dark:bg-gray-900 rounded-lg shadow-sm border border-gray-200 dark:border-gray-800\">\n <EmailPreviewer component={flatTemplates[activeTemplate] || <div className=\"p-10 text-center text-gray-500\">No template selected</div>} />\n </div>\n </div>\n );\n};"],"names":["AllTemplates","_jsx","React","_jsxs"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { Button } from '../../../node_modules/@react-email/button/dist/index.js';
2
+ import { Button } from '@react-email/components';
3
3
 
4
4
  const EmailButton = ({ children, href }) => (jsx(Button, { href: href, className: "bg-blue-600 rounded text-white text-[15px] font-semibold no-underline text-center px-6 py-3 inline-block", children: children }));
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { Hr } from '../../../node_modules/@react-email/hr/dist/index.js';
2
+ import { Hr } from '@react-email/components';
3
3
 
4
4
  const EmailDivider = () => (jsx(Hr, { className: "border-gray-200 dark:border-gray-700 my-6" }));
5
5
 
@@ -1,7 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Section } from '../../../node_modules/@react-email/section/dist/index.js';
3
- import { Text } from '../../../node_modules/@react-email/text/dist/index.js';
4
- import { Link } from '../../../node_modules/@react-email/link/dist/index.js';
2
+ import { Section, Text, Link } from '@react-email/components';
5
3
 
6
4
  const EmailFooter = ({ companyName = 'Beyond Corp' }) => (jsxs(Section, { className: "mt-8 text-center", children: [jsxs(Text, { className: "text-gray-400 dark:text-gray-500 text-xs", children: ["\u00A9 ", new Date().getFullYear(), " ", companyName, ". All rights reserved."] }), jsxs(Text, { className: "text-gray-400 dark:text-gray-500 text-xs mt-2", children: ["If you no longer wish to receive these emails, you can ", jsx(Link, { href: "#", className: "text-gray-500 dark:text-gray-400 underline", children: "unsubscribe" }), "."] })] }));
7
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"EmailFooter.js","sources":["../../../../src/components/Email/components/EmailFooter.tsx"],"sourcesContent":["import React from 'react';\nimport { Text, Section, Link } from '@react-email/components';\n\nexport const EmailFooter = ({ companyName = 'Beyond Corp' }) => (\n <Section className=\"mt-8 text-center\">\n <Text className=\"text-gray-400 dark:text-gray-500 text-xs\">\n © {new Date().getFullYear()} {companyName}. All rights reserved.\n </Text>\n <Text className=\"text-gray-400 dark:text-gray-500 text-xs mt-2\">\n If you no longer wish to receive these emails, you can <Link href=\"#\" className=\"text-gray-500 dark:text-gray-400 underline\">unsubscribe</Link>.\n </Text>\n </Section>\n);"],"names":["_jsxs","_jsx"],"mappings":";;;;;AAGO,MAAM,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,aAAa,EAAE,MACzDA,IAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CACnCA,IAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,0CAA0C,EAAA,QAAA,EAAA,CAAA,SAAA,EACrD,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAA,GAAA,EAAG,WAAW,EAAA,wBAAA,CAAA,EAAA,CACpC,EACPA,IAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAAA,yDAAA,EACNC,GAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAC,GAAG,EAAC,SAAS,EAAC,4CAA4C,EAAA,QAAA,EAAA,aAAA,EAAA,CAAmB,EAAA,GAAA,CAAA,EAAA,CAC1I,CAAA,EAAA,CACC;;;;"}
1
+ {"version":3,"file":"EmailFooter.js","sources":["../../../../src/components/Email/components/EmailFooter.tsx"],"sourcesContent":["import React from 'react';\nimport { Text, Section, Link } from '@react-email/components';\n\nexport const EmailFooter = ({ companyName = 'Beyond Corp' }) => (\n <Section className=\"mt-8 text-center\">\n <Text className=\"text-gray-400 dark:text-gray-500 text-xs\">\n © {new Date().getFullYear()} {companyName}. All rights reserved.\n </Text>\n <Text className=\"text-gray-400 dark:text-gray-500 text-xs mt-2\">\n If you no longer wish to receive these emails, you can <Link href=\"#\" className=\"text-gray-500 dark:text-gray-400 underline\">unsubscribe</Link>.\n </Text>\n </Section>\n);"],"names":["_jsxs","_jsx"],"mappings":";;;AAGO,MAAM,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,aAAa,EAAE,MACzDA,IAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CACnCA,IAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,0CAA0C,EAAA,QAAA,EAAA,CAAA,SAAA,EACrD,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAA,GAAA,EAAG,WAAW,EAAA,wBAAA,CAAA,EAAA,CACpC,EACPA,IAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAAA,yDAAA,EACNC,GAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAC,GAAG,EAAC,SAAS,EAAC,4CAA4C,EAAA,QAAA,EAAA,aAAA,EAAA,CAAmB,EAAA,GAAA,CAAA,EAAA,CAC1I,CAAA,EAAA,CACC;;;;"}
@@ -1,6 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { Img } from '../../../node_modules/@react-email/img/dist/index.js';
3
- import { Section } from '../../../node_modules/@react-email/section/dist/index.js';
2
+ import { Section, Img } from '@react-email/components';
4
3
 
5
4
  const EmailHeader = ({ logoUrl = 'https://via.placeholder.com/150x50', companyName = 'Beyond Corp' }) => (jsx(Section, { className: "mt-8 mb-8", children: jsx(Img, { src: logoUrl, width: "150", height: "50", alt: companyName, className: "mx-auto" }) }));
6
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"EmailHeader.js","sources":["../../../../src/components/Email/components/EmailHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { Img, Section } from '@react-email/components';\n\nexport const EmailHeader = ({ logoUrl = 'https://via.placeholder.com/150x50', companyName = 'Beyond Corp' }) => (\n <Section className=\"mt-8 mb-8\">\n <Img src={logoUrl} width=\"150\" height=\"50\" alt={companyName} className=\"mx-auto\" />\n </Section>\n);"],"names":["_jsx"],"mappings":";;;;MAGa,WAAW,GAAG,CAAC,EAAE,OAAO,GAAG,oCAAoC,EAAE,WAAW,GAAG,aAAa,EAAE,MACzGA,IAAC,OAAO,EAAA,EAAC,SAAS,EAAC,WAAW,EAAA,QAAA,EAC5BA,IAAC,GAAG,EAAA,EAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CAC3E;;;;"}
1
+ {"version":3,"file":"EmailHeader.js","sources":["../../../../src/components/Email/components/EmailHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { Img, Section } from '@react-email/components';\n\nexport const EmailHeader = ({ logoUrl = 'https://via.placeholder.com/150x50', companyName = 'Beyond Corp' }) => (\n <Section className=\"mt-8 mb-8\">\n <Img src={logoUrl} width=\"150\" height=\"50\" alt={companyName} className=\"mx-auto\" />\n </Section>\n);"],"names":["_jsx"],"mappings":";;;MAGa,WAAW,GAAG,CAAC,EAAE,OAAO,GAAG,oCAAoC,EAAE,WAAW,GAAG,aAAa,EAAE,MACzGA,IAAC,OAAO,EAAA,EAAC,SAAS,EAAC,WAAW,EAAA,QAAA,EAC5BA,IAAC,GAAG,EAAA,EAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CAC3E;;;;"}
@@ -1,13 +1,8 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Html, Tailwind, Head, Preview, Body, Container } from '@react-email/components';
2
3
  import { EmailHeader } from './EmailHeader.js';
3
4
  import { EmailFooter } from './EmailFooter.js';
4
5
  import { theme } from './theme.js';
5
- import { Html } from '../../../node_modules/@react-email/html/dist/index.js';
6
- import { Tailwind } from '../../../node_modules/@react-email/tailwind/dist/index.js';
7
- import { Head } from '../../../node_modules/@react-email/head/dist/index.js';
8
- import { Preview } from '../../../node_modules/@react-email/preview/dist/index.js';
9
- import { Body } from '../../../node_modules/@react-email/body/dist/index.js';
10
- import { Container } from '../../../node_modules/@react-email/container/dist/index.js';
11
6
 
12
7
  const EmailLayout = ({ children, previewText, title }) => (jsx(Html, { children: jsxs(Tailwind, { config: { theme: { extend: { colors: theme.colors } } }, children: [jsx(Head, { children: jsx("title", { children: title }) }), previewText && jsx(Preview, { children: previewText }), jsx(Body, { className: "bg-gray-50 dark:bg-gray-900 my-auto mx-auto font-sans px-2", children: jsxs(Container, { className: "max-w-[600px] mx-auto bg-white dark:bg-gray-800 rounded-lg p-8 my-8 shadow-sm border border-gray-100 dark:border-gray-700", children: [jsx(EmailHeader, {}), children, jsx(EmailFooter, {})] }) })] }) }));
13
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"EmailLayout.js","sources":["../../../../src/components/Email/components/EmailLayout.tsx"],"sourcesContent":["import React from 'react';\nimport { Html, Body, Container, Tailwind, Head, Preview } from '@react-email/components';\nimport { EmailHeader } from './EmailHeader';\nimport { EmailFooter } from './EmailFooter';\nimport { theme } from './theme';\n\nexport const EmailLayout = ({ children, previewText, title }: { \n children: React.ReactNode; \n previewText?: string; \n title?: string;\n}) => (\n <Html>\n <Tailwind config={{ theme: { extend: { colors: theme.colors } } }}>\n <Head><title>{title}</title></Head>\n {previewText && <Preview>{previewText}</Preview>}\n <Body className=\"bg-gray-50 dark:bg-gray-900 my-auto mx-auto font-sans px-2\">\n <Container className=\"max-w-[600px] mx-auto bg-white dark:bg-gray-800 rounded-lg p-8 my-8 shadow-sm border border-gray-100 dark:border-gray-700\">\n <EmailHeader />\n {children}\n <EmailFooter />\n </Container>\n </Body>\n </Tailwind>\n </Html>\n);"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;;AAMO,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAIzD,MACCA,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EACHC,IAAA,CAAC,QAAQ,EAAA,EAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,aAC/DD,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAACA,GAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAQ,KAAK,EAAA,CAAS,EAAA,CAAO,EAClC,WAAW,IAAIA,IAAC,OAAO,EAAA,EAAA,QAAA,EAAE,WAAW,EAAA,CAAW,EAChDA,GAAA,CAAC,IAAI,IAAC,SAAS,EAAC,4DAA4D,EAAA,QAAA,EAC1EC,IAAA,CAAC,SAAS,EAAA,EAAC,SAAS,EAAC,2HAA2H,aAC9ID,GAAA,CAAC,WAAW,KAAG,EACd,QAAQ,EACTA,GAAA,CAAC,WAAW,EAAA,EAAA,CAAG,CAAA,EAAA,CACL,GACP,CAAA,EAAA,CACE,EAAA,CACN;;;;"}
1
+ {"version":3,"file":"EmailLayout.js","sources":["../../../../src/components/Email/components/EmailLayout.tsx"],"sourcesContent":["import React from 'react';\nimport { Html, Body, Container, Tailwind, Head, Preview } from '@react-email/components';\nimport { EmailHeader } from './EmailHeader';\nimport { EmailFooter } from './EmailFooter';\nimport { theme } from './theme';\n\nexport const EmailLayout = ({ children, previewText, title }: { \n children: React.ReactNode; \n previewText?: string; \n title?: string;\n}) => (\n <Html>\n <Tailwind config={{ theme: { extend: { colors: theme.colors } } }}>\n <Head><title>{title}</title></Head>\n {previewText && <Preview>{previewText}</Preview>}\n <Body className=\"bg-gray-50 dark:bg-gray-900 my-auto mx-auto font-sans px-2\">\n <Container className=\"max-w-[600px] mx-auto bg-white dark:bg-gray-800 rounded-lg p-8 my-8 shadow-sm border border-gray-100 dark:border-gray-700\">\n <EmailHeader />\n {children}\n <EmailFooter />\n </Container>\n </Body>\n </Tailwind>\n </Html>\n);"],"names":["_jsx","_jsxs"],"mappings":";;;;;;AAMO,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAIzD,MACCA,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EACHC,IAAA,CAAC,QAAQ,EAAA,EAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,aAC/DD,GAAA,CAAC,IAAI,EAAA,EAAA,QAAA,EAACA,GAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAQ,KAAK,EAAA,CAAS,EAAA,CAAO,EAClC,WAAW,IAAIA,IAAC,OAAO,EAAA,EAAA,QAAA,EAAE,WAAW,EAAA,CAAW,EAChDA,GAAA,CAAC,IAAI,IAAC,SAAS,EAAC,4DAA4D,EAAA,QAAA,EAC1EC,IAAA,CAAC,SAAS,EAAA,EAAC,SAAS,EAAC,2HAA2H,aAC9ID,GAAA,CAAC,WAAW,KAAG,EACd,QAAQ,EACTA,GAAA,CAAC,WAAW,EAAA,EAAA,CAAG,CAAA,EAAA,CACL,GACP,CAAA,EAAA,CACE,EAAA,CACN;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { useState, useEffect } from 'react';
3
- import { render } from '../../../node_modules/@react-email/render/dist/node/index.js';
3
+ import { render } from '@react-email/render';
4
4
 
5
5
  const EmailPreviewer = ({ component }) => {
6
6
  const [html, setHtml] = useState('');
@@ -1,9 +1,9 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Text, Section } from '@react-email/components';
2
3
  import { EmailButton } from '../../components/EmailButton.js';
3
4
  import { EmailLayout } from '../../components/EmailLayout.js';
4
5
  import 'react';
5
- import { Text } from '../../../../node_modules/@react-email/text/dist/index.js';
6
- import { Section } from '../../../../node_modules/@react-email/section/dist/index.js';
6
+ import '@react-email/render';
7
7
 
8
8
  const ConfirmEmail = ({ confirmationLink = 'https://example.com/confirm', expiryMinutes = 15 }) => {
9
9
  return (jsxs(EmailLayout, { previewText: "Confirm your email address", title: "Confirm your email", children: [jsx(Text, { className: "text-2xl font-bold text-gray-900 dark:text-white mb-4", children: "Confirm your email address" }), jsxs(Text, { className: "text-gray-700 dark:text-gray-300 text-base leading-relaxed mb-6", children: ["Please confirm that you want to use this as your account email address. This link is valid for ", expiryMinutes, " minutes."] }), jsx(Section, { className: "text-center mb-6", children: jsx(EmailButton, { href: confirmationLink, children: "Verify Email" }) })] }));
@@ -1,9 +1,9 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Text, Section } from '@react-email/components';
2
3
  import { EmailButton } from '../../components/EmailButton.js';
3
4
  import { EmailLayout } from '../../components/EmailLayout.js';
4
5
  import 'react';
5
- import { Text } from '../../../../node_modules/@react-email/text/dist/index.js';
6
- import { Section } from '../../../../node_modules/@react-email/section/dist/index.js';
6
+ import '@react-email/render';
7
7
 
8
8
  const EmailChangeVerification = ({ userName = 'User', newEmail = 'new@example.com', verificationLink = 'https://example.com/settings/verify-email?token=123', expiryMinutes = 30 }) => {
9
9
  return (jsxs(EmailLayout, { previewText: "Verify your new email address", title: "Verify Email Change", children: [jsx(Text, { className: "text-2xl font-bold text-gray-900 dark:text-white mb-4", children: "Verify your new email" }), jsxs(Text, { className: "text-gray-700 dark:text-gray-300 text-base leading-relaxed mb-6", children: ["Hi ", userName, ", you recently requested to change the email address associated with your account to ", jsx("strong", { children: newEmail }), "."] }), jsxs(Text, { className: "text-gray-700 dark:text-gray-300 text-base leading-relaxed mb-6", children: ["Please click the button below to confirm this change. This link will expire in ", expiryMinutes, " minutes."] }), jsx(Section, { className: "text-center mb-6", children: jsx(EmailButton, { href: verificationLink, children: "Verify New Email" }) })] }));