package.src.vaadin-text-field-mixin.js Maven / Gradle / Ivy
/**
* @license
* Copyright (c) 2021 - 2024 Vaadin Ltd.
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
*/
import { InputController } from '@vaadin/field-base/src/input-controller.js';
import { InputFieldMixin } from '@vaadin/field-base/src/input-field-mixin.js';
import { LabelledInputController } from '@vaadin/field-base/src/labelled-input-controller.js';
/**
* A mixin providing common text field functionality.
*
* @polymerMixin
* @mixes InputFieldMixin
*/
export const TextFieldMixin = (superClass) =>
class TextFieldMixinClass extends InputFieldMixin(superClass) {
static get properties() {
return {
/**
* Maximum number of characters (in Unicode code points) that the user can enter.
*/
maxlength: {
type: Number,
},
/**
* Minimum number of characters (in Unicode code points) that the user can enter.
*/
minlength: {
type: Number,
},
/**
* A regular expression that the value is checked against.
* The pattern must match the entire value, not just some subset.
*/
pattern: {
type: String,
},
};
}
static get delegateAttrs() {
return [...super.delegateAttrs, 'maxlength', 'minlength', 'pattern'];
}
static get constraints() {
return [...super.constraints, 'maxlength', 'minlength', 'pattern'];
}
constructor() {
super();
this._setType('text');
}
/** @protected */
get clearElement() {
return this.$.clearButton;
}
/** @protected */
ready() {
super.ready();
this.addController(
new InputController(this, (input) => {
this._setInputElement(input);
this._setFocusElement(input);
this.stateTarget = input;
this.ariaTarget = input;
}),
);
this.addController(new LabelledInputController(this.inputElement, this._labelController));
}
};