@porscheinformatik/clr-addons 12.5.0 → 12.6.0

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.
@@ -0,0 +1,9 @@
1
+ export interface ClrDatagridStatePersistenceModel {
2
+ pageSize: number;
3
+ columns: {
4
+ [key: string]: ClrColumnStatePersistenceModel;
5
+ };
6
+ }
7
+ export interface ClrColumnStatePersistenceModel {
8
+ hidden?: boolean;
9
+ }
@@ -2,3 +2,4 @@ export * from './column-hidden-state-persistence.directive';
2
2
  export * from './datagrid-field.directive';
3
3
  export * from './datagrid-state-persistence.module';
4
4
  export * from './state-persistence-key.directive';
5
+ export * from './datagrid-state-persistence-model.interface';
@@ -1,6 +1,10 @@
1
+ import { AfterContentInit } from '@angular/core';
2
+ import { ClrDatagridPagination } from '@clr/angular';
1
3
  import * as i0 from "@angular/core";
2
- export declare class StatePersistenceKeyDirective {
4
+ export declare class StatePersistenceKeyDirective implements AfterContentInit {
3
5
  clrStatePersistenceKey: string;
6
+ pagination: ClrDatagridPagination;
7
+ ngAfterContentInit(): void;
4
8
  static ɵfac: i0.ɵɵFactoryDeclaration<StatePersistenceKeyDirective, never>;
5
- static ɵdir: i0.ɵɵDirectiveDeclaration<StatePersistenceKeyDirective, "[clrStatePersistenceKey]", never, { "clrStatePersistenceKey": "clrStatePersistenceKey"; }, {}, never>;
9
+ static ɵdir: i0.ɵɵDirectiveDeclaration<StatePersistenceKeyDirective, "[clrStatePersistenceKey]", never, { "clrStatePersistenceKey": "clrStatePersistenceKey"; }, {}, ["pagination"]>;
6
10
  }
@@ -1,19 +1,24 @@
1
- import { AfterViewInit, ElementRef } from '@angular/core';
1
+ import { AfterContentInit, ElementRef, OnDestroy } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export declare class ClrDropdownOverflowDirective implements AfterViewInit {
3
+ export declare class ClrDropdownOverflowDirective implements AfterContentInit, OnDestroy {
4
4
  private elRef;
5
5
  clrDropdownMenuMaxHeight: string | number;
6
6
  clrDropdownMenuItemMinHeight: string | number;
7
+ private nestedDropdownChildren;
7
8
  readonly defaultItemMinHeightRem = 1.5;
8
9
  readonly marginBottomRem = 0.1;
10
+ private destroy$;
9
11
  constructor(elRef: ElementRef);
10
- ngAfterViewInit(): void;
11
- private calculateDropdownMenu;
12
+ ngAfterContentInit(): void;
13
+ ngOnDestroy(): void;
14
+ private applyDropdownOverflowStyles;
15
+ private removeDropdownOverflowStyles;
16
+ private getAllChildDropdownMenuItems;
12
17
  private getMenuMaxHeight;
13
18
  private getItemMinHeight;
14
19
  private convertToPixels;
15
20
  private convertRemToPixels;
16
21
  private convertVhToPixels;
17
22
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrDropdownOverflowDirective, never>;
18
- static ɵdir: i0.ɵɵDirectiveDeclaration<ClrDropdownOverflowDirective, "clr-dropdown-menu", never, { "clrDropdownMenuMaxHeight": "clrDropdownMenuMaxHeight"; "clrDropdownMenuItemMinHeight": "clrDropdownMenuItemMinHeight"; }, {}, never>;
23
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ClrDropdownOverflowDirective, "clr-dropdown-menu", never, { "clrDropdownMenuMaxHeight": "clrDropdownMenuMaxHeight"; "clrDropdownMenuItemMinHeight": "clrDropdownMenuItemMinHeight"; }, {}, ["nestedDropdownChildren"]>;
19
24
  }
@@ -29,10 +29,9 @@ export class ColumnHiddenStatePersistenceDirective {
29
29
  if (persistedGridStateJson !== null) {
30
30
  const persistedGridState = JSON.parse(persistedGridStateJson);
31
31
  /* read column state if existing */
32
- const persistedColumnState = persistedGridState[this.columnDirective.clrDgField];
33
- if (persistedColumnState) {
32
+ if (persistedGridState.columns && persistedGridState.columns[this.columnDirective.clrDgField]) {
34
33
  /* read column hidden state if existing */
35
- const persistedColumnHiddenState = persistedColumnState.hidden;
34
+ const persistedColumnHiddenState = persistedGridState.columns[this.columnDirective.clrDgField].hidden;
36
35
  if (persistedColumnHiddenState) {
37
36
  this.hideableColumnDirective.clrDgHidden = persistedColumnHiddenState === true;
38
37
  }
@@ -48,10 +47,13 @@ export class ColumnHiddenStatePersistenceDirective {
48
47
  persistedGridState = JSON.parse(persistedGridStateJson);
49
48
  }
50
49
  /* read column state if existing */
51
- let persistedColumnState = persistedGridState[this.columnDirective.clrDgField];
50
+ if (!persistedGridState.columns) {
51
+ persistedGridState.columns = {};
52
+ }
53
+ let persistedColumnState = persistedGridState.columns[this.columnDirective.clrDgField];
52
54
  if (!persistedColumnState) {
53
55
  persistedColumnState = {};
54
- persistedGridState[this.columnDirective.clrDgField] = persistedColumnState;
56
+ persistedGridState.columns[this.columnDirective.clrDgField] = persistedColumnState;
55
57
  }
56
58
  /* set column hidden state and persist in local storage */
57
59
  persistedColumnState.hidden = hidden;
@@ -71,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
71
73
  }] }, { type: i2.StatePersistenceKeyDirective, decorators: [{
72
74
  type: Optional
73
75
  }] }, { type: i3.ClrDatagrid }, { type: i3.ClrDatagridHideableColumn }]; } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhpZGRlbi1zdGF0ZS1wZXJzaXN0ZW5jZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS9jb2x1bW4taGlkZGVuLXN0YXRlLXBlcnNpc3RlbmNlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7OztBQVdqRixNQUFNLE9BQU8scUNBQXFDO0lBQ2hELFlBQ3NCLGVBQXVDLEVBQ3ZDLG1CQUFpRCxFQUM3RCxRQUFxQixFQUNyQix1QkFBa0Q7UUFIdEMsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBOEI7UUFDN0QsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQTJCO0lBQ3pELENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsc0JBQXNCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUU7WUFDeEYsd0RBQXdEO1lBQ3hELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV2QiwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLGlDQUFpQztRQUNqQyxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDckcsSUFBSSxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7WUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFrQixDQUFDO1lBRS9FLG1DQUFtQztZQUNuQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakYsSUFBSSxvQkFBb0IsRUFBRTtnQkFDeEIsMENBQTBDO2dCQUMxQyxNQUFNLDBCQUEwQixHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztnQkFDL0QsSUFBSSwwQkFBMEIsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsR0FBRywwQkFBMEIsS0FBSyxJQUFJLENBQUM7aUJBQ2hGO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsTUFBZTtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFO1lBQ3pDLGlDQUFpQztZQUNqQyxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDckcsSUFBSSxrQkFBa0IsR0FBRyxFQUFtQixDQUFDO1lBQzdDLElBQUksc0JBQXNCLEtBQUssSUFBSSxFQUFFO2dCQUNuQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFrQixDQUFDO2FBQzFFO1lBRUQsbUNBQW1DO1lBQ25DLElBQUksb0JBQW9CLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3pCLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztnQkFDMUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxvQkFBb0IsQ0FBQzthQUM1RTtZQUVELDBEQUEwRDtZQUMxRCxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1NBQzNHO0lBQ0gsQ0FBQzs7a0lBMURVLHFDQUFxQztzSEFBckMscUNBQXFDOzJGQUFyQyxxQ0FBcUM7a0JBSGpELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtpQkFDbEM7OzBCQUdJLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFncmlkRmllbGREaXJlY3RpdmUgfSBmcm9tICcuL2RhdGFncmlkLWZpZWxkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDbHJEYXRhZ3JpZCwgQ2xyRGF0YWdyaWRIaWRlYWJsZUNvbHVtbiB9IGZyb20gJ0BjbHIvYW5ndWxhcic7XG5pbXBvcnQgeyBTdGF0ZVBlcnNpc3RlbmNlS2V5RGlyZWN0aXZlIH0gZnJvbSAnLi9zdGF0ZS1wZXJzaXN0ZW5jZS1rZXkuZGlyZWN0aXZlJztcblxudHlwZSBEYXRhZ3JpZFN0YXRlID0geyBba2V5OiBzdHJpbmddOiBDb2x1bW5TdGF0ZSB9O1xuXG5pbnRlcmZhY2UgQ29sdW1uU3RhdGUge1xuICBoaWRkZW4/OiBib29sZWFuO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY2xyRGdIaWRlYWJsZUNvbHVtbl0nLFxufSlcbmV4cG9ydCBjbGFzcyBDb2x1bW5IaWRkZW5TdGF0ZVBlcnNpc3RlbmNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb2x1bW5EaXJlY3RpdmU6IERhdGFncmlkRmllbGREaXJlY3RpdmUsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlS2V5OiBTdGF0ZVBlcnNpc3RlbmNlS2V5RGlyZWN0aXZlLFxuICAgIHByaXZhdGUgZGF0YWdyaWQ6IENsckRhdGFncmlkLFxuICAgIHByaXZhdGUgaGlkZWFibGVDb2x1bW5EaXJlY3RpdmU6IENsckRhdGFncmlkSGlkZWFibGVDb2x1bW5cbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlUGVyc2lzdGVuY2VLZXk/LmNsclN0YXRlUGVyc2lzdGVuY2VLZXkgJiYgdGhpcy5jb2x1bW5EaXJlY3RpdmU/LmNsckRnRmllbGQpIHtcbiAgICAgIC8qIHNldCBoaWRkZW4gc3RhdGVzIGZyb20gbG9jYWwgc3RvcmFnZSAoaWYgZXhpc3RpbmcpICovXG4gICAgICB0aGlzLmluaXRIaWRkZW5TdGF0ZSgpO1xuXG4gICAgICAvKiBsaXN0ZW4gdG8gc3RhdGUgY2hhbmdlcyBhbmQgcGVyc2lzdCBpbiBsb2NhbCBzdG9yYWdlICovXG4gICAgICB0aGlzLmhpZGVhYmxlQ29sdW1uRGlyZWN0aXZlLmhpZGRlbkNoYW5nZS5zdWJzY3JpYmUoaGlkZGVuID0+IHtcbiAgICAgICAgdGhpcy5zZXRIaWRkZW5TdGF0ZShoaWRkZW4pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0SGlkZGVuU3RhdGUoKSB7XG4gICAgLyogcmVhZCBncmlkIHN0YXRlIGlmIGV4aXN0aW5nICovXG4gICAgY29uc3QgcGVyc2lzdGVkR3JpZFN0YXRlSnNvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RhdGVQZXJzaXN0ZW5jZUtleS5jbHJTdGF0ZVBlcnNpc3RlbmNlS2V5KTtcbiAgICBpZiAocGVyc2lzdGVkR3JpZFN0YXRlSnNvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcGVyc2lzdGVkR3JpZFN0YXRlID0gSlNPTi5wYXJzZShwZXJzaXN0ZWRHcmlkU3RhdGVKc29uKSBhcyBEYXRhZ3JpZFN0YXRlO1xuXG4gICAgICAvKiByZWFkIGNvbHVtbiBzdGF0ZSBpZiBleGlzdGluZyAqL1xuICAgICAgY29uc3QgcGVyc2lzdGVkQ29sdW1uU3RhdGUgPSBwZXJzaXN0ZWRHcmlkU3RhdGVbdGhpcy5jb2x1bW5EaXJlY3RpdmUuY2xyRGdGaWVsZF07XG4gICAgICBpZiAocGVyc2lzdGVkQ29sdW1uU3RhdGUpIHtcbiAgICAgICAgLyogcmVhZCBjb2x1bW4gaGlkZGVuIHN0YXRlIGlmIGV4aXN0aW5nICovXG4gICAgICAgIGNvbnN0IHBlcnNpc3RlZENvbHVtbkhpZGRlblN0YXRlID0gcGVyc2lzdGVkQ29sdW1uU3RhdGUuaGlkZGVuO1xuICAgICAgICBpZiAocGVyc2lzdGVkQ29sdW1uSGlkZGVuU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLmhpZGVhYmxlQ29sdW1uRGlyZWN0aXZlLmNsckRnSGlkZGVuID0gcGVyc2lzdGVkQ29sdW1uSGlkZGVuU3RhdGUgPT09IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEhpZGRlblN0YXRlKGhpZGRlbjogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5kYXRhZ3JpZD8uZGV0YWlsU2VydmljZT8uaXNPcGVuKSB7XG4gICAgICAvKiByZWFkIGdyaWQgc3RhdGUgaWYgZXhpc3RpbmcgKi9cbiAgICAgIGNvbnN0IHBlcnNpc3RlZEdyaWRTdGF0ZUpzb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0YXRlUGVyc2lzdGVuY2VLZXkuY2xyU3RhdGVQZXJzaXN0ZW5jZUtleSk7XG4gICAgICBsZXQgcGVyc2lzdGVkR3JpZFN0YXRlID0ge30gYXMgRGF0YWdyaWRTdGF0ZTtcbiAgICAgIGlmIChwZXJzaXN0ZWRHcmlkU3RhdGVKc29uICE9PSBudWxsKSB7XG4gICAgICAgIHBlcnNpc3RlZEdyaWRTdGF0ZSA9IEpTT04ucGFyc2UocGVyc2lzdGVkR3JpZFN0YXRlSnNvbikgYXMgRGF0YWdyaWRTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgLyogcmVhZCBjb2x1bW4gc3RhdGUgaWYgZXhpc3RpbmcgKi9cbiAgICAgIGxldCBwZXJzaXN0ZWRDb2x1bW5TdGF0ZSA9IHBlcnNpc3RlZEdyaWRTdGF0ZVt0aGlzLmNvbHVtbkRpcmVjdGl2ZS5jbHJEZ0ZpZWxkXTtcbiAgICAgIGlmICghcGVyc2lzdGVkQ29sdW1uU3RhdGUpIHtcbiAgICAgICAgcGVyc2lzdGVkQ29sdW1uU3RhdGUgPSB7fTtcbiAgICAgICAgcGVyc2lzdGVkR3JpZFN0YXRlW3RoaXMuY29sdW1uRGlyZWN0aXZlLmNsckRnRmllbGRdID0gcGVyc2lzdGVkQ29sdW1uU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIC8qIHNldCBjb2x1bW4gaGlkZGVuIHN0YXRlIGFuZCBwZXJzaXN0IGluIGxvY2FsIHN0b3JhZ2UgKi9cbiAgICAgIHBlcnNpc3RlZENvbHVtblN0YXRlLmhpZGRlbiA9IGhpZGRlbjtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RhdGVQZXJzaXN0ZW5jZUtleS5jbHJTdGF0ZVBlcnNpc3RlbmNlS2V5LCBKU09OLnN0cmluZ2lmeShwZXJzaXN0ZWRHcmlkU3RhdGUpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhpZGRlbi1zdGF0ZS1wZXJzaXN0ZW5jZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS9jb2x1bW4taGlkZGVuLXN0YXRlLXBlcnNpc3RlbmNlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7OztBQU1qRixNQUFNLE9BQU8scUNBQXFDO0lBQ2hELFlBQ3NCLGVBQXVDLEVBQ3ZDLG1CQUFpRCxFQUM3RCxRQUFxQixFQUNyQix1QkFBa0Q7UUFIdEMsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBOEI7UUFDN0QsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQTJCO0lBQ3pELENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsc0JBQXNCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUU7WUFDeEYsd0RBQXdEO1lBQ3hELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV2QiwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLGlDQUFpQztRQUNqQyxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDckcsSUFBSSxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7WUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFxQyxDQUFDO1lBRWxHLG1DQUFtQztZQUNuQyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDN0YsMENBQTBDO2dCQUMxQyxNQUFNLDBCQUEwQixHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDdEcsSUFBSSwwQkFBMEIsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsR0FBRywwQkFBMEIsS0FBSyxJQUFJLENBQUM7aUJBQ2hGO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsTUFBZTtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFO1lBQ3pDLGlDQUFpQztZQUNqQyxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDckcsSUFBSSxrQkFBa0IsR0FBRyxFQUFzQyxDQUFDO1lBQ2hFLElBQUksc0JBQXNCLEtBQUssSUFBSSxFQUFFO2dCQUNuQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFxQyxDQUFDO2FBQzdGO1lBRUQsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQy9CLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7YUFDakM7WUFDRCxJQUFJLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDekIsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxvQkFBb0IsQ0FBQzthQUNwRjtZQUVELDBEQUEwRDtZQUMxRCxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1NBQzNHO0lBQ0gsQ0FBQzs7a0lBNURVLHFDQUFxQztzSEFBckMscUNBQXFDOzJGQUFyQyxxQ0FBcUM7a0JBSGpELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtpQkFDbEM7OzBCQUdJLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFncmlkRmllbGREaXJlY3RpdmUgfSBmcm9tICcuL2RhdGFncmlkLWZpZWxkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDbHJEYXRhZ3JpZCwgQ2xyRGF0YWdyaWRIaWRlYWJsZUNvbHVtbiB9IGZyb20gJ0BjbHIvYW5ndWxhcic7XG5pbXBvcnQgeyBTdGF0ZVBlcnNpc3RlbmNlS2V5RGlyZWN0aXZlIH0gZnJvbSAnLi9zdGF0ZS1wZXJzaXN0ZW5jZS1rZXkuZGlyZWN0aXZlJztcbmltcG9ydCB7IENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIH0gZnJvbSAnLi9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS1tb2RlbC5pbnRlcmZhY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY2xyRGdIaWRlYWJsZUNvbHVtbl0nLFxufSlcbmV4cG9ydCBjbGFzcyBDb2x1bW5IaWRkZW5TdGF0ZVBlcnNpc3RlbmNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb2x1bW5EaXJlY3RpdmU6IERhdGFncmlkRmllbGREaXJlY3RpdmUsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlS2V5OiBTdGF0ZVBlcnNpc3RlbmNlS2V5RGlyZWN0aXZlLFxuICAgIHByaXZhdGUgZGF0YWdyaWQ6IENsckRhdGFncmlkLFxuICAgIHByaXZhdGUgaGlkZWFibGVDb2x1bW5EaXJlY3RpdmU6IENsckRhdGFncmlkSGlkZWFibGVDb2x1bW5cbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlUGVyc2lzdGVuY2VLZXk/LmNsclN0YXRlUGVyc2lzdGVuY2VLZXkgJiYgdGhpcy5jb2x1bW5EaXJlY3RpdmU/LmNsckRnRmllbGQpIHtcbiAgICAgIC8qIHNldCBoaWRkZW4gc3RhdGVzIGZyb20gbG9jYWwgc3RvcmFnZSAoaWYgZXhpc3RpbmcpICovXG4gICAgICB0aGlzLmluaXRIaWRkZW5TdGF0ZSgpO1xuXG4gICAgICAvKiBsaXN0ZW4gdG8gc3RhdGUgY2hhbmdlcyBhbmQgcGVyc2lzdCBpbiBsb2NhbCBzdG9yYWdlICovXG4gICAgICB0aGlzLmhpZGVhYmxlQ29sdW1uRGlyZWN0aXZlLmhpZGRlbkNoYW5nZS5zdWJzY3JpYmUoaGlkZGVuID0+IHtcbiAgICAgICAgdGhpcy5zZXRIaWRkZW5TdGF0ZShoaWRkZW4pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0SGlkZGVuU3RhdGUoKSB7XG4gICAgLyogcmVhZCBncmlkIHN0YXRlIGlmIGV4aXN0aW5nICovXG4gICAgY29uc3QgcGVyc2lzdGVkR3JpZFN0YXRlSnNvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RhdGVQZXJzaXN0ZW5jZUtleS5jbHJTdGF0ZVBlcnNpc3RlbmNlS2V5KTtcbiAgICBpZiAocGVyc2lzdGVkR3JpZFN0YXRlSnNvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcGVyc2lzdGVkR3JpZFN0YXRlID0gSlNPTi5wYXJzZShwZXJzaXN0ZWRHcmlkU3RhdGVKc29uKSBhcyBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbDtcblxuICAgICAgLyogcmVhZCBjb2x1bW4gc3RhdGUgaWYgZXhpc3RpbmcgKi9cbiAgICAgIGlmIChwZXJzaXN0ZWRHcmlkU3RhdGUuY29sdW1ucyAmJiBwZXJzaXN0ZWRHcmlkU3RhdGUuY29sdW1uc1t0aGlzLmNvbHVtbkRpcmVjdGl2ZS5jbHJEZ0ZpZWxkXSkge1xuICAgICAgICAvKiByZWFkIGNvbHVtbiBoaWRkZW4gc3RhdGUgaWYgZXhpc3RpbmcgKi9cbiAgICAgICAgY29uc3QgcGVyc2lzdGVkQ29sdW1uSGlkZGVuU3RhdGUgPSBwZXJzaXN0ZWRHcmlkU3RhdGUuY29sdW1uc1t0aGlzLmNvbHVtbkRpcmVjdGl2ZS5jbHJEZ0ZpZWxkXS5oaWRkZW47XG4gICAgICAgIGlmIChwZXJzaXN0ZWRDb2x1bW5IaWRkZW5TdGF0ZSkge1xuICAgICAgICAgIHRoaXMuaGlkZWFibGVDb2x1bW5EaXJlY3RpdmUuY2xyRGdIaWRkZW4gPSBwZXJzaXN0ZWRDb2x1bW5IaWRkZW5TdGF0ZSA9PT0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0SGlkZGVuU3RhdGUoaGlkZGVuOiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmRhdGFncmlkPy5kZXRhaWxTZXJ2aWNlPy5pc09wZW4pIHtcbiAgICAgIC8qIHJlYWQgZ3JpZCBzdGF0ZSBpZiBleGlzdGluZyAqL1xuICAgICAgY29uc3QgcGVyc2lzdGVkR3JpZFN0YXRlSnNvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RhdGVQZXJzaXN0ZW5jZUtleS5jbHJTdGF0ZVBlcnNpc3RlbmNlS2V5KTtcbiAgICAgIGxldCBwZXJzaXN0ZWRHcmlkU3RhdGUgPSB7fSBhcyBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbDtcbiAgICAgIGlmIChwZXJzaXN0ZWRHcmlkU3RhdGVKc29uICE9PSBudWxsKSB7XG4gICAgICAgIHBlcnNpc3RlZEdyaWRTdGF0ZSA9IEpTT04ucGFyc2UocGVyc2lzdGVkR3JpZFN0YXRlSnNvbikgYXMgQ2xyRGF0YWdyaWRTdGF0ZVBlcnNpc3RlbmNlTW9kZWw7XG4gICAgICB9XG5cbiAgICAgIC8qIHJlYWQgY29sdW1uIHN0YXRlIGlmIGV4aXN0aW5nICovXG4gICAgICBpZiAoIXBlcnNpc3RlZEdyaWRTdGF0ZS5jb2x1bW5zKSB7XG4gICAgICAgIHBlcnNpc3RlZEdyaWRTdGF0ZS5jb2x1bW5zID0ge307XG4gICAgICB9XG4gICAgICBsZXQgcGVyc2lzdGVkQ29sdW1uU3RhdGUgPSBwZXJzaXN0ZWRHcmlkU3RhdGUuY29sdW1uc1t0aGlzLmNvbHVtbkRpcmVjdGl2ZS5jbHJEZ0ZpZWxkXTtcbiAgICAgIGlmICghcGVyc2lzdGVkQ29sdW1uU3RhdGUpIHtcbiAgICAgICAgcGVyc2lzdGVkQ29sdW1uU3RhdGUgPSB7fTtcbiAgICAgICAgcGVyc2lzdGVkR3JpZFN0YXRlLmNvbHVtbnNbdGhpcy5jb2x1bW5EaXJlY3RpdmUuY2xyRGdGaWVsZF0gPSBwZXJzaXN0ZWRDb2x1bW5TdGF0ZTtcbiAgICAgIH1cblxuICAgICAgLyogc2V0IGNvbHVtbiBoaWRkZW4gc3RhdGUgYW5kIHBlcnNpc3QgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgICAgcGVyc2lzdGVkQ29sdW1uU3RhdGUuaGlkZGVuID0gaGlkZGVuO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdGF0ZVBlcnNpc3RlbmNlS2V5LmNsclN0YXRlUGVyc2lzdGVuY2VLZXksIEpTT04uc3RyaW5naWZ5KHBlcnNpc3RlZEdyaWRTdGF0ZSkpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UtbW9kZWwuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UvZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UtbW9kZWwuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsIHtcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBDbHJDb2x1bW5TdGF0ZVBlcnNpc3RlbmNlTW9kZWwgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbHJDb2x1bW5TdGF0ZVBlcnNpc3RlbmNlTW9kZWwge1xuICBoaWRkZW4/OiBib29sZWFuO1xufVxuIl19
@@ -2,4 +2,5 @@ export * from './column-hidden-state-persistence.directive';
2
2
  export * from './datagrid-field.directive';
3
3
  export * from './datagrid-state-persistence.module';
4
4
  export * from './state-persistence-key.directive';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb2x1bW4taGlkZGVuLXN0YXRlLXBlcnNpc3RlbmNlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGFncmlkLWZpZWxkLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXRlLXBlcnNpc3RlbmNlLWtleS5kaXJlY3RpdmUnO1xuIl19
5
+ export * from './datagrid-state-persistence-model.interface';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRhZ3JpZC1zdGF0ZS1wZXJzaXN0ZW5jZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsOENBQThDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbHVtbi1oaWRkZW4tc3RhdGUtcGVyc2lzdGVuY2UuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YWdyaWQtZmllbGQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YWdyaWQtc3RhdGUtcGVyc2lzdGVuY2UubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUtcGVyc2lzdGVuY2Uta2V5LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlLW1vZGVsLmludGVyZmFjZSc7XG4iXX0=
@@ -1,9 +1,29 @@
1
- import { Directive, Input } from '@angular/core';
1
+ import { ContentChild, Directive, Input } from '@angular/core';
2
+ import { ClrDatagridPagination } from '@clr/angular';
2
3
  import * as i0 from "@angular/core";
3
4
  export class StatePersistenceKeyDirective {
5
+ ngAfterContentInit() {
6
+ if (this.pagination && this.pagination.page) {
7
+ /* persist page size changes in local storage */
8
+ this.pagination.page.sizeChange.subscribe(pageSize => {
9
+ let state = JSON.parse(localStorage.getItem(this.clrStatePersistenceKey));
10
+ if (!state) {
11
+ state = {};
12
+ }
13
+ state.pageSize = pageSize;
14
+ localStorage.setItem(this.clrStatePersistenceKey, JSON.stringify(state));
15
+ });
16
+ /* init page size of datagrid if already persisted in local storage */
17
+ const state = JSON.parse(localStorage.getItem(this.clrStatePersistenceKey));
18
+ if (state && state.pageSize) {
19
+ /* postpone set size to other cycle as it is already set in this change detection cycle */
20
+ setTimeout(() => (this.pagination.page.size = state.pageSize));
21
+ }
22
+ }
23
+ }
4
24
  }
5
25
  StatePersistenceKeyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: StatePersistenceKeyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
- StatePersistenceKeyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: StatePersistenceKeyDirective, selector: "[clrStatePersistenceKey]", inputs: { clrStatePersistenceKey: "clrStatePersistenceKey" }, ngImport: i0 });
26
+ StatePersistenceKeyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: StatePersistenceKeyDirective, selector: "[clrStatePersistenceKey]", inputs: { clrStatePersistenceKey: "clrStatePersistenceKey" }, queries: [{ propertyName: "pagination", first: true, predicate: ClrDatagridPagination, descendants: true }], ngImport: i0 });
7
27
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: StatePersistenceKeyDirective, decorators: [{
8
28
  type: Directive,
9
29
  args: [{
@@ -11,5 +31,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
11
31
  }]
12
32
  }], propDecorators: { clrStatePersistenceKey: [{
13
33
  type: Input
34
+ }], pagination: [{
35
+ type: ContentChild,
36
+ args: [ClrDatagridPagination]
14
37
  }] } });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcGVyc2lzdGVuY2Uta2V5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlL3N0YXRlLXBlcnNpc3RlbmNlLWtleS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS2pELE1BQU0sT0FBTyw0QkFBNEI7O3lIQUE1Qiw0QkFBNEI7NkdBQTVCLDRCQUE0QjsyRkFBNUIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7aUJBQ3JDOzhCQUdDLHNCQUFzQjtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NsclN0YXRlUGVyc2lzdGVuY2VLZXldJyxcbn0pXG5leHBvcnQgY2xhc3MgU3RhdGVQZXJzaXN0ZW5jZUtleURpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpXG4gIGNsclN0YXRlUGVyc2lzdGVuY2VLZXk6IHN0cmluZztcbn1cbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcGVyc2lzdGVuY2Uta2V5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlL3N0YXRlLXBlcnNpc3RlbmNlLWtleS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBTXJELE1BQU0sT0FBTyw0QkFBNEI7SUFPdkMsa0JBQWtCO1FBQ2hCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUMzQyxnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbkQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFxQyxDQUFDO2dCQUM5RyxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNWLEtBQUssR0FBRyxFQUFzQyxDQUFDO2lCQUNoRDtnQkFDRCxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztnQkFDMUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzNFLENBQUMsQ0FBQyxDQUFDO1lBRUgsc0VBQXNFO1lBQ3RFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1lBQzVFLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQzNCLDBGQUEwRjtnQkFDMUYsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ2hFO1NBQ0Y7SUFDSCxDQUFDOzt5SEExQlUsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsc0tBSXpCLHFCQUFxQjsyRkFKeEIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7aUJBQ3JDOzhCQUdDLHNCQUFzQjtzQkFEckIsS0FBSztnQkFJTixVQUFVO3NCQURULFlBQVk7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ29udGVudENoaWxkLCBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDbHJEYXRhZ3JpZFBhZ2luYXRpb24gfSBmcm9tICdAY2xyL2FuZ3VsYXInO1xuaW1wb3J0IHsgQ2xyRGF0YWdyaWRTdGF0ZVBlcnNpc3RlbmNlTW9kZWwgfSBmcm9tICcuL2RhdGFncmlkLXN0YXRlLXBlcnNpc3RlbmNlLW1vZGVsLmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjbHJTdGF0ZVBlcnNpc3RlbmNlS2V5XScsXG59KVxuZXhwb3J0IGNsYXNzIFN0YXRlUGVyc2lzdGVuY2VLZXlEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgQElucHV0KClcbiAgY2xyU3RhdGVQZXJzaXN0ZW5jZUtleTogc3RyaW5nO1xuXG4gIEBDb250ZW50Q2hpbGQoQ2xyRGF0YWdyaWRQYWdpbmF0aW9uKVxuICBwYWdpbmF0aW9uOiBDbHJEYXRhZ3JpZFBhZ2luYXRpb247XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5wYWdpbmF0aW9uLnBhZ2UpIHtcbiAgICAgIC8qIHBlcnNpc3QgcGFnZSBzaXplIGNoYW5nZXMgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2Uuc2l6ZUNoYW5nZS5zdWJzY3JpYmUocGFnZVNpemUgPT4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY2xyU3RhdGVQZXJzaXN0ZW5jZUtleSkpIGFzIENsckRhdGFncmlkU3RhdGVQZXJzaXN0ZW5jZU1vZGVsO1xuICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgc3RhdGUgPSB7fSBhcyBDbHJEYXRhZ3JpZFN0YXRlUGVyc2lzdGVuY2VNb2RlbDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNsclN0YXRlUGVyc2lzdGVuY2VLZXksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XG4gICAgICB9KTtcblxuICAgICAgLyogaW5pdCBwYWdlIHNpemUgb2YgZGF0YWdyaWQgaWYgYWxyZWFkeSBwZXJzaXN0ZWQgaW4gbG9jYWwgc3RvcmFnZSAqL1xuICAgICAgY29uc3Qgc3RhdGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY2xyU3RhdGVQZXJzaXN0ZW5jZUtleSkpO1xuICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLnBhZ2VTaXplKSB7XG4gICAgICAgIC8qIHBvc3Rwb25lIHNldCBzaXplIHRvIG90aGVyIGN5Y2xlIGFzIGl0IGlzIGFscmVhZHkgc2V0IGluIHRoaXMgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSAqL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLnBhZ2luYXRpb24ucGFnZS5zaXplID0gc3RhdGUucGFnZVNpemUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -3,29 +3,59 @@
