@tetacom/ng-components 1.0.67 → 1.0.68

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,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';
@@ -1062,6 +1062,9 @@ class DomUtil {
1062
1062
  }
1063
1063
  return null;
1064
1064
  }
1065
+ static isOverflown(element) {
1066
+ return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;
1067
+ }
1065
1068
  }
1066
1069
 
1067
1070
  class PositionUtil {
@@ -3607,151 +3610,426 @@ class NumericFilterValue {
3607
3610
  }
3608
3611
  }
3609
3612
 
3610
- class InputComponent {
3611
- constructor() {
3612
- this.required = false;
3613
+ class TetaContentRef {
3614
+ constructor(nodes, viewRef, componentRef) {
3615
+ this.nodes = nodes;
3616
+ this.viewRef = viewRef;
3617
+ this.componentRef = componentRef;
3613
3618
  }
3614
- get column() {
3615
- return !this.horizontal;
3619
+ }
3620
+
3621
+ class DynamicData {
3622
+ constructor(value) {
3623
+ for (const key in value) {
3624
+ if (value.hasOwnProperty(key)) {
3625
+ this[key] = value[key];
3626
+ }
3627
+ }
3616
3628
  }
3617
- ngOnInit() { }
3618
3629
  }
3619
- InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3620
- 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 });
3621
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputComponent, decorators: [{
3622
- type: Component,
3623
- 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"] }]
3624
- }], ctorParameters: function () { return []; }, propDecorators: { label: [{
3625
- type: Input
3626
- }], horizontal: [{
3627
- type: Input
3628
- }, {
3629
- type: HostBinding,
3630
- args: ['class.row']
3631
- }], required: [{
3632
- type: Input
3633
- }], column: [{
3634
- type: HostBinding,
3635
- args: ['class.column']
3636
- }] } });
3637
3630
 
