# PasswordInput
A password field with a button that shows and hides what was typed.
```ehtml Example
import { PasswordInput } from "@elements/ui/password-input";
```
## Parts
| Part | What it is |
|---|---|
| `.password-input` | The root. |
| `.password-input-input` | The native input, in the Input chrome. |
| `.password-input-toggle` | The show and hide button. |
| `.password-input-indicator` | The icon inside the toggle. |
## Attributes
| Attribute | Type | Default | Description |
|---|---|---|---|
| `value` | `string` (two-way) | `""` | The password. |
| `visible` | `boolean` (two-way) | `false` | Shows the password as text. |
| `autocomplete` | `"current-password" \| "new-password" \| "off"` | `"current-password"` | Tells password managers whether to fill or to suggest a new password. |
| `ignorePasswordManagers` | `boolean` | `false` | Asks 1Password, LastPass, Bitwarden, Dashlane and Proton Pass to leave the field alone (API keys, PINs). |
| `size` | `"sm" \| "md" \| "lg"` | `"md"` | Height and type size from the control tokens. |
| `placeholder` | `string` | `""` | Shown while empty. |
| `name` | `string` | `""` | Submits the value with its form. |
| `disabled` | `boolean` | `false` | Not interactive. |
| `readonly` | `boolean` | `false` | Not editable; the toggle still reveals it. |
| `required` | `boolean` | `false` | The form will not submit while empty. |
| `invalid` | `boolean` | `false` | Marks the input invalid. |
| `showLabel` | `string` | `"Show password"` | The toggle's name while hidden. |
| `hideLabel` | `string` | `"Hide password"` | The toggle's name while visible. |
| `class` | `string` | `""` | Extra classes on the root. |
| `attrs` | `Record` | `{}` | Attributes for the input: id, aria-label, minlength, pattern, data-\*. |
| `oninput` | `(e: InputEvent) => void` | `() => {}` | The input's input event. |
| `onchange` | `(e: Event) => void` | `() => {}` | The input's change event. |
| `onVisibilityChange` | `(details: { visible: boolean }) => void` | `() => {}` | When the toggle shows or hides the password. |
## Slots
| Slot | Content |
|---|---|
| `visibleIcon` | The toggle's icon while the password is visible. Default: eye. |
| `hiddenIcon` | The toggle's icon while it is hidden. Default: eye-off. |
## Keyboard
| Keys | Action |
|---|---|
| `Tab` | Moves from the input to the toggle. |
| `Enter / Space` | On the toggle: shows or hides the password and returns focus to the input. |
## Data attributes
| Attribute | Values | On |
|---|---|---|
| `data-state` | `"visible" \| "hidden"` | root, input, toggle, indicator |
| `data-disabled` | present when disabled | root, input, toggle, indicator |
| `data-invalid` | present when invalid | root, input, indicator |
| `data-readonly` | present when read-only | root, input, toggle, indicator |
## Accessibility
- The toggle is named Show password or Hide password, points at the input with aria-controls, and sets aria-expanded while the password shows.
- The toggle stays in the tab order so a keyboard user can reveal the password; a click keeps focus and the caret in the input.
- It is a native password input, so password managers, autofill and form validation work.
## See also
- [Slider](slider): Pick a value or a range by dragging thumbs along a track, with full keyboard support.
- [NumberInput](number-input): A number field with stepper buttons, keyboard steps, formatting, wheel and scrub.
- [InputOTP](input-otp): A one-time code in separate slots, with paste, SMS autofill and a pattern.
- [TagsInput](tags-input): Type a list of tags into one field: add, edit, delete and paste them from the keyboard.
- [ColorPicker](color-picker): Pick a color with an area, channel sliders, inputs, swatches and the eye dropper.
- [FileUpload](file-upload): Drop, paste or browse for files; see them listed with previews, sizes, errors and progress.