@tetacom/ng-components 1.0.66 → 1.0.69

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.
Files changed (25) hide show
  1. package/common/util/dom-util.d.ts +1 -0
  2. package/component/input/input.module.d.ts +2 -1
  3. package/component/tabs/tabs/tabs.component.d.ts +1 -1
  4. package/component/tree/tree/tree.component.d.ts +16 -9
  5. package/component/tree/tree-item/tree-item.component.d.ts +3 -2
  6. package/component/tree/tree.module.d.ts +2 -1
  7. package/directive/hint/hint.directive.d.ts +2 -1
  8. package/esm2020/common/util/dom-util.mjs +4 -1
  9. package/esm2020/component/input/input/input.component.mjs +4 -3
  10. package/esm2020/component/input/input.module.mjs +5 -4
  11. package/esm2020/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +3 -3
  12. package/esm2020/component/table/default/default-head-cell/default-head-cell.component.mjs +1 -1
  13. package/esm2020/component/table/default/string-cell/string-cell.component.mjs +4 -3
  14. package/esm2020/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +1 -1
  15. package/esm2020/component/tabs/tabs/tabs.component.mjs +3 -3
  16. package/esm2020/component/tree/tree/tree.component.mjs +51 -20
  17. package/esm2020/component/tree/tree-item/tree-item.component.mjs +13 -8
  18. package/esm2020/component/tree/tree.module.mjs +5 -4
  19. package/esm2020/directive/hint/hint.directive.mjs +6 -3
  20. package/fesm2015/tetacom-ng-components.mjs +387 -345
  21. package/fesm2015/tetacom-ng-components.mjs.map +1 -1
  22. package/fesm2020/tetacom-ng-components.mjs +387 -346
  23. package/fesm2020/tetacom-ng-components.mjs.map +1 -1
  24. package/package.json +1 -1
  25. package/style/tree.scss +4 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, ChangeDetectionStrategy, HostBinding, Directive, Optional, Inject, ContentChild, Input, Host, HostListener, Injectable, NgModule, forwardRef, EventEmitter, ElementRef, Output, Pipe, ViewChild, ViewEncapsulation, ChangeDetectorRef, TemplateRef, Injector, ContentChildren, SkipSelf, ViewContainerRef, PLATFORM_ID } from '@angular/core';
2
+ import { Component, ChangeDetectionStrategy, HostBinding, Directive, Optional, Inject, ContentChild, Input, Host, HostListener, Injectable, NgModule, forwardRef, EventEmitter, ElementRef, Output, Pipe, ViewChild, TemplateRef, Injector, ViewEncapsulation, ChangeDetectorRef, ContentChildren, SkipSelf, ViewContainerRef, PLATFORM_ID } from '@angular/core';
3
3
  import * as i2 from '@angular/common';
4
4
  import { DOCUMENT, CommonModule, isPlatformBrowser } from '@angular/common';
5
5
  import * as i1 from '@angular/common/http';
@@ -1053,6 +1053,9 @@ class DomUtil {
1053
1053
  }
1054
1054
  return null;
1055
1055
  }
1056
+ static isOverflown(element) {
1057
+ return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;
1058
+ }
1056
1059
  }
1057
1060
 
1058
1061
  class PositionUtil {
@@ -3584,6 +3587,279 @@ class NumericFilterValue {
3584
3587
  }
3585
3588
  }
3586
3589
 