3638
- class NumericFilterComponent extends FilterComponentBase {
3639
- constructor(changeDetector, _config) {
3640
- super();
3641
- this.changeDetector = changeDetector;
3642
- this._config = _config;
3643
- this.filterOptions = [];
3644
- this.filterChanged = new EventEmitter();
3645
- this.locale = this._config.locale;
3631
+ class DynamicComponentService {
3632
+ constructor(_componentFactoryResolver, _rendererFactory, _appRef) {
3633
+ this._componentFactoryResolver = _componentFactoryResolver;
3634
+ this._rendererFactory = _rendererFactory;
3635
+ this._appRef = _appRef;
3636
+ this._renderer = this._rendererFactory.createRenderer(null, null);
3646
3637
  }
3647
- set state(val) {
3648
- this.state$ = val;
3649
- this.filter = this.getFilter();
3650
- this.changeDetector.detectChanges();
3638
+ createComponent(component, contentRef, injector, container) {
3639
+ const componentRef = this._componentFactoryResolver
3640
+ .resolveComponentFactory(component)
3641
+ .create(injector, contentRef.nodes);
3642
+ this._appRef.attachView(componentRef.hostView);
3643
+ container.appendChild(componentRef.location.nativeElement);
3644
+ return componentRef;
3651
3645
  }
3652
- get state() {
3653
- return this.state$;
3646
+ createContent(content, injector, context) {
3647
+ if (content === null || content === undefined) {
3648
+ throw new Error('Content is undefined');
3649
+ }
3650
+ if (typeof content === 'string') {
3651
+ return this.fromString(content);
3652
+ }
3653
+ else if (content instanceof TemplateRef) {
3654
+ return this.fromTemplate(content, context);
3655
+ }
3656
+ else {
3657
+ return this.fromComponent(content, injector, context);
3658
+ }
3654
3659
  }
3655
- ngOnInit() {
3656
- this.filter = this.getFilter();
3660
+ destroy(component, content, container) {
3661
+ if (component) {
3662
+ this._appRef.detachView(component.hostView);
3663
+ component.destroy();
3664
+ }
3665
+ if (content && content.viewRef) {
3666
+ content.viewRef.destroy();
3667
+ }
3668
+ content = null;
3657
3669
  }
3658
- getFilter() {
3659
- var _a;
3660
- let filter = (_a = this.state.numericFilters) === null || _a === void 0 ? void 0 : _a.find((f) => f.field === this.column.filterField);
3661
- if (filter === null || filter === undefined) {
3662
- filter = this.state.addNumericFilter(new NumericFilter({
3663
- value: new NumericFilterValue(),
3664
- field: this.column.filterField,
3665
- name: this.column.name,
3666
- strict: true,
3667
- }));
3670
+ getContext(content, context) {
3671
+ if (content instanceof TemplateRef) {
3672
+ return {
3673
+ $implicit: context,
3674
+ data: context,
3675
+ };
3668
3676
  }
3669
- return filter;
3677
+ return context;
3670
3678
  }
3671
- }
3672
- NumericFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: NumericFilterComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: TetaConfigService }], target: i0.ɵɵFactoryTarget.Component });
3673
- NumericFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: NumericFilterComponent, selector: "teta-numeric-filter", inputs: { column: "column", data: "data", filterOptions: "filterOptions", state: "state" }, outputs: { filterChanged: "filterChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-row padding-3\" *ngIf=\"locale | async as loc\">\n <teta-input [label]=\"loc.from\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [tetaOnlyNumber]=\"true\"\n [ngModel]=\"filter.value?.greaterThan\"\n (ngModelChange)=\"filter.value.greaterThan=$event\"/>\n </teta-input>\n <teta-input [label]=\"loc.to\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [tetaOnlyNumber]=\"true\"\n [ngModel]=\"filter.value?.lessThan\"\n (ngModelChange)=\"filter.value.lessThan=$event\"/>\n </teta-input>\n</div>\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: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "horizontal", "required"] }, { kind: "directive", type: OnlyNumberDirective, selector: "[tetaOnlyNumber]", inputs: ["tetaOnlyNumber", "allowDecimals", "allowSign", "decimalSeparator", "commaSeparator"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3674
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: NumericFilterComponent, decorators: [{
3675
- type: Component,
3676
- args: [{ selector: 'teta-numeric-filter', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-row padding-3\" *ngIf=\"locale | async as loc\">\n <teta-input [label]=\"loc.from\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [tetaOnlyNumber]=\"true\"\n [ngModel]=\"filter.value?.greaterThan\"\n (ngModelChange)=\"filter.value.greaterThan=$event\"/>\n </teta-input>\n <teta-input [label]=\"loc.to\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [tetaOnlyNumber]=\"true\"\n [ngModel]=\"filter.value?.lessThan\"\n (ngModelChange)=\"filter.value.lessThan=$event\"/>\n </teta-input>\n</div>\n" }]
3677
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: TetaConfigService }]; }, propDecorators: { column: [{
3678
- type: Input
3679
- }], data: [{
3680
- type: Input
3681
- }], filterOptions: [{
3682
- type: Input
3683
- }], filterChanged: [{
3684
- type: Output
3685
- }], state: [{
3686
- type: Input
3687
- }] } });
3688
-
3689
- var StringFilterType;
3690
- (function (StringFilterType) {
3691
- /**
3692
- * Строгое совпадение
3693
- */
3694
- StringFilterType[StringFilterType["Equals"] = 1] = "Equals";
3695
- /**
3696
- * Начинается с указанной подстроки
3697
- */
3698
- StringFilterType[StringFilterType["StartsWith"] = 2] = "StartsWith";
3699
- /**
3700
- * Оканчивается указанной подстрокой
3701
- */
3702
- StringFilterType[StringFilterType["EndsWith"] = 3] = "EndsWith";
3703
- /**
3704
- * Содержит указанную подстроку
3705
- */
3706
- StringFilterType[StringFilterType["Contains"] = 4] = "Contains";
3707
- })(StringFilterType || (StringFilterType = {}));
3708
-
3709
- class StringFilter extends FilterBase {
3710
- constructor(options) {
3711
- super(options);
3712
- if (options) {
3713
- this.value = options.value || this.value;
3714
- this.type = options.type || StringFilterType.Contains;
3679
+ getInjector(data, parent) {
3680
+ return Injector.create({
3681
+ providers: [
3682
+ {
3683
+ provide: DynamicData,
3684
+ useValue: data,
3685
+ },
3686
+ ],
3687
+ parent,
3688
+ });
3689
+ }
3690
+ fromString(content) {
3691
+ return new TetaContentRef([[this._renderer.createText(`${content}`)]]);
3692
+ }
3693
+ fromTemplate(content, context) {
3694
+ const viewRef = content.createEmbeddedView(context);
3695
+ this._appRef.attachView(viewRef);
3696
+ return new TetaContentRef([viewRef.rootNodes], viewRef);
3697
+ }
3698
+ fromComponent(content, injector, context) {
3699
+ const componentFactory = this._componentFactoryResolver.resolveComponentFactory(content);
3700
+ const componentRef = componentFactory.create(injector);
3701
+ for (const key in context) {
3702
+ if (context.hasOwnProperty(key)) {
3703
+ componentRef.instance[key] = context[key];
3704
+ }
3715
3705
  }
3706
+ const componentNativeEl = componentRef.location.nativeElement;
3707
+ this._appRef.attachView(componentRef.hostView);
3708
+ return new TetaContentRef([[componentNativeEl]], componentRef.hostView, componentRef);
3716
3709
  }
3717
3710
  }
3711
+ 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 });
3712
+ DynamicComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, providedIn: 'root' });
3713
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, decorators: [{
3714
+ type: Injectable,
3715
+ args: [{
3716
+ providedIn: 'root',
3717
+ }]
3718
+ }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.RendererFactory2 }, { type: i0.ApplicationRef }]; } });
3718
3719
 
