UNPKG

@vaadin/text-field

Version:
77 lines (67 loc) 2.06 kB
/** * @license * Copyright (c) 2021 - 2025 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)); } };