@tempots/beatui 1.6.1 → 1.7.1

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 (33) hide show
  1. package/dist/auth/index.cjs.js +1 -1
  2. package/dist/auth/index.es.js +1 -1
  3. package/dist/auth-divider-CjcrgXmq.cjs +1 -0
  4. package/dist/{auth-divider-qnJuYK-x.js → auth-divider-D9KnNeyF.js} +239 -230
  5. package/dist/beatui.css +14 -0
  6. package/dist/beatui.tailwind.css +14 -0
  7. package/dist/better-auth/index.cjs.js +1 -1
  8. package/dist/better-auth/index.es.js +396 -347
  9. package/dist/{custom-validation-BetUqAEz.js → custom-validation-7por5nJN.js} +1 -1
  10. package/dist/{deep-merge-ZVigk5Qf.js → deep-merge-DT2H9AGq.js} +1 -1
  11. package/dist/{duration-input-GMBmT1BE.js → duration-input-D4V_PHIg.js} +1 -1
  12. package/dist/index.cjs.js +4 -4
  13. package/dist/index.es.js +2325 -2263
  14. package/dist/json-schema/index.es.js +5 -5
  15. package/dist/json-structure/index.es.js +3 -3
  16. package/dist/{notice-B6ojfenv.js → notice-CQGJyZ8o.js} +1 -1
  17. package/dist/types/better-auth/callbacks.d.ts +4 -4
  18. package/dist/types/better-auth/components/authenticated.d.ts +27 -2
  19. package/dist/types/better-auth/components/better-auth-container.d.ts +6 -0
  20. package/dist/types/better-auth/index.d.ts +2 -1
  21. package/dist/types/better-auth/provider.d.ts +1 -1
  22. package/dist/types/better-auth/types.d.ts +22 -0
  23. package/dist/types/components/auth/auth-email-prop.d.ts +6 -12
  24. package/dist/types/components/auth/types.d.ts +7 -6
  25. package/dist/types/components/auth/utils.d.ts +4 -2
  26. package/dist/types/components/query/index.d.ts +2 -0
  27. package/dist/types/components/query/query-data-source.d.ts +73 -0
  28. package/dist/types/components/query/query-data-table.d.ts +62 -0
  29. package/dist/types/index.d.ts +1 -0
  30. package/dist/{use-form-NfobsGNl.js → use-form-8NnZ-KHk.js} +9 -9
  31. package/dist/{widget-customization-BtkexHgm.js → widget-customization-BIBva3f-.js} +2 -2
  32. package/package.json +3 -3
  33. package/dist/auth-divider-DewHpITQ.cjs +0 -1
package/dist/beatui.css CHANGED
@@ -5692,6 +5692,20 @@ a:focus-visible {
5692
5692
  pointer-events: auto;
5693
5693
  }
5694
5694
 
5695
+ /*
5696
+ * On mobile, .bc-menu uses position:fixed for a bottom-sheet layout.
5697
+ * The animation system sets transform on .bc-flyout-container, which per CSS spec
5698
+ * changes the containing block for position:fixed descendants from the viewport
5699
+ * to the transformed ancestor. Make .bc-flyout-container span the viewport on
5700
+ * mobile so it provides a correctly-sized containing block for the fixed menu.
5701
+ */
5702
+ @media (max-width: 640px) {
5703
+ .bc-flyout-container:has(.bc-menu) {
5704
+ position: fixed;
5705
+ inset: 0;
5706
+ }
5707
+ }
5708
+
5695
5709
  /* Dark mode */
