Packages
phoenix_kit
1.7.173
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit_web/users/registration.html.heex
<PhoenixKitWeb.Components.AuthPageWrapper.auth_page_wrapper
flash={@flash}
phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
page_title={"#{@project_title} - #{gettext("Create account")}"}
current_path={assigns[:url_path] || "/users/register"}
dev_mailbox_message={gettext("confirmation emails")}
>
<h1 class="text-2xl font-bold text-center mb-6">
{@project_title} {gettext("Create account")}
</h1>
<%!-- Invitation banner: shown when user arrives via org invitation link --%>
<%= if @pending_invitation do %>
<div class="alert alert-info mb-4">
<.icon name="hero-building-office-2" class="w-5 h-5 shrink-0" />
<span>
{gettext(
"You've been invited to join %{organization}. Create an account to accept the invitation.",
organization: @pending_invitation.organization.organization_name
)}
</span>
</div>
<% end %>
<.form
for={@form}
id="registration_form"
phx-submit="save"
phx-change="validate"
phx-trigger-action={@trigger_submit}
action={Routes.path("/users/log-in?_action=registered")}
method="post"
>
<fieldset class="fieldset min-w-0">
<legend class="fieldset-legend sr-only">{gettext("Account Information")}</legend>
<div phx-feedback-for="user[email]">
<label class="label" for="user_email">
<span class="label-text flex items-center">
<PhoenixKitWeb.Components.Core.Icons.icon_email class="w-4 h-4 mr-2" /> {gettext(
"Email"
)}
</span>
</label>
<.input
field={@form[:email]}
type="email"
placeholder={gettext("Enter your email address")}
autocomplete="email"
class="transition-colors focus:input-primary"
required
/>
</div>
<%!-- Username Field (optional, controlled by admin setting) --%>
<%= if @show_username do %>
<div phx-feedback-for="user[username]">
<label class="label" for="user_username">
<span class="label-text flex items-center">
<PhoenixKitWeb.Components.Core.Icons.icon_user_profile class="w-4 h-4 mr-2" />
{gettext("Username")}
</span>
</label>
<.input
field={@form[:username]}
type="text"
placeholder={gettext("Choose a unique username (optional)")}
autocomplete="username"
class="transition-colors focus:input-primary"
/>
<div class="text-xs text-base-content/60 mt-1">
{gettext("If not provided, we'll generate one from your email")}
</div>
</div>
<% end %>
<%!-- Referral Code Field (shown when referral codes are enabled) --%>
<%= if @referral_codes_enabled do %>
<div phx-feedback-for="referral_code">
<.label for="referral_code">
{gettext("Referral Code")}
<%= if @referral_codes_required do %>
*
<% end %>
</.label>
<input
id="referral_code"
name="referral_code"
type="text"
class={[
"input w-full",
(@referral_code_error ||
(@check_errors && @referral_codes_required &&
(is_nil(@referral_code) || @referral_code == ""))) && "input-error"
]}
placeholder={gettext("Enter your referral code")}
value={@referral_code || ""}
required={@referral_codes_required}
/>
<%= if @referral_code_error do %>
<.error>{@referral_code_error}</.error>
<% end %>
</div>
<% end %>
<%!-- Account Type (only when organization accounts enabled) --%>
<%= if @org_accounts_enabled do %>
<div phx-feedback-for="user[account_type]">
<label class="label" for="user_account_type">
<span class="label-text flex items-center">
<.icon name="hero-building-office-2" class="w-4 h-4 mr-2" /> {gettext(
"Account Type"
)}
</span>
</label>
<select
id="user_account_type"
name="user[account_type]"
class="select select-bordered w-full"
>
<option
value="person"
selected={Phoenix.HTML.Form.input_value(@form, :account_type) != "organization"}
>
{gettext("Person")}
</option>
<option
value="organization"
selected={Phoenix.HTML.Form.input_value(@form, :account_type) == "organization"}
>
{gettext("Organization")}
</option>
</select>
</div>
<%!-- Organization Name (only for organization type) --%>
<%= if Phoenix.HTML.Form.input_value(@form, :account_type) == "organization" do %>
<div phx-feedback-for="user[organization_name]">
<label class="label" for="user_organization_name">
<span class="label-text flex items-center">
<.icon name="hero-building-office" class="w-4 h-4 mr-2" /> {gettext(
"Organization Name"
)}
</span>
</label>
<.input
field={@form[:organization_name]}
type="text"
placeholder={gettext("Enter organization name")}
required
/>
</div>
<% end %>
<% end %>
<div phx-feedback-for="user[password]">
<label class="label" for="user_password">
<span class="label-text flex items-center">
<PhoenixKitWeb.Components.Core.Icons.icon_lock class="w-4 h-4 mr-2" /> {gettext(
"Password"
)}
</span>
</label>
<.input
field={@form[:password]}
type="password"
placeholder={gettext("Choose a secure password")}
autocomplete="new-password"
class="transition-colors focus:input-primary"
required
/>
</div>
<button
type="submit"
class="btn btn-primary w-full mt-4 transition-all hover:scale-[1.02] active:scale-[0.98]"
>
<PhoenixKitWeb.Components.Core.Icons.icon_user_add class="w-5 h-5 mr-2" /> {gettext(
"Create account"
)}
<span aria-hidden="true">→</span>
</button>
</fieldset>
</.form>
<%!-- Alternative registration methods --%>
<%!-- Only show this section if at least one alternative method is available --%>
<%= if @magic_link_registration_enabled or PhoenixKit.Users.OAuthAvailability.oauth_available?() do %>
<div class="mt-6">
<div class="relative">
<div class="absolute inset-0 flex items-center">
<div class="w-full border-t border-base-300" />
</div>
<div class="relative flex justify-center text-sm">
<span class="px-2 bg-base-100 text-base-content/60">{gettext("Or continue with")}</span>
</div>
</div>
<div class="mt-4 space-y-2">
<%!-- Magic Link Registration --%>
<%= if @magic_link_registration_enabled do %>
<.link
navigate={Routes.path("/users/register/magic-link")}
class="btn btn-outline w-full transition-all hover:scale-[1.02] active:scale-[0.98] hover:shadow-lg"
>
<PhoenixKitWeb.Components.Core.Icons.icon_email class="w-5 h-5 mr-2" />
{gettext("Register with Magic Link")}
</.link>
<% end %>
<%!-- OAuth authentication --%>
<PhoenixKitWeb.Components.OAuthButtons.oauth_buttons show_divider={false} />
</div>
</div>
<% end %>
<%!-- Login link --%>
<div class="text-center mt-4 text-sm">
<span>{gettext("Already have an account?")}</span>
<.link
navigate={Routes.path("/users/log-in")}
class="font-semibold text-primary hover:underline"
>
{gettext("Sign in")}
</.link>
</div>
</PhoenixKitWeb.Components.AuthPageWrapper.auth_page_wrapper>