mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-23 00:13:35 +01:00
129 lines
2.4 KiB
TypeScript
129 lines
2.4 KiB
TypeScript
/**
|
|
* EGroupware eTemplate2 - Textbox widget (WebComponent)
|
|
*
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
* @package etemplate
|
|
* @subpackage api
|
|
* @link https://www.egroupware.org
|
|
* @author Nathan Gray
|
|
*/
|
|
|
|
|
|
import {css} from "lit";
|
|
import {Et2InputWidget} from "../Et2InputWidget/Et2InputWidget";
|
|
import {SlTextarea} from "@shoelace-style/shoelace";
|
|
import shoelace from "../Styles/shoelace";
|
|
|
|
|
|
export class Et2Textarea extends Et2InputWidget(SlTextarea)
|
|
{
|
|
static get styles()
|
|
{
|
|
return [
|
|
...shoelace,
|
|
...super.styles,
|
|
css`
|
|
:host {
|
|
display: flex;
|
|
flex-direction: column;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.textarea--resize-vertical {
|
|
height: 100%;
|
|
}
|
|
|
|
:host::part(form-control) {
|
|
height: 100%;
|
|
align-items: stretch !important;
|
|
}
|
|
|
|
:host::part(form-control-input), :host::part(textarea) {
|
|
height: 100%;
|
|
}
|
|
|
|
.form-control-input .textarea--standard.textarea--focused:not(.textarea--disabled){
|
|
width: calc(100% - (2 * var(--sl-focus-ring-width)));
|
|
margin-left: var(--sl-focus-ring-width);
|
|
}
|
|
`,
|
|
];
|
|
}
|
|
|
|
static get properties()
|
|
{
|
|
return {
|
|
...super.properties,
|
|
/**
|
|
* Specify the width of the text area.
|
|
* If not set, it will expand to fill the space available.
|
|
*/
|
|
width: {type: String},
|
|
/**
|
|
* Specify the height of the text area.
|
|
* If not set, it will expand to fill the space available.
|
|
*/
|
|
height: {type: String},
|
|
onkeypress: Function,
|
|
}
|
|
}
|
|
|
|
constructor()
|
|
{
|
|
super();
|
|
this.rows = "";
|
|
}
|
|
|
|
connectedCallback()
|
|
{
|
|
super.connectedCallback();
|
|
if(this.__width)
|
|
{
|
|
this.style.width = this.__width;
|
|
}
|
|
if(this.__height)
|
|
{
|
|
this.style.height = this.__height;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Use width and height attributes to affect style
|
|
* It would be better to deprecate these and just use CSS
|
|
*
|
|
* @param value
|
|
*/
|
|
set width(value)
|
|
{
|
|
|
|
let oldValue = this.__width;
|
|
|
|
this.__width = value;
|
|
|
|
this.requestUpdate("width", oldValue);
|
|
}
|
|
|
|
set height(value)
|
|
{
|
|
let oldValue = this.__height;
|
|
|
|
this.__height = value;
|
|
|
|
this.requestUpdate("height", oldValue);
|
|
}
|
|
|
|
/** Override some parent stuff to get sizing how we like it **/
|
|
setTextareaMaxHeight()
|
|
{
|
|
this._inputNode.style.maxHeight = 'inherit';
|
|
}
|
|
|
|
get _inputNode()
|
|
{
|
|
return this.shadowRoot?.querySelector("textarea");
|
|
}
|
|
}
|
|
|
|
customElements.define("et2-textarea", Et2Textarea);
|