Skip to content

Commit e264fbb

Browse files
Disable aria-autocomplete (#139)
Some browsers like Edge bypass the auto-complete feature via Password Managers, Wallets etc. This PR aims to totally disable autofill values stored in the user's browser
1 parent 38173c7 commit e264fbb

4 files changed

Lines changed: 12 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Fixed
11+
12+
- hide all browser user profile suggestions when `autoComplete` is set to `off`
13+
1014
## [3.7.0] - 2025-07-08
1115

1216
### Added

src/lib/Form.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,12 @@ const Form = <T extends FieldValues>({
7575
? (JSON.parse(JSON.stringify(defaultValues), jsonIsoDateReviver) as DeepPartial<T>)
7676
: defaultValues;
7777

78+
const disableAriaAutocomplete = autoComplete === "off";
7879
const formMethods = useForm<T>({ resolver, defaultValues: revivedDefaultValues });
7980
const autoSubmitHandler = useAutoSubmit({ onSubmit, formMethods, autoSubmitConfig });
8081

8182
return (
82-
<FormContext.Provider value={{ requiredFields, disabled, hideValidationMessages, ...formMethods }}>
83+
<FormContext.Provider value={{ requiredFields, disabled, hideValidationMessages, disableAriaAutocomplete, ...formMethods }}>
8384
<form
8485
ref={(elem) => {
8586
if (formRef) {
@@ -90,7 +91,9 @@ const Form = <T extends FieldValues>({
9091
method="POST"
9192
autoComplete={autoComplete}
9293
>
93-
{children instanceof Function ? children({ ...formMethods, disabled, requiredFields, hideValidationMessages }) : children}
94+
{children instanceof Function
95+
? children({ ...formMethods, disabled, requiredFields, hideValidationMessages, disableAriaAutocomplete })
96+
: children}
9497
</form>
9598
</FormContext.Provider>
9699
);

src/lib/components/Input/InputInternal.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const InputInternal = <T extends FieldValues>(props: InputProps<T>) => {
3737
register,
3838
formState: { errors },
3939
disabled: formDisabled,
40+
disableAriaAutocomplete,
4041
} = useFormContext();
4142

4243
const { ref, ...rest } = register(name, {
@@ -59,6 +60,7 @@ const InputInternal = <T extends FieldValues>(props: InputProps<T>) => {
5960
}
6061
ref(elem);
6162
}}
63+
aria-autocomplete={disableAriaAutocomplete ? "none" : undefined}
6264
min={rangeMin}
6365
max={rangeMax}
6466
minLength={minLength}

src/lib/context/FormContext.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export interface FormContextProps<T extends FieldValues> extends UseFormReturn<T
55
requiredFields: FieldPath<T>[];
66
disabled: boolean;
77
hideValidationMessages: boolean;
8+
disableAriaAutocomplete: boolean;
89
}
910

1011
// eslint-disable-next-line @typescript-eslint/no-explicit-any

0 commit comments

Comments
 (0)