3
3
  * This software is released under MIT license.
4
4
  * The full license information can be found in LICENSE in the root directory of this project.
5
5
  */
6
- import { Directive, ElementRef, Input } from '@angular/core';
6
+ import { ContentChildren, Directive, ElementRef, Input, QueryList } from '@angular/core';
7
+ import { ClrDropdown } from '@clr/angular';
8
+ import { Subject } from 'rxjs';
9
+ import { takeUntil } from 'rxjs/operators';
7
10
  import * as i0 from "@angular/core";
8
11
  export class ClrDropdownOverflowDirective {
9
12
  constructor(elRef) {
10
13
  this.elRef = elRef;
11
14
  this.defaultItemMinHeightRem = 1.5;
12
15
  this.marginBottomRem = 0.1;
16
+ this.destroy$ = new Subject();
13
17
  }
14
- ngAfterViewInit() {
15
- this.calculateDropdownMenu();
18
+ ngAfterContentInit() {
19
+ // first trigger manually because the subscription lower only triggers after first change
20
+ if (!this.nestedDropdownChildren?.length) {
21
+ this.applyDropdownOverflowStyles();
22
+ }
23
+ this.nestedDropdownChildren.changes.pipe(takeUntil(this.destroy$)).subscribe((children) => {
24
+ // if there are any nested dropdowns, our overflow fix prevents those from showing and needs to be removed
25
+ if (!children?.length) {
26
+ this.applyDropdownOverflowStyles();
27
+ }
28
+ else if (children?.length) {
29
+ this.removeDropdownOverflowStyles();
30
+ }
31
+ });
32
+ }
33
+ ngOnDestroy() {
34
+ this.destroy$.next();
35
+ this.destroy$.complete();
16
36
  }
17
- calculateDropdownMenu() {
37
+ applyDropdownOverflowStyles() {
18
38
  // the vertical position of our element in the current window
19
39
  const y = this.elRef.nativeElement.getBoundingClientRect().y;
20
40
  const itemMinHeightPx = this.getItemMinHeight(this.clrDropdownMenuItemMinHeight);
21
41
  // see https://stackoverflow.com/questions/22754315/for-loop-for-htmlcollection-elements
22
- for (const item of this.elRef.nativeElement.getElementsByClassName('dropdown-item')) {
42
+ for (const item of this.getAllChildDropdownMenuItems()) {
23
43
  item.style.minHeight = itemMinHeightPx + 'px';
24
44
  }
25
45
  this.elRef.nativeElement.style.maxHeight =
26
46
  this.getMenuMaxHeight(this.clrDropdownMenuMaxHeight, window.innerHeight - y - this.convertRemToPixels(this.marginBottomRem)) + 'px';
27
47
  this.elRef.nativeElement.style.overflowY = 'auto';
28
48
  }
49
+ removeDropdownOverflowStyles() {
50
+ for (const item of this.getAllChildDropdownMenuItems()) {
51
+ item.style.minHeight = null;
52
+ }
53
+ this.elRef.nativeElement.style.maxHeight = null;
54
+ this.elRef.nativeElement.style.overflowY = null;
55
+ }
56
+ getAllChildDropdownMenuItems() {
57
+ return this.elRef.nativeElement.getElementsByClassName('dropdown-item');
58
+ }
29
59
  getMenuMaxHeight(menuMaxHeightProvided, menuMaxHeightPx) {
30
60
  if (menuMaxHeightProvided) {
31
61
  const maxHeightPx = this.convertToPixels(menuMaxHeightProvided);
@@ -63,7 +93,7 @@ export class ClrDropdownOverflowDirective {
63
93
  }
64
94
  }
65
95
  ClrDropdownOverflowDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ClrDropdownOverflowDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
66
- ClrDropdownOverflowDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: { clrDropdownMenuMaxHeight: "clrDropdownMenuMaxHeight", clrDropdownMenuItemMinHeight: "clrDropdownMenuItemMinHeight" }, ngImport: i0 });
96
+ ClrDropdownOverflowDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: { clrDropdownMenuMaxHeight: "clrDropdownMenuMaxHeight", clrDropdownMenuItemMinHeight: "clrDropdownMenuItemMinHeight" }, queries: [{ propertyName: "nestedDropdownChildren", predicate: ClrDropdown, descendants: true }], ngImport: i0 });
67
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ClrDropdownOverflowDirective, decorators: [{
68
98
  type: Directive,
69
99
  args: [{ selector: 'clr-dropdown-menu' }]
@@ -71,5 +101,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
71
101
  type: Input
72
102
  }], clrDropdownMenuItemMinHeight: [{
73
103
  type: Input
104
+ }], nestedDropdownChildren: [{
105
+ type: ContentChildren,
106
+ args: [ClrDropdown, { descendants: true }]
74
107
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xyLWRyb3Bkb3duLW92ZXJmbG93LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2Ryb3Bkb3duL2Nsci1kcm9wZG93bi1vdmVyZmxvdy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzVFLE1BQU0sT0FBTyw0QkFBNEI7SUFPdkMsWUFBMkIsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUg1Qiw0QkFBdUIsR0FBRyxHQUFHLENBQUM7UUFDOUIsb0JBQWUsR0FBRyxHQUFHLENBQUM7SUFFUyxDQUFDO0lBRXpDLGVBQWU7UUFDcEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQiw2REFBNkQ7UUFDN0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFN0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2pGLHdGQUF3RjtRQUN4RixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ25GLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDL0M7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUztZQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLElBQUksQ0FBQyx3QkFBd0IsRUFDN0IsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDdkUsR0FBRyxJQUFJLENBQUM7UUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztJQUNwRCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMscUJBQXNDLEVBQUUsZUFBdUI7UUFDdEYsSUFBSSxxQkFBcUIsRUFBRTtZQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDaEUsT0FBTyxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztTQUN0RTtRQUNELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxxQkFBc0M7UUFDN0QsSUFBSSxxQkFBcUIsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxlQUFlLENBQUMsS0FBc0I7UUFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzVDO2lCQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RTtpQkFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEU7WUFDRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQVc7UUFDcEMsT0FBTyxHQUFHLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRU8saUJBQWlCLENBQUMsRUFBVTtRQUNsQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUM3QyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFDMUIsQ0FBQzs7eUhBbkVVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBRHhDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUU7aUdBRWpDLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjIgUG9yc2NoZSBJbmZvcm1hdGlrLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ2Nsci1kcm9wZG93bi1tZW51JyB9KVxuZXhwb3J0IGNsYXNzIENsckRyb3Bkb3duT3ZlcmZsb3dEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgY2xyRHJvcGRvd25NZW51TWF4SGVpZ2h0OiBzdHJpbmcgfCBudW1iZXI7IC8vIGNhbiBiZSBvZiBweCwgcmVtLCB2aCwgb3IgYSBudW1iZXIgKHdoaWNoIHRoZW4gaXMgY29uc2lkZXJlZCBhcyBweCB2YWx1ZSlcbiAgQElucHV0KCkgY2xyRHJvcGRvd25NZW51SXRlbU1pbkhlaWdodDogc3RyaW5nIHwgbnVtYmVyOyAvLyBjYW4gYmUgb2YgcHgsIHJlbSwgdmgsIG9yIGEgbnVtYmVyICh3aGljaCB0aGVuIGlzIGNvbnNpZGVyZWQgYXMgcHggdmFsdWUpXG5cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRJdGVtTWluSGVpZ2h0UmVtID0gMS41O1xuICBwdWJsaWMgcmVhZG9ubHkgbWFyZ2luQm90dG9tUmVtID0gMC4xO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYWxjdWxhdGVEcm9wZG93bk1lbnUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlRHJvcGRvd25NZW51KCk6IHZvaWQge1xuICAgIC8vIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiBvdXIgZWxlbWVudCBpbiB0aGUgY3VycmVudCB3aW5kb3dcbiAgICBjb25zdCB5ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XG5cbiAgICBjb25zdCBpdGVtTWluSGVpZ2h0UHggPSB0aGlzLmdldEl0ZW1NaW5IZWlnaHQodGhpcy5jbHJEcm9wZG93bk1lbnVJdGVtTWluSGVpZ2h0KTtcbiAgICAvLyBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjI3NTQzMTUvZm9yLWxvb3AtZm9yLWh0bWxjb2xsZWN0aW9uLWVsZW1lbnRzXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdkcm9wZG93bi1pdGVtJykpIHtcbiAgICAgIGl0ZW0uc3R5bGUubWluSGVpZ2h0ID0gaXRlbU1pbkhlaWdodFB4ICsgJ3B4JztcbiAgICB9XG5cbiAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWF4SGVpZ2h0ID1cbiAgICAgIHRoaXMuZ2V0TWVudU1heEhlaWdodChcbiAgICAgICAgdGhpcy5jbHJEcm9wZG93bk1lbnVNYXhIZWlnaHQsXG4gICAgICAgIHdpbmRvdy5pbm5lckhlaWdodCAtIHkgLSB0aGlzLmNvbnZlcnRSZW1Ub1BpeGVscyh0aGlzLm1hcmdpbkJvdHRvbVJlbSlcbiAgICAgICkgKyAncHgnO1xuICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7XG4gIH1cblxuICBwcml2YXRlIGdldE1lbnVNYXhIZWlnaHQobWVudU1heEhlaWdodFByb3ZpZGVkOiBzdHJpbmcgfCBudW1iZXIsIG1lbnVNYXhIZWlnaHRQeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAobWVudU1heEhlaWdodFByb3ZpZGVkKSB7XG4gICAgICBjb25zdCBtYXhIZWlnaHRQeCA9IHRoaXMuY29udmVydFRvUGl4ZWxzKG1lbnVNYXhIZWlnaHRQcm92aWRlZCk7XG4gICAgICByZXR1cm4gbWF4SGVpZ2h0UHggPiBtZW51TWF4SGVpZ2h0UHggPyBtZW51TWF4SGVpZ2h0UHggOiBtYXhIZWlnaHRQeDtcbiAgICB9XG4gICAgcmV0dXJuIG1lbnVNYXhIZWlnaHRQeDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SXRlbU1pbkhlaWdodChpdGVtTWluSGVpZ2h0UHJvdmlkZWQ6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGl0ZW1NaW5IZWlnaHRQcm92aWRlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvUGl4ZWxzKGl0ZW1NaW5IZWlnaHRQcm92aWRlZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRSZW1Ub1BpeGVscyh0aGlzLmRlZmF1bHRJdGVtTWluSGVpZ2h0UmVtKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvUGl4ZWxzKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodmFsdWUuZW5kc1dpdGgoJ3B4JykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lbmRzV2l0aCgncmVtJykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydFJlbVRvUGl4ZWxzKHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncmVtJywgJycpKSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmVuZHNXaXRoKCd2aCcpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRWaFRvUGl4ZWxzKHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgndmgnLCAnJykpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UmVtVG9QaXhlbHMocmVtOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZW0gKiBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5mb250U2l6ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWaFRvUGl4ZWxzKHZoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHB4UGVyVmhVbml0ID0gd2luZG93LmlubmVySGVpZ2h0IC8gMTAwO1xuICAgIHJldHVybiB2aCAqIHB4UGVyVmhVbml0O1xuICB9XG59XG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xyLWRyb3Bkb3duLW92ZXJmbG93LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2Ryb3Bkb3duL2Nsci1kcm9wZG93bi1vdmVyZmxvdy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBb0IsZUFBZSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUczQyxNQUFNLE9BQU8sNEJBQTRCO0lBV3ZDLFlBQTJCLEtBQWlCO1FBQWpCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFMNUIsNEJBQXVCLEdBQUcsR0FBRyxDQUFDO1FBQzlCLG9CQUFlLEdBQUcsR0FBRyxDQUFDO1FBRTlCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRVEsQ0FBQztJQUVoRCxrQkFBa0I7UUFDaEIseUZBQXlGO1FBQ3pGLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxFQUFFO1lBQ3hDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWdDLEVBQUUsRUFBRTtZQUNoSCwwR0FBMEc7WUFDMUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2FBQ3BDO2lCQUFNLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRTtnQkFDM0IsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7YUFDckM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTywyQkFBMkI7UUFDakMsNkRBQTZEO1FBQzdELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTdELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNqRix3RkFBd0Y7UUFDeEYsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQy9DO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsd0JBQXdCLEVBQzdCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQ3ZFLEdBQUcsSUFBSSxDQUFDO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7SUFDcEQsQ0FBQztJQUVPLDRCQUE0QjtRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxFQUFFO1lBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUM3QjtRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ2xELENBQUM7SUFFTyw0QkFBNEI7UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sZ0JBQWdCLENBQUMscUJBQXNDLEVBQUUsZUFBdUI7UUFDdEYsSUFBSSxxQkFBcUIsRUFBRTtZQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDaEUsT0FBTyxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztTQUN0RTtRQUNELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxxQkFBc0M7UUFDN0QsSUFBSSxxQkFBcUIsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxlQUFlLENBQUMsS0FBc0I7UUFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzVDO2lCQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RTtpQkFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEU7WUFDRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQVc7UUFDcEMsT0FBTyxHQUFHLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRU8saUJBQWlCLENBQUMsRUFBVTtRQUNsQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUM3QyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFDMUIsQ0FBQzs7eUhBckdVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLGdPQUl0QixXQUFXOzJGQUpqQiw0QkFBNEI7a0JBRHhDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUU7aUdBRWpDLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBRXVELHNCQUFzQjtzQkFBbEYsZUFBZTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIyIFBvcnNjaGUgSW5mb3JtYXRpay4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2xyRHJvcGRvd24gfSBmcm9tICdAY2xyL2FuZ3VsYXInO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdjbHItZHJvcGRvd24tbWVudScgfSlcbmV4cG9ydCBjbGFzcyBDbHJEcm9wZG93bk92ZXJmbG93RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgY2xyRHJvcGRvd25NZW51TWF4SGVpZ2h0OiBzdHJpbmcgfCBudW1iZXI7IC8vIGNhbiBiZSBvZiBweCwgcmVtLCB2aCwgb3IgYSBudW1iZXIgKHdoaWNoIHRoZW4gaXMgY29uc2lkZXJlZCBhcyBweCB2YWx1ZSlcbiAgQElucHV0KCkgY2xyRHJvcGRvd25NZW51SXRlbU1pbkhlaWdodDogc3RyaW5nIHwgbnVtYmVyOyAvLyBjYW4gYmUgb2YgcHgsIHJlbSwgdmgsIG9yIGEgbnVtYmVyICh3aGljaCB0aGVuIGlzIGNvbnNpZGVyZWQgYXMgcHggdmFsdWUpXG5cbiAgQENvbnRlbnRDaGlsZHJlbihDbHJEcm9wZG93biwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwcml2YXRlIG5lc3RlZERyb3Bkb3duQ2hpbGRyZW46IFF1ZXJ5TGlzdDxDbHJEcm9wZG93bj47XG5cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRJdGVtTWluSGVpZ2h0UmVtID0gMS41O1xuICBwdWJsaWMgcmVhZG9ubHkgbWFyZ2luQm90dG9tUmVtID0gMC4xO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBmaXJzdCB0cmlnZ2VyIG1hbnVhbGx5IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiBsb3dlciBvbmx5IHRyaWdnZXJzIGFmdGVyIGZpcnN0IGNoYW5nZVxuICAgIGlmICghdGhpcy5uZXN0ZWREcm9wZG93bkNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYXBwbHlEcm9wZG93bk92ZXJmbG93U3R5bGVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5uZXN0ZWREcm9wZG93bkNoaWxkcmVuLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoY2hpbGRyZW46IFF1ZXJ5TGlzdDxDbHJEcm9wZG93bj4pID0+IHtcbiAgICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgbmVzdGVkIGRyb3Bkb3ducywgb3VyIG92ZXJmbG93IGZpeCBwcmV2ZW50cyB0aG9zZSBmcm9tIHNob3dpbmcgYW5kIG5lZWRzIHRvIGJlIHJlbW92ZWRcbiAgICAgIGlmICghY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmFwcGx5RHJvcGRvd25PdmVyZmxvd1N0eWxlcygpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRHJvcGRvd25PdmVyZmxvd1N0eWxlcygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURyb3Bkb3duT3ZlcmZsb3dTdHlsZXMoKTogdm9pZCB7XG4gICAgLy8gdGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIG91ciBlbGVtZW50IGluIHRoZSBjdXJyZW50IHdpbmRvd1xuICAgIGNvbnN0IHkgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueTtcblxuICAgIGNvbnN0IGl0ZW1NaW5IZWlnaHRQeCA9IHRoaXMuZ2V0SXRlbU1pbkhlaWdodCh0aGlzLmNsckRyb3Bkb3duTWVudUl0ZW1NaW5IZWlnaHQpO1xuICAgIC8vIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMjc1NDMxNS9mb3ItbG9vcC1mb3ItaHRtbGNvbGxlY3Rpb24tZWxlbWVudHNcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5nZXRBbGxDaGlsZERyb3Bkb3duTWVudUl0ZW1zKCkpIHtcbiAgICAgIGl0ZW0uc3R5bGUubWluSGVpZ2h0ID0gaXRlbU1pbkhlaWdodFB4ICsgJ3B4JztcbiAgICB9XG5cbiAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWF4SGVpZ2h0ID1cbiAgICAgIHRoaXMuZ2V0TWVudU1heEhlaWdodChcbiAgICAgICAgdGhpcy5jbHJEcm9wZG93bk1lbnVNYXhIZWlnaHQsXG4gICAgICAgIHdpbmRvdy5pbm5lckhlaWdodCAtIHkgLSB0aGlzLmNvbnZlcnRSZW1Ub1BpeGVscyh0aGlzLm1hcmdpbkJvdHRvbVJlbSlcbiAgICAgICkgKyAncHgnO1xuICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZURyb3Bkb3duT3ZlcmZsb3dTdHlsZXMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZ2V0QWxsQ2hpbGREcm9wZG93bk1lbnVJdGVtcygpKSB7XG4gICAgICBpdGVtLnN0eWxlLm1pbkhlaWdodCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLm1heEhlaWdodCA9IG51bGw7XG4gICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldEFsbENoaWxkRHJvcGRvd25NZW51SXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdkcm9wZG93bi1pdGVtJyk7XG4gIH1cblxuICBwcml2YXRlIGdldE1lbnVNYXhIZWlnaHQobWVudU1heEhlaWdodFByb3ZpZGVkOiBzdHJpbmcgfCBudW1iZXIsIG1lbnVNYXhIZWlnaHRQeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAobWVudU1heEhlaWdodFByb3ZpZGVkKSB7XG4gICAgICBjb25zdCBtYXhIZWlnaHRQeCA9IHRoaXMuY29udmVydFRvUGl4ZWxzKG1lbnVNYXhIZWlnaHRQcm92aWRlZCk7XG4gICAgICByZXR1cm4gbWF4SGVpZ2h0UHggPiBtZW51TWF4SGVpZ2h0UHggPyBtZW51TWF4SGVpZ2h0UHggOiBtYXhIZWlnaHRQeDtcbiAgICB9XG4gICAgcmV0dXJuIG1lbnVNYXhIZWlnaHRQeDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SXRlbU1pbkhlaWdodChpdGVtTWluSGVpZ2h0UHJvdmlkZWQ6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGl0ZW1NaW5IZWlnaHRQcm92aWRlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvUGl4ZWxzKGl0ZW1NaW5IZWlnaHRQcm92aWRlZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRSZW1Ub1BpeGVscyh0aGlzLmRlZmF1bHRJdGVtTWluSGVpZ2h0UmVtKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvUGl4ZWxzKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodmFsdWUuZW5kc1dpdGgoJ3B4JykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lbmRzV2l0aCgncmVtJykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydFJlbVRvUGl4ZWxzKHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncmVtJywgJycpKSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmVuZHNXaXRoKCd2aCcpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRWaFRvUGl4ZWxzKHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgndmgnLCAnJykpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UmVtVG9QaXhlbHMocmVtOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZW0gKiBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5mb250U2l6ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWaFRvUGl4ZWxzKHZoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHB4UGVyVmhVbml0ID0gd2luZG93LmlubmVySGVpZ2h0IC8gMTAwO1xuICAgIHJldHVybiB2aCAqIHB4UGVyVmhVbml0O1xuICB9XG59XG4iXX0=
@@ -3,7 +3,7 @@
3
3
  * This software is released under MIT license.
4
4
  * The full license information can be found in LICENSE in the root directory of this project.
5
5
  */
6
- import { Component, forwardRef, Injector } from '@angular/core';
6
+ import { Component, forwardRef, Injector, Input } from '@angular/core';
7
7
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
8
8
  import { ControlIdService } from '../../abstract-form-component/control-id.service';
9
9
  import { ClrMultilingualAbstract } from '../abstract-multilingual';
@@ -18,14 +18,14 @@ export class ClrMultilingualTextarea extends ClrMultilingualAbstract {
18
18
  }
19
19
  }
20
20
  ClrMultilingualTextarea.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ClrMultilingualTextarea, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
21
- ClrMultilingualTextarea.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: ClrMultilingualTextarea, selector: "clr-multilingual-textarea", providers: [
21
+ ClrMultilingualTextarea.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: ClrMultilingualTextarea, selector: "clr-multilingual-textarea", inputs: { rows: "rows" }, providers: [
22
22
  {
23
23
  provide: NG_VALUE_ACCESSOR,
24
24
  useExisting: forwardRef(() => ClrMultilingualTextarea),
25
25
  multi: true,
26
26
  },
27
27
  ControlIdService,
28
- ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n", components: [{ type: i1.ClrMultilingualSelector, selector: "clr-multilingual-selector", inputs: ["disabled", "texts", "selectedLang"], outputs: ["selectedLangChange"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }] });
28
+ ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n [rows]=\"rows || 1\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n", components: [{ type: i1.ClrMultilingualSelector, selector: "clr-multilingual-selector", inputs: ["disabled", "texts", "selectedLang"], outputs: ["selectedLangChange"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }] });
29
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ClrMultilingualTextarea, decorators: [{
30
30
  type: Component,
31
31
  args: [{ selector: 'clr-multilingual-textarea', providers: [
@@ -35,6 +35,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
35
35
  multi: true,
36
36
  },
37
37
  ControlIdService,
38
- ], template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n" }]
39
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlsaW5ndWFsLXRleHRhcmVhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvbXVsdGlsaW5ndWFsL211bHRpbGluZ3VhbC10ZXh0YXJlYS9tdWx0aWxpbmd1YWwtdGV4dGFyZWEudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9tdWx0aWxpbmd1YWwvbXVsdGlsaW5ndWFsLXRleHRhcmVhL211bHRpbGluZ3VhbC10ZXh0YXJlYS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQWNuRSxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsdUJBQXVCO0lBQ2xFLFlBQVksUUFBa0I7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7O29IQUhVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLG9EQVR2QjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO1lBQ3RELEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRCxnQkFBZ0I7S0FDakIsaURDcEJILG9xQ0E2QkE7MkZEUGEsdUJBQXVCO2tCQVpuQyxTQUFTOytCQUNFLDJCQUEyQixhQUUxQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQzs0QkFDdEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0QsZ0JBQWdCO3FCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBQb3JzY2hlIEluZm9ybWF0aWsuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5pbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbnRyb2xJZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hYnN0cmFjdC1mb3JtLWNvbXBvbmVudC9jb250cm9sLWlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2xyTXVsdGlsaW5ndWFsQWJzdHJhY3QgfSBmcm9tICcuLi9hYnN0cmFjdC1tdWx0aWxpbmd1YWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItbXVsdGlsaW5ndWFsLXRleHRhcmVhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpbGluZ3VhbC10ZXh0YXJlYS5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDbHJNdWx0aWxpbmd1YWxUZXh0YXJlYSksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIENvbnRyb2xJZFNlcnZpY2UsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENsck11bHRpbGluZ3VhbFRleHRhcmVhIGV4dGVuZHMgQ2xyTXVsdGlsaW5ndWFsQWJzdHJhY3Qge1xuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImxhYmVsXCI+PC9uZy1jb250ZW50PlxuPGRpdiBjbGFzcz1cImNsci1jb250cm9sLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cImNvbnRyb2xDbGFzc2VzXCI+XG4gIDxjbHItbXVsdGlsaW5ndWFsLXNlbGVjdG9yXG4gICAgKm5nSWY9XCJzaG93TGFuZ3VhZ2VTZWxlY3RvcigpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFt0ZXh0c109XCJzaG93blRleHRzXCJcbiAgICBbc2VsZWN0ZWRMYW5nXT1cInNlbGVjdGVkTGFuZ1wiXG4gICAgKHNlbGVjdGVkTGFuZ0NoYW5nZSk9XCJjaGFuZ2VMYW5ndWFnZSgkZXZlbnQpXCJcbiAgPlxuICA8L2Nsci1tdWx0aWxpbmd1YWwtc2VsZWN0b3I+XG4gIDxkaXYgY2xhc3M9XCJjbHItbXVsdGktaW5wdXQtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJjbHItdGV4dGFyZWEtd3JhcHBlclwiPlxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGNsYXNzPVwiY2xyLXRleHRhcmVhXCJcbiAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICBbbmdNb2RlbF09XCIhIXNob3duVGV4dHMgJiYgISFzZWxlY3RlZExhbmcgPyBzaG93blRleHRzLmdldChzZWxlY3RlZExhbmcpIDogJydcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRUZXh0KHNlbGVjdGVkTGFuZywgJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2goKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSB8fCByZWFkb25seSA9PT0gJydcIlxuICAgICAgICBbbWF4bGVuZ3RoXT1cIm1heGxlbmd0aCB8fCBudWxsXCJcbiAgICAgICAgI2lucHV0XG4gICAgICA+PC90ZXh0YXJlYT5cbiAgICAgIDxjbHItaWNvbiAqbmdJZj1cInNob3dFcnJvclwiIGNsYXNzPVwiY2xyLXZhbGlkYXRlLWljb25cIiBzaGFwZT1cImV4Y2xhbWF0aW9uLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvY2xyLWljb24+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiY2xyLWNvbnRyb2wtaGVscGVyXCIgKm5nSWY9XCIhc2hvd0Vycm9yXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImNsci1jb250cm9sLWVycm9yXCIgKm5nSWY9XCJzaG93RXJyb3JcIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
38
+ ], template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n [rows]=\"rows || 1\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n" }]
39
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { rows: [{
40
+ type: Input
41
+ }] } });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlsaW5ndWFsLXRleHRhcmVhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvbXVsdGlsaW5ndWFsL211bHRpbGluZ3VhbC10ZXh0YXJlYS9tdWx0aWxpbmd1YWwtdGV4dGFyZWEudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9tdWx0aWxpbmd1YWwvbXVsdGlsaW5ndWFsLXRleHRhcmVhL211bHRpbGluZ3VhbC10ZXh0YXJlYS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7QUFjbkUsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHVCQUF1QjtJQUVsRSxZQUFZLFFBQWtCO1FBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQixDQUFDOztvSEFKVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw4RUFUdkI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztZQUN0RCxLQUFLLEVBQUUsSUFBSTtTQUNaO1FBQ0QsZ0JBQWdCO0tBQ2pCLGlEQ3BCSCxrc0NBOEJBOzJGRFJhLHVCQUF1QjtrQkFabkMsU0FBUzsrQkFDRSwyQkFBMkIsYUFFMUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELGdCQUFnQjtxQkFDakI7K0ZBR1EsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIyIFBvcnNjaGUgSW5mb3JtYXRpay4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbnRyb2xJZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hYnN0cmFjdC1mb3JtLWNvbXBvbmVudC9jb250cm9sLWlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2xyTXVsdGlsaW5ndWFsQWJzdHJhY3QgfSBmcm9tICcuLi9hYnN0cmFjdC1tdWx0aWxpbmd1YWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItbXVsdGlsaW5ndWFsLXRleHRhcmVhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpbGluZ3VhbC10ZXh0YXJlYS5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDbHJNdWx0aWxpbmd1YWxUZXh0YXJlYSksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIENvbnRyb2xJZFNlcnZpY2UsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENsck11bHRpbGluZ3VhbFRleHRhcmVhIGV4dGVuZHMgQ2xyTXVsdGlsaW5ndWFsQWJzdHJhY3Qge1xuICBASW5wdXQoKSByb3dzOiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwibGFiZWxcIj48L25nLWNvbnRlbnQ+XG48ZGl2IGNsYXNzPVwiY2xyLWNvbnRyb2wtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiY29udHJvbENsYXNzZXNcIj5cbiAgPGNsci1tdWx0aWxpbmd1YWwtc2VsZWN0b3JcbiAgICAqbmdJZj1cInNob3dMYW5ndWFnZVNlbGVjdG9yKClcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3RleHRzXT1cInNob3duVGV4dHNcIlxuICAgIFtzZWxlY3RlZExhbmddPVwic2VsZWN0ZWRMYW5nXCJcbiAgICAoc2VsZWN0ZWRMYW5nQ2hhbmdlKT1cImNoYW5nZUxhbmd1YWdlKCRldmVudClcIlxuICA+XG4gIDwvY2xyLW11bHRpbGluZ3VhbC1zZWxlY3Rvcj5cbiAgPGRpdiBjbGFzcz1cImNsci1tdWx0aS1pbnB1dC13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNsci10ZXh0YXJlYS13cmFwcGVyXCI+XG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgY2xhc3M9XCJjbHItdGV4dGFyZWFcIlxuICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgIFtuZ01vZGVsXT1cIiEhc2hvd25UZXh0cyAmJiAhIXNlbGVjdGVkTGFuZyA/IHNob3duVGV4dHMuZ2V0KHNlbGVjdGVkTGFuZykgOiAnJ1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldFRleHQoc2VsZWN0ZWRMYW5nLCAkZXZlbnQpXCJcbiAgICAgICAgKGJsdXIpPVwib25Ub3VjaCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5IHx8IHJlYWRvbmx5ID09PSAnJ1wiXG4gICAgICAgIFttYXhsZW5ndGhdPVwibWF4bGVuZ3RoIHx8IG51bGxcIlxuICAgICAgICBbcm93c109XCJyb3dzIHx8IDFcIlxuICAgICAgICAjaW5wdXRcbiAgICAgID48L3RleHRhcmVhPlxuICAgICAgPGNsci1pY29uICpuZ0lmPVwic2hvd0Vycm9yXCIgY2xhc3M9XCJjbHItdmFsaWRhdGUtaWNvblwiIHNoYXBlPVwiZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9jbHItaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJjbHItY29udHJvbC1oZWxwZXJcIiAqbmdJZj1cIiFzaG93RXJyb3JcIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiY2xyLWNvbnRyb2wtZXJyb3JcIiAqbmdJZj1cInNob3dFcnJvclwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, NgModule, Injectable, EventEmitter, Input, Output, Directive, ViewChild, TemplateRef, ContentChildren, ViewChildren, HostBinding, ElementRef, Renderer2, forwardRef, ContentChild, HostListener, InjectionToken, Inject, Optional } from '@angular/core';
2
+ import { Component, NgModule, Injectable, EventEmitter, Input, Output, Directive, ViewChild, ContentChildren, TemplateRef, ViewChildren, HostBinding, ElementRef, Renderer2, forwardRef, ContentChild, HostListener, InjectionToken, Inject, Optional } from '@angular/core';
3
3
  import * as i2 from '@angular/common';
