fix(ui): tell Bitwarden to skip config and secret fields

The Input and Textarea primitives already opted config and secret fields
out of 1Password and LastPass autofill (data-1p-ignore / data-lpignore)
whenever autocomplete was off, but Bitwarden had no opt-out hint anywhere,
so it kept offering to fill and save API keys, tokens and integration
URLs. Emit data-bwignore alongside the existing hints, which covers every
field flowing through the primitives. Pin explicit autocomplete on the
change-password dialog so genuine credentials still autofill, and add the
ignore hints to the export passphrase and the few new-password admin
config fields that opt in directly.
This commit is contained in:
Marc-André Bombeck committed 2026-06-30 18:32:35 +02:00
1 parent 8ce98a802f
commit fa2e2c6ba2
9 files changed
+31 -3

No files matched your search

@@ -9,6 +9,7 @@ describe("<Input>", () => {
expect(html).toContain('autoComplete="off"');
expect(html).toContain('data-lpignore="true"');
expect(html).toContain('data-1p-ignore="true"');
expect(html).toContain('data-bwignore="true"');
});
it("respects an explicit autoComplete value and drops the ignore attrs", () => {
@@ -18,6 +19,7 @@ describe("<Input>", () => {
expect(html).toContain('autoComplete="email"');
expect(html).not.toContain('data-lpignore="true"');
expect(html).not.toContain('data-1p-ignore="true"');
expect(html).not.toContain('data-bwignore="true"');
});
it("explicit autoComplete=username keeps password manager active for login flows", () => {
@@ -27,6 +29,7 @@ describe("<Input>", () => {
expect(html).toContain('autoComplete="username"');
expect(html).not.toContain("lpignore");
expect(html).not.toContain("1p-ignore");
expect(html).not.toContain("bwignore");
});
it("derives inputMode=decimal from type=number", () => {
@@ -21,6 +21,7 @@ describe("<Textarea>", () => {
expect(html).toContain('autoComplete="off"');
expect(html).toContain('data-lpignore="true"');
expect(html).toContain('data-1p-ignore="true"');
expect(html).toContain('data-bwignore="true"');
});
it("defaults autoCapitalize to sentences for prose-like free-text input", () => {
@@ -51,6 +52,7 @@ describe("<Textarea>", () => {
expect(html).toContain('autoComplete="on"');
expect(html).not.toContain('data-lpignore="true"');
expect(html).not.toContain('data-1p-ignore="true"');
expect(html).not.toContain('data-bwignore="true"');
});
it("merges caller className via cn() without dropping defaults", () => {