5696
5710
  .dark .bc-flyout {
5697
5711
  background-color: var(--color-base-800);
@@ -5358,6 +5358,20 @@ a:focus-visible {
5358
5358
  pointer-events: auto;
5359
5359
  }
5360
5360
 
5361
+ /*
5362
+ * On mobile, .bc-menu uses position:fixed for a bottom-sheet layout.
5363
+ * The animation system sets transform on .bc-flyout-container, which per CSS spec
5364
+ * changes the containing block for position:fixed descendants from the viewport
5365
+ * to the transformed ancestor. Make .bc-flyout-container span the viewport on
5366
+ * mobile so it provides a correctly-sized containing block for the fixed menu.
5367
+ */
5368
+ @media (max-width: 640px) {
5369
+ .bc-flyout-container:has(.bc-menu) {
5370
+ position: fixed;
5371
+ inset: 0;
5372
+ }
5373
+ }
5374
+
5361
5375
  /* Dark mode */
5362
5376
  .dark .bc-flyout {
5363
5377
  background-color: var(--color-base-800);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@tempots/dom"),C=require("../auth-divider-DewHpITQ.cjs"),A=require("../translations-EwEmHe3v.cjs"),w=require("../notice-p2IqXS5-.cjs"),y=require("../stack-dwLevGa2.cjs"),b=require("../input-container-CyOgiiQD.cjs"),v=require("../text-input-DS5zlXb2.cjs");function g(a,t){return a.error?(t.onError?.({message:a.error.message,status:a.error.status}),a.error.message):null}function I(a,t,s){return async n=>{const l=await a.signIn.email({email:n.email,password:n.password,callbackURL:t.callbackURL}),o=g(l,t);return o||(await s(),null)}}function F(a,t,s){return async n=>{const l=await a.signUp.email({name:n.name,email:n.email,password:n.password,callbackURL:t.callbackURL}),o=g(l,t);return o||(await s(),null)}}function U(a,t){return async s=>{const n=await a.requestPasswordReset({email:s.email,redirectTo:t.callbackURL});return g(n,t)}}function $(a,t){return async s=>{const n=await a.signIn.social({provider:s,callbackURL:t.callbackURL,errorCallbackURL:t.errorCallbackURL});g(n,t)}}function L(a,t={}){const s=e.prop(null),n=e.prop(!0),l=e.computedOf(s)(h=>h?.user??null),o=e.computedOf(s)(h=>h!=null);let u;async function d(){try{const h=await a.getSession();h.error||!h.data?s.set(null):s.set({user:h.data.user,session:h.data.session})}catch{s.set(null)}finally{n.set(!1)}}t.onSessionChange&&s.on(t.onSessionChange),d(),t.refreshInterval&&t.refreshInterval>0&&(u=setInterval(d,t.refreshInterval));function p(){u!=null&&(clearInterval(u),u=void 0),s.dispose(),n.dispose(),l.dispose(),o.dispose()}return{session:s,isPending:n,user:l,isAuthenticated:o,refresh:d,dispose:p}}function P(a){return a.map(t=>({provider:t}))}function _(a,t={}){const s=L(a,{refreshInterval:t.refreshInterval,onSessionChange:t.onSessionChange}),n=()=>s.refresh(),l=I(a,t,n),o=F(a,t,n),u=U(a,t),d=$(a,t),p=t.socialProviders?P(t.socialProviders):[],h={onSignIn:l,passwordRules:t.passwordRules,showRememberMe:t.showRememberMe,labels:t.labels?{emailLabel:t.labels.emailLabel,passwordLabel:t.labels.passwordLabel,rememberMeLabel:t.labels.rememberMeLabel,signInButton:t.labels.signInButton,forgotPasswordLink:t.labels.forgotPasswordLink,noAccountLink:t.labels.noAccountLink}:void 0},i={onSignUp:o,passwordRules:t.passwordRules,showPasswordStrength:t.showPasswordStrength,showNameField:t.showNameField,showConfirmPassword:t.showConfirmPassword,showAcceptTermsAndConditions:t.showAcceptTermsAndConditions,termsAndConditions:t.termsAndConditions,labels:t.labels?{nameLabel:t.labels.nameLabel,emailLabel:t.labels.emailLabel,passwordLabel:t.labels.passwordLabel,confirmPasswordLabel:t.labels.confirmPasswordLabel,acceptTermsLabel:t.labels.acceptTermsLabel,signUpButton:t.labels.signUpButton,hasAccountLink:t.labels.hasAccountLink}:void 0},m={onResetPassword:u,labels:t.labels?{resetPasswordButton:t.labels.resetPasswordButton,resetPasswordDescription:t.labels.resetPasswordDescription,emailLabel:t.labels.emailLabel,backToSignInLink:t.labels.backToSignInLink}:void 0},c={onSignIn:l,onSignUp:o,onResetPassword:u,onSocialLogin:d,socialProviders:p.length>0?p:void 0,showSocialDivider:p.length>0,passwordRules:t.passwordRules,showRememberMe:t.showRememberMe,showPasswordStrength:t.showPasswordStrength,showNameField:t.showNameField,showConfirmPassword:t.showConfirmPassword,showAcceptTermsAndConditions:t.showAcceptTermsAndConditions,termsAndConditions:t.termsAndConditions,labels:t.labels};async function r(){await a.signOut(),await n()}function f(){s.dispose()}return{session:s.session,isPending:s.isPending,user:s.user,isAuthenticated:s.isAuthenticated,containerOptions:c,signInOptions:h,signUpOptions:i,resetOptions:m,socialProviders:p,signOut:r,refreshSession:n,dispose:f}}const R={mark:e.makeProviderMark("BetterAuth"),create:a=>{if(!a)throw new Error("BetterAuth provider requires a client option");const t=_(a.client,a);return{value:t,dispose:()=>t.dispose()}}};function E(a,t,...s){return C.AuthContainer({...a.containerOptions,...t},...s)}function O(a,t){return C.AuthModal(s=>t(n=>s({...a.containerOptions,...n})))}function M(a,t){return e.When(a.isAuthenticated,t)}function D(a,t){return e.Unless(a.isAuthenticated,t)}const T={twoFactorSetupDescription:"Enter your password to enable two-factor authentication.",twoFactorEnableButton:"Enable 2FA",twoFactorVerifyButton:"Verify",twoFactorScanDescription:"Scan the code below with your authenticator app, then enter the verification code.",twoFactorBackupCodesDescription:"Save these backup codes in a safe place. You can use them to sign in if you lose access to your authenticator.",twoFactorCodePlaceholder:"Enter 6-digit code",twoFactorBackupCodePlaceholder:"Enter backup code",twoFactorEnabled:"Two-factor authentication has been enabled.",twoFactorTotpDescription:"Enter the code from your authenticator app.",twoFactorOtpDescription:"Enter the one-time code sent to you.",twoFactorBackupDescription:"Enter one of your backup codes.",twoFactorSendOtpButton:"Send Code",twoFactorMethodLabel:a=>{switch(a){case"totp":return"Authenticator";case"otp":return"Email/SMS";case"backup":return"Backup Code";default:return a}},passwordPlaceholder:"Enter your password",magicLinkDescription:"Enter your email to receive a sign-in link.",magicLinkSendButton:"Send Magic Link",magicLinkSent:"A sign-in link has been sent to your email.",passkeySignInButton:"Sign in with Passkey",passkeyAddButton:"Add Passkey",passkeyDeleteButton:"Delete",passkeyRenameButton:"Rename",passkeySaveButton:"Save",passkeyCancelButton:"Cancel",passkeyNamePlaceholder:"Passkey name (optional)",passkeyUnnamed:"Unnamed passkey"},B=T,S="en",N=Object.assign({}),k=A.makeI18nProvider({defaultLocale:S,defaultMessages:B,localeLoader:async a=>{if(a===S)return B;const t=N[`./locales/${a}.ts`];return t?await t():B},providerName:"BetterAuthI18n"});function q({twoFactor:a,issuer:t,onComplete:s}){const n=e.prop(""),l=e.prop(null),o=e.prop([]),u=e.prop(""),d=e.prop(null),p=e.prop(!1),h=e.prop("password");async function i(c){c.preventDefault(),p.set(!0),d.set(null);const r=await a.enable({password:n.value,issuer:t});if(p.set(!1),r.error){d.set(r.error.message);return}r.data&&(l.set(r.data.totpURI),o.set(r.data.backupCodes),h.set("verify"))}async function m(c){c.preventDefault(),p.set(!0),d.set(null);const r=await a.verifyTotp({code:u.value});if(p.set(!1),r.error){d.set(r.error.message);return}h.set("complete"),s?.()}return e.Use(k,c=>e.html.div(e.attr.class("bc-two-factor"),e.Ensure(d,r=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(r))),e.OneOfValue(h,{password:()=>e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(i),y.Stack(e.html.p(e.attr.class("bc-auth-form__description"),c.$.twoFactorSetupDescription),w.PasswordInput({value:n,onChange:r=>n.set(r),placeholder:c.$.passwordPlaceholder}),b.Button({type:"submit",variant:"filled",color:"primary",loading:p},e.attr.class("bc-auth-form__submit"),c.$.twoFactorEnableButton))),verify:()=>e.Fragment(e.Ensure(l,r=>e.html.div(e.attr.class("bc-two-factor__totp-uri"),e.html.p(c.$.twoFactorScanDescription),e.html.code(e.attr.class("bc-two-factor__code-display"),r))),e.NotEmpty(o,()=>e.html.div(e.attr.class("bc-two-factor__backup-codes"),e.html.p(c.$.twoFactorBackupCodesDescription),e.html.ul(e.ForEach(o,r=>e.html.li(r))))),e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(m),y.Stack(v.TextInput({value:u,onChange:r=>u.set(r),placeholder:c.$.twoFactorCodePlaceholder}),b.Button({type:"submit",variant:"filled",color:"primary",loading:p},e.attr.class("bc-auth-form__submit"),c.$.twoFactorVerifyButton)))),complete:()=>e.html.div(e.attr.class("bc-two-factor__complete"),w.Notice({variant:"success",tone:"prominent"},e.html.div(c.$.twoFactorEnabled)))})))}function x({twoFactor:a,methods:t=["totp","backup"],trustDevice:s,onVerified:n}){const l=e.prop(""),o=e.prop(null),u=e.prop(!1),d=e.prop(t[0]??"totp");async function p(i){i.preventDefault(),u.set(!0),o.set(null);const m=d.value;let c;if(m==="totp")c=await a.verifyTotp({code:l.value,trustDevice:s});else if(m==="otp"&&a.verifyOtp)c=await a.verifyOtp({code:l.value,trustDevice:s});else if(m==="backup")c=await a.verifyBackupCode({code:l.value});else{o.set("Unsupported verification method"),u.set(!1);return}if(u.set(!1),c.error){o.set(c.error.message);return}n?.()}async function h(){if(!a.sendOtp)return;u.set(!0),o.set(null);const i=await a.sendOtp({trustDevice:s});u.set(!1),i.error&&o.set(i.error.message)}return e.Use(k,i=>{const m=e.computedOf(d,i)((r,f)=>r==="totp"?f.twoFactorTotpDescription:r==="otp"?f.twoFactorOtpDescription:f.twoFactorBackupDescription),c=e.computedOf(d,i)((r,f)=>r==="backup"?f.twoFactorBackupCodePlaceholder:f.twoFactorCodePlaceholder);return e.html.div(e.attr.class("bc-two-factor"),e.Ensure(o,r=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(r))),e.When(t.length>1,()=>e.html.div(e.attr.class("bc-two-factor__methods"),...t.map(r=>e.html.button(e.attr.type("button"),e.attr.class("bc-two-factor__method-button"),e.attr.class(d.map(f=>f===r?"bc-two-factor__method-button--active":"")),e.on.click(()=>{d.set(r),l.set(""),o.set(null)}),i.$.twoFactorMethodLabel.map(f=>f(r)))))),e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(p),y.Stack(e.html.p(e.attr.class("bc-auth-form__description"),m),e.When(d.map(r=>r==="otp"&&a.sendOtp!=null),()=>b.Button({type:"button",variant:"outline",color:"primary",onClick:h,loading:u},i.$.twoFactorSendOtpButton)),v.TextInput({value:l,onChange:r=>l.set(r),placeholder:c}),b.Button({type:"submit",variant:"filled",color:"primary",loading:u},e.attr.class("bc-auth-form__submit"),i.$.twoFactorVerifyButton))))})}function V({client:a,callbackURL:t}){const s=e.prop(""),n=e.prop(null),l=e.prop(!1),o=e.prop(!1);async function u(d){if(d.preventDefault(),!a.signIn.magicLink){n.set("Magic link sign-in is not configured");return}l.set(!0),n.set(null);const p=await a.signIn.magicLink({email:s.value,callbackURL:t});if(l.set(!1),p.error){n.set(p.error.message);return}o.set(!0)}return e.Use(k,d=>e.html.div(e.attr.class("bc-auth-form"),e.Ensure(n,p=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(p))),e.Unless(o,()=>e.html.form(e.attr.class("bc-auth-form__form"),e.on.submit(u),y.Stack(e.attr.class("bc-auth-form__fields"),e.html.p(e.attr.class("bc-auth-form__description"),d.$.magicLinkDescription),w.EmailInput({value:s,onChange:p=>s.set(p)}),b.Button({type:"submit",variant:"filled",color:"primary",loading:l},e.attr.class("bc-auth-form__submit"),d.$.magicLinkSendButton)))),e.When(o,()=>w.Notice({variant:"success",tone:"prominent"},e.html.div(d.$.magicLinkSent)))))}function W({client:a,autoFill:t,onSuccess:s,onError:n}){const l=e.prop(!1);async function o(){if(!a.signIn.passkey)return;l.set(!0);const u=await a.signIn.passkey({autoFill:t});if(l.set(!1),u.error){n?.({message:u.error.message,status:u.error.status});return}s?.()}return e.Use(k,u=>b.Button({type:"button",variant:"outline",color:"primary",onClick:o,loading:l},e.attr.class("bc-passkey-signin"),u.$.passkeySignInButton))}function z({passkey:a}){const t=e.prop([]),s=e.prop(null),n=e.prop(!1),l=e.prop("");async function o(i,m){n.set(!0),s.set(null);const c=await i();if(n.set(!1),c.error){s.set(c.error.message);return}await m?.(c.data)}async function u(){await o(()=>a.listUserPasskeys(),i=>t.set(i??[]))}async function d(){const i=l.value||void 0;await o(()=>a.addPasskey({name:i}),async()=>{l.set(""),await u()})}async function p(i){await o(()=>a.deletePasskey({id:i}),()=>u())}async function h(i,m){await o(()=>a.updatePasskey({id:i,name:m}),()=>u())}return u(),e.Use(k,i=>e.html.div(e.attr.class("bc-passkey-management"),e.Ensure(s,m=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(m))),e.html.div(e.attr.class("bc-passkey-list"),e.ForEach(t,m=>{const c=e.prop(!1),r=e.prop(m.$.name?.value??"");return e.html.div(e.attr.class("bc-passkey-item"),e.Unless(c,()=>e.html.div(e.attr.class("bc-passkey-item__info"),e.html.span(e.attr.class("bc-passkey-item__name"),m.$.name?.map(f=>f??i.$.passkeyUnnamed.value)??i.$.passkeyUnnamed),e.html.span(e.attr.class("bc-passkey-item__date"),m.$.createdAt))),e.When(c,()=>e.html.div(e.attr.class("bc-passkey-item__edit"),v.TextInput({value:r,onChange:f=>r.set(f)}))),e.html.div(e.attr.class("bc-passkey-item__actions"),e.Unless(c,()=>e.html.div(b.Button({type:"button",variant:"text",size:"sm",onClick:()=>{r.set(m.$.name?.value??""),c.set(!0)}},i.$.passkeyRenameButton),b.Button({type:"button",variant:"text",size:"sm",color:"danger",onClick:()=>p(m.$.id.value)},i.$.passkeyDeleteButton))),e.When(c,()=>e.html.div(b.Button({type:"button",variant:"text",size:"sm",onClick:async()=>{await h(m.$.id.value,r.value),c.set(!1)}},i.$.passkeySaveButton),b.Button({type:"button",variant:"text",size:"sm",onClick:()=>c.set(!1)},i.$.passkeyCancelButton)))))})),e.html.div(e.attr.class("bc-passkey-add"),y.Stack(v.TextInput({value:l,onChange:m=>l.set(m),placeholder:i.$.passkeyNamePlaceholder}),b.Button({type:"button",variant:"filled",color:"primary",onClick:d,loading:n},i.$.passkeyAddButton)))))}exports.Authenticated=M;exports.BetterAuth=R;exports.BetterAuthContainer=E;exports.BetterAuthI18n=k;exports.BetterAuthModal=O;exports.MagicLinkForm=V;exports.PasskeyManagement=z;exports.PasskeySignIn=W;exports.TwoFactorSetup=q;exports.TwoFactorVerify=x;exports.Unauthenticated=D;exports.createBetterAuthBridge=_;exports.createSessionManager=L;exports.mapSocialProviders=P;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@tempots/dom"),P=require("../auth-divider-CjcrgXmq.cjs"),A=require("../translations-EwEmHe3v.cjs"),w=require("../notice-p2IqXS5-.cjs"),y=require("../stack-dwLevGa2.cjs"),b=require("../input-container-CyOgiiQD.cjs"),g=require("../text-input-DS5zlXb2.cjs");function v(a,t){if(a.error){t.onError?.({message:a.error.message,status:a.error.status});const s=a.error;if(s.fieldErrors&&typeof s.fieldErrors=="object"){const r=[];for(const[i,l]of Object.entries(s.fieldErrors))typeof l=="string"&&r.push({field:i,message:l});if(r.length>0)return r}return a.error.message}return null}function I(a,t,s,r){return async i=>{const l=await a.signIn.email({email:i.email,password:i.password,callbackURL:t.callbackURL}),o=v(l,t);if(o)return o;if(await s(),r){const d=await a.getSession();d.data?.user&&r(d.data.user)}return null}}function F(a,t,s,r){return async i=>{const l=await a.signUp.email({name:i.name,email:i.email,password:i.password,callbackURL:t.callbackURL}),o=v(l,t);if(o)return o;if(await s(),r){const d=await a.getSession();d.data?.user&&r(d.data.user)}return null}}function U(a,t){return async s=>{const r=await a.requestPasswordReset({email:s.email,redirectTo:t.callbackURL});return v(r,t)}}function E(a,t){return async s=>{const r=await a.signIn.social({provider:s,callbackURL:t.callbackURL,errorCallbackURL:t.errorCallbackURL});v(r,t)}}function C(a,t={}){const s=e.prop(null),r=e.prop(!0),i=e.computedOf(s)(f=>f?.user??null),l=e.computedOf(s)(f=>f!=null);let o;async function d(){try{const f=await a.getSession();f.error||!f.data?s.set(null):s.set({user:f.data.user,session:f.data.session})}catch{s.set(null)}finally{r.set(!1)}}t.onSessionChange&&s.on(t.onSessionChange),d(),t.refreshInterval&&t.refreshInterval>0&&(o=setInterval(d,t.refreshInterval));function p(){o!=null&&(clearInterval(o),o=void 0),s.dispose(),r.dispose(),i.dispose(),l.dispose()}return{session:s,isPending:r,user:i,isAuthenticated:l,refresh:d,dispose:p}}function L(a){return a.map(t=>({provider:t}))}function _(a,t={}){const s=C(a,{refreshInterval:t.refreshInterval,onSessionChange:t.onSessionChange}),r=()=>s.refresh(),i=I(a,t,r,t.onAuthSuccess),l=F(a,t,r,t.onAuthSuccess),o=U(a,t),d=E(a,t),p=t.socialProviders?L(t.socialProviders):[],f={onSignIn:i,passwordRules:t.passwordRules,showRememberMe:t.showRememberMe,labels:t.labels?{emailLabel:t.labels.emailLabel,passwordLabel:t.labels.passwordLabel,rememberMeLabel:t.labels.rememberMeLabel,signInButton:t.labels.signInButton,forgotPasswordLink:t.labels.forgotPasswordLink,noAccountLink:t.labels.noAccountLink}:void 0},u={onSignUp:l,passwordRules:t.passwordRules,showPasswordStrength:t.showPasswordStrength,showNameField:t.showNameField,showConfirmPassword:t.showConfirmPassword,showAcceptTermsAndConditions:t.showAcceptTermsAndConditions,termsAndConditions:t.termsAndConditions,labels:t.labels?{nameLabel:t.labels.nameLabel,emailLabel:t.labels.emailLabel,passwordLabel:t.labels.passwordLabel,confirmPasswordLabel:t.labels.confirmPasswordLabel,acceptTermsLabel:t.labels.acceptTermsLabel,signUpButton:t.labels.signUpButton,hasAccountLink:t.labels.hasAccountLink}:void 0},m={onResetPassword:o,labels:t.labels?{resetPasswordButton:t.labels.resetPasswordButton,resetPasswordDescription:t.labels.resetPasswordDescription,emailLabel:t.labels.emailLabel,backToSignInLink:t.labels.backToSignInLink}:void 0},c={onSignIn:i,onSignUp:l,onResetPassword:o,onSocialLogin:d,socialProviders:p.length>0?p:void 0,showSocialDivider:p.length>0,passwordRules:t.passwordRules,showRememberMe:t.showRememberMe,showPasswordStrength:t.showPasswordStrength,showNameField:t.showNameField,showConfirmPassword:t.showConfirmPassword,showAcceptTermsAndConditions:t.showAcceptTermsAndConditions,termsAndConditions:t.termsAndConditions,labels:t.labels};async function n(){await a.signOut(),await r()}function h(){s.dispose()}return{session:s.session,isPending:s.isPending,user:s.user,isAuthenticated:s.isAuthenticated,containerOptions:c,signInOptions:f,signUpOptions:u,resetOptions:m,socialProviders:p,signOut:n,refreshSession:r,dispose:h}}const R={mark:e.makeProviderMark("BetterAuth"),create:a=>{if(!a)throw new Error("BetterAuth provider requires a client option");const t=_(a.client,a);return{value:t,dispose:()=>t.dispose()}}};function $(a,t,...s){return e.Task(()=>Promise.resolve().then(()=>require("../translations-BqWc0ZHz.cjs")).then(r=>r.translations),({AuthI18n:r})=>e.Provide(r,{},()=>P.AuthContainer({...a.containerOptions,...t},...s)))}function O(a,t){return P.AuthModal(s=>t(r=>s({...a.containerOptions,...r})))}function M(a,t){return e.When(a.isPending,t.loading??(()=>e.Empty),()=>e.When(a.isAuthenticated,t.children))}function D(a,t){return e.When(a.isPending,t.loading??t.children,()=>e.Unless(a.isAuthenticated,t.children))}const T={twoFactorSetupDescription:"Enter your password to enable two-factor authentication.",twoFactorEnableButton:"Enable 2FA",twoFactorVerifyButton:"Verify",twoFactorScanDescription:"Scan the code below with your authenticator app, then enter the verification code.",twoFactorBackupCodesDescription:"Save these backup codes in a safe place. You can use them to sign in if you lose access to your authenticator.",twoFactorCodePlaceholder:"Enter 6-digit code",twoFactorBackupCodePlaceholder:"Enter backup code",twoFactorEnabled:"Two-factor authentication has been enabled.",twoFactorTotpDescription:"Enter the code from your authenticator app.",twoFactorOtpDescription:"Enter the one-time code sent to you.",twoFactorBackupDescription:"Enter one of your backup codes.",twoFactorSendOtpButton:"Send Code",twoFactorMethodLabel:a=>{switch(a){case"totp":return"Authenticator";case"otp":return"Email/SMS";case"backup":return"Backup Code";default:return a}},passwordPlaceholder:"Enter your password",magicLinkDescription:"Enter your email to receive a sign-in link.",magicLinkSendButton:"Send Magic Link",magicLinkSent:"A sign-in link has been sent to your email.",passkeySignInButton:"Sign in with Passkey",passkeyAddButton:"Add Passkey",passkeyDeleteButton:"Delete",passkeyRenameButton:"Rename",passkeySaveButton:"Save",passkeyCancelButton:"Cancel",passkeyNamePlaceholder:"Passkey name (optional)",passkeyUnnamed:"Unnamed passkey"},B=T,S="en",N=Object.assign({}),k=A.makeI18nProvider({defaultLocale:S,defaultMessages:B,localeLoader:async a=>{if(a===S)return B;const t=N[`./locales/${a}.ts`];return t?await t():B},providerName:"BetterAuthI18n"});function q({twoFactor:a,issuer:t,onComplete:s}){const r=e.prop(""),i=e.prop(null),l=e.prop([]),o=e.prop(""),d=e.prop(null),p=e.prop(!1),f=e.prop("password");async function u(c){c.preventDefault(),p.set(!0),d.set(null);const n=await a.enable({password:r.value,issuer:t});if(p.set(!1),n.error){d.set(n.error.message);return}n.data&&(i.set(n.data.totpURI),l.set(n.data.backupCodes),f.set("verify"))}async function m(c){c.preventDefault(),p.set(!0),d.set(null);const n=await a.verifyTotp({code:o.value});if(p.set(!1),n.error){d.set(n.error.message);return}f.set("complete"),s?.()}return e.Use(k,c=>e.html.div(e.attr.class("bc-two-factor"),e.Ensure(d,n=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(n))),e.OneOfValue(f,{password:()=>e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(u),y.Stack(e.html.p(e.attr.class("bc-auth-form__description"),c.$.twoFactorSetupDescription),w.PasswordInput({value:r,onChange:n=>r.set(n),placeholder:c.$.passwordPlaceholder}),b.Button({type:"submit",variant:"filled",color:"primary",loading:p},e.attr.class("bc-auth-form__submit"),c.$.twoFactorEnableButton))),verify:()=>e.Fragment(e.Ensure(i,n=>e.html.div(e.attr.class("bc-two-factor__totp-uri"),e.html.p(c.$.twoFactorScanDescription),e.html.code(e.attr.class("bc-two-factor__code-display"),n))),e.NotEmpty(l,()=>e.html.div(e.attr.class("bc-two-factor__backup-codes"),e.html.p(c.$.twoFactorBackupCodesDescription),e.html.ul(e.ForEach(l,n=>e.html.li(n))))),e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(m),y.Stack(g.TextInput({value:o,onChange:n=>o.set(n),placeholder:c.$.twoFactorCodePlaceholder}),b.Button({type:"submit",variant:"filled",color:"primary",loading:p},e.attr.class("bc-auth-form__submit"),c.$.twoFactorVerifyButton)))),complete:()=>e.html.div(e.attr.class("bc-two-factor__complete"),w.Notice({variant:"success",tone:"prominent"},e.html.div(c.$.twoFactorEnabled)))})))}function x({twoFactor:a,methods:t=["totp","backup"],trustDevice:s,onVerified:r}){const i=e.prop(""),l=e.prop(null),o=e.prop(!1),d=e.prop(t[0]??"totp");async function p(u){u.preventDefault(),o.set(!0),l.set(null);const m=d.value;let c;if(m==="totp")c=await a.verifyTotp({code:i.value,trustDevice:s});else if(m==="otp"&&a.verifyOtp)c=await a.verifyOtp({code:i.value,trustDevice:s});else if(m==="backup")c=await a.verifyBackupCode({code:i.value});else{l.set("Unsupported verification method"),o.set(!1);return}if(o.set(!1),c.error){l.set(c.error.message);return}r?.()}async function f(){if(!a.sendOtp)return;o.set(!0),l.set(null);const u=await a.sendOtp({trustDevice:s});o.set(!1),u.error&&l.set(u.error.message)}return e.Use(k,u=>{const m=e.computedOf(d,u)((n,h)=>n==="totp"?h.twoFactorTotpDescription:n==="otp"?h.twoFactorOtpDescription:h.twoFactorBackupDescription),c=e.computedOf(d,u)((n,h)=>n==="backup"?h.twoFactorBackupCodePlaceholder:h.twoFactorCodePlaceholder);return e.html.div(e.attr.class("bc-two-factor"),e.Ensure(l,n=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(n))),e.When(t.length>1,()=>e.html.div(e.attr.class("bc-two-factor__methods"),...t.map(n=>e.html.button(e.attr.type("button"),e.attr.class("bc-two-factor__method-button"),e.attr.class(d.map(h=>h===n?"bc-two-factor__method-button--active":"")),e.on.click(()=>{d.set(n),i.set(""),l.set(null)}),u.$.twoFactorMethodLabel.map(h=>h(n)))))),e.html.form(e.attr.class("bc-two-factor__form"),e.on.submit(p),y.Stack(e.html.p(e.attr.class("bc-auth-form__description"),m),e.When(d.map(n=>n==="otp"&&a.sendOtp!=null),()=>b.Button({type:"button",variant:"outline",color:"primary",onClick:f,loading:o},u.$.twoFactorSendOtpButton)),g.TextInput({value:i,onChange:n=>i.set(n),placeholder:c}),b.Button({type:"submit",variant:"filled",color:"primary",loading:o},e.attr.class("bc-auth-form__submit"),u.$.twoFactorVerifyButton))))})}function V({client:a,callbackURL:t}){const s=e.prop(""),r=e.prop(null),i=e.prop(!1),l=e.prop(!1);async function o(d){if(d.preventDefault(),!a.signIn.magicLink){r.set("Magic link sign-in is not configured");return}i.set(!0),r.set(null);const p=await a.signIn.magicLink({email:s.value,callbackURL:t});if(i.set(!1),p.error){r.set(p.error.message);return}l.set(!0)}return e.Use(k,d=>e.html.div(e.attr.class("bc-auth-form"),e.Ensure(r,p=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(p))),e.Unless(l,()=>e.html.form(e.attr.class("bc-auth-form__form"),e.on.submit(o),y.Stack(e.attr.class("bc-auth-form__fields"),e.html.p(e.attr.class("bc-auth-form__description"),d.$.magicLinkDescription),w.EmailInput({value:s,onChange:p=>s.set(p)}),b.Button({type:"submit",variant:"filled",color:"primary",loading:i},e.attr.class("bc-auth-form__submit"),d.$.magicLinkSendButton)))),e.When(l,()=>w.Notice({variant:"success",tone:"prominent"},e.html.div(d.$.magicLinkSent)))))}function W({client:a,autoFill:t,onSuccess:s,onError:r}){const i=e.prop(!1);async function l(){if(!a.signIn.passkey)return;i.set(!0);const o=await a.signIn.passkey({autoFill:t});if(i.set(!1),o.error){r?.({message:o.error.message,status:o.error.status});return}s?.()}return e.Use(k,o=>b.Button({type:"button",variant:"outline",color:"primary",onClick:l,loading:i},e.attr.class("bc-passkey-signin"),o.$.passkeySignInButton))}function j({passkey:a}){const t=e.prop([]),s=e.prop(null),r=e.prop(!1),i=e.prop("");async function l(u,m){r.set(!0),s.set(null);const c=await u();if(r.set(!1),c.error){s.set(c.error.message);return}await m?.(c.data)}async function o(){await l(()=>a.listUserPasskeys(),u=>t.set(u??[]))}async function d(){const u=i.value||void 0;await l(()=>a.addPasskey({name:u}),async()=>{i.set(""),await o()})}async function p(u){await l(()=>a.deletePasskey({id:u}),()=>o())}async function f(u,m){await l(()=>a.updatePasskey({id:u,name:m}),()=>o())}return o(),e.Use(k,u=>e.html.div(e.attr.class("bc-passkey-management"),e.Ensure(s,m=>w.Notice({variant:"danger",tone:"prominent",role:"alert"},e.html.div(m))),e.html.div(e.attr.class("bc-passkey-list"),e.ForEach(t,m=>{const c=e.prop(!1),n=e.prop(m.$.name?.value??"");return e.html.div(e.attr.class("bc-passkey-item"),e.Unless(c,()=>e.html.div(e.attr.class("bc-passkey-item__info"),e.html.span(e.attr.class("bc-passkey-item__name"),m.$.name?.map(h=>h??u.$.passkeyUnnamed.value)??u.$.passkeyUnnamed),e.html.span(e.attr.class("bc-passkey-item__date"),m.$.createdAt))),e.When(c,()=>e.html.div(e.attr.class("bc-passkey-item__edit"),g.TextInput({value:n,onChange:h=>n.set(h)}))),e.html.div(e.attr.class("bc-passkey-item__actions"),e.Unless(c,()=>e.html.div(b.Button({type:"button",variant:"text",size:"sm",onClick:()=>{n.set(m.$.name?.value??""),c.set(!0)}},u.$.passkeyRenameButton),b.Button({type:"button",variant:"text",size:"sm",color:"danger",onClick:()=>p(m.$.id.value)},u.$.passkeyDeleteButton))),e.When(c,()=>e.html.div(b.Button({type:"button",variant:"text",size:"sm",onClick:async()=>{await f(m.$.id.value,n.value),c.set(!1)}},u.$.passkeySaveButton),b.Button({type:"button",variant:"text",size:"sm",onClick:()=>c.set(!1)},u.$.passkeyCancelButton)))))})),e.html.div(e.attr.class("bc-passkey-add"),y.Stack(g.TextInput({value:i,onChange:m=>i.set(m),placeholder:u.$.passkeyNamePlaceholder}),b.Button({type:"button",variant:"filled",color:"primary",onClick:d,loading:r},u.$.passkeyAddButton)))))}exports.Authenticated=M;exports.BetterAuth=R;exports.BetterAuthContainer=$;exports.BetterAuthI18n=k;exports.BetterAuthModal=O;exports.MagicLinkForm=V;exports.PasskeyManagement=j;exports.PasskeySignIn=W;exports.TwoFactorSetup=q;exports.TwoFactorVerify=x;exports.Unauthenticated=D;exports.createBetterAuthBridge=_;exports.createSessionManager=C;exports.mapSocialProviders=L;