4
4
  import { CommonModule, DOCUMENT } from '@angular/common';
5
5
  import * as i3$1 from '@angular/forms';
6
6
  import { FormsModule, NG_VALIDATORS, NgControl, NG_VALUE_ACCESSOR } from '@angular/forms';
7
7
  import * as i1 from '@clr/angular';
8
- import { ClarityModule, ClrFormsModule, ClrForm, ClrAlert, ClrAxis, ClrSide, ClrAlignment, ClrPopoverToggleService, ClrPopoverEventsService, ClrPopoverPositionService, ClrIconModule, ClrDropdownModule } from '@clr/angular';
8
+ import { ClarityModule, ClrFormsModule, ClrDropdown, ClrForm, ClrAlert, ClrAxis, ClrSide, ClrAlignment, ClrPopoverToggleService, ClrPopoverEventsService, ClrPopoverPositionService, ClrIconModule, ClrDropdownModule, ClrDatagridPagination } from '@clr/angular';
9
9
  import { Subject, BehaviorSubject, timer, asyncScheduler, interval, of, ReplaySubject, takeUntil as takeUntil$1 } from 'rxjs';
10
10
  import { takeUntil, observeOn, take } from 'rxjs/operators';
11
11
  import * as i3 from '@angular/router';
@@ -645,22 +645,50 @@ class ClrDropdownOverflowDirective {
645
645
  this.elRef = elRef;
646
646
  this.defaultItemMinHeightRem = 1.5;
647
647
  this.marginBottomRem = 0.1;
648
+ this.destroy$ = new Subject();
648
649
  }
