<%= form_for @changeset, "#", [
    phx_target: @myself,
    phx_change: "validate",
    phx_submit: "save"
  ], fn f -> %>

  <div class="mb-3" phx-feedback-for="<%= input_id(f, :email)%>">
    <%= label f, :email, class: "form-label" %>
    <div class="input-group has-validation">
      <span class="input-group-text">
        <%= icon_div @socket, "bi-at", [class: "icon"] %>
      </span>
      <%= email_input f, :email,
          value: input_value(f, :email),
          class: input_class(f, :email, "form-control"),
          placeholder: "e.g., babka@73k.us",
          maxlength: User.max_email,
          autofocus: true,
          phx_debounce: "250",
          aria_describedby: error_id(f, :email)
        %>
      <%= error_tag f, :email %>
    </div>
  </div>


  <%= if Roles.can?(@current_user, %User{}, :edit_role) do %>
    <%= label f, :role, class: "form-label" %>
    <div class="input-group mb-3">
      <span class="input-group-text">
        <%= icon_div @socket, "bi-shield-shaded", [class: "icon"] %>
      </span>
      <%= select f, :role, Enum.map(User.roles(), fn {k, v} -> {String.capitalize(Atom.to_string(k)), k} end), class: "form-select" %>
      <span class="valid-feedback text-primary" style="display: block;">
        <%= role_description(input_value(f, :role)) %>
      </span>
    </div>
  <% else %>
    <%= hidden_input f, :role, value: input_value(f, :role) %>
  <% end %>


  <div class="mb-3" phx-feedback-for="<%= input_id(f, :password) %>">
    <%= label f, :password, class: "form-label" %>
    <div class="input-group has-validation">
      <span class="input-group-text">
        <%= icon_div @socket, "bi-key", [class: "icon"] %>
      </span>
      <%= password_input f, :password,
          value: input_value(f, :password),
          class: input_class(f, :password, "form-control"),
          maxlength: User.max_password,
          aria_describedby: error_id(f, :password)
        %>
      <%= error_tag f, :password %>
    </div>
  </div>


  <%= submit "Save",
      class: "btn btn-primary",
      disabled: !@changeset.valid?,
      aria_disabled: !@changeset.valid? && "true" || false,
      phx_disable_with: "Saving..."
    %>

<% end %>