A password input field with an integrated button to toggle the value's visibility.
import * as React from "react";import { unstable_PasswordToggleField as PasswordToggleField } from "radix-ui";import { EyeClosedIcon, EyeOpenIcon } from "@radix-ui/react-icons";const PasswordToggleFieldDemo = () => (<PasswordToggleField.Root><div className="Root"><PasswordToggleField.Input className="Input" /><PasswordToggleField.Toggle className="Toggle"><PasswordToggleField.Icon visible={<EyeOpenIcon />} hidden={<EyeClosedIcon />} /></PasswordToggleField.Toggle></div></PasswordToggleField.Root>);export default PasswordToggleFieldDemo;
Returns focus to the input when toggling with a pointer
Maintains button focus when toggling with keyboard or virtual navigation
Resets visibility to hidden after form submission to prevent accidental storage
Implicit accessible labeling for icon-based toggle buttons
Import all parts and piece them together.
import { unstable_PasswordToggleField as PasswordToggleField } from "radix-ui";
import { EyeClosedIcon, EyeOpenIcon } from "@radix-ui/react-icons";
export default () => (
<PasswordToggleField.Root>
<PasswordToggleField.Input />
<PasswordToggleField.Toggle>
<PasswordToggleField.Icon
visible={<EyeOpenIcon />}
hidden={<EyeClosedIcon />}
/>
</PasswordToggleField.Toggle>
</PasswordToggleField.Root>
);
Contains all the parts of a password toggle field.
Prop | Type | Default |
---|---|---|
id | string | |
visible | boolean | |
defaultVisible | boolean | |
onVisiblityChange | function |
Renders a the input containing the password value.
Prop | Type | Default |
---|---|---|
asChild | boolean | false |
autoComplete | enum | "current-password" |
Prop | Type | Default |
---|---|---|
asChild | boolean | false |
Prop | Type | Default |
---|---|---|
render | function | |
visible | boolean | |
hidden | boolean |
Prop | Type | Default |
---|---|---|
asChild | boolean | false |
visible* | boolean | |
hidden* | boolean |
<PasswordToggleField.Root>
<PasswordToggleField.Input />
<PasswordToggleField.Toggle>
<PasswordToggleField.Icon
visible={<EyeOpenIcon />}
hidden={<EyeClosedIcon />}
/>
</PasswordToggleField.Toggle>
</PasswordToggleField.Root>
Slot
<PasswordToggleField.Root>
<PasswordToggleField.Input />
<PasswordToggleField.Toggle>
<PasswordToggleField.Slot visible="🙊" hidden="🙈" />
</PasswordToggleField.Toggle>
</PasswordToggleField.Root>
Slot
+ render
prop<PasswordToggleField.Root>
<PasswordToggleField.Input />
<PasswordToggleField.Toggle>
<PasswordToggleField.Slot
render={({ visible }) => (
<svg aria-hidden viewBox="0 0 2 2" xmlns="http://www.w3.org/2000/svg">
<path d={visible ? "M1 1 L2 2" : "M2 1 L1 2"} />
</svg>
)}
/>
</PasswordToggleField.Toggle>
</PasswordToggleField.Root>