3590
+ class TetaContentRef {
3591
+ constructor(nodes, viewRef, componentRef) {
3592
+ this.nodes = nodes;
3593
+ this.viewRef = viewRef;
3594
+ this.componentRef = componentRef;
3595
+ }
3596
+ }
3597
+
3598
+ class DynamicData {
3599
+ constructor(value) {
3600
+ for (const key in value) {
3601
+ if (value.hasOwnProperty(key)) {
3602
+ this[key] = value[key];
3603
+ }
3604
+ }
3605
+ }
3606
+ }
3607
+
3608
+ class DynamicComponentService {
3609
+ constructor(_componentFactoryResolver, _rendererFactory, _appRef) {
3610
+ this._componentFactoryResolver = _componentFactoryResolver;
3611
+ this._rendererFactory = _rendererFactory;
3612
+ this._appRef = _appRef;
3613
+ this._renderer = this._rendererFactory.createRenderer(null, null);
3614
+ }
3615
+ createComponent(component, contentRef, injector, container) {
3616
+ const componentRef = this._componentFactoryResolver
3617
+ .resolveComponentFactory(component)
3618
+ .create(injector, contentRef.nodes);
3619
+ this._appRef.attachView(componentRef.hostView);
3620
+ container.appendChild(componentRef.location.nativeElement);
3621
+ return componentRef;
3622
+ }
3623
+ createContent(content, injector, context) {
3624
+ if (content === null || content === undefined) {
3625
+ throw new Error('Content is undefined');
3626
+ }
3627
+ if (typeof content === 'string') {
3628
+ return this.fromString(content);
3629
+ }
3630
+ else if (content instanceof TemplateRef) {
3631
+ return this.fromTemplate(content, context);
3632
+ }
3633
+ else {
3634
+ return this.fromComponent(content, injector, context);
3635
+ }
3636
+ }
3637
+ destroy(component, content, container) {
3638
+ if (component) {
3639
+ this._appRef.detachView(component.hostView);
3640
+ component.destroy();
3641
+ }
3642
+ if (content && content.viewRef) {
3643
+ content.viewRef.destroy();
3644
+ }
3645
+ content = null;
3646
+ }
3647
+ getContext(content, context) {
3648
+ if (content instanceof TemplateRef) {
3649
+ return {
3650
+ $implicit: context,
3651
+ data: context,
3652
+ };
3653
+ }
3654
+ return context;
3655
+ }
3656
+ getInjector(data, parent) {
3657
+ return Injector.create({
3658
+ providers: [
3659
+ {
3660
+ provide: DynamicData,
3661
+ useValue: data,
3662
+ },
3663
+ ],
3664
+ parent,
3665
+ });
3666
+ }
3667
+ fromString(content) {
3668
+ return new TetaContentRef([[this._renderer.createText(`${content}`)]]);
3669
+ }
3670
+ fromTemplate(content, context) {
3671
+ const viewRef = content.createEmbeddedView(context);
3672
+ this._appRef.attachView(viewRef);
3673
+ return new TetaContentRef([viewRef.rootNodes], viewRef);
3674
+ }
3675
+ fromComponent(content, injector, context) {
3676
+ const componentFactory = this._componentFactoryResolver.resolveComponentFactory(content);
3677
+ const componentRef = componentFactory.create(injector);
3678
+ for (const key in context) {
3679
+ if (context.hasOwnProperty(key)) {
3680
+ componentRef.instance[key] = context[key];
3681
+ }
3682
+ }
3683
+ const componentNativeEl = componentRef.location.nativeElement;
3684
+ this._appRef.attachView(componentRef.hostView);
3685
+ return new TetaContentRef([[componentNativeEl]], componentRef.hostView, componentRef);
3686
+ }
3687
+ }
3688
+ DynamicComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.RendererFactory2 }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable });
3689
+ DynamicComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, providedIn: 'root' });
3690
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, decorators: [{
3691
+ type: Injectable,
3692
+ args: [{
3693
+ providedIn: 'root',
3694
+ }]
3695
+ }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.RendererFactory2 }, { type: i0.ApplicationRef }]; } });
3696
+
3697
+ class DynamicContentBaseDirective {
3698
+ constructor(_document, _elementRef, _service, _injector, _zone, _cdr) {
3699
+ this._document = _document;
3700
+ this._elementRef = _elementRef;
3701
+ this._service = _service;
3702
+ this._injector = _injector;
3703
+ this._zone = _zone;
3704
+ this._cdr = _cdr;
3705
+ this.align = Align.left;
3706
+ this.verticalAlign = VerticalAlign.bottom;
3707
+ this.openChange = new EventEmitter();
3708
+ this._alive = true;
3709
+ this._open = false;
3710
+ this._zone.onStable
3711
+ .pipe(takeWhile((_) => this._alive), filter((_) => this._open))
3712
+ .subscribe((_) => {
3713
+ this.setPosition();
3714
+ });
3715
+ }
3716
+ set open(open) {
3717
+ this._open = open;
3718
+ if (this._open) {
3719
+ this.createContentRef();
3720
+ }
3721
+ else {
3722
+ this.destroyContentRef();
3723
+ }
3724
+ }
3725
+ ngOnDestroy() {
3726
+ this._alive = false;
3727
+ this.destroyContentRef();
3728
+ }
3729
+ ngOnInit() {
3730
+ }
3731
+ createContentRef(className) {
3732
+ if (!this._componentRef) {
3733
+ this._open = true;
3734
+ const injector = this._service.getInjector(this.data, this._injector);
3735
+ const context = this._service.getContext(this._dynamicContent, this.data);
3736
+ this._content = this._service.createContent(this._dynamicContent, this._injector, context);
3737
+ this._componentRef = this._service.createComponent(PopupContentComponent, this._content, injector, this.appendToBody ? this._document.body : this._elementRef.nativeElement);
3738
+ if (className) {
3739
+ this._componentRef.instance.addClass(className);
3740
+ }
3741
+ }
3742
+ return this._componentRef;
3743
+ }
3744
+ destroyContentRef() {
3745
+ this._open = false;
3746
+ this._service.destroy(this._componentRef, this._content, this.appendToBody ? this._document.body : this._elementRef.nativeElement);
3747
+ this._componentRef = null;
3748
+ }
3749
+ }
3750
+ DynamicContentBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicContentBaseDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
3751
+ DynamicContentBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: DynamicContentBaseDirective, inputs: { data: "data", className: "className", align: "align", verticalAlign: "verticalAlign", appendToBody: "appendToBody", open: "open" }, outputs: { openChange: "openChange" }, ngImport: i0 });
3752
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicContentBaseDirective, decorators: [{
3753
+ type: Directive
3754
+ }], ctorParameters: function () { return [{ type: undefined }, { type: i0.ElementRef }, { type: DynamicComponentService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
3755
+ type: Input
3756
+ }], className: [{
3757
+ type: Input
3758
+ }], align: [{
3759
+ type: Input
3760
+ }], verticalAlign: [{
3761
+ type: Input
3762
+ }], appendToBody: [{
3763
+ type: Input
3764
+ }], open: [{
3765
+ type: Input
3766
+ }], openChange: [{
3767
+ type: Output
3768
+ }] } });
3769
+
3770
+ class HintDirective extends DynamicContentBaseDirective {
3771
+ constructor(_document, _elementRef, _service, _injector, _zone, _cdr) {
3772
+ super(_document, _elementRef, _service, _injector, _zone, _cdr);
3773
+ this._document = _document;
3774
+ this._elementRef = _elementRef;
3775
+ this._service = _service;
3776
+ this._injector = _injector;
3777
+ this._zone = _zone;
3778
+ this._cdr = _cdr;
3779
+ this.align = Align.center;
3780
+ this.verticalAlign = VerticalAlign.top;
3781
+ this.delay = 300;
3782
+ this.overflownOnly = false;
3783
+ }
3784
+ get _dynamicContent() {
3785
+ return this.tetaHint;
3786
+ }
3787
+ mouseenter() {
3788
+ clearTimeout(this._timeout);
3789
+ this._timeout = setTimeout(() => {
3790
+ this.createHint();
3791
+ }, this.delay);
3792
+ }
3793
+ mouseleave() {
3794
+ clearTimeout(this._timeout);
3795
+ if (this._open && this._componentRef) {
3796
+ this._timeout = setTimeout(() => {
3797
+ this.destroyContentRef();
3798
+ }, this.delay);
3799
+ }
3800
+ }
3801
+ click(event) {
3802
+ if (this._open &&
3803
+ this._componentRef &&
3804
+ DomUtil.clickedInside(this._componentRef.location.nativeElement, event)) {
3805
+ event.stopPropagation();
3806
+ }
3807
+ }
3808
+ setPosition() {
3809
+ if (this._componentRef && this._open) {
3810
+ if (!this._componentRect) {
3811
+ this._componentRect =
3812
+ this._componentRef.location.nativeElement.getBoundingClientRect();
3813
+ }
3814
+ const position = PositionUtil.getPosition(this._elementRef.nativeElement.getBoundingClientRect(), this._componentRect, this.align, this.verticalAlign, 0, 4);
3815
+ PositionUtil.setElementPosition(this._componentRef.location.nativeElement, position);
3816
+ }
3817
+ }
3818
+ createHint() {
3819
+ if (!this._dynamicContent || (this.overflownOnly && !DomUtil.isOverflown(this._elementRef.nativeElement))) {
3820
+ return;
3821
+ }
3822
+ this._componentRef = this.createContentRef();
3823
+ this._componentRef.instance.className = [
3824
+ ...ArrayUtil.asArray(this.className),
3825
+ 'hint',
3826
+ ];
3827
+ }
3828
+ ngOnDestroy() {
3829
+ super.ngOnDestroy();
3830
+ }
3831
+ }
3832
+ HintDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: DynamicComponentService }, { token: i0.Injector }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
3833
+ HintDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: HintDirective, selector: "[tetaHint]", inputs: { tetaHint: "tetaHint", align: "align", verticalAlign: "verticalAlign", delay: "delay", overflownOnly: "overflownOnly" }, host: { listeners: { "mouseenter": "mouseenter($event)", "mouseleave": "mouseleave($event)", "click": "click($event)" } }, usesInheritance: true, ngImport: i0 });
3834
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintDirective, decorators: [{
3835
+ type: Directive,
3836
+ args: [{
3837
+ selector: '[tetaHint]',
3838
+ }]
3839
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
3840
+ type: Inject,
3841
+ args: [DOCUMENT]
3842
+ }] }, { type: i0.ElementRef }, { type: DynamicComponentService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tetaHint: [{
3843
+ type: Input
3844
+ }], align: [{
3845
+ type: Input
3846
+ }], verticalAlign: [{
3847
+ type: Input
3848
+ }], delay: [{
3849
+ type: Input
3850
+ }], overflownOnly: [{
3851
+ type: Input
3852
+ }], mouseenter: [{
3853
+ type: HostListener,
3854
+ args: ['mouseenter', ['$event']]
3855
+ }], mouseleave: [{
3856
+ type: HostListener,
3857
+ args: ['mouseleave', ['$event']]
3858
+ }], click: [{
3859
+ type: HostListener,
3860
+ args: ['click', ['$event']]
3861
+ }] } });
3862
+
3587
3863
  class InputComponent {
3588
3864
  constructor() {
3589
3865
  this.required = false;
@@ -3594,10 +3870,10 @@ class InputComponent {
3594
3870
  ngOnInit() { }
3595
3871
  }
3596
3872
  InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3597
- InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: InputComponent, selector: "teta-input", inputs: { label: "label", horizontal: "horizontal", required: "required" }, host: { properties: { "class.row": "this.horizontal", "class.column": "this.column" } }, ngImport: i0, template: "<div class=\"font-caption color-text-90 align-center row nowrap overflow-hidden text-overflow-ellipsis\"\n [class.row_6]=\"horizontal\"\n [class.text-field_required]=\"required\"\n *ngIf=\"label?.length > 0\">\n {{label}}\n</div>\n<div class=\"input-container\" [class.row_6]=\"horizontal\">\n <ng-content></ng-content>\n <div class=\"input-message font-error-message\">\n <ng-content select=\"message\"></ng-content>\n </div>\n</div>\n", styles: [":host{display:flex;grid-gap:4px;flex-grow:1;flex-basis:10px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3873
+ InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: InputComponent, selector: "teta-input", inputs: { label: "label", horizontal: "horizontal", required: "required" }, host: { properties: { "class.row": "this.horizontal", "class.column": "this.column" } }, ngImport: i0, template: "<div class=\"font-caption color-text-90 align-center row nowrap overflow-hidden text-overflow-ellipsis\"\n [class.row_6]=\"horizontal\"\n [class.text-field_required]=\"required\"\n *ngIf=\"label?.length > 0\">\n <span class=\"overflow-hidden text-overflow-ellipsis\"\n [tetaHint]=\"label\"\n [overflownOnly]=\"true\">\n {{label}}\n </span>\n</div>\n<div class=\"input-container\" [class.row_6]=\"horizontal\">\n <ng-content></ng-content>\n <div class=\"input-message font-error-message\">\n <ng-content select=\"message\"></ng-content>\n </div>\n</div>\n", styles: [":host{display:flex;grid-gap:4px;flex-grow:1;flex-basis:10px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay", "overflownOnly"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3598
3874
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputComponent, decorators: [{
3599
3875
  type: Component,
3600
- args: [{ selector: 'teta-input', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"font-caption color-text-90 align-center row nowrap overflow-hidden text-overflow-ellipsis\"\n [class.row_6]=\"horizontal\"\n [class.text-field_required]=\"required\"\n *ngIf=\"label?.length > 0\">\n {{label}}\n</div>\n<div class=\"input-container\" [class.row_6]=\"horizontal\">\n <ng-content></ng-content>\n <div class=\"input-message font-error-message\">\n <ng-content select=\"message\"></ng-content>\n </div>\n</div>\n", styles: [":host{display:flex;grid-gap:4px;flex-grow:1;flex-basis:10px}\n"] }]
3876
+ args: [{ selector: 'teta-input', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"font-caption color-text-90 align-center row nowrap overflow-hidden text-overflow-ellipsis\"\n [class.row_6]=\"horizontal\"\n [class.text-field_required]=\"required\"\n *ngIf=\"label?.length > 0\">\n <span class=\"overflow-hidden text-overflow-ellipsis\"\n [tetaHint]=\"label\"\n [overflownOnly]=\"true\">\n {{label}}\n </span>\n</div>\n<div class=\"input-container\" [class.row_6]=\"horizontal\">\n <ng-content></ng-content>\n <div class=\"input-message font-error-message\">\n <ng-content select=\"message\"></ng-content>\n </div>\n</div>\n", styles: [":host{display:flex;grid-gap:4px;flex-grow:1;flex-basis:10px}\n"] }]
3601
3877
  }], ctorParameters: function () { return []; }, propDecorators: { label: [{
3602
3878
  type: Input
3603
3879
  }], horizontal: [{
@@ -4805,17 +5081,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
4805
5081
  args: ['class.form-group-title']
4806
5082
  }] } });
4807
5083
 
5084
+ class HintModule {
5085
+ }
5086
+ HintModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
5087
+ HintModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: HintModule, declarations: [HintDirective], imports: [CommonModule,
5088
+ DynamicComponentModule], exports: [HintDirective] });
5089
+ HintModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, imports: [CommonModule,
5090
+ DynamicComponentModule] });
5091
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, decorators: [{
5092
+ type: NgModule,
5093
+ args: [{
5094
+ declarations: [HintDirective],
5095
+ exports: [HintDirective],
5096
+ imports: [
5097
+ CommonModule,
5098
+ DynamicComponentModule
5099
+ ]
5100
+ }]
5101
+ }] });
5102
+
4808
5103
  class InputModule {
4809
5104
  }
