ng-tailwind 4.2.29 → 4.3.30

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,16 +1,27 @@
1
- import { Injector } from '@angular/core';
1
+ import { AfterViewInit, ChangeDetectorRef, Injector, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
2
  import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
3
3
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
4
+ import { NgtFormComponent } from '../ngt-form/ngt-form.component';
5
+ import { NgtSectionComponent } from '../ngt-section/ngt-section.component';
4
6
  import * as i0 from "@angular/core";
5
- export declare class NgtActionComponent {
7
+ export declare class NgtActionComponent implements AfterViewInit, OnChanges, OnDestroy {
6
8
  private injector;
9
+ private changeDetector;
7
10
  private ngtStylizableDirective;
11
+ ngtForm: NgtFormComponent;
12
+ ngtSection: NgtSectionComponent;
8
13
  href: string;
9
14
  icon: string;
10
15
  ngtStyle: NgtStylizableService;
11
16
  isDisabled: boolean;
12
- constructor(injector: Injector, ngtStylizableDirective: NgtStylizableDirective);
17
+ private subscriptions;
18
+ constructor(injector: Injector, changeDetector: ChangeDetectorRef, ngtStylizableDirective: NgtStylizableDirective, ngtForm: NgtFormComponent, ngtSection: NgtSectionComponent);
19
+ ngAfterViewInit(): void;
20
+ ngOnChanges(changes: SimpleChanges): void;
21
+ ngOnDestroy(): void;
13
22
  onClick(event: Event): void;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<NgtActionComponent, [null, { optional: true; self: true; }]>;
23
+ private bindSubscriptions;
24
+ private destroySubscriptions;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtActionComponent, [null, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
15
26
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtActionComponent, "ngt-action", never, { "href": "href"; "icon": "icon"; "ngtStyle": "ngtStyle"; "isDisabled": "isDisabled"; }, {}, never, ["*", "*"], false, never>;
16
27
  }
@@ -1,11 +1,12 @@
1
- import { Injector, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
1
+ import { AfterViewInit, ChangeDetectorRef, Injector, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
2
2
  import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
3
3
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
4
4
  import { NgtFormComponent } from '../ngt-form/ngt-form.component';
5
5
  import * as i0 from "@angular/core";
6
- export declare class NgtButtonComponent implements OnChanges, OnDestroy {
7
- private ngtFormComponent;
6
+ export declare class NgtButtonComponent implements AfterViewInit, OnChanges, OnDestroy {
7
+ private changeDetector;
8
8
  private injector;
9
+ private ngtForm;
9
10
  private ngtStylizableDirective;
10
11
  link: boolean;
11
12
  href: string;
@@ -15,11 +16,13 @@ export declare class NgtButtonComponent implements OnChanges, OnDestroy {
15
16
  noSubmit: boolean;
16
17
  ngtStyle: NgtStylizableService;
17
18
  private subscriptions;
18
- constructor(ngtFormComponent: NgtFormComponent, injector: Injector, ngtStylizableDirective: NgtStylizableDirective);
19
+ constructor(changeDetector: ChangeDetectorRef, injector: Injector, ngtForm: NgtFormComponent, ngtStylizableDirective: NgtStylizableDirective);
19
20
  onClick(event: Event): void;
21
+ ngAfterViewInit(): void;
20
22
  ngOnChanges(changes: SimpleChanges): void;
21
23
  ngOnDestroy(): void;
24
+ private bindSubscriptions;
22
25
  private destroySubscriptions;
23
- static ɵfac: i0.ɵɵFactoryDeclaration<NgtButtonComponent, [{ optional: true; skipSelf: true; }, null, { optional: true; self: true; }]>;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtButtonComponent, [null, null, { optional: true; skipSelf: true; }, { optional: true; self: true; }]>;
24
27
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtButtonComponent, "ngt-button", never, { "link": "link"; "href": "href"; "type": "type"; "loading": "loading"; "isDisabled": "isDisabled"; "noSubmit": "noSubmit"; }, {}, never, ["*"], false, never>;
25
28
  }
@@ -1,16 +1,19 @@
1
- import { AfterViewInit, ElementRef, Injector, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';
1
+ import { AfterViewInit, ChangeDetectorRef, ElementRef, Injector, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';
2
2
  import { ControlContainer } from '@angular/forms';
3
3
  import { NgtBaseNgModel } from '../../base/ngt-base-ng-model';
4
4
  import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
5
5
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
6
6
  import { NgtFormComponent } from '../ngt-form/ngt-form.component';
7
+ import { NgtSectionComponent } from '../ngt-section/ngt-section.component';
7
8
  import * as i0 from "@angular/core";
8
- export declare class NgtCheckboxComponent extends NgtBaseNgModel implements AfterViewInit, OnDestroy {
9
+ export declare class NgtCheckboxComponent extends NgtBaseNgModel implements AfterViewInit, OnChanges, OnDestroy {
10
+ private changeDetector;
9
11
  private injector;
10
12
  formContainer: ControlContainer;
11
13
  private renderer;
12
14
  private ngtStylizableDirective;
13
- private ngtFormComponent;
15
+ private ngtForm;
16
+ ngtSection: NgtSectionComponent;
14
17
  element: ElementRef;
15
18
  label: string;
16
19
  shining: boolean;
@@ -24,8 +27,9 @@ export declare class NgtCheckboxComponent extends NgtBaseNgModel implements Afte
24
27
  helperAutoXReverse: boolean;
25
28
  ngtStyle: NgtStylizableService;
26
29
  private subscriptions;
27
- constructor(injector: Injector, formContainer: ControlContainer, renderer: Renderer2, ngtStylizableDirective: NgtStylizableDirective, ngtFormComponent: NgtFormComponent);
30
+ constructor(changeDetector: ChangeDetectorRef, injector: Injector, formContainer: ControlContainer, renderer: Renderer2, ngtStylizableDirective: NgtStylizableDirective, ngtForm: NgtFormComponent, ngtSection: NgtSectionComponent);
28
31
  ngAfterViewInit(): void;
32
+ ngOnChanges(changes: SimpleChanges): void;
29
33
  ngOnDestroy(): void;
30
34
  change(value: any): void;
31
35
  onNativeChange(value: any): void;
@@ -34,9 +38,9 @@ export declare class NgtCheckboxComponent extends NgtBaseNgModel implements Afte
34
38
  isSideToggleMode(): boolean;
35
39
  isDefaultMode(): boolean;
36
40
  isRadioMode(): boolean;
37
- ngOnChanges(changes: SimpleChanges): void;
41
+ private bindSubscriptions;
38
42
  private destroySubscriptions;
39
- static ɵfac: i0.ɵɵFactoryDeclaration<NgtCheckboxComponent, [null, { optional: true; host: true; }, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }]>;
43
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtCheckboxComponent, [null, null, { optional: true; host: true; }, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
40
44
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtCheckboxComponent, "ngt-checkbox", never, { "label": "label"; "shining": "shining"; "isDisabled": "isDisabled"; "isClickDisabled": "isClickDisabled"; "name": "name"; "mode": "mode"; "helpTitle": "helpTitle"; "helpTextColor": "helpTextColor"; "helpText": "helpText"; "helperAutoXReverse": "helperAutoXReverse"; }, {}, never, never, false, never>;
41
45
  }
42
46
  export declare enum NgtCheckboxMode {
@@ -1,10 +1,10 @@
1
- import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
1
+ import { EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
2
2
  import { ControlContainer, NgForm } from '@angular/forms';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { Observable } from 'rxjs';
5
5
  import { NgtHttpFormService } from '../../services/http/ngt-http-form.service';
6
6
  import * as i0 from "@angular/core";
7
- export declare class NgtFormComponent implements OnInit, OnDestroy {
7
+ export declare class NgtFormComponent implements OnInit, OnDestroy, OnChanges {
8
8
  formContainer: ControlContainer;
9
9
  ngForm: NgForm;
10
10
  router: Router;
@@ -15,11 +15,13 @@ export declare class NgtFormComponent implements OnInit, OnDestroy {
15
15
  routeIdentifier: string;
16
16
  resource: any;
17
17
  customLayout: boolean;
18
+ isDisabled: boolean;
18
19
  static onSubmitInvalidForm: EventEmitter<NgForm>;
19
20
  onCreating: EventEmitter<any>;
20
21
  onEditing: EventEmitter<any>;
21
22
  onLoadingChange: EventEmitter<boolean>;
22
23
  onShiningChange: EventEmitter<boolean>;
24
+ onIsDisabledChange: EventEmitter<boolean>;
23
25
  setupComponent: EventEmitter<any>;
24
26
  onResourceLoadingError: EventEmitter<string>;
25
27
  formState: NgtFormState;
@@ -29,6 +31,7 @@ export declare class NgtFormComponent implements OnInit, OnDestroy {
29
31
  private subscriptions;
30
32
  constructor(formContainer: ControlContainer, ngForm: NgForm, router: Router, route: ActivatedRoute, ngtHttpFormService: NgtHttpFormService);
31
33
  ngOnInit(): void;
34
+ ngOnChanges(changes: SimpleChanges): void;
32
35
  ngOnDestroy(): void;
33
36
  isCreating(): boolean;
34
37
  isEditing(): boolean;
@@ -47,7 +50,7 @@ export declare class NgtFormComponent implements OnInit, OnDestroy {
47
50
  private determineFormState;
48
51
  private destroySubscriptions;
49
52
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtFormComponent, [{ optional: true; host: true; }, { optional: true; host: true; }, null, null, null]>;
50
- static ɵcmp: i0.ɵɵComponentDeclaration<NgtFormComponent, "ngt-form", never, { "guessFormState": "guessFormState"; "message": "message"; "routeIdentifier": "routeIdentifier"; "resource": "resource"; "customLayout": "customLayout"; }, { "onCreating": "onCreating"; "onEditing": "onEditing"; "onLoadingChange": "onLoadingChange"; "onShiningChange": "onShiningChange"; "setupComponent": "setupComponent"; "onResourceLoadingError": "onResourceLoadingError"; }, never, ["*"], false, never>;
53
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtFormComponent, "ngt-form", never, { "guessFormState": "guessFormState"; "message": "message"; "routeIdentifier": "routeIdentifier"; "resource": "resource"; "customLayout": "customLayout"; "isDisabled": "isDisabled"; }, { "onCreating": "onCreating"; "onEditing": "onEditing"; "onLoadingChange": "onLoadingChange"; "onShiningChange": "onShiningChange"; "onIsDisabledChange": "onIsDisabledChange"; "setupComponent": "setupComponent"; "onResourceLoadingError": "onResourceLoadingError"; }, never, ["*"], false, never>;
51
54
  }
52
55
  export declare enum NgtFormState {
53
56
  CREATING = "CREATING",
@@ -1,17 +1,20 @@
1
- import { AfterViewInit, ElementRef, Injector, OnDestroy, Renderer2 } from '@angular/core';
1
+ import { AfterViewInit, ChangeDetectorRef, ElementRef, Injector, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';
2
2
  import { ControlContainer } from '@angular/forms';
3
3
  import { NgtBaseNgModel } from '../../base/ngt-base-ng-model';
4
4
  import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
5
5
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
6
6
  import { NgtFormComponent } from '../ngt-form/ngt-form.component';
7
+ import { NgtSectionComponent } from '../ngt-section/ngt-section.component';
7
8
  import { NgtRadioButtonContainerComponent } from './ngt-radio-button-container/ngt-radio-button-container.component';
8
9
  import * as i0 from "@angular/core";
9
- export declare class NgtRadioButtonComponent extends NgtBaseNgModel implements AfterViewInit, OnDestroy {
10
+ export declare class NgtRadioButtonComponent extends NgtBaseNgModel implements AfterViewInit, OnChanges, OnDestroy {
11
+ private changeDetector;
10
12
  private injector;
11
13
  formContainer: ControlContainer;
12
14
  private renderer;
13
15
  private ngtStylizableDirective;
14
- private ngtFormComponent;
16
+ private ngtForm;
17
+ ngtSection: NgtSectionComponent;
15
18
  private ngtRadioButtonContainer;
16
19
  element: ElementRef;
17
20
  label: string;
@@ -24,12 +27,14 @@ export declare class NgtRadioButtonComponent extends NgtBaseNgModel implements A
24
27
  helpText: string;
25
28
  ngtStyle: NgtStylizableService;
26
29
  private subscriptions;
27
- constructor(injector: Injector, formContainer: ControlContainer, renderer: Renderer2, ngtStylizableDirective: NgtStylizableDirective, ngtFormComponent: NgtFormComponent, ngtRadioButtonContainer: NgtRadioButtonContainerComponent);
30
+ constructor(changeDetector: ChangeDetectorRef, injector: Injector, formContainer: ControlContainer, renderer: Renderer2, ngtStylizableDirective: NgtStylizableDirective, ngtForm: NgtFormComponent, ngtSection: NgtSectionComponent, ngtRadioButtonContainer: NgtRadioButtonContainerComponent);
28
31
  ngAfterViewInit(): void;
32
+ ngOnChanges(changes: SimpleChanges): void;
29
33
  ngOnDestroy(): void;
30
34
  change(value: boolean): void;
31
35
  onNativeChange(value: boolean): void;
36
+ private bindSubscriptions;
32
37
  private destroySubscriptions;
33
- static ɵfac: i0.ɵɵFactoryDeclaration<NgtRadioButtonComponent, [null, { optional: true; host: true; }, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtRadioButtonComponent, [null, null, { optional: true; host: true; }, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
34
39
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtRadioButtonComponent, "ngt-radio-button", never, { "label": "label"; "name": "name"; "shining": "shining"; "isSelectable": "isSelectable"; "isDisabled": "isDisabled"; "helpTitle": "helpTitle"; "helpTextColor": "helpTextColor"; "helpText": "helpText"; }, {}, never, never, false, never>;
35
40
  }
@@ -1,8 +1,8 @@
1
- import { EventEmitter, Injector } from '@angular/core';
1
+ import { EventEmitter, Injector, OnChanges, SimpleChanges } from '@angular/core';
2
2
  import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
3
3
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
4
4
  import * as i0 from "@angular/core";
5
- export declare class NgtSectionComponent {
5
+ export declare class NgtSectionComponent implements OnChanges {
6
6
  private injector;
7
7
  private ngtStylizableDirective;
8
8
  icon: string;
@@ -14,16 +14,19 @@ export declare class NgtSectionComponent {
14
14
  helpTitle: string;
15
15
  helpText: string;
16
16
  helpIconColor: string;
17
+ isDisabled: boolean;
17
18
  onRemove: EventEmitter<void>;
18
19
  onToggleSection: EventEmitter<boolean>;
20
+ onIsDisabledChange: EventEmitter<boolean>;
19
21
  ngtSectionStyle: NgtStylizableService;
20
22
  ngtCaptionStyle: NgtStylizableService;
21
23
  ngtSubtitleStyle: NgtStylizableService;
22
24
  constructor(injector: Injector, ngtStylizableDirective: NgtStylizableDirective);
25
+ ngOnChanges(changes: SimpleChanges): void;
23
26
  open(): void;
24
27
  close(): void;
25
28
  toggle(): void;
26
29
  remove(event: Event): void;
27
30
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtSectionComponent, [null, { optional: true; self: true; }]>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<NgtSectionComponent, "ngt-section", never, { "icon": "icon"; "caption": "caption"; "subtitle": "subtitle"; "accordion": "accordion"; "showSection": "showSection"; "removable": "removable"; "helpTitle": "helpTitle"; "helpText": "helpText"; "helpIconColor": "helpIconColor"; }, { "onRemove": "onRemove"; "onToggleSection": "onToggleSection"; }, never, ["*"], false, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtSectionComponent, "ngt-section", never, { "icon": "icon"; "caption": "caption"; "subtitle": "subtitle"; "accordion": "accordion"; "showSection": "showSection"; "removable": "removable"; "helpTitle": "helpTitle"; "helpText": "helpText"; "helpIconColor": "helpIconColor"; "isDisabled": "isDisabled"; }, { "onRemove": "onRemove"; "onToggleSection": "onToggleSection"; "onIsDisabledChange": "onIsDisabledChange"; }, never, ["*"], false, never>;
29
32
  }
@@ -8,12 +8,14 @@ import { NgtHttpService } from '../../services/http/ngt-http.service';
8
8
  import { NgtTranslateService } from '../../services/http/ngt-translate.service';
9
9
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
10
10
  import { NgtFormComponent } from '../ngt-form/ngt-form.component';
11
+ import { NgtSectionComponent } from '../ngt-section/ngt-section.component';
11
12
  import * as i0 from "@angular/core";
12
13
  export declare class NgtSelectComponent extends NgtBaseNgModel implements OnChanges, OnDestroy, OnInit, DoCheck {
13
14
  ngtStylizableDirective: NgtStylizableDirective;
14
15
  private injector;
15
16
  formContainer: ControlContainer;
16
- ngtFormComponent: NgtFormComponent;
17
+ ngtForm: NgtFormComponent;
18
+ ngtSection: NgtSectionComponent;
17
19
  private ngtHttp;
18
20
  private changeDetector;
19
21
  ngtTranslateService: NgtTranslateService;
@@ -87,16 +89,16 @@ export declare class NgtSelectComponent extends NgtBaseNgModel implements OnChan
87
89
  private currentState;
88
90
  private searchTimeout;
89
91
  private hadFirstItemsLoad;
90
- constructor(ngtStylizableDirective: NgtStylizableDirective, injector: Injector, formContainer: ControlContainer, ngtFormComponent: NgtFormComponent, ngtHttp: NgtHttpService, changeDetector: ChangeDetectorRef, ngtTranslateService: NgtTranslateService);
92
+ constructor(ngtStylizableDirective: NgtStylizableDirective, injector: Injector, formContainer: ControlContainer, ngtForm: NgtFormComponent, ngtSection: NgtSectionComponent, ngtHttp: NgtHttpService, changeDetector: ChangeDetectorRef, ngtTranslateService: NgtTranslateService);
91
93
  compareWith: (a: any, b: any) => boolean;
92
94
  ngOnInit(): void;
93
95
  ngAfterViewInit(): void;
96
+ ngOnChanges(changes: SimpleChanges): void;
94
97
  ngDoCheck(): void;
95
98
  ngOnDestroy(): void;
96
99
  removeItem(event: Event, item: any): void;
97
100
  refresh(): void;
98
101
  reset(): void;
99
- ngOnChanges(changes: SimpleChanges): void;
100
102
  setFocus(): void;
101
103
  onClearSelect(): void;
102
104
  onRemoveSelectedItem(item: NgOption): void;
@@ -123,9 +125,10 @@ export declare class NgtSelectComponent extends NgtBaseNgModel implements OnChan
123
125
  private hadPreviousSelection;
124
126
  private isColoquentResource;
125
127
  private canLoadItems;
126
- private destroySubscriptions;
127
128
  private canAutoSelectUniqueOption;
128
- static ɵfac: i0.ɵɵFactoryDeclaration<NgtSelectComponent, [{ optional: true; self: true; }, null, { optional: true; host: true; }, { optional: true; skipSelf: true; }, null, null, { optional: true; }]>;
129
+ private bindSubscriptions;
130
+ private destroySubscriptions;
131
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtSelectComponent, [{ optional: true; self: true; }, null, { optional: true; host: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }, null, null, { optional: true; }]>;
129
132
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtSelectComponent, "ngt-select", never, { "label": "label"; "labelIcon": "labelIcon"; "labelIconColor": "labelIconColor"; "helpTitle": "helpTitle"; "helpText": "helpText"; "helpTextColor": "helpTextColor"; "shining": "shining"; "loading": "loading"; "loadingText": "loadingText"; "notFoundText": "notFoundText"; "dropdownPosition": "dropdownPosition"; "typeToSearchText": "typeToSearchText"; "clearAllTooltip": "clearAllTooltip"; "placeholder": "placeholder"; "createText": "createText"; "labelForId": "labelForId"; "dropdownPanelMinHeight": "dropdownPanelMinHeight"; "helperReverseYPosition": "helperReverseYPosition"; "helperAutoXReverse": "helperAutoXReverse"; "name": "name"; "autoLoad": "autoLoad"; "allowCreate": "allowCreate"; "allowOriginalItemsUnselect": "allowOriginalItemsUnselect"; "isDisabled": "isDisabled"; "isReadonly": "isReadonly"; "remoteResource": "remoteResource"; "hideSelected": "hideSelected"; "bindLabel": "bindLabel"; "bindValue": "bindValue"; "items": "items"; "inputAttrs": "inputAttrs"; "closeOnSelect": "closeOnSelect"; "clearable": "clearable"; "groupBy": "groupBy"; "maxSelectedItems": "maxSelectedItems"; "multiple": "multiple"; "searchable": "searchable"; "clearSearchOnAdd": "clearSearchOnAdd"; "virtualScroll": "virtualScroll"; "tabIndex": "tabIndex"; "typeahead": "typeahead"; "guessCompareWith": "guessCompareWith"; "autoSelectUniqueOption": "autoSelectUniqueOption"; "groupValue": "groupValue"; "trackBy": "trackBy"; "isRequired": "isRequired"; "compareWith": "compareWith"; }, { "onLoadRemoteResource": "onLoadRemoteResource"; "onClear": "onClear"; }, ["ngtOptionTemplate", "ngtOptionSelectedTemplate", "ngtSelectHeaderTemplate"], never, false, never>;
130
133
  }
131
134
  export declare enum NgtSelectDropdownPanelHeight {
@@ -1,14 +1,20 @@
1
- import { Component, Input, Optional, Self } from '@angular/core';
1
+ import { Component, Input, Optional, Self, SkipSelf, } from '@angular/core';
2
2
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../directives/ngt-stylizable/ngt-stylizable.directive";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/router";
7
- import * as i4 from "../ngt-svg/ngt-svg.component";
5
+ import * as i2 from "../ngt-form/ngt-form.component";
6
+ import * as i3 from "../ngt-section/ngt-section.component";
7
+ import * as i4 from "@angular/common";
8
+ import * as i5 from "@angular/router";
9
+ import * as i6 from "../ngt-svg/ngt-svg.component";
8
10
  export class NgtActionComponent {
9
- constructor(injector, ngtStylizableDirective) {
11
+ constructor(injector, changeDetector, ngtStylizableDirective, ngtForm, ngtSection) {
10
12
  this.injector = injector;
13
+ this.changeDetector = changeDetector;
11
14
  this.ngtStylizableDirective = ngtStylizableDirective;
15
+ this.ngtForm = ngtForm;
16
+ this.ngtSection = ngtSection;
17
+ this.subscriptions = [];
12
18
  if (this.ngtStylizableDirective) {
13
19
  this.ngtStyle = this.ngtStylizableDirective.getNgtStylizableService();
14
20
  }
@@ -27,21 +33,65 @@ export class NgtActionComponent {
27
33
  border: 'border-0',
28
34
  });
29
35
  }
36
+ ngAfterViewInit() {
37
+ this.bindSubscriptions();
38
+ }
39
+ ngOnChanges(changes) {
40
+ if (changes.isDisabled && !changes.isDisabled.currentValue) {
41
+ this.isDisabled = this.ngtForm?.isDisabled || this.ngtSection?.isDisabled;
42
+ }
43
+ }
44
+ ngOnDestroy() {
45
+ this.destroySubscriptions();
46
+ }
30
47
  onClick(event) {
31
48
  if (this.isDisabled) {
32
49
  event.stopPropagation();
33
50
  }
34
51
  }
52
+ bindSubscriptions() {
53
+ this.changeDetector.detectChanges();
54
+ if (!this.isDisabled) {
55
+ this.isDisabled = this.ngtForm?.isDisabled || this.ngtSection?.isDisabled;
56
+ }
57
+ if (this.ngtForm) {
58
+ this.subscriptions.push(this.ngtForm.onIsDisabledChange.subscribe((isDisabled) => {
59
+ if (!this.isDisabled) {
60
+ this.isDisabled = isDisabled || this.ngtSection?.isDisabled;
61
+ }
62
+ }));
63
+ }
64
+ if (this.ngtSection) {
65
+ this.subscriptions.push(this.ngtSection.onIsDisabledChange.subscribe((isDisabled) => {
66
+ if (!this.isDisabled) {
67
+ this.isDisabled = isDisabled || this.ngtForm?.isDisabled;
68
+ }
69
+ }));
70
+ }
71
+ this.changeDetector.detectChanges();
72
+ }
73
+ destroySubscriptions() {
74
+ this.subscriptions.forEach(subscription => subscription.unsubscribe());
75
+ this.subscriptions = [];
76
+ }
35
77
  }
36
- NgtActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtActionComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
37
- NgtActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtActionComponent, selector: "ngt-action", inputs: { href: "href", icon: "icon", ngtStyle: "ngtStyle", isDisabled: "isDisabled" }, ngImport: i0, template: "<a *ngIf=\"href\"\n [class]=\"isDisabled ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n [routerLink]=\"href\" (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\">\n </ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>\n\n<a *ngIf=\"!href\"\n [class]=\"isDisabled ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text', 'border', 'color.border']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\"></ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }] });
78
+ NgtActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtActionComponent, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.NgtFormComponent, optional: true, skipSelf: true }, { token: i3.NgtSectionComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
79
+ NgtActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtActionComponent, selector: "ngt-action", inputs: { href: "href", icon: "icon", ngtStyle: "ngtStyle", isDisabled: "isDisabled" }, usesOnChanges: true, ngImport: i0, template: "<a *ngIf=\"href\"\n [class]=\"isDisabled ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n [routerLink]=\"href\" (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\">\n </ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>\n\n<a *ngIf=\"!href\"\n [class]=\"isDisabled ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text', 'border', 'color.border']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\"></ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i6.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }] });
38
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtActionComponent, decorators: [{
39
81
  type: Component,
40
82
  args: [{ selector: 'ngt-action', template: "<a *ngIf=\"href\"\n [class]=\"isDisabled ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n [routerLink]=\"href\" (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\">\n </ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>\n\n<a *ngIf=\"!href\"\n [class]=\"isDisabled ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text', 'border', 'color.border']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\"></ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>\n" }]
41
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.NgtStylizableDirective, decorators: [{
83
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.NgtStylizableDirective, decorators: [{
42
84
  type: Self
43
85
  }, {
44
86
  type: Optional
87
+ }] }, { type: i2.NgtFormComponent, decorators: [{
88
+ type: Optional
89
+ }, {
90
+ type: SkipSelf
91
+ }] }, { type: i3.NgtSectionComponent, decorators: [{
92
+ type: Optional
93
+ }, {
94
+ type: SkipSelf
45
95
  }] }]; }, propDecorators: { href: [{
46
96
  type: Input
47
97
  }], icon: [{
@@ -51,4 +101,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
51
101
  }], isDisabled: [{
52
102
  type: Input
53
103
  }] } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWFjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtYWN0aW9uL25ndC1hY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWFjdGlvbi9uZ3QtYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVksS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7OztBQU01RixNQUFNLE9BQU8sa0JBQWtCO0lBTTNCLFlBQ1ksUUFBa0IsRUFDRSxzQkFBOEM7UUFEbEUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNFLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFFMUUsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUN6RTthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7U0FDOUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRTtZQUMzQyxDQUFDLEVBQUUsUUFBUTtZQUNYLENBQUMsRUFBRSxRQUFRO1lBQ1gsS0FBSyxFQUFFO2dCQUNILEVBQUUsRUFBRSxhQUFhO2dCQUNqQixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsTUFBTSxFQUFFLEVBQUU7YUFDYjtZQUNELElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFVBQVU7U0FDckIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFZO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDOzsrR0FqQ1Esa0JBQWtCO21HQUFsQixrQkFBa0IsMElDVC9CLG1uQ0F3QkE7MkZEZmEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNJLFlBQVk7OzBCQVdqQixJQUFJOzswQkFBSSxRQUFROzRDQVBMLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWFjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1hY3Rpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE5ndEFjdGlvbkNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgcHVibGljIGhyZWY6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgbmd0U3R5bGl6YWJsZURpcmVjdGl2ZTogTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSxcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RBY3Rpb24nLCB7XG4gICAgICAgICAgICBoOiAnaC1mdWxsJyxcbiAgICAgICAgICAgIHc6ICd3LWZ1bGwnLFxuICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICBiZzogJ2JnLWdyYXktNTAwJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiAndGV4dC13aGl0ZScsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC14bCcsXG4gICAgICAgICAgICBib3JkZXI6ICdib3JkZXItMCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxhICpuZ0lmPVwiaHJlZlwiXG4gICAgW2NsYXNzXT1cImlzRGlzYWJsZWQgPyAnYmxvY2sgcm91bmRlZC1mdWxsIGN1cnNvci1ub3QtYWxsb3dlZCB0ZXh0LWdyYXktNjAwIGJnLWdyYXktNDAwIGhvdmVyOmJnLWdyYXktNDAwIG9wYWNpdHktNTAnIDogJ2N1cnNvci1wb2ludGVyJ1wiXG4gICAgW3JvdXRlckxpbmtdPVwiaHJlZlwiIChjbGljayk9J29uQ2xpY2soJGV2ZW50KSc+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHt7IG5ndFN0eWxlLmNvbXBpbGUoWydoJywgJ3cnLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCcsICdweCcsICdweScsICdzaGFkb3cnLCAndGV4dCddKSB9fVwiPlxuICAgICAgICA8bmd0LXN2ZyBbc3JjXT1cImljb25cIiBjbGFzcz0nc2VsZi1jZW50ZXInICpuZ0lmPVwiaWNvblwiPlxuICAgICAgICA8L25ndC1zdmc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvYT5cblxuPGEgKm5nSWY9XCIhaHJlZlwiXG4gICAgW2NsYXNzXT1cImlzRGlzYWJsZWQgPyAnYmxvY2sgcm91bmRlZC1mdWxsIGN1cnNvci1ub3QtYWxsb3dlZCB0ZXh0LWdyYXktNjAwIGJnLWdyYXktNDAwIGhvdmVyOmJnLWdyYXktNDAwIG9wYWNpdHktNTAnIDogJ2N1cnNvci1wb2ludGVyJ1wiXG4gICAgKGNsaWNrKT0nb25DbGljaygkZXZlbnQpJz5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwge3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnLCAndycsICdjb2xvci5iZycsICdjb2xvci50ZXh0JywgJ3B4JywgJ3B5JywgJ3NoYWRvdycsICd0ZXh0JywgJ2JvcmRlcicsICdjb2xvci5ib3JkZXInXSkgfX1cIj5cbiAgICAgICAgPG5ndC1zdmcgW3NyY109XCJpY29uXCIgY2xhc3M9J3NlbGYtY2VudGVyJyAqbmdJZj1cImljb25cIj48L25ndC1zdmc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvYT5cbiJdfQ==
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWFjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtYWN0aW9uL25ndC1hY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWFjdGlvbi9uZ3QtYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsS0FBSyxFQUdMLFFBQVEsRUFDUixJQUFJLEVBRUosUUFBUSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7Ozs7OztBQVE1RixNQUFNLE9BQU8sa0JBQWtCO0lBUTNCLFlBQ1ksUUFBa0IsRUFDbEIsY0FBaUMsRUFFakMsc0JBQThDLEVBRS9DLE9BQXlCLEVBRXpCLFVBQStCO1FBUDlCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBRWpDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFFL0MsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFFekIsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFWbEMsa0JBQWEsR0FBd0IsRUFBRSxDQUFDO1FBWTVDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDekU7YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUU7WUFDM0MsQ0FB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bmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtZm9ybS9uZ3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0U2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL25ndC1zZWN0aW9uL25ndC1zZWN0aW9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWFjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1hY3Rpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE5ndEFjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBwdWJsaWMgaHJlZjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIG5ndFN0eWxlOiBOZ3RTdHlsaXphYmxlU2VydmljZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RTdHlsaXphYmxlRGlyZWN0aXZlOiBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwdWJsaWMgbmd0Rm9ybTogTmd0Rm9ybUNvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHVibGljIG5ndFNlY3Rpb246IE5ndFNlY3Rpb25Db21wb25lbnRcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RBY3Rpb24nLCB7XG4gICAgICAgICAgICBoOiAnaC1mdWxsJyxcbiAgICAgICAgICAgIHc6ICd3LWZ1bGwnLFxuICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICBiZzogJ2JnLWdyYXktNTAwJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiAndGV4dC13aGl0ZScsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC14bCcsXG4gICAgICAgICAgICBib3JkZXI6ICdib3JkZXItMCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmluZFN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5pc0Rpc2FibGVkICYmICFjaGFuZ2VzLmlzRGlzYWJsZWQuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0aGlzLm5ndEZvcm0/LmlzRGlzYWJsZWQgfHwgdGhpcy5uZ3RTZWN0aW9uPy5pc0Rpc2FibGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRoaXMubmd0Rm9ybT8uaXNEaXNhYmxlZCB8fCB0aGlzLm5ndFNlY3Rpb24/LmlzRGlzYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uZ3RGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEZvcm0ub25Jc0Rpc2FibGVkQ2hhbmdlLnN1YnNjcmliZSgoaXNEaXNhYmxlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZCB8fCB0aGlzLm5ndFNlY3Rpb24/LmlzRGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5ndFNlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMubmd0U2VjdGlvbi5vbklzRGlzYWJsZWRDaGFuZ2Uuc3Vic2NyaWJlKChpc0Rpc2FibGVkOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkIHx8IHRoaXMubmd0Rm9ybT8uaXNEaXNhYmxlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxufVxuIiwiPGEgKm5nSWY9XCJocmVmXCJcbiAgICBbY2xhc3NdPVwiaXNEaXNhYmxlZCA/ICdibG9jayByb3VuZGVkLWZ1bGwgY3Vyc29yLW5vdC1hbGxvd2VkIHRleHQtZ3JheS02MDAgYmctZ3JheS00MDAgaG92ZXI6YmctZ3JheS00MDAgb3BhY2l0eS01MCcgOiAnY3Vyc29yLXBvaW50ZXInXCJcbiAgICBbcm91dGVyTGlua109XCJocmVmXCIgKGNsaWNrKT0nb25DbGljaygkZXZlbnQpJz5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwge3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnLCAndycsICdjb2xvci5iZycsICdjb2xvci50ZXh0JywgJ3B4JywgJ3B5JywgJ3NoYWRvdycsICd0ZXh0J10pIH19XCI+XG4gICAgICAgIDxuZ3Qtc3ZnIFtzcmNdPVwiaWNvblwiIGNsYXNzPSdzZWxmLWNlbnRlcicgKm5nSWY9XCJpY29uXCI+XG4gICAgICAgIDwvbmd0LXN2Zz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGYtY2VudGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9hPlxuXG48YSAqbmdJZj1cIiFocmVmXCJcbiAgICBbY2xhc3NdPVwiaXNEaXNhYmxlZCA/ICdibG9jayByb3VuZGVkLWZ1bGwgY3Vyc29yLW5vdC1hbGxvd2VkIHRleHQtZ3JheS02MDAgYmctZ3JheS00MDAgaG92ZXI6YmctZ3JheS00MDAgb3BhY2l0eS01MCcgOiAnY3Vyc29yLXBvaW50ZXInXCJcbiAgICAoY2xpY2spPSdvbkNsaWNrKCRldmVudCknPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB7eyBuZ3RTdHlsZS5jb21waWxlKFsnaCcsICd3JywgJ2NvbG9yLmJnJywgJ2NvbG9yLnRleHQnLCAncHgnLCAncHknLCAnc2hhZG93JywgJ3RleHQnLCAnYm9yZGVyJywgJ2NvbG9yLmJvcmRlciddKSB9fVwiPlxuICAgICAgICA8bmd0LXN2ZyBbc3JjXT1cImljb25cIiBjbGFzcz0nc2VsZi1jZW50ZXInICpuZ0lmPVwiaWNvblwiPjwvbmd0LXN2Zz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGYtY2VudGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9hPlxuIl19