myrta-ui 17.1.71 → 17.1.73

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.
@@ -1,4 +1,4 @@
1
- import { Directive, HostBinding, HostListener, Input } from '@angular/core';
1
+ import { Directive, HostBinding, Input } from "@angular/core";
2
2
  import * as i0 from "@angular/core";
3
3
  export class AutosizeDirective {
4
4
  elem;
@@ -6,39 +6,65 @@ export class AutosizeDirective {
6
6
  overflow = 'hidden';
7
7
  rows = 1;
8
8
  autosize = true;
9
+ isInitialized = false;
9
10
  constructor(elem, renderer) {
10
11
  this.elem = elem;
11
12
  this.renderer = renderer;
12
13
  }
13
14
  ngAfterViewInit() {
14
- this.resize();
15
+ this.isInitialized = true;
16
+ setTimeout(() => this.resize(), 0); // Инициализация после рендера
15
17
  }
16
- ngDoCheck() {
17
- this.resize();
18
+ onInput() {
19
+ if (this.autosize && this.isInitialized) {
20
+ this.resize();
21
+ }
18
22
  }
19
23
  resize() {
20
24
  if (!this.autosize) {
21
25
  this.overflow = 'auto';
26
+ this.setHeight('auto');
22
27
  return;
23
28
  }
24
29
  const textarea = this.elem.nativeElement;
25
- // Calculate border height which is not included in scrollHeight
30
+ // Сохраняем текущее значение и стили
31
+ const originalValue = textarea.value;
32
+ const originalTransition = textarea.style.transition;
33
+ const originalOverflow = textarea.style.overflow;
34
+ // Временно убираем transition для мгновенного расчета
35
+ this.renderer.setStyle(textarea, 'transition', 'none');
36
+ this.renderer.setStyle(textarea, 'overflow', 'hidden');
37
+ // Сбрасываем высоту для корректного расчета
38
+ this.renderer.setStyle(textarea, 'height', 'auto');
39
+ // Рассчитываем новую высоту
26
40
  const borderHeight = textarea.offsetHeight - textarea.clientHeight;
27
- // Reset textarea height to auto that correctly calculate the new height
28
- this.setHeight('auto');
29
- // Set new height
30
- this.setHeight(`${textarea.scrollHeight + borderHeight}px`);
41
+ const scrollHeight = textarea.scrollHeight;
42
+ const newHeight = Math.max(textarea.clientHeight, // минимальная высота
43
+ scrollHeight + borderHeight);
44
+ // Устанавливаем новую высоту
45
+ this.renderer.setStyle(textarea, 'height', `${newHeight}px`);
46
+ // Восстанавливаем стили
47
+ setTimeout(() => {
48
+ this.renderer.setStyle(textarea, 'transition', originalTransition);
49
+ this.renderer.setStyle(textarea, 'overflow', originalOverflow);
50
+ }, 0);
31
51
  }
32
52
  setHeight(value) {
33
53
  this.renderer.setStyle(this.elem.nativeElement, 'height', value);
34
54
  }
35
55
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutosizeDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
36
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AutosizeDirective, selector: "[mrxAutosize]", inputs: { rows: "rows", autosize: "autosize" }, host: { listeners: { "input": "resize()" }, properties: { "style.overflow": "this.overflow", "rows": "this.rows" } }, ngImport: i0 });
56
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AutosizeDirective, selector: "[mrxAutosize]", inputs: { rows: "rows", autosize: "autosize" }, host: { listeners: { "input": "onInput()", "paste": "onInput()", "cut": "onInput()", "change": "onInput()" }, properties: { "style.overflow": "this.overflow", "rows": "this.rows" } }, ngImport: i0 });
37
57
  }