4810
5105
  InputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4811
- InputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: InputModule, declarations: [InputComponent, TextFieldComponent, FormGroupTitleComponent], imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule], exports: [InputComponent, TextFieldComponent, FormGroupTitleComponent] });
4812
- InputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputModule, imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule] });
5106
+ InputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: InputModule, declarations: [InputComponent, TextFieldComponent, FormGroupTitleComponent], imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule, HintModule], exports: [InputComponent, TextFieldComponent, FormGroupTitleComponent] });
5107
+ InputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputModule, imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule, HintModule] });
4813
5108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputModule, decorators: [{
4814
5109
  type: NgModule,
4815
5110
  args: [{
4816
5111
  declarations: [InputComponent, TextFieldComponent, FormGroupTitleComponent],
4817
5112
  exports: [InputComponent, TextFieldComponent, FormGroupTitleComponent],
4818
- imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule],
5113
+ imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule, HintModule],
4819
5114
  }]
4820
5115
  }] });
4821
5116
 
@@ -5423,16 +5718,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
5423
5718
  class CurrentModal {
5424
5719
  }
5425
5720
 
5426
- class DynamicData {
5427
- constructor(value) {
5428
- for (const key in value) {
5429
- if (value.hasOwnProperty(key)) {
5430
- this[key] = value[key];
5431
- }
5432
- }
5433
- }
5434
- }
5435
-
5436
5721
  class DialogComponent {
5437
5722
  constructor(modal, data) {
5438
5723
  this.modal = modal;
@@ -5519,124 +5804,27 @@ class ModalInstance {
5519
5804
  this.destroy();
5520
5805
  };
5521
5806
  this.onClose = this._onClose.asObservable();
5522
- if (this._window && this._window.instance) {
5523
- this._window.instance.closeEvent.subscribe((event) => {
5524
- this.close(event);
5525
- });
5526
- }
5527
- }
5528
- get window() {
5529
- return this._window;
5530
- }
5531
- get component() {
5532
- return this._content.componentRef ? this._content.componentRef : null;
5533
- }
5534
- destroy() {
5535
- this._window.destroy();
5536
- if (this._content && this._content.viewRef) {
5537
- setTimeout(() => {
5538
- this._content.viewRef.destroy();
5539
- }, 150);
5540
- }
5541
- }
5542
- }
5543
-
5544
- class TetaContentRef {
5545
- constructor(nodes, viewRef, componentRef) {
5546
- this.nodes = nodes;
5547
- this.viewRef = viewRef;
5548
- this.componentRef = componentRef;
5549
- }
5550
- }
5551
-
5552
- class DynamicComponentService {
5553
- constructor(_componentFactoryResolver, _rendererFactory, _appRef) {
5554
- this._componentFactoryResolver = _componentFactoryResolver;
5555
- this._rendererFactory = _rendererFactory;
5556
- this._appRef = _appRef;
5557
- this._renderer = this._rendererFactory.createRenderer(null, null);
5558
- }
5559
- createComponent(component, contentRef, injector, container) {
5560
- const componentRef = this._componentFactoryResolver
5561
- .resolveComponentFactory(component)
5562
- .create(injector, contentRef.nodes);
5563
- this._appRef.attachView(componentRef.hostView);
5564
- container.appendChild(componentRef.location.nativeElement);
5565
- return componentRef;
5566
- }
5567
- createContent(content, injector, context) {
5568
- if (content === null || content === undefined) {
5569
- throw new Error('Content is undefined');
5570
- }
5571
- if (typeof content === 'string') {
5572
- return this.fromString(content);
5573
- }
5574
- else if (content instanceof TemplateRef) {
5575
- return this.fromTemplate(content, context);
5576
- }
5577
- else {
5578
- return this.fromComponent(content, injector, context);
5579
- }
5580
- }
5581
- destroy(component, content, container) {
5582
- if (component) {
5583
- this._appRef.detachView(component.hostView);
5584
- component.destroy();
5585
- }
5586
- if (content && content.viewRef) {
5587
- content.viewRef.destroy();
5588
- }
5589
- content = null;
5590
- }
5591
- getContext(content, context) {
5592
- if (content instanceof TemplateRef) {
5593
- return {
5594
- $implicit: context,
5595
- data: context,
5596
- };
5597
- }
5598
- return context;
5599
- }
5600
- getInjector(data, parent) {
5601
- return Injector.create({
5602
- providers: [
5603
- {
5604
- provide: DynamicData,
5605
- useValue: data,
5606
- },
5607
- ],
5608
- parent,
5609
- });
5807
+ if (this._window && this._window.instance) {
5808
+ this._window.instance.closeEvent.subscribe((event) => {
5809
+ this.close(event);
5810
+ });
5811
+ }
5610
5812
  }
5611
- fromString(content) {
5612
- return new TetaContentRef([[this._renderer.createText(`${content}`)]]);
5813
+ get window() {
5814
+ return this._window;
5613
5815
  }
5614
- fromTemplate(content, context) {
5615
- const viewRef = content.createEmbeddedView(context);
5616
- this._appRef.attachView(viewRef);
5617
- return new TetaContentRef([viewRef.rootNodes], viewRef);
5816
+ get component() {
5817
+ return this._content.componentRef ? this._content.componentRef : null;
5618
5818
  }
5619
- fromComponent(content, injector, context) {
5620
- const componentFactory = this._componentFactoryResolver.resolveComponentFactory(content);
5621
- const componentRef = componentFactory.create(injector);
5622
- for (const key in context) {
5623
- if (context.hasOwnProperty(key)) {
5624
- componentRef.instance[key] = context[key];
5625
- }
5819
+ destroy() {
5820
+ this._window.destroy();
5821
+ if (this._content && this._content.viewRef) {
5822
+ setTimeout(() => {
5823
+ this._content.viewRef.destroy();
5824
+ }, 150);
5626
5825
  }
5627
- const componentNativeEl = componentRef.location.nativeElement;
5628
- this._appRef.attachView(componentRef.hostView);
5629
- return new TetaContentRef([[componentNativeEl]], componentRef.hostView, componentRef);
5630
5826
  }
5631
5827
  }
5632
- DynamicComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.RendererFactory2 }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable });
5633
- DynamicComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, providedIn: 'root' });
5634
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, decorators: [{
5635
- type: Injectable,
5636
- args: [{
5637
- providedIn: 'root',
5638
- }]
5639
- }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.RendererFactory2 }, { type: i0.ApplicationRef }]; } });
5640
5828
 
5641
5829
  class ModalService {
5642
5830
  constructor(_document, _injector, _factory) {
@@ -6215,169 +6403,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
6215
6403
  args: ['click']
6216
6404
  }] } });
6217
6405
 