3719
- class StringFilterComponent extends FilterComponentBase {
3720
- constructor(changeDetector, _config) {
3721
- super();
3722
- this.changeDetector = changeDetector;
3723
- this._config = _config;
3724
- this.filterOptions = [];
3725
- this.filterChanged = new EventEmitter();
3726
- this.locale = this._config.locale;
3720
+ class DynamicContentBaseDirective {
3721
+ constructor(_document, _elementRef, _service, _injector, _zone, _cdr) {
3722
+ this._document = _document;
3723
+ this._elementRef = _elementRef;
3724
+ this._service = _service;
3725
+ this._injector = _injector;
3726
+ this._zone = _zone;
3727
+ this._cdr = _cdr;
3728
+ this.align = Align.left;
3729
+ this.verticalAlign = VerticalAlign.bottom;
3730
+ this.openChange = new EventEmitter();
3731
+ this._alive = true;
3732
+ this._open = false;
3733
+ this._zone.onStable
3734
+ .pipe(takeWhile((_) => this._alive), filter((_) => this._open))
3735
+ .subscribe((_) => {
3736
+ this.setPosition();
3737
+ });
3727
3738
  }
3728
- set state(val) {
3729
- this.state$ = val;
3730
- this.filter = this.getFilter();
3731
- this.changeDetector.detectChanges();
3739
+ set open(open) {
3740
+ this._open = open;
3741
+ if (this._open) {
3742
+ this.createContentRef();
3743
+ }
3744
+ else {
3745
+ this.destroyContentRef();
3746
+ }
3732
3747
  }
3733
- get state() {
3734
- return this.state$;
3748
+ ngOnDestroy() {
3749
+ this._alive = false;
3750
+ this.destroyContentRef();
3735
3751
  }
3736
3752
  ngOnInit() {
3737
3753
  }
3738
- setFilter() {
3739
- this.filterChanged.emit(this.filter);
3740
- }
3741
- getFilter() {
3742
- let filter = this.state.stringFilters.find((f) => f.field === this.column.filterField);
3743
- if (!filter) {
3744
- filter = this.state.addStringFilter(new StringFilter({
3745
- value: '',
3746
- field: this.column.filterField,
3747
- type: this.column.stringFilterType,
3748
- name: this.column.name,
3749
- }));
3754
+ createContentRef(className) {
3755
+ if (!this._componentRef) {
3756
+ this._open = true;
3757
+ const injector = this._service.getInjector(this.data, this._injector);
3758
+ const context = this._service.getContext(this._dynamicContent, this.data);
3759
+ this._content = this._service.createContent(this._dynamicContent, this._injector, context);
3760
+ this._componentRef = this._service.createComponent(PopupContentComponent, this._content, injector, this.appendToBody ? this._document.body : this._elementRef.nativeElement);
3761
+ if (className) {
3762
+ this._componentRef.instance.addClass(className);
3763
+ }
3750
3764
  }
3751
- filter.type = this.column.stringFilterType;
3752
- return filter;
3765
+ return this._componentRef;
3753
3766
  }
3754
- }
3767
+ destroyContentRef() {
3768
+ this._open = false;
3769
+ this._service.destroy(this._componentRef, this._content, this.appendToBody ? this._document.body : this._elementRef.nativeElement);
3770
+ this._componentRef = null;
3771
+ }
3772
+ }
3773
+ DynamicContentBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicContentBaseDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
3774
+ 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 });
3775
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicContentBaseDirective, decorators: [{
3776
+ type: Directive
3777
+ }], ctorParameters: function () { return [{ type: undefined }, { type: i0.ElementRef }, { type: DynamicComponentService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
3778
+ type: Input
3779
+ }], className: [{
3780
+ type: Input
3781
+ }], align: [{
3782
+ type: Input
3783
+ }], verticalAlign: [{
3784
+ type: Input
3785
+ }], appendToBody: [{
3786
+ type: Input
3787
+ }], open: [{
3788
+ type: Input
3789
+ }], openChange: [{
3790
+ type: Output
3791
+ }] } });
3792
+
3793
+ class HintDirective extends DynamicContentBaseDirective {
3794
+ constructor(_document, _elementRef, _service, _injector, _zone, _cdr) {
3795
+ super(_document, _elementRef, _service, _injector, _zone, _cdr);
3796
+ this._document = _document;
3797
+ this._elementRef = _elementRef;
3798
+ this._service = _service;
3799
+ this._injector = _injector;
3800
+ this._zone = _zone;
3801
+ this._cdr = _cdr;
3802
+ this.align = Align.center;
3803
+ this.verticalAlign = VerticalAlign.top;
3804
+ this.delay = 300;
3805
+ this.overflownOnly = false;
3806
+ }
3807
+ get _dynamicContent() {
3808
+ return this.tetaHint;
3809
+ }
3810
+ mouseenter() {
3811
+ clearTimeout(this._timeout);
3812
+ this._timeout = setTimeout(() => {
3813
+ this.createHint();
3814
+ }, this.delay);
3815
+ }
3816
+ mouseleave() {
3817
+ clearTimeout(this._timeout);
3818
+ if (this._open && this._componentRef) {
3819
+ this._timeout = setTimeout(() => {
3820
+ this.destroyContentRef();
3821
+ }, this.delay);
3822
+ }
3823
+ }
3824
+ click(event) {
3825
+ if (this._open &&
3826
+ this._componentRef &&
3827
+ DomUtil.clickedInside(this._componentRef.location.nativeElement, event)) {
3828
+ event.stopPropagation();
3829
+ }
3830
+ }
3831
+ setPosition() {
3832
+ if (this._componentRef && this._open) {
3833
+ if (!this._componentRect) {
3834
+ this._componentRect =
3835
+ this._componentRef.location.nativeElement.getBoundingClientRect();
3836
+ }
3837
+ const position = PositionUtil.getPosition(this._elementRef.nativeElement.getBoundingClientRect(), this._componentRect, this.align, this.verticalAlign, 0, 4);
3838
+ PositionUtil.setElementPosition(this._componentRef.location.nativeElement, position);
3839
+ }
3840
+ }
3841
+ createHint() {
3842
+ if (!this._dynamicContent || (this.overflownOnly && !DomUtil.isOverflown(this._elementRef.nativeElement))) {
3843
+ return;
3844
+ }
3845
+ this._componentRef = this.createContentRef();
3846
+ this._componentRef.instance.className = [
3847
+ ...ArrayUtil.asArray(this.className),
3848
+ 'hint',
3849
+ ];
3850
+ }
3851
+ ngOnDestroy() {
3852
+ super.ngOnDestroy();
3853
+ }
3854
+ }
3855
+ 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 });
3856
+ 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 });
3857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintDirective, decorators: [{
3858
+ type: Directive,
3859
+ args: [{
3860
+ selector: '[tetaHint]',
3861
+ }]
3862
+ }], ctorParameters: function () {
3863
+ return [{ type: undefined, decorators: [{
3864
+ type: Inject,
3865
+ args: [DOCUMENT]
3866
+ }] }, { type: i0.ElementRef }, { type: DynamicComponentService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }];
3867
+ }, propDecorators: { tetaHint: [{
3868
+ type: Input
3869
+ }], align: [{
3870
+ type: Input
3871
+ }], verticalAlign: [{
3872
+ type: Input
3873
+ }], delay: [{
3874
+ type: Input
3875
+ }], overflownOnly: [{
3876
+ type: Input
3877
+ }], mouseenter: [{
3878
+ type: HostListener,
3879
+ args: ['mouseenter', ['$event']]
3880
+ }], mouseleave: [{
3881
+ type: HostListener,
3882
+ args: ['mouseleave', ['$event']]
3883
+ }], click: [{
3884
+ type: HostListener,
3885
+ args: ['click', ['$event']]
3886
+ }] } });
3887
+
3888
+ class InputComponent {
3889
+ constructor() {
3890
+ this.required = false;
3891
+ }
3892
+ get column() {
3893
+ return !this.horizontal;
3894
+ }
3895
+ ngOnInit() { }
3896
+ }
3897
+ InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3898
+ 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 });
3899
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputComponent, decorators: [{
3900
+ type: Component,
3901
+ 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"] }]
3902
+ }], ctorParameters: function () { return []; }, propDecorators: { label: [{
3903
+ type: Input
3904
+ }], horizontal: [{
3905
+ type: Input
3906
+ }, {
3907
+ type: HostBinding,
3908
+ args: ['class.row']
3909
+ }], required: [{
3910
+ type: Input
3911
+ }], column: [{
3912
+ type: HostBinding,
3913
+ args: ['class.column']
3914
+ }] } });
3915
+
3916
+ class NumericFilterComponent extends FilterComponentBase {
3917
+ constructor(changeDetector, _config) {
3918
+ super();
3919
+ this.changeDetector = changeDetector;
3920
+ this._config = _config;
3921
+ this.filterOptions = [];
3922
+ this.filterChanged = new EventEmitter();
3923
+ this.locale = this._config.locale;
3924
+ }
3925
+ set state(val) {
3926
+ this.state$ = val;
3927
+ this.filter = this.getFilter();
3928
+ this.changeDetector.detectChanges();
3929
+ }
3930
+ get state() {
3931
+ return this.state$;
3932
+ }
3933
+ ngOnInit() {
3934
+ this.filter = this.getFilter();
3935
+ }
3936
+ getFilter() {
3937
+ var _a;
3938
+ let filter = (_a = this.state.numericFilters) === null || _a === void 0 ? void 0 : _a.find((f) => f.field === this.column.filterField);
3939
+ if (filter === null || filter === undefined) {
3940
+ filter = this.state.addNumericFilter(new NumericFilter({
3941
+ value: new NumericFilterValue(),
3942
+ field: this.column.filterField,
3943
+ name: this.column.name,
3944
+ strict: true,
3945
+ }));
3946
+ }
3947
+ return filter;
3948
+ }
3949
+ }
3950
+ NumericFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: NumericFilterComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: TetaConfigService }], target: i0.ɵɵFactoryTarget.Component });
3951
+ NumericFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: NumericFilterComponent, selector: "teta-numeric-filter", inputs: { column: "column", data: "data", filterOptions: "filterOptions", state: "state" }, outputs: { filterChanged: "filterChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-row padding-3\" *ngIf=\"locale | async as loc\">\n <teta-input [label]=\"loc.from\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [tetaOnlyNumber]=\"true\"\n [ngModel]=\"filter.value?.greaterThan\"\n (ngModelChange)=\"filter.value.greaterThan=$event\"/>\n </teta-input>\n <teta-input [label]=\"loc.to\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [tetaOnlyNumber]=\"true\"\n [ngModel]=\"filter.value?.lessThan\"\n (ngModelChange)=\"filter.value.lessThan=$event\"/>\n </teta-input>\n</div>\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: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "horizontal", "required"] }, { kind: "directive", type: OnlyNumberDirective, selector: "[tetaOnlyNumber]", inputs: ["tetaOnlyNumber", "allowDecimals", "allowSign", "decimalSeparator", "commaSeparator"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3952
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: NumericFilterComponent, decorators: [{
3953
+ type: Component,
3954
+ args: [{ selector: 'teta-numeric-filter', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-row padding-3\" *ngIf=\"locale | async as loc\">\n <teta-input [label]=\"loc.from\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [tetaOnlyNumber]=\"true\"\n [ngModel]=\"filter.value?.greaterThan\"\n (ngModelChange)=\"filter.value.greaterThan=$event\"/>\n </teta-input>\n <teta-input [label]=\"loc.to\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [tetaOnlyNumber]=\"true\"\n [ngModel]=\"filter.value?.lessThan\"\n (ngModelChange)=\"filter.value.lessThan=$event\"/>\n </teta-input>\n</div>\n" }]
3955
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: TetaConfigService }]; }, propDecorators: { column: [{
3956
+ type: Input
3957
+ }], data: [{
3958
+ type: Input
3959
+ }], filterOptions: [{
3960
+ type: Input
3961
+ }], filterChanged: [{
3962
+ type: Output
3963
+ }], state: [{
3964
+ type: Input
3965
+ }] } });
3966
+
3967
+ var StringFilterType;
3968
+ (function (StringFilterType) {
3969
+ /**
3970
+ * Строгое совпадение
3971
+ */
3972
+ StringFilterType[StringFilterType["Equals"] = 1] = "Equals";
3973
+ /**
3974
+ * Начинается с указанной подстроки
3975
+ */
3976
+ StringFilterType[StringFilterType["StartsWith"] = 2] = "StartsWith";
3977
+ /**
3978
+ * Оканчивается указанной подстрокой
3979
+ */
3980
+ StringFilterType[StringFilterType["EndsWith"] = 3] = "EndsWith";
3981
+ /**
3982
+ * Содержит указанную подстроку
3983
+ */
3984
+ StringFilterType[StringFilterType["Contains"] = 4] = "Contains";
3985
+ })(StringFilterType || (StringFilterType = {}));
3986
+
3987
+ class StringFilter extends FilterBase {
3988
+ constructor(options) {
3989
+ super(options);
3990
+ if (options) {
3991
+ this.value = options.value || this.value;
3992
+ this.type = options.type || StringFilterType.Contains;
3993
+ }
3994
+ }
3995
+ }
3996
+
3997
+ class StringFilterComponent extends FilterComponentBase {
3998
+ constructor(changeDetector, _config) {
3999
+ super();
4000
+ this.changeDetector = changeDetector;
4001
+ this._config = _config;
4002
+ this.filterOptions = [];
4003
+ this.filterChanged = new EventEmitter();
4004
+ this.locale = this._config.locale;
4005
+ }
4006
+ set state(val) {
4007
+ this.state$ = val;
4008
+ this.filter = this.getFilter();
4009
+ this.changeDetector.detectChanges();
4010
+ }
4011
+ get state() {
4012
+ return this.state$;
4013
+ }
4014
+ ngOnInit() {
4015
+ }
4016
+ setFilter() {
4017
+ this.filterChanged.emit(this.filter);
4018
+ }
4019
+ getFilter() {
4020
+ let filter = this.state.stringFilters.find((f) => f.field === this.column.filterField);
4021
+ if (!filter) {
4022
+ filter = this.state.addStringFilter(new StringFilter({
4023
+ value: '',
4024
+ field: this.column.filterField,
4025
+ type: this.column.stringFilterType,
4026
+ name: this.column.name,
4027
+ }));
4028
+ }
4029
+ filter.type = this.column.stringFilterType;
4030
+ return filter;
4031
+ }
4032
+ }
3755
4033
  StringFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: StringFilterComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: TetaConfigService }], target: i0.ɵɵFactoryTarget.Component });
