ngwr 4.2.3 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Use of this source code is governed by an MIT-style license that can be
5
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
6
+ */
7
+ export * from './public-api';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saWIvdGV4dGFyZWEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vdGhla2hlZ2F5L25nd3IvYmxvYi9tYWluL0xJQ0VOU0VcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd3ci10ZXh0YXJlYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi90ZXh0YXJlYS9uZ3dyLXRleHRhcmVhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Use of this source code is governed by an MIT-style license that can be
5
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
6
+ */
7
+ export * from './textarea.component';
8
+ export * from './textarea.module';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi90ZXh0YXJlYS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS90aGVraGVnYXkvbmd3ci9ibG9iL21haW4vTElDRU5TRVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vdGV4dGFyZWEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGV4dGFyZWEubW9kdWxlJztcbiJdfQ==
@@ -0,0 +1,145 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Use of this source code is governed by an MIT-style license that can be
5
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
6
+ */
7
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
8
+ import { isPlatformBrowser } from '@angular/common';
9
+ import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, HostBinding, inject, Input, numberAttribute, PLATFORM_ID, signal, ViewChild, ViewEncapsulation, } from '@angular/core';
10
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
11
+ import { noop } from 'rxjs';
12
+ import { WrAbstractBase } from 'ngwr/cdk';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/forms";
15
+ /**
16
+ * NGWR textarea component.
17
+ *
18
+ * {@tutorial} [How to use wr-textarea]{@link http://ngwr.dev/docs/components/textarea}
19
+ */
20
+ export class WrTextareaComponent extends WrAbstractBase {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.placeholder = '';
24
+ this.readonly = false;
25
+ this.resizable = true;
26
+ this.autosize = false;
27
+ this.rows = 2;
28
+ this.inputValue = signal(null);
29
+ this.isDisabled = signal(false);
30
+ this.platformId = inject(PLATFORM_ID);
31
+ this.cdr = inject(ChangeDetectorRef);
32
+ this.onChange = noop;
33
+ this.onTouch = noop;
34
+ }
35
+ set disabled(value) {
36
+ this.isDisabled.set(value);
37
+ }
38
+ get disabled() {
39
+ return this.isDisabled();
40
+ }
41
+ get elClasses() {
42
+ return {
43
+ 'wr-textarea': true,
44
+ 'wr-textarea--resizable': this.resizable,
45
+ 'wr-textarea--disabled': this.isDisabled(),
46
+ 'wr-textarea--autosize': this.autosize,
47
+ };
48
+ }
49
+ get isBrowser() {
50
+ return isPlatformBrowser(this.platformId);
51
+ }
52
+ ngAfterViewInit() {
53
+ if (this.autosize && this.isBrowser) {
54
+ this.resizeTextarea();
55
+ }
56
+ }
57
+ registerOnChange(fn) {
58
+ this.onChange = fn;
59
+ }
60
+ registerOnTouched(fn) {
61
+ this.onTouch = fn;
62
+ }
63
+ setDisabledState(isDisabled) {
64
+ this.isDisabled.set(coerceBooleanProperty(isDisabled));
65
+ }
66
+ writeValue(value) {
67
+ this.value = value;
68
+ this.onChange(value);
69
+ this.inputValue.set(value);
70
+ if (this.isBrowser) {
71
+ requestAnimationFrame(() => {
72
+ this.resizeTextarea();
73
+ });
74
+ }
75
+ this.cdr.markForCheck();
76
+ }
77
+ resizeTextarea() {
78
+ if (!this.autosize || !this.textareaNative || !this.isBrowser) {
79
+ return;
80
+ }
81
+ const textarea = this.textareaNative.nativeElement;
82
+ textarea.style.height = 'auto';
83
+ let newHeight;
84
+ let maxHeight = 'none';
85
+ if (this.maxRows) {
86
+ const computedStyle = getComputedStyle(textarea);
87
+ const lineHeight = parseInt(computedStyle.lineHeight, 10) || parseInt(computedStyle.fontSize, 10) * 1.2;
88
+ maxHeight = `${lineHeight * this.maxRows}px`;
89
+ newHeight = Math.min(textarea.scrollHeight, lineHeight * this.maxRows);
90
+ }
91
+ else {
92
+ newHeight = textarea.scrollHeight;
93
+ }
94
+ textarea.style.maxHeight = maxHeight;
95
+ textarea.style.height = `${newHeight}px`;
96
+ textarea.style.overflowY = this.maxRows && textarea.scrollHeight > newHeight ? 'auto' : 'hidden';
97
+ }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
99
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: WrTextareaComponent, isStandalone: true, selector: "wr-textarea", inputs: { placeholder: "placeholder", readonly: ["readonly", "readonly", booleanAttribute], resizable: ["resizable", "resizable", booleanAttribute], autosize: ["autosize", "autosize", booleanAttribute], rows: ["rows", "rows", numberAttribute], maxRows: ["maxRows", "maxRows", numberAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, host: { properties: { "class": "this.elClasses" } }, providers: [
100
+ {
101
+ provide: NG_VALUE_ACCESSOR,
102
+ // eslint-disable-next-line @angular-eslint/no-forward-ref
103
+ useExisting: forwardRef(() => WrTextareaComponent),
104
+ multi: true,
105
+ },
106
+ ], viewQueries: [{ propertyName: "textareaNative", first: true, predicate: ["textareaNative"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<textarea\n #textareaNative\n class=\"wr-textarea__native\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"inputValue()\"\n (ngModelChange)=\"writeValue($event)\"\n (input)=\"resizeTextarea()\"\n></textarea>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
107
+ }
108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaComponent, decorators: [{
109
+ type: Component,
110
+ args: [{ standalone: true, selector: 'wr-textarea', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [FormsModule], providers: [
111
+ {
112
+ provide: NG_VALUE_ACCESSOR,
113
+ // eslint-disable-next-line @angular-eslint/no-forward-ref
114
+ useExisting: forwardRef(() => WrTextareaComponent),
115
+ multi: true,
116
+ },
117
+ ], template: "<textarea\n #textareaNative\n class=\"wr-textarea__native\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"inputValue()\"\n (ngModelChange)=\"writeValue($event)\"\n (input)=\"resizeTextarea()\"\n></textarea>\n" }]
118
+ }], propDecorators: { placeholder: [{
119
+ type: Input
120
+ }], readonly: [{
121
+ type: Input,
122
+ args: [{ transform: booleanAttribute }]
123
+ }], resizable: [{
124
+ type: Input,
125
+ args: [{ transform: booleanAttribute }]
126
+ }], autosize: [{
127
+ type: Input,
128
+ args: [{ transform: booleanAttribute }]
129
+ }], rows: [{
130
+ type: Input,
131
+ args: [{ transform: numberAttribute }]
132
+ }], maxRows: [{
133
+ type: Input,
134
+ args: [{ transform: numberAttribute }]
135
+ }], disabled: [{
136
+ type: Input,
137
+ args: [{ transform: booleanAttribute }]
138
+ }], textareaNative: [{
139
+ type: ViewChild,
140
+ args: ['textareaNative']
141
+ }], elClasses: [{
142
+ type: HostBinding,
143
+ args: ['class']
144
+ }] } });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliL3RleHRhcmVhL3RleHRhcmVhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi90ZXh0YXJlYS90ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFDZixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQUcxQzs7OztHQUlHO0FBaUJILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxjQUFjO0lBaEJ2RDs7UUFpQlcsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDYyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNsQixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBMEI3QixlQUFVLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUN6QyxlQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FB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LEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsU0FBUztzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxRQUFRO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNDLElBQUk7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUNFLE9BQU87c0JBQTdDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUdqQyxRQUFRO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUzlCLGNBQWM7c0JBRHJCLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUl2QixTQUFTO3NCQURaLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vdGhla2hlZ2F5L25nd3IvYmxvYi9tYWluL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIFBMQVRGT1JNX0lELFxuICBzaWduYWwsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgbm9vcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBXckFic3RyYWN0QmFzZSB9IGZyb20gJ25nd3IvY2RrJztcbmltcG9ydCB7IFNhZmVBbnkgfSBmcm9tICduZ3dyL2Nkay90eXBlcyc7XG5cbi8qKlxuICogTkdXUiB0ZXh0YXJlYSBjb21wb25lbnQuXG4gKlxuICoge0B0dXRvcmlhbH0gW0hvdyB0byB1c2Ugd3ItdGV4dGFyZWFde0BsaW5rIGh0dHA6Ly9uZ3dyLmRldi9kb2NzL2NvbXBvbmVudHMvdGV4dGFyZWF9XG4gKi9cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3dyLXRleHRhcmVhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHRhcmVhLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1mb3J3YXJkLXJlZlxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gV3JUZXh0YXJlYUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBXclRleHRhcmVhQ29tcG9uZW50IGV4dGVuZHMgV3JBYnN0cmFjdEJhc2UgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcmVzaXphYmxlID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9zaXplID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHJvd3MgPSAyO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBtYXhSb3dzPzogbnVtYmVyO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQuc2V0KHZhbHVlKTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCgpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgndGV4dGFyZWFOYXRpdmUnKVxuICBwcml2YXRlIHRleHRhcmVhTmF0aXZlOiBFbGVtZW50UmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgZWxDbGFzc2VzKCk6IFNhZmVBbnkge1xuICAgIHJldHVybiB7XG4gICAgICAnd3ItdGV4dGFyZWEnOiB0cnVlLFxuICAgICAgJ3dyLXRleHRhcmVhLS1yZXNpemFibGUnOiB0aGlzLnJlc2l6YWJsZSxcbiAgICAgICd3ci10ZXh0YXJlYS0tZGlzYWJsZWQnOiB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICd3ci10ZXh0YXJlYS0tYXV0b3NpemUnOiB0aGlzLmF1dG9zaXplLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsdWU/OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlucHV0VmFsdWUgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc0Rpc2FibGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcHJpdmF0ZSBnZXQgaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9zaXplICYmIHRoaXMuaXNCcm93c2VyKSB7XG4gICAgICB0aGlzLnJlc2l6ZVRleHRhcmVhKCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gbm9vcDtcbiAgb25Ub3VjaDogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0Rpc2FibGVkLnNldChjb2VyY2VCb29sZWFuUHJvcGVydHkoaXNEaXNhYmxlZCkpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMuaW5wdXRWYWx1ZS5zZXQodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuaXNCcm93c2VyKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2l6ZVRleHRhcmVhKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlc2l6ZVRleHRhcmVhKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hdXRvc2l6ZSB8fCAhdGhpcy50ZXh0YXJlYU5hdGl2ZSB8fCAhdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0YXJlYSA9IHRoaXMudGV4dGFyZWFOYXRpdmUubmF0aXZlRWxlbWVudDtcblxuICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcblxuICAgIGxldCBuZXdIZWlnaHQ6IG51bWJlcjtcbiAgICBsZXQgbWF4SGVpZ2h0ID0gJ25vbmUnO1xuXG4gICAgaWYgKHRoaXMubWF4Um93cykge1xuICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUodGV4dGFyZWEpO1xuICAgICAgY29uc3QgbGluZUhlaWdodCA9IHBhcnNlSW50KGNvbXB1dGVkU3R5bGUubGluZUhlaWdodCwgMTApIHx8IHBhcnNlSW50KGNvbXB1dGVkU3R5bGUuZm9udFNpemUsIDEwKSAqIDEuMjtcblxuICAgICAgbWF4SGVpZ2h0ID0gYCR7bGluZUhlaWdodCAqIHRoaXMubWF4Um93c31weGA7XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbih0ZXh0YXJlYS5zY3JvbGxIZWlnaHQsIGxpbmVIZWlnaHQgKiB0aGlzLm1heFJvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdIZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHQ7XG4gICAgfVxuXG4gICAgdGV4dGFyZWEuc3R5bGUubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XG4gICAgdGV4dGFyZWEuc3R5bGUub3ZlcmZsb3dZID0gdGhpcy5tYXhSb3dzICYmIHRleHRhcmVhLnNjcm9sbEhlaWdodCA+IG5ld0hlaWdodCA/ICdhdXRvJyA6ICdoaWRkZW4nO1xuICB9XG59XG4iLCI8dGV4dGFyZWFcbiAgI3RleHRhcmVhTmF0aXZlXG4gIGNsYXNzPVwid3ItdGV4dGFyZWFfX25hdGl2ZVwiXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIFtyb3dzXT1cInJvd3NcIlxuICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgW25nTW9kZWxdPVwiaW5wdXRWYWx1ZSgpXCJcbiAgKG5nTW9kZWxDaGFuZ2UpPVwid3JpdGVWYWx1ZSgkZXZlbnQpXCJcbiAgKGlucHV0KT1cInJlc2l6ZVRleHRhcmVhKClcIlxuPjwvdGV4dGFyZWE+XG4iXX0=
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Use of this source code is governed by an MIT-style license that can be
5
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
6
+ */
7
+ import { NgModule } from '@angular/core';
8
+ import { WrTextareaComponent } from './textarea.component';
9
+ import * as i0 from "@angular/core";
10
+ export class WrTextareaModule {
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
12
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaModule, imports: [WrTextareaComponent], exports: [WrTextareaComponent] }); }
13
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaModule, imports: [WrTextareaComponent] }); }
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaModule, decorators: [{
16
+ type: NgModule,
17
+ args: [{
18
+ imports: [WrTextareaComponent],
19
+ exports: [WrTextareaComponent],
20
+ }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliL3RleHRhcmVhL3RleHRhcmVhLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBTTNELE1BQU0sT0FBTyxnQkFBZ0I7OEdBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLFlBSGpCLG1CQUFtQixhQUNuQixtQkFBbUI7K0dBRWxCLGdCQUFnQixZQUhqQixtQkFBbUI7OzJGQUdsQixnQkFBZ0I7a0JBSjVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQzlCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vdGhla2hlZ2F5L25nd3IvYmxvYi9tYWluL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBXclRleHRhcmVhQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0YXJlYS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbV3JUZXh0YXJlYUNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtXclRleHRhcmVhQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgV3JUZXh0YXJlYU1vZHVsZSB7fVxuIl19
@@ -0,0 +1,185 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { isPlatformBrowser } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { signal, inject, PLATFORM_ID, ChangeDetectorRef, booleanAttribute, numberAttribute, forwardRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ViewChild, HostBinding, NgModule } from '@angular/core';
5
+ import * as i1 from '@angular/forms';
6
+ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
7
+ import { noop } from 'rxjs';
8
+ import { WrAbstractBase } from 'ngwr/cdk';
9
+
10
+ /**
11
+ * @license
12
+ *
13
+ * Use of this source code is governed by an MIT-style license that can be
14
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
15
+ */
16
+ /**
17
+ * NGWR textarea component.
18
+ *
19
+ * {@tutorial} [How to use wr-textarea]{@link http://ngwr.dev/docs/components/textarea}
20
+ */
21
+ class WrTextareaComponent extends WrAbstractBase {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.placeholder = '';
25
+ this.readonly = false;
26
+ this.resizable = true;
27
+ this.autosize = false;
28
+ this.rows = 2;
29
+ this.inputValue = signal(null);
30
+ this.isDisabled = signal(false);
31
+ this.platformId = inject(PLATFORM_ID);
32
+ this.cdr = inject(ChangeDetectorRef);
33
+ this.onChange = noop;
34
+ this.onTouch = noop;
35
+ }
36
+ set disabled(value) {
37
+ this.isDisabled.set(value);
38
+ }
39
+ get disabled() {
40
+ return this.isDisabled();
41
+ }
42
+ get elClasses() {
43
+ return {
44
+ 'wr-textarea': true,
45
+ 'wr-textarea--resizable': this.resizable,
46
+ 'wr-textarea--disabled': this.isDisabled(),
47
+ 'wr-textarea--autosize': this.autosize,
48
+ };
49
+ }
50
+ get isBrowser() {
51
+ return isPlatformBrowser(this.platformId);
52
+ }
53
+ ngAfterViewInit() {
54
+ if (this.autosize && this.isBrowser) {
55
+ this.resizeTextarea();
56
+ }
57
+ }
58
+ registerOnChange(fn) {
59
+ this.onChange = fn;
60
+ }
61
+ registerOnTouched(fn) {
62
+ this.onTouch = fn;
63
+ }
64
+ setDisabledState(isDisabled) {
65
+ this.isDisabled.set(coerceBooleanProperty(isDisabled));
66
+ }
67
+ writeValue(value) {
68
+ this.value = value;
69
+ this.onChange(value);
70
+ this.inputValue.set(value);
71
+ if (this.isBrowser) {
72
+ requestAnimationFrame(() => {
73
+ this.resizeTextarea();
74
+ });
75
+ }
76
+ this.cdr.markForCheck();
77
+ }
78
+ resizeTextarea() {
79
+ if (!this.autosize || !this.textareaNative || !this.isBrowser) {
80
+ return;
81
+ }
82
+ const textarea = this.textareaNative.nativeElement;
83
+ textarea.style.height = 'auto';
84
+ let newHeight;
85
+ let maxHeight = 'none';
86
+ if (this.maxRows) {
87
+ const computedStyle = getComputedStyle(textarea);
88
+ const lineHeight = parseInt(computedStyle.lineHeight, 10) || parseInt(computedStyle.fontSize, 10) * 1.2;
89
+ maxHeight = `${lineHeight * this.maxRows}px`;
90
+ newHeight = Math.min(textarea.scrollHeight, lineHeight * this.maxRows);
91
+ }
92
+ else {
93
+ newHeight = textarea.scrollHeight;
94
+ }
95
+ textarea.style.maxHeight = maxHeight;
96
+ textarea.style.height = `${newHeight}px`;
97
+ textarea.style.overflowY = this.maxRows && textarea.scrollHeight > newHeight ? 'auto' : 'hidden';
98
+ }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: WrTextareaComponent, isStandalone: true, selector: "wr-textarea", inputs: { placeholder: "placeholder", readonly: ["readonly", "readonly", booleanAttribute], resizable: ["resizable", "resizable", booleanAttribute], autosize: ["autosize", "autosize", booleanAttribute], rows: ["rows", "rows", numberAttribute], maxRows: ["maxRows", "maxRows", numberAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, host: { properties: { "class": "this.elClasses" } }, providers: [
101
+ {
102
+ provide: NG_VALUE_ACCESSOR,
103
+ // eslint-disable-next-line @angular-eslint/no-forward-ref
104
+ useExisting: forwardRef(() => WrTextareaComponent),
105
+ multi: true,
106
+ },
107
+ ], viewQueries: [{ propertyName: "textareaNative", first: true, predicate: ["textareaNative"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<textarea\n #textareaNative\n class=\"wr-textarea__native\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"inputValue()\"\n (ngModelChange)=\"writeValue($event)\"\n (input)=\"resizeTextarea()\"\n></textarea>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
108
+ }
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaComponent, decorators: [{
110
+ type: Component,
111
+ args: [{ standalone: true, selector: 'wr-textarea', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [FormsModule], providers: [
112
+ {
113
+ provide: NG_VALUE_ACCESSOR,
114
+ // eslint-disable-next-line @angular-eslint/no-forward-ref
115
+ useExisting: forwardRef(() => WrTextareaComponent),
116
+ multi: true,
117
+ },
118
+ ], template: "<textarea\n #textareaNative\n class=\"wr-textarea__native\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"inputValue()\"\n (ngModelChange)=\"writeValue($event)\"\n (input)=\"resizeTextarea()\"\n></textarea>\n" }]
119
+ }], propDecorators: { placeholder: [{
120
+ type: Input
121
+ }], readonly: [{
122
+ type: Input,
123
+ args: [{ transform: booleanAttribute }]
124
+ }], resizable: [{
125
+ type: Input,
126
+ args: [{ transform: booleanAttribute }]
127
+ }], autosize: [{
128
+ type: Input,
129
+ args: [{ transform: booleanAttribute }]
130
+ }], rows: [{
131
+ type: Input,
132
+ args: [{ transform: numberAttribute }]
133
+ }], maxRows: [{
134
+ type: Input,
135
+ args: [{ transform: numberAttribute }]
136
+ }], disabled: [{
137
+ type: Input,
138
+ args: [{ transform: booleanAttribute }]
139
+ }], textareaNative: [{
140
+ type: ViewChild,
141
+ args: ['textareaNative']
142
+ }], elClasses: [{
143
+ type: HostBinding,
144
+ args: ['class']
145
+ }] } });
146
+
147
+ /**
148
+ * @license
149
+ *
150
+ * Use of this source code is governed by an MIT-style license that can be
151
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
152
+ */
153
+ class WrTextareaModule {
154
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
155
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaModule, imports: [WrTextareaComponent], exports: [WrTextareaComponent] }); }
156
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaModule, imports: [WrTextareaComponent] }); }
157
+ }
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WrTextareaModule, decorators: [{
159
+ type: NgModule,
160
+ args: [{
161
+ imports: [WrTextareaComponent],
162
+ exports: [WrTextareaComponent],
163
+ }]
164
+ }] });
165
+
166
+ /**
167
+ * @license
168
+ *
169
+ * Use of this source code is governed by an MIT-style license that can be
170
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
171
+ */
172
+
173
+ /**
174
+ * @license
175
+ *
176
+ * Use of this source code is governed by an MIT-style license that can be
177
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
178
+ */
179
+
180
+ /**
181
+ * Generated bundle index. Do not edit.
182
+ */
183
+
184
+ export { WrTextareaComponent, WrTextareaModule };
185
+ //# sourceMappingURL=ngwr-textarea.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngwr-textarea.mjs","sources":["../../../projects/lib/textarea/textarea.component.ts","../../../projects/lib/textarea/textarea.component.html","../../../projects/lib/textarea/textarea.module.ts","../../../projects/lib/textarea/public-api.ts","../../../projects/lib/textarea/index.ts","../../../projects/lib/textarea/ngwr-textarea.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n inject,\n Input,\n numberAttribute,\n PLATFORM_ID,\n signal,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { noop } from 'rxjs';\n\nimport { WrAbstractBase } from 'ngwr/cdk';\nimport { SafeAny } from 'ngwr/cdk/types';\n\n/**\n * NGWR textarea component.\n *\n * {@tutorial} [How to use wr-textarea]{@link http://ngwr.dev/docs/components/textarea}\n */\n@Component({\n standalone: true,\n selector: 'wr-textarea',\n templateUrl: './textarea.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [FormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line @angular-eslint/no-forward-ref\n useExisting: forwardRef(() => WrTextareaComponent),\n multi: true,\n },\n ],\n})\nexport class WrTextareaComponent extends WrAbstractBase implements ControlValueAccessor, AfterViewInit {\n @Input() placeholder = '';\n @Input({ transform: booleanAttribute }) readonly = false;\n @Input({ transform: booleanAttribute }) resizable = true;\n @Input({ transform: booleanAttribute }) autosize = false;\n @Input({ transform: numberAttribute }) rows = 2;\n @Input({ transform: numberAttribute }) maxRows?: number;\n\n @Input({ transform: booleanAttribute })\n set disabled(value: boolean) {\n this.isDisabled.set(value);\n }\n get disabled(): boolean {\n return this.isDisabled();\n }\n\n @ViewChild('textareaNative')\n private textareaNative: ElementRef<HTMLTextAreaElement> | undefined;\n\n @HostBinding('class')\n get elClasses(): SafeAny {\n return {\n 'wr-textarea': true,\n 'wr-textarea--resizable': this.resizable,\n 'wr-textarea--disabled': this.isDisabled(),\n 'wr-textarea--autosize': this.autosize,\n };\n }\n\n protected value?: string;\n\n protected readonly inputValue = signal<string | null>(null);\n protected readonly isDisabled = signal(false);\n\n private readonly platformId = inject(PLATFORM_ID);\n private readonly cdr = inject(ChangeDetectorRef);\n\n private get isBrowser(): boolean {\n return isPlatformBrowser(this.platformId);\n }\n\n ngAfterViewInit(): void {\n if (this.autosize && this.isBrowser) {\n this.resizeTextarea();\n }\n }\n\n onChange: (value: string) => void = noop;\n onTouch: () => void = noop;\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouch = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(coerceBooleanProperty(isDisabled));\n }\n\n writeValue(value: string): void {\n this.value = value;\n this.onChange(value);\n this.inputValue.set(value);\n\n if (this.isBrowser) {\n requestAnimationFrame(() => {\n this.resizeTextarea();\n });\n }\n\n this.cdr.markForCheck();\n }\n\n resizeTextarea(): void {\n if (!this.autosize || !this.textareaNative || !this.isBrowser) {\n return;\n }\n\n const textarea = this.textareaNative.nativeElement;\n\n textarea.style.height = 'auto';\n\n let newHeight: number;\n let maxHeight = 'none';\n\n if (this.maxRows) {\n const computedStyle = getComputedStyle(textarea);\n const lineHeight = parseInt(computedStyle.lineHeight, 10) || parseInt(computedStyle.fontSize, 10) * 1.2;\n\n maxHeight = `${lineHeight * this.maxRows}px`;\n newHeight = Math.min(textarea.scrollHeight, lineHeight * this.maxRows);\n } else {\n newHeight = textarea.scrollHeight;\n }\n\n textarea.style.maxHeight = maxHeight;\n textarea.style.height = `${newHeight}px`;\n textarea.style.overflowY = this.maxRows && textarea.scrollHeight > newHeight ? 'auto' : 'hidden';\n }\n}\n","<textarea\n #textareaNative\n class=\"wr-textarea__native\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n [disabled]=\"isDisabled()\"\n [ngModel]=\"inputValue()\"\n (ngModelChange)=\"writeValue($event)\"\n (input)=\"resizeTextarea()\"\n></textarea>\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { WrTextareaComponent } from './textarea.component';\n\n@NgModule({\n imports: [WrTextareaComponent],\n exports: [WrTextareaComponent],\n})\nexport class WrTextareaModule {}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nexport * from './textarea.component';\nexport * from './textarea.module';\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nexport * from './public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;AAKG;AA4BH;;;;AAIG;AAiBG,MAAO,mBAAoB,SAAQ,cAAc,CAAA;AAhBvD,IAAA,WAAA,GAAA;;QAiBW,IAAW,CAAA,WAAA,GAAG,EAAE;QACe,IAAQ,CAAA,QAAA,GAAG,KAAK;QAChB,IAAS,CAAA,SAAA,GAAG,IAAI;QAChB,IAAQ,CAAA,QAAA,GAAG,KAAK;QACjB,IAAI,CAAA,IAAA,GAAG,CAAC;AA0B5B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAgB,IAAI,CAAC;AACxC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAE5B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAYhD,IAAQ,CAAA,QAAA,GAA4B,IAAI;QACxC,IAAO,CAAA,OAAA,GAAe,IAAI;AAsD3B;IA9FC,IACI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE5B,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;;AAM1B,IAAA,IACI,SAAS,GAAA;QACX,OAAO;AACL,YAAA,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI,CAAC,SAAS;AACxC,YAAA,uBAAuB,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1C,uBAAuB,EAAE,IAAI,CAAC,QAAQ;SACvC;;AAWH,IAAA,IAAY,SAAS,GAAA;AACnB,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;;IAG3C,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACnC,IAAI,CAAC,cAAc,EAAE;;;AAOzB,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;;AAGnB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;QAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;;AAGxD,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAE1B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,qBAAqB,CAAC,MAAK;gBACzB,IAAI,CAAC,cAAc,EAAE;AACvB,aAAC,CAAC;;AAGJ,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;IAGzB,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAC7D;;AAGF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa;AAElD,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAE9B,QAAA,IAAI,SAAiB;QACrB,IAAI,SAAS,GAAG,MAAM;AAEtB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC;YAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG;YAEvG,SAAS,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI;AAC5C,YAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;;aACjE;AACL,YAAA,SAAS,GAAG,QAAQ,CAAC,YAAY;;AAGnC,QAAA,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;QACpC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,SAAS,IAAI;QACxC,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ;;8GApGvF,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAEV,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAgB,CAChB,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,gBAAgB,CAChB,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAgB,CAChB,EAAA,IAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,eAAe,CACf,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,eAAe,CAEf,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAgB,CAjBzB,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;;AAE1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,ECpDH,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qSAWA,2CDiCY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAUV,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhB/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACN,QAAA,EAAA,aAAa,EAEN,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,WAAW,CAAC,EACX,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;;AAE1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,qSAAA,EAAA;8BAGQ,WAAW,EAAA,CAAA;sBAAnB;gBACuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBACE,SAAS,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBACE,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBACC,IAAI,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBACE,OAAO,EAAA,CAAA;sBAA7C,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBAGjC,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAS9B,cAAc,EAAA,CAAA;sBADrB,SAAS;uBAAC,gBAAgB;gBAIvB,SAAS,EAAA,CAAA;sBADZ,WAAW;uBAAC,OAAO;;;AEzEtB;;;;;AAKG;MAUU,gBAAgB,CAAA;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAhB,gBAAgB,EAAA,OAAA,EAAA,CAHjB,mBAAmB,CAAA,EAAA,OAAA,EAAA,CACnB,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAElB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAHjB,mBAAmB,CAAA,EAAA,CAAA,CAAA;;2FAGlB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,mBAAmB,CAAC;oBAC9B,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAC/B,iBAAA;;;ACdD;;;;;AAKG;;ACLH;;;;;AAKG;;ACLH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngwr",
3
- "version": "4.2.3",
3
+ "version": "4.3.0",
4
4
  "license": "MIT",