6218
- class DynamicContentBaseDirective {
6219
- constructor(_document, _elementRef, _service, _injector, _zone, _cdr) {
6220
- this._document = _document;
6221
- this._elementRef = _elementRef;
6222
- this._service = _service;
6223
- this._injector = _injector;
6224
- this._zone = _zone;
6225
- this._cdr = _cdr;
6226
- this.align = Align.left;
6227
- this.verticalAlign = VerticalAlign.bottom;
6228
- this.openChange = new EventEmitter();
6229
- this._alive = true;
6230
- this._open = false;
6231
- this._zone.onStable
6232
- .pipe(takeWhile((_) => this._alive), filter((_) => this._open))
6233
- .subscribe((_) => {
6234
- this.setPosition();
6235
- });
6236
- }
6237
- set open(open) {
6238
- this._open = open;
6239
- if (this._open) {
6240
- this.createContentRef();
6241
- }
6242
- else {
6243
- this.destroyContentRef();
6244
- }
6245
- }
6246
- ngOnDestroy() {
6247
- this._alive = false;
6248
- this.destroyContentRef();
6249
- }
6250
- ngOnInit() {
6251
- }
6252
- createContentRef(className) {
6253
- if (!this._componentRef) {
6254
- this._open = true;
6255
- const injector = this._service.getInjector(this.data, this._injector);
6256
- const context = this._service.getContext(this._dynamicContent, this.data);
6257
- this._content = this._service.createContent(this._dynamicContent, this._injector, context);
6258
- this._componentRef = this._service.createComponent(PopupContentComponent, this._content, injector, this.appendToBody ? this._document.body : this._elementRef.nativeElement);
6259
- if (className) {
6260
- this._componentRef.instance.addClass(className);
6261
- }
6262
- }
6263
- return this._componentRef;
6264
- }
6265
- destroyContentRef() {
6266
- this._open = false;
6267
- this._service.destroy(this._componentRef, this._content, this.appendToBody ? this._document.body : this._elementRef.nativeElement);
6268
- this._componentRef = null;
6269
- }
6270
- }
6271
- DynamicContentBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicContentBaseDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
6272
- DynamicContentBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: DynamicContentBaseDirective, inputs: { data: "data", className: "className", align: "align", verticalAlign: "verticalAlign", appendToBody: "appendToBody", open: "open" }, outputs: { openChange: "openChange" }, ngImport: i0 });
6273
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicContentBaseDirective, decorators: [{
6274
- type: Directive
6275
- }], ctorParameters: function () { return [{ type: undefined }, { type: i0.ElementRef }, { type: DynamicComponentService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
6276
- type: Input
6277
- }], className: [{
6278
- type: Input
6279
- }], align: [{
6280
- type: Input
6281
- }], verticalAlign: [{
6282
- type: Input
6283
- }], appendToBody: [{
6284
- type: Input
6285
- }], open: [{
6286
- type: Input
6287
- }], openChange: [{
6288
- type: Output
6289
- }] } });
6290
-
6291
- class HintDirective extends DynamicContentBaseDirective {
6292
- constructor(_document, _elementRef, _service, _injector, _zone, _cdr) {
6293
- super(_document, _elementRef, _service, _injector, _zone, _cdr);
6294
- this._document = _document;
6295
- this._elementRef = _elementRef;
6296
- this._service = _service;
6297
- this._injector = _injector;
6298
- this._zone = _zone;
6299
- this._cdr = _cdr;
6300
- this.align = Align.center;
6301
- this.verticalAlign = VerticalAlign.top;
6302
- this.delay = 300;
6303
- }
6304
- get _dynamicContent() {
6305
- return this.tetaHint;
6306
- }
6307
- mouseenter() {
6308
- clearTimeout(this._timeout);
6309
- this._timeout = setTimeout(() => {
6310
- this.createHint();
6311
- }, this.delay);
6312
- }
6313
- mouseleave() {
6314
- clearTimeout(this._timeout);
6315
- if (this._open && this._componentRef) {
6316
- this._timeout = setTimeout(() => {
6317
- this.destroyContentRef();
6318
- }, this.delay);
6319
- }
6320
- }
6321
- click(event) {
6322
- if (this._open &&
6323
- this._componentRef &&
6324
- DomUtil.clickedInside(this._componentRef.location.nativeElement, event)) {
6325
- event.stopPropagation();
6326
- }
6327
- }
6328
- setPosition() {
6329
- if (this._componentRef && this._open) {
6330
- if (!this._componentRect) {
6331
- this._componentRect =
6332
- this._componentRef.location.nativeElement.getBoundingClientRect();
6333
- }
6334
- const position = PositionUtil.getPosition(this._elementRef.nativeElement.getBoundingClientRect(), this._componentRect, this.align, this.verticalAlign, 0, 4);
6335
- PositionUtil.setElementPosition(this._componentRef.location.nativeElement, position);
6336
- }
6337
- }
6338
- createHint() {
6339
- if (!this._dynamicContent) {
6340
- return;
6341
- }
6342
- this._componentRef = this.createContentRef();
6343
- this._componentRef.instance.className = [
6344
- ...ArrayUtil.asArray(this.className),
6345
- 'hint',
6346
- ];
6347
- }
6348
- ngOnDestroy() {
6349
- super.ngOnDestroy();
6350
- }
6351
- }
6352
- HintDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: DynamicComponentService }, { token: i0.Injector }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
6353
- HintDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: HintDirective, selector: "[tetaHint]", inputs: { tetaHint: "tetaHint", align: "align", verticalAlign: "verticalAlign", delay: "delay" }, host: { listeners: { "mouseenter": "mouseenter($event)", "mouseleave": "mouseleave($event)", "click": "click($event)" } }, usesInheritance: true, ngImport: i0 });
6354
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintDirective, decorators: [{
6355
- type: Directive,
6356
- args: [{
6357
- selector: '[tetaHint]',
6358
- }]
6359
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
6360
- type: Inject,
6361
- args: [DOCUMENT]
6362
- }] }, { type: i0.ElementRef }, { type: DynamicComponentService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tetaHint: [{
6363
- type: Input
6364
- }], align: [{
6365
- type: Input
6366
- }], verticalAlign: [{
6367
- type: Input
6368
- }], delay: [{
6369
- type: Input
6370
- }], mouseenter: [{
6371
- type: HostListener,
6372
- args: ['mouseenter', ['$event']]
6373
- }], mouseleave: [{
6374
- type: HostListener,
6375
- args: ['mouseleave', ['$event']]
6376
- }], click: [{
6377
- type: HostListener,
6378
- args: ['click', ['$event']]
6379
- }] } });
6380
-
6381
6406
  class PropertyGridItemComponent {
6382
6407
  constructor(_transloco) {
6383
6408
  this._transloco = _transloco;
@@ -6448,10 +6473,10 @@ class PropertyGridItemComponent {
6448
6473
  }
6449
6474
  }
6450
6475
  PropertyGridItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PropertyGridItemComponent, deps: [{ token: i1$1.TranslocoService }], target: i0.ɵɵFactoryTarget.Component });