3756
4034
  StringFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: StringFilterComponent, selector: "teta-string-filter", inputs: { column: "column", data: "data", filterOptions: "filterOptions", state: "state" }, outputs: { filterChanged: "filterChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"padding-3\">\n <teta-input [label]=\"(locale | async)?.search\">\n <input type=\"text\" class=\"input\" [(ngModel)]=\"filter.value\" (blur)=\"setFilter()\" (keydown.enter)=\"setFilter()\" />\n </teta-input>\n</div>\n\n", styles: [""], dependencies: [{ 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: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "horizontal", "required"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3757
4035
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: StringFilterComponent, decorators: [{
@@ -4840,17 +5118,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
4840
5118
  args: ['class.form-group-title']
4841
5119
  }] } });
4842
5120
 
5121
+ class HintModule {
5122
+ }
5123
+ HintModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
5124
+ HintModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: HintModule, declarations: [HintDirective], imports: [CommonModule,
5125
+ DynamicComponentModule], exports: [HintDirective] });
5126
+ HintModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, imports: [CommonModule,
5127
+ DynamicComponentModule] });
5128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, decorators: [{
5129
+ type: NgModule,
5130
+ args: [{
5131
+ declarations: [HintDirective],
5132
+ exports: [HintDirective],
5133
+ imports: [
5134
+ CommonModule,
5135
+ DynamicComponentModule
5136
+ ]
5137
+ }]
5138
+ }] });
5139
+
4843
5140
  class InputModule {
4844
5141
  }