649
- ngAfterViewInit() {
650
- this.calculateDropdownMenu();
650
+ ngAfterContentInit() {
651
+ var _a;
652
+ // first trigger manually because the subscription lower only triggers after first change
653
+ if (!((_a = this.nestedDropdownChildren) === null || _a === void 0 ? void 0 : _a.length)) {
654
+ this.applyDropdownOverflowStyles();
655
+ }
656
+ this.nestedDropdownChildren.changes.pipe(takeUntil(this.destroy$)).subscribe((children) => {
657
+ // if there are any nested dropdowns, our overflow fix prevents those from showing and needs to be removed
658
+ if (!(children === null || children === void 0 ? void 0 : children.length)) {
659
+ this.applyDropdownOverflowStyles();
660
+ }
661
+ else if (children === null || children === void 0 ? void 0 : children.length) {
662
+ this.removeDropdownOverflowStyles();
663
+ }
664
+ });
665
+ }
666
+ ngOnDestroy() {
667
+ this.destroy$.next();
668
+ this.destroy$.complete();
651
669
  }
652
- calculateDropdownMenu() {
670
+ applyDropdownOverflowStyles() {
653
671
  // the vertical position of our element in the current window
654
672
  const y = this.elRef.nativeElement.getBoundingClientRect().y;
655
673
  const itemMinHeightPx = this.getItemMinHeight(this.clrDropdownMenuItemMinHeight);
656
674
  // see https://stackoverflow.com/questions/22754315/for-loop-for-htmlcollection-elements
657
- for (const item of this.elRef.nativeElement.getElementsByClassName('dropdown-item')) {
675
+ for (const item of this.getAllChildDropdownMenuItems()) {
658
676
  item.style.minHeight = itemMinHeightPx + 'px';
659
677
  }
660
678
  this.elRef.nativeElement.style.maxHeight =
661
679
  this.getMenuMaxHeight(this.clrDropdownMenuMaxHeight, window.innerHeight - y - this.convertRemToPixels(this.marginBottomRem)) + 'px';
662
680
  this.elRef.nativeElement.style.overflowY = 'auto';
663
681
  }
682
+ removeDropdownOverflowStyles() {
683
+ for (const item of this.getAllChildDropdownMenuItems()) {
684
+ item.style.minHeight = null;
685
+ }
686
+ this.elRef.nativeElement.style.maxHeight = null;
687
+ this.elRef.nativeElement.style.overflowY = null;
688
+ }
689
+ getAllChildDropdownMenuItems() {
690
+ return this.elRef.nativeElement.getElementsByClassName('dropdown-item');
691
+ }
664
692
  getMenuMaxHeight(menuMaxHeightProvided, menuMaxHeightPx) {
665
693
  if (menuMaxHeightProvided) {
666
694
  const maxHeightPx = this.convertToPixels(menuMaxHeightProvided);
@@ -698,7 +726,7 @@ class ClrDropdownOverflowDirective {
698
726
  }
699
727
  }
700
728
  ClrDropdownOverflowDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ClrDropdownOverflowDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
701
- ClrDropdownOverflowDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: { clrDropdownMenuMaxHeight: "clrDropdownMenuMaxHeight", clrDropdownMenuItemMinHeight: "clrDropdownMenuItemMinHeight" }, ngImport: i0 });
729
+ ClrDropdownOverflowDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: ClrDropdownOverflowDirective, selector: "clr-dropdown-menu", inputs: { clrDropdownMenuMaxHeight: "clrDropdownMenuMaxHeight", clrDropdownMenuItemMinHeight: "clrDropdownMenuItemMinHeight" }, queries: [{ propertyName: "nestedDropdownChildren", predicate: ClrDropdown, descendants: true }], ngImport: i0 });
702
730
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ClrDropdownOverflowDirective, decorators: [{
703
731
  type: Directive,
704
732
  args: [{ selector: 'clr-dropdown-menu' }]
@@ -706,6 +734,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
706
734
  type: Input
707
735
  }], clrDropdownMenuItemMinHeight: [{
708
736
  type: Input
737
+ }], nestedDropdownChildren: [{
738
+ type: ContentChildren,
739
+ args: [ClrDropdown, { descendants: true }]
709
740
  }] } });