6451
- PropertyGridItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PropertyGridItemComponent, selector: "teta-property-grid-item", inputs: { column: "column", hideNonEditable: "hideNonEditable", dict: "dict", formGroup: "formGroup", horizontal: "horizontal" }, outputs: { controlValueChange: "controlValueChange" }, ngImport: i0, template: "<teta-input [label]=\"caption\"\n [tetaHint]=\"column.hint\"\n [align]=\"align.left\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n *ngIf=\"column.editable || !hideNonEditable\">\n <ng-container [ngSwitch]=\"column.filterType\">\n <teta-select class=\"row_auto\"\n *ngSwitchCase=\"filterTypeEnum.list\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"></teta-select>\n <teta-date-picker *ngSwitchCase=\"filterTypeEnum.date\"\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-date-picker>\n <teta-toggle *ngSwitchCase=\"filterTypeEnum.boolean\"\n [formControlName]=\"column.name\">{{column.caption}}</teta-toggle>\n <teta-text-field class=\"row_auto\"\n *ngSwitchDefault\n (focusout)=\"valueChange()\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-text-field>\n </ng-container>\n <div *ngIf=\"controlIsInvalid(column.name)\"\n ngProjectAs=\"message\"\n class=\"color-red-50\">\n {{getError(column)}}\n </div>\n</teta-input>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: DatePickerComponent, selector: "teta-date-picker", inputs: ["disabled", "invalid", "firstDayOfWeek", "disabledDates", "disabledPeriods", "disabledDays", "minDate", "maxDate", "minYearDate", "maxYearDate", "align", "verticalAlign", "appendToBody", "allowNull", "backdrop", "showTime", "format"] }, { kind: "component", type: SelectComponent, selector: "teta-select", inputs: ["multiple", "options", "invalid", "align", "verticalAlign", "autoClose", "autoCloseIgnore", "disabled", "itemSize", "virtual", "icon", "placeholder", "appendToBody", "allowNull", "valueRef", "textRef", "searchRef"] }, { kind: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "horizontal", "required"] }, { kind: "component", type: TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "invalid"] }, { kind: "component", type: ToggleComponent, selector: "teta-toggle", inputs: ["palette", "noLabel", "disabled"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay"] }] });
6476
+ PropertyGridItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PropertyGridItemComponent, selector: "teta-property-grid-item", inputs: { column: "column", hideNonEditable: "hideNonEditable", dict: "dict", formGroup: "formGroup", horizontal: "horizontal" }, outputs: { controlValueChange: "controlValueChange" }, ngImport: i0, template: "<teta-input [label]=\"caption\"\n [tetaHint]=\"column.hint\"\n [align]=\"align.left\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n [required]=\"column.required\"\n *ngIf=\"column.editable || !hideNonEditable\">\n <ng-container [ngSwitch]=\"column.filterType\">\n <teta-select class=\"row_auto\"\n *ngSwitchCase=\"filterTypeEnum.list\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"></teta-select>\n <teta-date-picker *ngSwitchCase=\"filterTypeEnum.date\"\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-date-picker>\n <teta-toggle *ngSwitchCase=\"filterTypeEnum.boolean\"\n [formControlName]=\"column.name\">{{column.caption}}</teta-toggle>\n <teta-text-field class=\"row_auto\"\n *ngSwitchDefault\n (focusout)=\"valueChange()\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-text-field>\n </ng-container>\n <div *ngIf=\"controlIsInvalid(column.name)\"\n ngProjectAs=\"message\"\n class=\"color-red-50\">\n {{getError(column)}}\n </div>\n</teta-input>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: DatePickerComponent, selector: "teta-date-picker", inputs: ["disabled", "invalid", "firstDayOfWeek", "disabledDates", "disabledPeriods", "disabledDays", "minDate", "maxDate", "minYearDate", "maxYearDate", "align", "verticalAlign", "appendToBody", "allowNull", "backdrop", "showTime", "format"] }, { kind: "component", type: SelectComponent, selector: "teta-select", inputs: ["multiple", "options", "invalid", "align", "verticalAlign", "autoClose", "autoCloseIgnore", "disabled", "itemSize", "virtual", "icon", "placeholder", "appendToBody", "allowNull", "valueRef", "textRef", "searchRef"] }, { kind: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "horizontal", "required"] }, { kind: "component", type: TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "invalid"] }, { kind: "component", type: ToggleComponent, selector: "teta-toggle", inputs: ["palette", "noLabel", "disabled"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay", "overflownOnly"] }] });
6452
6477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PropertyGridItemComponent, decorators: [{
6453
6478
  type: Component,
6454
- args: [{ selector: 'teta-property-grid-item', template: "<teta-input [label]=\"caption\"\n [tetaHint]=\"column.hint\"\n [align]=\"align.left\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n *ngIf=\"column.editable || !hideNonEditable\">\n <ng-container [ngSwitch]=\"column.filterType\">\n <teta-select class=\"row_auto\"\n *ngSwitchCase=\"filterTypeEnum.list\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"></teta-select>\n <teta-date-picker *ngSwitchCase=\"filterTypeEnum.date\"\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-date-picker>\n <teta-toggle *ngSwitchCase=\"filterTypeEnum.boolean\"\n [formControlName]=\"column.name\">{{column.caption}}</teta-toggle>\n <teta-text-field class=\"row_auto\"\n *ngSwitchDefault\n (focusout)=\"valueChange()\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-text-field>\n </ng-container>\n <div *ngIf=\"controlIsInvalid(column.name)\"\n ngProjectAs=\"message\"\n class=\"color-red-50\">\n {{getError(column)}}\n </div>\n</teta-input>\n" }]
6479
+ args: [{ selector: 'teta-property-grid-item', template: "<teta-input [label]=\"caption\"\n [tetaHint]=\"column.hint\"\n [align]=\"align.left\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n [required]=\"column.required\"\n *ngIf=\"column.editable || !hideNonEditable\">\n <ng-container [ngSwitch]=\"column.filterType\">\n <teta-select class=\"row_auto\"\n *ngSwitchCase=\"filterTypeEnum.list\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"></teta-select>\n <teta-date-picker *ngSwitchCase=\"filterTypeEnum.date\"\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-date-picker>\n <teta-toggle *ngSwitchCase=\"filterTypeEnum.boolean\"\n [formControlName]=\"column.name\">{{column.caption}}</teta-toggle>\n <teta-text-field class=\"row_auto\"\n *ngSwitchDefault\n (focusout)=\"valueChange()\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-text-field>\n </ng-container>\n <div *ngIf=\"controlIsInvalid(column.name)\"\n ngProjectAs=\"message\"\n class=\"color-red-50\">\n {{getError(column)}}\n </div>\n</teta-input>\n" }]
6455
6480
  }], ctorParameters: function () { return [{ type: i1$1.TranslocoService }]; }, propDecorators: { column: [{
6456
6481
  type: Input
6457
6482
  }], hideNonEditable: [{
@@ -6645,25 +6670,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
6645
6670
  }]
6646
6671
  }] });
6647
6672
 
6648
- class HintModule {
6649
- }
6650
- HintModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6651
- HintModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: HintModule, declarations: [HintDirective], imports: [CommonModule,
6652
- DynamicComponentModule], exports: [HintDirective] });
6653
- HintModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, imports: [CommonModule,
6654
- DynamicComponentModule] });
6655
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, decorators: [{
6656
- type: NgModule,
6657
- args: [{
6658
- declarations: [HintDirective],
6659
- exports: [HintDirective],
6660
- imports: [
6661
- CommonModule,
6662
- DynamicComponentModule
6663
- ]
6664
- }]
6665
- }] });
6666
-
6667
6673
  class PropertyGridModule {
6668
6674
  }
6669
6675
  PropertyGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PropertyGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -8147,7 +8153,7 @@ class DefaultHeadCellComponent extends HeadCellComponentBase {
8147
8153
  }
8148
8154
  }
8149
8155
  DefaultHeadCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DefaultHeadCellComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
