Skip to content

<np-passkey-register>

A button component to register a new passkey for the user.

Properties

NameFormatRequiredDefaultDescription
stateStateNoundefinedThe component’s internal state.
enum State {
REGISTERING = "registering", // Registering the passkey
REGISTERED = "registered", // Passkey has been registered
ERROR = "error", // An error occurred
}

Methods

NameDescription
register()Starts the registration flow programmatically.
cancel()Cancels the registration flow.

Custom Events

NameDescriptionType
np:registerThe passkey has been registered.RegisterEvent
np:errorAn error occurred.NoPwdError

The np:register custom event detail is defined as follows:

interface RegisterEvent {
kid: string; // The passkey's ID
}

The np:error custom event detail inherits from NoPwdError. There are four types of errors:

if (event.detail instanceof WebauthnNotSupportedError) {
// This browser doesn't support WebAuthn
}
if (event.detail instanceof InvalidTokenError) {
// The provided token is invalid (malformed or expired)
}
if (event.detail instanceof NetworkError) {
// No network connection
}
if (event.detail instanceof UnexpectedError) {
// An unexpected error occurred
}

Slots

NameDescription
(default)The button’s label.
registeringPasskey registration in progress.
registeredPasskey has been registered.
errorAn error occurred.

Usage:

<!-- To override the default slot -->
<np-passkey-register>Login</np-passkey-register>
<!-- To override specific slots -->
<np-passkey-register>
Login
<span slot="registering">Please wait...</span>
<span slot="registered">Done!</span>
<span slot="error">Oops!</span>
</np-passkey-register>

Parts

NameDescription
buttonThe component’s button wrapper.

Usage:

/* To target only the default state */
np-passkey-register:not([state])::part(button) {
background-color: black;
color: white;
}
np-passkey-register[state="registering"]::part(button) {
background-color: transparent;
color: grey;
}
np-passkey-register[state="error"]::part(button) {
background-color: red;
color: white;
}