PasswordInput
Reusable password input component.
Usage
Components are auto-discovered. Use the component directly in any .wrn view:
<PasswordInput
id="password"
name="password"
label="Password"
value="value"
placeholder="Enter your password"
/>Legacy mount name: data-component="PasswordInput".
Props and attributes
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "password" |
name | string | Optional | "password" |
label | string | Optional | "Password" |
value | string | Optional | "" |
placeholder | string | Optional | "Enter your password" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "current-password" |
revealable | boolean | Optional | true |
Slots
This component does not declare a slot.
Events
click
Source contract
Installed source: components/PasswordInput.wrn
component PasswordInput {
props {
class = ""
id = "password"
name = "password"
label = "Password"
value = ""
placeholder = "Enter your password"
help = ""
error = ""
required = false
disabled = false
readonly = false
autocomplete = "current-password"
revealable = true
}
state visible = false
view {
<div class="wire-auth-field {class}">
<label for="{id}" class="wire-label">{label}{#if required}<span class="wire-required"> *</span>{/if}</label>
<div class="wire-auth-field__control">
<span class="wire-auth-field__icon icon-[lucide--lock-keyhole]" aria-hidden="true">
</span>
<input id="{id}" name="{name}" type="{visible ? 'text' : 'password'}" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{error ? 'true' : 'false'}" aria-describedby="{id}-help {id}-error" class="wire-input wire-auth-field__input" />
{#if revealable}<button type="button" @click="visible = !visible" aria-label="{visible ? 'Hide password' : 'Show password'}" aria-pressed="{visible}" class="wire-auth-field__toggle">
<span class="{visible ? 'icon-[lucide--eye-off]' : 'icon-[lucide--eye]'} size-5" aria-hidden="true">
</span>
</button>{/if}
</div>
{#if help && !error}<p id="{id}-help" class="wire-field-message wire-field-message--help">{help}</p>{/if}
{#if error}<p id="{id}-error" role="alert" class="wire-field-message wire-field-message--error">{error}</p>{/if}
</div>
}
}