better-auth-ui-svelte 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +611 -0
- package/dist/auth-client.js +26 -0
- package/dist/components/account/account-view.svelte +196 -0
- package/dist/components/account/account-view.svelte.d.ts +29 -0
- package/dist/components/account/index.d.ts +2 -0
- package/dist/components/account/index.js +1 -0
- package/dist/components/auth/auth-callback.svelte +63 -0
- package/dist/components/auth/auth-callback.svelte.d.ts +6 -0
- package/dist/components/auth/auth-form.svelte +177 -0
- package/dist/components/auth/auth-form.svelte.d.ts +35 -0
- package/dist/components/auth/auth-view.svelte +293 -0
- package/dist/components/auth/auth-view.svelte.d.ts +37 -0
- package/dist/components/auth/email-otp-button.svelte +46 -0
- package/dist/components/auth/email-otp-button.svelte.d.ts +12 -0
- package/dist/components/auth/forms/email-otp-form.svelte +243 -0
- package/dist/components/auth/forms/email-otp-form.svelte.d.ts +15 -0
- package/dist/components/auth/forms/forgot-password-form.svelte +160 -0
- package/dist/components/auth/forms/forgot-password-form.svelte.d.ts +12 -0
- package/dist/components/auth/forms/magic-link-form.svelte +178 -0
- package/dist/components/auth/forms/magic-link-form.svelte.d.ts +14 -0
- package/dist/components/auth/forms/recover-account-form.svelte +128 -0
- package/dist/components/auth/forms/recover-account-form.svelte.d.ts +13 -0
- package/dist/components/auth/forms/reset-password-form.svelte +210 -0
- package/dist/components/auth/forms/reset-password-form.svelte.d.ts +18 -0
- package/dist/components/auth/forms/sign-in-form.svelte +286 -0
- package/dist/components/auth/forms/sign-in-form.svelte.d.ts +15 -0
- package/dist/components/auth/forms/sign-up-form.svelte +732 -0
- package/dist/components/auth/forms/sign-up-form.svelte.d.ts +16 -0
- package/dist/components/auth/forms/two-factor-form.svelte +337 -0
- package/dist/components/auth/forms/two-factor-form.svelte.d.ts +14 -0
- package/dist/components/auth/magic-link-button.svelte +50 -0
- package/dist/components/auth/magic-link-button.svelte.d.ts +12 -0
- package/dist/components/auth/one-tap.svelte +48 -0
- package/dist/components/auth/one-tap.svelte.d.ts +8 -0
- package/dist/components/auth/otp-input-group.svelte +61 -0
- package/dist/components/auth/otp-input-group.svelte.d.ts +13 -0
- package/dist/components/auth/passkey-button.svelte +73 -0
- package/dist/components/auth/passkey-button.svelte.d.ts +12 -0
- package/dist/components/auth/provider-button.svelte +123 -0
- package/dist/components/auth/provider-button.svelte.d.ts +18 -0
- package/dist/components/auth/sign-out.svelte +24 -0
- package/dist/components/auth/sign-out.svelte.d.ts +3 -0
- package/dist/components/auth-loading.svelte +19 -0
- package/dist/components/auth-loading.svelte.d.ts +7 -0
- package/dist/components/auth-ui-provider.svelte +733 -0
- package/dist/components/auth-ui-provider.svelte.d.ts +189 -0
- package/dist/components/captcha/captcha.svelte +78 -0
- package/dist/components/captcha/captcha.svelte.d.ts +9 -0
- package/dist/components/captcha/recaptcha-badge.svelte +59 -0
- package/dist/components/captcha/recaptcha-badge.svelte.d.ts +8 -0
- package/dist/components/captcha/recaptcha-v2.svelte +61 -0
- package/dist/components/captcha/recaptcha-v2.svelte.d.ts +6 -0
- package/dist/components/captcha/recaptcha-v3.svelte +95 -0
- package/dist/components/captcha/recaptcha-v3.svelte.d.ts +7 -0
- package/dist/components/default-link.svelte +15 -0
- package/dist/components/default-link.svelte.d.ts +9 -0
- package/dist/components/organization/accept-invitation-card.svelte +211 -0
- package/dist/components/organization/accept-invitation-card.svelte.d.ts +12 -0
- package/dist/components/organization/create-organization-dialog.svelte +350 -0
- package/dist/components/organization/create-organization-dialog.svelte.d.ts +23 -0
- package/dist/components/organization/delete-organization-card.svelte +45 -0
- package/dist/components/organization/delete-organization-card.svelte.d.ts +13 -0
- package/dist/components/organization/delete-organization-dialog.svelte +185 -0
- package/dist/components/organization/delete-organization-dialog.svelte.d.ts +13 -0
- package/dist/components/organization/delete-organization-form.svelte +59 -0
- package/dist/components/organization/delete-organization-form.svelte.d.ts +12 -0
- package/dist/components/organization/index.d.ts +27 -0
- package/dist/components/organization/index.js +27 -0
- package/dist/components/organization/invitation-cell.svelte +129 -0
- package/dist/components/organization/invitation-cell.svelte.d.ts +14 -0
- package/dist/components/organization/invite-member-dialog.svelte +243 -0
- package/dist/components/organization/invite-member-dialog.svelte.d.ts +14 -0
- package/dist/components/organization/leave-organization-dialog.svelte +125 -0
- package/dist/components/organization/leave-organization-dialog.svelte.d.ts +14 -0
- package/dist/components/organization/member-cell.svelte +154 -0
- package/dist/components/organization/member-cell.svelte.d.ts +16 -0
- package/dist/components/organization/organization-cell-view.svelte +95 -0
- package/dist/components/organization/organization-cell-view.svelte.d.ts +22 -0
- package/dist/components/organization/organization-cell.svelte +119 -0
- package/dist/components/organization/organization-cell.svelte.d.ts +12 -0
- package/dist/components/organization/organization-invitations-card.svelte +57 -0
- package/dist/components/organization/organization-invitations-card.svelte.d.ts +13 -0
- package/dist/components/organization/organization-logo-card.svelte +75 -0
- package/dist/components/organization/organization-logo-card.svelte.d.ts +13 -0
- package/dist/components/organization/organization-logo-form.svelte +203 -0
- package/dist/components/organization/organization-logo-form.svelte.d.ts +14 -0
- package/dist/components/organization/organization-logo.svelte +82 -0
- package/dist/components/organization/organization-logo.svelte.d.ts +20 -0
- package/dist/components/organization/organization-members-card.svelte +119 -0
- package/dist/components/organization/organization-members-card.svelte.d.ts +13 -0
- package/dist/components/organization/organization-name-card.svelte +61 -0
- package/dist/components/organization/organization-name-card.svelte.d.ts +13 -0
- package/dist/components/organization/organization-name-form.svelte +146 -0
- package/dist/components/organization/organization-name-form.svelte.d.ts +14 -0
- package/dist/components/organization/organization-settings-cards.svelte +41 -0
- package/dist/components/organization/organization-settings-cards.svelte.d.ts +16 -0
- package/dist/components/organization/organization-slug-card.svelte +47 -0
- package/dist/components/organization/organization-slug-card.svelte.d.ts +13 -0
- package/dist/components/organization/organization-slug-form.svelte +144 -0
- package/dist/components/organization/organization-slug-form.svelte.d.ts +14 -0
- package/dist/components/organization/organization-switcher.svelte +396 -0
- package/dist/components/organization/organization-switcher.svelte.d.ts +53 -0
- package/dist/components/organization/organization-view.svelte +209 -0
- package/dist/components/organization/organization-view.svelte.d.ts +30 -0
- package/dist/components/organization/organizations-card.svelte +67 -0
- package/dist/components/organization/organizations-card.svelte.d.ts +12 -0
- package/dist/components/organization/personal-account-view.svelte +101 -0
- package/dist/components/organization/personal-account-view.svelte.d.ts +21 -0
- package/dist/components/organization/remove-member-dialog.svelte +122 -0
- package/dist/components/organization/remove-member-dialog.svelte.d.ts +17 -0
- package/dist/components/organization/update-member-role-dialog.svelte +195 -0
- package/dist/components/organization/update-member-role-dialog.svelte.d.ts +16 -0
- package/dist/components/organization/user-invitation-row.svelte +139 -0
- package/dist/components/organization/user-invitation-row.svelte.d.ts +12 -0
- package/dist/components/organization/user-invitations-card.svelte +67 -0
- package/dist/components/organization/user-invitations-card.svelte.d.ts +12 -0
- package/dist/components/organization-refetcher.svelte +52 -0
- package/dist/components/organization-refetcher.svelte.d.ts +3 -0
- package/dist/components/password-input.svelte +113 -0
- package/dist/components/password-input.svelte.d.ts +17 -0
- package/dist/components/provider-icons/apple-icon.svelte +14 -0
- package/dist/components/provider-icons/apple-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/discord-icon.svelte +14 -0
- package/dist/components/provider-icons/discord-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/dropbox-icon.svelte +14 -0
- package/dist/components/provider-icons/dropbox-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/facebook-icon.svelte +19 -0
- package/dist/components/provider-icons/facebook-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/github-icon.svelte +14 -0
- package/dist/components/provider-icons/github-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/gitlab-icon.svelte +23 -0
- package/dist/components/provider-icons/gitlab-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/google-icon.svelte +29 -0
- package/dist/components/provider-icons/google-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/huggingface-icon.svelte +14 -0
- package/dist/components/provider-icons/huggingface-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/index.d.ts +28 -0
- package/dist/components/provider-icons/index.js +23 -0
- package/dist/components/provider-icons/kick-icon.svelte +20 -0
- package/dist/components/provider-icons/kick-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/linear-icon.svelte +14 -0
- package/dist/components/provider-icons/linear-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/linkedin-icon.svelte +18 -0
- package/dist/components/provider-icons/linkedin-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/microsoft-icon.svelte +14 -0
- package/dist/components/provider-icons/microsoft-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/notion-icon.svelte +14 -0
- package/dist/components/provider-icons/notion-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/reddit-icon.svelte +16 -0
- package/dist/components/provider-icons/reddit-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/roblox-icon.svelte +14 -0
- package/dist/components/provider-icons/roblox-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/slack-icon.svelte +14 -0
- package/dist/components/provider-icons/slack-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/spotify-icon.svelte +14 -0
- package/dist/components/provider-icons/spotify-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/tiktok-icon.svelte +23 -0
- package/dist/components/provider-icons/tiktok-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/twitch-icon.svelte +35 -0
- package/dist/components/provider-icons/twitch-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/vk-icon.svelte +14 -0
- package/dist/components/provider-icons/vk-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/x-icon.svelte +14 -0
- package/dist/components/provider-icons/x-icon.svelte.d.ts +6 -0
- package/dist/components/provider-icons/zoom-icon.svelte +20 -0
- package/dist/components/provider-icons/zoom-icon.svelte.d.ts +6 -0
- package/dist/components/settings/account/account-cell.svelte +129 -0
- package/dist/components/settings/account/account-cell.svelte.d.ts +16 -0
- package/dist/components/settings/account/account-settings-cards.svelte +94 -0
- package/dist/components/settings/account/account-settings-cards.svelte.d.ts +15 -0
- package/dist/components/settings/account/accounts-card.svelte +74 -0
- package/dist/components/settings/account/accounts-card.svelte.d.ts +12 -0
- package/dist/components/settings/account/delete-account-card.svelte +68 -0
- package/dist/components/settings/account/delete-account-card.svelte.d.ts +16 -0
- package/dist/components/settings/account/delete-account-dialog.svelte +185 -0
- package/dist/components/settings/account/delete-account-dialog.svelte.d.ts +13 -0
- package/dist/components/settings/account/index.d.ts +14 -0
- package/dist/components/settings/account/index.js +9 -0
- package/dist/components/settings/account/update-avatar-card.svelte +174 -0
- package/dist/components/settings/account/update-avatar-card.svelte.d.ts +12 -0
- package/dist/components/settings/account/update-field-card.svelte +239 -0
- package/dist/components/settings/account/update-field-card.svelte.d.ts +23 -0
- package/dist/components/settings/account/update-name-card.svelte +34 -0
- package/dist/components/settings/account/update-name-card.svelte.d.ts +6 -0
- package/dist/components/settings/account/update-username-card.svelte +37 -0
- package/dist/components/settings/account/update-username-card.svelte.d.ts +6 -0
- package/dist/components/settings/index.d.ts +5 -0
- package/dist/components/settings/index.js +4 -0
- package/dist/components/settings/security/change-email-card.svelte +182 -0
- package/dist/components/settings/security/change-email-card.svelte.d.ts +12 -0
- package/dist/components/settings/security/change-password-card.svelte +304 -0
- package/dist/components/settings/security/change-password-card.svelte.d.ts +19 -0
- package/dist/components/settings/security/index.d.ts +8 -0
- package/dist/components/settings/security/index.js +4 -0
- package/dist/components/settings/security/session-cell.svelte +101 -0
- package/dist/components/settings/security/session-cell.svelte.d.ts +15 -0
- package/dist/components/settings/security/sessions-card.svelte +61 -0
- package/dist/components/settings/security/sessions-card.svelte.d.ts +12 -0
- package/dist/components/settings/security-settings-cards.svelte +106 -0
- package/dist/components/settings/security-settings-cards.svelte.d.ts +15 -0
- package/dist/components/settings/shared/index.d.ts +5 -0
- package/dist/components/settings/shared/index.js +4 -0
- package/dist/components/settings/shared/settings-action-button.svelte +43 -0
- package/dist/components/settings/shared/settings-action-button.svelte.d.ts +14 -0
- package/dist/components/settings/shared/settings-card-footer.svelte +79 -0
- package/dist/components/settings/shared/settings-card-footer.svelte.d.ts +17 -0
- package/dist/components/settings/shared/settings-card-header.svelte +46 -0
- package/dist/components/settings/shared/settings-card-header.svelte.d.ts +12 -0
- package/dist/components/settings/shared/settings-card.svelte +102 -0
- package/dist/components/settings/shared/settings-card.svelte.d.ts +49 -0
- package/dist/components/settings/skeletons/index.d.ts +2 -0
- package/dist/components/settings/skeletons/index.js +2 -0
- package/dist/components/settings/skeletons/input-field-skeleton.svelte +16 -0
- package/dist/components/settings/skeletons/input-field-skeleton.svelte.d.ts +7 -0
- package/dist/components/settings/skeletons/settings-cell-skeleton.svelte +24 -0
- package/dist/components/settings/skeletons/settings-cell-skeleton.svelte.d.ts +7 -0
- package/dist/components/signed-in.svelte +17 -0
- package/dist/components/signed-in.svelte.d.ts +7 -0
- package/dist/components/signed-out.svelte +17 -0
- package/dist/components/signed-out.svelte.d.ts +7 -0
- package/dist/components/ui/alert/alert-description.svelte +23 -0
- package/dist/components/ui/alert/alert-description.svelte.d.ts +5 -0
- package/dist/components/ui/alert/alert-title.svelte +20 -0
- package/dist/components/ui/alert/alert-title.svelte.d.ts +5 -0
- package/dist/components/ui/alert/alert.svelte +44 -0
- package/dist/components/ui/alert/alert.svelte.d.ts +26 -0
- package/dist/components/ui/alert/index.d.ts +5 -0
- package/dist/components/ui/alert/index.js +7 -0
- package/dist/components/ui/avatar/avatar-fallback.svelte +17 -0
- package/dist/components/ui/avatar/avatar-fallback.svelte.d.ts +4 -0
- package/dist/components/ui/avatar/avatar-image.svelte +17 -0
- package/dist/components/ui/avatar/avatar-image.svelte.d.ts +4 -0
- package/dist/components/ui/avatar/avatar.svelte +19 -0
- package/dist/components/ui/avatar/avatar.svelte.d.ts +4 -0
- package/dist/components/ui/avatar/index.d.ts +4 -0
- package/dist/components/ui/avatar/index.js +6 -0
- package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +23 -0
- package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-item.svelte +20 -0
- package/dist/components/ui/breadcrumb/breadcrumb-item.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +31 -0
- package/dist/components/ui/breadcrumb/breadcrumb-link.svelte.d.ts +11 -0
- package/dist/components/ui/breadcrumb/breadcrumb-list.svelte +23 -0
- package/dist/components/ui/breadcrumb/breadcrumb-list.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +23 -0
- package/dist/components/ui/breadcrumb/breadcrumb-page.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +27 -0
- package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/breadcrumb.svelte +21 -0
- package/dist/components/ui/breadcrumb/breadcrumb.svelte.d.ts +5 -0
- package/dist/components/ui/breadcrumb/index.d.ts +8 -0
- package/dist/components/ui/breadcrumb/index.js +10 -0
- package/dist/components/ui/button/button.svelte +82 -0
- package/dist/components/ui/button/button.svelte.d.ts +64 -0
- package/dist/components/ui/button/index.d.ts +2 -0
- package/dist/components/ui/button/index.js +4 -0
- package/dist/components/ui/card/card-action.svelte +20 -0
- package/dist/components/ui/card/card-action.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-content.svelte +15 -0
- package/dist/components/ui/card/card-content.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-description.svelte +20 -0
- package/dist/components/ui/card/card-description.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-footer.svelte +20 -0
- package/dist/components/ui/card/card-footer.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-header.svelte +23 -0
- package/dist/components/ui/card/card-header.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-title.svelte +20 -0
- package/dist/components/ui/card/card-title.svelte.d.ts +5 -0
- package/dist/components/ui/card/card.svelte +23 -0
- package/dist/components/ui/card/card.svelte.d.ts +5 -0
- package/dist/components/ui/card/index.d.ts +8 -0
- package/dist/components/ui/card/index.js +10 -0
- package/dist/components/ui/checkbox/checkbox.svelte +36 -0
- package/dist/components/ui/checkbox/checkbox.svelte.d.ts +4 -0
- package/dist/components/ui/checkbox/index.d.ts +2 -0
- package/dist/components/ui/checkbox/index.js +4 -0
- package/dist/components/ui/collapsible/collapsible-content.svelte +7 -0
- package/dist/components/ui/collapsible/collapsible-content.svelte.d.ts +4 -0
- package/dist/components/ui/collapsible/collapsible-trigger.svelte +7 -0
- package/dist/components/ui/collapsible/collapsible-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/collapsible/collapsible.svelte +11 -0
- package/dist/components/ui/collapsible/collapsible.svelte.d.ts +4 -0
- package/dist/components/ui/collapsible/index.d.ts +4 -0
- package/dist/components/ui/collapsible/index.js +6 -0
- package/dist/components/ui/dialog/dialog-close.svelte +7 -0
- package/dist/components/ui/dialog/dialog-close.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-content.svelte +43 -0
- package/dist/components/ui/dialog/dialog-content.svelte.d.ts +11 -0
- package/dist/components/ui/dialog/dialog-description.svelte +17 -0
- package/dist/components/ui/dialog/dialog-description.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-footer.svelte +20 -0
- package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-header.svelte +20 -0
- package/dist/components/ui/dialog/dialog-header.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte +20 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-title.svelte +17 -0
- package/dist/components/ui/dialog/dialog-title.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte +7 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/index.d.ts +11 -0
- package/dist/components/ui/dialog/index.js +14 -0
- package/dist/components/ui/drawer/drawer-close.svelte +7 -0
- package/dist/components/ui/drawer/drawer-close.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-content.svelte +37 -0
- package/dist/components/ui/drawer/drawer-content.svelte.d.ts +7 -0
- package/dist/components/ui/drawer/drawer-description.svelte +17 -0
- package/dist/components/ui/drawer/drawer-description.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-footer.svelte +20 -0
- package/dist/components/ui/drawer/drawer-footer.svelte.d.ts +5 -0
- package/dist/components/ui/drawer/drawer-header.svelte +20 -0
- package/dist/components/ui/drawer/drawer-header.svelte.d.ts +5 -0
- package/dist/components/ui/drawer/drawer-nested.svelte +12 -0
- package/dist/components/ui/drawer/drawer-nested.svelte.d.ts +3 -0
- package/dist/components/ui/drawer/drawer-overlay.svelte +20 -0
- package/dist/components/ui/drawer/drawer-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-title.svelte +17 -0
- package/dist/components/ui/drawer/drawer-title.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer-trigger.svelte +7 -0
- package/dist/components/ui/drawer/drawer-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/drawer/drawer.svelte +12 -0
- package/dist/components/ui/drawer/drawer.svelte.d.ts +3 -0
- package/dist/components/ui/drawer/index.d.ts +13 -0
- package/dist/components/ui/drawer/index.js +15 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +41 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +27 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +24 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +31 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +20 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/index.js +18 -0
- package/dist/components/ui/form/form-button.svelte +7 -0
- package/dist/components/ui/form/form-button.svelte.d.ts +4 -0
- package/dist/components/ui/form/form-description.svelte +17 -0
- package/dist/components/ui/form/form-description.svelte.d.ts +4 -0
- package/dist/components/ui/form/form-element-field.svelte +24 -0
- package/dist/components/ui/form/form-element-field.svelte.d.ts +28 -0
- package/dist/components/ui/form/form-field-errors.svelte +30 -0
- package/dist/components/ui/form/form-field-errors.svelte.d.ts +8 -0
- package/dist/components/ui/form/form-field.svelte +24 -0
- package/dist/components/ui/form/form-field.svelte.d.ts +28 -0
- package/dist/components/ui/form/form-fieldset.svelte +15 -0
- package/dist/components/ui/form/form-fieldset.svelte.d.ts +27 -0
- package/dist/components/ui/form/form-label.svelte +24 -0
- package/dist/components/ui/form/form-label.svelte.d.ts +4 -0
- package/dist/components/ui/form/form-legend.svelte +16 -0
- package/dist/components/ui/form/form-legend.svelte.d.ts +4 -0
- package/dist/components/ui/form/index.d.ts +11 -0
- package/dist/components/ui/form/index.js +13 -0
- package/dist/components/ui/input/index.d.ts +2 -0
- package/dist/components/ui/input/index.js +4 -0
- package/dist/components/ui/input/input.svelte +52 -0
- package/dist/components/ui/input/input.svelte.d.ts +13 -0
- package/dist/components/ui/input-otp/index.d.ts +5 -0
- package/dist/components/ui/input-otp/index.js +5 -0
- package/dist/components/ui/input-otp/input-otp-group.svelte +20 -0
- package/dist/components/ui/input-otp/input-otp-group.svelte.d.ts +5 -0
- package/dist/components/ui/input-otp/input-otp-separator.svelte +19 -0
- package/dist/components/ui/input-otp/input-otp-separator.svelte.d.ts +5 -0
- package/dist/components/ui/input-otp/input-otp-slot.svelte +31 -0
- package/dist/components/ui/input-otp/input-otp-slot.svelte.d.ts +4 -0
- package/dist/components/ui/input-otp/input-otp.svelte +42 -0
- package/dist/components/ui/input-otp/input-otp.svelte.d.ts +18 -0
- package/dist/components/ui/label/index.d.ts +2 -0
- package/dist/components/ui/label/index.js +4 -0
- package/dist/components/ui/label/label.svelte +20 -0
- package/dist/components/ui/label/label.svelte.d.ts +4 -0
- package/dist/components/ui/qr-code/README.md +9 -0
- package/dist/components/ui/qr-code/index.d.ts +1 -0
- package/dist/components/ui/qr-code/index.js +1 -0
- package/dist/components/ui/qr-code/qr-code.d.ts +19 -0
- package/dist/components/ui/qr-code/qr-code.js +1166 -0
- package/dist/components/ui/qr-code/qr-code.svelte +43 -0
- package/dist/components/ui/qr-code/qr-code.svelte.d.ts +20 -0
- package/dist/components/ui/select/index.d.ts +11 -0
- package/dist/components/ui/select/index.js +14 -0
- package/dist/components/ui/select/select-content.svelte +40 -0
- package/dist/components/ui/select/select-content.svelte.d.ts +8 -0
- package/dist/components/ui/select/select-group-heading.svelte +21 -0
- package/dist/components/ui/select/select-group-heading.svelte.d.ts +10 -0
- package/dist/components/ui/select/select-group.svelte +7 -0
- package/dist/components/ui/select/select-group.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-item.svelte +38 -0
- package/dist/components/ui/select/select-item.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-label.svelte +20 -0
- package/dist/components/ui/select/select-label.svelte.d.ts +6 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte +20 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte +20 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-separator.svelte +18 -0
- package/dist/components/ui/select/select-separator.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-trigger.svelte +29 -0
- package/dist/components/ui/select/select-trigger.svelte.d.ts +8 -0
- package/dist/components/ui/separator/index.d.ts +2 -0
- package/dist/components/ui/separator/index.js +4 -0
- package/dist/components/ui/separator/separator.svelte +21 -0
- package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/index.d.ts +11 -0
- package/dist/components/ui/sheet/index.js +14 -0
- package/dist/components/ui/sheet/sheet-close.svelte +7 -0
- package/dist/components/ui/sheet/sheet-close.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-content.svelte +60 -0
- package/dist/components/ui/sheet/sheet-content.svelte.d.ts +35 -0
- package/dist/components/ui/sheet/sheet-description.svelte +17 -0
- package/dist/components/ui/sheet/sheet-description.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-footer.svelte +20 -0
- package/dist/components/ui/sheet/sheet-footer.svelte.d.ts +5 -0
- package/dist/components/ui/sheet/sheet-header.svelte +20 -0
- package/dist/components/ui/sheet/sheet-header.svelte.d.ts +5 -0
- package/dist/components/ui/sheet/sheet-overlay.svelte +20 -0
- package/dist/components/ui/sheet/sheet-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-title.svelte +17 -0
- package/dist/components/ui/sheet/sheet-title.svelte.d.ts +4 -0
- package/dist/components/ui/sheet/sheet-trigger.svelte +7 -0
- package/dist/components/ui/sheet/sheet-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/sidebar/constants.d.ts +6 -0
- package/dist/components/ui/sidebar/constants.js +6 -0
- package/dist/components/ui/sidebar/context.svelte.d.ts +42 -0
- package/dist/components/ui/sidebar/context.svelte.js +52 -0
- package/dist/components/ui/sidebar/index.d.ts +25 -0
- package/dist/components/ui/sidebar/index.js +27 -0
- package/dist/components/ui/sidebar/sidebar-content.svelte +24 -0
- package/dist/components/ui/sidebar/sidebar-content.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-footer.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-footer.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-group-action.svelte +36 -0
- package/dist/components/ui/sidebar/sidebar-group-action.svelte.d.ts +11 -0
- package/dist/components/ui/sidebar/sidebar-group-content.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-group-content.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-group-label.svelte +34 -0
- package/dist/components/ui/sidebar/sidebar-group-label.svelte.d.ts +11 -0
- package/dist/components/ui/sidebar/sidebar-group.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-group.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-header.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-header.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-input.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +11 -0
- package/dist/components/ui/sidebar/sidebar-inset.svelte +24 -0
- package/dist/components/ui/sidebar/sidebar-inset.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu-action.svelte +43 -0
- package/dist/components/ui/sidebar/sidebar-menu-action.svelte.d.ts +12 -0
- package/dist/components/ui/sidebar/sidebar-menu-badge.svelte +29 -0
- package/dist/components/ui/sidebar/sidebar-menu-badge.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu-button.svelte +101 -0
- package/dist/components/ui/sidebar/sidebar-menu-button.svelte.d.ts +51 -0
- package/dist/components/ui/sidebar/sidebar-menu-item.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-menu-item.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu-skeleton.svelte +36 -0
- package/dist/components/ui/sidebar/sidebar-menu-skeleton.svelte.d.ts +8 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte +43 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub-button.svelte.d.ts +13 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub-item.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub-item.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub.svelte +25 -0
- package/dist/components/ui/sidebar/sidebar-menu-sub.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-menu.svelte +21 -0
- package/dist/components/ui/sidebar/sidebar-menu.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-provider.svelte +53 -0
- package/dist/components/ui/sidebar/sidebar-provider.svelte.d.ts +9 -0
- package/dist/components/ui/sidebar/sidebar-rail.svelte +36 -0
- package/dist/components/ui/sidebar/sidebar-rail.svelte.d.ts +5 -0
- package/dist/components/ui/sidebar/sidebar-separator.svelte +19 -0
- package/dist/components/ui/sidebar/sidebar-separator.svelte.d.ts +13 -0
- package/dist/components/ui/sidebar/sidebar-trigger.svelte +35 -0
- package/dist/components/ui/sidebar/sidebar-trigger.svelte.d.ts +8 -0
- package/dist/components/ui/sidebar/sidebar.svelte +101 -0
- package/dist/components/ui/sidebar/sidebar.svelte.d.ts +10 -0
- package/dist/components/ui/skeleton/index.d.ts +2 -0
- package/dist/components/ui/skeleton/index.js +4 -0
- package/dist/components/ui/skeleton/skeleton.svelte +17 -0
- package/dist/components/ui/skeleton/skeleton.svelte.d.ts +5 -0
- package/dist/components/ui/tabs/index.d.ts +5 -0
- package/dist/components/ui/tabs/index.js +7 -0
- package/dist/components/ui/tabs/tabs-content.svelte +17 -0
- package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-list.svelte +16 -0
- package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte +20 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs.svelte +19 -0
- package/dist/components/ui/tabs/tabs.svelte.d.ts +4 -0
- package/dist/components/ui/textarea/index.d.ts +2 -0
- package/dist/components/ui/textarea/index.js +4 -0
- package/dist/components/ui/textarea/textarea.svelte +23 -0
- package/dist/components/ui/textarea/textarea.svelte.d.ts +5 -0
- package/dist/components/ui/tooltip/index.d.ts +7 -0
- package/dist/components/ui/tooltip/index.js +9 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte +47 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +7 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/components/user-avatar.svelte +116 -0
- package/dist/components/user-avatar.svelte.d.ts +20 -0
- package/dist/components/user-button.svelte +286 -0
- package/dist/components/user-button.svelte.d.ts +49 -0
- package/dist/components/user-view.svelte +100 -0
- package/dist/components/user-view.svelte.d.ts +21 -0
- package/dist/config/auth-config.d.ts +29 -0
- package/dist/config/auth-config.js +35 -0
- package/dist/context/auth-ui-config.svelte.d.ts +386 -0
- package/dist/context/auth-ui-config.svelte.js +39 -0
- package/dist/hooks/is-mobile.svelte.d.ts +4 -0
- package/dist/hooks/is-mobile.svelte.js +7 -0
- package/dist/hooks/use-authenticate.svelte.d.ts +37 -0
- package/dist/hooks/use-authenticate.svelte.js +73 -0
- package/dist/hooks/use-captcha.svelte.d.ts +8 -0
- package/dist/hooks/use-captcha.svelte.js +107 -0
- package/dist/hooks/use-current-organization.svelte.d.ts +34 -0
- package/dist/hooks/use-current-organization.svelte.js +73 -0
- package/dist/hooks/use-hydrated.svelte.d.ts +7 -0
- package/dist/hooks/use-hydrated.svelte.js +16 -0
- package/dist/hooks/use-lang.svelte.d.ts +6 -0
- package/dist/hooks/use-lang.svelte.js +32 -0
- package/dist/hooks/use-success-transition.svelte.d.ts +6 -0
- package/dist/hooks/use-success-transition.svelte.js +46 -0
- package/dist/hooks/use-theme.svelte.d.ts +6 -0
- package/dist/hooks/use-theme.svelte.js +33 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.js +97 -0
- package/dist/lib/social-providers.d.ts +73 -0
- package/dist/lib/social-providers.js +92 -0
- package/dist/localization/admin-error-codes.d.ts +15 -0
- package/dist/localization/admin-error-codes.js +15 -0
- package/dist/localization/anonymous-error-codes.d.ts +5 -0
- package/dist/localization/anonymous-error-codes.js +5 -0
- package/dist/localization/api-key-error-codes.d.ts +25 -0
- package/dist/localization/api-key-error-codes.js +25 -0
- package/dist/localization/auth-localization.d.ts +594 -0
- package/dist/localization/auth-localization.js +484 -0
- package/dist/localization/base-error-codes.d.ts +26 -0
- package/dist/localization/base-error-codes.js +26 -0
- package/dist/localization/captcha-error-codes.d.ts +7 -0
- package/dist/localization/captcha-error-codes.js +15 -0
- package/dist/localization/email-otp-error-codes.d.ts +7 -0
- package/dist/localization/email-otp-error-codes.js +7 -0
- package/dist/localization/generic-oauth-error-codes.d.ts +3 -0
- package/dist/localization/generic-oauth-error-codes.js +3 -0
- package/dist/localization/haveibeenpwned-error-codes.d.ts +3 -0
- package/dist/localization/haveibeenpwned-error-codes.js +3 -0
- package/dist/localization/multi-session-error-codes.d.ts +3 -0
- package/dist/localization/multi-session-error-codes.js +3 -0
- package/dist/localization/organization-error-codes.d.ts +35 -0
- package/dist/localization/organization-error-codes.js +35 -0
- package/dist/localization/passkey-error-codes.d.ts +9 -0
- package/dist/localization/passkey-error-codes.js +9 -0
- package/dist/localization/phone-number-error-codes.d.ts +10 -0
- package/dist/localization/phone-number-error-codes.js +10 -0
- package/dist/localization/stripe-localization.d.ts +10 -0
- package/dist/localization/stripe-localization.js +10 -0
- package/dist/localization/two-factor-error-codes.d.ts +11 -0
- package/dist/localization/two-factor-error-codes.js +11 -0
- package/dist/localization/username-error-codes.d.ts +9 -0
- package/dist/localization/username-error-codes.js +9 -0
- package/dist/server/auth.d.ts +11851 -0
- package/dist/server/auth.js +84 -0
- package/dist/server/db/index.d.ts +5 -0
- package/dist/server/db/index.js +8 -0
- package/dist/server/db/schema.d.ts +1835 -0
- package/dist/server/db/schema.js +162 -0
- package/dist/server/email.d.ts +10 -0
- package/dist/server/email.js +116 -0
- package/dist/social-providers.js +113 -0
- package/dist/stores/use-auth-data.svelte.d.ts +15 -0
- package/dist/stores/use-auth-data.svelte.js +148 -0
- package/dist/types/account-options.d.ts +33 -0
- package/dist/types/account-options.js +1 -0
- package/dist/types/additional-fields.d.ts +18 -0
- package/dist/types/additional-fields.js +1 -0
- package/dist/types/any-auth-client.d.ts +4 -0
- package/dist/types/any-auth-client.js +2 -0
- package/dist/types/api-key.d.ts +9 -0
- package/dist/types/api-key.js +1 -0
- package/dist/types/auth-hooks.d.ts +60 -0
- package/dist/types/auth-hooks.js +1 -0
- package/dist/types/auth-mutators.d.ts +28 -0
- package/dist/types/auth-mutators.js +1 -0
- package/dist/types/avatar-options.d.ts +28 -0
- package/dist/types/avatar-options.js +1 -0
- package/dist/types/captcha-options.d.ts +31 -0
- package/dist/types/captcha-options.js +1 -0
- package/dist/types/captcha-provider.d.ts +1 -0
- package/dist/types/captcha-provider.js +1 -0
- package/dist/types/credentials-options.d.ts +27 -0
- package/dist/types/credentials-options.js +1 -0
- package/dist/types/delete-user-options.d.ts +7 -0
- package/dist/types/delete-user-options.js +1 -0
- package/dist/types/generic-oauth-options.d.ts +17 -0
- package/dist/types/generic-oauth-options.js +1 -0
- package/dist/types/gravatar-options.d.ts +21 -0
- package/dist/types/gravatar-options.js +1 -0
- package/dist/types/image.d.ts +6 -0
- package/dist/types/image.js +1 -0
- package/dist/types/index.d.ts +229 -0
- package/dist/types/index.js +24 -0
- package/dist/types/invitation.d.ts +10 -0
- package/dist/types/invitation.js +1 -0
- package/dist/types/link.d.ts +6 -0
- package/dist/types/link.js +1 -0
- package/dist/types/organization-options.d.ts +109 -0
- package/dist/types/organization-options.js +1 -0
- package/dist/types/password-validation.d.ts +14 -0
- package/dist/types/password-validation.js +1 -0
- package/dist/types/profile.d.ts +15 -0
- package/dist/types/profile.js +1 -0
- package/dist/types/refetch.d.ts +1 -0
- package/dist/types/refetch.js +1 -0
- package/dist/types/render-toast.d.ts +10 -0
- package/dist/types/render-toast.js +1 -0
- package/dist/types/sign-up-options.d.ts +7 -0
- package/dist/types/sign-up-options.js +1 -0
- package/dist/types/social-options.d.ts +13 -0
- package/dist/types/social-options.js +1 -0
- package/dist/utils/auth-data-cache.d.ts +21 -0
- package/dist/utils/auth-data-cache.js +74 -0
- package/dist/utils/get-paths.d.ts +142 -0
- package/dist/utils/get-paths.js +145 -0
- package/dist/utils/gravatar-utils.d.ts +8 -0
- package/dist/utils/gravatar-utils.js +45 -0
- package/dist/utils/image-utils.d.ts +2 -0
- package/dist/utils/image-utils.js +36 -0
- package/dist/utils/store-to-rune.svelte.d.ts +39 -0
- package/dist/utils/store-to-rune.svelte.js +53 -0
- package/dist/utils/ui.d.ts +12 -0
- package/dist/utils/ui.js +5 -0
- package/dist/utils/utils.d.ts +26 -0
- package/dist/utils/utils.js +85 -0
- package/dist/utils/view-paths.d.ts +49 -0
- package/dist/utils/view-paths.js +44 -0
- package/package.json +129 -0
package/README.md
ADDED
|
@@ -0,0 +1,611 @@
|
|
|
1
|
+
# Better Auth UI - Svelte 5
|
|
2
|
+
|
|
3
|
+
<picture>
|
|
4
|
+
<source srcset="https://raw.githubusercontent.com/daveyplate/better-auth-ui/main/docs/public/better-auth-ui-promo-dark.png" media="(prefers-color-scheme: dark)">
|
|
5
|
+
<source srcset="https://raw.githubusercontent.com/daveyplate/better-auth-ui/main/docs/public/better-auth-ui-promo-light.png" media="(prefers-color-scheme: light)">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/daveyplate/better-auth-ui/main/docs/public/better-auth-ui-promo-dark.png" alt="Better Auth UI Logo">
|
|
7
|
+
</picture>
|
|
8
|
+
|
|
9
|
+
Pre-built, customizable authentication UI components for [Better Auth](https://www.better-auth.com) in Svelte 5.
|
|
10
|
+
|
|
11
|
+
This is a Svelte 5 port of the [Better Auth UI React library](https://github.com/daveyplate/better-auth-ui). The API is nearly identical to the original React library, making it easy to follow the [official documentation](https://better-auth-ui.com). All credits for the original design and architecture go to [daveycodez](https://github.com/daveycodez).
|
|
12
|
+
|
|
13
|
+
## Warning
|
|
14
|
+
|
|
15
|
+
This library is currently in **active development** and not yet on NPM. Breaking changes may occur.
|
|
16
|
+
|
|
17
|
+
## Why Choose Better Auth UI?
|
|
18
|
+
|
|
19
|
+
- **Easy** – Plug & play authentication components
|
|
20
|
+
- **Customizable** – Fully styled with TailwindCSS and shadcn-svelte, easy to extend
|
|
21
|
+
- **Robust** – Built with Svelte 5 runes and modern best practices
|
|
22
|
+
|
|
23
|
+
## Key Features
|
|
24
|
+
|
|
25
|
+
- 🚀 **Svelte 5 Runes** - Built with the latest Svelte 5 reactive primitives
|
|
26
|
+
- 🔐 **Better Auth Integration** - Native integration with Better Auth's Svelte client
|
|
27
|
+
- 🛣️ **Path Helpers** - Server & client-side path utilities (unique to Svelte port)
|
|
28
|
+
- 🎨 **Tailwind CSS** - Fully styled with Tailwind CSS v4
|
|
29
|
+
- 📦 **shadcn-svelte Components** - Built on top of high-quality UI components
|
|
30
|
+
- ✅ **Form Validation** - Zod 4 schema validation out of the box
|
|
31
|
+
- 🌐 **Localization Ready** - Easy to customize all text strings
|
|
32
|
+
- 📱 **Fully Responsive** - Mobile-first design
|
|
33
|
+
|
|
34
|
+
## Installation
|
|
35
|
+
|
|
36
|
+
Install the package using your preferred package manager:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pnpm install better-auth-ui-svelte better-auth zod svelte-sonner
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Peer Dependencies
|
|
43
|
+
|
|
44
|
+
Make sure you have these installed in your project:
|
|
45
|
+
|
|
46
|
+
- `svelte` ^5.0.0
|
|
47
|
+
- `better-auth` ^1.3.0
|
|
48
|
+
- `bits-ui` ^2.0.0
|
|
49
|
+
- `@lucide/svelte` ^0.400.0
|
|
50
|
+
- `tailwindcss` ^4.0.0
|
|
51
|
+
- `zod` ^4.0.0
|
|
52
|
+
- `svelte-sonner` ^0.4.0
|
|
53
|
+
|
|
54
|
+
### TailwindCSS Configuration
|
|
55
|
+
|
|
56
|
+
For **TailwindCSS v4**, add the following `@import` to your global CSS file:
|
|
57
|
+
|
|
58
|
+
```css
|
|
59
|
+
/* app.css or global.css */
|
|
60
|
+
@import 'better-auth-ui-svelte/css';
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
For **TailwindCSS v3** _(Deprecated)_, add the following to your Tailwind config:
|
|
64
|
+
|
|
65
|
+
```js
|
|
66
|
+
content: ['./node_modules/better-auth-ui-svelte/dist/**/*.{js,svelte}'];
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## SvelteKit Integration
|
|
70
|
+
|
|
71
|
+
Follow these steps to integrate Better Auth UI into your SvelteKit project:
|
|
72
|
+
|
|
73
|
+
### Step 1: Set Up Better Auth Client
|
|
74
|
+
|
|
75
|
+
Create your Better Auth client instance (e.g., in `src/lib/auth-client.ts`):
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import { createAuthClient } from 'better-auth/svelte';
|
|
79
|
+
|
|
80
|
+
export const authClient = createAuthClient({
|
|
81
|
+
baseURL: 'http://localhost:5173',
|
|
82
|
+
// Add any plugins you need
|
|
83
|
+
plugins: [
|
|
84
|
+
// organizationClient(),
|
|
85
|
+
// twoFactorClient(),
|
|
86
|
+
// etc.
|
|
87
|
+
]
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Step 2: Set Up AuthUIProvider
|
|
92
|
+
|
|
93
|
+
The `<AuthUIProvider />` wraps your application with authentication context. Set it up in your root layout:
|
|
94
|
+
|
|
95
|
+
```svelte
|
|
96
|
+
<!-- src/routes/+layout.svelte -->
|
|
97
|
+
<script lang="ts">
|
|
98
|
+
import { AuthUIProvider } from 'better-auth-ui-svelte';
|
|
99
|
+
import { Toaster } from 'svelte-sonner';
|
|
100
|
+
import { authClient } from '$lib/auth-client';
|
|
101
|
+
import { goto, invalidateAll } from '$app/navigation';
|
|
102
|
+
</script>
|
|
103
|
+
|
|
104
|
+
<Toaster />
|
|
105
|
+
|
|
106
|
+
<AuthUIProvider {authClient}>
|
|
107
|
+
{@render children()}
|
|
108
|
+
</AuthUIProvider>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The [`<AuthUIProvider />`](#authui-provider-props) can be customized with additional settings:
|
|
112
|
+
|
|
113
|
+
```svelte
|
|
114
|
+
<AuthUIProvider
|
|
115
|
+
{authClient}
|
|
116
|
+
navigate={goto}
|
|
117
|
+
onSessionChange={async () => await invalidateAll()}
|
|
118
|
+
social={{
|
|
119
|
+
providers: ['github', 'google', 'facebook']
|
|
120
|
+
}}
|
|
121
|
+
magicLink
|
|
122
|
+
passkey
|
|
123
|
+
multiSession
|
|
124
|
+
twoFactor={['otp', 'totp']}
|
|
125
|
+
>
|
|
126
|
+
<slot />
|
|
127
|
+
</AuthUIProvider>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Step 3: Create Auth Pages with Dynamic Routes
|
|
131
|
+
|
|
132
|
+
Create a dynamic route to handle all authentication views. Create the file `src/routes/auth/[path]/+page.svelte`:
|
|
133
|
+
|
|
134
|
+
```svelte
|
|
135
|
+
<script lang="ts">
|
|
136
|
+
import { AuthView, authViewPaths } from 'better-auth-ui-svelte';
|
|
137
|
+
import type { PageProps } from './$types.js';
|
|
138
|
+
|
|
139
|
+
let { data, params }: PageProps = $props();
|
|
140
|
+
</script>
|
|
141
|
+
|
|
142
|
+
<main class="container flex grow items-center justify-center p-4">
|
|
143
|
+
<AuthView path={params.path} />
|
|
144
|
+
</main>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
This single dynamic route handles all authentication views:
|
|
148
|
+
|
|
149
|
+
- `/auth/sign-in` – Sign in via email/password and social providers
|
|
150
|
+
- `/auth/sign-up` – New account registration
|
|
151
|
+
- `/auth/magic-link` – Email login without a password
|
|
152
|
+
- `/auth/forgot-password` – Request password reset email
|
|
153
|
+
- `/auth/reset-password` – Set new password after receiving reset link
|
|
154
|
+
- `/auth/two-factor` – Two-factor authentication
|
|
155
|
+
- `/auth/recover-account` – Recover account via backup code
|
|
156
|
+
- `/auth/email-otp` – Email OTP verification
|
|
157
|
+
- `/auth/sign-out` – Log the user out
|
|
158
|
+
- `/auth/callback` – OAuth callback handler
|
|
159
|
+
- `/auth/accept-invitation` – Accept organization invitation
|
|
160
|
+
|
|
161
|
+
## Usage Examples
|
|
162
|
+
|
|
163
|
+
### Using Individual Forms
|
|
164
|
+
|
|
165
|
+
You can use individual authentication forms directly in your pages:
|
|
166
|
+
|
|
167
|
+
```svelte
|
|
168
|
+
<script lang="ts">
|
|
169
|
+
import { SignInForm, SignUpForm } from 'better-auth-ui-svelte';
|
|
170
|
+
</script>
|
|
171
|
+
|
|
172
|
+
<SignInForm
|
|
173
|
+
redirectTo="/dashboard"
|
|
174
|
+
onSuccess={() => {
|
|
175
|
+
console.log('Signed in!');
|
|
176
|
+
}}
|
|
177
|
+
/>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Conditional Rendering
|
|
181
|
+
|
|
182
|
+
Use `<SignedIn />` and `<SignedOut />` to conditionally render content:
|
|
183
|
+
|
|
184
|
+
```svelte
|
|
185
|
+
<script lang="ts">
|
|
186
|
+
import { SignedIn, SignedOut } from 'better-auth-ui-svelte';
|
|
187
|
+
</script>
|
|
188
|
+
|
|
189
|
+
<SignedOut>
|
|
190
|
+
<a href="/auth/sign-in">Sign In</a>
|
|
191
|
+
</SignedOut>
|
|
192
|
+
|
|
193
|
+
<SignedIn>
|
|
194
|
+
<a href="/dashboard">Dashboard</a>
|
|
195
|
+
</SignedIn>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### User Button
|
|
199
|
+
|
|
200
|
+
Display a user button with avatar and dropdown menu:
|
|
201
|
+
|
|
202
|
+
```svelte
|
|
203
|
+
<script lang="ts">
|
|
204
|
+
import { UserButton } from 'better-auth-ui-svelte';
|
|
205
|
+
</script>
|
|
206
|
+
|
|
207
|
+
<UserButton align="end" />
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Available Components
|
|
211
|
+
|
|
212
|
+
### Core Components
|
|
213
|
+
|
|
214
|
+
- **`<AuthView />`** - Dynamic authentication view handler (sign in, sign up, forgot password, etc.)
|
|
215
|
+
- **`<AuthUIProvider />`** - Context provider for auth configuration
|
|
216
|
+
- **`<AuthLoading />`** - Loading state component
|
|
217
|
+
|
|
218
|
+
### Authentication Forms
|
|
219
|
+
|
|
220
|
+
- **`<SignInForm />`** - Email/password sign in
|
|
221
|
+
- **`<SignUpForm />`** - User registration
|
|
222
|
+
- **`<ForgotPasswordForm />`** - Password reset request
|
|
223
|
+
- **`<ResetPasswordForm />`** - Set new password
|
|
224
|
+
- **`<MagicLinkForm />`** - Magic link authentication
|
|
225
|
+
- **`<TwoFactorForm />`** - Two-factor authentication
|
|
226
|
+
- **`<RecoverAccountForm />`** - Account recovery
|
|
227
|
+
- **`<EmailOtpForm />`** - Email OTP verification
|
|
228
|
+
|
|
229
|
+
### User Components
|
|
230
|
+
|
|
231
|
+
- **`<UserButton />`** - User dropdown menu with avatar
|
|
232
|
+
- **`<UserAvatar />`** - User avatar with fallback to initials
|
|
233
|
+
- **`<SignedIn />`** - Renders children only when authenticated
|
|
234
|
+
- **`<SignedOut />`** - Renders children only when not authenticated
|
|
235
|
+
|
|
236
|
+
### Other Components
|
|
237
|
+
|
|
238
|
+
- **`<AuthCallback />`** - OAuth callback handler
|
|
239
|
+
- **`<SignOut />`** - Sign out component
|
|
240
|
+
|
|
241
|
+
## Customization
|
|
242
|
+
|
|
243
|
+
### Localization
|
|
244
|
+
|
|
245
|
+
Customize all text strings by passing a `localization` prop to `<AuthUIProvider />`:
|
|
246
|
+
|
|
247
|
+
```svelte
|
|
248
|
+
<script lang="ts">
|
|
249
|
+
import { AuthUIProvider, authLocalization } from 'better-auth-ui-svelte';
|
|
250
|
+
import { authClient } from '$lib/auth-client';
|
|
251
|
+
|
|
252
|
+
const customLocalization = {
|
|
253
|
+
...authLocalization,
|
|
254
|
+
SIGN_IN: 'Log In',
|
|
255
|
+
SIGN_UP: 'Create Account',
|
|
256
|
+
EMAIL: 'Email Address',
|
|
257
|
+
PASSWORD: 'Your Password'
|
|
258
|
+
};
|
|
259
|
+
</script>
|
|
260
|
+
|
|
261
|
+
<AuthUIProvider {authClient} localization={customLocalization}>
|
|
262
|
+
<slot />
|
|
263
|
+
</AuthUIProvider>
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Styling
|
|
267
|
+
|
|
268
|
+
All components accept a `className` prop for custom styling:
|
|
269
|
+
|
|
270
|
+
```svelte
|
|
271
|
+
<SignInForm className="max-w-md mx-auto" />
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
For granular styling control, use the `classNames` prop:
|
|
275
|
+
|
|
276
|
+
```svelte
|
|
277
|
+
<AuthView
|
|
278
|
+
path="sign-in"
|
|
279
|
+
classNames={{
|
|
280
|
+
base: 'border-2 border-primary',
|
|
281
|
+
header: 'bg-primary/10',
|
|
282
|
+
title: 'text-xl font-bold',
|
|
283
|
+
footerLink: 'text-primary hover:underline'
|
|
284
|
+
}}
|
|
285
|
+
/>
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### AuthUI Provider Props
|
|
289
|
+
|
|
290
|
+
The `<AuthUIProvider />` accepts the following configuration options:
|
|
291
|
+
|
|
292
|
+
```typescript
|
|
293
|
+
interface AuthUIProviderProps {
|
|
294
|
+
// Required
|
|
295
|
+
authClient: ReturnType<typeof createAuthClient>;
|
|
296
|
+
|
|
297
|
+
// Navigation (SvelteKit)
|
|
298
|
+
navigate?: (href: string) => void;
|
|
299
|
+
|
|
300
|
+
// Session management
|
|
301
|
+
onSessionChange?: () => void | Promise<void>;
|
|
302
|
+
|
|
303
|
+
// Social authentication
|
|
304
|
+
social?: {
|
|
305
|
+
providers?: ('google' | 'github' | 'facebook' | 'apple' | 'discord' | 'twitter')[];
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
// Additional auth methods
|
|
309
|
+
magicLink?: boolean;
|
|
310
|
+
passkey?: boolean;
|
|
311
|
+
|
|
312
|
+
// Two-factor authentication
|
|
313
|
+
twoFactor?: ('otp' | 'totp')[];
|
|
314
|
+
|
|
315
|
+
// Multi-session support
|
|
316
|
+
multiSession?: boolean;
|
|
317
|
+
|
|
318
|
+
// Localization
|
|
319
|
+
localization?: Partial<AuthLocalization>;
|
|
320
|
+
|
|
321
|
+
// Avatar handling
|
|
322
|
+
avatar?: {
|
|
323
|
+
upload?: (file: File) => Promise<string>;
|
|
324
|
+
delete?: (url: string) => Promise<void>;
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
// Settings page configuration
|
|
328
|
+
settings?: {
|
|
329
|
+
url?: string;
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
// Organization configuration
|
|
333
|
+
organization?: {
|
|
334
|
+
pathMode?: 'id' | 'slug';
|
|
335
|
+
basePath?: string;
|
|
336
|
+
slug?: string;
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
## Path Helpers (Svelte-Specific Feature)
|
|
342
|
+
|
|
343
|
+
> **Note:** This feature is unique to the Svelte port and not available in the original React version of Better Auth UI. Added by [Chris Jayden](https://github.com/multiplehats) to ease server-side implementation in SvelteKit.
|
|
344
|
+
|
|
345
|
+
Better Auth UI for Svelte includes utility functions to generate authentication paths that work both client-side and server-side. This makes it easy to maintain consistent paths across your application and handle redirects in hooks, load functions, and components.
|
|
346
|
+
|
|
347
|
+
### Why Use Path Helpers?
|
|
348
|
+
|
|
349
|
+
- **Server-Side Compatible** - Works in `hooks.server.ts`, `+page.server.ts`, and `+layout.server.ts`
|
|
350
|
+
- **Type-Safe** - TypeScript ensures you use valid path names
|
|
351
|
+
- **Single Source of Truth** - Change paths once, updates everywhere
|
|
352
|
+
- **No Hardcoding** - Never hardcode `/auth/sign-in` paths again
|
|
353
|
+
|
|
354
|
+
### Basic Usage
|
|
355
|
+
|
|
356
|
+
```typescript
|
|
357
|
+
import { getAuthPath, getAuthUrl } from 'better-auth-ui-svelte';
|
|
358
|
+
|
|
359
|
+
// Get auth paths (default: '/auth')
|
|
360
|
+
getAuthPath('SIGN_IN'); // '/auth/sign-in'
|
|
361
|
+
getAuthPath('SIGN_UP'); // '/auth/sign-up'
|
|
362
|
+
getAuthPath('FORGOT_PASSWORD'); // '/auth/forgot-password'
|
|
363
|
+
|
|
364
|
+
// Get full URLs (useful for emails, redirects)
|
|
365
|
+
getAuthUrl('RESET_PASSWORD', {
|
|
366
|
+
baseURL: 'https://example.com'
|
|
367
|
+
}); // 'https://example.com/auth/reset-password'
|
|
368
|
+
|
|
369
|
+
// Account and organization paths
|
|
370
|
+
getAccountPath('SETTINGS'); // '/account/settings'
|
|
371
|
+
getOrganizationPath('MEMBERS'); // '/organization/members'
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Server-Side Redirects
|
|
375
|
+
|
|
376
|
+
Use path helpers in your server hooks for authentication redirects:
|
|
377
|
+
|
|
378
|
+
```typescript
|
|
379
|
+
// src/hooks.server.ts
|
|
380
|
+
import { redirect } from '@sveltejs/kit';
|
|
381
|
+
import { getAuthPath } from 'better-auth-ui-svelte';
|
|
382
|
+
|
|
383
|
+
export async function handle({ event, resolve }) {
|
|
384
|
+
const session = await getSession(event);
|
|
385
|
+
|
|
386
|
+
// Redirect unauthenticated users to sign-in
|
|
387
|
+
if (!session && event.url.pathname.startsWith('/app')) {
|
|
388
|
+
throw redirect(303, getAuthPath('SIGN_IN'));
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// Redirect authenticated users away from auth pages
|
|
392
|
+
if (session && event.url.pathname === getAuthPath('SIGN_IN')) {
|
|
393
|
+
throw redirect(303, '/app');
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return resolve(event);
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### Shared Configuration
|
|
401
|
+
|
|
402
|
+
Create a shared config file to keep paths consistent across your app:
|
|
403
|
+
|
|
404
|
+
```typescript
|
|
405
|
+
// src/lib/config/auth-config.ts
|
|
406
|
+
import type { PathConfig } from 'better-auth-ui-svelte';
|
|
407
|
+
|
|
408
|
+
export const authPathConfig: PathConfig = {
|
|
409
|
+
basePath: '/auth',
|
|
410
|
+
// Optionally customize individual paths
|
|
411
|
+
viewPaths: {
|
|
412
|
+
SIGN_IN: 'login', // /auth/login instead of /auth/sign-in
|
|
413
|
+
SIGN_UP: 'register' // /auth/register instead of /auth/sign-up
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
Then use it everywhere:
|
|
419
|
+
|
|
420
|
+
```svelte
|
|
421
|
+
<!-- src/routes/+layout.svelte -->
|
|
422
|
+
<script lang="ts">
|
|
423
|
+
import { AuthUIProvider } from 'better-auth-ui-svelte';
|
|
424
|
+
import { authPathConfig } from '$lib/config/auth-config';
|
|
425
|
+
|
|
426
|
+
// Provider will use your custom paths
|
|
427
|
+
<AuthUIProvider
|
|
428
|
+
{authClient}
|
|
429
|
+
basePath={authPathConfig.basePath}
|
|
430
|
+
viewPaths={authPathConfig.viewPaths}
|
|
431
|
+
/>
|
|
432
|
+
</script>
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
```typescript
|
|
436
|
+
// src/hooks.server.ts
|
|
437
|
+
import { getAuthPath } from 'better-auth-ui-svelte';
|
|
438
|
+
import { authPathConfig } from '$lib/config/auth-config';
|
|
439
|
+
|
|
440
|
+
// Use same config for server-side redirects
|
|
441
|
+
throw redirect(303, getAuthPath('SIGN_IN', authPathConfig));
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
### Available Functions
|
|
445
|
+
|
|
446
|
+
```typescript
|
|
447
|
+
// Auth paths
|
|
448
|
+
getAuthPath(view, config?) // Get auth path
|
|
449
|
+
getAuthUrl(view, config?) // Get full URL with baseURL
|
|
450
|
+
getAllAuthPaths(config?) // Get all auth paths as object
|
|
451
|
+
|
|
452
|
+
// Account paths
|
|
453
|
+
getAccountPath(view, config?)
|
|
454
|
+
getAccountUrl(view, config?)
|
|
455
|
+
getAllAccountPaths(config?)
|
|
456
|
+
|
|
457
|
+
// Organization paths
|
|
458
|
+
getOrganizationPath(view, config?)
|
|
459
|
+
getOrganizationUrl(view, config?)
|
|
460
|
+
getAllOrganizationPaths(config?)
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
## Exports
|
|
464
|
+
|
|
465
|
+
The library exports the following utilities:
|
|
466
|
+
|
|
467
|
+
```typescript
|
|
468
|
+
// Component exports
|
|
469
|
+
export { AuthView, AuthUIProvider, SignInForm, SignUpForm, UserButton, UserAvatar, ... };
|
|
470
|
+
|
|
471
|
+
// Path constants
|
|
472
|
+
export { authViewPaths, accountViewPaths, organizationViewPaths };
|
|
473
|
+
|
|
474
|
+
// Path helpers (unique to Svelte port)
|
|
475
|
+
export {
|
|
476
|
+
getAuthPath,
|
|
477
|
+
getAuthUrl,
|
|
478
|
+
getAccountPath,
|
|
479
|
+
getAccountUrl,
|
|
480
|
+
getOrganizationPath,
|
|
481
|
+
getOrganizationUrl,
|
|
482
|
+
getAllAuthPaths,
|
|
483
|
+
getAllAccountPaths,
|
|
484
|
+
getAllOrganizationPaths
|
|
485
|
+
};
|
|
486
|
+
|
|
487
|
+
// Utilities
|
|
488
|
+
export { createForm, getViewByPath };
|
|
489
|
+
|
|
490
|
+
// Context helpers
|
|
491
|
+
export { getAuthUIConfig, getAuthClient, getLocalization };
|
|
492
|
+
|
|
493
|
+
// Localization
|
|
494
|
+
export { authLocalization };
|
|
495
|
+
|
|
496
|
+
// Types
|
|
497
|
+
export type {
|
|
498
|
+
AuthUIConfig,
|
|
499
|
+
User,
|
|
500
|
+
Session,
|
|
501
|
+
AuthLocalization,
|
|
502
|
+
PathConfig,
|
|
503
|
+
AccountPathConfig,
|
|
504
|
+
OrganizationPathConfig
|
|
505
|
+
};
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
## Development
|
|
509
|
+
|
|
510
|
+
### Prerequisites
|
|
511
|
+
|
|
512
|
+
- Node.js 18+ and pnpm
|
|
513
|
+
- Docker (for Mailpit and PostgreSQL)
|
|
514
|
+
|
|
515
|
+
### Getting Started
|
|
516
|
+
|
|
517
|
+
1. **Install dependencies**
|
|
518
|
+
|
|
519
|
+
```bash
|
|
520
|
+
pnpm install
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
2. **Configure environment variables**
|
|
524
|
+
|
|
525
|
+
Copy `.env.example` to `.env` and update the values:
|
|
526
|
+
|
|
527
|
+
```bash
|
|
528
|
+
cp .env.example .env
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
3. **Start Mailpit for email testing**
|
|
532
|
+
|
|
533
|
+
Mailpit provides a local SMTP server and web UI for testing emails:
|
|
534
|
+
|
|
535
|
+
```bash
|
|
536
|
+
docker compose up -d
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
Access the Mailpit web UI at http://localhost:8025 to view emails sent during development (magic links, OTP codes, etc.)
|
|
540
|
+
|
|
541
|
+
4. **Start development server**
|
|
542
|
+
```bash
|
|
543
|
+
pnpm dev
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
### Development Commands
|
|
547
|
+
|
|
548
|
+
```bash
|
|
549
|
+
# Build library
|
|
550
|
+
pnpm run build
|
|
551
|
+
|
|
552
|
+
# Lint and format
|
|
553
|
+
pnpm run lint
|
|
554
|
+
pnpm run format
|
|
555
|
+
|
|
556
|
+
# Stop Mailpit
|
|
557
|
+
docker compose down
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
### Email Testing
|
|
561
|
+
|
|
562
|
+
All authentication emails (magic links, OTP codes) are sent through Mailpit in development:
|
|
563
|
+
|
|
564
|
+
- **SMTP Server**: localhost:1025
|
|
565
|
+
- **Web UI**: http://localhost:8025
|
|
566
|
+
- Emails are captured locally and never sent to real addresses
|
|
567
|
+
- Click on emails in the UI to view and test links
|
|
568
|
+
|
|
569
|
+
## Architecture
|
|
570
|
+
|
|
571
|
+
Better Auth UI for Svelte is built with:
|
|
572
|
+
|
|
573
|
+
- **Svelte 5 Runes** (`$state`, `$derived`, `$effect`) for reactive state
|
|
574
|
+
- **Better Auth Svelte Client** for authentication state and methods
|
|
575
|
+
- **Svelte Context** for configuration and dependency injection
|
|
576
|
+
- **Zod 4** for schema validation
|
|
577
|
+
- **Bits UI** via shadcn-svelte for accessible UI primitives
|
|
578
|
+
- **Tailwind CSS v4** for styling
|
|
579
|
+
|
|
580
|
+
## Differences from React Version
|
|
581
|
+
|
|
582
|
+
While the API is nearly identical, there are some Svelte-specific differences:
|
|
583
|
+
|
|
584
|
+
1. **Path Helpers**: Unique to this Svelte port - utility functions for generating auth paths that work client and server-side (see [Path Helpers](#path-helpers-svelte-specific-feature))
|
|
585
|
+
2. **Navigation**: Instead of Next.js router, use SvelteKit's `goto` function
|
|
586
|
+
3. **Session Management**: Use `invalidateAll()` instead of `router.refresh()`
|
|
587
|
+
4. **Dynamic Routes**: Use SvelteKit's `[path]` syntax instead of Next.js `[path]`
|
|
588
|
+
5. **Reactivity**: Built with Svelte 5 runes instead of React hooks
|
|
589
|
+
6. **Link Component**: SvelteKit doesn't need a custom Link component
|
|
590
|
+
|
|
591
|
+
## Contributing
|
|
592
|
+
|
|
593
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
594
|
+
|
|
595
|
+
## License
|
|
596
|
+
|
|
597
|
+
MIT
|
|
598
|
+
|
|
599
|
+
## Credits
|
|
600
|
+
|
|
601
|
+
- Original React version by [daveycodez](https://github.com/daveyplate/better-auth-ui)
|
|
602
|
+
- Svelte 5 port by Chris Jayden [multiplehats](https://github.com/multiplehats)
|
|
603
|
+
- Built with [Better Auth](https://www.better-auth.com)
|
|
604
|
+
- UI components from [shadcn-svelte](https://www.shadcn-svelte.com)
|
|
605
|
+
|
|
606
|
+
## Related Projects
|
|
607
|
+
|
|
608
|
+
- [Better Auth](https://www.better-auth.com) - Framework agnostic authentication library
|
|
609
|
+
- [Better Auth UI (React)](https://github.com/daveyplate/better-auth-ui) - Original React version
|
|
610
|
+
- [Better Auth UI Docs](https://better-auth-ui.com) - Official documentation (React-based, but API is nearly identical)
|
|
611
|
+
- [shadcn-svelte](https://www.shadcn-svelte.com) - Beautifully designed Svelte components
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createAuthClient } from 'better-auth/svelte';
|
|
2
|
+
import { organizationClient, apiKeyClient, twoFactorClient, usernameClient, magicLinkClient, emailOTPClient, lastLoginMethodClient, oneTapClient, genericOAuthClient, anonymousClient, multiSessionClient, passkeyClient } from 'better-auth/client/plugins';
|
|
3
|
+
/**
|
|
4
|
+
* Better Auth Svelte client
|
|
5
|
+
* This provides reactive stores for authentication state
|
|
6
|
+
*/
|
|
7
|
+
export const authClient = createAuthClient({
|
|
8
|
+
plugins: [
|
|
9
|
+
apiKeyClient(),
|
|
10
|
+
multiSessionClient(),
|
|
11
|
+
passkeyClient(),
|
|
12
|
+
oneTapClient({
|
|
13
|
+
clientId: ''
|
|
14
|
+
}),
|
|
15
|
+
genericOAuthClient(),
|
|
16
|
+
anonymousClient(),
|
|
17
|
+
usernameClient(),
|
|
18
|
+
magicLinkClient(),
|
|
19
|
+
emailOTPClient(),
|
|
20
|
+
twoFactorClient(),
|
|
21
|
+
organizationClient(),
|
|
22
|
+
lastLoginMethodClient()
|
|
23
|
+
]
|
|
24
|
+
});
|
|
25
|
+
// Export convenience methods
|
|
26
|
+
export const { useSession } = authClient;
|