710
741
 
711
742
  /*
@@ -1746,14 +1777,14 @@ class ClrMultilingualTextarea extends ClrMultilingualAbstract {
1746
1777
  }
1747
1778
  }
1748
1779
  ClrMultilingualTextarea.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ClrMultilingualTextarea, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
1749
- ClrMultilingualTextarea.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: ClrMultilingualTextarea, selector: "clr-multilingual-textarea", providers: [
1780
+ ClrMultilingualTextarea.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: ClrMultilingualTextarea, selector: "clr-multilingual-textarea", inputs: { rows: "rows" }, providers: [
1750
1781
  {
1751
1782
  provide: NG_VALUE_ACCESSOR,
1752
1783
  useExisting: forwardRef(() => ClrMultilingualTextarea),
1753
1784
  multi: true,
1754
1785
  },
1755
1786
  ControlIdService,
1756
- ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n", components: [{ type: ClrMultilingualSelector, selector: "clr-multilingual-selector", inputs: ["disabled", "texts", "selectedLang"], outputs: ["selectedLangChange"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i1.ClrIconCustomTag, selector: "clr-icon" }] });
1787
+ ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n [rows]=\"rows || 1\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n", components: [{ type: ClrMultilingualSelector, selector: "clr-multilingual-selector", inputs: ["disabled", "texts", "selectedLang"], outputs: ["selectedLangChange"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i1.ClrIconCustomTag, selector: "clr-icon" }] });
1757
1788
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ClrMultilingualTextarea, decorators: [{
1758
1789
  type: Component,
1759
1790
  args: [{ selector: 'clr-multilingual-textarea', providers: [
@@ -1763,8 +1794,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
1763
1794
  multi: true,
1764
1795
  },
1765
1796
  ControlIdService,
1766
- ], template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n" }]
1767
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
1797
+ ], template: "<ng-content select=\"label\"></ng-content>\n<div class=\"clr-control-container\" [ngClass]=\"controlClasses\">\n <clr-multilingual-selector\n *ngIf=\"showLanguageSelector()\"\n [disabled]=\"disabled\"\n [texts]=\"shownTexts\"\n [selectedLang]=\"selectedLang\"\n (selectedLangChange)=\"changeLanguage($event)\"\n >\n </clr-multilingual-selector>\n <div class=\"clr-multi-input-wrapper\">\n <div class=\"clr-textarea-wrapper\">\n <textarea\n class=\"clr-textarea\"\n [id]=\"inputId\"\n [ngModel]=\"!!shownTexts && !!selectedLang ? shownTexts.get(selectedLang) : ''\"\n (ngModelChange)=\"setText(selectedLang, $event)\"\n (blur)=\"onTouch()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly || readonly === ''\"\n [maxlength]=\"maxlength || null\"\n [rows]=\"rows || 1\"\n #input\n ></textarea>\n <clr-icon *ngIf=\"showError\" class=\"clr-validate-icon\" shape=\"exclamation-circle\" aria-hidden=\"true\"></clr-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"!showError\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showError\"></ng-content>\n </div>\n</div>\n" }]
1798
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { rows: [{
1799
+ type: Input
1800
+ }] } });
1768
1801
 
1769
1802
  /*
1770
1803
  * Copyright (c) 2018-2022 Porsche Informatik. All Rights Reserved.
@@ -4581,9 +4614,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
4581
4614
  }] } });
4582
4615
 
4583
4616
  class StatePersistenceKeyDirective {
4617
+ ngAfterContentInit() {
4618
+ if (this.pagination && this.pagination.page) {
4619
+ /* persist page size changes in local storage */
4620
+ this.pagination.page.sizeChange.subscribe(pageSize => {
4621
+ let state = JSON.parse(localStorage.getItem(this.clrStatePersistenceKey));
4622
+ if (!state) {
4623
+ state = {};
4624
+ }
4625
+ state.pageSize = pageSize;
4626
+ localStorage.setItem(this.clrStatePersistenceKey, JSON.stringify(state));
4627
+ });
4628
+ /* init page size of datagrid if already persisted in local storage */
4629
+ const state = JSON.parse(localStorage.getItem(this.clrStatePersistenceKey));
4630
+ if (state && state.pageSize) {
4631
+ /* postpone set size to other cycle as it is already set in this change detection cycle */
4632
+ setTimeout(() => (this.pagination.page.size = state.pageSize));
4633
+ }
4634
+ }
4635
+ }
4584
4636
  }