5
5
  "description": "NGWR – Angular UI components library",
6
6
  "author": "Roman Khegay <rk@garuna.dev> (https://garuna.dev)",
@@ -83,6 +83,9 @@
83
83
  "./tag/styles": {
84
84
  "sass": "./tag/styles/_index.scss"
85
85
  },
86
+ "./textarea/styles": {
87
+ "sass": "./textarea/styles/_index.scss"
88
+ },
86
89
  "./package.json": {
87
90
  "default": "./package.json"
88
91
  },
@@ -116,18 +119,18 @@
116
119
  "esm": "./esm2022/checkbox/ngwr-checkbox.mjs",
117
120
  "default": "./fesm2022/ngwr-checkbox.mjs"
118
121
  },
119
- "./dialog": {
120
- "types": "./dialog/index.d.ts",
121
- "esm2022": "./esm2022/dialog/ngwr-dialog.mjs",
122
- "esm": "./esm2022/dialog/ngwr-dialog.mjs",
123
- "default": "./fesm2022/ngwr-dialog.mjs"
124
- },
125
122
  "./divider": {
126
123
  "types": "./divider/index.d.ts",
127
124
  "esm2022": "./esm2022/divider/ngwr-divider.mjs",
128
125
  "esm": "./esm2022/divider/ngwr-divider.mjs",
129
126
  "default": "./fesm2022/ngwr-divider.mjs"
130
127
  },