4845
5142
  InputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4846
- 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] });
4847
- InputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputModule, imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule] });
5143
+ 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] });
5144
+ InputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputModule, imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule, HintModule] });
4848
5145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: InputModule, decorators: [{
4849
5146
  type: NgModule,
4850
5147
  args: [{
4851
5148
  declarations: [InputComponent, TextFieldComponent, FormGroupTitleComponent],
4852
5149
  exports: [InputComponent, TextFieldComponent, FormGroupTitleComponent],
4853
- imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule],
5150
+ imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule, HintModule],
4854
5151
  }]
4855
5152
  }] });
4856
5153
 
@@ -5461,16 +5758,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
5461
5758
  class CurrentModal {
5462
5759
  }
5463
5760
 
5464
- class DynamicData {
5465
- constructor(value) {
5466
- for (const key in value) {
5467
- if (value.hasOwnProperty(key)) {
5468
- this[key] = value[key];
5469
- }
5470
- }
5471
- }
5472
- }
5473
-
5474
5761
  class DialogComponent {
5475
5762
  constructor(modal, data) {
5476
5763
  this.modal = modal;
@@ -5533,148 +5820,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
5533
5820
  CommonModule,
5534
5821
  ToolbarModule,
5535
5822
  ButtonModule,
5536
- TranslocoModule,
5537
- IconModule,
5538
- ],
5539
- providers: [
5540
- {
5541
- provide: TRANSLOCO_SCOPE,
5542
- useValue: { scope: 'common', alias: 'common' },
5543
- multi: true,
5544
- },
5545
- ],
5546
- }]
5547
- }] });
5548
-
5549
- class ModalInstance {
5550
- constructor(_window, _content) {
5551
- this._window = _window;
5552
- this._content = _content;
5553
- this._onClose = new Subject();
5554
- this.close = (event) => {
5555
- this._onClose.next(event);
5556
- this._onClose.complete();
5557
- this.destroy();
5558
- };
5559
- this.onClose = this._onClose.asObservable();
5560
- if (this._window && this._window.instance) {
5561
- this._window.instance.closeEvent.subscribe((event) => {
5562
- this.close(event);
5563
- });
5564
- }
5565
- }
5566
- get window() {
5567
- return this._window;
5568
- }
5569
- get component() {
5570
- return this._content.componentRef ? this._content.componentRef : null;
5571
- }
5572
- destroy() {
5573
- this._window.destroy();
5574
- if (this._content && this._content.viewRef) {
5575
- setTimeout(() => {
5576
- this._content.viewRef.destroy();
5577
- }, 150);
5578
- }
5579
- }
5580
- }
5581
-
5582
- class TetaContentRef {
5583
- constructor(nodes, viewRef, componentRef) {
5584
- this.nodes = nodes;
5585
- this.viewRef = viewRef;
5586
- this.componentRef = componentRef;
5587
- }
5588
- }
5589
-
5590
- class DynamicComponentService {
5591
- constructor(_componentFactoryResolver, _rendererFactory, _appRef) {
5592
- this._componentFactoryResolver = _componentFactoryResolver;
5593
- this._rendererFactory = _rendererFactory;
5594
- this._appRef = _appRef;
5595
- this._renderer = this._rendererFactory.createRenderer(null, null);
5596
- }
5597
- createComponent(component, contentRef, injector, container) {
5598
- const componentRef = this._componentFactoryResolver
5599
- .resolveComponentFactory(component)
5600
- .create(injector, contentRef.nodes);
5601
- this._appRef.attachView(componentRef.hostView);
5602
- container.appendChild(componentRef.location.nativeElement);
5603
- return componentRef;
5604
- }
5605
- createContent(content, injector, context) {
5606
- if (content === null || content === undefined) {
5607
- throw new Error('Content is undefined');
5608
- }
5609
- if (typeof content === 'string') {
5610
- return this.fromString(content);
5611
- }
5612
- else if (content instanceof TemplateRef) {
5613
- return this.fromTemplate(content, context);
5614
- }
5615
- else {
5616
- return this.fromComponent(content, injector, context);
5617
- }
5618
- }
5619
- destroy(component, content, container) {
5620
- if (component) {
5621
- this._appRef.detachView(component.hostView);
5622
- component.destroy();
5623
- }
5624
- if (content && content.viewRef) {
5625
- content.viewRef.destroy();
5626
- }
5627
- content = null;
5628
- }
5629
- getContext(content, context) {
5630
- if (content instanceof TemplateRef) {
5631
- return {
5632
- $implicit: context,
5633
- data: context,
5634
- };
5823
+ TranslocoModule,
5824
+ IconModule,
5825
+ ],
5826
+ providers: [
5827
+ {
5828
+ provide: TRANSLOCO_SCOPE,
5829
+ useValue: { scope: 'common', alias: 'common' },
5830
+ multi: true,
5831
+ },
5832
+ ],
5833
+ }]
5834
+ }] });
5835
+
5836
+ class ModalInstance {
5837
+ constructor(_window, _content) {
5838
+ this._window = _window;
5839
+ this._content = _content;
5840
+ this._onClose = new Subject();
5841
+ this.close = (event) => {
5842
+ this._onClose.next(event);
5843
+ this._onClose.complete();
5844
+ this.destroy();
5845
+ };
5846
+ this.onClose = this._onClose.asObservable();
5847
+ if (this._window && this._window.instance) {
5848
+ this._window.instance.closeEvent.subscribe((event) => {
5849
+ this.close(event);
5850
+ });
5635
5851
  }
5636
- return context;
5637
- }
5638
- getInjector(data, parent) {
5639
- return Injector.create({
5640
- providers: [
5641
- {
5642
- provide: DynamicData,
5643
- useValue: data,
5644
- },
5645
- ],
5646
- parent,
5647
- });
5648
5852
  }
5649
- fromString(content) {
5650
- return new TetaContentRef([[this._renderer.createText(`${content}`)]]);
5853
+ get window() {
5854
+ return this._window;
5651
5855
  }
5652
- fromTemplate(content, context) {
5653
- const viewRef = content.createEmbeddedView(context);
5654
- this._appRef.attachView(viewRef);
5655
- return new TetaContentRef([viewRef.rootNodes], viewRef);
5856
+ get component() {
5857
+ return this._content.componentRef ? this._content.componentRef : null;
5656
5858
  }
5657
- fromComponent(content, injector, context) {
5658
- const componentFactory = this._componentFactoryResolver.resolveComponentFactory(content);
5659
- const componentRef = componentFactory.create(injector);
5660
- for (const key in context) {
5661
- if (context.hasOwnProperty(key)) {
5662
- componentRef.instance[key] = context[key];
5663
- }
5859
+ destroy() {
5860
+ this._window.destroy();
5861
+ if (this._content && this._content.viewRef) {
5862
+ setTimeout(() => {
5863
+ this._content.viewRef.destroy();
5864
+ }, 150);
5664
5865
  }
5665
- const componentNativeEl = componentRef.location.nativeElement;
5666
- this._appRef.attachView(componentRef.hostView);
5667
- return new TetaContentRef([[componentNativeEl]], componentRef.hostView, componentRef);
5668
5866
  }
5669
5867
  }
5670
- 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 });
5671
- DynamicComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, providedIn: 'root' });
5672
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicComponentService, decorators: [{
5673
- type: Injectable,
5674
- args: [{
5675
- providedIn: 'root',
5676
- }]
5677
- }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.RendererFactory2 }, { type: i0.ApplicationRef }]; } });
5678
5868
 