4585
4637
  StatePersistenceKeyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: StatePersistenceKeyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4586
- StatePersistenceKeyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: StatePersistenceKeyDirective, selector: "[clrStatePersistenceKey]", inputs: { clrStatePersistenceKey: "clrStatePersistenceKey" }, ngImport: i0 });
4638
+ StatePersistenceKeyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: StatePersistenceKeyDirective, selector: "[clrStatePersistenceKey]", inputs: { clrStatePersistenceKey: "clrStatePersistenceKey" }, queries: [{ propertyName: "pagination", first: true, predicate: ClrDatagridPagination, descendants: true }], ngImport: i0 });
4587
4639
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: StatePersistenceKeyDirective, decorators: [{
4588
4640
  type: Directive,
4589
4641
  args: [{
@@ -4591,6 +4643,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
4591
4643
  }]
4592
4644
  }], propDecorators: { clrStatePersistenceKey: [{
4593
4645
  type: Input
4646
+ }], pagination: [{
4647
+ type: ContentChild,
4648
+ args: [ClrDatagridPagination]
4594
4649
  }] } });
4595
4650
 
4596
4651
  class ColumnHiddenStatePersistenceDirective {
@@ -4617,10 +4672,9 @@ class ColumnHiddenStatePersistenceDirective {
4617
4672
  if (persistedGridStateJson !== null) {
4618
4673
  const persistedGridState = JSON.parse(persistedGridStateJson);
4619
4674
  /* read column state if existing */
4620
- const persistedColumnState = persistedGridState[this.columnDirective.clrDgField];
4621
- if (persistedColumnState) {
4675
+ if (persistedGridState.columns && persistedGridState.columns[this.columnDirective.clrDgField]) {
4622
4676
  /* read column hidden state if existing */
4623
- const persistedColumnHiddenState = persistedColumnState.hidden;
4677
+ const persistedColumnHiddenState = persistedGridState.columns[this.columnDirective.clrDgField].hidden;
4624
4678
  if (persistedColumnHiddenState) {
4625
4679
  this.hideableColumnDirective.clrDgHidden = persistedColumnHiddenState === true;
4626
4680
  }
@@ -4637,10 +4691,13 @@ class ColumnHiddenStatePersistenceDirective {
4637
4691
  persistedGridState = JSON.parse(persistedGridStateJson);
4638
4692
  }
4639
4693
  /* read column state if existing */
4640
- let persistedColumnState = persistedGridState[this.columnDirective.clrDgField];
4694
+ if (!persistedGridState.columns) {
4695
+ persistedGridState.columns = {};
4696
+ }
4697
+ let persistedColumnState = persistedGridState.columns[this.columnDirective.clrDgField];
4641
4698
  if (!persistedColumnState) {
4642
4699
  persistedColumnState = {};
4643
- persistedGridState[this.columnDirective.clrDgField] = persistedColumnState;
4700
+ persistedGridState.columns[this.columnDirective.clrDgField] = persistedColumnState;
4644
4701
  }
4645
4702
  /* set column hidden state and persist in local storage */
4646
4703
  persistedColumnState.hidden = hidden;