The button element now takes an `icon`, so a page gets one by passing icon="name" rather than by hand-rolling its own button markup. Every button on the account and MFA screens carries one; a test walks each page and asserts no button is left bare. Change password: labels dropped (allauth already sets a placeholder on each field), the current password set apart from the new pair, help text kept on the new password, and Forgot Password promoted from a bare link to an accent button. MFA management: recovery-code actions are now ranked -- View is primary, Download and Generate are outline. Generate silently invalidates the codes you already hold, so it must not read as the obvious thing to click. Panel actions get breathing room from the body text (card-actions mt-4). Viewing recovery codes: Download and Generate sit side by side instead of stacking. TOTP activate: the code box loses its heading -- an otp field never takes a visible label, the boxes say what they are -- and the authenticator secret gets margin around it, since it is copied out by hand. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
43 lines
2.0 KiB
HTML
43 lines
2.0 KiB
HTML
{% load allauth %}
|
|
|
|
{% comment %}
|
|
A standalone field that isn't part of a Django form — allauth uses it for the TOTP
|
|
secret and the recovery-code list. Mono, because both are strings people copy
|
|
character by character and must not misread.
|
|
{% endcomment %}
|
|
{{ attrs.errors }}
|
|
<div class="form-control my-6 w-full">
|
|
{% if slots.label %}
|
|
<label class="label" for="{{ attrs.id }}">
|
|
<span class="label-text">{% slot label %}{% endslot %}</span>
|
|
</label>
|
|
{% endif %}
|
|
|
|
{% if attrs.type == "textarea" %}
|
|
<textarea class="textarea textarea-bordered w-full font-mono"
|
|
{% if attrs.required %}required{% endif %}
|
|
{% if attrs.rows %}rows="{{ attrs.rows }}"{% endif %}
|
|
{% if attrs.disabled %}disabled{% endif %}
|
|
{% if attrs.readonly %}readonly{% endif %}
|
|
{% if attrs.name %}name="{{ attrs.name }}"{% endif %}
|
|
{% if attrs.id %}id="{{ attrs.id }}"{% endif %}
|
|
{% if attrs.placeholder %}placeholder="{{ attrs.placeholder }}"{% endif %}>{% slot value %}{% endslot %}</textarea>
|
|
{% else %}
|
|
<input class="input input-bordered w-full font-mono"
|
|
{% if attrs.required %}required{% endif %}
|
|
{% if attrs.disabled %}disabled{% endif %}
|
|
{% if attrs.readonly %}readonly{% endif %}
|
|
{% if attrs.checked %}checked{% endif %}
|
|
{% if attrs.name %}name="{{ attrs.name }}"{% endif %}
|
|
{% if attrs.id %}id="{{ attrs.id }}"{% endif %}
|
|
{% if attrs.placeholder %}placeholder="{{ attrs.placeholder }}"{% endif %}
|
|
{% if attrs.autocomplete %}autocomplete="{{ attrs.autocomplete }}"{% endif %}
|
|
{% if attrs.value is not None %}value="{{ attrs.value }}"{% endif %}
|
|
type="{{ attrs.type }}">
|
|
{% endif %}
|
|
|
|
{% if slots.help_text %}
|
|
<span class="label-text-alt mt-1 block text-base-content/70">{% slot help_text %}{% endslot %}</span>
|
|
{% endif %}
|
|
</div>
|