@scoped-vaadin/login
Version:
vaadin-login
112 lines (103 loc) • 3.67 kB
JavaScript
/**
* @license
* Copyright (c) 2018 - 2024 Vaadin Ltd.
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
*/
import '@scoped-vaadin/button/src/vaadin-lit-button.js';
import '@scoped-vaadin/text-field/src/vaadin-lit-text-field.js';
import '@scoped-vaadin/password-field/src/vaadin-lit-password-field.js';
import './vaadin-lit-login-form-wrapper.js';
import { html, LitElement } from 'lit';
import { ifDefined } from 'lit/directives/if-defined.js';
import { defineCustomElement } from '@scoped-vaadin/component-base/src/define.js';
import { ElementMixin } from '@scoped-vaadin/component-base/src/element-mixin.js';
import { PolylitMixin } from '@scoped-vaadin/component-base/src/polylit-mixin.js';
import { ThemableMixin } from '@scoped-vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
import { LoginFormMixin } from './vaadin-login-form-mixin.js';
/**
* LitElement based version of `<vaadin24-login-form>` web component.
*
* ## Disclaimer
*
* This component is an experiment and not yet a part of Vaadin platform.
* There is no ETA regarding specific Vaadin version where it'll land.
* Feel free to try this code in your apps as per Apache 2.0 license.
*/
class LoginForm extends LoginFormMixin(ElementMixin(ThemableMixin(PolylitMixin(LitElement)))) {
static get is() {
return 'vaadin24-login-form';
}
/**
* @protected
* @override
*/
createRenderRoot() {
return this;
}
/** @protected */
render() {
return html`
<style>
vaadin24-login-form-wrapper > form > * {
width: 100%;
}
</style>
<vaadin24-login-form-wrapper
id="vaadinLoginFormWrapper"
theme="${ifDefined(this._theme)}"
.error="${this.error}"
.i18n="${this.i18n}"
>
<form method="POST" action="${this.action}" @formdata="${this._onFormData}" slot="form">
<input id="csrf" type="hidden" />
<vaadin24-text-field
name="username"
label="${this.i18n.form.username}"
.errorMessage="${this.i18n.errorMessage.username}"
id="vaadinLoginUsername"
required
@keydown="${this._handleInputKeydown}"
autocapitalize="none"
autocorrect="off"
spellcheck="false"
autocomplete="username"
manual-validation
>
<input type="text" slot="input" @keyup="${this._handleInputKeyup}" />
</vaadin24-text-field>
<vaadin24-password-field
name="password"
.label="${this.i18n.form.password}"
.errorMessage="${this.i18n.errorMessage.password}"
id="vaadinLoginPassword"
required
@keydown="${this._handleInputKeydown}"
spellcheck="false"
autocomplete="current-password"
manual-validation
>
<input type="password" slot="input" @keyup="${this._handleInputKeyup}" />
</vaadin24-password-field>
</form>
<vaadin24-button
slot="submit"
theme="primary contained submit"
@click="${this.submit}"
.disabled="${this.disabled}"
>
${this.i18n.form.submit}
</vaadin24-button>
<vaadin24-button
slot="forgot-password"
theme="tertiary small"
@click="${this._onForgotPasswordClick}"
?hidden="${this.noForgotPassword}"
>
${this.i18n.form.forgotPassword}
</vaadin24-button>
</vaadin24-login-form-wrapper>
`;
}
}
defineCustomElement(LoginForm);
export { LoginForm };