5679
5869
  class ModalService {
5680
5870
  constructor(_document, _injector, _factory) {
@@ -6259,171 +6449,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
6259
6449
  args: ['click']
6260
6450
  }] } });
6261
6451
 
6262
- class DynamicContentBaseDirective {
6263
- constructor(_document, _elementRef, _service, _injector, _zone, _cdr) {
6264
- this._document = _document;
6265
- this._elementRef = _elementRef;
6266
- this._service = _service;
6267
- this._injector = _injector;
6268
- this._zone = _zone;
6269
- this._cdr = _cdr;
6270
- this.align = Align.left;
6271
- this.verticalAlign = VerticalAlign.bottom;
6272
- this.openChange = new EventEmitter();
6273
- this._alive = true;
6274
- this._open = false;
6275
- this._zone.onStable
6276
- .pipe(takeWhile((_) => this._alive), filter((_) => this._open))
6277
- .subscribe((_) => {
6278
- this.setPosition();
6279
- });
6280
- }
6281
- set open(open) {
6282
- this._open = open;
6283
- if (this._open) {
6284
- this.createContentRef();
6285
- }
6286
- else {
6287
- this.destroyContentRef();
6288
- }
6289
- }
6290
- ngOnDestroy() {
6291
- this._alive = false;
6292
- this.destroyContentRef();
6293
- }
6294
- ngOnInit() {
6295
- }
6296
- createContentRef(className) {
6297
- if (!this._componentRef) {
6298
- this._open = true;
6299
- const injector = this._service.getInjector(this.data, this._injector);
6300
- const context = this._service.getContext(this._dynamicContent, this.data);
6301
- this._content = this._service.createContent(this._dynamicContent, this._injector, context);
6302
- this._componentRef = this._service.createComponent(PopupContentComponent, this._content, injector, this.appendToBody ? this._document.body : this._elementRef.nativeElement);
6303
- if (className) {
6304
- this._componentRef.instance.addClass(className);
6305
- }
6306
- }
6307
- return this._componentRef;
6308
- }
6309
- destroyContentRef() {
6310
- this._open = false;
6311
- this._service.destroy(this._componentRef, this._content, this.appendToBody ? this._document.body : this._elementRef.nativeElement);
6312
- this._componentRef = null;
6313
- }
6314
- }
6315
- DynamicContentBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicContentBaseDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
6316
- 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 });
6317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DynamicContentBaseDirective, decorators: [{
6318
- type: Directive
6319
- }], ctorParameters: function () { return [{ type: undefined }, { type: i0.ElementRef }, { type: DynamicComponentService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
6320
- type: Input
6321
- }], className: [{
6322
- type: Input
6323
- }], align: [{
6324
- type: Input
6325
- }], verticalAlign: [{
6326
- type: Input
6327
- }], appendToBody: [{
6328
- type: Input
6329
- }], open: [{
6330
- type: Input
6331
- }], openChange: [{
6332
- type: Output
6333
- }] } });
6334
-
6335
- class HintDirective extends DynamicContentBaseDirective {
6336
- constructor(_document, _elementRef, _service, _injector, _zone, _cdr) {
6337
- super(_document, _elementRef, _service, _injector, _zone, _cdr);
6338
- this._document = _document;
6339
- this._elementRef = _elementRef;
6340
- this._service = _service;
6341
- this._injector = _injector;
6342
- this._zone = _zone;
6343
- this._cdr = _cdr;
6344
- this.align = Align.center;
6345
- this.verticalAlign = VerticalAlign.top;
6346
- this.delay = 300;
6347
- }
6348
- get _dynamicContent() {
6349
- return this.tetaHint;
6350
- }
6351
- mouseenter() {
6352
- clearTimeout(this._timeout);
6353
- this._timeout = setTimeout(() => {
6354
- this.createHint();
6355
- }, this.delay);
6356
- }
6357
- mouseleave() {
6358
- clearTimeout(this._timeout);
6359
- if (this._open && this._componentRef) {
6360
- this._timeout = setTimeout(() => {
6361
- this.destroyContentRef();
6362
- }, this.delay);
6363
- }
6364
- }
6365
- click(event) {
6366
- if (this._open &&
6367
- this._componentRef &&
6368
- DomUtil.clickedInside(this._componentRef.location.nativeElement, event)) {
6369
- event.stopPropagation();
6370
- }
6371
- }
6372
- setPosition() {
6373
- if (this._componentRef && this._open) {
6374
- if (!this._componentRect) {
6375
- this._componentRect =
6376
- this._componentRef.location.nativeElement.getBoundingClientRect();
6377
- }
6378
- const position = PositionUtil.getPosition(this._elementRef.nativeElement.getBoundingClientRect(), this._componentRect, this.align, this.verticalAlign, 0, 4);
6379
- PositionUtil.setElementPosition(this._componentRef.location.nativeElement, position);
6380
- }
6381
- }
6382
- createHint() {
6383
- if (!this._dynamicContent) {
6384
- return;
6385
- }
6386
- this._componentRef = this.createContentRef();
6387
- this._componentRef.instance.className = [
6388
- ...ArrayUtil.asArray(this.className),
6389
- 'hint',
6390
- ];
6391
- }
6392
- ngOnDestroy() {
6393
- super.ngOnDestroy();
6394
- }
6395
- }
6396
- 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 });
6397
- 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 });
6398
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintDirective, decorators: [{
6399
- type: Directive,
6400
- args: [{
6401
- selector: '[tetaHint]',
6402
- }]
6403
- }], ctorParameters: function () {
6404
- return [{ type: undefined, decorators: [{
6405
- type: Inject,
6406
- args: [DOCUMENT]
6407
- }] }, { type: i0.ElementRef }, { type: DynamicComponentService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }];
6408
- }, propDecorators: { tetaHint: [{
6409
- type: Input
6410
- }], align: [{
6411
- type: Input
6412
- }], verticalAlign: [{
6413
- type: Input
6414
- }], delay: [{
6415
- type: Input
6416
- }], mouseenter: [{
6417
- type: HostListener,
6418
- args: ['mouseenter', ['$event']]
6419
- }], mouseleave: [{
6420
- type: HostListener,
6421
- args: ['mouseleave', ['$event']]
6422
- }], click: [{
6423
- type: HostListener,
6424
- args: ['click', ['$event']]
6425
- }] } });
6426
-
6427
6452
  class PropertyGridItemComponent {
6428
6453
  constructor(_transloco) {
6429
6454
  this._transloco = _transloco;
@@ -6497,7 +6522,7 @@ class PropertyGridItemComponent {
6497
6522
  }
6498
6523
  }
6499
6524
  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 });