38
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutosizeDirective, decorators: [{
39
59
  type: Directive,
40
60
  args: [{
41
- selector: '[mrxAutosize]'
61
+ selector: '[mrxAutosize]',
62
+ host: {
63
+ '(input)': 'onInput()',
64
+ '(paste)': 'onInput()',
65
+ '(cut)': 'onInput()',
66
+ '(change)': 'onInput()'
67
+ }
42
68
  }]
43
69
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { overflow: [{
44
70
  type: HostBinding,
@@ -50,8 +76,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
50
76
  args: ['rows']
51
77
  }], autosize: [{
52
78
  type: Input
53
- }], resize: [{
54
- type: HostListener,
55
- args: ['input']
56
79
  }] } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NpemUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dG9zaXplL2F1dG9zaXplLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUdULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVOLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8saUJBQWlCO0lBV1I7SUFBMEI7SUFUdkMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUlwQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBR1QsUUFBUSxHQUFHLElBQUksQ0FBQztJQUV2QixZQUFvQixJQUFnQixFQUFVLFFBQW1CO1FBQTdDLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQUcsQ0FBQztJQUU5RCxlQUFlO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBR08sTUFBTTtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUE7WUFDdEIsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQW9DLENBQUM7UUFDaEUsZ0VBQWdFO1FBQ2hFLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNuRSx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixpQkFBaUI7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEdBQUcsWUFBWSxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7d0dBdkNVLGlCQUFpQjs0RkFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUg3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO2lCQUMxQjt1R0FHUSxRQUFRO3NCQURkLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUt0QixJQUFJO3NCQUZWLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsTUFBTTtnQkFJWixRQUFRO3NCQURkLEtBQUs7Z0JBY0UsTUFBTTtzQkFEYixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIERvQ2hlY2ssXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgUmVuZGVyZXIyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1ttcnhBdXRvc2l6ZV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvc2l6ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIERvQ2hlY2sge1xyXG4gIEBIb3N0QmluZGluZygnc3R5bGUub3ZlcmZsb3cnKVxyXG4gIHB1YmxpYyBvdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIEBIb3N0QmluZGluZygncm93cycpXHJcbiAgcHVibGljIHJvd3MgPSAxO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhdXRvc2l6ZSA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbTogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxyXG5cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5yZXNpemUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxyXG4gIHByaXZhdGUgcmVzaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9zaXplKSB7XHJcbiAgICAgIHRoaXMub3ZlcmZsb3cgPSAnYXV0bydcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xyXG4gICAgLy8gQ2FsY3VsYXRlIGJvcmRlciBoZWlnaHQgd2hpY2ggaXMgbm90IGluY2x1ZGVkIGluIHNjcm9sbEhlaWdodFxyXG4gICAgY29uc3QgYm9yZGVySGVpZ2h0ID0gdGV4dGFyZWEub2Zmc2V0SGVpZ2h0IC0gdGV4dGFyZWEuY2xpZW50SGVpZ2h0O1xyXG4gICAgLy8gUmVzZXQgdGV4dGFyZWEgaGVpZ2h0IHRvIGF1dG8gdGhhdCBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBuZXcgaGVpZ2h0XHJcbiAgICB0aGlzLnNldEhlaWdodCgnYXV0bycpO1xyXG4gICAgLy8gU2V0IG5ldyBoZWlnaHRcclxuICAgIHRoaXMuc2V0SGVpZ2h0KGAke3RleHRhcmVhLnNjcm9sbEhlaWdodCArIGJvcmRlckhlaWdodH1weGApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRIZWlnaHQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIHZhbHVlKTtcclxuICB9XHJcbn1cclxuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NpemUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dG9zaXplL2F1dG9zaXplLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDOztBQVdwRyxNQUFNLE9BQU8saUJBQWlCO0lBYVI7SUFBMEI7SUFYdkMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUlwQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBR1QsUUFBUSxHQUFHLElBQUksQ0FBQztJQUVmLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFOUIsWUFBb0IsSUFBZ0IsRUFBVSxRQUFtQjtRQUE3QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUFHLENBQUM7SUFFOUQsZUFBZTtRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCO0lBQ3BFLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFvQyxDQUFDO1FBRWhFLHFDQUFxQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUVqRCxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXZELDRDQUE0QztRQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELDRCQUE0QjtRQUM1QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN4QixRQUFRLENBQUMsWUFBWSxFQUFFLHFCQUFxQjtRQUM1QyxZQUFZLEdBQUcsWUFBWSxDQUM1QixDQUFDO1FBRUYsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBRTdELHdCQUF3QjtRQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7d0dBbkVVLGlCQUFpQjs0RkFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQVQ3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLFdBQVc7d0JBQ3RCLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixPQUFPLEVBQUUsV0FBVzt3QkFDcEIsVUFBVSxFQUFFLFdBQVc7cUJBQ3hCO2lCQUNGO3VHQUdRLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBS3RCLElBQUk7c0JBRlYsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxNQUFNO2dCQUlaLFFBQVE7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBSZW5kZXJlcjIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbXJ4QXV0b3NpemVdJyxcclxuICBob3N0OiB7XHJcbiAgICAnKGlucHV0KSc6ICdvbklucHV0KCknLFxyXG4gICAgJyhwYXN0ZSknOiAnb25JbnB1dCgpJyxcclxuICAgICcoY3V0KSc6ICdvbklucHV0KCknLFxyXG4gICAgJyhjaGFuZ2UpJzogJ29uSW5wdXQoKSdcclxuICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvc2l6ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIEBIb3N0QmluZGluZygnc3R5bGUub3ZlcmZsb3cnKVxyXG4gIHB1YmxpYyBvdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIEBIb3N0QmluZGluZygncm93cycpXHJcbiAgcHVibGljIHJvd3MgPSAxO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhdXRvc2l6ZSA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW06IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplKCksIDApOyAvLyDQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyDQv9C+0YHQu9C1INGA0LXQvdC00LXRgNCwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JbnB1dCgpIHtcclxuICAgIGlmICh0aGlzLmF1dG9zaXplICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b3NpemUpIHtcclxuICAgICAgdGhpcy5vdmVyZmxvdyA9ICdhdXRvJztcclxuICAgICAgdGhpcy5zZXRIZWlnaHQoJ2F1dG8nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRleHRhcmVhID0gdGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcclxuICAgIFxyXG4gICAgLy8g0KHQvtGF0YDQsNC90Y/QtdC8INGC0LXQutGD0YnQtdC1INC30L3QsNGH0LXQvdC40LUg0Lgg0YHRgtC40LvQuFxyXG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRleHRhcmVhLnZhbHVlO1xyXG4gICAgY29uc3Qgb3JpZ2luYWxUcmFuc2l0aW9uID0gdGV4dGFyZWEuc3R5bGUudHJhbnNpdGlvbjtcclxuICAgIGNvbnN0IG9yaWdpbmFsT3ZlcmZsb3cgPSB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvdztcclxuICAgIFxyXG4gICAgLy8g0JLRgNC10LzQtdC90L3QviDRg9Cx0LjRgNCw0LXQvCB0cmFuc2l0aW9uINC00LvRjyDQvNCz0L3QvtCy0LXQvdC90L7Qs9C+INGA0LDRgdGH0LXRgtCwXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRleHRhcmVhLCAndHJhbnNpdGlvbicsICdub25lJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRleHRhcmVhLCAnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XHJcbiAgICBcclxuICAgIC8vINCh0LHRgNCw0YHRi9Cy0LDQtdC8INCy0YvRgdC+0YLRgyDQtNC70Y8g0LrQvtGA0YDQtdC60YLQvdC+0LPQviDRgNCw0YHRh9C10YLQsFxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZXh0YXJlYSwgJ2hlaWdodCcsICdhdXRvJyk7XHJcbiAgICBcclxuICAgIC8vINCg0LDRgdGB0YfQuNGC0YvQstCw0LXQvCDQvdC+0LLRg9GOINCy0YvRgdC+0YLRg1xyXG4gICAgY29uc3QgYm9yZGVySGVpZ2h0ID0gdGV4dGFyZWEub2Zmc2V0SGVpZ2h0IC0gdGV4dGFyZWEuY2xpZW50SGVpZ2h0O1xyXG4gICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gdGV4dGFyZWEuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoXHJcbiAgICAgIHRleHRhcmVhLmNsaWVudEhlaWdodCwgLy8g0LzQuNC90LjQvNCw0LvRjNC90LDRjyDQstGL0YHQvtGC0LBcclxuICAgICAgc2Nyb2xsSGVpZ2h0ICsgYm9yZGVySGVpZ2h0XHJcbiAgICApO1xyXG4gICAgXHJcbiAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDQvdC+0LLRg9GOINCy0YvRgdC+0YLRg1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZXh0YXJlYSwgJ2hlaWdodCcsIGAke25ld0hlaWdodH1weGApO1xyXG4gICAgXHJcbiAgICAvLyDQktC+0YHRgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0YHRgtC40LvQuFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGV4dGFyZWEsICd0cmFuc2l0aW9uJywgb3JpZ2luYWxUcmFuc2l0aW9uKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZXh0YXJlYSwgJ292ZXJmbG93Jywgb3JpZ2luYWxPdmVyZmxvdyk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SGVpZ2h0KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCB2YWx1ZSk7XHJcbiAgfVxyXG59Il19
@@ -5951,39 +5951,65 @@ class AutosizeDirective {
5951
5951
  overflow = 'hidden';
5952
5952
  rows = 1;
5953
5953
  autosize = true;
5954
+ isInitialized = false;
5954
5955
  constructor(elem, renderer) {
5955
5956
  this.elem = elem;
5956
5957
  this.renderer = renderer;
5957
5958
  }
5958
5959
  ngAfterViewInit() {
5959
- this.resize();
5960
+ this.isInitialized = true;
5961
+ setTimeout(() => this.resize(), 0); // Инициализация после рендера
5960
5962
  }
5961
- ngDoCheck() {
5962
- this.resize();
5963
+ onInput() {
5964
+ if (this.autosize && this.isInitialized) {
5965
+ this.resize();
5966
+ }
5963
5967
  }
5964
5968
  resize() {
5965
5969
  if (!this.autosize) {
5966
5970
  this.overflow = 'auto';
5971
+ this.setHeight('auto');
5967
5972
  return;
5968
5973
  }
5969
5974
  const textarea = this.elem.nativeElement;
5970
- // Calculate border height which is not included in scrollHeight
5975
+ // Сохраняем текущее значение и стили
5976
+ const originalValue = textarea.value;
5977
+ const originalTransition = textarea.style.transition;
5978
+ const originalOverflow = textarea.style.overflow;
5979
+ // Временно убираем transition для мгновенного расчета
5980
+ this.renderer.setStyle(textarea, 'transition', 'none');
5981
+ this.renderer.setStyle(textarea, 'overflow', 'hidden');
5982
+ // Сбрасываем высоту для корректного расчета
5983
+ this.renderer.setStyle(textarea, 'height', 'auto');
5984
+ // Рассчитываем новую высоту
5971
5985
  const borderHeight = textarea.offsetHeight - textarea.clientHeight;
5972
- // Reset textarea height to auto that correctly calculate the new height
5973
- this.setHeight('auto');
5974
- // Set new height
5975
- this.setHeight(`${textarea.scrollHeight + borderHeight}px`);
5986
+ const scrollHeight = textarea.scrollHeight;
5987
+ const newHeight = Math.max(textarea.clientHeight, // минимальная высота
5988
+ scrollHeight + borderHeight);
5989
+ // Устанавливаем новую высоту
5990
+ this.renderer.setStyle(textarea, 'height', `${newHeight}px`);
5991
+ // Восстанавливаем стили
5992
+ setTimeout(() => {
5993
+ this.renderer.setStyle(textarea, 'transition', originalTransition);
5994
+ this.renderer.setStyle(textarea, 'overflow', originalOverflow);
5995
+ }, 0);
5976
5996
  }
5977
5997
  setHeight(value) {
5978
5998
  this.renderer.setStyle(this.elem.nativeElement, 'height', value);
5979
5999
  }
5980
6000
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutosizeDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
5981
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AutosizeDirective, selector: "[mrxAutosize]", inputs: { rows: "rows", autosize: "autosize" }, host: { listeners: { "input": "resize()" }, properties: { "style.overflow": "this.overflow", "rows": "this.rows" } }, ngImport: i0 });
6001
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AutosizeDirective, selector: "[mrxAutosize]", inputs: { rows: "rows", autosize: "autosize" }, host: { listeners: { "input": "onInput()", "paste": "onInput()", "cut": "onInput()", "change": "onInput()" }, properties: { "style.overflow": "this.overflow", "rows": "this.rows" } }, ngImport: i0 });
5982
6002
  }
5983
6003
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutosizeDirective, decorators: [{
5984
6004
  type: Directive,
5985
6005
  args: [{
5986
- selector: '[mrxAutosize]'
6006
+ selector: '[mrxAutosize]',
6007
+ host: {
6008
+ '(input)': 'onInput()',
6009
+ '(paste)': 'onInput()',
6010
+ '(cut)': 'onInput()',
6011
+ '(change)': 'onInput()'
6012
+ }
5987
6013
  }]
5988
6014
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { overflow: [{
5989
6015
  type: HostBinding,
@@ -5995,9 +6021,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
5995
6021
  args: ['rows']
5996
6022
  }], autosize: [{
5997
6023
  type: Input
5998
- }], resize: [{
5999
- type: HostListener,
6000
- args: ['input']
6001
6024
  }] } });
6002
6025
 
6003
6026
  class InputTextareaComponent {