📄 radixui/primitives/docs/components/password-toggle-field

File: password-toggle-field.md | Updated: 11/15/2025

Source: https://www.radix-ui.com/primitives/docs/components/password-toggle-field

Radix Homepage

Made by WorkOS

Radix Homepage

Made by WorkOS

ThemesThemes PrimitivesPrimitives IconsIcons ColorsColors

Documentation Case studies Blog

Search

/

Overview

Introduction Getting started Accessibility Releases

Guides

Styling Animation Composition Server-side rendering

Components

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

Utilities

Accessible Icon Direction Provider Portal Slot Visually Hidden

Components

Password Toggle Field

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;

Features

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

Anatomy


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>
);

API Reference


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 |

Input

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" |

Toggle

| Prop | Type | Default | | --- | --- | --- | | asChild<br><br>Prop description | boolean | false |

Slot

| 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 |

Icon

| 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 |

Examples


Basic usage

<PasswordToggleField.Root>
	<PasswordToggleField.Input />
	<PasswordToggleField.Toggle>
		<PasswordToggleField.Icon
			visible={<EyeOpenIcon />}
			hidden={<EyeClosedIcon />}
		/>
	</PasswordToggleField.Toggle>
</PasswordToggleField.Root>

With Slot

<PasswordToggleField.Root>
	<PasswordToggleField.Input />
	<PasswordToggleField.Toggle>
		<PasswordToggleField.Slot visible="🙊" hidden="🙈" />
	</PasswordToggleField.Toggle>
</PasswordToggleField.Root>

With 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

Edit this page on GitHub.