diff --git a/components/email/__tests__/recipient-autocomplete.test.tsx b/components/email/__tests__/recipient-autocomplete.test.tsx index df689f62a..97c1eb937 100644 --- a/components/email/__tests__/recipient-autocomplete.test.tsx +++ b/components/email/__tests__/recipient-autocomplete.test.tsx @@ -208,6 +208,12 @@ const settle = () => act(() => new Promise((r) => setTimeout(r, 300))); describe('recipient autocomplete', () => { beforeEach(() => { vi.clearAllMocks(); }); + it('is a search field, which Bitwarden never offers to fill', () => { + // data-bwignore only works when the user opted in to it in Bitwarden. + render(); + expect(toInput()).toHaveAttribute('type', 'search'); + }); + it('does not reopen the suggestions after a typed address was committed', async () => { render(); const input = toInput(); diff --git a/components/email/email-composer.tsx b/components/email/email-composer.tsx index 0ed3b5824..812ec48b6 100644 --- a/components/email/email-composer.tsx +++ b/components/email/email-composer.tsx @@ -4416,7 +4416,9 @@ function RecipientChipInput({ {isEditing ? ( setEditValue(e.target.value)} onKeyDown={(e) => { @@ -4436,7 +4438,7 @@ function RecipientChipInput({ } handleSaveEdit(editValue); }} - className="flex-1 min-w-[80px] border-0 outline-none h-5 text-sm bg-transparent text-foreground placeholder:text-muted-foreground" + className="flex-1 min-w-[80px] border-0 outline-none h-5 text-sm bg-transparent text-foreground placeholder:text-muted-foreground [&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none" placeholder={editingChip?.editType === 'email' ? t('recipient_email_placeholder') : t('recipient_name_placeholder')} data-bwignore="true" /> @@ -4480,16 +4482,22 @@ function RecipientChipInput({ /> )} {!editingChip && ( + // type="search": Bitwarden skips search fields unconditionally, but + // honours data-bwignore only when the user opted in, so its inline + // menu offered logins for the "E-Mail" placeholder. The other + // data-* attributes cover 1Password, LastPass and Dashlane. 0} aria-autocomplete="list"