128
+ "./dialog": {
129
+ "types": "./dialog/index.d.ts",
130
+ "esm2022": "./esm2022/dialog/ngwr-dialog.mjs",
131
+ "esm": "./esm2022/dialog/ngwr-dialog.mjs",
132
+ "default": "./fesm2022/ngwr-dialog.mjs"
133
+ },
131
134
  "./form": {
132
135
  "types": "./form/index.d.ts",
133
136
  "esm2022": "./esm2022/form/ngwr-form.mjs",
@@ -182,6 +185,12 @@
182
185
  "esm": "./esm2022/tag/ngwr-tag.mjs",
183
186
  "default": "./fesm2022/ngwr-tag.mjs"
184
187
  },
188
+ "./textarea": {
189
+ "types": "./textarea/index.d.ts",
190
+ "esm2022": "./esm2022/textarea/ngwr-textarea.mjs",
191
+ "esm": "./esm2022/textarea/ngwr-textarea.mjs",
192
+ "default": "./fesm2022/ngwr-textarea.mjs"
193
+ },
185
194
  "./cdk/rxjs": {
186
195
  "types": "./cdk/rxjs/index.d.ts",
187
196
  "esm2022": "./esm2022/cdk/rxjs/ngwr-cdk-rxjs.mjs",
package/styles.scss CHANGED
@@ -20,4 +20,5 @@
20
20
  @forward './skeleton/styles';
21
21
  @forward './spinner/styles';
22
22
  @forward './tag/styles';
23
+ @forward './textarea/styles';
23
24
  //@forward './tooltip';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Use of this source code is governed by an MIT-style license that can be
5
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
6
+ */
7
+ export * from './public-api';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ *
4
+ * Use of this source code is governed by an MIT-style license that can be
5
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
6
+ */
7
+ export * from './textarea.component';
8
+ export * from './textarea.module';
@@ -0,0 +1,77 @@
1
+ @forward './vars';
2
+
3
+ .wr-textarea {
4
+ --wr-textarea-padding-right: var(--wr-textarea-padding-x);
5
+ --wr-textarea-cursor: default;
6
+ --wr-textarea-resize: none;
7
+
8
+ display: flex;
9
+
10
+ cursor: var(--wr-textarea-cursor);
11
+
12
+ color: var(--wr-textarea-color);
13
+ font-size: var(--wr-textarea-font-size);
14
+ font-weight: var(--wr-textarea-font-weight);
15
+ line-height: var(--wr-textarea-line-height);
16
+
17
+ background-color: var(--wr-textarea-bg-color);
18
+ border: 1px solid var(--wr-textarea-border-color);
19
+ border-radius: var(--wr-textarea-border-radius);
20
+ box-shadow: var(--wr-textarea-box-shadow);
21
+
22
+ overflow: hidden;
23
+ position: relative;
24
+
25
+ transition: var(--wr-transition-base);
26
+
27
+ &--disabled {
28
+ --wr-textarea-cursor: not-allowed;
29
+ --wr-textarea-color: var(--wr-color-medium);
30
+ --wr-textarea-bg-color: var(--wr-color-light-lighter);
31
+ }
32
+
33
+ &--resizable {
34
+ --wr-textarea-resize: vertical;
35
+ }
36
+
37
+ &--autosize {
38
+ .wr-textarea__native {
39
+ overflow-y: hidden;
40
+ resize: none;
41
+ }
42
+ }
43
+
44
+ &__native {
45
+ display: inline-block;
46
+
47
+ flex: 1;
48
+
49
+ appearance: none;
50
+ background: none;
51
+ border: none;
52
+ outline: none;
53
+ margin: 0;
54
+ vertical-align: middle;
55
+ white-space: normal;
56
+
57
+ resize: var(--wr-textarea-resize);
58
+
59
+ color: inherit;
60
+ font-size: inherit;
61
+ font-weight: inherit;
62
+ line-height: inherit;
63
+
64
+ padding: var(--wr-textarea-padding-y) var(--wr-textarea-padding-x);
65
+ padding-right: var(--wr-textarea-padding-right);
66
+
67
+ &[disabled],
68
+ &:disabled {
69
+ cursor: var(--wr-textarea-cursor);
70
+ }
71
+
72
+ &::placeholder {
73
+ color: var(--wr-textarea-placeholder-color);
74
+ font-style: italic;
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,17 @@
1
+ :root {
2
+ --wr-textarea-color: var(--wr-color-dark);
3
+ --wr-textarea-placeholder-color: var(--wr-color-light);
4
+ --wr-textarea-suffix-prefix-color: var(--wr-color-medium);
5
+ --wr-textarea-bg-color: var(--wr-color-white);
6
+ --wr-textarea-border-color: var(--wr-color-light-lighter);
7
+ --wr-textarea-border-radius: 0.375rem;
8
+ --wr-textarea-box-shadow: none;
9
+ --wr-textarea-icon-size: 1.25rem;
10
+ --wr-textarea-icon-color: var(--wr-color-medium);
11
+ --wr-textarea-font-size: 0.875rem;
12
+ --wr-textarea-font-weight: 400;
13
+ --wr-textarea-font-family: var(--wr-font-family-base);
14
+ --wr-textarea-line-height: 1.25rem;
15
+ --wr-textarea-padding-y: 0.375rem;
16
+ --wr-textarea-padding-x: 0.825rem;
17
+ }
@@ -0,0 +1,44 @@
1
+ import { AfterViewInit } from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+ import { WrAbstractBase } from 'ngwr/cdk';
4
+ import { SafeAny } from 'ngwr/cdk/types';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * NGWR textarea component.
8
+ *
9
+ * {@tutorial} [How to use wr-textarea]{@link http://ngwr.dev/docs/components/textarea}
10
+ */
11
+ export declare class WrTextareaComponent extends WrAbstractBase implements ControlValueAccessor, AfterViewInit {
12
+ placeholder: string;
13
+ readonly: boolean;
14
+ resizable: boolean;
15
+ autosize: boolean;
16
+ rows: number;
17
+ maxRows?: number;
18
+ set disabled(value: boolean);
19
+ get disabled(): boolean;
20
+ private textareaNative;
21
+ get elClasses(): SafeAny;
22
+ protected value?: string;
23
+ protected readonly inputValue: import("@angular/core").WritableSignal<string | null>;
24
+ protected readonly isDisabled: import("@angular/core").WritableSignal<boolean>;
25
+ private readonly platformId;
26
+ private readonly cdr;
27
+ private get isBrowser();
28
+ ngAfterViewInit(): void;
29
+ onChange: (value: string) => void;
30
+ onTouch: () => void;
31
+ registerOnChange(fn: (value: string) => void): void;
32
+ registerOnTouched(fn: () => void): void;
33
+ setDisabledState(isDisabled: boolean): void;
34
+ writeValue(value: string): void;
35
+ resizeTextarea(): void;
36
+ static ɵfac: i0.ɵɵFactoryDeclaration<WrTextareaComponent, never>;
37
+ static ɵcmp: i0.ɵɵComponentDeclaration<WrTextareaComponent, "wr-textarea", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; "autosize": { "alias": "autosize"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "maxRows": { "alias": "maxRows"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
38
+ static ngAcceptInputType_readonly: unknown;
39
+ static ngAcceptInputType_resizable: unknown;
40
+ static ngAcceptInputType_autosize: unknown;
41
+ static ngAcceptInputType_rows: unknown;
42
+ static ngAcceptInputType_maxRows: unknown;
43
+ static ngAcceptInputType_disabled: unknown;
44
+ }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./textarea.component";
3
+ export declare class WrTextareaModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<WrTextareaModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<WrTextareaModule, never, [typeof i1.WrTextareaComponent], [typeof i1.WrTextareaComponent]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<WrTextareaModule>;
7
+ }