8150
- DefaultHeadCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: DefaultHeadCellComponent, selector: "teta-default-head-cell", inputs: { column: "column", columns: "columns", data: "data" }, usesInheritance: true, ngImport: i0, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text font-caption color-text-70\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0;padding:6px 8px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8156
+ DefaultHeadCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: DefaultHeadCellComponent, selector: "teta-default-head-cell", inputs: { column: "column", columns: "columns", data: "data" }, usesInheritance: true, ngImport: i0, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text font-caption color-text-70\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0;padding:6px 8px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay", "overflownOnly"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8151
8157
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DefaultHeadCellComponent, decorators: [{
8152
8158
  type: Component,
8153
8159
  args: [{ selector: 'teta-default-head-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"column column_auto\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text font-caption color-text-70\">\n [{{column.unit}}]\n </div>\n</div>\n", styles: [":host{align-items:center;justify-content:center;display:flex;min-width:0;padding:6px 8px}\n"] }]
@@ -8329,10 +8335,10 @@ class TabsComponent {
8329
8335
  }
8330
8336
  }
8331
8337
  TabsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8332
- TabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TabsComponent, selector: "teta-tabs", inputs: { activeId: "activeId", destroyOnHide: "destroyOnHide" }, outputs: { tabChange: "tabChange" }, host: { properties: { "class.tabs": "this.classTabs" } }, queries: [{ propertyName: "tabs", predicate: TabComponent }], ngImport: i0, template: "<div class=\"tabs-head\" role=\"tablist\">\n <div class=\"tabs-head-item\"\n *ngFor=\"let tab of tabs\"\n (click)=\"select(tab.id);\"\n [class.tabs-head-item_active]=\"tab.id === activeId\"\n [class.tabs-head-item_disabled]=\"tab.disabled\">\n <span [id]=\"tab.id\" class=\"tabs-title\"\n role=\"tab\"\n [attr.tabindex]=\"(tab.disabled ? '-1': undefined)\"\n [attr.aria-controls]=\"(!destroyOnHide || tab.id === activeId ? tab.id + '-panel' : null)\"\n [attr.aria-expanded]=\"tab.id === activeId\"\n [attr.aria-disabled]=\"tab.disabled\">\n {{tab.title}}\n <ng-template [ngTemplateOutlet]=\"tab.titleTpl?.template\"></ng-template>\n </span>\n </div>\n</div>\n<div class=\"tabs-content\">\n <ng-template ngFor let-tab [ngForOf]=\"tabs\">\n <ng-container *ngIf=\"!destroyOnHide || tab.id === activeId\">\n <ng-template [ngTemplateOutlet]=\"tab.contentTpl?.template\"></ng-template>\n </ng-container>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
8338
+ TabsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TabsComponent, selector: "teta-tabs", inputs: { activeId: "activeId", destroyOnHide: "destroyOnHide" }, outputs: { tabChange: "tabChange" }, host: { properties: { "class.tabs": "this.classTabs" } }, queries: [{ propertyName: "tabs", predicate: TabComponent }], ngImport: i0, template: "<div class=\"tabs-head\" role=\"tablist\">\n <div class=\"tabs-head-item\"\n *ngFor=\"let tab of tabs\"\n (click)=\"select(tab.id);\"\n [class.tabs-head-item_active]=\"tab.id === activeId\"\n [class.tabs-head-item_disabled]=\"tab.disabled\">\n <span [id]=\"tab.id\" class=\"tabs-title\"\n role=\"tab\"\n [attr.tabindex]=\"(tab.disabled ? '-1': undefined)\"\n [attr.aria-controls]=\"(!destroyOnHide || tab.id === activeId ? tab.id + '-panel' : null)\"\n [attr.aria-expanded]=\"tab.id === activeId\"\n [attr.aria-disabled]=\"tab.disabled\">\n {{tab.title}}\n <ng-template [ngTemplateOutlet]=\"tab.titleTpl?.template\"></ng-template>\n </span>\n </div>\n <ng-content></ng-content>\n</div>\n<div class=\"tabs-content\">\n <ng-template ngFor let-tab [ngForOf]=\"tabs\">\n <ng-container *ngIf=\"!destroyOnHide || tab.id === activeId\">\n <ng-template [ngTemplateOutlet]=\"tab.contentTpl?.template\"></ng-template>\n </ng-container>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
8333
8339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TabsComponent, decorators: [{
8334
8340
  type: Component,
8335
- args: [{ selector: 'teta-tabs', template: "<div class=\"tabs-head\" role=\"tablist\">\n <div class=\"tabs-head-item\"\n *ngFor=\"let tab of tabs\"\n (click)=\"select(tab.id);\"\n [class.tabs-head-item_active]=\"tab.id === activeId\"\n [class.tabs-head-item_disabled]=\"tab.disabled\">\n <span [id]=\"tab.id\" class=\"tabs-title\"\n role=\"tab\"\n [attr.tabindex]=\"(tab.disabled ? '-1': undefined)\"\n [attr.aria-controls]=\"(!destroyOnHide || tab.id === activeId ? tab.id + '-panel' : null)\"\n [attr.aria-expanded]=\"tab.id === activeId\"\n [attr.aria-disabled]=\"tab.disabled\">\n {{tab.title}}\n <ng-template [ngTemplateOutlet]=\"tab.titleTpl?.template\"></ng-template>\n </span>\n </div>\n</div>\n<div class=\"tabs-content\">\n <ng-template ngFor let-tab [ngForOf]=\"tabs\">\n <ng-container *ngIf=\"!destroyOnHide || tab.id === activeId\">\n <ng-template [ngTemplateOutlet]=\"tab.contentTpl?.template\"></ng-template>\n </ng-container>\n </ng-template>\n</div>\n" }]
8341
+ args: [{ selector: 'teta-tabs', template: "<div class=\"tabs-head\" role=\"tablist\">\n <div class=\"tabs-head-item\"\n *ngFor=\"let tab of tabs\"\n (click)=\"select(tab.id);\"\n [class.tabs-head-item_active]=\"tab.id === activeId\"\n [class.tabs-head-item_disabled]=\"tab.disabled\">\n <span [id]=\"tab.id\" class=\"tabs-title\"\n role=\"tab\"\n [attr.tabindex]=\"(tab.disabled ? '-1': undefined)\"\n [attr.aria-controls]=\"(!destroyOnHide || tab.id === activeId ? tab.id + '-panel' : null)\"\n [attr.aria-expanded]=\"tab.id === activeId\"\n [attr.aria-disabled]=\"tab.disabled\">\n {{tab.title}}\n <ng-template [ngTemplateOutlet]=\"tab.titleTpl?.template\"></ng-template>\n </span>\n </div>\n <ng-content></ng-content>\n</div>\n<div class=\"tabs-content\">\n <ng-template ngFor let-tab [ngForOf]=\"tabs\">\n <ng-container *ngIf=\"!destroyOnHide || tab.id === activeId\">\n <ng-template [ngTemplateOutlet]=\"tab.contentTpl?.template\"></ng-template>\n </ng-container>\n </ng-template>\n</div>\n" }]
8336
8342
  }], ctorParameters: function () { return []; }, propDecorators: { classTabs: [{
8337
8343
  type: HostBinding,
8338
8344
  args: ['class.tabs']
@@ -8578,10 +8584,11 @@ class TreeItemComponent {
8578
8584
  this.treeItemClass = true;
8579
8585
  this.itemIsOpen = false;
8580
8586
  this._alive = true;
8587
+ this.treeItemInstance = true;
8581
8588
  }
8582
8589
  get computedDepth() {
8583
8590
  return (this.depth +
8584
- (this.item[this.childNodeName]?.length > 0 ? 0 : this.noChildMode ? 1 : 2));
8591
+ (this.item[this.childNodeName]?.length > 0 ? 0 : this.childPadding ? 2 : 1));
8585
8592
  }
8586
8593
  openItem() {
8587
8594
  this.service.openItem(this.item);
@@ -8596,14 +8603,15 @@ class TreeItemComponent {
8596
8603
  this._cdr.markForCheck();
8597
8604
  });
8598
8605
  }
8599
- ngOnChanges(changes) { }
8606
+ ngOnChanges(changes) {
8607
+ }
8600
8608
  ngOnDestroy() {
8601
8609
  this._alive = false;
8602
8610
  }
8603
8611
  }
8604
8612
  TreeItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TreeItemComponent, deps: [{ token: TreeService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
8605
- TreeItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TreeItemComponent, selector: "teta-tree-item", inputs: { item: "item", depth: "depth", padding: "padding", childNodeName: "childNodeName", template: "template", noChildMode: "noChildMode" }, host: { properties: { "class.tree__item-container": "this.treeItemClass" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"tree__item_content\" [ngClass]=\"'tree__item_content-' + computedDepth\" (click)=\"openItem()\">\n <ng-container\n *ngTemplateOutlet=\"template; context: {$implicit: item, item: item, open: itemIsOpen, service: service, depth: depth}\"></ng-container>\n</div>\n<div [@children] class=\"tree__children\" *ngIf=\"itemIsOpen && item[childNodeName]?.length > 0\">\n <teta-tree-item *ngFor=\"let child of item[childNodeName];\"\n [item]=\"child\"\n [template]=\"template\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [depth]=\"depth + 1\"></teta-tree-item>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TreeItemComponent, selector: "teta-tree-item", inputs: ["item", "depth", "padding", "childNodeName", "template", "noChildMode"] }], animations: [
8606
- trigger('children', [
8613
+ TreeItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TreeItemComponent, selector: "teta-tree-item", inputs: { item: "item", depth: "depth", padding: "padding", childNodeName: "childNodeName", template: "template", childPadding: "childPadding" }, host: { properties: { "class.tree__item-container": "this.treeItemClass", "@treeItemInstance": "this.treeItemInstance" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"tree__item_content\" [ngClass]=\"'tree__item_content-' + computedDepth\" (click)=\"openItem()\">\n <ng-container\n *ngTemplateOutlet=\"template; context: {$implicit: item, item: item, open: itemIsOpen, service: service, depth: depth}\"></ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
8614
+ trigger('treeItemInstance', [
8607
8615
  transition('void => *', [
8608
8616
  style({ opacity: '0' }),
8609
8617
  animate(200, style({ opacity: '1' })),
@@ -8614,14 +8622,14 @@ TreeItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
8614
8622
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TreeItemComponent, decorators: [{
8615
8623
  type: Component,
8616
8624
  args: [{ selector: 'teta-tree-item', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
8617
- trigger('children', [
8625
+ trigger('treeItemInstance', [
8618
8626
  transition('void => *', [
8619
8627
  style({ opacity: '0' }),
8620
8628
  animate(200, style({ opacity: '1' })),
8621
8629
  ]),
8622
8630
  transition('* => void', [animate(200, style({ opacity: '0' }))]),
8623
8631
  ]),
8624
- ], template: "<div class=\"tree__item_content\" [ngClass]=\"'tree__item_content-' + computedDepth\" (click)=\"openItem()\">\n <ng-container\n *ngTemplateOutlet=\"template; context: {$implicit: item, item: item, open: itemIsOpen, service: service, depth: depth}\"></ng-container>\n</div>\n<div [@children] class=\"tree__children\" *ngIf=\"itemIsOpen && item[childNodeName]?.length > 0\">\n <teta-tree-item *ngFor=\"let child of item[childNodeName];\"\n [item]=\"child\"\n [template]=\"template\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [depth]=\"depth + 1\"></teta-tree-item>\n</div>\n" }]
8632
+ ], template: "<div class=\"tree__item_content\" [ngClass]=\"'tree__item_content-' + computedDepth\" (click)=\"openItem()\">\n <ng-container\n *ngTemplateOutlet=\"template; context: {$implicit: item, item: item, open: itemIsOpen, service: service, depth: depth}\"></ng-container>\n</div>\n" }]
8625
8633
  }], ctorParameters: function () { return [{ type: TreeService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{
8626
8634
  type: Input
8627
8635
  }], depth: [{
@@ -8632,69 +8640,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
8632
8640
  type: Input
8633
8641
  }], template: [{
8634
8642
  type: Input
8635
- }], noChildMode: [{
8643
+ }], childPadding: [{
8636
8644
  type: Input
8637
8645
  }], treeItemClass: [{
8638
8646
  type: HostBinding,
8639
8647
  args: ['class.tree__item-container']
8648
+ }], treeItemInstance: [{
8649
+ type: HostBinding,
8650
+ args: ['@treeItemInstance']
8640
8651
  }] } });
8641
8652
 
8642
8653
  class TreeComponent {
8643
8654
  constructor(_service, _cdr) {
8644
8655
  this._service = _service;
8645
8656
  this._cdr = _cdr;
8646
- this.service = new EventEmitter();
8647
8657
  this.padding = 8;
8648
8658
  this.childNodeName = 'children';
8659
+ this.height = 28;
8660
+ this.service = new EventEmitter();
8649
8661
  this.openItemsChange = new EventEmitter();
8650
8662
  this._alive = true;
8663
+ this.treeClass = true;
8664
+ this.trackRow = (index, item) => {
8665
+ if (this.compareItems) {
8666
+ return this.compareItems(item);
8667
+ }
8668
+ return index;
8669
+ };
8651
8670
  this._service.openItems
8652
8671
  .pipe(takeWhile((_) => this._alive), filter((_) => this._openItems !== _))
8653
- .subscribe((_) => this.openItemsChange.emit(_));
8672
+ .subscribe((_) => {
8673
+ this._openItems = _;
8674
+ this.openItemsChange.emit(_);
8675
+ });
8676
+ }
8677
+ set data(data) {
8678
+ this._data = data;
8679
+ }
8680
+ get data() {
8681
+ return this._data;
8654
8682
  }
8655
8683
  set openItems(items) {
8656
8684
  this._openItems = items;
8657
8685
  this._service.setOpenItems(items);
8658
8686
  }
8659
- get noChildMode() {
8660
- const hasChildren = this.data.find((_) => _[this.childNodeName]?.length > 0);
8661
- return !hasChildren;
8662
- }
8663
8687
  set compareItems(func) {
8664
8688
  this._service.compareItems = func;
8665
8689
  }
8666
- get getClass() {
8667
- const result = [this.class, 'tree'];
8668
- return result.join(' ');
8690
+ get compareItems() {
8691
+ return this._service.compareItems;
8669
8692
  }
8670
8693
  ngOnInit() {
8671
8694
  this.service.emit(this._service);
8672
8695
  }
8673
- ngAfterContentInit() { }
8674
8696
  ngOnChanges(changes) {
8697
+ this.displayData = this.getDisplayData(this._data, 0);
8698
+ this.childPadding = this.hasChildren(this._data);
8675
8699
  this._cdr.detectChanges();
8676
8700
  }
8677
8701
  ngOnDestroy() {
8678
8702
  this._alive = false;
8679
8703
  }
8704
+ hasChildren(data) {
8705
+ return data.some((_) => _[this.childNodeName]?.length > 0);
8706
+ }
8707
+ getDisplayData(data, level) {
8708
+ const result = [];
8709
+ data?.forEach((item) => {
8710
+ item['level'] = level;
8711
+ result.push(item);
8712
+ if (item[this.childNodeName]?.length > 0
8713
+ && this._openItems?.find((openItem) => this.compareItems(openItem) === this.compareItems(item))) {
8714
+ result.push(...this.getDisplayData(item[this.childNodeName], level + 1));
8715
+ }
8716
+ });
8717
+ return result;
8718
+ }
8680
8719
  }
8681
8720
  TreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TreeComponent, deps: [{ token: TreeService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
8682
- TreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TreeComponent, selector: "teta-tree", inputs: { data: "data", class: "class", padding: "padding", childNodeName: "childNodeName", openItems: "openItems", compareItems: "compareItems" }, outputs: { service: "service", openItemsChange: "openItemsChange" }, host: { properties: { "class": "this.getClass" } }, providers: [TreeService], queries: [{ propertyName: "template", first: true, predicate: TetaTemplateDirective, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngFor=\"let item of data\">\n <teta-tree-item [item]=\"item\"\n [depth]=\"0\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [noChildMode]=\"noChildMode\"\n [template]=\"template?.template\"></teta-tree-item>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: TreeItemComponent, selector: "teta-tree-item", inputs: ["item", "depth", "padding", "childNodeName", "template", "noChildMode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8721
+ TreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TreeComponent, selector: "teta-tree", inputs: { data: "data", padding: "padding", childNodeName: "childNodeName", virtual: "virtual", height: "height", openItems: "openItems", compareItems: "compareItems" }, outputs: { service: "service", openItemsChange: "openItemsChange" }, host: { properties: { "class.tree": "this.treeClass" } }, providers: [TreeService], queries: [{ propertyName: "template", first: true, predicate: TetaTemplateDirective, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual; else default\"\n class=\"table-body-container\"\n [itemSize]=\"height\">\n <teta-tree-item *cdkVirtualFor=\"let item of displayData;templateCacheSize: 0; trackBy: trackRow;\"\n [item]=\"item\"\n [style.height.px]=\"height\"\n [depth]=\"item['level']\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [childPadding]=\"childPadding\"\n [template]=\"template?.template\"></teta-tree-item>\n</cdk-virtual-scroll-viewport>\n<ng-template #default>\n <teta-tree-item *ngFor=\"let item of displayData\"\n [item]=\"item\"\n [style.height.px]=\"height\"\n [depth]=\"item['level']\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [childPadding]=\"childPadding\"\n [template]=\"template?.template\"></teta-tree-item>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: TreeItemComponent, selector: "teta-tree-item", inputs: ["item", "depth", "padding", "childNodeName", "template", "childPadding"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8683
8722
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TreeComponent, decorators: [{
8684
8723
  type: Component,
8685
- args: [{ selector: 'teta-tree', providers: [TreeService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngFor=\"let item of data\">\n <teta-tree-item [item]=\"item\"\n [depth]=\"0\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [noChildMode]=\"noChildMode\"\n [template]=\"template?.template\"></teta-tree-item>\n</ng-container>\n" }]
8724
+ args: [{ selector: 'teta-tree', providers: [TreeService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual; else default\"\n class=\"table-body-container\"\n [itemSize]=\"height\">\n <teta-tree-item *cdkVirtualFor=\"let item of displayData;templateCacheSize: 0; trackBy: trackRow;\"\n [item]=\"item\"\n [style.height.px]=\"height\"\n [depth]=\"item['level']\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [childPadding]=\"childPadding\"\n [template]=\"template?.template\"></teta-tree-item>\n</cdk-virtual-scroll-viewport>\n<ng-template #default>\n <teta-tree-item *ngFor=\"let item of displayData\"\n [item]=\"item\"\n [style.height.px]=\"height\"\n [depth]=\"item['level']\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [childPadding]=\"childPadding\"\n [template]=\"template?.template\"></teta-tree-item>\n</ng-template>\n" }]
8686
8725
  }], ctorParameters: function () { return [{ type: TreeService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
8687
8726
  type: Input
8688
- }], service: [{
8689
- type: Output
8690
- }], class: [{
8691
- type: Input
8692
8727
  }], padding: [{
8693
8728
  type: Input
8694
8729
  }], childNodeName: [{
8695
8730
  type: Input
8731
+ }], virtual: [{
8732
+ type: Input
8733
+ }], height: [{
8734
+ type: Input
8696
8735
  }], openItems: [{
8697
8736
  type: Input
8737
+ }], service: [{
8738
+ type: Output
8698
8739
  }], openItemsChange: [{
8699
8740
  type: Output
8700
8741
  }], template: [{
@@ -8702,9 +8743,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
8702
8743
  args: [TetaTemplateDirective, { static: true }]
8703
8744
  }], compareItems: [{
8704
8745
  type: Input
8705
- }], getClass: [{
8746
+ }], treeClass: [{
8706
8747
  type: HostBinding,
8707
- args: ['class']
8748
+ args: ['class.tree']
8708
8749
  }] } });
8709
8750
 
8710
8751
  class TreeItemToggleComponent {
@@ -8839,7 +8880,7 @@ class VisibilityDropdownTabComponent {
8839
8880
  }
8840
8881
  }
8841
8882
  VisibilityDropdownTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: VisibilityDropdownTabComponent, deps: [{ token: TableService }, { token: TetaConfigService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
8842
- VisibilityDropdownTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: VisibilityDropdownTabComponent, selector: "teta-visibility-dropdown-tab", inputs: { columns: "columns", column: "column", state: "state", data: "data", close: "close" }, ngImport: i0, template: "<ng-container *ngIf=\"locale | async as loc\">\n <div class=\"list-item padding-left-6 padding-top-2\" [class.padding-left-9]=\"childMode\">\n <teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [ngModel]=\"allColumnsVisible()\"\n (ngModelChange)=\"setAllColumns($event)\">\n {{loc.all}}\n </teta-checkbox>\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"padding-v-2 column column_auto scrollable\">\n <teta-tree [data]=\"columns\"\n [openItems]=\"openItems\"\n (openItemsChange)=\"openItems = $event\"\n [childNodeName]=\"'columns'\"\n [compareItems]=\"compareItems\">\n <ng-template tetaTemplate let-item>\n <div class=\"tree__item\">\n <teta-tree-item-toggle [item]=\"item\" *ngIf=\"item.columns?.length > 0\"></teta-tree-item-toggle>\n <teta-checkbox\n [ngModel]=\"!columnIsHidden(item)\"\n (ngModelChange)=\"setColumnVisibility(item, $event)\"\n (click)=\"$event.stopPropagation()\"\n [binary]=\"true\"\n >\n {{item.caption}}\n </teta-checkbox>\n </div>\n </ng-template>\n </teta-tree>\n </div>\n <teta-toolbar class=\"justify-content-end\">\n <button teta-button\n [disabled]=\"allColumnsVisible() === false\"\n [palette]=\"'primary'\"\n (click)=\"setColumnsVisibility()\">\n {{loc.apply}}\n </button>\n </teta-toolbar>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CheckboxComponent, selector: "teta-checkbox", inputs: ["class", "palette", "noLabel", "disabled", "value", "binary", "allowNull"] }, { kind: "component", type: ButtonComponent, selector: "button[teta-button], teta-button", inputs: ["palette", "class", "view", "square"] }, { kind: "component", type: TreeComponent, selector: "teta-tree", inputs: ["data", "class", "padding", "childNodeName", "openItems", "compareItems"], outputs: ["service", "openItemsChange"] }, { kind: "directive", type: TetaTemplateDirective, selector: "[tetaTemplate]", inputs: ["tetaTemplate"] }, { kind: "component", type: TreeItemToggleComponent, selector: "teta-tree-item-toggle", inputs: ["item"] }, { kind: "component", type: ToolbarComponent, selector: "teta-toolbar", inputs: ["palette", "class"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8883
+ VisibilityDropdownTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: VisibilityDropdownTabComponent, selector: "teta-visibility-dropdown-tab", inputs: { columns: "columns", column: "column", state: "state", data: "data", close: "close" }, ngImport: i0, template: "<ng-container *ngIf=\"locale | async as loc\">\n <div class=\"list-item padding-left-6 padding-top-2\" [class.padding-left-9]=\"childMode\">\n <teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [ngModel]=\"allColumnsVisible()\"\n (ngModelChange)=\"setAllColumns($event)\">\n {{loc.all}}\n </teta-checkbox>\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"padding-v-2 column column_auto scrollable\">\n <teta-tree [data]=\"columns\"\n [openItems]=\"openItems\"\n (openItemsChange)=\"openItems = $event\"\n [childNodeName]=\"'columns'\"\n [compareItems]=\"compareItems\">\n <ng-template tetaTemplate let-item>\n <div class=\"tree__item\">\n <teta-tree-item-toggle [item]=\"item\" *ngIf=\"item.columns?.length > 0\"></teta-tree-item-toggle>\n <teta-checkbox\n [ngModel]=\"!columnIsHidden(item)\"\n (ngModelChange)=\"setColumnVisibility(item, $event)\"\n (click)=\"$event.stopPropagation()\"\n [binary]=\"true\"\n >\n {{item.caption}}\n </teta-checkbox>\n </div>\n </ng-template>\n </teta-tree>\n </div>\n <teta-toolbar class=\"justify-content-end\">\n <button teta-button\n [disabled]=\"allColumnsVisible() === false\"\n [palette]=\"'primary'\"\n (click)=\"setColumnsVisibility()\">\n {{loc.apply}}\n </button>\n </teta-toolbar>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CheckboxComponent, selector: "teta-checkbox", inputs: ["class", "palette", "noLabel", "disabled", "value", "binary", "allowNull"] }, { kind: "component", type: ButtonComponent, selector: "button[teta-button], teta-button", inputs: ["palette", "class", "view", "square"] }, { kind: "component", type: TreeComponent, selector: "teta-tree", inputs: ["data", "padding", "childNodeName", "virtual", "height", "openItems", "compareItems"], outputs: ["service", "openItemsChange"] }, { kind: "directive", type: TetaTemplateDirective, selector: "[tetaTemplate]", inputs: ["tetaTemplate"] }, { kind: "component", type: TreeItemToggleComponent, selector: "teta-tree-item-toggle", inputs: ["item"] }, { kind: "component", type: ToolbarComponent, selector: "teta-toolbar", inputs: ["palette", "class"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8843
8884
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: VisibilityDropdownTabComponent, decorators: [{
8844
8885
  type: Component,
8845
8886
  args: [{ selector: 'teta-visibility-dropdown-tab', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"locale | async as loc\">\n <div class=\"list-item padding-left-6 padding-top-2\" [class.padding-left-9]=\"childMode\">\n <teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [ngModel]=\"allColumnsVisible()\"\n (ngModelChange)=\"setAllColumns($event)\">\n {{loc.all}}\n </teta-checkbox>\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"padding-v-2 column column_auto scrollable\">\n <teta-tree [data]=\"columns\"\n [openItems]=\"openItems\"\n (openItemsChange)=\"openItems = $event\"\n [childNodeName]=\"'columns'\"\n [compareItems]=\"compareItems\">\n <ng-template tetaTemplate let-item>\n <div class=\"tree__item\">\n <teta-tree-item-toggle [item]=\"item\" *ngIf=\"item.columns?.length > 0\"></teta-tree-item-toggle>\n <teta-checkbox\n [ngModel]=\"!columnIsHidden(item)\"\n (ngModelChange)=\"setColumnVisibility(item, $event)\"\n (click)=\"$event.stopPropagation()\"\n [binary]=\"true\"\n >\n {{item.caption}}\n </teta-checkbox>\n </div>\n </ng-template>\n </teta-tree>\n </div>\n <teta-toolbar class=\"justify-content-end\">\n <button teta-button\n [disabled]=\"allColumnsVisible() === false\"\n [palette]=\"'primary'\"\n (click)=\"setColumnsVisibility()\">\n {{loc.apply}}\n </button>\n </teta-toolbar>\n</ng-container>\n" }]
@@ -9465,10 +9506,10 @@ class StringCellComponent extends CellComponentBase {
9465
9506
  }
9466
9507
  }
9467
9508
  StringCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: StringCellComponent, deps: [{ token: TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
9468
- StringCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: StringCellComponent, selector: "teta-string-cell", inputs: { column: "column", row: "row" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<span [style.display]=\"edit ? 'none' : 'block'\"\n class=\"cell-text\"\n [class.cell-text_disabled]=\"!editable\">\n {{row[column.name]}}\n</span>\n<input #input\n *ngIf=\"edit\"\n type=\"text\"\n class=\"input row_auto border-radius-0\"\n (blur)=\"setValue()\"\n [ngModel]=\"row[column.name]\"\n (ngModelChange)=\"row[column.name]=$event\"/>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9509
+ StringCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: StringCellComponent, selector: "teta-string-cell", inputs: { column: "column", row: "row" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<span [style.display]=\"edit ? 'none' : 'block'\"\n class=\"cell-text\"\n [tetaHint]=\"row[column.name]\"\n [appendToBody]=\"true\"\n [overflownOnly]=\"true\"\n [class.cell-text_disabled]=\"!editable\">\n {{row[column.name]}}\n</span>\n<input #input\n *ngIf=\"edit\"\n type=\"text\"\n class=\"input row_auto border-radius-0\"\n (blur)=\"setValue()\"\n [ngModel]=\"row[column.name]\"\n (ngModelChange)=\"row[column.name]=$event\"/>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HintDirective, selector: "[tetaHint]", inputs: ["tetaHint", "align", "verticalAlign", "delay", "overflownOnly"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9469
9510
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: StringCellComponent, decorators: [{
9470
9511
  type: Component,
9471
- args: [{ selector: 'teta-string-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span [style.display]=\"edit ? 'none' : 'block'\"\n class=\"cell-text\"\n [class.cell-text_disabled]=\"!editable\">\n {{row[column.name]}}\n</span>\n<input #input\n *ngIf=\"edit\"\n type=\"text\"\n class=\"input row_auto border-radius-0\"\n (blur)=\"setValue()\"\n [ngModel]=\"row[column.name]\"\n (ngModelChange)=\"row[column.name]=$event\"/>\n\n" }]
9512
+ args: [{ selector: 'teta-string-cell', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span [style.display]=\"edit ? 'none' : 'block'\"\n class=\"cell-text\"\n [tetaHint]=\"row[column.name]\"\n [appendToBody]=\"true\"\n [overflownOnly]=\"true\"\n [class.cell-text_disabled]=\"!editable\">\n {{row[column.name]}}\n</span>\n<input #input\n *ngIf=\"edit\"\n type=\"text\"\n class=\"input row_auto border-radius-0\"\n (blur)=\"setValue()\"\n [ngModel]=\"row[column.name]\"\n (ngModelChange)=\"row[column.name]=$event\"/>\n\n" }]
9472
9513
  }], ctorParameters: function () { return [{ type: TableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { column: [{
9473
9514
  type: Input
9474
9515
  }], row: [{
@@ -10311,14 +10352,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
10311
10352
  class TreeModule {
10312
10353
  }
10313
10354
  TreeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10314
- TreeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: TreeModule, declarations: [TreeComponent, TreeItemComponent, TreeItemToggleComponent], imports: [CommonModule, IconModule, TetaTemplateModule], exports: [TreeComponent, TetaTemplateModule, TreeItemToggleComponent] });
10315
- TreeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TreeModule, imports: [CommonModule, IconModule, TetaTemplateModule, TetaTemplateModule] });
10355
+ TreeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: TreeModule, declarations: [TreeComponent, TreeItemComponent, TreeItemToggleComponent], imports: [CommonModule, IconModule, TetaTemplateModule, ScrollingModule], exports: [TreeComponent, TetaTemplateModule, TreeItemToggleComponent] });
10356
+ TreeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TreeModule, imports: [CommonModule, IconModule, TetaTemplateModule, ScrollingModule, TetaTemplateModule] });
10316
10357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TreeModule, decorators: [{
10317
10358
  type: NgModule,
10318
10359
  args: [{
10319
10360
  declarations: [TreeComponent, TreeItemComponent, TreeItemToggleComponent],
10320
10361
  exports: [TreeComponent, TetaTemplateModule, TreeItemToggleComponent],
10321
- imports: [CommonModule, IconModule, TetaTemplateModule],
10362
+ imports: [CommonModule, IconModule, TetaTemplateModule, ScrollingModule],
10322
10363
  }]
10323
10364
  }] });
10324
10365