/** @license Copyright (c) 2024 trading_peter This program is available under Apache License Version 2.0 */ import { FormElement } from '@tp/helpers/form-element.js'; import { DomQuery } from '@tp/helpers/dom-query.js'; import { ControlState } from '@tp/helpers/control-state.js'; import { LitElement, html, css } from 'lit'; class TpTextarea extends FormElement(DomQuery(ControlState(LitElement))) { static get styles() { return [ css` :host { display: block; position: relative; border: solid 1px #9E9E9E; overflow: hidden; } :host([invalid]) { border: solid 1px #B71C1C; } .error-message { position: absolute; bottom: 0; left: 0; right: 0; font-size: 10px; color: var(--tp-textarea-text-color-invalid, #B71C1C); transition: opacity 0.3s; opacity: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; pointer-events: none; } :host([invalid]) .error-message { opacity: 1; } .wrap { position: absolute; top: 0; left: 0; right: 0; bottom: 0; padding: var(--tp-textarea-padding, 0); } .mirror-text { visibility: hidden; word-wrap: break-word; padding: var(--tp-textarea-padding, 0); } .wrap ::slotted(textarea) { position: relative; outline: none; border: none; resize: none; background: inherit; color: inherit; width: 100%; height: 100%; font-size: inherit; font-family: inherit; line-height: inherit; text-align: inherit; box-sizing: border-box; overflow: hidden; padding: 0; } ` ]; } render() { const { errorMessage } = this; return html`