6500
- 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"] }] });
6525
+ 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"] }] });
6501
6526
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PropertyGridItemComponent, decorators: [{
6502
6527
  type: Component,
6503
6528
  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" }]
@@ -6695,25 +6720,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
6695
6720
  }]
6696
6721
  }] });
6697
6722
 
6698
- class HintModule {
6699
- }
6700
- HintModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6701
- HintModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.2", ngImport: i0, type: HintModule, declarations: [HintDirective], imports: [CommonModule,
6702
- DynamicComponentModule], exports: [HintDirective] });
6703
- HintModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, imports: [CommonModule,
6704
- DynamicComponentModule] });
6705
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: HintModule, decorators: [{
6706
- type: NgModule,
6707
- args: [{
6708
- declarations: [HintDirective],
6709
- exports: [HintDirective],
6710
- imports: [
6711
- CommonModule,
6712
- DynamicComponentModule
6713
- ]
6714
- }]
6715
- }] });
6716
-
6717
6723
  class PropertyGridModule {
6718
6724
  }
6719
6725
  PropertyGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PropertyGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -8217,7 +8223,7 @@ class DefaultHeadCellComponent extends HeadCellComponentBase {
8217
8223
  }
8218
8224
  }
8219
8225
  DefaultHeadCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DefaultHeadCellComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
8220
- 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 });
8226
+ 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 });
8221
8227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DefaultHeadCellComponent, decorators: [{
8222
8228
  type: Component,
8223
8229
  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"] }]
@@ -8399,10 +8405,10 @@ class TabsComponent {
8399
8405
  }
8400
8406
  }
8401
8407
  TabsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8402
- 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"] }] });
8408
+ 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"] }] });
8403
8409
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TabsComponent, decorators: [{
8404
8410
  type: Component,
8405
- 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" }]
8411
+ 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" }]
8406
8412
  }], ctorParameters: function () { return []; }, propDecorators: { classTabs: [{
8407
8413
  type: HostBinding,
8408
8414
  args: ['class.tabs']
@@ -9546,10 +9552,10 @@ class StringCellComponent extends CellComponentBase {
9546
9552
  }
9547
9553
  }
9548
9554
  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 });
9549
- 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 });
9555
+ 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 });
9550
9556
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: StringCellComponent, decorators: [{
9551
9557
  type: Component,
9552
- 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" }]
9558
+ 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" }]
9553
9559
  }], ctorParameters: function () { return [{ type: TableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { column: [{
9554
9560
  type: Input
9555
9561
  }], row: [{