Password Field
Password input with a visibility toggle, Caps Lock detection, and a pluggable strength meter.
|
|
| Package |
@vizejs/ui/password-field |
| Maturity |
stable |
| Own the source |
vize lib pull password-field |
| Requires |
context, controllable-state, id |
| Aliases |
password input, show password, reveal password, caps lock warning, password strength |
| Covers |
HTML password input, WAI-ARIA Button (pressed), Chakra PasswordInput |
Usage
import { PasswordField, PasswordFieldInput, PasswordFieldToggle } from "@vizejs/ui/password-field";
Or copy the source into your project with vize lib pull password-field (see Source Distribution).
API
PasswordField<Strength>
Source: src/families/form/password-field/password-field.vue
Props
| Prop |
Type |
Default |
Description |
id |
string | null |
undefined |
Id of the password input. null and undefined select a deterministic fallback. |
name |
string |
undefined |
Native form field name of the password input. |
modelValue |
string |
undefined |
Controlled password. undefined selects uncontrolled behavior. |
defaultValue |
string |
"" |
Initial uncontrolled password, also restored by form reset. |
visible |
boolean |
undefined |
Controlled visibility (v-model:visible). undefined selects uncontrolled behavior. |
defaultVisible |
boolean |
false |
Initial uncontrolled visibility. |
evaluateStrength |
(value: string) => Strength |
undefined |
Strength meter hook; its return type becomes the slot's strength. Pass estimatePasswordStrength or any custom evaluator. |
autocomplete |
string |
"current-password" |
Native autocomplete token: "current-password" for sign-in, "new-password" for sign-up. |
disabled |
boolean |
false |
Disable editing, the toggle, and native form submission. |
readOnly |
boolean |
false |
Keep the input focusable while preventing edits. |
required |
boolean |
false |
Mark the input as required for native constraint validation. |
ariaLabel |
string |
undefined |
Accessible name of the input when no label or aria-labelledby supplies one. |
ariaLabelledby |
string |
undefined |
Space-separated ids that label the input. |
ariaDescribedby |
string |
undefined |
Space-separated ids that describe the input. |
ariaErrormessage |
string |
undefined |
Id of the validation error message used while invalid. |
ariaInvalid |
PasswordFieldAriaInvalid |
false |
Invalid state announced to assistive technology. |
Events
| Event |
Payload |
Description |
update:modelValue |
[value: string] |
Fired when the password requests a new controlled value. |
update:visible |
[visible: boolean] |
Fired when visibility requests a new controlled value (v-model:visible). |
capsLockChange |
[active: boolean] |
Fired when Caps Lock turns on or off while typing in the input. |
Slots
| Slot |
Slot props |
Description |
default |
PasswordFieldSlotState<Strength> |
Renders the input, toggle, and any hints with visibility, Caps Lock, and strength state. |
Exposed
| Member |
Type |
Description |
value |
string |
Current password. |
visible |
boolean |
Whether the password is shown as plain text. |
capsLock |
boolean |
Whether Caps Lock was on at the last key event inside the input. |
strength |
Strength | undefined |
Result of evaluateStrength, or undefined when no evaluator is supplied. |
disabled |
boolean |
Whether editing is disabled. |
readOnly |
boolean |
Whether edits are locked while focus remains available. |
state |
PasswordFieldState |
Stable state token. |
root |
HTMLDivElement | null |
Rendered root element. |
focus |
(options?: FocusOptions) => void |
Focus the password input. |
setVisible |
(visible: boolean) => boolean |
Show or hide the password; returns whether visibility changed. |
toggleVisible |
() => boolean |
Toggle visibility; returns the new visibility. |
setValue |
(value: string) => boolean |
Replace the password; returns whether it changed. |
reset |
() => void |
Restore the default password and visibility. |
Source: src/families/form/password-field/password-field-input.vue
Props
| Prop |
Type |
Default |
Description |
placeholder |
string |
undefined |
Native placeholder shown while empty. |
minlength |
number |
undefined |
Native minimum length for constraint validation. |
maxlength |
number |
undefined |
Native maximum length. |
PasswordFieldToggle
Source: src/families/form/password-field/password-field-toggle.vue
Props
| Prop |
Type |
Default |
Description |
showLabel |
string |
"Show password" |
Accessible name while the password is hidden. |
hideLabel |
string |
"Hide password" |
Accessible name while the password is visible. |
Slots
| Slot |
Slot props |
Description |
default |
{ readonly visible: boolean } |
Toggle contents, typically an eye icon, with the current visibility. |
Behavior
Normative state x input -> outcome table for password-field.vue,
password-field-input.vue, and password-field-toggle.vue
(@vizejs/ui/password-field). The root is generic over the strength hook's
return type. Every row is proven by the named test in password-field.test.ts
or password-field-ssr.test.ts; compile-only assertions live in
password-field.types.test-d.ts.
| # |
State |
Input |
Outcome |
Proven by |
| P1 |
any password |
estimatePasswordStrength |
0-4 score and label from length and character variety; short passwords capped at "weak"; Unicode-aware checks |
scores length and character variety with a dependency-free heuristic |
| P2 |
named, seeded |
render |
native type="password" with current-password autocomplete, no autocapitalize/spellcheck, and a type="button" toggle with aria-pressed |
renders a native password input with sign-in autocomplete and a toggle |
| P3 |
hidden |
toggle press |
pointer press keeps focus in the input; toggling swaps type, aria-pressed, the toggle label, and data-state, emitting update:visible |
the toggle reveals and hides the password while keeping focus in the input |
| P4 |
controlled |
toggle / typing |
controlled visible and modelValue win until the parent accepts them |
controlled visibility and value win until the parent accepts them |
| P5 |
typing |
key events / blur |
Caps Lock state follows getModifierState("CapsLock"), publishes data-caps-lock, emits capsLockChange, and clears on blur |
detects Caps Lock from key events and clears it on blur |
| P6 |
strength hook |
typing |
evaluateStrength runs on every change and types the slot's strength; without it strength is undefined |
the strength hook evaluates every change and types the slot |
| P7 |
in a form |
reset |
form reset restores defaultValue and hides the password |
form reset restores the password and hides it again |
| P8 |
disabled/read-only |
typing / toggle |
disabled locks input and toggle; read-only keeps the value but still allows revealing it |
disabled and read-only fields lock editing and the toggle appropriately |
| P9 |
imperative |
expose |
focus, setValue, setVisible, toggleVisible, reset |
exposes focus, setValue, setVisible, toggleVisible, and reset |
| P10 |
inside Field |
v-bind="fieldProps" |
id and ARIA relations reach the input; parts outside a PasswordField throw VIZE_UI_CONTEXT_MISSING |
binds Field fieldProps and requires a PasswordField provider for parts |
| P11 |
SSR / hydration |
isolated requests |
byte-identical markup including slot-rendered strength, hydration without diagnostics, interactive toggle |
renders byte-identical password markup and hydrates without mismatches |
Public extension contract
| Surface |
Contract |
| Parts |
root, input, toggle. |
| Data attributes |
data-vize-ui, root data-state (hidden/visible/readonly/disabled), data-visible, data-caps-lock. |
| Slots |
Root default slot receives PasswordFieldSlotState<Strength>; toggle slot receives { visible }. |
The subpath is tree-shakable and ships no CSS; those package contracts are
pinned by distribution.test.ts, check:size, and check:tree-shaking.