# PasswordInput A password field with a built-in show/hide visibility toggle on the right. It carries the same Input wrapper as [TextInput](/components/inputs/textinput/) — label, description, error, `leftSection` — plus `defaultVisible` to start the field revealed. The toggle button occupies the right section, so only `leftSection` is exposed. Use it as `{% passwordinput %}` in Markdown, or call it from Python logic (loops, snippets) via `component('aardvark', 'passwordinput', …)`. ## Basic field A label and a placeholder; click the eye icon to reveal the value.
Source: Markdown ```aardvark {% passwordinput label='Password' placeholder='Your password' %} ``` Source: Python ```python component('aardvark', 'passwordinput', label='Password', placeholder='Your password') ``` ## Start revealed `defaultVisible` opens the field with the value shown — handy for an API key or token the reader needs to copy.
Source: Markdown ```aardvark {% passwordinput label='API key' defaultVisible=true defaultValue='sk-demo-1234' %} ``` Source: Python ```python component('aardvark', 'passwordinput', label='API key', defaultVisible=True, defaultValue='sk-demo-1234') ``` ## Required, asterisk, and error `required` and `withAsterisk` add the asterisk; `error` shows a validation message and switches the field to the error color.
Source: Markdown ```aardvark {% passwordinput label='New password' required=true placeholder='8+ characters' %} {% passwordinput label='Confirm password' withAsterisk=true placeholder='Repeat it' %} {% passwordinput label='New password' error='Too weak — add a number' placeholder='8+ characters' %} ``` Source: Python ```python component('aardvark', 'passwordinput', label='New password', required=True, placeholder='8+ characters') component('aardvark', 'passwordinput', label='Confirm password', withAsterisk=True, placeholder='Repeat it') component('aardvark', 'passwordinput', label='New password', error='Too weak — add a number', placeholder='8+ characters') ``` ## Disabled `disabled` greys the control out.
Source: Markdown ```aardvark {% passwordinput label='Vault password' disabled=true defaultValue='locked' %} ``` Source: Python ```python component('aardvark', 'passwordinput', label='Vault password', disabled=True, defaultValue='locked') ``` ## Variants, size, radius, and section `variant` is `default`, `filled`, or `unstyled`; `size` and `radius` take `xs`–`xl`; `leftSection` adds text before the value (the right side holds the toggle).
Source: Markdown ```aardvark {% passwordinput label='Filled' variant='filled' placeholder='filled variant' %} {% passwordinput label='Large, round' size='lg' radius='xl' placeholder='lg / xl radius' %} {% passwordinput label='PIN' leftSection='🔒' placeholder='Enter PIN' %} ``` Source: Python ```python component('aardvark', 'passwordinput', label='Filled', variant='filled', placeholder='filled variant') component('aardvark', 'passwordinput', label='Large, round', size='lg', radius='xl', placeholder='lg / xl radius') component('aardvark', 'passwordinput', label='PIN', leftSection='🔒', placeholder='Enter PIN') ``` ## With other components Build a sign-in form with a [TextInput](/components/inputs/textinput/) and a password field inside a {% card %}.
Source: Markdown ```aardvark {% card title='Sign in' %} {% textinput label='Email' type='email' placeholder='you@example.com' required=true %} {% passwordinput label='Password' placeholder='Your password' required=true %} {% endCard %} ``` Source: Python ```python email = component('aardvark', 'textinput', label='Email', type='email', placeholder='you@example.com', required=True) pw = component('aardvark', 'passwordinput', label='Password', placeholder='Your password', required=True) component('aardvark', 'card', title='Sign in', children=email + pw) ``` ## Attributes Omit any attribute to take its Mantine default. | Attribute | Valid values | Description | | --- | --- | --- | | `label` | string | Field label above the input. | | `description` | string | Helper text below the label. | | `placeholder` | string | Placeholder shown when the field is empty. | | `error` | string | Validation message below the field; switches it to the error color. | | `defaultValue` | string | Initial value of the field. | | `defaultVisible` | bool (`true` / `false`) | Start with the value revealed instead of masked. | | `variant` | `default`, `filled`, `unstyled` | Visual style of the input. | | `size` | `xs`, `sm`, `md`, `lg`, `xl` | Control size. | | `radius` | `xs`, `sm`, `md`, `lg`, `xl`, or any CSS length | Corner radius. | | `required` | bool (`true` / `false`) | Mark the field required and add the asterisk. | | `withAsterisk` | bool (`true` / `false`) | Add the asterisk without the HTML `required` attribute. | | `disabled` | bool (`true` / `false`) | Render the field disabled. | | `leftSection` | string | Text shown inside the field, before the value (the right side holds the visibility toggle). | ## CSS Selectors Target a `{% passwordinput %}` from your own CSS with the island data attribute or the Mantine Styles API part classes: ```css /* Every PasswordInput instance on the page */ [data-aardvark-island="PasswordInput"] { } /* Mantine Styles API parts */ .mantine-PasswordInput-root { } .mantine-PasswordInput-innerInput { } .mantine-PasswordInput-visibilityToggle { } ``` ## Injecting Attributes Pass `attr={…}` to forward raw HTML attributes — including inline event handlers — straight onto the rendered element. Here it is wired to `onchange`, so changing the field logs its new value to the console and alerts it. For a password field that's a demonstration only — never log or transmit a real password value in production:
Source: Markdown ```aardvark {% passwordinput label='Password' placeholder='Your password' attr={'onchange': ''' const value = this.value; console.log('attr demo value:', value); alert(value); '''} %} ``` Source: Python ```python component('aardvark', 'passwordinput', label='Password', placeholder='Your password', attr={'onchange': ''' const value = this.value; console.log('attr demo value:', value); alert(value); '''}) ```