File: password-toggle-field.md | Updated: 11/15/2025
ThemesThemes PrimitivesPrimitives IconsIcons ColorsColors
Documentation Case studies Blog
Search
/
Introduction Getting started Accessibility Releases
Styling Animation Composition Server-side rendering
Accordion
Alert Dialog
Aspect Ratio
Avatar
Checkbox
Collapsible
Context Menu
Dialog
Dropdown Menu
Form
Preview
Hover Card
Label
Menubar
Navigation Menu
One-Time Password Field
Preview
Password Toggle Field
Preview
Popover
Progress
Radio Group
Scroll Area
Select
Separator
Slider
Switch
Tabs
Toast
Toggle
Toggle Group
Toolbar
Tooltip
Accessible Icon Direction Provider Portal Slot Visually Hidden
Components
A password input field with an integrated button to toggle the value's visibility.
index.jsxindex.jsxstyles.cssstyles.css
CSS
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<br><br>Prop description | string | No default value |
| visible<br><br>Prop description | boolean | No default value |
| defaultVisible<br><br>Prop description | boolean | No default value |
| onVisiblityChange<br><br>Prop description | function<br><br>See full type | No default value |
Renders a the input containing the password value.
| Prop | Type | Default |
| --- | --- | --- |
| asChild<br><br>Prop description | boolean | false |
| autoComplete<br><br>Prop description | enum<br><br>See full type | "current-password" |
| Prop | Type | Default |
| --- | --- | --- |
| asChild<br><br>Prop description | boolean | false |
| Prop | Type | Default |
| --- | --- | --- |
| render<br><br>Prop description | function<br><br>See full type | No default value |
| visible<br><br>Prop description | boolean | No default value |
| hidden<br><br>Prop description | boolean | No default value |
| Prop | Type | Default |
| --- | --- | --- |
| asChild<br><br>Prop description | boolean | false |
| visible*<br><br>Prop description | boolean | No default value |
| hidden*<br><br>Prop description | boolean | No default value |
<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>
PreviousOne-Time Password Field
NextPopover