diff --git a/web/app/(app)/dashboard/(components)/api-keys.tsx b/web/app/(app)/dashboard/(components)/api-keys.tsx index 117cf1b..687fae8 100644 --- a/web/app/(app)/dashboard/(components)/api-keys.tsx +++ b/web/app/(app)/dashboard/(components)/api-keys.tsx @@ -236,7 +236,12 @@ export default function ApiKeys() {
- diff --git a/web/app/(app)/dashboard/(components)/black-friday-modal.tsx b/web/app/(app)/dashboard/(components)/black-friday-modal.tsx index 2b7b51f..4a41dc2 100644 --- a/web/app/(app)/dashboard/(components)/black-friday-modal.tsx +++ b/web/app/(app)/dashboard/(components)/black-friday-modal.tsx @@ -117,7 +117,7 @@ export default function BlackFridayModal() {
BLACKFRIDAY40 -
@@ -139,7 +139,7 @@ export default function BlackFridayModal() {
BLACKFRIDAY50 -
diff --git a/web/app/(app)/dashboard/(components)/change-password-form.tsx b/web/app/(app)/dashboard/(components)/change-password-form.tsx index 599f821..277b9e7 100644 --- a/web/app/(app)/dashboard/(components)/change-password-form.tsx +++ b/web/app/(app)/dashboard/(components)/change-password-form.tsx @@ -20,9 +20,11 @@ const changePasswordSchema = z newPassword: z .string() .min(8, { message: 'Password must be at least 8 characters long' }), + // Matches newPassword's floor. At 4 a five-character confirmation failed + // with "Passwords must match" instead of the real length problem. confirmPassword: z .string() - .min(4, { message: 'Please confirm your password' }), + .min(1, { message: 'Please confirm your password' }), }) .superRefine((data, ctx) => { if (data.newPassword !== data.confirmPassword) { @@ -84,14 +86,30 @@ export default function ChangePasswordForm() { >
+ {/* Without autoComplete, password managers cannot tell these three + boxes apart and fill the saved password into the wrong one. */} {changePasswordForm.formState.errors.oldPassword && ( -

+

)} @@ -102,11 +120,25 @@ export default function ChangePasswordForm() { {changePasswordForm.formState.errors.newPassword && ( -

+

)} @@ -117,11 +149,25 @@ export default function ChangePasswordForm() { {changePasswordForm.formState.errors.confirmPassword && ( -

+

)} diff --git a/web/app/(app)/dashboard/(components)/delete-account-form.tsx b/web/app/(app)/dashboard/(components)/delete-account-form.tsx index 04467bc..c43aaf9 100644 --- a/web/app/(app)/dashboard/(components)/delete-account-form.tsx +++ b/web/app/(app)/dashboard/(components)/delete-account-form.tsx @@ -120,60 +120,77 @@ export default function DeleteAccountForm() { Delete Account + {/* Description holds prose only. The form controls used to live + inside it, and Radix points the dialog's aria-describedby here, + so opening the dialog read the labels, placeholders and all + back as one long description string. */}

Are you sure you want to delete your account? This action:

-
    +
    • Cannot be undone
    • Will permanently delete all your data
    • Will cancel all active subscriptions
    • Will remove access to all services
    + + +
    +
    + {/* htmlFor pointed at an id this field never had, so the label + was decorative and the textarea was announced unlabelled. */}