@eui/components 19.0.3 → 19.0.4-snapshot-1738753092246
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.
- package/directives/eui-has-permission.directive.d.ts +70 -2
- package/directives/eui-has-permission.directive.d.ts.map +1 -1
- package/directives/eui-maxlength.directive.d.ts +94 -10
- package/directives/eui-maxlength.directive.d.ts.map +1 -1
- package/docs/components/EuiInputCheckboxComponent.html +169 -10
- package/docs/components/EuiInputGroupAddOnComponent.html +22 -0
- package/docs/components/EuiInputGroupAddOnItemComponent.html +30 -0
- package/docs/components/EuiInputGroupComponent.html +35 -0
- package/docs/components/EuiInputNumberComponent.html +83 -4
- package/docs/components/EuiInputRadioComponent.html +228 -0
- package/docs/components/EuiInputTextComponent.html +50 -0
- package/docs/components/EuiTextareaComponent.html +207 -1
- package/docs/dependencies.html +2 -2
- package/docs/directives/AutoResizeDirective.html +49 -1
- package/docs/directives/EuiHasPermissionDirective.html +34 -0
- package/docs/directives/EuiInputNumberDirective.html +17 -0
- package/docs/directives/EuiMaxLengthDirective.html +35 -7
- package/docs/js/menu-wc.js +53 -107
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/functions.html +14 -0
- package/docs/modules/EuiHasPermissionDirectiveModule.html +17 -3
- package/docs/modules/EuiInputCheckboxModule.html +25 -4
- package/docs/modules/EuiInputGroupModule.html +20 -5
- package/docs/modules/EuiInputNumberModule.html +26 -5
- package/docs/modules/EuiInputRadioModule.html +27 -4
- package/docs/modules/EuiInputTextModule.html +25 -4
- package/docs/modules/EuiMaxLengthDirectiveModule.html +25 -4
- package/docs/modules/EuiTextAreaModule.html +20 -4
- package/eui-input-checkbox/eui-input-checkbox.component.d.ts +88 -11
- package/eui-input-checkbox/eui-input-checkbox.component.d.ts.map +1 -1
- package/eui-input-checkbox/eui-input-checkbox.module.d.ts +17 -3
- package/eui-input-checkbox/eui-input-checkbox.module.d.ts.map +1 -1
- package/eui-input-group/eui-input-group-addon-item.component.d.ts +33 -1
- package/eui-input-group/eui-input-group-addon-item.component.d.ts.map +1 -1
- package/eui-input-group/eui-input-group-addon.component.d.ts +40 -2
- package/eui-input-group/eui-input-group-addon.component.d.ts.map +1 -1
- package/eui-input-group/eui-input-group.component.d.ts +44 -1
- package/eui-input-group/eui-input-group.component.d.ts.map +1 -1
- package/eui-input-group/eui-input-group.module.d.ts +21 -5
- package/eui-input-group/eui-input-group.module.d.ts.map +1 -1
- package/eui-input-number/eui-input-number.component.d.ts +73 -9
- package/eui-input-number/eui-input-number.component.d.ts.map +1 -1
- package/eui-input-number/eui-input-number.module.d.ts +19 -4
- package/eui-input-number/eui-input-number.module.d.ts.map +1 -1
- package/eui-input-number/eui-number-control.directive.d.ts +27 -2
- package/eui-input-number/eui-number-control.directive.d.ts.map +1 -1
- package/eui-input-radio/eui-input-radio.component.d.ts +96 -1
- package/eui-input-radio/eui-input-radio.component.d.ts.map +1 -1
- package/eui-input-radio/eui-input-radio.module.d.ts +20 -3
- package/eui-input-radio/eui-input-radio.module.d.ts.map +1 -1
- package/eui-input-text/eui-input-text.component.d.ts +54 -1
- package/eui-input-text/eui-input-text.component.d.ts.map +1 -1
- package/eui-input-text/eui-input-text.module.d.ts +19 -3
- package/eui-input-text/eui-input-text.module.d.ts.map +1 -1
- package/eui-textarea/auto-resize.directive.d.ts +90 -3
- package/eui-textarea/auto-resize.directive.d.ts.map +1 -1
- package/eui-textarea/eui-textarea.component.d.ts +111 -5
- package/eui-textarea/eui-textarea.component.d.ts.map +1 -1
- package/eui-textarea/eui-textarea.module.d.ts +23 -4
- package/eui-textarea/eui-textarea.module.d.ts.map +1 -1
- package/fesm2022/eui-components-directives.mjs +180 -34
- package/fesm2022/eui-components-directives.mjs.map +1 -1
- package/fesm2022/eui-components-eui-accordion.mjs +1 -1
- package/fesm2022/eui-components-eui-alert.mjs +1 -1
- package/fesm2022/eui-components-eui-autocomplete.mjs +2 -2
- package/fesm2022/eui-components-eui-avatar.mjs +1 -1
- package/fesm2022/eui-components-eui-badge.mjs +1 -1
- package/fesm2022/eui-components-eui-block-content.mjs +1 -1
- package/fesm2022/eui-components-eui-block-document.mjs +1 -1
- package/fesm2022/eui-components-eui-breadcrumb.mjs +1 -1
- package/fesm2022/eui-components-eui-button-group.mjs +1 -1
- package/fesm2022/eui-components-eui-button-v2.mjs +1 -1
- package/fesm2022/eui-components-eui-button.mjs +1 -1
- package/fesm2022/eui-components-eui-card.mjs +3 -3
- package/fesm2022/eui-components-eui-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-chip-group.mjs +1 -1
- package/fesm2022/eui-components-eui-chip-list.mjs +1 -1
- package/fesm2022/eui-components-eui-chip.mjs +1 -1
- package/fesm2022/eui-components-eui-dashboard-button.mjs +1 -1
- package/fesm2022/eui-components-eui-dashboard-card.mjs +1 -1
- package/fesm2022/eui-components-eui-date-range-selector.mjs +1 -1
- package/fesm2022/eui-components-eui-datepicker.mjs +1 -1
- package/fesm2022/eui-components-eui-dialog.mjs +1 -1
- package/fesm2022/eui-components-eui-dimmer.mjs +1 -1
- package/fesm2022/eui-components-eui-disable-content.mjs +1 -1
- package/fesm2022/eui-components-eui-discussion-thread.mjs +1 -1
- package/fesm2022/eui-components-eui-dropdown.mjs +2 -2
- package/fesm2022/eui-components-eui-feedback-message.mjs +1 -1
- package/fesm2022/eui-components-eui-fieldset.mjs +1 -1
- package/fesm2022/eui-components-eui-file-upload.mjs +1 -1
- package/fesm2022/eui-components-eui-growl.mjs +1 -1
- package/fesm2022/eui-components-eui-icon-button-expander.mjs +1 -1
- package/fesm2022/eui-components-eui-icon-button.mjs +1 -1
- package/fesm2022/eui-components-eui-icon-color.mjs +1 -1
- package/fesm2022/eui-components-eui-icon-input.mjs +1 -1
- package/fesm2022/eui-components-eui-icon-state.mjs +1 -1
- package/fesm2022/eui-components-eui-icon-toggle.mjs +1 -1
- package/fesm2022/eui-components-eui-icon.mjs +1 -1
- package/fesm2022/eui-components-eui-input-checkbox.mjs +104 -14
- package/fesm2022/eui-components-eui-input-checkbox.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-group.mjs +142 -12
- package/fesm2022/eui-components-eui-input-group.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-number.mjs +109 -13
- package/fesm2022/eui-components-eui-input-number.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-radio.mjs +117 -6
- package/fesm2022/eui-components-eui-input-radio.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-text.mjs +73 -6
- package/fesm2022/eui-components-eui-input-text.mjs.map +1 -1
- package/fesm2022/eui-components-eui-label.mjs +1 -1
- package/fesm2022/eui-components-eui-language-selector.mjs +1 -1
- package/fesm2022/eui-components-eui-list.mjs +1 -1
- package/fesm2022/eui-components-eui-menu.mjs +1 -1
- package/fesm2022/eui-components-eui-message-box.mjs +1 -1
- package/fesm2022/eui-components-eui-navbar.mjs +1 -1
- package/fesm2022/eui-components-eui-overlay.mjs +1 -1
- package/fesm2022/eui-components-eui-page.mjs +1 -1
- package/fesm2022/eui-components-eui-paginator.mjs +1 -1
- package/fesm2022/eui-components-eui-popover.mjs +1 -1
- package/fesm2022/eui-components-eui-progress-bar.mjs +1 -1
- package/fesm2022/eui-components-eui-progress-circle.mjs +1 -1
- package/fesm2022/eui-components-eui-select.mjs +1 -1
- package/fesm2022/eui-components-eui-sidebar-menu.mjs +1 -1
- package/fesm2022/eui-components-eui-skeleton.mjs +1 -1
- package/fesm2022/eui-components-eui-slide-toggle.mjs +2 -2
- package/fesm2022/eui-components-eui-split-button.mjs +1 -1
- package/fesm2022/eui-components-eui-table-v2.mjs +1 -1
- package/fesm2022/eui-components-eui-table.mjs +1 -1
- package/fesm2022/eui-components-eui-tabs.mjs +1 -1
- package/fesm2022/eui-components-eui-textarea.mjs +221 -15
- package/fesm2022/eui-components-eui-textarea.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timebar.mjs +1 -1
- package/fesm2022/eui-components-eui-timeline.mjs +1 -1
- package/fesm2022/eui-components-eui-timepicker.mjs +1 -1
- package/fesm2022/eui-components-eui-tree-list.mjs +1 -1
- package/fesm2022/eui-components-eui-tree.mjs +1 -1
- package/fesm2022/eui-components-eui-user-profile.mjs +1 -1
- package/fesm2022/eui-components-eui-wizard.mjs +1 -1
- package/fesm2022/eui-components-externals-eui-editor.mjs +1 -1
- package/fesm2022/eui-components-externals-quill.mjs +1 -1
- package/fesm2022/eui-components-layout.mjs +2 -2
- package/fesm2022/eui-components-shared.mjs +2 -2
- package/package.json +4 -4
@@ -1,5 +1,5 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import { EventEmitter, signal, effect, booleanAttribute,
|
2
|
+
import { EventEmitter, signal, effect, forwardRef, booleanAttribute, HostListener, HostBinding, Input, Output, ViewEncapsulation, Component, numberAttribute, Optional, Directive, NgModule } from '@angular/core';
|
3
3
|
import * as i1$1 from '@angular/forms';
|
4
4
|
import { NgControl, FormControlName, FormGroupDirective, FormControlDirective, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
5
5
|
import * as i1 from '@eui/components/shared';
|
@@ -9,11 +9,38 @@ import { Subject, fromEvent } from 'rxjs';
|
|
9
9
|
import { takeUntil, debounceTime, startWith } from 'rxjs/operators';
|
10
10
|
import { CommonModule } from '@angular/common';
|
11
11
|
|
12
|
+
/**
|
13
|
+
* @fileoverview Enhanced textarea component for Angular forms with readonly state, form control integration, and state management.
|
14
|
+
*
|
15
|
+
* A form control component that provides an enhanced textarea with additional features.
|
16
|
+
* Supports readonly state visualization, form control integration, and state management.
|
17
|
+
*
|
18
|
+
* @component
|
19
|
+
* @selector textarea[euiTextArea]
|
20
|
+
*
|
21
|
+
* @example
|
22
|
+
* ```html
|
23
|
+
* <textarea euiTextArea
|
24
|
+
* [(ngModel)]="value"
|
25
|
+
* [readonly]="isReadonly"
|
26
|
+
* [disabled]="isDisabled"
|
27
|
+
* [isInvalid]="hasError" />
|
28
|
+
* ```
|
29
|
+
*/
|
12
30
|
class EuiTextareaComponent {
|
31
|
+
/**
|
32
|
+
* Static counter used to generate unique IDs for textarea instances
|
33
|
+
* @static
|
34
|
+
*/
|
13
35
|
static { this.idCounter = 0; }
|
14
36
|
get class() {
|
15
37
|
return [this.isInvalid ? 'eui-textarea--invalid' : '', this.baseStatesDirective.getCssClasses('eui-textarea')].join(' ').trim();
|
16
38
|
}
|
39
|
+
/**
|
40
|
+
* The disabled state of the textarea
|
41
|
+
* @description When set to true, prevents user interaction with the textarea.
|
42
|
+
* This can be controlled either directly or through form control binding.
|
43
|
+
*/
|
17
44
|
get disabled() {
|
18
45
|
return this._disabled ? true : null;
|
19
46
|
}
|
@@ -25,6 +52,11 @@ class EuiTextareaComponent {
|
|
25
52
|
// set BaseDirective Attribute
|
26
53
|
this.baseStatesDirective.euiDisabled = this._disabled;
|
27
54
|
}
|
55
|
+
/**
|
56
|
+
* The readonly state of the textarea
|
57
|
+
* @description When true, displays the textarea content in a read-only format
|
58
|
+
* with special styling.
|
59
|
+
*/
|
28
60
|
get readonly() {
|
29
61
|
return this._readonly || undefined;
|
30
62
|
}
|
@@ -39,10 +71,19 @@ class EuiTextareaComponent {
|
|
39
71
|
this._renderer = _renderer;
|
40
72
|
this.baseStatesDirective = baseStatesDirective;
|
41
73
|
/**
|
42
|
-
*
|
74
|
+
* Event emitter that fires when the number of text rows in the textarea changes
|
43
75
|
*/
|
44
76
|
this.rowsChange = new EventEmitter();
|
77
|
+
/**
|
78
|
+
* Unique identifier for the textarea
|
79
|
+
* @default eui-textarea_{increment}
|
80
|
+
*/
|
45
81
|
this.id = `eui-textarea_${EuiTextareaComponent.idCounter++}`;
|
82
|
+
/**
|
83
|
+
* @description
|
84
|
+
* Data attribute for end-to-end testing
|
85
|
+
* @default eui-textarea
|
86
|
+
*/
|
46
87
|
this.e2eAttr = 'eui-textarea';
|
47
88
|
this.destroy$ = new Subject();
|
48
89
|
this.rows = signal(0);
|
@@ -50,14 +91,29 @@ class EuiTextareaComponent {
|
|
50
91
|
this.rowsChange.emit(this.rows());
|
51
92
|
});
|
52
93
|
}
|
94
|
+
/**
|
95
|
+
* Handles input changes in the textarea
|
96
|
+
* @param {string} value - The new value of the textarea
|
97
|
+
* @description Updates the number of rows and triggers change detection
|
98
|
+
*/
|
53
99
|
onInputChange(value) {
|
54
100
|
// signal rows update
|
55
101
|
this.rows.set(this.hostEl.value.split('\n').length);
|
56
102
|
this.onChange(value);
|
57
103
|
}
|
104
|
+
/**
|
105
|
+
* Handles blur events on the textarea
|
106
|
+
* @param {string} value - The current value of the textarea
|
107
|
+
* @description Marks the control as touched and triggers validation
|
108
|
+
*/
|
58
109
|
onBlur(value) {
|
59
110
|
this.onTouched(value);
|
60
111
|
}
|
112
|
+
/**
|
113
|
+
* @description
|
114
|
+
* Lifecycle hook that initializes the component. Sets up DOM elements,
|
115
|
+
* initializes form control integration, and establishes state management
|
116
|
+
*/
|
61
117
|
ngOnInit() {
|
62
118
|
this.hostEl = this._elementRef.nativeElement;
|
63
119
|
this.hostParentEl = this.hostEl.parentElement;
|
@@ -85,6 +141,11 @@ class EuiTextareaComponent {
|
|
85
141
|
}
|
86
142
|
}
|
87
143
|
}
|
144
|
+
/**
|
145
|
+
* @description
|
146
|
+
* Lifecycle hook that checks for changes in form control state
|
147
|
+
* Updates invalid state based on form control validation
|
148
|
+
*/
|
88
149
|
ngDoCheck() {
|
89
150
|
if (this.control instanceof NgControl || this.control instanceof FormControl) {
|
90
151
|
// TODO: Delete when https://github.com/angular/angular/issues/30275 is resolved
|
@@ -92,6 +153,11 @@ class EuiTextareaComponent {
|
|
92
153
|
this.baseStatesDirective.euiDanger = this.isInvalid;
|
93
154
|
}
|
94
155
|
}
|
156
|
+
/**
|
157
|
+
* @description
|
158
|
+
* Lifecycle hook that handles changes to component inputs
|
159
|
+
* @param {SimpleChanges} changes - Object containing changed properties
|
160
|
+
*/
|
95
161
|
ngOnChanges(changes) {
|
96
162
|
if (changes['readonly']) {
|
97
163
|
const readonly = changes['readonly'].currentValue;
|
@@ -116,6 +182,11 @@ class EuiTextareaComponent {
|
|
116
182
|
this.baseStatesDirective.euiDanger = changes['isInvalid'].currentValue;
|
117
183
|
}
|
118
184
|
}
|
185
|
+
/**
|
186
|
+
* @description
|
187
|
+
* Lifecycle hook that cleans up component resources
|
188
|
+
* Completes observables and removes generated DOM elements
|
189
|
+
*/
|
119
190
|
ngOnDestroy() {
|
120
191
|
this.destroy$.complete();
|
121
192
|
this.destroy$.unsubscribe();
|
@@ -137,6 +208,11 @@ class EuiTextareaComponent {
|
|
137
208
|
}
|
138
209
|
}
|
139
210
|
}
|
211
|
+
/**
|
212
|
+
* @description
|
213
|
+
* ControlValueAccessor implementation for writing values
|
214
|
+
* @param {unknown} obj - The value to write to the textarea
|
215
|
+
*/
|
140
216
|
writeValue(obj) {
|
141
217
|
if (this.valueContainerEl) {
|
142
218
|
this._renderer.setProperty(this.valueContainerEl, 'innerText', obj || null);
|
@@ -145,12 +221,27 @@ class EuiTextareaComponent {
|
|
145
221
|
// signal rows update
|
146
222
|
this.rows.set(this.hostEl.value.split('\n').length);
|
147
223
|
}
|
224
|
+
/**
|
225
|
+
* @description
|
226
|
+
* Registers the callback function for change events
|
227
|
+
* @param {Function} fn - The callback function
|
228
|
+
*/
|
148
229
|
registerOnChange(fn) {
|
149
230
|
this.onChange = fn;
|
150
231
|
}
|
232
|
+
/**
|
233
|
+
* @description
|
234
|
+
* Registers the callback function for touched events
|
235
|
+
* @param {Function} fn - The callback function
|
236
|
+
*/
|
151
237
|
registerOnTouched(fn) {
|
152
238
|
this.onTouched = fn;
|
153
239
|
}
|
240
|
+
/**
|
241
|
+
* @description
|
242
|
+
* Sets the disabled state of the textarea
|
243
|
+
* @param {boolean} isDisabled - The disabled state to set
|
244
|
+
*/
|
154
245
|
setDisabledState(isDisabled) {
|
155
246
|
if (this.hostEl) {
|
156
247
|
this._renderer.setProperty(this.hostEl, 'disabled', isDisabled);
|
@@ -165,6 +256,12 @@ class EuiTextareaComponent {
|
|
165
256
|
this.isInvalid = this.control.invalid;
|
166
257
|
}
|
167
258
|
}
|
259
|
+
/**
|
260
|
+
* @description
|
261
|
+
* Creates the container for the textarea element
|
262
|
+
* @returns {HTMLDivElement} The created wrapper container element
|
263
|
+
* @private
|
264
|
+
*/
|
168
265
|
createHostWrapperContainer() {
|
169
266
|
const wrapper = this._renderer.createElement('div');
|
170
267
|
this._renderer.addClass(wrapper, 'eui-textarea__wrapper');
|
@@ -179,8 +276,9 @@ class EuiTextareaComponent {
|
|
179
276
|
return wrapper;
|
180
277
|
}
|
181
278
|
/**
|
182
|
-
*
|
183
|
-
*
|
279
|
+
* @description
|
280
|
+
* Creates the container for displaying readonly values
|
281
|
+
* @returns {HTMLDivElement} The created value container element
|
184
282
|
* @private
|
185
283
|
*/
|
186
284
|
createValueContainer() {
|
@@ -190,7 +288,10 @@ class EuiTextareaComponent {
|
|
190
288
|
return valueContainer;
|
191
289
|
}
|
192
290
|
/**
|
193
|
-
*
|
291
|
+
* @description
|
292
|
+
* Handles the DOM manipulation for the textarea structure
|
293
|
+
* Wraps the textarea in necessary containers and adds
|
294
|
+
* the readonly value display element
|
194
295
|
*
|
195
296
|
* @private
|
196
297
|
*/
|
@@ -202,11 +303,11 @@ class EuiTextareaComponent {
|
|
202
303
|
}
|
203
304
|
}
|
204
305
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EuiTextareaComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.BaseStatesDirective }], target: i0.ɵɵFactoryTarget.Component }); }
|
205
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.5", type: EuiTextareaComponent, isStandalone:
|
306
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.5", type: EuiTextareaComponent, isStandalone: true, selector: "textarea[euiTextArea]", inputs: { disabled: "disabled", readonly: "readonly", id: "id", isInvalid: ["isInvalid", "isInvalid", booleanAttribute], e2eAttr: "e2eAttr" }, outputs: { rowsChange: "rowsChange" }, host: { listeners: { "input": "onInputChange($event.target.value)", "blur": "onBlur($event.target.value)" }, properties: { "class": "this.class", "attr.disabled": "this.disabled", "attr.readonly": "this.readonly", "attr.id": "this.id", "attr.data-e2e": "this.e2eAttr" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EuiTextareaComponent), multi: true }], usesOnChanges: true, hostDirectives: [{ directive: i1.BaseStatesDirective, inputs: ["euiDisabled", "euiDisabled", "euiDanger", "euiDanger"] }], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".eui-19 .eui-textarea__wrapper{display:flex;position:relative;width:100%}.eui-19 .eui-textarea__wrapper .eui-textarea{font:var(--eui-f-m);appearance:none;background-color:var(--eui-c-white);border:1px solid var(--eui-c-neutral-lighter);border-radius:var(--eui-br-m);box-shadow:none;color:var(--eui-c-text);padding:calc(var(--eui-s-xs) - 1px) calc(var(--eui-s-m) - 1px);width:100%;height:auto;resize:vertical}.eui-19 .eui-textarea__wrapper .eui-textarea:focus:not([readonly]){outline:2px solid var(--eui-c-focus)!important;outline-offset:-2px!important;transition:none}.eui-19 .eui-textarea__wrapper .eui-textarea:focus-visible:not([readonly]){outline:2px solid var(--eui-c-focus-visible)!important;outline-offset:-2px!important;transition:none}.eui-19 .eui-textarea__wrapper .eui-textarea [tabindex=\"0\"]:focus:not([readonly]){outline:2px solid var(--eui-c-focus-visible)!important;outline-offset:-2px!important;transition:none}.eui-19 .eui-textarea__wrapper .eui-textarea:not([hidden]){display:block}.eui-19 .eui-textarea__wrapper .eui-textarea::placeholder{color:var(--eui-c-neutral-lighter)!important;opacity:1}.eui-19 .eui-textarea__wrapper .eui-textarea[readonly]{background-color:transparent;border-color:transparent;box-shadow:none;height:inherit;padding-left:0;padding-right:0;pointer-events:none}.eui-19 .eui-textarea__wrapper .eui-textarea[readonly]+.eui-feedback-message,.eui-19 .eui-textarea__wrapper .eui-textarea[readonly]+.eui-input-maxlength{appearance:none;display:none}.eui-19 .eui-textarea__wrapper .eui-textarea[disabled]:not([readonly]),.eui-19 .eui-textarea__wrapper .eui-textarea--disabled:not([readonly]){background-color:var(--eui-c-neutral-bg-light)!important;border:1px solid var(--eui-c-neutral-lightest);color:var(--eui-c-neutral-light);pointer-events:auto}.eui-19 .eui-textarea__wrapper .eui-textarea--invalid,.eui-19 .eui-textarea__wrapper .eui-textarea--danger{border:1px solid var(--eui-c-danger)}.eui-19 .eui-textarea__wrapper .eui-textarea--clearable{padding-right:var(--eui-s-2xl)}.eui-19 .eui-textarea__wrapper .eui-textarea--clearable-icon{cursor:pointer;position:absolute;right:var(--eui-s-s);-webkit-user-select:none;user-select:none;visibility:visible}.eui-19 .eui-textarea__wrapper .eui-textarea--clearable-icon:focus:not([readonly]){outline:2px solid var(--eui-c-focus)!important;outline-offset:-2px!important;transition:none}.eui-19 .eui-textarea__wrapper .eui-textarea--clearable-icon:focus-visible:not([readonly]){outline:2px solid var(--eui-c-focus-visible)!important;outline-offset:-2px!important;transition:none}.eui-19 .eui-textarea__wrapper .eui-textarea--clearable-icon [tabindex=\"0\"]:focus:not([readonly]){outline:2px solid var(--eui-c-focus-visible)!important;outline-offset:-2px!important;transition:none}.eui-19 .eui-textarea__wrapper .eui-textarea--clearable-icon>svg{fill:var(--eui-c-neutral-lighter)}.eui-19 .eui-textarea__wrapper .eui-textarea--clearable-icon>svg:hover{fill:var(--eui-c-danger)}.eui-19 .eui-textarea__wrapper .eui-textarea--loading{padding-right:var(--eui-s-2xl)}.eui-19 .eui-textarea__wrapper .eui-textarea--loading-icon{align-items:center;display:flex}.eui-19 .eui-textarea__wrapper .eui-textarea--loading-icon:after,.eui-19 .eui-textarea__wrapper .eui-textarea--loading-icon:before{content:\"\";height:var(--eui-s-l);position:absolute;right:var(--eui-s-s);width:var(--eui-s-l)}.eui-19 .eui-textarea__wrapper .eui-textarea--loading-icon:before{border:var(--eui-s-2xs) solid rgba(0,0,0,.35);border-radius:100%}.eui-19 .eui-textarea__wrapper .eui-textarea--loading-icon:after{animation:loading .6s linear;animation-iteration-count:infinite;border-color:var(--eui-c-white) transparent transparent;border-radius:100%;border-style:solid;border-width:var(--eui-s-2xs);box-shadow:0 0 0 1px transparent}.eui-19 .eui-textarea__wrapper .eui-textarea--loading-icon--sm:after,.eui-19 .eui-textarea__wrapper .eui-textarea--loading-icon--sm:before{height:var(--eui-s-m);width:var(--eui-s-m)}@keyframes loading{to{transform:rotate(360deg)}}.eui-19 .eui-textarea__wrapper .eui-textarea::-webkit-scrollbar{display:inherit;height:8px;width:8px;background-color:var(--eui-c-neutral-bg-light)}.eui-19 .eui-textarea__wrapper .eui-textarea::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-19 .eui-textarea__wrapper .eui-textarea::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-19 .eui-textarea__wrapper .eui-textarea::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}@-moz-document url-prefix(){.eui-19 .eui-textarea__wrapper .eui-textarea{scrollbar-color:var(--eui-c-neutral-lighter) var(--eui-c-neutral-bg-light);scrollbar-width:auto}}.eui-19 .eui-textarea__wrapper .eui-textarea--disabled,.eui-19 .eui-textarea__wrapper .eui-textarea[disabled]{pointer-events:auto}.eui-19 .eui-textarea__wrapper .eui-textarea__value-container,.eui-19 .eui-textarea__wrapper.eui-textarea__wrapper--readonly .eui-input-maxlength-wrapper,.eui-19 .eui-textarea__wrapper.eui-textarea__wrapper--readonly .eui-textarea--readonly{appearance:none;display:none}.eui-19 .eui-textarea__wrapper.eui-textarea__wrapper--readonly .eui-textarea__value-container{appearance:initial;color:var(--eui-c-neutral-light);display:inline-flex;min-height:calc(var(--eui-s-3xl) + var(--eui-s-2xs));word-break:break-word}.eui-19 .eui-textarea__wrapper .eui-textarea--invalid{border:var(--eui-bw-xs) solid var(--eui-c-danger-dark)}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
206
307
|
}
|
207
308
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EuiTextareaComponent, decorators: [{
|
208
309
|
type: Component,
|
209
|
-
args: [{ selector: 'textarea[euiTextArea]', template: '<ng-content></ng-content>', encapsulation: ViewEncapsulation.None, standalone:
|
310
|
+
args: [{ selector: 'textarea[euiTextArea]', template: '<ng-content></ng-content>', encapsulation: ViewEncapsulation.None, standalone: true, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EuiTextareaComponent), multi: true }], hostDirectives: [
|
210
311
|
{
|
211
312
|
directive: BaseStatesDirective,
|
212
313
|
inputs: ['euiDisabled', 'euiDanger'],
|
@@ -248,7 +349,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
248
349
|
args: ['blur', ['$event.target.value']]
|
249
350
|
}] } });
|
250
351
|
|
352
|
+
/* eslint-disable @angular-eslint/directive-selector */
|
353
|
+
/**
|
354
|
+
* A directive that automatically adjusts the height of a textarea based on its content.
|
355
|
+
*
|
356
|
+
* @directive
|
357
|
+
* @selector textarea[autoResize]
|
358
|
+
* @description
|
359
|
+
* The AutoResizeDirective automatically adjusts the height of a textarea element as the user types,
|
360
|
+
* ensuring that all content is visible without requiring manual resizing or scrolling.
|
361
|
+
* It supports minimum and maximum row constraints and can be enabled/disabled dynamically.
|
362
|
+
*
|
363
|
+
* @example
|
364
|
+
* ```html
|
365
|
+
* <textarea autoResize [minRows]="2" [maxRows]="5"></textarea>
|
366
|
+
* ```
|
367
|
+
*/
|
251
368
|
class AutoResizeDirective {
|
369
|
+
/**
|
370
|
+
* @description
|
371
|
+
* Sets the minimum number of rows for the textarea.
|
372
|
+
* This value determines the initial height of the textarea.
|
373
|
+
*
|
374
|
+
* @param minRows - The minimum number of rows to display
|
375
|
+
*/
|
252
376
|
set minRows(minRows) {
|
253
377
|
this.defaultRows = coerceNumberProperty(minRows);
|
254
378
|
}
|
@@ -256,14 +380,43 @@ class AutoResizeDirective {
|
|
256
380
|
this.el = el;
|
257
381
|
this.renderer = renderer;
|
258
382
|
this.control = control;
|
383
|
+
/**
|
384
|
+
* @description
|
385
|
+
* Controls whether the auto-resize functionality is enabled.
|
386
|
+
* When true, the textarea will automatically adjust its height based on content.
|
387
|
+
* When false, the textarea will behave normally.
|
388
|
+
*
|
389
|
+
* @default true
|
390
|
+
*/
|
259
391
|
this.autoResize = true;
|
392
|
+
/**
|
393
|
+
* @description
|
394
|
+
* Sets the maximum number of rows for the textarea.
|
395
|
+
* When set to a value greater than 0, the textarea will not grow beyond this number of rows
|
396
|
+
* and will show scrollbars if necessary.
|
397
|
+
* When set to 0, there is no maximum limit.
|
398
|
+
*
|
399
|
+
* @default 0
|
400
|
+
*/
|
260
401
|
this.maxRows = 0;
|
261
402
|
this.defaultRows = 1;
|
262
403
|
this.destroy$ = new Subject();
|
263
404
|
}
|
405
|
+
/**
|
406
|
+
* Event handler for input events on the textarea.
|
407
|
+
* Triggers the resize calculation when the content changes.
|
408
|
+
*
|
409
|
+
* @internal
|
410
|
+
*/
|
264
411
|
onInput() {
|
265
412
|
this.resize();
|
266
413
|
}
|
414
|
+
/**
|
415
|
+
* Initializes the directive by setting up window resize event handling
|
416
|
+
* and mutation observer for readonly attribute changes.
|
417
|
+
*
|
418
|
+
* @internal
|
419
|
+
*/
|
267
420
|
ngOnInit() {
|
268
421
|
fromEvent(window, 'resize')
|
269
422
|
.pipe(takeUntil(this.destroy$), debounceTime(300))
|
@@ -273,6 +426,13 @@ class AutoResizeDirective {
|
|
273
426
|
// Start observing the target node for configured mutations
|
274
427
|
this.observer.observe(this.el.nativeElement, { attributes: true });
|
275
428
|
}
|
429
|
+
/**
|
430
|
+
* Handles changes to the directive's inputs, particularly the autoResize property.
|
431
|
+
* Updates the textarea's appearance and behavior accordingly.
|
432
|
+
*
|
433
|
+
* @param changes - Angular SimpleChanges object containing changed properties
|
434
|
+
* @internal
|
435
|
+
*/
|
276
436
|
ngOnChanges(changes) {
|
277
437
|
if (changes['autoResize']) {
|
278
438
|
const enable = changes['autoResize'].currentValue || this.autoResize;
|
@@ -284,6 +444,11 @@ class AutoResizeDirective {
|
|
284
444
|
}
|
285
445
|
}
|
286
446
|
}
|
447
|
+
/**
|
448
|
+
* Performs initial resize after view initialization and sets up form control value change handling if applicable.
|
449
|
+
*
|
450
|
+
* @internal
|
451
|
+
*/
|
287
452
|
ngAfterViewInit() {
|
288
453
|
if (this.autoResize) {
|
289
454
|
if (this.control) {
|
@@ -294,13 +459,29 @@ class AutoResizeDirective {
|
|
294
459
|
}
|
295
460
|
}
|
296
461
|
}
|
462
|
+
/**
|
463
|
+
* Cleans up subscriptions and disconnects observers when the directive is destroyed.
|
464
|
+
*
|
465
|
+
* @internal
|
466
|
+
*/
|
297
467
|
ngOnDestroy() {
|
298
468
|
this.destroy$.complete();
|
299
469
|
this.destroy$.unsubscribe();
|
300
470
|
this.observer.disconnect();
|
301
471
|
}
|
302
472
|
/**
|
303
|
-
* Calculates
|
473
|
+
* Calculates and sets the appropriate height for the textarea based on its content.
|
474
|
+
* This method creates a temporary clone of the textarea to measure the required height,
|
475
|
+
* taking into account minRows and maxRows constraints.
|
476
|
+
*
|
477
|
+
* The calculation process:
|
478
|
+
* 1. Creates a hidden clone of the textarea
|
479
|
+
* 2. Sets the clone's width to match the original
|
480
|
+
* 3. Measures the required height based on content
|
481
|
+
* 4. Applies maxRows constraint if specified
|
482
|
+
* 5. Updates the original textarea's height
|
483
|
+
*
|
484
|
+
* @public
|
304
485
|
*/
|
305
486
|
resize() {
|
306
487
|
if (this.autoResize) {
|
@@ -340,7 +521,8 @@ class AutoResizeDirective {
|
|
340
521
|
}
|
341
522
|
}
|
342
523
|
/**
|
343
|
-
*
|
524
|
+
* Sets up subscription to form control value changes to trigger resize when the value
|
525
|
+
* is changed programmatically through the form control.
|
344
526
|
*
|
345
527
|
* @protected
|
346
528
|
*/
|
@@ -349,6 +531,13 @@ class AutoResizeDirective {
|
|
349
531
|
// startWith is being used to cause resize to be called in case of late subscription after value has changed
|
350
532
|
this.control.valueChanges.pipe(takeUntil(this.destroy$), startWith('')).subscribe(() => this.resize());
|
351
533
|
}
|
534
|
+
/**
|
535
|
+
* Mutation observer callback that handles changes to the readonly attribute
|
536
|
+
* and triggers resize when necessary.
|
537
|
+
*
|
538
|
+
* @param mutationsList - List of mutations that occurred
|
539
|
+
* @private
|
540
|
+
*/
|
352
541
|
readonlyMutationObserver(mutationsList) {
|
353
542
|
// Use traditional 'for loops' for IE 11
|
354
543
|
for (const mutation of mutationsList) {
|
@@ -358,14 +547,13 @@ class AutoResizeDirective {
|
|
358
547
|
}
|
359
548
|
}
|
360
549
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AutoResizeDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1$1.NgControl, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
361
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.5", type: AutoResizeDirective, isStandalone:
|
550
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.5", type: AutoResizeDirective, isStandalone: true, selector: "textarea[autoResize]", inputs: { autoResize: ["autoResize", "autoResize", booleanAttribute], minRows: "minRows", maxRows: ["maxRows", "maxRows", numberAttribute] }, host: { listeners: { "input": "onInput($event.target)" } }, usesOnChanges: true, ngImport: i0 }); }
|
362
551
|
}
|
363
552
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AutoResizeDirective, decorators: [{
|
364
553
|
type: Directive,
|
365
554
|
args: [{
|
366
|
-
// eslint-disable-next-line @angular-eslint/directive-selector
|
367
555
|
selector: 'textarea[autoResize]',
|
368
|
-
standalone:
|
556
|
+
standalone: true,
|
369
557
|
}]
|
370
558
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1$1.NgControl, decorators: [{
|
371
559
|
type: Optional
|
@@ -382,16 +570,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
382
570
|
args: ['input', ['$event.target']]
|
383
571
|
}] } });
|
384
572
|
|
573
|
+
/**
|
574
|
+
* @description
|
575
|
+
* A module that provides textarea functionality with auto-resizing capabilities.
|
576
|
+
* This module encapsulates the EuiTextareaComponent and AutoResizeDirective to provide
|
577
|
+
* a cohesive textarea solution for Angular applications.
|
578
|
+
*
|
579
|
+
* @usageNotes
|
580
|
+
* To use this module, import it into your feature module:
|
581
|
+
* ```typescript
|
582
|
+
* import { EuiTextAreaModule } from './path-to-module/eui-textarea.module';
|
583
|
+
*
|
584
|
+
* @NgModule({
|
585
|
+
* imports: [EuiTextAreaModule]
|
586
|
+
* })
|
587
|
+
* export class YourFeatureModule { }
|
588
|
+
* ```
|
589
|
+
*
|
590
|
+
* @publicApi
|
591
|
+
*/
|
385
592
|
class EuiTextAreaModule {
|
386
593
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EuiTextAreaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
387
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.5", ngImport: i0, type: EuiTextAreaModule,
|
594
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.5", ngImport: i0, type: EuiTextAreaModule, imports: [CommonModule, EuiTextareaComponent, AutoResizeDirective], exports: [EuiTextareaComponent, AutoResizeDirective] }); }
|
388
595
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EuiTextAreaModule, imports: [CommonModule] }); }
|
389
596
|
}
|
390
597
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EuiTextAreaModule, decorators: [{
|
391
598
|
type: NgModule,
|
392
599
|
args: [{
|
393
|
-
imports: [CommonModule],
|
394
|
-
declarations: [EuiTextareaComponent, AutoResizeDirective],
|
600
|
+
imports: [CommonModule, EuiTextareaComponent, AutoResizeDirective],
|
395
601
|
exports: [EuiTextareaComponent, AutoResizeDirective],
|
396
602
|
}]
|
397
603
|
}] });
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eui-components-eui-textarea.mjs","sources":["../../eui-textarea/eui-textarea.component.ts","../../eui-textarea/auto-resize.directive.ts","../../eui-textarea/eui-textarea.module.ts","../../eui-textarea/eui-components-eui-textarea.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n OnDestroy,\n DoCheck,\n Injector,\n forwardRef,\n booleanAttribute,\n signal,\n Output,\n EventEmitter,\n effect,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n NgControl,\n FormControl,\n FormControlDirective,\n FormGroupDirective,\n FormControlName,\n} from '@angular/forms';\nimport { BaseStatesDirective } from '@eui/components/shared';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'textarea[euiTextArea]',\n styleUrls: ['./styles/_index.scss'],\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EuiTextareaComponent), multi: true }],\n hostDirectives: [\n {\n directive: BaseStatesDirective,\n inputs: ['euiDisabled', 'euiDanger'],\n },\n ],\n})\nexport class EuiTextareaComponent implements OnInit, OnDestroy, DoCheck, OnChanges, ControlValueAccessor {\n static idCounter = 0;\n\n /**\n * emits the number of rows of text in the textarea while input changes\n */\n @Output() rowsChange = new EventEmitter<number>();\n\n @HostBinding('class')\n public get class(): string {\n return [this.isInvalid ? 'eui-textarea--invalid' : '', this.baseStatesDirective.getCssClasses('eui-textarea')].join(' ').trim();\n }\n\n @HostBinding('attr.disabled')\n @Input()\n public get disabled(): boolean | null {\n return this._disabled ? true : null;\n }\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set disabled(state: any) {\n // in case it's controlled by NgControl override\n this._disabled = coerceBooleanProperty(state);\n // set BaseDirective Attribute\n this.baseStatesDirective.euiDisabled = this._disabled;\n }\n @HostBinding('attr.readonly')\n @Input()\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get readonly(): any {\n return this._readonly || undefined;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set readonly(state: any) {\n this._readonly = coerceBooleanProperty(state);\n }\n @HostBinding('attr.id')\n @Input()\n id = `eui-textarea_${EuiTextareaComponent.idCounter++}`;\n\n @Input({ transform: booleanAttribute }) isInvalid: boolean;\n @HostBinding('attr.data-e2e') @Input() e2eAttr = 'eui-textarea';\n protected _readonly: boolean;\n\n protected hostEl: HTMLTextAreaElement;\n\n protected hostParentEl: HTMLElement;\n protected hostWrapperEl: HTMLDivElement;\n protected valueContainerEl: HTMLDivElement;\n private _disabled: boolean;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private control: FormControl | NgControl;\n private rows = signal(0);\n\n constructor(\n private injector: Injector,\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n private baseStatesDirective: BaseStatesDirective,\n ) {\n effect(() => {\n this.rowsChange.emit(this.rows());\n });\n }\n\n @HostListener('input', ['$event.target.value'])\n public onInputChange(value: string): void {\n // signal rows update\n this.rows.set(this.hostEl.value.split('\\n').length)\n this.onChange(value);\n }\n\n @HostListener('blur', ['$event.target.value'])\n public onBlur(value: string): void {\n this.onTouched(value);\n }\n\n ngOnInit(): void {\n this.hostEl = this._elementRef.nativeElement;\n this.hostParentEl = this.hostEl.parentElement;\n this.hostWrapperEl = this.createHostWrapperContainer();\n this.valueContainerEl = this.createValueContainer();\n\n this.handleMarkup();\n // extract the FormControl or NgControl\n this.control = (this.injector as Injector).get(NgControl, null, { optional: true });\n if (this.control instanceof FormControlName) {\n this.control = (this.injector as Injector).get(FormGroupDirective).getControl(this.control);\n } else if (this.control instanceof FormControlDirective) {\n this.control = this.control.form as FormControl;\n }\n // sets invalid state if control is present\n if (this.control instanceof FormControl || this.control instanceof NgControl) {\n this.disabled = this.control.disabled;\n this.isInvalid = this.control.dirty && this.control.touched && this.control.invalid;\n if (this.control instanceof FormControl) {\n this.control.statusChanges.pipe(takeUntil(this.destroy$)).subscribe((status) => {\n this.isInvalid = status === 'INVALID';\n this.disabled = status === 'DISABLED';\n this.baseStatesDirective.euiDanger = this.isInvalid;\n });\n }\n }\n }\n\n ngDoCheck(): void {\n if (this.control instanceof NgControl || this.control instanceof FormControl) {\n // TODO: Delete when https://github.com/angular/angular/issues/30275 is resolved\n this.isInvalid = this.control.invalid && this.control.touched;\n this.baseStatesDirective.euiDanger = this.isInvalid;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['readonly']) {\n const readonly = changes['readonly'].currentValue;\n\n if (this.hostWrapperEl && this.valueContainerEl) {\n this.hostWrapperEl.classList.toggle('eui-textarea__wrapper--readonly', !!readonly);\n }\n if (this.hostEl && this.valueContainerEl) {\n this.hostEl.classList.toggle('eui-textarea--readonly', !!readonly);\n this.valueContainerEl.innerText = this.hostEl.value;\n }\n }\n if (changes['euiDisabled']) {\n if (this.control instanceof FormControl) {\n // eslint-disable-next-line\n changes['euiDisabled'].currentValue ? this.control.disable() : this.control.enable();\n } else {\n this.setDisabledState(changes['euiDisabled'].currentValue);\n }\n }\n if(changes['isInvalid']) {\n this.baseStatesDirective.euiDanger = changes['isInvalid'].currentValue;\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.complete();\n this.destroy$.unsubscribe();\n // cleanup DOM leftovers\n if (this.valueContainerEl) {\n try {\n this._renderer.removeChild(this.hostEl.parentElement, this.valueContainerEl);\n } catch (e) {\n console.error(e);\n }\n }\n if (this.hostWrapperEl) {\n try {\n this._renderer.removeChild(this.hostParentEl, this.hostWrapperEl);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n writeValue(obj: unknown): void {\n if (this.valueContainerEl) {\n this._renderer.setProperty(this.valueContainerEl, 'innerText', obj || null);\n }\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', obj || null);\n // signal rows update\n this.rows.set(this.hostEl.value.split('\\n').length)\n }\n\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (this.hostEl) {\n this._renderer.setProperty(this.hostEl, 'disabled', isDisabled);\n }\n }\n\n protected onChange(_: unknown): void {\n this.writeValue(_);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected onTouched(_: unknown): void {\n if (this.control) {\n this.isInvalid = this.control.invalid;\n }\n }\n\n private createHostWrapperContainer(): HTMLDivElement {\n const wrapper = this._renderer.createElement('div');\n this._renderer.addClass(wrapper, 'eui-textarea__wrapper');\n if (this.readonly) {\n this._renderer.addClass(wrapper, 'eui-textarea__wrapper--readonly');\n this._renderer.addClass(this.hostEl, 'eui-textarea--readonly');\n } else {\n this._renderer.removeClass(wrapper, 'eui-textarea__wrapper--readonly');\n this._renderer.removeClass(this.hostEl, 'eui-textarea--readonly');\n }\n\n return wrapper;\n }\n\n /**\n * Create a Div element which will hold the value to display when readonly\n *\n * @private\n */\n private createValueContainer(): HTMLDivElement {\n const valueContainer = this._renderer.createElement('div');\n this._renderer.addClass(valueContainer, 'eui-textarea__value-container');\n this._renderer.setProperty(valueContainer, 'innerText', this.hostEl.value);\n return valueContainer;\n }\n\n /**\n * Changes the markup around the textarea. Append textarea onto a container with div\n *\n * @private\n */\n private handleMarkup(): void {\n if (this.hostParentEl != null) {\n this.hostParentEl.replaceChild(this.hostWrapperEl, this.hostEl);\n this.hostWrapperEl.appendChild(this.hostEl);\n this.hostWrapperEl.appendChild(this.valueContainerEl);\n }\n }\n}\n","import {\n Directive,\n OnInit,\n OnDestroy,\n Input,\n ElementRef,\n HostListener,\n AfterViewInit,\n Optional,\n Renderer2,\n OnChanges,\n booleanAttribute,\n numberAttribute,\n SimpleChanges,\n} from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, startWith, takeUntil } from 'rxjs/operators';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'textarea[autoResize]',\n standalone: false,\n})\nexport class AutoResizeDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n @Input({ transform: booleanAttribute }) autoResize = true;\n\n @Input()\n set minRows(minRows: number | string) {\n this.defaultRows = coerceNumberProperty(minRows);\n }\n @Input({ transform: numberAttribute }) maxRows = 0;\n\n private defaultRows = 1;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private observer: MutationObserver;\n\n constructor(\n protected el: ElementRef,\n protected renderer: Renderer2,\n @Optional() protected control: NgControl,\n ) {}\n\n @HostListener('input', ['$event.target'])\n onInput(): void {\n this.resize();\n }\n\n ngOnInit(): void {\n fromEvent(window, 'resize')\n .pipe(takeUntil(this.destroy$), debounceTime(300))\n .subscribe(() => this.resize());\n\n // Create an observer instance linked to the callback function\n this.observer = new MutationObserver(this.readonlyMutationObserver.bind(this));\n\n // Start observing the target node for configured mutations\n this.observer.observe(this.el.nativeElement, { attributes: true });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['autoResize']) {\n const enable = changes['autoResize'].currentValue || this.autoResize;\n this.renderer.setProperty(this.el.nativeElement, 'rows', this.defaultRows);\n this.renderer.setStyle(this.el.nativeElement, 'overflow', enable ? 'hidden' : '');\n this.renderer.setStyle(this.el.nativeElement, 'resize', enable ? 'none' : '');\n if (enable) {\n this.resize();\n }\n }\n }\n\n ngAfterViewInit(): void {\n if (this.autoResize) {\n if (this.control) {\n this.handleFormControlChanges();\n } else {\n this.resize();\n }\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.complete();\n this.destroy$.unsubscribe();\n this.observer.disconnect();\n }\n\n /**\n * Calculates the height and set it, causing the textarea to resize.\n */\n public resize(): void {\n if (this.autoResize) {\n // clone element\n const clone = this.el.nativeElement.cloneNode(true);\n const parent = this.el.nativeElement.parentNode;\n clone.style.width = this.el.nativeElement.offsetWidth + 'px';\n clone.style.visibility = 'hidden';\n clone.style.position = 'absolute';\n clone.textContent = this.el.nativeElement.value;\n parent.appendChild(clone);\n clone.style['overflow-y'] = 'hidden';\n clone.style.height = 'auto';\n const cloneHeight = clone.scrollHeight;\n\n this.renderer.setStyle(clone, 'height', cloneHeight);\n // calculate height\n const { offsetHeight } = clone;\n let { scrollHeight } = clone;\n // Enforce maxRows limit if set\n if (this.maxRows > 0) {\n const lineHeight = parseInt(getComputedStyle(clone).lineHeight, 10);\n const maxHeight = lineHeight * this.maxRows;\n scrollHeight = Math.min(scrollHeight, maxHeight);\n if(scrollHeight >= maxHeight) {\n this.renderer.removeStyle(this.el.nativeElement, 'overflow'); // Restore overflow behavior\n } else {\n this.renderer.setStyle(this.el.nativeElement, 'overflow', 'hidden'); // Hide scrollbars during adjustment\n }\n }\n let height = offsetHeight > scrollHeight ? offsetHeight : scrollHeight;\n height = height <= 0 ? 'auto' : `${height}px`;\n // remove clone\n parent.removeChild(clone);\n // set height\n this.renderer.setStyle(this.el.nativeElement, 'height', height);\n }\n }\n\n /**\n * handles value changes through FormControl\n *\n * @protected\n */\n protected handleFormControlChanges(): void {\n // in case value changed manually through control, call resize()\n // startWith is being used to cause resize to be called in case of late subscription after value has changed\n this.control.valueChanges.pipe(takeUntil(this.destroy$), startWith('')).subscribe(() => this.resize());\n }\n\n private readonlyMutationObserver(mutationsList: MutationRecord[]): void {\n // Use traditional 'for loops' for IE 11\n for (const mutation of mutationsList) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'readonly') {\n this.resize();\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiTextareaComponent } from './eui-textarea.component';\nimport { AutoResizeDirective } from './auto-resize.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [EuiTextareaComponent, AutoResizeDirective],\n exports: [EuiTextareaComponent, AutoResizeDirective],\n})\nexport class EuiTextAreaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"eui-components-eui-textarea.mjs","sources":["../../eui-textarea/eui-textarea.component.ts","../../eui-textarea/auto-resize.directive.ts","../../eui-textarea/eui-textarea.module.ts","../../eui-textarea/eui-components-eui-textarea.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n OnDestroy,\n DoCheck,\n Injector,\n forwardRef,\n booleanAttribute,\n signal,\n Output,\n EventEmitter,\n effect,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n NgControl,\n FormControl,\n FormControlDirective,\n FormGroupDirective,\n FormControlName,\n} from '@angular/forms';\nimport { BaseStatesDirective } from '@eui/components/shared';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @fileoverview Enhanced textarea component for Angular forms with readonly state, form control integration, and state management.\n *\n * A form control component that provides an enhanced textarea with additional features.\n * Supports readonly state visualization, form control integration, and state management.\n *\n * @component\n * @selector textarea[euiTextArea]\n *\n * @example\n * ```html\n * <textarea euiTextArea\n * [(ngModel)]=\"value\"\n * [readonly]=\"isReadonly\"\n * [disabled]=\"isDisabled\"\n * [isInvalid]=\"hasError\" />\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'textarea[euiTextArea]',\n styleUrls: ['./styles/_index.scss'],\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EuiTextareaComponent), multi: true }],\n hostDirectives: [\n {\n directive: BaseStatesDirective,\n inputs: ['euiDisabled', 'euiDanger'],\n },\n ],\n})\nexport class EuiTextareaComponent implements OnInit, OnDestroy, DoCheck, OnChanges, ControlValueAccessor {\n /**\n * Static counter used to generate unique IDs for textarea instances\n * @static\n */\n static idCounter = 0;\n\n /**\n * Event emitter that fires when the number of text rows in the textarea changes\n */\n @Output() rowsChange = new EventEmitter<number>();\n\n @HostBinding('class')\n public get class(): string {\n return [this.isInvalid ? 'eui-textarea--invalid' : '', this.baseStatesDirective.getCssClasses('eui-textarea')].join(' ').trim();\n }\n\n /**\n * The disabled state of the textarea\n * @description When set to true, prevents user interaction with the textarea.\n * This can be controlled either directly or through form control binding.\n */\n @HostBinding('attr.disabled')\n @Input()\n public get disabled(): boolean | null {\n return this._disabled ? true : null;\n }\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set disabled(state: any) {\n // in case it's controlled by NgControl override\n this._disabled = coerceBooleanProperty(state);\n // set BaseDirective Attribute\n this.baseStatesDirective.euiDisabled = this._disabled;\n }\n /**\n * The readonly state of the textarea\n * @description When true, displays the textarea content in a read-only format\n * with special styling.\n */\n @HostBinding('attr.readonly')\n @Input()\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get readonly(): any {\n return this._readonly || undefined;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set readonly(state: any) {\n this._readonly = coerceBooleanProperty(state);\n }\n /**\n * Unique identifier for the textarea\n * @default eui-textarea_{increment}\n */\n @HostBinding('attr.id')\n @Input()\n id = `eui-textarea_${EuiTextareaComponent.idCounter++}`;\n\n /**\n * Flag indicating if the textarea is in an invalid state\n * @description When true, applies error styling to the textarea.\n * This can be set manually or automatically through form validation.\n */\n @Input({ transform: booleanAttribute }) isInvalid: boolean;\n /**\n * @description\n * Data attribute for end-to-end testing\n * @default eui-textarea\n */\n @HostBinding('attr.data-e2e') @Input() e2eAttr = 'eui-textarea';\n protected _readonly: boolean;\n\n protected hostEl: HTMLTextAreaElement;\n\n protected hostParentEl: HTMLElement;\n protected hostWrapperEl: HTMLDivElement;\n protected valueContainerEl: HTMLDivElement;\n private _disabled: boolean;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private control: FormControl | NgControl;\n private rows = signal(0);\n\n constructor(\n private injector: Injector,\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n private baseStatesDirective: BaseStatesDirective,\n ) {\n effect(() => {\n this.rowsChange.emit(this.rows());\n });\n }\n\n /**\n * Handles input changes in the textarea\n * @param {string} value - The new value of the textarea\n * @description Updates the number of rows and triggers change detection\n */\n @HostListener('input', ['$event.target.value'])\n public onInputChange(value: string): void {\n // signal rows update\n this.rows.set(this.hostEl.value.split('\\n').length)\n this.onChange(value);\n }\n\n /**\n * Handles blur events on the textarea\n * @param {string} value - The current value of the textarea\n * @description Marks the control as touched and triggers validation\n */\n @HostListener('blur', ['$event.target.value'])\n public onBlur(value: string): void {\n this.onTouched(value);\n }\n\n /**\n * @description\n * Lifecycle hook that initializes the component. Sets up DOM elements,\n * initializes form control integration, and establishes state management\n */\n ngOnInit(): void {\n this.hostEl = this._elementRef.nativeElement;\n this.hostParentEl = this.hostEl.parentElement;\n this.hostWrapperEl = this.createHostWrapperContainer();\n this.valueContainerEl = this.createValueContainer();\n\n this.handleMarkup();\n // extract the FormControl or NgControl\n this.control = (this.injector as Injector).get(NgControl, null, { optional: true });\n if (this.control instanceof FormControlName) {\n this.control = (this.injector as Injector).get(FormGroupDirective).getControl(this.control);\n } else if (this.control instanceof FormControlDirective) {\n this.control = this.control.form as FormControl;\n }\n // sets invalid state if control is present\n if (this.control instanceof FormControl || this.control instanceof NgControl) {\n this.disabled = this.control.disabled;\n this.isInvalid = this.control.dirty && this.control.touched && this.control.invalid;\n if (this.control instanceof FormControl) {\n this.control.statusChanges.pipe(takeUntil(this.destroy$)).subscribe((status) => {\n this.isInvalid = status === 'INVALID';\n this.disabled = status === 'DISABLED';\n this.baseStatesDirective.euiDanger = this.isInvalid;\n });\n }\n }\n }\n\n /**\n * @description\n * Lifecycle hook that checks for changes in form control state\n * Updates invalid state based on form control validation\n */\n ngDoCheck(): void {\n if (this.control instanceof NgControl || this.control instanceof FormControl) {\n // TODO: Delete when https://github.com/angular/angular/issues/30275 is resolved\n this.isInvalid = this.control.invalid && this.control.touched;\n this.baseStatesDirective.euiDanger = this.isInvalid;\n }\n }\n\n /**\n * @description\n * Lifecycle hook that handles changes to component inputs\n * @param {SimpleChanges} changes - Object containing changed properties\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['readonly']) {\n const readonly = changes['readonly'].currentValue;\n\n if (this.hostWrapperEl && this.valueContainerEl) {\n this.hostWrapperEl.classList.toggle('eui-textarea__wrapper--readonly', !!readonly);\n }\n if (this.hostEl && this.valueContainerEl) {\n this.hostEl.classList.toggle('eui-textarea--readonly', !!readonly);\n this.valueContainerEl.innerText = this.hostEl.value;\n }\n }\n if (changes['euiDisabled']) {\n if (this.control instanceof FormControl) {\n // eslint-disable-next-line\n changes['euiDisabled'].currentValue ? this.control.disable() : this.control.enable();\n } else {\n this.setDisabledState(changes['euiDisabled'].currentValue);\n }\n }\n if(changes['isInvalid']) {\n this.baseStatesDirective.euiDanger = changes['isInvalid'].currentValue;\n }\n }\n\n /**\n * @description\n * Lifecycle hook that cleans up component resources\n * Completes observables and removes generated DOM elements\n */\n ngOnDestroy(): void {\n this.destroy$.complete();\n this.destroy$.unsubscribe();\n // cleanup DOM leftovers\n if (this.valueContainerEl) {\n try {\n this._renderer.removeChild(this.hostEl.parentElement, this.valueContainerEl);\n } catch (e) {\n console.error(e);\n }\n }\n if (this.hostWrapperEl) {\n try {\n this._renderer.removeChild(this.hostParentEl, this.hostWrapperEl);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n /**\n * @description\n * ControlValueAccessor implementation for writing values\n * @param {unknown} obj - The value to write to the textarea\n */\n writeValue(obj: unknown): void {\n if (this.valueContainerEl) {\n this._renderer.setProperty(this.valueContainerEl, 'innerText', obj || null);\n }\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', obj || null);\n // signal rows update\n this.rows.set(this.hostEl.value.split('\\n').length)\n }\n\n /**\n * @description\n * Registers the callback function for change events\n * @param {Function} fn - The callback function\n */\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n /**\n * @description\n * Registers the callback function for touched events\n * @param {Function} fn - The callback function\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @description\n * Sets the disabled state of the textarea\n * @param {boolean} isDisabled - The disabled state to set\n */\n setDisabledState(isDisabled: boolean): void {\n if (this.hostEl) {\n this._renderer.setProperty(this.hostEl, 'disabled', isDisabled);\n }\n }\n\n protected onChange(_: unknown): void {\n this.writeValue(_);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected onTouched(_: unknown): void {\n if (this.control) {\n this.isInvalid = this.control.invalid;\n }\n }\n\n /**\n * @description\n * Creates the container for the textarea element\n * @returns {HTMLDivElement} The created wrapper container element\n * @private\n */\n private createHostWrapperContainer(): HTMLDivElement {\n const wrapper = this._renderer.createElement('div');\n this._renderer.addClass(wrapper, 'eui-textarea__wrapper');\n if (this.readonly) {\n this._renderer.addClass(wrapper, 'eui-textarea__wrapper--readonly');\n this._renderer.addClass(this.hostEl, 'eui-textarea--readonly');\n } else {\n this._renderer.removeClass(wrapper, 'eui-textarea__wrapper--readonly');\n this._renderer.removeClass(this.hostEl, 'eui-textarea--readonly');\n }\n\n return wrapper;\n }\n\n /**\n * @description\n * Creates the container for displaying readonly values\n * @returns {HTMLDivElement} The created value container element\n * @private\n */\n private createValueContainer(): HTMLDivElement {\n const valueContainer = this._renderer.createElement('div');\n this._renderer.addClass(valueContainer, 'eui-textarea__value-container');\n this._renderer.setProperty(valueContainer, 'innerText', this.hostEl.value);\n return valueContainer;\n }\n\n /**\n * @description\n * Handles the DOM manipulation for the textarea structure\n * Wraps the textarea in necessary containers and adds\n * the readonly value display element\n *\n * @private\n */\n private handleMarkup(): void {\n if (this.hostParentEl != null) {\n this.hostParentEl.replaceChild(this.hostWrapperEl, this.hostEl);\n this.hostWrapperEl.appendChild(this.hostEl);\n this.hostWrapperEl.appendChild(this.valueContainerEl);\n }\n }\n}\n","/* eslint-disable @angular-eslint/directive-selector */\nimport {\n Directive,\n OnInit,\n OnDestroy,\n Input,\n ElementRef,\n HostListener,\n AfterViewInit,\n Optional,\n Renderer2,\n OnChanges,\n booleanAttribute,\n numberAttribute,\n SimpleChanges,\n} from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, startWith, takeUntil } from 'rxjs/operators';\nimport { NgControl } from '@angular/forms';\n\n/**\n * A directive that automatically adjusts the height of a textarea based on its content.\n *\n * @directive\n * @selector textarea[autoResize]\n * @description\n * The AutoResizeDirective automatically adjusts the height of a textarea element as the user types,\n * ensuring that all content is visible without requiring manual resizing or scrolling.\n * It supports minimum and maximum row constraints and can be enabled/disabled dynamically.\n *\n * @example\n * ```html\n * <textarea autoResize [minRows]=\"2\" [maxRows]=\"5\"></textarea>\n * ```\n */\n@Directive({\n selector: 'textarea[autoResize]',\n standalone: true,\n})\nexport class AutoResizeDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n /**\n * @description\n * Controls whether the auto-resize functionality is enabled.\n * When true, the textarea will automatically adjust its height based on content.\n * When false, the textarea will behave normally.\n *\n * @default true\n */\n @Input({ transform: booleanAttribute }) autoResize = true;\n\n /**\n * @description\n * Sets the minimum number of rows for the textarea.\n * This value determines the initial height of the textarea.\n *\n * @param minRows - The minimum number of rows to display\n */\n @Input()\n set minRows(minRows: number | string) {\n this.defaultRows = coerceNumberProperty(minRows);\n }\n /**\n * @description\n * Sets the maximum number of rows for the textarea.\n * When set to a value greater than 0, the textarea will not grow beyond this number of rows\n * and will show scrollbars if necessary.\n * When set to 0, there is no maximum limit.\n *\n * @default 0\n */\n @Input({ transform: numberAttribute }) maxRows = 0;\n\n private defaultRows = 1;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private observer: MutationObserver;\n\n constructor(\n protected el: ElementRef,\n protected renderer: Renderer2,\n @Optional() protected control: NgControl,\n ) {}\n\n /**\n * Event handler for input events on the textarea.\n * Triggers the resize calculation when the content changes.\n *\n * @internal\n */\n @HostListener('input', ['$event.target'])\n onInput(): void {\n this.resize();\n }\n\n /**\n * Initializes the directive by setting up window resize event handling\n * and mutation observer for readonly attribute changes.\n *\n * @internal\n */\n ngOnInit(): void {\n fromEvent(window, 'resize')\n .pipe(takeUntil(this.destroy$), debounceTime(300))\n .subscribe(() => this.resize());\n\n // Create an observer instance linked to the callback function\n this.observer = new MutationObserver(this.readonlyMutationObserver.bind(this));\n\n // Start observing the target node for configured mutations\n this.observer.observe(this.el.nativeElement, { attributes: true });\n }\n\n /**\n * Handles changes to the directive's inputs, particularly the autoResize property.\n * Updates the textarea's appearance and behavior accordingly.\n *\n * @param changes - Angular SimpleChanges object containing changed properties\n * @internal\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['autoResize']) {\n const enable = changes['autoResize'].currentValue || this.autoResize;\n this.renderer.setProperty(this.el.nativeElement, 'rows', this.defaultRows);\n this.renderer.setStyle(this.el.nativeElement, 'overflow', enable ? 'hidden' : '');\n this.renderer.setStyle(this.el.nativeElement, 'resize', enable ? 'none' : '');\n if (enable) {\n this.resize();\n }\n }\n }\n\n /**\n * Performs initial resize after view initialization and sets up form control value change handling if applicable.\n *\n * @internal\n */\n ngAfterViewInit(): void {\n if (this.autoResize) {\n if (this.control) {\n this.handleFormControlChanges();\n } else {\n this.resize();\n }\n }\n }\n\n /**\n * Cleans up subscriptions and disconnects observers when the directive is destroyed.\n *\n * @internal\n */\n ngOnDestroy(): void {\n this.destroy$.complete();\n this.destroy$.unsubscribe();\n this.observer.disconnect();\n }\n\n /**\n * Calculates and sets the appropriate height for the textarea based on its content.\n * This method creates a temporary clone of the textarea to measure the required height,\n * taking into account minRows and maxRows constraints.\n *\n * The calculation process:\n * 1. Creates a hidden clone of the textarea\n * 2. Sets the clone's width to match the original\n * 3. Measures the required height based on content\n * 4. Applies maxRows constraint if specified\n * 5. Updates the original textarea's height\n *\n * @public\n */\n public resize(): void {\n if (this.autoResize) {\n // clone element\n const clone = this.el.nativeElement.cloneNode(true);\n const parent = this.el.nativeElement.parentNode;\n clone.style.width = this.el.nativeElement.offsetWidth + 'px';\n clone.style.visibility = 'hidden';\n clone.style.position = 'absolute';\n clone.textContent = this.el.nativeElement.value;\n parent.appendChild(clone);\n clone.style['overflow-y'] = 'hidden';\n clone.style.height = 'auto';\n const cloneHeight = clone.scrollHeight;\n\n this.renderer.setStyle(clone, 'height', cloneHeight);\n // calculate height\n const { offsetHeight } = clone;\n let { scrollHeight } = clone;\n // Enforce maxRows limit if set\n if (this.maxRows > 0) {\n const lineHeight = parseInt(getComputedStyle(clone).lineHeight, 10);\n const maxHeight = lineHeight * this.maxRows;\n scrollHeight = Math.min(scrollHeight, maxHeight);\n if(scrollHeight >= maxHeight) {\n this.renderer.removeStyle(this.el.nativeElement, 'overflow'); // Restore overflow behavior\n } else {\n this.renderer.setStyle(this.el.nativeElement, 'overflow', 'hidden'); // Hide scrollbars during adjustment\n }\n }\n let height = offsetHeight > scrollHeight ? offsetHeight : scrollHeight;\n height = height <= 0 ? 'auto' : `${height}px`;\n // remove clone\n parent.removeChild(clone);\n // set height\n this.renderer.setStyle(this.el.nativeElement, 'height', height);\n }\n }\n\n /**\n * Sets up subscription to form control value changes to trigger resize when the value\n * is changed programmatically through the form control.\n *\n * @protected\n */\n protected handleFormControlChanges(): void {\n // in case value changed manually through control, call resize()\n // startWith is being used to cause resize to be called in case of late subscription after value has changed\n this.control.valueChanges.pipe(takeUntil(this.destroy$), startWith('')).subscribe(() => this.resize());\n }\n\n /**\n * Mutation observer callback that handles changes to the readonly attribute\n * and triggers resize when necessary.\n *\n * @param mutationsList - List of mutations that occurred\n * @private\n */\n private readonlyMutationObserver(mutationsList: MutationRecord[]): void {\n // Use traditional 'for loops' for IE 11\n for (const mutation of mutationsList) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'readonly') {\n this.resize();\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiTextareaComponent } from './eui-textarea.component';\nimport { AutoResizeDirective } from './auto-resize.directive';\n\n/**\n * @description\n * A module that provides textarea functionality with auto-resizing capabilities.\n * This module encapsulates the EuiTextareaComponent and AutoResizeDirective to provide\n * a cohesive textarea solution for Angular applications.\n *\n * @usageNotes\n * To use this module, import it into your feature module:\n * ```typescript\n * import { EuiTextAreaModule } from './path-to-module/eui-textarea.module';\n *\n * @NgModule({\n * imports: [EuiTextAreaModule]\n * })\n * export class YourFeatureModule { }\n * ```\n *\n * @publicApi\n */\n@NgModule({\n imports: [CommonModule, EuiTextareaComponent, AutoResizeDirective],\n exports: [EuiTextareaComponent, AutoResizeDirective],\n})\nexport class EuiTextAreaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import { booleanAttribute,
|
2
|
+
import { booleanAttribute, Input, ViewChild, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
3
3
|
import * as i2 from '@angular/common';
|
4
4
|
import { CommonModule } from '@angular/common';
|
5
5
|
import * as i1 from '@eui/core';
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import { booleanAttribute,
|
2
|
+
import { booleanAttribute, Input, HostBinding, Component, forwardRef, Host, Optional, Inject, NgModule } from '@angular/core';
|
3
3
|
import * as i1 from '@eui/components/shared';
|
4
4
|
import { BaseStatesDirective } from '@eui/components/shared';
|
5
5
|
import * as i2 from '@angular/common';
|